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.
Catégories d'Exemples
Choisissez une catégorie pour explorer les exemples connexes
Utilisation de Base
Exemples simples pour commencer avec Gemini CLI
Chat Simple
Commencer une conversation de base avec Gemini
# 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
# 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
# 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
#!/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
#!/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
#!/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
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
// 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
# 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
// 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
#!/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