はじめに
※この記事はClaude Codeが出力した記事です。内容が間違っている場合があるのでご注意ください。
本記事では、Claude Code(Anthropic の CLI ツール)と Google の Gemini CLI を MCP(Model Context Protocol)で連携させ、実際の Issue 対応で活用した事例を紹介します。
環境構築
前提条件
- Claude Code がインストール済み
- Node.js がインストール済み(Homebrew 経由で自動インストールも可能)
1. Gemini CLI のインストール
Homebrew を使用してインストールします。
brew install gemini-cli
npm でグローバルインストールする場合は以下の通りです。
npm install -g @google/gemini-cli
2. Gemini CLI の初回認証
インストール後、初回起動時に OAuth 認証が必要です。
gemini
ブラウザが開き、Google アカウントでの認証を求められます。認証が完了すると、Gemini CLI が使用可能になります。
3. Claude Code への MCP サーバー登録
以下のコマンドで、Gemini CLI を MCP サーバーとして Claude Code に登録します。
claude mcp add -s project gemini-cli -- npx @choplin/mcp-gemini-cli --allow-npx
このコマンドにより、プロジェクトディレクトリに .mcp.json ファイルが作成されます。
{
"mcpServers": {
"gemini-cli": {
"type": "stdio",
"command": "npx",
"args": [
"@choplin/mcp-gemini-cli",
"--allow-npx"
],
"env": {}
}
}
}
4. 接続確認
MCP サーバーが正しく接続されているか確認します。
claude mcp list
以下のように表示されれば成功です。
gemini-cli: npx @choplin/mcp-gemini-cli --allow-npx - ✓ Connected
利用可能なツール
@choplin/mcp-gemini-cli は以下の2つのツールを提供します。
geminiChat
Gemini と会話するためのツールです。
prompt: 質問やプロンプトmodel: 使用するモデル(オプション)
googleSearch
Google 検索を実行するためのツールです。
query: 検索クエリlimit: 結果数(オプション)
実践:Issue #26 への適用
背景
Rails アプリケーションの Admin 管理画面に Flash メッセージ表示機能を追加する Issue に取り組みました。
実装内容
app/views/layouts/application.html.erb に Flash メッセージの表示部分を追加し、app/assets/stylesheets/application.css にスタイルを追加しました。
<% if flash[:notice] %>
<div class="flash notice"><%= flash[:notice] %></div>
<% end %>
<% if flash[:alert] %>
<div class="flash alert"><%= flash[:alert] %></div>
<% end %>
.flash {
padding: 15px;
margin-bottom: 20px;
border-radius: 4px;
}
.flash.notice {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.flash.alert {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
Gemini へのコードレビュー依頼
実装完了後、Claude Code から Gemini にコードレビューを依頼しました。
レビュー依頼の内容:
- コードの品質、セキュリティ
- アクセシビリティの観点
- 改善提案
Gemini からのレビュー結果
Gemini から以下のフィードバックを受けました。
評価点
- セキュリティ: ERB の
<%= ... %>によりデフォルトで HTML エスケープされるため、XSS 対策は適切 - 色のコントラスト: WCAG 2.1 AA 基準(4.5:1)をクリア
改善提案
- アクセシビリティ:
role="alert"属性を追加することで、スクリーンリーダーがメッセージを自動で読み上げるようになる - DRY 原則:
flash.eachでループ処理にしてコードの重複をなくす - パーシャル化: 別ファイルに分離して管理しやすくする
- 閉じるボタン: ユーザーがメッセージを手動で閉じられるようにする

↑ 別なIssueだけどClaudeとGeminiがやり取りをしている様子。
提案の検討と採用
Gemini の提案を検討した結果、以下の判断をしました。
role="alert"の追加: 採用(1行追加するだけでアクセシビリティが向上)- パーシャル化: 見送り(現時点では2種類のみで、オーバーエンジニアリングになる)
- 閉じるボタン: 見送り(Flash メッセージはページ遷移で消えるため、Admin 画面では不要)
最終的な実装
role="alert" 属性を追加しました。
<% if flash[:notice] %>
<div class="flash notice" role="alert"><%= flash[:notice] %></div>
<% end %>
<% if flash[:alert] %>
<div class="flash alert" role="alert"><%= flash[:alert] %></div>
<% end %>
追加事例:Issue #29 での問題解決
Issue #26 の作業中に、ローカルのテスト環境で Capybara::Ambiguous エラーが発生しました。この問題についても Gemini と相談しながら解決しました。
問題
Capybara::Ambiguous:
Ambiguous match, found 2 elements matching visible css "input[data-item-name='ホットコーヒー']"
Gemini との分析
Gemini に状況を説明し、原因の分析を依頼しました。Gemini からは以下の指摘がありました。
use_transactional_fixtures = trueは System tests では正しく機能しない- System tests は別プロセスでブラウザが動作するため、トランザクションが共有されない
database_cleanergem の導入が推奨される
解決策の実装
Gemini の提案に従い、database_cleaner-active_record gem を導入しました。
実装中に DatabaseCleaner::Safeguard::Error::RemoteDatabaseUrl エラーが発生しましたが、これについても Gemini に相談し、url_allowlist の設定で解決しました。
if ENV['DATABASE_URL']&.include?('@db')
DatabaseCleaner.url_allowlist = [ENV['DATABASE_URL']]
end
また、around(:each) を使用したリファクタリングを試みましたが、let! との相性問題が発生したため、Gemini と相談の上、before(:each) / after(:each) 方式を採用しました。
所感
Agent to Agent 連携の利点
- コードレビューの効率化: 実装後すぐにレビューを依頼でき、フィードバックを得られる
- 問題解決の加速: エラーの原因分析や解決策の提案を受けられる
- 知識の補完: 自分が詳しくない領域(アクセシビリティなど)についてアドバイスを得られる
(Ryo追記)
ClaudeのモデルにOpusを使っていたのだけど、単独でOpusを使っていたときよりも適切にClaudeがGeminiを利用していたおかげかtokenの消費が少なかった様子。Geminiの指摘をOpusは疑うことができる様子もみれたので、個人的にはとても楽しいやり取りだった。
課題
- ツールの制約: Gemini はファイルの直接編集ができないため、提案を受けて Claude Code 側で実装する必要がある
今後の展望
- Gemini の応答スタイルをカスタマイズできるか調査
- 他の AI エージェントとの連携も検討
まとめ

(ほんとうちょっとチーム開発しているような気分が味わえる。)
Claude Code と Gemini CLI の連携により、コードレビューや問題解決を効率化できることが確認できました。MCP を介した Agent to Agent 連携 は、開発ワークフローの新しい選択肢として有用です。