前のレッスンで作った計画(plan.md)をもとに、実際にコードを書く段に入ります。ここで最初につまずきやすいのが、「チームのルールをどこに書けばいいか分からない」という問題です。CLAUDE.mdに書いたのに守られない、スキルを作ったのに呼ばれない、ということが起こります。
原因は、3つの層それぞれの強さが違うことです。
CLAUDE.md:毎回読まれるが、あくまで助言
CLAUDE.mdは、セッションが始まるたびに読み込まれる、チーム共通のルールを書く場所です。技術構成・命名規則・落とし穴などを書いておくと、新しく加わったメンバーが必要とする文脈をClaudeに渡せます。
ただし、CLAUDE.mdは強制される設定ではなく、文脈として扱われます。公式ドキュメントも、CLAUDE.mdと自動メモリはどちらも会話の最初に読み込まれるが、Claudeの判断に関わらず行動を確実にブロックしたい場合は、あとで説明するフックを使うべきだと述べています。CLAUDE.mdに「本番のデータベースには触らない」と書いても、それは強いお願いであって、鍵のかかったドアではありません。
スキル:組織の知識を、手順として配る
一貫して適用したい組織的な知識は、CLAUDE.mdに書き足すのではなく、スキル(SKILL.md)として切り出します。CLAUDE.mdが「常に読む前提知識」なのに対し、スキルは特定の作業に関連するときだけClaudeが判断して読み込む、または/名前で明示的に呼び出す形です。
技術構成、命名規則、プロジェクト全体で常に効かせたい前提
決まった手順の作業(デプロイの手順、レビューの観点、定型のチェックリストなど)
スキルは.claude/skills/に置いてリポジトリにコミットすれば、チーム全員に配布されます。個人用に持ち回りたい手順は~/.claude/skills/に置けば、そのマシンで開くすべてのプロジェクトに効きます。指示の置き場所の全体像は、指示の置き場所でさらに詳しく扱っています。
フック:決定論的に強制する
CLAUDE.mdもスキルも、あくまでClaudeへの「助言」です。絶対に破ってほしくないルールは、フックに任せます。フックは、Claude Codeのライフサイクルの特定の時点で実行されるユーザー定義のシェルコマンドです。公式ドキュメントは、フックについて「LLMが選ぶかどうかに頼らず、特定の行動を必ず起こす、決定論的な制御を与える」ものだと説明しています。
たとえば、保護したいファイル(.envやpackage-lock.jsonなど)への書き込みを防ぎたいとき、PreToolUseというイベントで、編集(Edit・Write)が実行される前にチェック用のスクリプトを走らせます。対象のパスに一致したら、スクリプトは終了コード2で処理を止めます。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": ".claude/hooks/block-protected-paths.sh" }
]
}
]
}
}
止められた理由はClaudeにそのまま伝わるので、Claudeは別のやり方を考え直せます。ここが、単に「やってはいけません」と書いたCLAUDE.mdとの決定的な違いです。**フックが返す拒否は、権限モードをどれだけ緩めても上書きできません。**公式ドキュメントも、PreToolUseフックはあらゆる権限モードより先に働き、bypassPermissionsのように何でも許可するモードであっても、フックが拒否と答えればツールの実行は止まる、と明記しています。ユーザーが権限モードを変えても回避できないポリシーを、ここで作れるということです。
3つの層を、目的で選ぶ
3つの層の強さ
CLAUDE.md
毎回読まれる前提知識。強制力はなく、書いても守られないことがある
スキル
決まった手順を配る。呼ばれれば効くが、呼ばれなければ効かない
フック
決定論的な強制。権限モードを変えても回避できない
チームのルールを作るときは、まず「これは破られたら困るのか、それとも忘れられたら困るだけなのか」を自分に問うとよいでしょう。破られたら困るものはフックへ、忘れられたら困るだけのものはCLAUDE.mdやスキルへ、という振り分けです。個人でツールを作っている場合も同じで、あとで自分がうっかり触ってしまいそうな箇所には、最初からフックを仕掛けておくと安心です。
やってみよう
演習1:自分のCLAUDE.mdを棚卸しする
いま使っているCLAUDE.md(または似た指示書)を開いて、書かれている項目を1つずつ見てください。「絶対に守られてほしい」ものと、「知っておいてほしいだけ」のものに分けてみましょう。前者がいくつかあれば、フック化の候補です。
演習2:フック化する1つを選ぶ
演習1で見つけた「絶対に守られてほしい」項目のうち、最も事故の被害が大きそうなものを1つ選び、どのイベント(PreToolUseなど)でどう止めるかを、実装する前に言葉で書き出してみましょう。
今日のまとめ
3行で振り返ります。
- CLAUDE.mdは毎回読まれる助言、スキルは呼ばれたときだけ効く手順、フックは権限モードを超えて機能する決定論的な強制
- 「破られたら困るか、忘れられたら困るだけか」で、どの層に置くかを判断する
- フックの拒否は
bypassPermissionsのような緩いモードでも上書きできない
次のレッスンでは、書いたコードを完了と報告する前に、Claude自身に確かめさせる「確かめる段」を見ていきます。実装を始める前の心構えは、チャットからClaude Codeへでも一人で作る人向けに扱っています。
セルフチェック
1. CLAUDE.mdの性質として正しいものはどれですか。
2. フックの拒否(deny)についての説明として正しいものはどれですか。
3. スキルとCLAUDE.mdの使い分けとして、本文が挙げているものはどれですか。