サイトアイコンmaita tomoya dev io

#21 Claude CodeとGemini CLIを連携させて相談しながら開発する仕組みを構築する

Claude CodeとGemini CLIを連携させて相談しながら開発する仕組みを構築する

はじめに

本記事では、Anthropic社のClaude CodeとGoogle社のGemini CLIという2つのAI開発ツールを連携させ、相互に相談しながら開発を進める仕組みの構築方法について解説します。

この取り組みは、X.com(旧Twitter)でオカムラさん(@masa_oka108)が投稿された内容に触発されて実装したものです。異なるAIエージェントが協力することで、より高品質な開発が可能になるという興味深いアプローチです。

この記事で学べること

  • 複数のAI開発ツールを連携させる方法
  • AIツールのコンテキスト管理の仕組み
  • セキュアな環境変数管理の実践方法
  • 自動化スクリプトの作成手法

前提知識

  • 基本的なコマンドライン操作
  • Node.jsの基礎知識(npmコマンドが使える程度)
  • 環境変数の概念

対応した内容

  1. Gemini CLIのインストールと環境構築
  2. Claude CodeとGemini CLIの相互参照設定
  3. 連携用のBashスクリプト作成
  4. 実行環境のテストと検証

使用した技術とツール

Claude Code

Claude Codeは、Anthropic社が提供するCLI(Command Line Interface)ベースのAI開発アシスタントです。

Claude Codeの特徴

  • CLI(コマンドラインインターフェース):ターミナルから直接操作できるツール
  • 対話的な開発支援:質問に答えたり、コードを生成したりしてくれる
  • ファイル操作が可能:プロジェクト内のファイルを読み書きできる
  • 複数ファイルの同時編集:関連するファイルをまとめて修正可能

Gemini CLI

Gemini CLIは、2025年6月にGoogleがオープンソース(Apache 2.0ライセンス)で公開したAIエージェントです。

Gemini CLIの特徴

  • 無料枠が充実:1分あたり60リクエスト、1日あたり1000リクエストまで無料
  • オープンソース:誰でもソースコードを確認・改良できる
  • Google AIの技術を活用:Geminiモデルの能力をCLIから利用可能
  • カスタマイズ可能:プロジェクトごとに設定をカスタマイズできる

なぜ2つのAIツールを連携させるのか?

  1. 視点の多様性

    • 各AIモデルには得意・不得意がある
    • 複数の視点から問題を検討できる
  2. 相互チェック機能

    • 一方のAIが見落とした点を、もう一方が指摘できる
    • より堅牢なコードの実装が可能
  3. 学習効果

    • AIツール同士の「対話」から新しい知見を得られる
    • ベストプラクティスの発見につながる

実装手順

1. Node.jsのバージョン確認とGemini CLIのインストール

まず、Gemini CLIの動作要件であるNode.js v20以上がインストールされているか確認しました。

Node.jsとは?

Node.jsは、JavaScriptをサーバーサイドで実行できる環境です。多くの開発ツールがNode.js上で動作します。

バージョン確認方法

node --version
# v20.5.0

重要:もしNode.jsがインストールされていない、またはバージョンが古い場合は、Node.js公式サイトからダウンロードするか、以下のようなバージョン管理ツールを使用してください:

  • nvm(Node Version Manager):複数のNode.jsバージョンを管理できるツール
  • nodenv:rbenvに似たNode.jsバージョン管理ツール

Gemini CLIのインストール

要件を満たしていることを確認後、Gemini CLIをグローバルインストールしました。

npm install -g @google/gemini-cli

用語解説

  • npm:Node Package Manager の略。Node.jsのパッケージ管理ツール
  • -g フラグ:グローバル(システム全体)にインストールすることを意味する
  • @google/gemini-cli:Googleが公開しているGemini CLIパッケージ

インストール中にundiciパッケージのエンジン要件に関する警告が表示されましたが、Gemini CLI自体は正常にインストールされました。

インストール確認

gemini --version
# 0.1.17

このコマンドでバージョンが表示されれば、インストール成功です。

2. CLAUDE.mdへの連携設定追加

CLAUDE.mdファイルとは?

CLAUDE.mdは、Claude Codeがプロジェクトのコンテキスト(文脈)を理解するための設定ファイルです。このファイルに書かれた内容は、Claude Codeが常に参照し、その指示に従って動作します。

ポイント

  • プロジェクトのルートディレクトリに配置
  • Markdown形式で記述
  • プロジェクト固有のルールや設定を定義

Claude CodeはCLAUDE.mdファイルを自動的に読み込み、プロジェクト固有の設定として利用します。このファイルに、Gemini CLIとの連携ルールを追加しました。

CLAUDE.mdに追加した内容の要点:

  1. 連携の目的

    • 異なるAIの視点を取り入れた多角的な問題解決
    • 各AIの得意分野を活かした効率的な開発
    • エラーや設計の相互チェックによる品質向上
  2. 連携方法

    • 相談内容を.claude/gemini-consultations/ディレクトリに保存
    • Geminiからの回答を.claude/gemini-responses/に保存
    • ファイル名形式:YYYY-MM-DD-HH-mm-ss-topic.md
  3. 相談すべきケース

    • アーキテクチャの設計判断
    • 複雑なアルゴリズムの実装方法
    • パフォーマンス最適化
    • セキュリティ上の懸念事項

3. GEMINI.mdファイルの作成

Gemini CLIもプロジェクトごとにカスタム指示を設定できるGEMINI.mdファイルをサポートしています。このファイルを作成し、Claude Codeとの連携方法を記載しました。

GEMINI.mdの主な内容:

  • 日本語での回答指示
  • Claude Codeからの相談への対応方法
  • 技術的正確性と実装可能性の重視
  • セキュリティリスクの指摘

4. 連携用Bashスクリプトの作成

AI間の連携を簡単にするため、consult-gemini.shというヘルパースクリプトを作成しました。

Bashスクリプトとは?

Bashスクリプトは、複数のコマンドをまとめて実行できるプログラムです。手動で何度も同じコマンドを入力する代わりに、スクリプトを実行するだけで自動化できます。

スクリプトの基本構造

#!/bin/bash
# ↑ シェバン(shebang):このスクリプトをbashで実行することを指定

# 使用例:
# ./consult-gemini.sh -t "API設計" -q "RESTfulなエンドポイント設計について相談したい"
# ./consult-gemini.sh -t "パフォーマンス" -q "DBクエリの最適化" -f "src/db/queries.js"

コマンドラインオプションの説明

  • -t:トピック(相談内容のカテゴリ)を指定
  • -q:質問内容を指定
  • -f:参照したいファイルのパスを指定(オプション)

このスクリプトの機能:

  • トピックと質問を指定して相談内容を自動生成
  • 関連ファイルの内容を自動的に含める
  • Gemini CLIを実行して回答を取得
  • 相談と回答を適切なディレクトリに保存

実際のスクリプト内容(簡略版)

#!/bin/bash

# 変数の定義
TIMESTAMP=$(date +"%Y-%m-%d-%H-%M-%S")
CONSULT_DIR="~/.claude/gemini-consultations"
RESPONSE_DIR="~/.claude/gemini-responses"

# ディレクトリが存在しない場合は作成
mkdir -p "$CONSULT_DIR" "$RESPONSE_DIR"

# 相談内容をファイルに保存
echo "# 相談: $TOPIC" > "$CONSULT_DIR/$TIMESTAMP-$TOPIC.md"
echo "$QUESTION" >> "$CONSULT_DIR/$TIMESTAMP-$TOPIC.md"

# Gemini CLIを実行して回答を取得
gemini -p "$(cat $CONSULT_DIR/$TIMESTAMP-$TOPIC.md)" > "$RESPONSE_DIR/$TIMESTAMP-$TOPIC.md"

コンテキストの管理について

コンテキストとは?

「コンテキスト」とは、AIツールが理解すべき「文脈」や「背景情報」のことです。人間同士の会話でも、相手の背景を知っているかどうかで伝わり方が変わるように、AIツールも適切なコンテキストがあることで、より的確な支援ができます。

Claude Codeのコンテキスト管理

Claude Codeは、プロジェクトのコンテキストを以下の方法で管理します:

1. グローバル設定(全プロジェクト共通)

  • 場所: ~/.claude/CLAUDE.md
  • 用途: すべてのプロジェクトで共通して適用したい設定
  • : 日本語での回答、セキュリティ観点の注意、タスク完了時の通知設定など

2. プロジェクト固有の設定

  • 場所: プロジェクトルートの CLAUDE.md
  • 用途: 特定のプロジェクトでのみ適用したい設定
  • : プロジェクト固有のコーディング規約、使用ライブラリ、開発コマンドなど

3. サブディレクトリの設定

  • 場所: サブディレクトリ内の CLAUDE.md
  • 用途: 特定のディレクトリ配下でのみ適用したい設定
  • : frontend/とbackend/で異なる規約を適用する場合

重要: Claude Codeは現在のディレクトリから上位に向かって再帰的にCLAUDE.mdを探索し、見つかったものをすべて読み込みます。より具体的な(深い階層の)設定が優先されます。

Gemini CLIのコンテキスト管理

Gemini CLIも同様の仕組みを持っています:

1. グローバル設定

  • 場所: ~/.gemini/settings.json(認証情報など)
  • 用途: APIキー、テーマ設定など

2. プロジェクト固有の設定

  • 場所: プロジェクトルートの GEMINI.md
  • 用途: プロジェクト固有のカスタム指示

実際の設定例

グローバル設定の例(~/.claude/CLAUDE.md)

# 全プロジェクト共通設定
- 回答は日本語で行うこと
- セキュリティに注意すること
- タスク完了時は通知を送ること

プロジェクト設定の例(プロジェクトルート/CLAUDE.md)

# このプロジェクトの設定
- React 18とTypeScript 5を使用
- ESLintとPrettierの設定に従うこと
- テストはVitestで実行すること

サブディレクトリ設定の例(frontend/CLAUDE.md)

# フロントエンド固有の設定
- Material-UIを使用したコンポーネント設計
- アクセシビリティを重視すること

ぶつかった問題点と解決方法

問題1:Gemini CLIの認証エラー

初回実行時に以下のエラーが発生しました:

Please set an Auth method in your /Users/kometomo/.gemini/settings.json or specify one of the following environment variables before running: GEMINI_API_KEY, GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_GENAI_USE_GCA

エラーの意味

このエラーは「認証方法が設定されていません」という意味です。Gemini CLIがGoogle AIのサービスにアクセスするには、あなたが誰なのかを証明する必要があります。

解決方法

Gemini CLIは初回起動時に認証設定が必要です。以下の2つの方法があります:

認証とは?

認証(Authentication)は、「あなたが本当にあなたであること」を証明するプロセスです。Webサービスにログインする際のユーザー名とパスワードのようなものです。

  1. インタラクティブモード(推奨)

    gemini
    

    初回起動時にテーマ選択と認証方法の選択画面が表示され、「Login with Google」を選択するとブラウザが自動的に開きます。

  2. APIキーを使用 Google AI StudioでAPIキーを取得し、以下のいずれかの方法で設定します:

    設定ファイルを使用

    {
      "authMethod": "API_KEY",
      "apiKey": "YOUR_API_KEY_HERE"
    }
    

    環境変数を使用

    export GEMINI_API_KEY="your-api-key-here"
    

問題2:Gemini CLIの日本語対応

初回実行時、Geminiが英語で応答する問題が発生しました。

解決方法

スクリプト内のプロンプトに「日本語で」という指示を追加することで解決しました。これにより、Geminiは常に日本語で技術的なアドバイスを返すようになりました。

問題3:認証情報の管理

APIキーをスクリプトに直接記載するとセキュリティリスクがあります。

解決方法

環境変数を使用してAPIキーを管理し、スクリプトから参照する方式を採用しました。また、永続的な設定方法についてドキュメント化しました。

実際の連携動作例

連携スクリプトを使用して、REST API設計について相談した実例を紹介します。

相談内容

GEMINI_API_KEY="your-api-key" ./consult-gemini.sh \
  -t "REST API設計" \
  -q "ユーザー管理APIのエンドポイント設計についてアドバイスをください。"

Geminiからの回答(抜粋)

Geminiは以下のような詳細な技術アドバイスを返してくれました:

  1. エンドポイント設計

    • RESTfulな設計原則に基づいたCRUD操作の実装方法
    • HTTPメソッドとステータスコードの適切な使用
    • UUIDを使用したセキュアなリソースID設計
  2. セキュリティ対策

    • JWT/OAuth 2.0による認証・認可の実装
    • 入力値バリデーションの重要性
    • レートリミットの導入方法
  3. パフォーマンス最適化

    • ページネーションの実装
    • フィルタリング、ソート機能の提供
    • ETagを使用したキャッシュ戦略

このように、具体的で実装可能な提案を得ることができました。

実装のポイント

1. ディレクトリ構造の設計

相談履歴を体系的に管理するため、以下のディレクトリ構造を採用しました:

~/.claude/
├── gemini-consultations/  # Claude→Geminiへの相談
└── gemini-responses/      # Geminiからの回答

2. ファイル名の工夫

タイムスタンプとトピックを組み合わせたファイル名により、後から参照しやすい形式にしました:

  • 例:2025-08-05-14-30-00-api-design.md

3. セキュリティへの配慮

  • 秘匿情報や個人情報を相談内容に含めないよう注意喚起
  • 相談履歴のアクセス権限を適切に設定

セキュリティに関する重要な注意事項

APIキーとは?

APIキーは、サービスを利用するための「パスワード」のようなものです。これが漏れると、他人があなたのアカウントでサービスを使用できてしまい、料金が発生する可能性があります。

APIキーの管理

重要: APIキーは機密情報です。以下の点に必ず注意してください:

  1. APIキーを直接コードに記載しない

    • GitHubなどにコミットすると、全世界に公開される危険があります
    • 必ず環境変数や設定ファイルで管理してください
  2. .gitignoreへの追加

    # API keys and secrets
    .env
    .env.local
    .gemini/settings.json
    
  3. 環境変数の安全な管理

    • 本番環境では、AWS Secrets Manager、HashiCorp Vaultなどの専門ツールを使用
    • ローカル開発では、.envファイルを使用し、.gitignoreに必ず追加

相談内容のセキュリティ

AIに相談する際は、以下の情報を含めないよう注意してください:

  • 個人情報(氏名、メールアドレス、電話番号など)
  • 認証情報(パスワード、APIキー、トークンなど)
  • 機密性の高いビジネスロジック
  • 顧客データ

実務での活用例

実際の開発現場で、この連携システムをどのように活用できるか、具体的な例を紹介します。

1. コードレビューの自動化

# 新しく実装した機能についてGeminiに意見を求める
./consult-gemini.sh -t "コードレビュー" \
  -q "このAPIエンドポイントの実装について、セキュリティとパフォーマンスの観点から意見をください" \
  -f "src/api/users.js"

2. アーキテクチャ設計の相談

# マイクロサービス設計について相談
./consult-gemini.sh -t "アーキテクチャ" \
  -q "認証サービスを分離する際の考慮点について教えてください"

3. エラー解決の支援

# 解決困難なエラーについて相談
./consult-gemini.sh -t "エラー解決" \
  -q "このTypeScriptのコンパイルエラーの原因と解決方法を教えてください" \
  -f "src/types/index.ts" -f "tsconfig.json"

コンテキスト管理のベストプラクティス

効果的な設定ファイルの使い分け

  1. グローバル設定(~/.claude/CLAUDE.md)に含めるべき内容

    • 言語設定(日本語での回答など)
    • 一般的なセキュリティガイドライン
    • 共通のコーディング規約
    • 個人的な作業習慣(通知設定など)
  2. プロジェクト設定(プロジェクトルート/CLAUDE.md)に含めるべき内容

    • プロジェクトの技術スタック
    • ビルド・テストコマンド
    • デプロイ手順
    • プロジェクト固有のコーディング規約
  3. サブディレクトリ設定(subdirectory/CLAUDE.md)に含めるべき内容

    • モジュール固有の設計方針
    • 特定領域のビジネスロジック
    • サブシステム固有の制約事項

設定の継承と優先順位

~/.claude/CLAUDE.md(最も低い優先度)
    ↓
/project/CLAUDE.md
    ↓
/project/frontend/CLAUDE.md(最も高い優先度)

より深い階層の設定が、上位の設定を上書きします。これにより、柔軟かつ階層的な設定管理が可能になります。

トラブルシューティング

よくある問題と解決方法

1. コマンドが見つからない

command not found: gemini

解決方法

  • パスが通っているか確認:echo $PATH
  • npmのグローバルパスを確認:npm config get prefix
  • シェルの設定ファイル(.bashrc、.zshrcなど)にパスを追加

2. 権限エラー

permission denied

解決方法

  • スクリプトに実行権限を付与:chmod +x consult-gemini.sh
  • ファイルの所有者を確認:ls -la

3. APIキーが無効

Invalid API key

解決方法

  • APIキーが正しくコピーされているか確認
  • APIキーの前後に余分なスペースがないか確認
  • Google AI Studioで新しいキーを生成

実装時のチェックリスト

この仕組みを実装する際の確認事項をまとめました:

  • Node.js v20以上がインストールされている
  • Gemini CLIがインストールされている
  • APIキーを取得している
  • .gitignoreにAPIキー関連ファイルを追加している
  • CLAUDE.mdファイルを作成している
  • GEMINI.mdファイルを作成している
  • 連携用ディレクトリを作成している
  • スクリプトに実行権限を付与している

まとめ

Claude CodeとGemini CLIを連携させることで、以下のメリットが得られました:

  1. 多角的な視点:異なるAIモデルの知見を組み合わせることで、より良い解決策を見つけやすくなる
  2. 品質向上:相互チェックによりコードの品質が向上
  3. 学習効果:AIエージェント間の「議論」を見ることで、新しい観点や知識を得られる
  4. 自動化:スクリプトにより連携作業が効率化
  5. 柔軟な設定管理:階層的なコンテキスト管理により、プロジェクトごとに最適な環境を構築

今後は、この仕組みをさらに発展させ、複数のAIエージェントが自律的に協調して開発を進める環境の構築を目指したいと考えています。

今回学んだ重要なポイント

  • AIツールのコンテキスト管理は階層的に行うことで、柔軟性と保守性を両立できる
  • セキュリティ(特にAPIキー管理)は最初から考慮することが重要
  • 異なるAIモデルを連携させる際は、共通のインターフェースを設計することが効果的
  • 自動化スクリプトにより、複雑な連携も簡単に実行できるようになる

次のステップ

この記事で紹介した基本的な連携の仕組みを、さらに発展させるアイデア:

1. 複数AIのオーケストレーション

  • 3つ以上のAIツールを連携させる
  • 各AIの得意分野に応じたタスク割り当て
  • 統合的な結果の集約

2. 自動テスト生成

  • AI間の対話からテストケースを自動生成
  • エッジケースの発見とテスト化

3. リアルタイムコラボレーション

  • WebSocketを使用したリアルタイム連携
  • ライブコーディング中のAIサポート

4. 学習ログの分析

  • AI間の対話ログからパターンを抽出
  • ベストプラクティスの自動ドキュメント化

完全版:consult-gemini.shスクリプト

記事内で紹介した連携スクリプトの完全版を以下に示します。このスクリプトをコピーして使用できます。

#!/bin/bash

# consult-gemini.sh - Claude CodeからGemini CLIに相談するためのヘルパースクリプト
# 
# 使用方法:
#   ./consult-gemini.sh -t "トピック" -q "質問内容" [-f "ファイルパス"]
#
# オプション:
#   -t  トピック(必須)
#   -q  質問内容(必須)
#   -f  参照ファイル(オプション、複数指定可能)
#   -h  ヘルプを表示

set -e  # エラーが発生したら即座に終了

# カラー定義
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# ディレクトリ設定
CONSULT_DIR="$HOME/.claude/gemini-consultations"
RESPONSE_DIR="$HOME/.claude/gemini-responses"

# ヘルプ表示関数
show_help() {
    echo "使用方法: $0 -t \"トピック\" -q \"質問内容\" [-f \"ファイルパス\"]"
    echo ""
    echo "オプション:"
    echo "  -t  トピック(必須)"
    echo "  -q  質問内容(必須)"
    echo "  -f  参照ファイル(オプション、複数指定可能)"
    echo "  -h  このヘルプを表示"
    echo ""
    echo "例:"
    echo "  $0 -t \"API設計\" -q \"RESTfulなエンドポイント設計について相談したい\""
    echo "  $0 -t \"パフォーマンス\" -q \"DBクエリの最適化\" -f \"src/db/queries.js\""
    exit 0
}

# 引数解析
TOPIC=""
QUESTION=""
FILES=()

while getopts "t:q:f:h" opt; do
    case $opt in
        t) TOPIC="$OPTARG";;
        q) QUESTION="$OPTARG";;
        f) FILES+=("$OPTARG");;
        h) show_help;;
        \?) echo "無効なオプション: -$OPTARG" >&2; exit 1;;
    esac
done

# 必須引数チェック
if [ -z "$TOPIC" ] || [ -z "$QUESTION" ]; then
    echo -e "${RED}エラー: トピック(-t)と質問(-q)は必須です${NC}"
    show_help
fi

# ディレクトリ作成
mkdir -p "$CONSULT_DIR" "$RESPONSE_DIR"

# タイムスタンプ生成
TIMESTAMP=$(date +"%Y-%m-%d-%H-%M-%S")
FILENAME_BASE="${TIMESTAMP}-$(echo "$TOPIC" | tr ' ' '-' | tr '[:upper:]' '[:lower:]')"

# 相談内容ファイルの作成
CONSULT_FILE="$CONSULT_DIR/${FILENAME_BASE}.md"
RESPONSE_FILE="$RESPONSE_DIR/${FILENAME_BASE}.md"

echo "# Claude CodeからGeminiへの相談" > "$CONSULT_FILE"
echo "" >> "$CONSULT_FILE"
echo "## トピック: $TOPIC" >> "$CONSULT_FILE"
echo "" >> "$CONSULT_FILE"
echo "## 質問内容" >> "$CONSULT_FILE"
echo "$QUESTION" >> "$CONSULT_FILE"
echo "" >> "$CONSULT_FILE"

# ファイルが指定されている場合は内容を追加
if [ ${#FILES[@]} -gt 0 ]; then
    echo "## 参照ファイル" >> "$CONSULT_FILE"
    echo "" >> "$CONSULT_FILE"
    
    for file in "${FILES[@]}"; do
        if [ -f "$file" ]; then
            echo "### $file" >> "$CONSULT_FILE"
            echo '```' >> "$CONSULT_FILE"
            cat "$file" >> "$CONSULT_FILE"
            echo '```' >> "$CONSULT_FILE"
            echo "" >> "$CONSULT_FILE"
        else
            echo -e "${YELLOW}警告: ファイルが見つかりません: $file${NC}"
        fi
    done
fi

# プロンプト追加
echo "" >> "$CONSULT_FILE"
echo "---" >> "$CONSULT_FILE"
echo "" >> "$CONSULT_FILE"
echo "上記の内容について、技術的なアドバイスを日本語でお願いします。" >> "$CONSULT_FILE"
echo "特に以下の観点から検討してください:" >> "$CONSULT_FILE"
echo "1. 実装の妥当性" >> "$CONSULT_FILE"
echo "2. パフォーマンスへの影響" >> "$CONSULT_FILE"
echo "3. セキュリティ上の懸念" >> "$CONSULT_FILE"
echo "4. より良い代替案" >> "$CONSULT_FILE"

echo -e "${GREEN}相談内容を作成しました: $CONSULT_FILE${NC}"

# Gemini CLIの実行
echo -e "${YELLOW}Gemini CLIを実行中...${NC}"

# APIキーの確認
if [ -z "$GEMINI_API_KEY" ]; then
    # 環境変数が設定されていない場合は設定ファイルを確認
    if [ -f "$HOME/.gemini/settings.json" ]; then
        echo -e "${GREEN}設定ファイルからAPIキーを読み込みます${NC}"
    else
        echo -e "${RED}エラー: GEMINI_API_KEYが設定されていません${NC}"
        echo "以下のいずれかの方法で設定してください:"
        echo "1. export GEMINI_API_KEY='your-api-key'"
        echo "2. gemini コマンドを実行して初期設定を行う"
        exit 1
    fi
fi

# Geminiに相談を送信
if command -v gemini &> /dev/null; then
    # 一時的な応答ファイルを作成
    TEMP_RESPONSE=$(mktemp)
    
    # Geminiを実行(エラーハンドリング付き)
    if gemini -p "$(cat "$CONSULT_FILE")" > "$TEMP_RESPONSE" 2>&1; then
        # 成功した場合、応答を整形して保存
        echo "# Geminiからの回答" > "$RESPONSE_FILE"
        echo "" >> "$RESPONSE_FILE"
        echo "相談日時: $(date '+%Y-%m-%d %H:%M:%S')" >> "$RESPONSE_FILE"
        echo "トピック: $TOPIC" >> "$RESPONSE_FILE"
        echo "" >> "$RESPONSE_FILE"
        echo "---" >> "$RESPONSE_FILE"
        echo "" >> "$RESPONSE_FILE"
        cat "$TEMP_RESPONSE" >> "$RESPONSE_FILE"
        
        echo -e "${GREEN}回答を保存しました: $RESPONSE_FILE${NC}"
        echo ""
        echo "回答の概要:"
        echo "----------------------------------------"
        # 最初の数行を表示
        head -n 20 "$TEMP_RESPONSE"
        echo "..."
        echo "----------------------------------------"
        echo ""
        echo -e "${GREEN}完全な回答は $RESPONSE_FILE で確認できます${NC}"
    else
        echo -e "${RED}エラー: Gemini CLIの実行に失敗しました${NC}"
        echo "エラー内容:"
        cat "$TEMP_RESPONSE"
        rm -f "$TEMP_RESPONSE"
        exit 1
    fi
    
    rm -f "$TEMP_RESPONSE"
else
    echo -e "${RED}エラー: gemini コマンドが見つかりません${NC}"
    echo "以下のコマンドでインストールしてください:"
    echo "  npm install -g @google/gemini-cli"
    exit 1
fi

# 履歴の表示
echo ""
echo -e "${GREEN}相談履歴:${NC}"
echo "相談内容: $CONSULT_FILE"
echo "回答: $RESPONSE_FILE"

# 相談内容をクリップボードにコピー(macOSの場合)
if command -v pbcopy &> /dev/null; then
    echo "$RESPONSE_FILE" | pbcopy
    echo -e "${GREEN}回答ファイルのパスをクリップボードにコピーしました${NC}"
fi

スクリプトの使用方法

1. スクリプトの保存

上記のスクリプトをconsult-gemini.shという名前で保存します:

# スクリプトを作成
nano consult-gemini.sh

# または、お使いのエディタで作成
code consult-gemini.sh

2. 実行権限の付与

chmod +x consult-gemini.sh

3. 環境変数の設定(APIキーを使用する場合)

# 一時的に設定
export GEMINI_API_KEY="your-api-key-here"

# 永続的に設定(.bashrcまたは.zshrcに追加)
echo 'export GEMINI_API_KEY="your-api-key-here"' >> ~/.bashrc
source ~/.bashrc

4. スクリプトの実行例

# 基本的な使用方法
./consult-gemini.sh -t "API設計" -q "RESTfulなエンドポイント設計について教えてください"

# ファイルを参照する場合
./consult-gemini.sh -t "コードレビュー" -q "このコードの改善点を教えてください" -f "src/api/users.js"

# 複数ファイルを参照する場合
./consult-gemini.sh -t "アーキテクチャ" -q "このシステム設計の問題点は?" -f "docs/architecture.md" -f "src/index.js"

スクリプトの機能説明

エラーハンドリング

  • 必須引数のチェック
  • ファイルの存在確認
  • Gemini CLIの実行可否確認
  • APIキーの設定確認

便利機能

  • カラー出力で見やすい表示
  • 相談履歴の自動保存
  • タイムスタンプ付きファイル名
  • 回答の概要表示
  • macOSでのクリップボードコピー機能

セキュリティ配慮

  • APIキーを直接スクリプトに記載しない
  • 環境変数または設定ファイルから読み込み
  • エラー時の適切なメッセージ表示

参考記事リンク