Codexのチャットをエクスポートする価値がある理由
ローカル履歴は設定に依存する
デフォルトでは、Codexはローカルに記録を保持します。OpenAIの設定ガイドには、「デフォルトでは、Codexはローカルセッションの文字起こしをCODEX_HOME(例:~/.codex/history.jsonl)の下に保存します」とあります。後で必要になる内容が保持されているかどうかは、設定によって異なります。
2つの設定がこれに影響します。[history]の下でpersistenceをnoneに設定すると、ローカル履歴の永続化がオフになります。また、history.max_bytesはファイルサイズを制限します。「ファイルが上限を超えると、Codexは最も古いエントリを削除し、最新の記録を保持しながらファイルを圧縮します。」codex execの実行では、--ephemeralフラグを使用すると、Codexは「セッションのロールアウトファイルをディスクに永続化せずに」実行されます。
あなたやチームがこれらのいずれかを設定している場合、後で検索したい文字起こしが存在しない可能性があります。
圧縮(Compaction)はチャットを書き換える
長いセッションは、model_auto_compact_token_limitで設定されたしきい値で自動的に、または手動で圧縮できます。/compactコマンドは「以前のターンを簡潔な要約に置き換え、重要な詳細を保持しながらコンテキストを解放します。」これはコンテキストウィンドウにとっては望ましいことですが、アクティブなチャット内の以前のターンは要約に置き換えられてしまいます。圧縮する前にエクスポートしておけば、完全なやり取りを保持できます。
削除は永続的
アーカイブと削除は異なります。/archiveは、文字起こしを保持したままアクティブなリストからセッションを削除し、codex unarchiveで復元できます。/deleteにはその機能はありません。「Codexは文字起こしと、そこから派生した子セッションを永久に削除します。」
メモリもチャットを保持しない
Codexにはメモリ機能がありますが、これは会話のコピーではありません。OpenAIは「ChatGPTのウェブ版はChatGPTのメモリを使用しますが、ローカルのCodexクライアントは別のローカルメモリストアとコントロールを使用します」と述べています。デスクトップアプリでは、Codexのメモリは「選択したマシンに対して」オンまたはオフに切り替えられます。また、OpenAIは、必ず適用しなければならないルールについてメモリに依存しないようアドバイスしています。「メモリは便利な想起レイヤーとして扱い、常に適用されるべきルールの唯一の情報源とはしないでください。」Codexのローカルメモリをオンにするためのガイドで、その仕組みを解説しています。
チャットを取り出すためにCodexが提供する機能
/export: 会話全体をMarkdownとして出力
Codex CLIで/exportと入力し、「クリップボードにコピー(Copy to clipboard)」または「ファイルに保存(Save to file)」を選択します。OpenAIのスラッシュコマンドリファレンスには、「Codexは会話全体をMarkdownとしてエクスポートします」とあります。メニューをスキップして直接ファイルに書き出すには、/export session.mdを実行します。1つの条件として、「エクスポートする前に、現在のターンが終了するのを待ってください」とされています。
/copy: 最新の回答のみ
最後の結果だけが必要な場合、/copyは「最後に完了したCodexの出力をクリップボードにコピー」します。メインのTUIからCtrl+Oを押すこともできます。ターンがまだ実行中の場合は、進行中の応答ではなく、最後に完了した出力がコピーされます。このコマンドは、最初の出力が完了する前や、ロールバックの直後には使用できません。
/recap: 圧縮を伴わない要約
/recapは、Codexがアイドル状態のときに現在の会話の要約を生成します。リファレンスでは、その目的を「コンテキストを圧縮せずにチャットの内容を把握する」と説明しています。自動要約をオフにしていても機能します。要約は保存するノートの優れた出発点になりますが、あくまで要約であり、文字起こしそのものではありません。
スクリプト実行:出力をファイルに書き出す
codex execで開始された実行では、スラッシュコマンドを使用せずに出力をキャプチャする2つのフラグがあります。--jsonは「フォーマットされたテキストの代わりに、改行区切りのJSONイベント」を出力します。そして--output-last-messageは「アシスタントの最後のメッセージをファイルに書き出し」ます。OpenAIはこれを「ダウンストリームのスクリプト作成に便利」と呼んでいます。
再開とフォーク:チャット自体で作業を続ける
ファイルがまったく必要なく、セッションを元に戻したいだけの場合もあります。codex resumeは「IDによって以前のインタラクティブセッションを継続するか、最新のチャットを再開」します。スクリプト実行の場合、codex exec resumeはセッションIDを受け取るか、--lastで「現在の作業ディレクトリから最新のセッションを継続」し、--allで任意のディレクトリからのセッションを対象にします。codex forkは、以前のチャットから「元の文字起こしを保持したまま」新しいチャットを作成します。
これらは会話を継続させますが、セッションがまだディスク上にあることに依存します。エクスポートは、ディスク依存のないコピーです。
デスクトップアプリ
/exportコマンドはCLIリファレンスに記載されています。ChatGPTデスクトップアプリでは、キーボードショートカットのリストに「会話パスをコピー(Copy conversation path)」(Codex専用とマークされています)が含まれており、会話のパスをコピーします。デスクトップアプリのドキュメントにはエクスポートコマンドの記載がないため、完全なMarkdownエクスポートを行うには、CLIを使用するのがドキュメント化されている方法です。
エクスポートがキャプチャするもの、しないもの
エクスポートはテキストとしての会話です。コードの変更自体はワーキングツリーとgit履歴に残るため、コミットと/diffが変更内容の記録として残ります。/diffは「ステージングした変更、まだステージングしていない変更、およびGitが追跡を開始していないファイル」を表示します。
また、エクスポートは内容を整理してくれません。3時間のセッションのMarkdown文字起こしには、すべての行き止まり(失敗)やツール呼び出しが含まれています。これはアーカイブとしては便利ですが、リファレンスとしては使いにくいものです。本当に役立つのは、チャットが「解決した内容」であり、それを取り出すのは別のステップになります。
多くの人が最初に試すこと(そしてその問題点)
ローカル履歴に依存する。 デフォルトでオンになっていますが、[history]の設定、サイズ制限、またはcodex exec実行時の--ephemeralにより、探しているときに文字起こしが存在しない場合があります。
先に圧縮し、後からエクスポートする。 /compactを実行すると、アクティブなチャット内の以前のターンは要約になってしまいます。
整理のために終了したセッションを削除する。 /deleteは永続的です。/archiveは文字起こしを保持し、元に戻すことができます。
Codexのメモリを記録として扱う。 メモリはマシンごとの想起レイヤーであり、OpenAIは必要なガイダンスをAGENTS.mdやチェックインされたドキュメントに保持することを推奨しています。
エクスポート全体を次のセッションに貼り付ける。 機能はしますが、長い文字起こしはコンテキストウィンドウを行き止まり(失敗)の情報で埋め尽くしてしまいます。要約であれば、わずかなスペースで同じ結論を伝えることができます。
エクスポートを保存したまま二度と開かない。 生の文字起こしは単なるアーカイブです。重要な部分を取り出さなければ、次のセッションの役には立ちません。
解決策:チャット全体をエクスポートし、解決した内容を抽出して、次のセッションが見つけられる場所に置く
ステップ1:圧縮、アーカイブ、削除の前にエクスポートする
セッションが保存する価値のある結果に達したら、完全な状態のうちにエクスポートします。現在のターンが終了するのを待ってから、セッションの目的がわかるファイル名を指定して/exportを実行します(例:/export auth-retry-fix.md)。チームがバージョン管理でセッションノートを管理している場合を除き、リポジトリの外に保存してください。
コンテキストを解放するために/compactを実行しようとしている場合は、まずエクスポートしてください。/deleteについても同様です。
ステップ2:結論を抽出する
エクスポートを開き、短い要約を作成します。最初に/recapを実行すると、出発点として役立ちます。以下の4種類の情報を保持してください:
- 決定事項(Decisions): 選択した内容とその理由。
- 行き止まり(Dead ends): 試してうまくいかなかったこと(次のセッションで繰り返さないため)。
- 動作するコマンドと設定: 動作させるために使用した正確なフラグ、環境変数、または手順。
- 未解決の疑問: 残されている課題や、次に確認すべきこと。
認証情報、トークン、顧客データなど、セッションで扱った機密情報は除外してください。デバッグセッションの有用な要約は、例えば次のようになります:「リトライのバグは2箇所で設定されたタイムアウトが原因だった。クライアントの値だけを変更しても機能しなかった。両方を設定してワーカーを再起動することで修正された。統合テストには、スローパス用のフィクスチャがまだ必要である。」
ステップ3:次のセッションが見つけられる場所に結論を置く
リポジトリのルールや規約は、OpenAIがチームの必須ガイダンスを保持することを推奨しているAGENTS.mdやチェックインされたドキュメントに記述します。ルールではないものの有用なメモ(あるライブラリを別のライブラリより優先して選択した理由など)は、個人のメモやメモリレイヤーに保存できます。
次のセッションを開始するときは、完全な文字起こしではなく、要約をCodexに提示します。短く正確な要約は、元の会話よりもコンテキストの消費が少なくなります。Codexがプロジェクトのコンテキストを忘れる理由についてのガイドで、Codexが自動的に読み込む内容について解説しています。
MemoryLakeでの設定方法
エクスポートは問題の半分を解決します。チャットが保存されるからです。残りの課題は、誰かがMarkdownの文字起こしを掘り返すことなく、Codexや同じプロジェクトで使用する他のツールでその結論を利用できるようにすることです。
MemoryLakeは、これらの結論を管理する1つのリストに保持し、Codexや、接続する他のアシスタント(Claude CodeやChatGPTなど)から利用できるようにするためのメモリレイヤーです。
エントリはあなた自身の言葉で作成します。Codexセッション、history.jsonl、エクスポートされたファイル、Codexのメモリ、またはベンダーのストアから何かが読み取られたり、書き込まれたり、削除されたりすることはありません。認証情報や、チームのポリシーでリポジトリ内に保持することになっているものは除外してください。
ステップ1:APIキーを作成する
サインインし、ダッシュボードからキーを生成します。このキーはMemoryLakeのワークスペースに属し、ChatGPTやCodexのサインインとは異なります。

ステップ2:最初のメモリをアップロードする
解決策のステップ2で作成した要約(エクスポートしたセッションの決定事項、行き止まり、動作するコマンド)から始めます。1つのエントリにつき1つのポイントを記述し、日付を入れ、リポジトリまたはタスクのラベルを付けます。

ステップ3:AIとエージェントを接続する
Codexや、使用している他のアシスタントを接続します。同じ問題に関する次のセッションは、前回のセッションで解決した内容から開始できます。

実践においてこれがもたらす変化
最初の違いは、終了したセッションが何かを残すということです。完全な文字起こしが保存され、結論が実際に読み返す形式で書き残されます。
2つ目は、次のセッションがより進んだ状態からスタートできることです。行き止まり(失敗)や動作するコマンドを把握しているため、最初の1時間をそれらの再発見に費やす必要がなくなります。
3つ目は、作業内容がツール間で移動できることです。プロジェクトの一部を別のエージェントに切り替えても、結論は引き継がれます。CodexからClaude Codeへの移行ガイドでその移行について解説しており、Claude Codeセッションを別のマシンにエクスポートするためのガイドで逆方向の移行について解説しています。
Codexチャットをエクスポートするためのベストプラクティス
チャットが完全な状態のうちにエクスポートする。 /compact、/archive、または/deleteを実行する前に行います。
ターンが終了するのを待つ。 OpenAIはエクスポートする前に待つことを推奨しています。
結果にちなんだファイル名を付ける。 後でより早く見つけることができます。
単一の回答には/copyを使用する。 メインのTUIからCtrl+Oを押すことでも同じことができます。
スクリプト実行はフラグでキャプチャする。 codex execで--output-last-messageまたは--jsonを使用します。
削除する代わりにアーカイブする。 /archiveは文字起こしを保持し、codex unarchiveでセッションを復元できます。
履歴の設定を確認する。 [history]、history.max_bytes、または--ephemeralが適用されているかどうかを把握しておきます。
要約し、その要約を保持する。 生の文字起こしはアーカイブであり、リファレンスではありません。
結論
Codexは、会話を取り出すためのいくつかの方法を提供しています。/exportはチャット全体をMarkdownとして書き出し、/copyは最後の回答を取得し、/recapは圧縮せずに要約し、codex execのフラグはスクリプト出力をキャプチャします。ローカル履歴はデフォルトで存在しますが、設定によってオフにしたりトリミングしたりできます。また、/compactは以前のターンを要約に置き換え、/deleteは永続的です。
チャットが完全な状態のうちにエクスポートし、決定事項、行き止まり、動作するコマンドを抽出し、ルールはAGENTS.mdに、それ以外は次のセッションが見つけられる場所に配置しましょう。