ChatGPT のチャット履歴をエクスポートする方法:JSON / PDF / Markdown 完全ガイド
ChatGPT には会話ごとのダウンロードボタンはありません。本記事では公式データエクスポートの手順を詳しく解説し、ブラウザ拡張機能と JSON 変換ツールを比較。JSON、PDF、Markdown への保存方法を紹介します。
1. ChatGPT のチャット履歴はエクスポートできる?
ChatGPT には「この会話をダウンロード」ボタンはありませんが、チャットを保存したいニーズは非常に多いです。学習ノートの整理、業務成果物、コードのバックアップ、ナレッジベースの構築、アカウント単位の災害対策など、あらゆる場面でエクスポートが必要になります。
形式によって用途が変わります。PDF は共有に向き、Markdown はノートに最適。JSON はプログラム処理に最適 — Python や jq で会話を分析したり、コードブロックを抽出したり、ファインチューニング用データセットを構築したり、RAG パイプラインに接続したりするなら、JSON が最良の出発点です。
本記事では 3 つの実用的な方法を比較し、AI Exporter の JSON エクスポートが公式の conversations.json より使いやすい理由を詳しく説明します。
2. 結論から:3 つの方法の選び方
- 公式データエクスポート(設定 → データコントロール → データをエクスポート)は ChatGPT 唯一の公式フルバックアップですが、
conversations.jsonはツリー型のmapping構造で解析コストが高く、PDF や Word でそのまま納品できません。 - AI Exporter の JSON エクスポートはフラットなメッセージ配列を出力し、各メッセージに
role、model、modelId、created_at、構造化されたcontentsが含まれます。スクリプト分析、移行、二次開発に最適です。 - おすすめの組み合わせ:公式エクスポートで定期的なフルバックアップ。日常の単一または厳選した会話は AI Exporter で JSON または PDF / Markdown に。数百件の履歴を一度に読みやすいドキュメントに変換する場合は、公式 JSON + 変換ツールを使用。
3. 方法 1:ChatGPT 公式データエクスポート(フルバックアップに最適)
OpenAI が提供する唯一の公式一括エクスポート方法です。
適したシーン
- 定期的なアカウント単位の完全バックアップ
- 他の AI プラットフォームへの移行(例:Gemini へのチャットインポート)
- 向かない用途:特定の 1 会話だけを保存したい、読みやすいドキュメントをすぐに納品したい
操作手順
- chatgpt.com を開いてログインします。
- 左下のプロフィールアイコン → Settings(設定) をクリックします。

- Data controls(データコントロール) に進みます。
- Export data(データをエクスポート) → 確認します。

- OpenAI からのメールを待ちます(通常 20〜30 分。会話数の多いアカウントはさらに時間がかかる場合があります。公式ドキュメント では最大 24 時間))。
- メール内のダウンロードリンクをクリックします(24 時間有効。迷惑メールフォルダも確認してください)。
- ZIP を解凍し、
conversations.jsonを見つけます(新しいバージョンではconversations-000.jsonなど複数のファイルに分割される場合があります)。
取得できるもの
conversations.json— ツリー型mapping構造の完全な会話履歴。タイムスタンプとモデル情報を含むchat.html— ブラウザで閲覧できる基本版- 画像や添付ファイルを含む場合あり(DALL·E 画像、一時的な会話、削除済みチャットは含まれない場合があります)
公式 JSON の課題
OpenAI の公式エクスポートも JSON ですが、内部ストレージ向けの構造で、スクリプトにそのまま使えません:
- ツリー型
mapping+ 親子ポインタ — 会話の順序を再構築するには逆方向の走査が必要です。 - プロンプトの編集で分岐が発生 — 1 つの会話に複数のパスがあり、解析が複雑になります。
- テキストが
content.parts[]の奥深くに埋まっている — 単純な文字列フィールドではありません。 - タイムスタンプは Unix 浮動小数点数 — 例:
1713350400.0。追加の変換が必要です。 - 全量か不エクスポート — 特定メッセージの選択エクスポートや即時エクスポートはできません。
| 利点 | 詳細 |
|---|---|
| 公式で信頼性が高い | OpenAI が提供。サードパーティ不要 |
| 真の一括エクスポート | アカウント内の全会話を一度に取得 |
| メタデータが充実 | タイムスタンプ、モデル情報、会話構造を含む |
| インストール不要 | ChatGPT の設定画面から直接操作 |
| 制限 | 詳細 |
|---|---|
| 全量か不エクスポート | 特定の会話や日付範囲を選択できない |
| 構造が複雑 | ツリー型 JSON は使用前に大量の解析が必要 |
| 形式オプションなし | PDF、Markdown、Word の選択肢なし |
| 配信が遅い | 数分から数日かかる場合あり |
| コンテンツの欠落 | 一時会話、削除済みチャット、一部の AI 固有コンテンツが欠ける場合あり |
まとめ: 公式エクスポートはセーフティネットとして最適ですが、日常的に構造化データを即座に取得する方法ではありません。
4. 方法 2:AI Exporter(日常エクスポートに最適)
率直にお伝えします:これは当社が開発した製品です。以下にできることとできないことを正直に説明します。
AI Exporter で JSON をエクスポートする理由
公式 conversations.json と比較すると、AI Exporter の JSON はプログラム処理向けに設計されています:
| 観点 | 公式 conversations.json | AI Exporter JSON |
|---|---|---|
| 構造 | ツリー型 mapping、大量の解析が必要 | フラットなメッセージ配列、直接ループ可能 |
| エクスポート範囲 | アカウント全体の一括 | 単一会話 / 一部メッセージを必要に応じて |
| 速度 | 数分から数日 | 即時ワンクリック |
| タイムスタンプ | Unix 浮動小数点数 | 各メッセージに人間が読める created_at |
| モデル情報 | metadata に分散 | 各 assistant メッセージに model / displayModel / modelId |
| コンテンツタイプ | 新機能への対応が遅れがち | contents 配列で複数の構造化タイプを保持 |
AI Exporter の JSON の構造
トップレベルはメッセージ配列です(公式の metadata + mapping ではありません):
[
{
"id": "msg_001",
"chatGroupId": "group_abc",
"role": "user",
"model": "chatgpt",
"displayModel": "ChatGPT",
"contents": [
{ "type": "markdown", "content": "How do I read a CSV in Python and filter columns?" }
],
"created_at": "2026-04-15 14:30:45",
"updated_at": 1713175845000
},
{
"id": "msg_002",
"chatGroupId": "group_abc",
"role": "assistant",
"model": "chatgpt",
"displayModel": "ChatGPT",
"modelId": "GPT-4o",
"contents": [
{ "type": "markdown", "content": "You can use pandas:\n\n```python\nimport pandas as pd\ndf = pd.read_csv('data.csv')\n```" },
{ "type": "thinking", "content": "User needs a basic CSV read example..." },
{ "type": "sources", "sources": [{ "title": "pandas documentation", "url": "https://pandas.pydata.org", "domain": "pandas.pydata.org" }] }
],
"created_at": "2026-04-15 14:31:22",
"updated_at": 1713175882000
}
]このフラットな構造なら、for ループで直接走査できます。ネストしたツリーや親子ポインタの処理は不要です。
ユーザーが最も気にするフィールド
メッセージ単位:
| フィールド | 説明 |
|---|---|
role | user(あなたのメッセージ)または assistant(AI の返答) |
model / displayModel / modelId | プラットフォーム名、表示名、具体的なモデルバージョン(例:GPT-4o、Claude Sonnet) |
created_at / updated_at | メッセージの時刻。ソートや統計に便利 |
chatGroupId | 同じターンの user / assistant をグループ化 |
contents 配列(構造化コンテンツ — JSON エクスポートの核心価値):
| type | 保持される内容 |
|---|---|
markdown / text | 本文、コードブロック、数式 |
thinking | 推論 / 思考プロセス |
sources | Web 検索、Deep Research の引用元 |
image / attachment | 画像、アップロードファイル |
html_widget | Canvas / インタラクティブ成果物 |
shopping_card / shopping_table | ショッピング推薦カードと比較表 |
JSON エクスポートは PDF や Markdown の「タイムスタンプを表示するか」などの表示設定に関係なく、構造化データを完全に保持します。
AI Exporter で JSON をエクスポートする手順
- Chrome ウェブストア から AI Exporter をインストールします(Edge、Firefox でも利用可能)。
- エクスポートしたい ChatGPT の会話を開きます。
- 拡張機能アイコンをクリック → JSON 形式を選択します。
- オプション:必要なメッセージだけを選択してエクスポートします。
- オプション:「クリップボードにコピー」を有効にすると、JSON をスクリプトや API ツールに直接貼り付けられます。
エクスポートした JSON でできること
以下の例は AI Exporter の JSON 形式に基づいています。公式エクスポートを使う場合は、まず mapping ツリーからメッセージを抽出してください。
Python で会話を素早く集計:
import json
from collections import Counter
with open("ChatGPT-my-conversation.json") as f:
messages = json.load(f)
roles = Counter(msg["role"] for msg in messages)
print(f"あなたの質問: {roles.get('user', 0)}")
print(f"AI の返答: {roles.get('assistant', 0)}")
responses = [m for m in messages if m["role"] == "assistant" and m["contents"]]
longest = max(responses, key=lambda m: len(str(m["contents"])))
print(f"最長の返答(文字数): {len(str(longest['contents']))}")すべてのコードブロックを抽出:
import json
import re
with open("ChatGPT-my-conversation.json") as f:
messages = json.load(f)
for msg in messages:
if msg["role"] != "assistant":
continue
for item in msg.get("contents", []):
if item.get("type") not in ("markdown", "text"):
continue
blocks = re.findall(r"```(\w+)?\n(.*?)```", item.get("content", ""), re.DOTALL)
for lang, code in blocks:
print(f"--- {lang or 'text'} ---")
print(code)OpenAI ファインチューニング形式(JSONL)に変換:
import json
with open("ChatGPT-my-conversation.json") as f:
messages = json.load(f)
training_data = []
for i in range(0, len(messages) - 1, 2):
user_msg, assistant_msg = messages[i], messages[i + 1]
if user_msg["role"] != "user" or assistant_msg["role"] != "assistant":
continue
user_text = " ".join(c.get("content", "") for c in user_msg.get("contents", []) if c.get("content"))
assistant_text = " ".join(c.get("content", "") for c in assistant_msg.get("contents", []) if c.get("content"))
if user_text and assistant_text:
training_data.append({
"messages": [
{"role": "user", "content": user_text},
{"role": "assistant", "content": assistant_text},
]
})
with open("training.jsonl", "w") as f:
for item in training_data:
f.write(json.dumps(item, ensure_ascii=False) + "\n")
print(f"{len(training_data)} 件の学習サンプルを生成しました")AI Exporter のその他の強み
JSON は AI Exporter がサポートする形式の 1 つにすぎません。読みやすいドキュメントが必要な場合は、同じ拡張機能内で出力形式を切り替えられます:
| 形式 | 最適な用途 |
|---|---|
| JSON | データ分析、移行、自動化、ファインチューニング |
| Markdown | Obsidian、ブログ執筆、ナレッジベース |
| 共有、印刷、アーカイブ — コードハイライト、LaTeX、画像を保持 | |
| Word | さらに編集が必要なオフィスドキュメント |
| Notion | ナレッジベースへのワンクリック同期 |
| TXT / 画像 | 軽量アーカイブ、ビジュアル共有 |
その他のコア機能:
- 選択的エクスポート — 全会話、一部メッセージ、単一返答のホバーエクスポート
- 形式の保持 — コードブロック、テーブル、LaTeX 数式、Canvas、画像
- マルチプラットフォーム — ChatGPT、Claude、Gemini、DeepSeek など 10 以上のプラットフォーム
- ローカル処理 — JSON、Markdown、TXT は主にブラウザ内で処理。サーバーにアップロードしない
- 無料枠 — JSON、Markdown、TXT は無料。PDF、Word、Notion は毎日の無料回数あり
複数会話の高速エクスポート(マルチタブワークフロー)
公式のような「全会話をワンクリックでエクスポート」はありませんが、マルチタブワークフローで複数の会話を効率的に処理できます:
- ChatGPT サイドバーで Cmd/Ctrl + クリック して複数の会話を開き、それぞれ新しいタブで表示します。
- 形式とダウンロードフォルダを事前に設定します(ブラウザの「保存場所を毎回確認する」をオフに)。
- 各タブで:選択 → エクスポート → タブを閉じる。約 2 クリックです。
- 20 会話で約 3〜5 分。出力形式は統一され、個別に命名されます。
制限事項
- 公式のような「アカウント全体をワンクリックでエクスポート」ボタンはありません。
- 完全なアカウントバックアップには、公式エクスポートとの併用を推奨します。
- PDF、Word、Notion には毎日の無料枠があります(JSON、Markdown、TXT は無料)。
5. 方法 3:公式エクスポート + 変換ツール(一括で読みやすいアーカイブ)
技術ユーザー向け、または数百件の過去の会話を一度に Markdown に変換したい場合に最適です。
適したシーン
- 全履歴を一括で読みやすいドキュメントに変換
- Obsidian、Logseq へのインポートでナレッジベースを構築
- 向かない用途:今開いている会話を素早く保存したい
操作手順
- まず方法 1 を完了し、公式 ZIP エクスポートパッケージを取得します。
- 解凍して
conversations.jsonを見つけます。 - 変換ツールを選択します:
- コマンドライン:
npx chatgpt-to-markdown path/to/archive - ブラウザコンバーター:ChatGPT Conversations to Markdown(ローカル処理、アップロードなし)
- デスクトップアプリ:Univik など(PDF / DOCX 対応)
- コマンドライン:
- 各会話が個別の
.mdファイルとして生成されます。
利点と制限
| 利点 | 制限 |
|---|---|
| 真の一括処理、読みやすい、一度きりの移行に最適 | 2 段階のフロー、ある程度の技術スキルが必要 |
| オープンソースツールが多く、ローカル処理でプライバシー保護 | 出力品質はツールによって異なり、コードブロック / テーブルの変換にばらつきがある場合あり |
| 選択的エクスポートなし。全会話が変換される | |
| 新しい会話を追加したら、フルプロセスを再度実行する必要あり |
6. 3 つの方法の比較
| 機能 | 公式エクスポート | AI Exporter | 公式 + 変換ツール |
|---|---|---|---|
| エクスポート範囲 | すべて | 必要に応じて選択 | すべて |
| JSON 構造 | ツリー型 mapping | フラットなメッセージ配列 | まず公式 JSON を解析する必要あり |
| 出力形式 | JSON / HTML | JSON / PDF / MD / Word / Notion など | 主に Markdown |
| タイムスタンプ / モデル名 | あるが抽出が困難 | 各メッセージで直接読める | 変換ツール次第 |
| 選択的エクスポート | 不可 | 可(メッセージ単位) | 不可 |
| マルチプラットフォーム | ChatGPT のみ | ChatGPT + 10 以上のプラットフォーム | ChatGPT のみ |
| 技術的ハードル | なし | なし | 中程度 |
| 20 会話のエクスポート | 数分から数日 | 約 3〜5 分 | 待機 + 変換 |
| 最適な用途 | セーフティネットバックアップ | 日常エクスポート + 構造化 JSON | 履歴の一括アーカイブ |
7. おすすめワークフロー:組み合わせて使う
ステップ 1:公式エクスポートで完全バックアップ
- 設定 → データコントロール → データをエクスポート
- ZIP をクラウドまたは外付け HDD に保存
- 推奨頻度:月 1 回、または古い会話を削除する前
ステップ 2:AI Exporter で重要な会話をエクスポート
価値のある会話が終わったらすぐにエクスポートし、用途に応じて形式を選択:
- スクリプト分析 / 移行 / ファインチューニング → JSON
- 調査レポート、ナレッジベース → Markdown
- クライアントへの納品 → PDF
- チーム協業 → Notion 同期
ステップ 3(オプション):バックアップを一括変換
全履歴の読みやすいアーカイブが必要な場合は、方法 3 で公式 ZIP を一括 Markdown に変換します。
8. どの形式でエクスポートすべき?
| 目的 | 最適な形式 | 最適な方法 |
|---|---|---|
| 完全なアカウントバックアップ(セーフティネット) | JSON(公式の生データ) | 公式エクスポート |
| スクリプト分析 / ファインチューニング / RAG | JSON(構造化) | AI Exporter |
| ナレッジベース(Obsidian / Notion) | Markdown | AI Exporter |
| クライアント / 同僚への共有 | AI Exporter | |
| さらなる編集が必要 | Word | AI Exporter |
| チームのナレッジベース | Notion | AI Exporter |
| 全履歴の一括読みやすいアーカイブ | Markdown | 公式 + 変換ツール |
9. よくある質問
Q1:ChatGPT は JSON を直接エクスポートできますか?
はい。ただし公式の一括データエクスポート(Settings → Data Controls → Export Data)のみで、全会話を含む複雑なネスト構造のファイルが出力されます。単一会話ごとに構造が明確な JSON が必要な場合は、AI Exporter を使用してください。
Q2:AI Exporter の JSON と公式 conversations.json の違いは?
AI Exporter はフラットなメッセージ配列を出力し、各メッセージに role、model、modelId、created_at、構造化された contents が含まれ、ループで直接走査できます。公式エクスポートはツリー型 mapping 構造で親子参照関係があり、テキストは parts[] の奥深くにあり、タイムスタンプは Unix 浮動小数点数です。大量の解析作業が必要です。
Q3:JSON にモデル名とタイムスタンプは含まれますか?
はい。各 assistant メッセージに model、displayModel、modelId(例:GPT-4o)があり、created_at フィールドでメッセージの時刻を記録します。ソートやモデル別の統計に便利です。
Q4:思考プロセス、Web 検索の引用元、コードブロックは保持されますか?
はい。AI Exporter の contents 配列は thinking、sources、markdown などのタイプでそれぞれ保持します。単純なコピー&ペーストよりはるかに完全です。
Q5:JSON エクスポートは無料ですか?
はい。JSON エクスポートは AI Exporter の無料版で利用できます。アカウントやサブスクリプションは不要です。
Q6:自分のプロンプトを除いて AI の返答だけをエクスポートできますか?
はい。Select をクリックして Answers を選択すれば AI の返答のみを選択できます。個別のメッセージを手動でチェック / 解除することも可能です。
Q7:エクスポートした JSON は OpenAI API やファインチューニングに使えますか?
はい。AI Exporter は API 形式と一致する user / assistant ロールラベルを使用します。contents からテキストを抽出するだけです。上記のファインチューニング変換例を参照してください。
Q8:AI Exporter で全会話を一括エクスポートできますか?
公式のようなワンクリック全量エクスポートはありませんが、マルチタブワークフローで会話を素早く 1 件ずつエクスポートできます。完全なアカウントバックアップには公式エクスポートとの併用を推奨します。
Q9:公式エクスポートはどのくらい待ちますか?ダウンロードリンクが期限切れになったら?
通常 20〜30 分。会話数の多いアカウントはさらに時間がかかる場合があります。ダウンロードリンクは 24 時間有効です。期限切れの場合は新しいエクスポートを再リクエストしてください。
Q10:無料の ChatGPT アカウントでもエクスポートできますか?
はい。公式エクスポートと AI Exporter の両方が無料アカウントで利用できます。
Q11:AI Exporter と ChatGPT Exporter の違いは?
両方とも JSON エクスポートに対応していますが、AI Exporter は ChatGPT、Claude、Gemini、DeepSeek など 10 以上のプラットフォームをカバーし、Word、Notion などの形式にも対応。contents 配列で思考プロセス、検索引用元、Canvas などより多くの構造化タイプを保持します。
Q12:どのくらいの頻度でバックアップすべきですか?
公式のフルエクスポートは月 1 回を推奨します。重要な会話は完了後すぐに AI Exporter でエクスポートしてください。月次バックアップを待つ必要はありません。
10. まとめ
単一の完璧な方法はありません。組み合わせ戦略が最も効果的です:
- 公式エクスポート = セーフティネット、完全バックアップの最後の砦
- AI Exporter = 日常使える形式、特に最も実用的な構造化 JSON
- 公式 + 変換ツール = 全履歴の読みやすいアーカイブ
👉 今すぐ始める:AI Exporter をインストール 。あわせて、定期的な公式データエクスポートも忘れずに行いましょう。