コード例
Gemini CLIを最大限に活用するための実用的なコード例とテンプレート。基本的な使用法から高度な自動化と統合パターンまで。
例のカテゴリ
関連する例を探索するためのカテゴリを選択してください
基本的な使用法
Gemini CLIを始めるための簡単な例
シンプルチャット
Geminiとの基本的な会話を開始
bashコード
# インタラクティブチャットを開始
gemini chat
# 質問をする
gemini ask "機械学習とは何ですか?"
# 特定のモデルで質問
gemini ask "量子コンピューティングを説明して" --model gemini-pro
ファイル分析
AIアシスタンスでコードファイルを分析
bashコード
# 単一ファイルを分析
gemini analyze src/main.js
# 複数ファイルを分析
gemini analyze src/*.js --type code-review
# コード提案を取得
gemini analyze package.json --suggest-improvements
設定管理
基本的な設定管理
bashコード
# 現在の設定を表示
gemini config list
# デフォルトモデルを設定
gemini config set model gemini-pro
# 温度を設定
gemini config set temperature 0.7
# デフォルトにリセット
gemini config reset
自動化スクリプト
開発タスクを自動化するスクリプト
コードレビュースクリプト
プルリクエストの自動化されたコードレビュー
bashコード
#!/bin/bash
# code-review.sh - 自動化されたコードレビュースクリプト
# 変更されたファイルを取得
CHANGED_FILES=\$(git diff --name-only HEAD~1)
echo "🔍 自動化されたコードレビューを開始しています..."
for file in $CHANGED_FILES; do
if [[ $file == *.js || $file == *.ts || $file == *.py ]]; then
echo "📝 レビュー中: $file"
# ファイルを分析
gemini analyze "$file" \
--type code-review \
--prompt "このコードのエラー、パフォーマンスの問題、ベストプラクティスをレビューしてください" \
--output review-$file.md
fi
done
echo "✅ コードレビュー完了!review-*.mdファイルを確認してください"
ドキュメントジェネレーター
コードからドキュメントを生成
bashコード
#!/bin/bash
# generate-docs.sh - 自動ドキュメント生成
echo "📚 ドキュメントを生成中..."
# APIドキュメントを生成
gemini analyze src/api/*.js \
--prompt "例を含む包括的なAPIドキュメントを生成" \
--output docs/api.md
# READMEを生成
gemini ask "このプロジェクトのコードベースに基づいてREADME.mdを作成" \
--context src/ \
--output README.md
# 変更履歴を生成
git log --oneline --since="1 month ago" | \
gemini ask "これらのgitコミットを変更履歴に変換" \
--output CHANGELOG.md
echo "✅ ドキュメント生成完了!"
テストジェネレーター
自動的にユニットテストを生成
bashコード
#!/bin/bash
# generate-tests.sh - 自動ユニットテスト生成
SOURCE_DIR="src"
TEST_DIR="tests"
echo "🧪 ユニットテストを生成中..."
find $SOURCE_DIR -name "*.js" -o -name "*.ts" | while read file; do
# 相対パスを取得
rel_path=\$\{file#\$SOURCE_DIR/\}
test_file="\$TEST_DIR/\$\{rel_path%.*\}.test.\$\{file##*.\}"
echo "📝 テストを生成中: $file"
gemini analyze "$file" \
--prompt "境界ケースを含む包括的なユニットテストを生成" \
--template jest \
--output "$test_file"
done
echo "✅ テスト生成完了!"
統合例
Gemini CLIを他のツールやワークフローと統合
GitHub Actionsワークフロー
GitHub ActionsとのCI/CD統合
yamlコード
name: AIコードレビュー
on:
pull_request:
types: [opened, synchronize]
jobs:
ai-review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Node.jsセットアップ
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Gemini CLIインストール
run: npm install -g @google/generative-ai-cli
- name: Gemini CLI設定
run: |
gemini config set api-key \$\{\{ secrets.GEMINI_API_KEY \}\}
gemini config set model gemini-pro
- name: 変更されたファイルを取得
id: changed-files
run: |
echo "files=\$(git diff --name-only HEAD~1 | tr '\n' ' ')" >> $GITHUB_OUTPUT
- name: AIコードレビュー
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: PRにコメント
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const reviews = fs.readdirSync('.').filter(f => f.startsWith('review-'));
let comment = '## 🤖 AIコードレビュー\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
});
VS Code拡張機能
カスタムVS Code拡張機能統合
javascriptコード
// extension.js - Gemini CLI用VS Code拡張機能
const vscode = require('vscode');
const { exec } = require('child_process');
function activate(context) {
// コマンド:コードを説明
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('説明するコードを選択してください');
return;
}
// 進行状況を表示
vscode.window.withProgress({
location: vscode.ProgressLocation.Notification,
title: "Geminiでコードを説明中...",
cancellable: false
}, async () => {
return new Promise((resolve, reject) => {
exec(`echo "${text}" | gemini ask "このコードを説明してください"`,
(error, stdout, stderr) => {
if (error) {
vscode.window.showErrorMessage(`エラー: ${error.message}`);
reject(error);
return;
}
// 新しいドキュメントで説明を表示
vscode.workspace.openTextDocument({
content: stdout,
language: 'markdown'
}).then(doc => {
vscode.window.showTextDocument(doc);
resolve();
});
});
});
});
}
);
// コマンド:テストを生成
let testCommand = vscode.commands.registerCommand(
'gemini.generateTests',
async () => {
const editor = vscode.window.activeTextEditor;
if (!editor) return;
const filePath = editor.document.fileName;
const testPath = filePath.replace(/\.(js|ts)$/, '.test.$1');
exec(`gemini analyze "${filePath}" --prompt "ユニットテストを生成" --output "${testPath}"`,
(error, stdout, stderr) => {
if (error) {
vscode.window.showErrorMessage(`エラー: ${error.message}`);
return;
}
vscode.window.showInformationMessage(`テストが生成されました: ${testPath}`);
vscode.workspace.openTextDocument(testPath).then(doc => {
vscode.window.showTextDocument(doc);
});
});
}
);
context.subscriptions.push(explainCommand, testCommand);
}
function deactivate() {}
module.exports = { activate, deactivate };
Docker統合
コンテナでGemini CLIを使用
dockerfileコード
# Dockerfile - Gemini CLIコンテナ
FROM node:18-alpine
# Gemini CLIをインストール
RUN npm install -g @google/generative-ai-cli
# 作業ディレクトリを設定
WORKDIR /app
# プロジェクトファイルをコピー
COPY . .
# 環境変数を設定
ENV GEMINI_API_KEY=""
# 分析スクリプトを作成
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
# デフォルトコマンド
CMD ["analyze-project"]
高度な使用法
複雑なシナリオと高度な機能
カスタムツール開発
特定のタスク用のカスタムツールを作成
javascriptコード
// custom-tools.js - カスタムツール定義
const tools = {
// データベースクエリツール
database_query: {
name: 'database_query',
description: 'データベースでSQLクエリを実行',
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 `エラー: ${error.message}`;
}
}
},
// APIテストツール
api_test: {
name: 'api_test',
description: '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 `ステータス: ${response.status}\nレスポンス: ${data}`;
} catch (error) {
return `エラー: ${error.message}`;
}
}
},
// コードフォーマッターツール
format_code: {
name: 'format_code',
description: '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 `エラー: ${error.message}`;
}
}
}
};
// Gemini CLIにツールを登録
Object.values(tools).forEach(tool => {
process.env.GEMINI_TOOLS = JSON.stringify([
...(JSON.parse(process.env.GEMINI_TOOLS || '[]')),
tool
]);
});
module.exports = tools;
バッチ処理
複数のファイルやタスクをバッチ処理
bashコード
#!/bin/bash
# batch-process.sh - Gemini CLIを使用したバッチ処理
BATCH_SIZE=5
CONCURRENT_JOBS=3
# 単一ファイルを処理する関数
process_file() {
local file=$1
local task=$2
echo "🔄 処理中: $file"
case $task in
"translate")
gemini ask "このコードコメントを英語に翻訳" \
--file "$file" \
--output "${file%.js}.en.js"
;;
"optimize")
gemini analyze "$file" \
--prompt "このコードのパフォーマンスを最適化" \
--output "${file%.js}.optimized.js"
;;
"document")
gemini analyze "$file" \
--prompt "包括的なJSDocコメントを追加" \
--output "${file%.js}.documented.js"
;;
esac
echo "✅ 完了: $file"
}
# メインバッチ処理関数
batch_process() {
local task=$1
shift
local files=("$@")
echo "🚀 バッチ処理開始: $task"
echo "📁 処理するファイル数: ${#files[@]}"
# ファイルをバッチで処理
for ((i=0; i<${#files[@]}; i+=BATCH_SIZE)); do
batch=("${files[@]:i:BATCH_SIZE}")
echo "📦 バッチ $((i/BATCH_SIZE + 1)) を処理中"
# 制限された並行性でバッチを処理
for file in "${batch[@]}"; do
(($(jobs -r | wc -l) >= CONCURRENT_JOBS)) && wait
process_file "$file" "$task" &
done
wait # 現在のバッチの完了を待機
done
echo "🎉 バッチ処理完了!"
}
# 使用例
case $1 in
"translate")
batch_process "translate" src/**/*.js
;;
"optimize")
batch_process "optimize" src/**/*.js
;;
"document")
batch_process "document" src/**/*.js
;;
*)
echo "使用法: $0 {translate|optimize|document}"
exit 1
;;
esac
プラグインシステム
拡張可能なプラグインアーキテクチャを作成
javascriptコード
// plugin-system.js - プラグインシステムの例
const { GeminiCLI } = require('@google/generative-ai-cli');
class PluginManager {
constructor() {
this.cli = new GeminiCLI();
this.plugins = new Map();
}
// プラグインを登録
registerPlugin(plugin) {
if (!plugin.name || !plugin.version) {
throw new Error('プラグインには名前とバージョンが必要です');
}
this.plugins.set(plugin.name, plugin);
// プラグインコマンドを登録
if (plugin.commands) {
Object.entries(plugin.commands).forEach(([cmd, handler]) => {
this.cli.registerCommand(`${plugin.name}:${cmd}`, handler);
});
}
// プラグインツールを登録
if (plugin.tools) {
plugin.tools.forEach(tool => {
this.cli.registerTool(tool);
});
}
console.log(`✅ プラグイン ${plugin.name} v${plugin.version} が登録されました`);
}
// プラグイン情報を取得
getPlugin(name) {
return this.plugins.get(name);
}
// すべてのプラグインをリスト
listPlugins() {
return Array.from(this.plugins.values());
}
}
// サンプルプラグイン:コード品質チェッカー
const codeQualityPlugin = {
name: 'code-quality',
version: '1.0.0',
description: 'コード品質チェックプラグイン',
commands: {
'check': async (args) => {
const files = args.files || ['src/'];
console.log(`🔍 コード品質をチェック中: ${files.join(', ')}`);
// コード品質チェックロジックを実装
return 'コード品質チェック完了';
},
'metrics': async (args) => {
console.log('📊 コードメトリクスを生成中...');
// コードメトリクス生成ロジックを実装
return {
complexity: 'low',
maintainability: 'high',
coverage: '85%'
};
}
},
tools: [
{
name: 'complexity_analyzer',
description: 'コードの複雑さを分析',
parameters: {
file: { type: 'string', required: true }
},
execute: async ({ file }) => {
// 複雑さ分析を実装
return `ファイル ${file} の複雑さ: 中程度`;
}
}
]
};
// 使用例
async function main() {
const manager = new PluginManager();
// プラグインを登録
manager.registerPlugin(codeQualityPlugin);
// プラグインコマンドを使用
const result = await manager.cli.executeCommand('code-quality:check', {
files: ['src/main.js', 'src/utils.js']
});
console.log('チェック結果:', result);
// すべてのプラグインをリスト
console.log('インストール済みプラグイン:', manager.listPlugins());
}
main().catch(console.error);