📀

Claude Codeでセッションを超えてコンテキストを受け渡す手法整理(CLAUDE.md / Auto memory / rules)

に公開

Claude CodeにおけるCLAUDE.mdやAuto memory、rulesファイルなどセッションを超えたコンテキストマネジメントについて理解が浅かったので書きながら整理。

↓ 大本の参考記事
https://code.claude.com/docs/en/memory

Claude Codeにおけるコンテキスト管理の目的

セッション開始時に新しいコンテキストウィンドウから開始される。
このためセッション間でコンテキストをやりとりする必要性がある。

セッション間でコンテキストをやりとりするための2つのメカニズム

  • CLAUDE.md
    • 他エージェントにおけるAGENTS.md
    • プロジェクト内でセッションを超えて引き継ぐファイル
    • 動的な記載指示 or 人自らが記載
  • Auto memory
    • Claude Code自体が固有の知識を自動記録し次回以降のセッションで参照するもの

CLAUDE.mdの管理スコープ

  • CLAUDE.mdファイルは複数の場所に配置可能
    • ディレクトリーに分けて配置することによって異なるスコープにコンテキストを保持させることができる

作業ディレクトリの上位ディレクトリにあるCLAUDE.mdファイルは、起動時に完全に読み込まれます。サブディレクトリ内のCLAUDE.mdファイルは、Claudeがそれらのディレクトリ内のファイルを読み取る際にオンデマンドで読み込まれます。

CLAUDE.md記載ルール

  • CLAUDE.mdファイルあたり200行未満を目標
  • 記載が大きくなる場合は追加ファイルのインポート or .claude/rules/ファイルを活用する

追加ファイルのインポート

CLAUDE.mdファイルは、@path/to/import構文を使用して追加ファイルをインポートできます。インポートされたファイルは展開され、起動時に参照元のCLAUDE.mdファイルと共にコンテキストにロードされます。
相対パスと絶対パスの両方を使用できます。相対パスは、作業ディレクトリではなく、インポート元ファイルからの相対パスとして解決されます。インポートされたファイルは、最大5ホップの深さで他のファイルを再帰的にインポートできます。

rule整備の方法 .claude/rules/

  • CLAUDE.mdから分離されたドメイン固有の知識やガイドライン
  • パスフィルタを指定でき、特定のファイル(例:*.sql**/api/**)を編集する時だけ適用される
  • CLAUDE.mdの肥大化を防ぐための分割手段

CLAUDE.mdとrulesの違い

  • CLAUDE.md → どんなタスクでも毎回必ず読み込まれる
  • Rules → 特定の条件に合った時だけ読み込まれる

YAML frontmatterを書かない、もしくはpaths を省略するとグローバルルールになり、CLAUDE.mdと同じく毎回読み込まれます。
→ この状況で運用するとCLAUDE.mdが肥大化しているのと同じ状況になるので注意。

ディレクトリ構成サンプル

your-project/
├── .claude/
│   ├── CLAUDE.md           # Main project instructions
│   └── rules/
│       ├── code-style.md   # Code style guidelines
│       ├── testing.md      # Testing conventions
│       └── security.md     # Security requirements

トリガーの設定方法

Rulesファイルの先頭にYAMLフロントマターで paths を書くことで実装する
サンプル

---
paths:
  - "src/app/api/**/*"
  - "supabase/**/*"
  - "**/*.sql"
---

# Database Rules
- RLSポリシーを必ず設定する
- マイグレーションは supabase migration new で作る

ユーザーレベルでの呼び出し

個人ルールは、~/.claude/rules/お使いのマシン上のすべてのプロジェクトに適用されます。

Skillsとの運用の違い

rulesはセッションごとに、または一致するファイルが開かれたときにコンテキストに読み込まれます。タスク固有の指示で常にコンテキストに読み込む必要がない場合は、代わりにskillsを使用してください。skillsは、呼び出されたとき、またはClaudeがプロンプトに関連があると判断したときにのみ読み込まれます。

役割まとめ

https://code.claude.com/docs/ja/memory

参考記事

https://code.claude.com/docs/en/memory
https://zenn.dev/tmasuyama1114/articles/claude_code_dynamic_rules
https://zenn.dev/futoka/articles/b729a5f8bba0e2

Discussion