Claude Code CLAUDE.md 設計のベストプラクティス——6レイヤーの使い分けと落とし穴

9分で読めるテック

Claude Codeの設定ファイル、何が何だかわからなくなっていませんか。

CLAUDE.md、Rules、Commands、Skills、Agents、MCP、Plugins。公式ドキュメントを読んでも「で、結局どこに何を書けばいいの?」がはっきりしない。自分も最初はCLAUDE.mdにルールもワークフローも全部詰め込んで、コンテキストが溢れて前半の指示を忘れられる、という事故を繰り返していました。

2025年5月にClaude Codeへ導入された Skills 2.0 は、従来のカスタムスラッシュコマンドの大幅な拡張です。スキルを独立したコンテキストで実行する context: fork、使えるツールを制限する allowed-tools、モデルを指定する model といった設定が追加され、「AIへの指示をどう構造化するか」という設計の幅が広がりました。

この記事では、Skills 2.0を含む設定レイヤーの使い分けパターンと、運用で踏んだ落とし穴を共有します。

6つのレイヤーの役割整理

まず全体像から整理します。Claude Codeの設定は6つのレイヤーに分かれます。

レイヤー役割何を置くか
Rulesどう振る舞うかコーディング規約、命名規則、判断基準
Commands何をやるかユーザーが / で呼び出すワークフロー
Skillsどうやるか再利用可能なドメイン特化タスク
Agents誰がやるかスキルから委譲されるサブタスク
MCP何とつながるか外部システムとの接続(Gmail、DB等)
Plugins何が使えるか公式ツール拡張(ブラウザ操作等)

各レイヤーの詳細は公式ドキュメントを参照してください。

この整理にたどり着くまでに時間がかかりました。最初はRulesとSkillsの境界が曖昧で、「コーディング規約」も「PRレビューの手順」も、同じCLAUDE.mdに書いていたからです。

判断基準はシンプルで、実行を伴うかどうか、この一点です。

実行を伴わない原則・判断基準はRulesに書く(「こう振る舞ってね」)。実行を伴うワークフローはCommandsかSkillsに書く(「これをやってね」)。この軸で分けるだけで、CLAUDE.md の肥大化はかなり防げます。

実際にどう使っているか

抽象的な話だけだと伝わらないので、自分の運用を具体的に見せます。

メルマガ自動トリアージ

/digest-newsletter というコマンドで、Gmailの未読メルマガを一括処理しています。Gmail連携で未読メールを取得し、件名と冒頭テキストで簡易トリアージをかけます。重要メールは本文精読とリンク先の内容も取得した上で、必読・ネタストック・スキップの3分類に振り分け、Obsidianにダイジェストノートを自動生成します。

20通のメルマガがリンク先の深掘りも含めて1回の実行でダイジェストになります。詳しい実装は別記事で紹介しています。

日次アナリティクス

運用中の複数サイトのGA4とGoogle Search Consoleのデータを毎日取得して、週次比較のトレンド分析をObsidianに保存しています。「先週と比べてどのページのアクセスが伸びたか」が、データを見に行かなくても手元に届きます。

Zettelkasten管理

Obsidian Vaultの知識管理をスキルに任せています。FleetingNote(走り書きメモ)→ LiteratureNote(要約)→ PermanentNote(自分の考え)という3段階の知識変換プロセスを、スキルが支援してくれます。たとえば技術記事を読んで走り書きのメモを残すと、スキルが要点を構造化した要約ノートに変換し、「この内容は以前書いた〇〇のノートと関連がある」と既存の知識との接続を提案してくれます。自分で考えて書く部分は残しつつ、整理と発見の手間を減らせる運用です。

CLAUDE.md 設計で工夫すべき3つのポイント

ここからが本題です。スキルを作ること自体は簡単ですが、「うまく動く設計」にするにはコツがあります。

1. CLAUDE.mdは目次に徹する

最初にやりがちなのが、CLAUDE.mdにコーディング規約もワークフローも判断基準も全部書くことです。

CLAUDE.mdはClaude Codeが会話の最初に毎回読み込むファイルです。ここが大きいと、AIのコンテキストウィンドウを最初から圧迫して、長い会話の後半で前半の指示を忘れる原因になります。自分はこれで何度も失敗しました。

対策は明確で、CLAUDE.mdには具体的な内容を書かないことです。ルールは .claude/rules/ に分離して、CLAUDE.mdには「詳しくはこちらを見て」というポインタだけ置きます。必要なときだけ参照される形にすれば、コンテキストを節約できます。複数プロジェクトで rules/ を分離した実例は別記事に書いています。

2. context: fork でコンテキストを分離する

Skills 2.0で追加された context: fork は、スキルをメインの会話とは別のコンテキストで実行する機能です。スキルの内容がサブエージェントへのプロンプトとなり、メインの会話のコンテキストを消費しません。処理が終わると、結果だけがメインに返ってきます。

これが効くのは、大量のデータを処理するスキルです。たとえばメルマガ20通を処理すると、メール本文やリンク先のコンテンツでコンテキストが膨大になります。context: fork なしだと、後半のメールを処理する頃には前半の指示を忘れている、ということが実際に起きます。

ただし注意点があります。context: fork はスキル内に具体的なタスク指示がある場合にのみ意味があります。「こういう方針で動いて」というガイドラインだけを書いたスキルをforkしても、別働隊は何をすべきかわからず空振りします。

3. allowed-tools でツールを制限する

スキルにはどのツールを使えるかを制限する allowed-tools という設定があります。

調査系のスキルにファイル編集やコマンド実行の権限まで与えると、意図しない変更をしてしまうリスクがあります。「読み取りと検索だけ」に制限すれば、安全に調査だけをさせられます。

---
name: seo-analyzer
description: サイトのSEO状態を分析する
allowed-tools: ["Read", "Grep", "WebFetch"]
---

目的に合わせて最小限の権限だけを許可する。権限管理の基本と同じ考え方です。

まず何から始めるか

もしCLAUDE.mdに何でも書いている状態なら、最初の一歩はこれです。

CLAUDE.mdに書いているワークフローを1つ、Skillsに切り出してみてください。

最小限のSKILL.mdはこれだけです。

---
name: my-first-skill
description: 何をするスキルかを具体的に書く
---

ここにワークフローの手順を書く

これを .claude/skills/my-first-skill/SKILL.md に置くだけで、/my-first-skill として呼び出せるようになります。慣れてきたら context: fork を追加してコンテキスト分離を試し、allowed-tools で権限を絞る。段階的に育てていけばいいと思います。

MCPレイヤーとの組み合わせ(GmailやDBとの連携)についてはこちらで詳しく書いています。

質問・リクエストを送る

記事についての質問や、取り上げてほしいテーマがあればお気軽にどうぞ。いただいた質問はブログ記事として回答し、Q&Aページで公開することがあります。

このサイトについて

井上 周(Amane Inoue)の個人ブログです。技術・読書・ドラマ・旅・大学生活のことを書いています。