Claude Code /cdでディレクトリを移す—/add-dirとの違いと使い分け

Claude Code /cdでディレクトリを移す—/add-dirとの違いと使い分け | mohablog

別リポジトリのコードを少し見たいだけなのに、セッションを一度落として起動し直す。この往復をなくすのが v2.1.169 で入った /cd です。会話の途中で作業ディレクトリを移せて、プロンプトキャッシュも作り直されません。

目次

別リポジトリを覗きたいだけで、セッションを落としていた

複数のコードベースを行き来する開発ほど、この「移りたいのに移れない」が手を止めていました。モノレポや複数リポジトリをまたぐ作業だと、共有ライブラリを直したあとに利用側のサービスで挙動を確かめたくなります。モノレポに限らず、隣のリポジトリのAPI定義をちょっと確認したい、といった単発の寄り道でも同じ。/cd が届く前の手は2つでした。

  • セッションを exit して別ディレクトリで起動し直す。会話履歴もプロンプトキャッシュも捨てる
  • /add-dir で別フォルダを足す。ただし作業の基準ディレクトリは元のまま

/add-dir は参照先を増やすコマンドで、作業の主軸は動きません。ライブラリ側に居たままサービス側のテストを走らせようとすると、新しく作るファイルの置き場やコマンドの実行基準が元のディレクトリに寄る。見るだけなら足りても、そこで手を動かし始めると噛み合わなくなります。

もうひとつ打ちがちなのが、Bashツールでの素の cd。そのコマンドのなかでカレントは動いても、Claudeの作業ディレクトリ、つまり GlobGrep が探す基準は元に残ります。次のツール実行で、また元の場所を見に行く。作業ディレクトリはシェルのカレントとは別物として管理されているためです。

/cd でセッションごとディレクトリを移す

使い方はパスを渡すだけ。相対パスでも絶対パスでも受け付けます。

> /cd ../api-service

初めて触るディレクトリなら、信頼するかを聞かれます。許可すると移動が走ります。

Trust ../api-service? (first time here) [y/n] y
Session moved to ~/work/api-service
· api-service's CLAUDE.md added to context
· Glob, Grep, Bash now work here

会話履歴もモデル選択もそのまま引き継ぎます。移動後の最初のメッセージから、GlobGrepBash の基準が新しいディレクトリへ変わる。元へ帰るときも操作は同じで、絶対パスを渡せば一発です。

> /cd ~/work/shared-lib
Session moved to ~/work/shared-lib

プロンプトキャッシュを作り直さない

公式のWeek 24ダイジェスト “Move a session with /cd” は、/cdプロンプトキャッシュを再構築せずに作業ディレクトリを変えるコマンドと説明しています。ここが exit からの再起動との最大の差です。

再起動するとシステムプロンプトを組み直すので、次のリクエストはキャッシュ書き込みの価格になります。/cd はキャッシュのエントリを生かしたまま移すため、続きは読み出しの価格。読み出しは書き込みのおよそ10分の1のコストで、会話が長いセッションほど差が開きます。ただしキャッシュには有効期限があり、しばらく間が空けば /cd の有無に関わらず失効する。効くのは、間を置かずに往復する連続作業のときです。

共有ライブラリを長く追いかけたあと、その実装を頭に入れた状態でサービス側へ /cd したことがあります。直前に読んだ関数の挙動を会話に抱えたまま利用側を見に行けるので、経緯を説明し直す手間がない。再起動していたら、この文脈ごと捨てて積み直すところでした。

移動先のCLAUDE.mdはメッセージとして足される

移動先に CLAUDE.md があれば読み込まれます。ただ入り方に一点クセがある。公式はこう書いています。

the new directory’s CLAUDE.md is appended as a message instead of replacing the system prompt

移動先の CLAUDE.md はシステムプロンプトを差し替えず、メッセージとして追記される。起動時のディレクトリの CLAUDE.md はシステムプロンプト側に残ったまま。両方のルールが同時に効くと踏まえておくと、移動後に指示がぶつかったときの切り分けが早くなります。追記される分は会話のトークンを食うので、移動を重ねるほど積み上がる点も頭の隅に。CLAUDE.md と memory の役割差は Claude Code memoryとは?CLAUDE.mdとの違いと運用設計の実例で整理しています。

初回はtrustの確認が入る

作業したことのないディレクトリへ移るときは、信頼するかの確認が挟まります。記録はディレクトリ単位。一度通せば、次からは聞かれません。信頼していないコードベースへ不用意に移らないための一手間で、/add-dir でフォルダを足すときと同じ考え方です。

移動するとセッションの保存先も変わる

移動で見落としやすいのが保存先。/cd はセッションを、移動先ディレクトリのプロジェクトストレージへ置き直します。Claude Codeはセッションをプロジェクト単位で ~/.claude/projects/ の下に保存していて、移動するとそのログの置き場も付いてくる。移動先パスに対応するフォルダへ、セッションが引っ越すイメージです。複数のディレクトリを渡り歩いた場合でも、セッションが属するのは最後に居た移動先。途中で通った場所には残りません。どのセッションがどこに紐づくか迷ったら、~/.claude/projects/ 配下のフォルダ名を辿れば、パスとの対応が見えます。

公式は、--resume--continue は移動後のディレクトリでそのセッションを見つける、と明記しています。/cd ../api-service で移って終えたセッションは、api-service 側で --continue すれば復帰する。逆に元のディレクトリで探しても出てきません。移動先で claude --resume を叩けば、そのセッションが一覧に並びます。2つのフラグの違いは Claude Code –continue/–resumeの違いと使い分けにまとめました。

/cd と /add-dir はどう使い分けるか

名前が近くて混同しやすい2つ。境界は素直で、セッションを「移す」のが /cd、「足す」のが /add-dirです。

観点/cd/add-dir
作業ディレクトリ移動先へ切り替わる元のまま。参照先が増える
同時に見る範囲移動先が基準(1つ)元+追加を横断
CLAUDE.md移動先のを追記元のを維持
.claude/ 設定移動先プロジェクトとして扱う基本的に読み込まない
セッション保存先移動先へ移る元のまま
恒久化都度実行設定に保存可

主軸を替えるか、視界を広げるか

共有ライブラリを直して利用サービスへ乗り換える、のように作業の主軸ごと移るなら /cd。たとえば共通ライブラリの関数シグネチャを変えたとする。まず shared-lib で直し、そのまま /cd ../api-service で利用側へ移って呼び出しを追随させ、テストを走らせる。1本のセッションで、変更の意図を保ったままライブラリ側から利用側へ順に直していけます。対して、ライブラリとサービスを同時に見比べながら直したいなら /add-dir で両方を視界に入れる。片方を編集しながら、もう片方の型定義やインターフェースを参照し続けたいなら /add-dir です。判断の軸は「いま手を動かす場所が1つか、複数を横断し続けるか」。前者は /cd、後者は /add-dir

読み取り専用や恒久追加は /add-dir 側

/add-dir は足したフォルダをセッション限りにするか、設定に残すかを選べます。設定へ保存すれば次回以降の起動でも自動で読み込まれ、参照専用のディレクトリを常に横へ置く運用が組める。共通の設計ドキュメントや型定義のリポジトリを、毎回そこへ居させるイメージです。ここで効いてくるのが設定の扱いの差。公式は /add-dir について “Most .claude/ configuration is not discovered from the added directory” と書いています。追加先の .claude/ にあるhooksやスキルは基本的に読まれず、増えるのはファイルへのアクセスだけ。設定ごと連れてきたいなら /cd、ファイルを見たいだけなら /add-dir/cd に恒久化の概念はなく、移動はそのつどです。使い分けの詳細は Claude Code /add-dirの使い方—複数リポジトリを1セッションで触るで扱っています。

worktree と /cd はどちらを使うか

複数ブランチを並行で走らせたいなら、ディレクトリ移動ではなく worktree が向きます。ブランチごとに別ディレクトリと別セッションを持てて、片方をコミットしても他方は無傷。/cd は1本のセッションを移す操作なので、同じ作業の流れを2つに分けて同時に走らせることはできません。

コストも違います。worktree はブランチの数だけワーキングツリーをチェックアウトするのでディスクを食う。/cd は移すだけで複製を作りません。直列で「次はこっち」と移る作業なら /cd、並列で回すなら worktree。両者は排他ではなく、worktreeで切ったブランチのディレクトリへ /cd で移ることもできます。worktreeでの並列運用は Claude Code worktreeの使い方—並列開発でセッション衝突を防ぐ設計にまとめました。

移動後にハマらないための確認事項

  • Bashツールで cd しても作業ディレクトリは変わりません。移動は /cd で行う
  • 移動先の CLAUDE.md はメッセージ追記。起動時の指示も残るので、ルールが衝突したら両方を疑う
  • セッションの保存先が移るため、続きは移動後のディレクトリで --continue する
  • 移動先を絞りたいときは permissions の Cd ルールで制限・無効化できる
  • /cdv2.1.169 以降。古いバージョンは Unknown command: /cd を返す

Cd ルールは、deny でリポジトリ外への移動を止める、といった絞り方ができます。CIやチーム配布の設定で、触ってほしくない領域への横移動を塞ぐ用途に向きます。

移動の前後で挙動が変わり、原因が読めないときは claude --safe-modeCLAUDE.md・skills・plugins・hooks・MCPをすべて切った素の状態で起動できます。素で再現しなければ、それらのどれかが原因。認証・モデル選択・組み込みツール・権限は、素の状態でも生きています。移動先の CLAUDE.md を疑うときの切り分けに向く一手です。

よくある質問

/cd で移ったあと、元のディレクトリに戻れますか

もう一度 /cd で元のパスを指定すれば戻れます。ただし戻るたびに、その先の CLAUDE.md がメッセージとして積まれます。行き来を繰り返すなら、/add-dir で両方を同時に見るほうが文脈は膨らみません。

/cd するとそれまでのファイル編集は取り消されますか

取り消されません。/cd が動かすのは作業ディレクトリと会話の保存先で、ファイルシステムには触れません。移動前に書いたファイルは元の場所にそのまま残ります。移動は編集の巻き戻しではなく、見る場所の切り替えです。

Bash の cd と何が違いますか

Bashツールの cd は、そのコマンド内のカレントを動かすだけ。次のツール実行では元へ戻ります。/cd はClaude自身の作業ディレクトリを移すので、以降の GlobGrepBash すべての基準が変わります。

まとめ

  • /cd <path> で会話を保ったまま作業ディレクトリを移せる。v2.1.169 以降が必要
  • プロンプトキャッシュは作り直されず、続きは読み出し価格で済む
  • 移動先の CLAUDE.md はシステムプロンプト置換ではなく、メッセージとして追記される
  • セッションの保存先も移り、--resume--continue は移動先で見つかる
  • 主軸ごと移すなら /cd、複数を同時に見るなら /add-dir、並列なら worktree
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次