開発・技術Claude 公開 2026年10月9日

Claude Codeのフックに失敗時ブロック「onFailure: block」が追加、v2.1.295の変更点

関連: Claude Code ・ フック ・ リリースノート

✔ 事実確認済み(2026-10-08):記事中の事実 18 件を出典の本文と照合しています。

Claude Code v2.1.295 で、フックの失敗時に操作を止める設定 onFailure: "block" が追加されました。Claude Code を業務で使い、フック(特定のタイミングで自動実行されるスクリプト)で社内ルールを守らせたい方に向けた記事です。従来の失敗時の動き、新設定の内容、v2.1.294 の修正点を整理します。

今回の変更の概要

結論から言うと、onFailure: "block" は「フックが正しく動かなかったときに、操作を通さず止める」ための設定です。v2.1.295 のリリースノートには、次のように書かれています。

Added onFailure: "block" for command and HTTP hooks: a hook that can’t start, times out, or exits with an unexpected code blocks the action instead of letting it through

日本語にすると、次のとおりです。

  • 対象は、コマンド(command)フックと HTTP フックです。
  • フックが起動できないとき、時間切れになったとき、想定外の終了コードで終わったときが対象です。
  • この設定を使うと、操作をそのまま通さず、ブロックします。

リリースノートの原文は英語です。設定をどこに書くかなど、細かい書き方は、公式ドキュメントで確認してください。

従来のフックは、失敗しても操作を通すことが多い

新設定の意味を理解するには、これまでの動きを知っておく必要があります。2026年10月9日時点の公式ドキュメント(Hooks reference)には、次の説明があります。

状況 公式ドキュメントの説明(要点)
終了コード 2 ブロックするエラーになる(ブロックできるイベントの場合)
終了コード 2 以外 多くのイベントで、それだけではブロックしない
終了コード 1 有効な JSON が標準出力になければ、ブロックしないエラーとして扱い、操作は進む
時間切れ(command・http・mcp_tool) フックの出力は捨てられ、多くのイベントで判断は出ない
PreToolUse の時間切れ ツール呼び出しはブロックされず、通常の許可の流れで進む
HTTP フックの 2xx 以外の応答、接続失敗 ブロックしないエラーで、実行は続く

公式ドキュメントには、こうも書かれています。ルールを強制したいフックでは exit 2 を使うこと、止まったフックを「関所」として当てにしないことです。

つまり、フックが失敗しても、操作が通ってしまう場面がありました。ルールを守らせるためのフックが、失敗したときに何もしないのは、運用上は不安な点です。onFailure: "block" は、この不安に対応する設定だと読めます。ただし、リリースノートは「どの失敗でも止める」と書いているわけではありません。対象は、上に挙げた3つの場合です。

注意: すべてのフックに onFailure が使えるとは限りません。リリースノートが挙げているのは、コマンドフックと HTTP フックです。

タイムアウトの既定値も確認しておく

時間切れの扱いを考えるときは、既定の待ち時間も知っておくと便利です。公式ドキュメントでは、既定値は次のとおりです。

フックの種類 既定のタイムアウト(秒)
command・http・mcp_tool 600
prompt 30
agent 60

onFailure: "block" を使うと、時間切れも「止める」側に倒れます。重い処理を行うフックでは、既定の待ち時間で足りるかを先に確かめておくと、意図せず操作が止まることを減らせます。

v2.1.294 の修正:指示文で書いた prompt/agent フック

v2.1.295 の1つ前の版である v2.1.294 では、別のフック関連の修正がありました。リリースノートの内容は次の2点です。

  1. 「Block commands that…(〜のコマンドを止める)」のように、指示文として書いた prompt フックと agent フックが、止めるべきものを通してしまう問題を修正しました。
  2. Stop と SubagentStop の prompt フックの判定方法を改善しました。対象は、「Carry on if the build is broken(ビルドが壊れていれば続ける)」のような指示文です。Claude が早く止まりにくくなります。

prompt フックは、公式ドキュメントでは「Claude のモデルに1回だけ評価させ、判断を JSON で返させるフック」と説明されています。agent フックは、Read や Grep などのツールを使える副エージェントを起動して条件を確かめるフックで、「実験的で、変わる可能性がある」と書かれています。指示文でフックを書いている方は、v2.1.294 以降に更新すると、動きが変わる可能性があります。

v2.1.295 のそのほかの変更

フックの設定以外にも、v2.1.295 には多くの変更が入っています。リリースノートから、目立つものを挙げます。

  • Program Status Protocol(OSC 7501)に対応しました。対応するターミナルは、Claude Code が作業中か、あなたの入力待ちか、完了したかを表示できます。
  • /copy の選択肢に引用文が加わり、下書きしたメッセージを > の記号なしでコピーできます。
  • claude plugin install などの実行時に、書き込み先の設定ファイルが読み込まれない場合は警告が出ます。
  • Claude apps gateway まわりの設定や修正が複数あります。

全文は長く、修正項目が多数あります。自分の環境に関わる項目は、リリースノートで探してください。

よくある質問

Q. 今までのフックは、アップデートすると勝手に止める動きに変わりますか。

A. リリースノートには「onFailure: "block" を追加した」と書かれています。既存のフックの動きが自動で変わるとは書かれていません。設定を加えるかどうかは、利用者が選ぶ形と読めます。

Q. 終了コード 2 を返すのと、何が違いますか。

A. 終了コード 2 は、フックが「ブロックしたい」と自分で伝える方法です。onFailure: "block" は、フックが起動できない、時間切れ、想定外の終了コードといった「正常に判断できなかった」場合の扱いを指すと、リリースノートの文面から読めます。

まとめ

  • v2.1.295 で、コマンドフックと HTTP フックに onFailure: "block" が追加されました。起動できない・時間切れ・想定外の終了コードのとき、操作を通さず止めます。
  • 従来は、終了コード 2 以外や時間切れ、HTTP フックの失敗では、操作が進む場面がありました(2026年10月9日時点の公式ドキュメント)。
  • v2.1.294 では、指示文で書いた prompt/agent フックが、止めるべきものを通す問題が修正されました。

フックでルールを守らせている方は、まず公式ドキュメントで onFailure の書き方を確認し、重要なフックから試すとよいでしょう。Claude Code の拡張の仕組み全体は、Claude Mods の解説記事も参考になります。記事の内容は2026年10月9日時点のものなので、最新の仕様は公式サイトで確認してください。

参考・出典