1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

圧縮・@参照・権限の3記事を1枚に重ねると見える「拒否が勝つ」という共通設計

1
Posted at

docs-first ではここ数日、Claude Code のフックについて3本を公開しました。「PreCompact・PostCompact フック:圧縮の前後に処理を挟む」(2026-10-15、https://note.com/docsfirst/n/n5b17a33bb0de )、「@ 参照とフックの実行条件」(2026-10-16、https://note.com/docsfirst/n/n8af254087535 )、「フック失敗時の動作制御と優先順位」(2026-10-18、https://note.com/docsfirst/n/n36a202be1e74 )です。3本はそれぞれ別の機能を扱っています。圧縮の前後に処理を挟む話、@ 参照の挙動の話、失敗時の優先順位の話で、トリガも書かれた時期も違います。

この総説は、その3本を1枚の地図に重ねます。狙いは要約の再掲ではありません。1本ずつ読むと「フックで色々止められる」で終わりますが、3本を突き合わせると、止め方の文法が3種類に分かれている一方で、根っこの原則が1つに揃っていることが見えます。問いはこうです。トリガも時期も違うこの3つを1枚にしたとき、禁止の設定はどの層に、どの順で置くべきか。そして「許可を後から足せば緩む」という前提は本当に成り立つのか。

中心主張と、それを支える構造

中心主張を1文で宣言します。圧縮を止める終了コード、@ 参照を無効化する環境変数、拒否が最優先になる判定順位。この3つは別々の機能に見えて、どれも「どこで、誰が『させない』を決めるか」という同じ設計を別の文法で書いたものです。だから運用では機能ごとに覚えるのではなく、「禁止がどこで決まるか」という1枚の地図を持つのが実務的です。

支える具体を、3本の由来が辿れる形で並べます。

第一に、圧縮の制御(2026-10-15 の記事)は終了コードという文法を使います。

Exit with code 2 to block compaction

終了コード 2 で圧縮をブロックする、という意味です(出典 [1])。ここでのポイントは、フックの戻り値そのものが「させない」の表明になっている点です。2026-10-19 時点の公式ドキュメントで、終了コード 2 は圧縮を止める合図として定義されています。

第二に、@ 参照の制御(2026-10-16 の記事)は環境変数という別の文法を使い、しかも設定できる層が複数あることを明示します。

set CLAUDE_CODE_DISABLE_FILE_MENTIONS=1 in your shell, user settings, or managed settings

この環境変数を 1 に設定すると機能を無効化でき、設定場所は shell、user settings、managed settings のいずれでもよい、という記述です(出典 [1])。終了コードが「その場の戻り値」で決めるのに対し、こちらは「どの層に置くか」で効き方の広さが変わります。公式は3つを並列の選択肢として説明していますが、実務では「個人の shell に置くか、組織の managed settings に置くか」で意味が変わります。層の選択自体が運用判断になります。

第三に、権限の制御(2026-10-18 の記事)は優先順位という3つ目の文法で、しかも全体の背骨にあたる原則を言い切ります。

deny takes priority over defer , which takes priority over ask , which takes priority over allow

deny が defer に優先し、defer が ask に、ask が allow に優先する、という順位です(出典 [2])。ここから、3本に共通する原則が明示されます。拒否側が勝ちます。allow をいくつ足しても、同じ対象に deny があれば通りません。

3つを時系列と対比で揃えると、構造が見えます。10-15 は終了コード、10-16 は環境変数と層、10-18 は判定順位。文法は3種類ですが、向きは1つで、いずれも「許可を広げる」より「禁止を効かせる」側に重みがあります。終了コード 2 は処理を止める方向、環境変数での無効化は機能をオフにする方向、deny 優先は拒否を勝たせる方向です。「後から allow を足せば緩む」という発想は、少なくとも権限判定では成り立ちません。

明日から取る行動です。第一に、機能別の覚え方をやめ、「禁止がどこで決まるか」で棚卸しします。圧縮は終了コード、@ 参照は環境変数と層、権限は判定順位、と決定点を1枚にします。第二に、組織として強制したい禁止は、個人の shell ではなく managed settings 側に置くことを既定の順序にします。CLAUDE_CODE_DISABLE_FILE_MENTIONS を 1 にする場合、どの層に置くかを先に決めます。第三に、圧縮を止めたい処理は PreCompact フックの終了コード 2 で表現し、戻り値に意味があることを前提にレビューします。第四に、権限設計のレビュー観点を「allow が足りているか」から「deny が意図通り勝つか」に変えます。緩める方向の変更は deny がある限り効かない、という前提でチェックします。

References

[1] https://code.claude.com/docs/en/hooks

[2] https://code.claude.com/docs/en/agent-sdk/hooks

[3] https://note.com/docsfirst/n/n5b17a33bb0de

[4] https://note.com/docsfirst/n/n8af254087535

[5] https://note.com/docsfirst/n/n36a202be1e74

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?