はじめに
開発環境の整理などでプロジェクトのフォルダを別の場所(例: ~/Documents から ~/dev など)へ移動させた直後、Codexのセッション履歴が消えてしまった(参照できなくなった) という経験はありませんか?
(筆者は恥ずかしながら以前まで Mac において Documents が特別なフォルダであることを知らず、Documents 直下において開発を行っておりました。)
この記事では、エディタのセッションを捨てずに、CLIコマンド(sed)を使って内部パスを安全に書き換え、元のチャット履歴やコンテキストを完全に復元する方法を解説します。
なぜセッションが消えたように見えるのか?
結論から言うと、履歴データ自体が消去されたわけではありません。
Codex は、セッションのメタデータや会話のイベントログを内部の .jsonl ファイルに保存しています。このファイルの中には、セッション開始時の絶対パス(cwd: Current Working Directory)がハードコードされています。
下記は、2026年6月2日に新たに追加されたセッションが保存されているファイルの例です。cwd の部分に絶対パスが直書きされているのが分かります。
$ pwd
/Users/yoshikoei98/.codex/sessions/2026/06/02
$ ls
rollout-2026-06-02T09-51-20-019e85d0-47fa-70b0-8784-3cec96c840ea.jsonl
$ cat rollout-2026-06-02T09-51-20-019e85d0-47fa-70b0-8784-3cec96c840ea.jsonl
{"timestamp":"2026-06-02T00:51:20.299Z","type":"session_meta","payload":{"id":"019e85d0-47fa-70b0-8784-3cec96c840ea","forked_from_id":"019e66ce-5cb9-7241-a8b3-7101d30baf27","timestamp":"2026-06-02T00:51:20.200Z","cwd":"/Users/yoshikoei98/dev/.../User-Action-Sequence-Modeling","originator":"codex-tui","cli_version":"0.135.0","source":"cli","thread_source":"user","model_provider":"openai","base_instructions":{...},"git":{"commit_hash":"...","branch":"...","repository_url":"https://github.com/..."}}}
そのため、実体のフォルダを移動させると、ツール側が「このパスに紐づくプロジェクトは見つからない」と判断し、既存のセッションにアクセスできなくなってしまいます。
解決策:内部ログ(.jsonl)のパスを一括置換する
エディタ上で一つ一つパスを設定し直すのは非現実的です。ターミナルから sed コマンドを使って、セッションファイル内の古いパスを新しいパスへ一括で書き換えるのが最も手っ取り早く、確実です。
以下に復旧のための3ステップを解説します。
ステップ1:セッションデータのバックアップ
置換ミスに備えて、まずはセッションデータが保存されているディレクトリを丸ごとバックアップしておきます。
ミスをしない方はこのステップは飛ばしても構いません。
$ cp -r ~/.codex/sessions ~/.codex/sessions_backup
ステップ2:特定のフォルダを個別に置換する(分岐がある場合)
すべてのフォルダを1つの親フォルダに移動した場合はスキップして構いません。 しかし、「Aのフォルダは ~/dev へ、Bのフォルダは ~/docs へ」といったように行き先が分かれた場合は、誤爆を防ぐために個別にパスを書き換える必要があります。
以下のコマンドで、特定のプロジェクトのパスだけを狙い撃ちで書き換えます。コマンドの意味やオプションについては今回は割愛します。
# 例:shukatsu フォルダを ~/docs に移動した場合
$ find ~/.codex/sessions -type f -name "*.jsonl" -exec sed -i '' 's|/Users/username/Documents/shukatsu|/Users/username/docs/shukatsu|g' {} +
ステップ3:残りのパスを一括で書き換える
個別対応が終わったもの、あるいはすべてのプロジェクトを同じ階層(例:~/dev/)に移動した場合は、以下のコマンドで残りの古いパスを一気に新しいパスへ書き換えます。
# 残っている Documents/ 配下のパスをすべて dev/ に向ける
find ~/.codex/sessions -type f -name "*.jsonl" -exec sed -i '' 's|/Users/username/Documents/|/Users/username/dev/|g' {} +
結果
これで再度 Codex を立ち上げれば、下記の表示が出ます。
> You are in /Users/yoshikoei98/dev/coding/atcoder
Do you trust the contents of this directory? Working with untrusted contents comes with higher risk of prompt injection. Trusting the directory allows project-local config, hooks, and exec policies to load.
› 1. Yes, continue
2. No, quit
これはいつも通り 1 を選び、このディレクトリ上で codex が作業することを許可すれば良いです。
Choose working directory to resume this session
Session = latest cwd recorded in the resumed session
Current = your current working directory
1. Use session directory (/Users/yoshikoei98/Documents/coding/atcoder)
> 2. Use current directory (/Users/yoshikoei98/dev/coding/atcoder)
Press enter to continue
これはセッションを使うディレクトリが変わったため、
- 過去のディレクトリを使う?
- 現在のディレクトリを使う?
と聞いてきています。意図的にフォルダを変更したので、この場合は2を選択します。
これにより、移動先の新しいディレクトリを参照しつつ、過去の会話履歴やコンテキストが完全に復元されます。
ディレクトリ構造は綺麗にしたいけれど、AIのコンテキスト(セッション)は絶対に失いたくない という場面で非常に役立つアプローチなので、ぜひ活用してみてください。