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 エクスポートはフラットなメッセージ配列を出力し、各メッセージに rolemodelmodelIdcreated_at、構造化された contents が含まれます。スクリプト分析、移行、二次開発に最適です。
  • おすすめの組み合わせ:公式エクスポートで定期的なフルバックアップ。日常の単一または厳選した会話は AI Exporter で JSON または PDF / Markdown に。数百件の履歴を一度に読みやすいドキュメントに変換する場合は、公式 JSON + 変換ツールを使用。

3. 方法 1:ChatGPT 公式データエクスポート(フルバックアップに最適)

OpenAI が提供する唯一の公式一括エクスポート方法です。

適したシーン

  • 定期的なアカウント単位の完全バックアップ
  • 他の AI プラットフォームへの移行(例:Gemini へのチャットインポート
  • 向かない用途:特定の 1 会話だけを保存したい、読みやすいドキュメントをすぐに納品したい

操作手順

  1. chatgpt.com  を開いてログインします。
  2. 左下のプロフィールアイコン → Settings(設定) をクリックします。

ChatGPT のアカウントメニューで Settings エントリがハイライト表示

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

ChatGPT の Data controls パネルで Export data ボタンがハイライト表示

  1. OpenAI からのメールを待ちます(通常 20〜30 分。会話数の多いアカウントはさらに時間がかかる場合があります。公式ドキュメント では最大 24 時間))。
  2. メール内のダウンロードリンクをクリックします(24 時間有効。迷惑メールフォルダも確認してください)。
  3. ZIP を解凍し、conversations.json を見つけます(新しいバージョンでは conversations-000.json など複数のファイルに分割される場合があります)。

取得できるもの

  • conversations.json — ツリー型 mapping 構造の完全な会話履歴。タイムスタンプとモデル情報を含む
  • chat.html — ブラウザで閲覧できる基本版
  • 画像や添付ファイルを含む場合あり(DALL·E 画像、一時的な会話、削除済みチャットは含まれない場合があります)

公式 JSON の課題

OpenAI の公式エクスポートも JSON ですが、内部ストレージ向けの構造で、スクリプトにそのまま使えません:

  1. ツリー型 mapping + 親子ポインタ — 会話の順序を再構築するには逆方向の走査が必要です。
  2. プロンプトの編集で分岐が発生 — 1 つの会話に複数のパスがあり、解析が複雑になります。
  3. テキストが content.parts[] の奥深くに埋まっている — 単純な文字列フィールドではありません。
  4. タイムスタンプは Unix 浮動小数点数 — 例:1713350400.0。追加の変換が必要です。
  5. 全量か不エクスポート — 特定メッセージの選択エクスポートや即時エクスポートはできません。
利点詳細
公式で信頼性が高いOpenAI が提供。サードパーティ不要
真の一括エクスポートアカウント内の全会話を一度に取得
メタデータが充実タイムスタンプ、モデル情報、会話構造を含む
インストール不要ChatGPT の設定画面から直接操作
制限詳細
全量か不エクスポート特定の会話や日付範囲を選択できない
構造が複雑ツリー型 JSON は使用前に大量の解析が必要
形式オプションなしPDF、Markdown、Word の選択肢なし
配信が遅い数分から数日かかる場合あり
コンテンツの欠落一時会話、削除済みチャット、一部の AI 固有コンテンツが欠ける場合あり

まとめ: 公式エクスポートはセーフティネットとして最適ですが、日常的に構造化データを即座に取得する方法ではありません。

4. 方法 2:AI Exporter(日常エクスポートに最適)

率直にお伝えします:これは当社が開発した製品です。以下にできることとできないことを正直に説明します。

AI Exporter で JSON をエクスポートする理由

公式 conversations.json と比較すると、AI Exporter の JSON はプログラム処理向けに設計されています:

観点公式 conversations.jsonAI Exporter JSON
構造ツリー型 mapping、大量の解析が必要フラットなメッセージ配列、直接ループ可能
エクスポート範囲アカウント全体の一括単一会話 / 一部メッセージを必要に応じて
速度数分から数日即時ワンクリック
タイムスタンプUnix 浮動小数点数各メッセージに人間が読める created_at
モデル情報metadata に分散各 assistant メッセージに model / displayModel / modelId
コンテンツタイプ新機能への対応が遅れがちcontents 配列で複数の構造化タイプを保持

AI Exporter の JSON の構造

トップレベルはメッセージ配列です(公式の metadata + mapping ではありません):

json
[
  {
    "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 ループで直接走査できます。ネストしたツリーや親子ポインタの処理は不要です。

ユーザーが最も気にするフィールド

メッセージ単位:

フィールド説明
roleuser(あなたのメッセージ)または assistant(AI の返答)
model / displayModel / modelIdプラットフォーム名、表示名、具体的なモデルバージョン(例:GPT-4o、Claude Sonnet)
created_at / updated_atメッセージの時刻。ソートや統計に便利
chatGroupId同じターンの user / assistant をグループ化

contents 配列(構造化コンテンツ — JSON エクスポートの核心価値):

type保持される内容
markdown / text本文、コードブロック、数式
thinking推論 / 思考プロセス
sourcesWeb 検索、Deep Research の引用元
image / attachment画像、アップロードファイル
html_widgetCanvas / インタラクティブ成果物
shopping_card / shopping_tableショッピング推薦カードと比較表

JSON エクスポートは PDF や Markdown の「タイムスタンプを表示するか」などの表示設定に関係なく、構造化データを完全に保持します。

AI Exporter で JSON をエクスポートする手順

  1. Chrome ウェブストア  から AI Exporter をインストールします(Edge、Firefox でも利用可能)。
  2. エクスポートしたい ChatGPT の会話を開きます。
  3. 拡張機能アイコンをクリック → JSON 形式を選択します。
  4. オプション:必要なメッセージだけを選択してエクスポートします。
  5. オプション:「クリップボードにコピー」を有効にすると、JSON をスクリプトや API ツールに直接貼り付けられます。

エクスポートした JSON でできること

以下の例は AI Exporter の JSON 形式に基づいています。公式エクスポートを使う場合は、まず mapping ツリーからメッセージを抽出してください。

Python で会話を素早く集計:

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']))}")

すべてのコードブロックを抽出:

python
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)に変換:

python
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データ分析、移行、自動化、ファインチューニング
MarkdownObsidian、ブログ執筆、ナレッジベース
PDF共有、印刷、アーカイブ — コードハイライト、LaTeX、画像を保持
Wordさらに編集が必要なオフィスドキュメント
Notionナレッジベースへのワンクリック同期
TXT / 画像軽量アーカイブ、ビジュアル共有

その他のコア機能:

  • 選択的エクスポート — 全会話、一部メッセージ、単一返答のホバーエクスポート
  • 形式の保持 — コードブロック、テーブル、LaTeX 数式、Canvas、画像
  • マルチプラットフォーム — ChatGPT、Claude、Gemini、DeepSeek など 10 以上のプラットフォーム
  • ローカル処理 — JSON、Markdown、TXT は主にブラウザ内で処理。サーバーにアップロードしない
  • 無料枠 — JSON、Markdown、TXT は無料。PDF、Word、Notion は毎日の無料回数あり

複数会話の高速エクスポート(マルチタブワークフロー)

公式のような「全会話をワンクリックでエクスポート」はありませんが、マルチタブワークフローで複数の会話を効率的に処理できます:

  1. ChatGPT サイドバーで Cmd/Ctrl + クリック して複数の会話を開き、それぞれ新しいタブで表示します。
  2. 形式とダウンロードフォルダを事前に設定します(ブラウザの「保存場所を毎回確認する」をオフに)。
  3. 各タブで:選択 → エクスポート → タブを閉じる。約 2 クリックです。
  4. 20 会話で約 3〜5 分。出力形式は統一され、個別に命名されます。

制限事項

  • 公式のような「アカウント全体をワンクリックでエクスポート」ボタンはありません。
  • 完全なアカウントバックアップには、公式エクスポートとの併用を推奨します。
  • PDF、Word、Notion には毎日の無料枠があります(JSON、Markdown、TXT は無料)。

5. 方法 3:公式エクスポート + 変換ツール(一括で読みやすいアーカイブ)

技術ユーザー向け、または数百件の過去の会話を一度に Markdown に変換したい場合に最適です。

適したシーン

  • 全履歴を一括で読みやすいドキュメントに変換
  • Obsidian、Logseq へのインポートでナレッジベースを構築
  • 向かない用途:今開いている会話を素早く保存したい

操作手順

  1. まず方法 1 を完了し、公式 ZIP エクスポートパッケージを取得します。
  2. 解凍して conversations.json を見つけます。
  3. 変換ツールを選択します:
    • コマンドラインnpx chatgpt-to-markdown path/to/archive
    • ブラウザコンバーター:ChatGPT Conversations to Markdown(ローカル処理、アップロードなし)
    • デスクトップアプリ:Univik など(PDF / DOCX 対応)
  4. 各会話が個別の .md ファイルとして生成されます。

利点と制限

利点制限
真の一括処理、読みやすい、一度きりの移行に最適2 段階のフロー、ある程度の技術スキルが必要
オープンソースツールが多く、ローカル処理でプライバシー保護出力品質はツールによって異なり、コードブロック / テーブルの変換にばらつきがある場合あり
選択的エクスポートなし。全会話が変換される
新しい会話を追加したら、フルプロセスを再度実行する必要あり

6. 3 つの方法の比較

機能公式エクスポートAI Exporter公式 + 変換ツール
エクスポート範囲すべて必要に応じて選択すべて
JSON 構造ツリー型 mappingフラットなメッセージ配列まず公式 JSON を解析する必要あり
出力形式JSON / HTMLJSON / 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(公式の生データ)公式エクスポート
スクリプト分析 / ファインチューニング / RAGJSON(構造化)AI Exporter
ナレッジベース(Obsidian / Notion)MarkdownAI Exporter
クライアント / 同僚への共有PDFAI Exporter
さらなる編集が必要WordAI Exporter
チームのナレッジベースNotionAI Exporter
全履歴の一括読みやすいアーカイブMarkdown公式 + 変換ツール

9. よくある質問

Q1:ChatGPT は JSON を直接エクスポートできますか?

はい。ただし公式の一括データエクスポート(Settings → Data Controls → Export Data)のみで、全会話を含む複雑なネスト構造のファイルが出力されます。単一会話ごとに構造が明確な JSON が必要な場合は、AI Exporter を使用してください。

Q2:AI Exporter の JSON と公式 conversations.json の違いは?

AI Exporter はフラットなメッセージ配列を出力し、各メッセージに rolemodelmodelIdcreated_at、構造化された contents が含まれ、ループで直接走査できます。公式エクスポートはツリー型 mapping 構造で親子参照関係があり、テキストは parts[] の奥深くにあり、タイムスタンプは Unix 浮動小数点数です。大量の解析作業が必要です。

Q3:JSON にモデル名とタイムスタンプは含まれますか?

はい。各 assistant メッセージに modeldisplayModelmodelId(例:GPT-4o)があり、created_at フィールドでメッセージの時刻を記録します。ソートやモデル別の統計に便利です。

Q4:思考プロセス、Web 検索の引用元、コードブロックは保持されますか?

はい。AI Exporter の contents 配列は thinkingsourcesmarkdown などのタイプでそれぞれ保持します。単純なコピー&ペーストよりはるかに完全です。

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 をインストール 。あわせて、定期的な公式データエクスポートも忘れずに行いましょう。