← 記事一覧へ
AI生成画像

CLAUDE.mdの書き方:毎回の説明を省く

置き場所、書き方、長さの目安、守らせたいときの別の手段まで。

AI作成 · 約7分 · Claude Codeを一度使った人向け
Claude CodeCLAUDE.mdメモリ
この記事で扱うこと

CLAUDE.mdは「毎セッションの最初に渡す前提」です。置く場所、書く中身、強制できないことの3点を整理します。

セッションは、毎回まっさらから始まる

Claude Codeは、セッションごとに新しいコンテキストで始まります。前回の会話の内容は、そのままでは引き継がれません。そこで、知識を次のセッションに持ち越す仕組みが2つあります。

両方とも「文脈」として渡されるもので、強制される設定ではありません。ルールとして強制したいことは、後の節の方法を使います。

CLAUDE.md自動メモリ(auto memory)
書く人あなたClaude自身
内容指示とルール修正や好みから得た学び
読み込み毎セッション毎セッション(先頭200行か25KBまで)

どこに置くか

置き場所によって、効く範囲と共有される相手が変わります。範囲の広いものから順に読み込まれ、プロジェクトの指示はユーザーの指示より後に文脈へ入ります。

CLAUDE.mdが読み込まれる順番ユーザー全プロジェクト共通の好み~/.claude/CLAUDE.md上位のディレクトリモノレポ全体の共通ルールなど../CLAUDE.mdプロジェクトチームで共有する規約./CLAUDE.mdローカル自分だけのメモ(.gitignoreに入れる)./CLAUDE.local.md起動時にすべて読み込み、上から順に連結する(上書きではない)サブディレクトリの CLAUDE.mdClaudeがそのディレクトリのファイルを読み書きしたときに読み込まれる
図1 作業ディレクトリとその上位にあるCLAUDE.mdは、起動時に範囲の広いものから順に連結される。サブディレクトリのものは、必要になったときに読み込まれる。

作業ディレクトリとその上位のディレクトリにあるファイルは、起動時にすべて読み込まれ、上書きではなく連結されます。サブディレクトリのCLAUDE.mdは、Claudeがそのディレクトリのファイルを読み書きしたときに読み込まれます。

範囲場所共有される相手
ユーザー~/.claude/CLAUDE.md自分(全プロジェクト)
プロジェクト./CLAUDE.md または ./.claude/CLAUDE.mdチーム(ソース管理経由)
ローカル./CLAUDE.local.md自分(そのプロジェクトだけ)。.gitignoreに追加する

/initで下書きを作る

ゼロから書かなくても、プロジェクトのルートで/initを実行すると、Claudeがコードベースを調べ、見つけたビルドコマンド、テスト手順、規約を元にCLAUDE.mdを生成します。すでにCLAUDE.mdがある場合は、改善案を出します。生成されたものは下書きです。自分のチームのルールとずれていないか、必ず読んで直します。

Claude Code内で実行
/init

確かめられる形で書く

CLAUDE.mdは文脈として渡されるので、書き方によって守られやすさが変わります。「確認できるくらい具体的」な指示にします。長さは、1ファイル200行以内が目安です。長いと文脈を多く使い、指示が守られにくくなります。矛盾する指示があると、Claudeはどちらかを任意に選ぶことがあるので、古い指示は定期的に消します。

  • 「コードをきれいに整形する」ではなく「インデントは2スペース」
  • 「変更をテストする」ではなく「コミット前にnpm testを実行する」
  • 「ファイルを整理しておく」ではなく「APIハンドラはsrc/api/handlers/に置く」

例:小さなプロジェクトのCLAUDE.md

次は、架空のプロジェクトを想定した例です。コマンド、場所、禁止事項といった「確かめられること」だけを、見出しの下に箇条書きにしています。

CLAUDE.md の例
# プロジェクトの前提

## コマンド
- テスト: `npm test`(コミット前に必ず実行)
- 型チェック: `npm run typecheck`

## 構成
- APIハンドラは `src/api/handlers/` に置く
- 共通の型は `src/types/` にまとめる

## 規約
- インデントは2スペース
- 新しい関数には、対応するテストを同じPRで追加する

## 触らないもの
- `migrations/` の既存ファイルは編集しない(新規追加のみ)

分割と共有:@importと.claude/rules/

CLAUDE.mdの中で@パスと書くと、そのファイルが起動時に展開されて読み込まれます。たとえば「See @README for project overview and @package.json for available npm commands」のように使います。ただし、importは長いファイルを整理するための機能で、文脈の消費量は減りません。インポートされたファイルも、起動時に読み込まれるためです。一部のファイルにだけ関係する指示は、.claude/rules/ にパス指定のルールとして置くと、該当ファイルを扱うときだけ読み込まれます。

.claude/rules/api.md の例(frontmatterのpathsで対象を指定)
---
paths:
  - "src/api/**/*.ts"
---
APIハンドラでは、入力を必ずバリデーションしてから処理する。

守らせたいことは、CLAUDE.mdに書かない

CLAUDE.mdの内容は、Claudeが従おうとする指示ですが、強制ではありません。たとえば「.envを読まない」と書いても、それだけで読み込みが禁止されるわけではありません。確実に止めたい操作は、権限のdenyルールか、PreToolUseフックで制限します。権限の設定は次の記事で扱います。

効いていないときの確認

指示が守られないときは、まず読み込まれているかを疑います。/contextを実行して、Memory filesの一覧に目的のCLAUDE.mdがあるか確認します。一覧にないファイルは、Claudeからは見えません。/memoryを実行すると、CLAUDE.mdや自動メモリのファイルの場所を一覧でき、そのまま編集できます。ファイルが長すぎる場合は、起動時と/statusで警告が表示されます。

Claude Code内で実行
/context   # Memory filesの一覧を確認
/memory    # ファイルの場所と、自動メモリのオン/オフ

公式リファレンス

Claude Code — How Claude remembers your project ↗
PAIBOT / DEVELOPMENT JOURNAL記事一覧に戻る →

知りたいことを探す

タイトル・タグ・本文から検索 esc で閉じる