Exemples de Code

Exemples de code pratiques et modèles pour vous aider à tirer le meilleur parti de Gemini CLI. De l'utilisation de base aux modèles d'automatisation et d'intégration avancés.

Utilisation de Base

Exemples simples pour commencer avec Gemini CLI

Chat Simple

Commencer une conversation de base avec Gemini

bashCode
# Démarrer un chat interactif
gemini chat

# Poser une question
gemini ask "Qu'est-ce que l'apprentissage automatique ?"

# Demander avec un modèle spécifique
gemini ask "Expliquer l'informatique quantique" --model gemini-pro

Analyse de Fichiers

Analyser les fichiers de code avec l'assistance IA

bashCode
# Analyser un seul fichier
gemini analyze src/main.js

# Analyser plusieurs fichiers
gemini analyze src/*.js --type code-review

# Obtenir des suggestions de code
gemini analyze package.json --suggest-improvements

Gestion de Configuration

Gestion de configuration de base

bashCode
# Voir la configuration actuelle
gemini config list

# Définir le modèle par défaut
gemini config set model gemini-pro

# Définir la température
gemini config set temperature 0.7

# Réinitialiser aux valeurs par défaut
gemini config reset

Scripts d'Automatisation

Scripts pour automatiser les tâches de développement

Script de Révision de Code

Révision de code automatisée pour les pull requests

bashCode
#!/bin/bash
# code-review.sh - Script de révision de code automatisée

# Obtenir les fichiers modifiés
CHANGED_FILES=\$(git diff --name-only HEAD~1)

echo "🔍 Démarrage de la révision de code automatisée..."

for file in $CHANGED_FILES; do
  if [[ $file == *.js || $file == *.ts || $file == *.py ]]; then
    echo "📝 Révision en cours: $file"

    # Analyser le fichier
    gemini analyze "$file" \
      --type code-review \
      --prompt "Réviser ce code pour les erreurs, problèmes de performance et meilleures pratiques" \
      --output review-$file.md
  fi
done

echo "✅ Révision de code terminée! Vérifiez les fichiers review-*.md"

Générateur de Documentation

Générer de la documentation à partir du code

bashCode
#!/bin/bash
# generate-docs.sh - Génération automatique de documentation

echo "📚 Génération de la documentation..."

# Générer la documentation API
gemini analyze src/api/*.js \
  --prompt "Générer une documentation API complète avec des exemples" \
  --output docs/api.md

# Générer README
gemini ask "Créer un README.md pour ce projet basé sur la base de code" \
  --context src/ \
  --output README.md

# Générer le changelog
git log --oneline --since="1 month ago" | \
  gemini ask "Convertir ces commits git en changelog" \
  --output CHANGELOG.md

echo "✅ Génération de documentation terminée!"

Générateur de Tests

Générer automatiquement des tests unitaires

bashCode
#!/bin/bash
# generate-tests.sh - Génération automatique de tests unitaires

SOURCE_DIR="src"
TEST_DIR="tests"

echo "🧪 Génération des tests unitaires..."

find $SOURCE_DIR -name "*.js" -o -name "*.ts" | while read file; do
  # Obtenir le chemin relatif
  rel_path=\$\{file#\$SOURCE_DIR/\}
  test_file="\$TEST_DIR/\$\{rel_path%.*\}.test.\$\{file##*.\}"

  echo "📝 Génération des tests pour: $file"

  gemini analyze "$file" \
    --prompt "Générer des tests unitaires complets avec des cas limites" \
    --template jest \
    --output "$test_file"
done

echo "✅ Génération des tests terminée!"

Exemples d'Intégration

Intégrer Gemini CLI avec d'autres outils et flux de travail

Flux de Travail GitHub Actions

Intégration CI/CD avec GitHub Actions

yamlCode
name: Révision de Code IA
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  ai-review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Configurer Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Installer Gemini CLI
        run: npm install -g @google/generative-ai-cli

      - name: Configurer Gemini CLI
        run: |
          gemini config set api-key \$\{\{ secrets.GEMINI_API_KEY \}\}
          gemini config set model gemini-pro

      - name: Obtenir les fichiers modifiés
        id: changed-files
        run: |
          echo "files=\$(git diff --name-only HEAD~1 | tr '\n' ' ')" >> $GITHUB_OUTPUT

      - name: Révision de Code IA
        run: |
          for file in \$\{\{ steps.changed-files.outputs.files \}\}; do
            if [[ $file == *.js || $file == *.ts || $file == *.py ]]; then
              gemini analyze "$file" \
                --type code-review \
                --output "review-$file.md"
            fi
          done

      - name: Commenter la PR
        uses: actions/github-script@v6
        with:
          script: |
            const fs = require('fs');
            const reviews = fs.readdirSync('.').filter(f => f.startsWith('review-'));

            let comment = '## 🤖 Révision de Code IA\n\n';
            reviews.forEach(file => {
              const content = fs.readFileSync(file, 'utf8');
              comment += `### ${file}\n${content}\n\n`;
            });

            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: comment
            });

Extension VS Code

Intégration d'extension VS Code personnalisée

javascriptCode
// extension.js - Extension VS Code pour Gemini CLI
const vscode = require('vscode');
const { exec } = require('child_process');

function activate(context) {
  // Commande: Expliquer le Code
  let explainCommand = vscode.commands.registerCommand(
    'gemini.explainCode',
    async () => {
      const editor = vscode.window.activeTextEditor;
      if (!editor) return;

      const selection = editor.selection;
      const text = editor.document.getText(selection);

      if (!text) {
        vscode.window.showErrorMessage('Veuillez sélectionner le code à expliquer');
        return;
      }

      // Afficher le progrès
      vscode.window.withProgress({
        location: vscode.ProgressLocation.Notification,
        title: "Explication du code avec Gemini...",
        cancellable: false
      }, async () => {
        return new Promise((resolve, reject) => {
          exec(`echo "${text}" | gemini ask "Expliquer ce code"`,
            (error, stdout, stderr) => {
              if (error) {
                vscode.window.showErrorMessage(`Erreur: ${error.message}`);
                reject(error);
                return;
              }

              // Afficher l'explication dans un nouveau document
              vscode.workspace.openTextDocument({
                content: stdout,
                language: 'markdown'
              }).then(doc => {
                vscode.window.showTextDocument(doc);
                resolve();
              });
            });
        });
      });
    }
  );

  context.subscriptions.push(explainCommand);
}

function deactivate() {}

module.exports = { activate, deactivate };

Intégration Docker

Utiliser Gemini CLI dans des conteneurs

dockerfileCode
# Dockerfile - Conteneur Gemini CLI
FROM node:18-alpine

# Installer Gemini CLI
RUN npm install -g @google/generative-ai-cli

# Définir le répertoire de travail
WORKDIR /app

# Copier les fichiers du projet
COPY . .

# Définir les variables d'environnement
ENV GEMINI_API_KEY=""

# Créer un script d'analyse
RUN echo '#!/bin/sh' > /usr/local/bin/analyze-project && \
    echo 'gemini analyze src/ --output analysis.md' >> /usr/local/bin/analyze-project && \
    chmod +x /usr/local/bin/analyze-project

# Commande par défaut
CMD ["analyze-project"]

Utilisation Avancée

Scénarios complexes et fonctionnalités avancées

Développement d'Outils Personnalisés

Créer des outils personnalisés pour des tâches spécifiques

javascriptCode
// custom-tools.js - Définitions d'outils personnalisés
const tools = {
  // Outil de requête de base de données
  database_query: {
    name: 'database_query',
    description: 'Exécuter des requêtes SQL sur la base de données',
    parameters: {
      query: { type: 'string', required: true },
      database: { type: 'string', default: 'main' }
    },
    execute: async ({ query, database }) => {
      const db = require('./db-connection');
      try {
        const result = await db.query(query, database);
        return JSON.stringify(result, null, 2);
      } catch (error) {
        return `Erreur: ${error.message}`;
      }
    }
  },

  // Outil de test d'API
  api_test: {
    name: 'api_test',
    description: 'Tester les points de terminaison API',
    parameters: {
      url: { type: 'string', required: true },
      method: { type: 'string', default: 'GET' },
      headers: { type: 'object', default: {} },
      body: { type: 'object', default: null }
    },
    execute: async ({ url, method, headers, body }) => {
      const fetch = require('node-fetch');
      try {
        const response = await fetch(url, {
          method,
          headers,
          body: body ? JSON.stringify(body) : undefined
        });

        const data = await response.text();
        return `Statut: ${response.status}\nRéponse: ${data}`;
      } catch (error) {
        return `Erreur: ${error.message}`;
      }
    }
  },

  // Outil de formatage de code
  format_code: {
    name: 'format_code',
    description: 'Formater le code avec prettier',
    parameters: {
      code: { type: 'string', required: true },
      language: { type: 'string', default: 'javascript' }
    },
    execute: async ({ code, language }) => {
      const prettier = require('prettier');
      try {
        const formatted = prettier.format(code, {
          parser: language === 'typescript' ? 'typescript' : 'babel',
          semi: true,
          singleQuote: true,
          tabWidth: 2
        });
        return formatted;
      } catch (error) {
        return `Erreur: ${error.message}`;
      }
    }
  }
};

// Enregistrer les outils avec Gemini CLI
Object.values(tools).forEach(tool => {
  process.env.GEMINI_TOOLS = JSON.stringify([
    ...(JSON.parse(process.env.GEMINI_TOOLS || '[]')),
    tool
  ]);
});

module.exports = tools;

Traitement par Lots

Traiter plusieurs fichiers ou tâches par lots

bashCode
#!/bin/bash
# batch-process.sh - Traitement par lots avec Gemini CLI

BATCH_SIZE=5
CONCURRENT_JOBS=3

# Fonction pour traiter un seul fichier
process_file() {
  local file=$1
  local task=$2

  echo "🔄 Traitement: $file"

  case $task in
    "translate")
      gemini ask "Traduire les commentaires de ce code en anglais" \
        --file "$file" \
        --output "${file%.js}.en.js"
      ;;
    "optimize")
      gemini analyze "$file" \
        --prompt "Optimiser ce code pour les performances" \
        --output "${file%.js}.optimized.js"
      ;;
    "document")
      gemini analyze "$file" \
        --prompt "Ajouter des commentaires JSDoc complets" \
        --output "${file%.js}.documented.js"
      ;;
  esac

  echo "✅ Terminé: $file"
}

# Fonction principale de traitement par lots
batch_process() {
  local task=$1
  shift
  local files=("$@")

  echo "🚀 Démarrage du traitement par lots: $task"
  echo "📁 Fichiers à traiter: ${#files[@]}"

  # Traiter les fichiers par lots
  for ((i=0; i<${#files[@]}; i+=BATCH_SIZE)); do
    batch=("${files[@]:i:BATCH_SIZE}")

    echo "📦 Traitement du lot $((i/BATCH_SIZE + 1))"

    # Traiter le lot avec concurrence limitée
    for file in "${batch[@]}"; do
      (($(jobs -r | wc -l) >= CONCURRENT_JOBS)) && wait
      process_file "$file" "$task" &
    done

    wait # Attendre la fin du lot actuel
  done

  echo "🎉 Traitement par lots terminé!"
}

# Exemples d'utilisation
case $1 in
  "translate")
    batch_process "translate" src/**/*.js
    ;;
  "optimize")
    batch_process "optimize" src/**/*.js
    ;;
  "document")
    batch_process "document" src/**/*.js
    ;;
  *)
    echo "Usage: $0 {translate|optimize|document}"
    exit 1
    ;;
esac

Besoin d'aide supplémentaire ?

Explorez plus de ressources et de documentation