Claude Code と Gemini CLI の連携:Agent to Agent 開発の実践

はじめに

※この記事は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 から以下のフィードバックを受けました。

評価点

  1. セキュリティ: ERB の <%= ... %> によりデフォルトで HTML エスケープされるため、XSS 対策は適切
  2. 色のコントラスト: WCAG 2.1 AA 基準(4.5:1)をクリア

改善提案

  1. アクセシビリティ: role="alert" 属性を追加することで、スクリーンリーダーがメッセージを自動で読み上げるようになる
  2. DRY 原則: flash.each でループ処理にしてコードの重複をなくす
  3. パーシャル化: 別ファイルに分離して管理しやすくする
  4. 閉じるボタン: ユーザーがメッセージを手動で閉じられるようにする

↑ 別な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 からは以下の指摘がありました。

  1. use_transactional_fixtures = true は System tests では正しく機能しない
  2. System tests は別プロセスでブラウザが動作するため、トランザクションが共有されない
  3. database_cleaner gem の導入が推奨される

解決策の実装

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 連携の利点

  1. コードレビューの効率化: 実装後すぐにレビューを依頼でき、フィードバックを得られる
  2. 問題解決の加速: エラーの原因分析や解決策の提案を受けられる
  3. 知識の補完: 自分が詳しくない領域(アクセシビリティなど)についてアドバイスを得られる

(Ryo追記)
ClaudeのモデルにOpusを使っていたのだけど、単独でOpusを使っていたときよりも適切にClaudeがGeminiを利用していたおかげかtokenの消費が少なかった様子。Geminiの指摘をOpusは疑うことができる様子もみれたので、個人的にはとても楽しいやり取りだった。

課題

  1. ツールの制約: Gemini はファイルの直接編集ができないため、提案を受けて Claude Code 側で実装する必要がある

今後の展望

  • Gemini の応答スタイルをカスタマイズできるか調査
  • 他の AI エージェントとの連携も検討

まとめ

(ほんとうちょっとチーム開発しているような気分が味わえる。)

Claude Code と Gemini CLI の連携により、コードレビューや問題解決を効率化できることが確認できました。MCP を介した Agent to Agent 連携 は、開発ワークフローの新しい選択肢として有用です。

参考リンク