結論
- 自動メモリは共有されます。 リポジトリのすべてのワークツリーは、1つのメモリディレクトリを使用します。
CLAUDE.mdはワークツリー自身のチェックアウトから取得されます。 新しいワークツリーはデフォルトブランチから開始されるため、そこにコミットされているバージョンが適用されます。CLAUDE.local.mdは共有されません。 作成したワークツリー内にのみ存在します。- Gitignoreされたファイルは存在しません。
.worktreeincludeにリストしない限り、コピーされません。 - 一部の設定はメインのチェックアウトと共有されます: プラグイン、権限の承認、および場合によってはスキル、エージェント、コマンドなど。
自動メモリ:リポジトリ全体で1つのディレクトリ
自動メモリとは、Claudeが自身のために書き留めるメモのことです。これには、ユーザーの好み、修正内容、コードからは導き出せないプロジェクトのコンテキストなどが含まれます。Anthropicのメモリに関するドキュメントでは、そのスコープを「リポジトリごと、ワークツリー間で共有」と記載しています。
ストレージに関するセクションでは、その理由が説明されています。「各プロジェクトは、~/.claude/projects/<project>/memory/に独自のメモリディレクトリを持ちます。<project>のパスはGitリポジトリから派生するため、同じリポジトリ内のすべてのワークツリーとサブディレクトリは、1つの自動メモリディレクトリを共有します。」
したがって、あるワークツリーセッションでClaudeに伝えた修正内容は、同じリポジトリの別のワークツリーで開始する次のセッションにも反映されます。これは、設定なしでワークツリーをまたぐ唯一のレイヤーです。ただし、これはマシン内に限定されます。「自動メモリはマシンローカルです。同じGitリポジトリ内のすべてのワークツリーとサブディレクトリは、1つの自動メモリディレクトリを共有します。ファイルはマシン間やクラウド環境間では共有されません。」これについては、our guide to why Claude Code forgets across machines(Claude Codeがマシン間で記憶を忘れる理由に関するガイド)で詳しく解説しています。
メモリディレクトリは~/.claude/projects/配下に存在するため、ワークツリーの外側にあります。ワークツリーを削除すると、そのワークツリーのディレクトリとブランチは削除されますが、このフォルダは削除されません。
CLAUDE.md:ワークツリーのブランチにあるもの
CLAUDE.mdはリポジトリ内のファイルであるため、ワークツリーは独自のコピーを読み込みます。どのコピーになるかは、ワークツリーがどこから開始されたかによって決まります。Anthropicのワークツリーに関するページによると、Claude Codeは「リポジトリのデフォルトブランチからブランチを作成し、追跡対象のファイルのみをチェックアウトする」とされています。
デフォルトのベースはfreshです。これは「リモートのデフォルトブランチ(通常はmain)からブランチを作成するため、ワークツリーはリモートと一致するクリーンなツリーから開始される」ことを意味します。メインのチェックアウトでCLAUDE.mdを編集し、それをコミットしてプッシュしていない場合、新しいワークツリーにはその編集内容が含まれません。そのワークツリーのCLAUDE.mdは、リモートのデフォルトブランチにあるものになります。
代わりに現在の作業からブランチを作成するには、worktree.baseRefをheadに設定します。ドキュメントによると、このオプションは「現在のローカルのHEADからブランチを作成するため、ワークツリーにはプッシュされていないコミットやフィーチャーブランチの状態が引き継がれる」とされています。コミットされていない変更はどのコミットにも含まれないため、メインのチェックアウトに残ります。
デスクトップアプリから開始されたワークツリーセッションでは、他のプロジェクト設定がメインチェックアウトのルートから読み込まれる場合でも、「CLAUDE.mdファイルと.claude/rules/は引き続きワークツリーから読み込まれる」とドキュメントに補足されています。異なるレイヤー間で不一致が生じ始めた場合の対処法については、our guide to reconciling conflicting CLAUDE.md layers(競合するCLAUDE.mdレイヤーを調整するためのガイド)で、それらがどのように結合されるかを解説しています。
CLAUDE.local.md:作成したワークツリー内のみ
CLAUDE.local.mdは、コミットしないプライベートな設定のためのファイルです。これはgitignored(Gitの無視対象)であるため、新しいワークツリーには引き継がれません。Anthropicはこれを直接的に説明しています。「同じリポジトリの複数のGitワークツリーで作業する場合、無視設定されたCLAUDE.local.mdは、それを作成したワークツリーにのみ存在します。」
ドキュメントで推奨されている解決策は、コンテンツをホームディレクトリに移動してインポートすることです。個人用の指示を~/.claude/my-project-instructions.mdなどのファイルに記述し、Anthropicの例に示されているように@インポートで参照します。これにより、すべてのワークツリーがホームディレクトリから同じファイルを読み込むようになります。
Gitignoreされたファイルと.worktreeinclude
同じルールが、他の追跡されていないファイルにも適用されます。「ワークツリーはクリーンなチェックアウトであるため、メインリポジトリにある.envや.env.localのような追跡されていないファイルは存在しません。」
これらをコピーするには、プロジェクトのルートに.worktreeincludeファイルを追加します。これは「.gitignoreの構文を使用」し、「パターンに一致し、かつGitの無視対象であるファイルのみがコピーされるため、追跡対象のファイルが重複することはありません。」これは、サブエージェントのワークツリーやデスクトップアプリでの並行セッションを含め、「Claude CodeがGitで作成するすべてのワークツリー」に適用されます。
.worktreeincludeのパターンは、ワークツリーの作成時に一度だけファイルをコピーします。コピーされたCLAUDE.local.mdや.envは、各ワークツリーで別々のファイルとなるため、一方での編集が他方に反映されることはありません。頻繁に変更する個人用の指示については、ホームディレクトリからのインポートを使用する方が安定した選択肢です。
その他にワークツリーがメインのチェックアウトと共有するもの
Anthropicは、ワークツリーがメインのチェックアウトと共有するものを以下のようにリストアップしています。
- リポジトリの
.gitディレクトリ:ワークツリーで行われたコミットは同じリポジトリに反映されます。 - プラグイン:メインのチェックアウトからプロジェクトスコープでインストールされたもの。
- 権限の承認:ワークツリーでBashコマンドを「常に許可」することを選択すると、「そのルールがメインチェックアウトの
.claude/settings.local.jsonに保存される」ため、リポジトリのすべてのワークツリーに適用されます。Windowsや一部のケースでは、ルールはそのワークツリー内に留まります。 - 追跡されていないスキル、エージェント、コマンド:ワークツリー自体に独自の
.claude/skillsディレクトリがない場合。「独自の.claude/skillsディレクトリを持つワークツリーでは、そのコピーのみが読み込まれます。」
デスクトップアプリのワークツリーセッションでは、さらに共有が進みます。そこでは、Claude Codeは「設定、フック、スキル、エージェント、コマンド、.mcp.jsonサーバーなどのプロジェクト設定をメインチェックアウトのルートから読み込みます。」
ワークツリー内のサブエージェントはメインの会話から指示を受け取る
サブエージェントは、リクエストに応じて、またはカスタムサブエージェントのフロントマターでisolation: worktreeを指定することで、独自のワークツリーで実行できます。彼らの指示は別の場所から取得されます。「独自のワークツリーにいるサブエージェントは、開始時に使用する指示ファイルを、そのワークツリーからではなく、メインの会話から取得します。」
また、デフォルトの場所にあるワークツリーの場合、「サブエージェントは、ワークツリー内のファイルを読み込む際、ワークツリーのルートにあるCLAUDE.mdファイルや.claude/rules/ディレクトリを読み込みません。たとえそれらがワークツリーのブランチ上で異なっていても同様です。」ブランチ上でCLAUDE.mdを変更し、ワークツリーのサブエージェントがそれに従うことを期待しても、サブエージェントは代わりにメインの会話のバージョンに従います。
セッションとトランスクリプトはワークツリーに追従する
会話自体は、それが実行されたワークツリーに紐づいたままになります。セッションピッカーはデフォルトで「現在のワークツリーのセッション」を表示し、Ctrl+Wを押すことでリポジトリのすべてのワークツリーに範囲を広げることができます。名前による再開は、リポジトリのワークツリー全体で機能します。
Claudeがワークツリーに入出するときに「トランスクリプトが追従する」ため、--resumeは新しいディレクトリでセッションを見つけます。ワークツリー内で終了したセッションを再開すると、そのワークツリーに戻ります。ワークツリーが削除されていた場合、Claude Codeは起動元のディレクトリで再開し、「セッションのワークツリーバインディングをクリア」します。これについては、our guide to finding Claude Code session history(Claude Codeのセッション履歴を見つけるためのガイド)でピッカーの詳細を解説しています。
よくある誤解や試み
メインのチェックアウトでCLAUDE.mdを編集してからワークツリーを開始する。 新しいワークツリーには、コミットされていない編集内容ではなく、リモートのデフォルトブランチにあるバージョンが適用されます。
すべてのワークツリーにCLAUDE.local.mdがあることを期待する。 作成した場所にのみ存在します。
ワークツリーがメモリを分離していると仮定する。 自動メモリはリポジトリのすべてのワークツリーで共有されます。あるセッションでの誤った修正が、他のセッションに引き継がれる可能性があります。
ワークツリーのサブエージェントのためにブランチ上のCLAUDE.mdを変更する。 デフォルトの場所にあるワークツリーのサブエージェントは、メインの会話の指示ファイルから開始されます。
メモをワークツリー内だけに保存する。 ワークツリーを削除すると、そのディレクトリ、ブランチ、およびその中の作業内容がすべて削除されます。
解決策:各コンテキストをすべてのワークツリーがアクセスできる場所に配置する
ステップ 1:共有の指示をコミットし、個人用の指示はホームからインポートする
すべてのセッションが従うべき内容は、コミットされたCLAUDE.mdに記述し、デフォルトブランチにプッシュしておくことで、新しいワークツリーがそれを反映して開始されるようにします。プッシュされていない指示の変更をワークツリーに反映させる必要がある場合は、worktree.baseRefをheadに設定し、まず変更をコミットしてください。
個人用のメモはCLAUDE.local.mdからホームディレクトリのファイルに移動し、それをインポートします。1つのファイルをすべてのワークツリーが読み込み、1箇所で編集できるようになります。
ステップ 2:各ワークツリーに必要なGitignoreされたファイルをリストアップする
プロジェクトのルートに.worktreeincludeファイルを追加し、.envや.env.localなど、セッションの実行に不可欠なGitignoreされたファイルを記述します。コピーされたファイルは開始点として扱ってください。値が変更された場合は、メインのチェックアウトで更新し、新しいワークツリーが新しいバージョンを取得できるようにします。
自動メモリも時々確認してください。すべてのワークツリーで共有されているため、1つのセッションでの誤ったメモがすべてに影響します。メモリファイルは~/.claude/projects/<project>/memory/配下にあるプレーンなMarkdownファイルであり、編集や削除が可能です。
ステップ 3:ワークツリーをクリーンアップする前に、セッションで判明したことを書き留める
ワークツリーセッションが終了すると、その結論はトランスクリプトや、場合によっては自動メモリに残ります。ワークツリーを削除する前に、他のセッションが必要とする決定事項や発見を書き留めておきましょう。永続的なルールはCLAUDE.mdに記述します。それ以外は自身のメモに保存します。
セッションの実行中に発見事項をやり取りする必要がある場合、ワークツリーのページではクロスセッションメッセージングが紹介されています。これにより、「Claudeがワークツリー内のセッション間で発見事項を渡す」ことができます。
MemoryLakeでの設定方法
ワークツリーは作業を並行チェックアウトに分割しますが、コンテキストの各レイヤーはその分割を異なる方法で処理します。自動メモリはワークツリーをまたぎますが、マシン内に限定されます。CLAUDE.mdはブランチに従います。個人用のメモは書いた場所に留まります。
MemoryLakeは、そうした作業の背景にある決定事項を1つのリストにまとめて管理し、Claude Codeや、接続する他のアシスタント(CodexやChatGPTなど)から利用できるようにするためのメモリレイヤーです。
エントリーは、あなた自身の言葉で自分で書き込みます。ワークツリー、CLAUDE.mdやCLAUDE.local.mdファイル、自動メモリディレクトリ、セッションのトランスクリプト、またはベンダーのストアから何かが読み取られたり、書き込まれたり、削除されたりすることはありません。機密情報はメモリのエントリーではなく、環境ファイルに保管してください。
ステップ 1:APIキーを作成する
サインインし、ダッシュボードからキーを生成します。このキーはMemoryLakeのワークスペースに属し、Claudeのアカウントとは別個のものです。

ステップ 2:最初のメモリをアップロードする
解決策のステップ3で書き留めた内容、つまりクリーンアップしようとしているワークツリーセッションからの決定事項や発見から始めましょう。1つのエントリーにつき1つのポイントを、日付、リポジトリ、ブランチのラベル付きで登録します。

ステップ 3:AIとエージェントを接続する
Claude Codeや、使用している他のアシスタントを接続します。このマシンでも別のマシンでも、新しいワークツリーセッションはすべて同じ決定事項から開始できます。

実践における変化
最初の違いは、新しいワークツリーが適切な指示から開始されることです。共有ルールはコミットされ、個人用のルールはホームからインポートされ、セッションに必要なファイルがコピーされます。
2つ目は、並行セッションの一貫性が保たれることです。自動メモリが共有されていることを理解した上で確認でき、各ワークツリーやサブエージェントがどのCLAUDE.mdを読み込んでいるかを把握できます。
3つ目は、クリーンアップによってコンテキストが失われなくなることです。ワークツリーからの結論は、ワークツリーが削除される前に書き留められます。クラウドセッションも実行している場合は、our guide to what Claude Code cloud sessions bring from your local setup(Claude Codeのクラウドセッションがローカル設定から持ち込むものに関するガイド)で、その境界を越えるものについて解説しています。
Claude Codeワークツリーにおけるコンテキストのベストプラクティス
指示の変更はコミットしてプッシュする。 新しいワークツリーはリモートのデフォルトブランチから開始されます。
個人用の指示はホームディレクトリからインポートする。 CLAUDE.local.mdは1つのワークツリー内に留まります。
環境ファイルには.worktreeincludeを使用する。 一致するGitignoreされたファイルのみがコピーされます。
自動メモリが共有されていることを忘れない。 セッション間で不一致が生じ始めたら、これを確認してください。
ワークツリーのサブエージェントはメインの会話の指示を使用することを想定する。 ブランチのCLAUDE.mdではありません。
.gitignoreに.claude/worktrees/を追加する。 ワークツリーのコンテンツが追跡されていないファイルとして表示されないようにするため、Anthropicが推奨しています。
ワークツリーを削除する前に発見事項を書き留める。 削除すると、そのディレクトリとブランチが消去されます。
結論
Claude Codeのワークツリーはファイルの編集を分離しますが、コンテキストは分離しません。自動メモリは、同じマシン上のリポジトリのすべてのワークツリーで共有されます。CLAUDE.mdは各ワークツリーのチェックアウト(デフォルトではリモートのデフォルトブランチ)から取得されます。CLAUDE.local.mdやその他のGitignoreされたファイルは、.worktreeincludeでコピーしない限り、作成した場所にのみ存在します。ワークツリー内のサブエージェントは、メインの会話から指示を受け取ります。
共有の指示をコミットし、個人用の指示はホームからインポートし、各ワークツリーに必要なファイルをリストアップし、クリーンアップする前にセッションで判明したことを書き留めておきましょう。