エンジニアの思い立ったが吉日

このブログでは、「あ、これ面白い!」「明日から仕事で使えそう!」と感じたIT関連のニュースやサービスを、難しい言葉を使わずに分かりやすく紹介しています。ITに詳しくない方にも楽しんでもらえるような情報を発信していくので、ぜひ「継続的な情報収集」の場としてご活用ください。

【エンジニア必見】Gemini CLIの「Hooks」で開発フローを完全自動化する方法【v0.26.0新機能】

「ターミナルのエラーログをコピーして、ブラウザのAIチャットに貼り付けて、回答を待って、またターミナルに戻る……」

このコンテキストスイッチ(思考の切り替え)」に、1日どれくらいの時間を奪われているでしょうか?

Googleが提供するオープンソースのAIエージェント「Gemini CLIに、待望の新機能「Hooks(フック)」が追加されました(v0.26.0以降)。これを使えば、「特定のコマンドを打ったら自動でGitの差分を読み込ませる」「機密情報をAIに送る前に自動でブロックする」といった、自分だけのAIワークフローを構築できます。

本記事では、単なるツールの紹介にとどまらず、「Hooksを使って具体的にどう業務を効率化するか」に焦点を当て、実践的なスクリプト例とともに解説します。

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. メリットと注意点(導入前に知っておくべきこと)

信頼性を高めるため、デメリットについても触れておきます。

メリット

  1. コンテキストスイッチの撲滅: エディタとターミナルから一歩も出ずに完結する。
  2. チームごとのルール強制: 「必ずテストコードを書かせる」といった指示をシステムプロンプトとしてHooksで強制挿入できる。
  3. モデルの進化に追従: CLI自体が最新のGeminiモデル(1.5 Pro/Flashなど)を利用するため、性能が高い。

注意点・デメリット

  • 設定のハードル: PythonBashスクリプトを書く必要があり、非エンジニアには敷居が高い。
  • 実行リスク: エージェント機能(自律実行)は強力ですが、誤って重要なファイルを削除・上書きするリスクがあります。「実行前に確認(Human-in-the-loop)」の設定を必ず有効にしましょう。
  • デバッグの難しさ: Hooksがエラーを吐いた際、どこで詰まったか(JSONの形式ミスなど)の切り分けに慣れが必要です。

まとめ:次はあなたのワークフローを変える番です

Gemini CLIのHooksは、単なる便利機能ではなく、「AIを自分専用の優秀な部下に育てるための教育システム」と言えます。

「毎回同じような指示をしているな」と感じたら、それはHooksで自動化するチャンスです。まずは簡単な「Gitの差分読み込み」から始めてみてはいかがでしょうか。

あなたが今すぐやるべきアクション

ターミナルを開き、以下のコマンドで今のプロジェクトにGemini CLIを導入してみてください。 npx @google/gemini-cli chat --system "あなたは私の専属シニアエンジニアです"

まずはHooksなしで対話を試し、そのレスポンスの速さと精度を体感した後に、記事内のPythonスクリプトをコピペしてHooksを設定してみましょう。開発体験が劇的に変わるはずです。

developers.googleblog.com

当サイトは、アフィリエイト広告を使用しています。