ANTIGRAVITY LABEN
記事一覧/Antigravity 基本
Antigravity 基本/2026-08-09上級

弾かれるフックより、弾かれないフックのほうが高くつく — matcher 到達可能性を静的に測る

実行され得ないフック設定が読み込み時に拒否されるようになりました。ところが自分の設定を 21 個のツール名へ総当たりで突き合わせると、問題は拒否されなかった側に集まっていました。matcher の到達可能性を静的に検査するスクリプトと、過剰一致の実コストの実測です。

hooks3matcherregexvalidation3antigravity437measurement2

プレミアム記事

保存するたびに整形が走るはずでした。走っていませんでした。

エラーも出ていません。ログにも何も残りません。フックは登録されていて、設定ファイルには確かにそう書いてある。ただ、一度も呼ばれていなかっただけです。

IDE 2.6.0 で、どう転んでも実行されないフック設定が読み込み時に明確なエラーで拒否されるようになりました。黙って無視されていたものが、その場で分かるようになった変更です。ありがたい話でした。

ありがたい話だったのですが、この機を借りて自分の設定を全部洗い直したところ、痛かったのは拒否された側ではありませんでした。

「動かないフック」には二種類あります

一つは、一度も呼ばれないフックです。matcher がどのツール名にも当たらない。イベント名を間違えている。コマンドが PATH 上にない。読み込み時の拒否が捕まえてくれるのは、おおむねこの系統です。

もう一つは、呼ばれすぎるフックです。こちらは設定として何も壊れていません。正規表現は正しくコンパイルできて、コマンドも実在して、フックは元気に動きます。ただ、書いた本人が想定していなかったツールにまで乗っています。

前者は静かに何もしません。後者は静かに何かをします。厄介なのは明らかに後者のほうでした。

そこで、自分の設定を機械的に測ることにしました。

matcher を全ツール名へ総当たりで突き合わせる

matcher が「当たるかどうか」は、matcher 単体を眺めても分かりません。相手側のツール名の集合と突き合わせて初めて決まります。

まず、セッションに実際に登場するツール名を 21 個並べました。組み込みのツールに加えて、接続している MCP サーバが公開する mcp__github__create_issue のような名前も含めています。

そのうえで、自分と身近な開発者がよく書く matcher を集めて、二通りの照合方式で当ててみました。部分一致(re.search 相当)と、完全一致(re.fullmatch 相当)です。

matcher状態部分一致完全一致
""(空文字)ok21021
*コンパイル失敗
.*ok21210
Bashok211
Editok312
Write|Editok523
^Bash$ok110
Bash.*ok220
mcp__.*ok550
Read|Glob|Grepok330
Notebookok101
editok000
(Write|Editコンパイル失敗

コンパイルできた 12 件のうち 5 件、率にして 41.7% が、照合方式を切り替えると当たる本数を変えました。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
matcher に空文字を書くと、部分一致で照合する実装では 21 ツール全部に、完全一致で照合する実装では 1 つも当たらない。同じ 1 文字も書かれていない文字列が、照合方式ひとつで意味を反転させる
読み込み時に弾かれる不達フックの実行コストは 0ms。高くつくのは検査を素通りする過剰一致で、Node のフックなら意図しないツール呼び出し 1 回につき 31.6ms が上乗せされる
hooks.json の到達可能性・イベント名・コマンド解決を静的に検査する 90 行のスクリプト。1,000 グループでも検査部 48.28ms で、CI の 1 ステップに置ける
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Antigravity 基本2026-07-11
付与した権限は、本当に全部使われていますか — Antigravity 統一パーミッションを実使用ログから絞り込む
統一パーミッションで一度「全許可」に倒すと、使われない権限が静かに溜まります。付与した権限と行動ログを突き合わせ、未使用の許可を回収して最小権限へ絞り込む「付与→観測→回収」ループを、動くTypeScript実装と個人運用の実測値でまとめます。
Antigravity 基本2026-07-07
承認ダイアログに指が慣れる前に — Antigravity 統一パーミッションで許可設定を1枚に束ねる
散在した承認ダイアログとMCPごとの許可リスト、繰り返される再認証。Antigravity 2.2.1 の統一パーミッションとOAuthキーリング保存を軸に、許可設定を1枚のポリシーへ集約し「承認疲れ」を設計から断つ運用を、動くコードと実測値でまとめます。
Antigravity 基本2026-07-02
並列エージェントは生成物も並列に増える — 中間生成物の寿命と掃除の設計
worktree・スクリーンショット・一時ブランチなど、並列エージェントが残す中間生成物に寿命を定義し、未コミット作業を守りながら自動で掃除する設計を実測値とともに紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →