Skip to main content

セッションフック

hooks を使うと、Copilot セッションの各ライフサイクルで処理を差し込めます。
ツール実行制御、監査ログ、プロンプト補強、エラーハンドリングなどを、コア実装を変更せずに追加できます。

フックの流れ

基本的な使い方

利用可能なフック

null を返すとデフォルト動作が継続されます。

代表的なユースケース

1) Permission control(実行制御)

  • onPreToolUse で許可ツールを allow-list 方式にする
  • 破壊的操作は permissionDecision: 'ask' で人間承認
  • permissionDecisionReason で拒否理由を明示
  • toolName の候補は Tools の一覧で確認する(例: view, glob, bash

2) Auditing / compliance(監査)

  • ライフサイクルフックを組み合わせて監査イベントを収集
  • 収集データはセッションID単位で永続化

3) Prompt enrichment(入力補強)

  • onSessionStart でプロジェクト情報(言語、FW、規約)を additionalContext に追加
  • onUserPromptSubmitted でショートカット(/fix, /test)を展開

4) Result filtering(結果整形)

  • onPostToolUse で API key / token / password などをマスク
  • 長すぎる結果は要約化し、必要時のみ詳細を返す

5) Error recovery(障害復旧)

  • onErrorOccurredmodel_call かつ recoverable=true のときだけ retry
  • 非回復系は userNotification で利用者向けに簡潔に通知

6) Session metrics(計測)

  • onSessionStart で開始時刻を記録
  • onPreToolUse / onUserPromptSubmitted でカウンタ更新
  • onSessionEnd で所要時間・ツール回数・終了理由を出力

Hook input / output 型

共通入力(BaseHookInput

PreToolUseHookInput

PreToolUseHookOutput

PostToolUseHookInput

PostToolUseHookOutput

UserPromptSubmittedHookInput

UserPromptSubmittedHookOutput

SessionStartHookInput

SessionStartHookOutput

SessionEndHookInput

SessionEndHookOutput

ErrorOccurredHookInput

ErrorOccurredHookOutput

ToolResultObject

ツール実行結果の標準オブジェクトです。

ベストプラクティス

  1. 重い同期処理はフック内で直接実行しすぎない。必要なら非同期化する。
  2. 変更不要なときは null を返してデフォルト動作に任せる。
  3. permissionDecision は可能な限り明示する。
  4. クリティカルエラーは抑制しすぎず、ログ/通知経路を持つ。
  5. セッション単位の状態は session id ベースで管理し、onSessionEnd で掃除する。
最新情報は GitHub リポジトリ を参照してください。
最終更新日 2026年4月22日