ルールファイルはどこに置く?
プロジェクトのルールは.claude/rules/、個人のルールは~/.claude/rules/に置く。後者はマシン上の全プロジェクトに適用される。.md1つにつき1トピック。
パス指定ルールが毎セッション現れるのはなぜ?
frontmatterのYAMLが壊れていないか確認する。ドキュメントによれば、解析に失敗するとpathsなしとして無条件に読み込まれる。claude --debugで解析エラーを見る。
ルールとスキルの違いは?
ルールは毎セッション、または一致するファイルを開いたときに読み込まれる。スキルは呼び出したとき、またはClaudeが関連すると判断したときだけ読み込まれる。常にコンテキストにある必要のないタスク向けの指示にはスキルが勧められている。
エンジニアではありません。一言でいうと?
社員ハンドブックに例えると、全員が守る規則は総則に置き、経理部だけが必要な規則は、経理部に入ったときに渡される。
CLAUDE.mdが長くなり続けるのは、多くの人が最初にぶつかる問題だ。公式は1ファイル約200行以内を勧めており、それより長いとコンテキストを消費して遵守度が下がる。公式の解決策の1つが.claude/rules/で、ルールを複数ファイルに分け、特定のファイルにClaudeが触れたときだけ読み込まれるルールも作れる。本稿はドキュメントに沿った入門手順だ。特記以外はすべて公式のメモリページ(How Claude remembers your project)に基づく。手順は自分のマシンで実行していないので、一度試して確認してほしい。
your-project/
├── .claude/
│ ├── CLAUDE.md
│ └── rules/
│ ├── code-style.md # no paths: loads at launch
│ └── api.md # has paths: loads on matching files
└── src/api/users.ts
1つの.mdファイルに1つのトピックを入れ、内容が分かるファイル名を付ける(ドキュメントの例はtesting.md、api-design.md)。frontend/、backend/のようなサブディレクトリも再帰的に検出される。pathsのないルールは起動時に読み込まれ、優先度は.claude/CLAUDE.mdと同じだ。
---
paths:
- "src/api/**/*.ts"
---
API rules
- Validate all input before using it
- Return errors in the standard error format
ドキュメントによれば、pathsはClaude Codeがルールから読むfrontmatterの唯一のフィールドで、他のフィールドはエラーなく無視され、読み込み前にfrontmatterは取り除かれる。pathsはYAMLリストまたはカンマ区切りの文字列を受け付ける。
パス指定ルールは、ClaudeがRead、Write、Editで一致するファイルを操作したときに読み込まれる。ドキュメントが「読み取り」と数えるBashコマンド(単一ファイルへのcatやheadなど)で一致ファイルを見たときにも読み込まれる。つまり、ファイルに触れないままセッションを開いただけでは、そのルールはコンテキストにない。pathsのないルールは無条件に読み込まれ、すべてのファイルに適用される。
**/*.ts:どのディレクトリにあるTypeScriptファイルもsrc/**/*:src/以下のすべてのファイル*.md:プロジェクトルートのMarkdownファイルsrc/components/*.tsx:特定ディレクトリのReactコンポーネントsrc/**/*.{ts,tsx}のような波括弧展開が使える。1つのルールのpathsリスト全体で、展開後1,000パターンと4 MiBの予算を共有し、超えるパターンは展開されずに使われ、波括弧は文字そのものとなって何にも一致しない。pathsのないルールとして読み込む。APIファイル専用のつもりのルールが、全セッションで読み込まれることになる。解析エラーはclaude --debugで見られる。[を括弧式の始まりと扱い、括弧式として読めないパターン(photos [2024/など)は無効で何にも一致しないが、同じルールの他のパターンは動き続ける。文字としての[に一致させるにはphotos \[2024/と書く。.claude/rules/はシンボリックリンクをサポートし、共有ルールを複数プロジェクトにリンクできるが、作業ディレクトリ外を指すリンクは外部インポートの承認が先に必要で、承認後に読み込まれるのはpathsフィールドのないルールだけだ。承認なしで共有するなら、マシン上の全プロジェクトに適用される~/.claude/rules/に置く。公式ドキュメントから確認できるのは、指示ファイルの読み込み時に発火するInstructionsLoaded hookがあること、そしてclaude --debugでfrontmatterの解析エラーが見られることだ。第三者の解説(claudefa.st)は/memoryが読み込み済みのCLAUDE.mdとルールファイルを一覧すると述べるが、私は確認していないので、自分のバージョンで確かめてほしい。より直接的な方法(私の提案で未検証):ファイルに触れずに新しいセッションを開き、Claudeに「今適用されるAPIルールは?」と聞く。次にsrc/api/users.tsを読ませてもう一度聞く。2つの答えは違うはずだ。
ドキュメントによれば、ルールは毎セッション、または一致するファイルを開いたときに読み込まれる。常にコンテキストにある必要のないタスク向けの指示にはスキルを使い、スキルは呼び出したとき、またはClaudeが関連すると判断したときだけ読み込まれる。私の整理:プロジェクト全体に当てはまる短いルールはCLAUDE.md、特定の種類のファイルに関わるものはパス指定ルール、一連のワークフローはスキル。また第三者の解説は、圧縮後にパス指定ルールはClaudeが一致するファイルを再び読むまで戻らないと述べるが、公式ドキュメントでは見つけられなかったので、可能性として扱う。