「ターミナルのエラーログをコピーして、ブラウザのAIチャットに貼り付けて、回答を待って、またターミナルに戻る……」
この「コンテキストスイッチ(思考の切り替え)」に、1日どれくらいの時間を奪われているでしょうか?
Googleが提供するオープンソースのAIエージェント「Gemini CLI」に、待望の新機能「Hooks(フック)」が追加されました(v0.26.0以降)。これを使えば、「特定のコマンドを打ったら自動でGitの差分を読み込ませる」「機密情報をAIに送る前に自動でブロックする」といった、自分だけのAIワークフローを構築できます。
本記事では、単なるツールの紹介にとどまらず、「Hooksを使って具体的にどう業務を効率化するか」に焦点を当て、実践的なスクリプト例とともに解説します。
- 1. Gemini CLIと新機能「Hooks」とは?
- 2. 実践ユースケース:Hooksで何が変わるのか?
- 3. 導入手順:3ステップで環境構築
- 4. 徹底比較:Web UI vs Copilot CLI vs Gemini CLI
- 5. メリットと注意点(導入前に知っておくべきこと)
- まとめ:次はあなたのワークフローを変える番です
1. Gemini CLIと新機能「Hooks」とは?
まず、前提となるツールについて簡単に整理します。
Gemini CLI(@google/gemini-cli)
これはGoogle Cloudの gcloud コマンドとは異なり、開発者のターミナル上で動作する自律型AIエージェントです。
- 特徴: 自然言語でファイルを操作したり、コマンドを実行したり、コードを修正したりできます。
- 導入:
npx @google/gemini-cliで即座に起動可能です。
Hooks(フック)の正体
Hooksは、Gemini CLIの動作の「節目」に、自作のスクリプト(Python, Bash, Node.jsなど)を割り込ませる機能です。
Web開発における「ミドルウェア」や、Gitの「pre-commitフック」をイメージすると分かりやすいでしょう。
▼ Hooksが介入できるタイミング(ライフサイクル)
| タイミング | イベント名 | 活用イメージ |
|---|---|---|
| 開始時 | SessionStart |
プロジェクトのルール(コーディング規約)をAIに読み込ませる |
| 送信前 | BeforeAgent |
ユーザーの入力に自動で補足情報(Git差分など)を付与する |
| ツール実行前 | BeforeTool |
AIがファイル削除などの危険なコマンドを実行する前に警告/ブロックする |
| 回答後 | AfterAgent |
AIとの対話ログを社内の監査システムに送信・保存する |
2. 実践ユースケース:Hooksで何が変わるのか?
ここからは、「なるほど、こう使うのか」と腹落ちしていただくための具体的な活用事例を3つ紹介します。
【ケース1】「文脈不足」をゼロにする自動コンテキスト注入
課題: AIにコード修正を頼む際、「どのファイルの話?」と聞き返されたり、現状の変更点を説明するのが面倒。
解決策 (BeforeAgent Hook):
ユーザーがプロンプトを入力する直前に、「現在ステージングされているGitの変更内容(diff)」を自動的にプロンプトの先頭に付与します。
▼ フックの仕組み(概念コード)
# hooks/git_context.py (Pythonでの実装例) import sys import subprocess import json def main(): # ユーザーの入力をstdinから受け取る input_data = json.load(sys.stdin) # git diffを取得 diff = subprocess.check_output(["git", "diff", "--cached"], text=True) if diff: # 入力メッセージにdiff情報を密かに追加 original_text = input_data.get("text", "") new_text = f"【現在の変更差分】\n{diff}\n\n【ユーザーの依頼】\n{original_text}" # 変更後の内容をstdoutにJSONで返す print(json.dumps({"text": new_text})) else: # 変更なしならそのまま返す print(json.dumps({})) if __name__ == "__main__": main()
効果:
あなたは「このバグ直して」と打つだけ。AIは裏側で勝手に差分を読み込み、「utils.pyの変更箇所にバグがありますね」と即答してくれます。
【ケース2】「うっかり流出」を防ぐセキュリティガード
課題: APIキーやAWSの認証情報を誤ってプロンプトに含めてしまい、セキュリティ事故になるリスクがある。
解決策 (BeforeTool Hook):
AIに入力データが渡る前、またはAIが外部ツールを叩く前に、正規表現でAPIキーらしき文字列(sk-proj-... など)を検知し、通信を遮断します。
- 動作: 入力テキストをスキャン → 危険なパターンを検知 →
exit 1でGemini CLIを強制停止し、警告を表示。 - メリット: 企業導入時のコンプライアンス要件を、「人間の注意」ではなく「システム」で担保できます。
【ケース3】新人教育・ナレッジ共有への活用
課題: ベテランエンジニアがAIとどう対話して問題を解決したのか、そのノウハウが個人に閉じてしまう。
解決策 (AfterAgent Hook):
セッション終了時、対話ログ(プロンプトと回答のセット)を自動的にMarkdown化し、チームの共有NotionやSlackチャンネルにWebhookで送信します。
3. 導入手順:3ステップで環境構築
実際にHooksを試すための最短手順です。
ステップ1:Gemini CLIの準備
Node.js(v18以上推奨)環境があれば、インストール不要でnpx実行できます。
# Googleアカウントでログイン(初回のみ) npx @google/gemini-cli auth login
ステップ2:フック設定の有効化
プロジェクトのルートディレクトリ(またはホームディレクトリ)に .gemini/config.json のような設定ファイルを作成し、Hooksを登録します。
{ "hooks": { "BeforeAgent": "python3 /path/to/my/hooks/git_context.py" } }
ステップ3:スクリプトの作成
前述のPythonスクリプトなどを指定のパスに配置します。
重要: Hooksスクリプトは「標準入力(stdin)でJSONを受け取り、標準出力(stdout)でJSONを返す」というルールを厳守してください。余計な print("debug") などが入るとJSONパースエラーで動作しません(デバッグは標準エラー出力 stderr を使用)。
4. 徹底比較:Web UI vs Copilot CLI vs Gemini CLI
なぜ今、あえてターミナルでGeminiを使うのか? 競合ツールと比較しました。
| 特徴 | Gemini Web UI (Browser) | GitHub Copilot CLI | Gemini CLI + Hooks |
|---|---|---|---|
| 主な用途 | 文章作成、調べ物 | コマンドの提案・生成 | エージェント的なタスク実行 |
| コンテキスト | 手動でコピペが必要 | 現在のファイル等を限定的に認識 | Hooksで無限に拡張可能 |
| ファイル操作 | 不可(コード生成のみ) | コマンド生成のみ | 直接編集・作成が可能 |
| 自動化 | 不可 | 限定的 | 高度にスクリプト化可能 |
| セキュリティ | ユーザー依存 | MSのポリシー準拠 | 自作フックで制御可能 |
結論:
5. メリットと注意点(導入前に知っておくべきこと)
信頼性を高めるため、デメリットについても触れておきます。
メリット
- コンテキストスイッチの撲滅: エディタとターミナルから一歩も出ずに完結する。
- チームごとのルール強制: 「必ずテストコードを書かせる」といった指示をシステムプロンプトとしてHooksで強制挿入できる。
- モデルの進化に追従: CLI自体が最新のGeminiモデル(1.5 Pro/Flashなど)を利用するため、性能が高い。
注意点・デメリット
- 設定のハードル: PythonやBashでスクリプトを書く必要があり、非エンジニアには敷居が高い。
- 実行リスク: エージェント機能(自律実行)は強力ですが、誤って重要なファイルを削除・上書きするリスクがあります。「実行前に確認(Human-in-the-loop)」の設定を必ず有効にしましょう。
- デバッグの難しさ: Hooksがエラーを吐いた際、どこで詰まったか(JSONの形式ミスなど)の切り分けに慣れが必要です。
まとめ:次はあなたのワークフローを変える番です
Gemini CLIのHooksは、単なる便利機能ではなく、「AIを自分専用の優秀な部下に育てるための教育システム」と言えます。
「毎回同じような指示をしているな」と感じたら、それはHooksで自動化するチャンスです。まずは簡単な「Gitの差分読み込み」から始めてみてはいかがでしょうか。
あなたが今すぐやるべきアクション
ターミナルを開き、以下のコマンドで今のプロジェクトにGemini CLIを導入してみてください。
npx @google/gemini-cli chat --system "あなたは私の専属シニアエンジニアです"
まずはHooksなしで対話を試し、そのレスポンスの速さと精度を体感した後に、記事内のPythonスクリプトをコピペしてHooksを設定してみましょう。開発体験が劇的に変わるはずです。