はじめに
Claude Codeにはカスタマイズ機能がたくさんあります。CLAUDE.md、rules、memory、skills、subagents、hooks。公式ドキュメントを読めば個々の機能の説明はわかるのですが、結構似ている機能もあって、各種設定をどこに置くべきかわからないことが多いです。
自分の場合、特にskillsとsubagentsの違いがわかりませんでした。どちらも「Claudeに特定の仕事をさせる仕組み」に見えるのに、なぜ2つに分かれているのか。公式ドキュメントを改めて読み込んだら、それぞれの機能の性質の違いが見えてきて、どこに何を書くかの判断基準が持てるようになりました。
本記事では、Claude Codeの6つのカスタマイズ機能について、公式ドキュメントの内容をベースに整理します。
各機能の役割
まず全体像を把握するために、各機能を一言で整理します。
| 機能 | 一言で言うと | 性質 |
|---|---|---|
| CLAUDE.md | リポジトリの方針やコンテキストを伝える | 常時参照 |
| rules | 特定の条件で守るべきルールを伝える | 常時参照(条件付き) |
| memory | 会話から学んだことを蓄積する | 蓄積型 |
| skills | コマンドに応じて手順を実行する | トリガー型 |
| subagents | 独立したコンテキストで専門的に動く | トリガー型(隔離) |
| hooks | 操作の前後にシェルコマンドを自動実行する | 自動実行型 |
なぜこんなに機能があるのか
6つも機能があるのは、それぞれ解決したい課題が違うからです。大きく3つの目的に分けられます。
- コンテキストを効率的に管理する — CLAUDE.md、rules、memory。コンテキストウィンドウは有限なので、何をいつ読み込むかの制御が要ります。常に必要な情報はCLAUDE.md、条件付きで必要な情報はrules、Claudeが自分で蓄積する情報はmemory
- AIの仕事を型化する — skills、subagents。繰り返し行うタスクを手順として定義しておくことで、毎回プロンプトを書き直さなくてよくなります
- AIにルールを確実に守らせる — hooks。Claudeの判断に頼らず、シェルコマンドで決定論的に制約を強制します
何かを追加しようとして「どこに書くべきか」と迷ったら、まず「自分がやりたいことはどの目的か?」を考えてみると、候補が絞れます。
この目的を頭に置きつつ、各機能を見ていきます。
CLAUDE.md
目的: コンテキスト管理
プロジェクト全体の方針・コンテキストを書く場所です。セッション開始時に毎回読み込まれます。スコープはプロジェクト(./CLAUDE.md)、ユーザー(~/.claude/CLAUDE.md)、組織の3段階です。
公式ドキュメントでは200行以下が推奨されています。コンテキストウィンドウに読み込まれた内容は、会話が長くなると圧縮されて指示が薄れていく可能性があるので、短く書くほど重要な指示が残りやすくなります。
@path/to/file の構文で別ファイルをインポートできますが、インポートした内容もCLAUDE.mdの一部として常時ロードされます。必要なときだけ読み込ませたい場合はrulesを使います。
rules
目的: コンテキスト管理
.claude/rules/ ディレクトリに置くマークダウンファイルです。CLAUDE.mdとの一番の違いは、パス指定で適用範囲を絞れること。frontmatterで paths: ["src/api/**/*.ts"] のように指定すると、該当ファイルを触るときだけルールが読み込まれます。
CLAUDE.mdとrulesはsubagentにも引き継がれるので、プロジェクト全体の制約はここに書いておけばsubagentでも効きます。
memory
目的: コンテキスト管理
Claudeが会話の中で「これは将来役に立つ」と判断した情報を自動で保存する仕組みです。「これを覚えておいて」と明示的に伝えることもできます。セッション開始時にインデックスファイル(MEMORY.md)の先頭200行が読み込まれ、それ以外はClaudeが必要と判断したタイミングでオンデマンドに読みに行きます。
skills
目的: 仕事の型化
再利用可能なタスクのテンプレートです。.claude/skills/<skill-name>/SKILL.md に定義して、/skill-name で実行します。デフォルトではメイン会話の中で実行され、結果もメイン会話に残ります。
context: fork で隔離実行、disable-model-invocation: true でClaude自動実行の防止ができます。
subagents
目的: 仕事の型化
独立したコンテキストで動く専門エージェントです。.claude/agents/<agent-name>/AGENT.md に定義します。メイン会話とは別のコンテキストウィンドウで動き、自分のsystem promptを持ち、実行結果はサマリーだけが返ります。複数を同時に起動して並列実行もできます。
親のskillsやmemoryは自動では継承しません。CLAUDE.mdとrulesは引き継がれますが、skillsとmemoryはfrontmatterで明示的に設定する必要があります。
hooks
目的: ルールの強制
Claude Codeのライフサイクルイベントに対して自動実行されるシェルコマンドです。他の機能と違い、Claudeの判断ではなく決定論的に実行されます。セッション開始時の環境変数設定、ツール使用前の危険な操作のブロック、ファイル編集後の自動フォーマットなどに使います。
どこに書くか迷ったときの判断基準
CLAUDE.md vs rules
プロジェクト全体に適用する基本指示はCLAUDE.md、ファイル種別やディレクトリごとに異なるルールはrules。CLAUDE.mdが長くなってきたらrulesへの切り出しを検討する。
- 「コミットメッセージにCo-Authored-Byを付けろ」→ プロジェクト全体の方針なので CLAUDE.md
- 「APIのエンドポイントにはバリデーションを入れろ」→
src/api/を触るときだけ必要なので rules(パス指定付き) - 「テストファイルではモックを使わず実DBに接続しろ」→
**/*.test.ts向けの rules
rules vs memory
自分が決めた制約はrules。Claudeが会話の中で学んだことはmemory。rulesは人間が書き、memoryはClaudeが書く、と覚えるとわかりやすい。
- 「コミットメッセージは英語で書け」→ 人間が決めたルールなので rules
- 「このユーザーはです・ます調を好む」→ Claudeが会話から学んだことなので memory
- 「このプロジェクトのビルドコマンドは
pnpm build」→ 一見memoryっぽいけど、プロジェクト共通の事実なので CLAUDE.md がいい
rules vs skills
rulesは常時読み込まれる(パス指定があればファイル操作時に読み込まれる)のに対し、skillsはClaudeが「今の会話に関連がある」と判断したときに読み込まれます。skillsは「コマンドの手順書」というイメージが強いですが、アーキテクチャの参照情報やプロジェクト固有のルールを置くこともできます。ポイントは、何をきっかけに読み込ませたいかです。
- 「コミットメッセージの規約」→ コミット時に毎回必要なので rules
- 「APIの設計原則とエンドポイント一覧」→
src/api/を触るときだけ必要なので rules(パス指定付き) - 「プロジェクトのアーキテクチャ概要とエージェント構成」→ 常に必要なわけではないが、構成に関する会話のときにClaudeに参照してほしいので skills
skills vs subagents
メイン会話の中でやるならskills、隔離するならsubagents。迷ったらまずskillsで作って、コンテキストが膨れて困るようならsubagentsに切り替えれば良さそうです。
- 「記事の下書きをレビューして」→ 会話の流れで結果を見ながら進めたいので skills
- 「このPRのコードを3つの観点で並列にレビューして」→ 隔離+並列なので subagents
- 「デプロイ手順を実行して」→ メイン会話で進捗を追いたいし、人間が
/deployで明示的に実行するので skills(disable-model-invocation: true付き)
skills (context: fork) vs subagents
context: forkを使うとskillsも隔離できるので、subagentsとさらに似てきます。ただしcontext: forkは隔離の仕組みであって、並列化の仕組みではありません。並列実行が必要ならsubagentsを使います。
- 「コンテキストを汚したくないだけ」→ 隔離だけでいいので skills に
context: fork - 「複数ファイルを同時に別々の観点でレビューしたい」→ 隔離+並列が要るので subagents
まとめ
結構似ている機能もあるので最初から完璧に使い分けるのは難しいかもしれません。ただなんのためにこの機能があるのかをざっくり理解しておくと、迷ったときに判断しやすくなります。
今はClaude Code自身がmemoryの書き込みやrulesの提案をしてくれるので、まずはCLAUDE.mdに書いてみて、長くなったらrulesに切り出す、手順が固まったらskillsにする、くらいの気軽さでトライアンドエラーしていくのがいいかなと思いました。
使いこなしていきましょう!