はじめに
前回の記事では、ChatGPTからエクスポートしたデータを安全に保存し、原本と作業用データを分けるところまで整理しました。
次に行いたかったのは、エクスポートデータを保存したままにするのではなく、これまでの会話から、将来も活用できる情報を見つけられる状態にすることです。
ChatGPTとの会話には、調査、開発、業務改善、契約、事業計画など、さまざまな内容が含まれていました。
しかし、conversations.jsonをそのまま保存しているだけでは、次のことが分かりません。
- どのような会話が残っているのか
- 将来再利用できる情報がどこにあるのか
- どの会話を分類・要約すべきか
- MarkdownやRAGの元データとして使える会話はどれか
そこで今回は、conversations.jsonから会話単位の情報を取り出し、1つの会話を1行とするCSV形式の索引を作成しました。
実際のエクスポートデータから、402件の会話を一覧化しています。
今回の目的
今回の目的は、CSVファイルを作ること自体ではありません。
過去の会話を一覧化し、将来、次のような用途に活用するための元データを作ることです。
- 会話履歴をカテゴリ別に整理する
- 機密情報を含む会話を識別する
- 再利用できる内容を要約する
- Markdown形式のナレッジへ変換する
- 必要な情報を検索できるようにする
- 将来のRAGで利用するデータを選定する
今回作成するCSVは、会話履歴そのものを置き換えるものではありません。
どの会話に、どのような情報が含まれているかを確認するための索引として使用します。
conversations.json
↓
会話単位の索引を作る
↓
分類・機密度判定
↓
必要な内容を抽出・要約
↓
Markdownなどへ整理
↓
検索・RAGでの再利用
作業前のフォルダー構成
元のエクスポートデータを誤って編集しないように、原本、スクリプト、出力結果を分けます。
以下は、この記事で使用する構成例です。
chatgpt_export/
├─ raw/
│ └─ conversations.json
├─ scripts/
│ └─ create_conversation_index.py
└─ output/
└─ conversation_index_2026-06-08.csv
| フォルダー | 用途 |
|---|---|
raw |
エクスポートした元データを保存する |
scripts |
Pythonスクリプトを保存する |
output |
作成したCSVを保存する |
conversations.jsonは読み取り対象とし、処理結果は別のCSVファイルとして出力します。
これは、作業中の誤操作を防ぐためだけではありません。
今後、分類方法や抽出項目を変更した場合でも、原本から何度でも処理をやり直せるようにするためです。
実際に困ったこと
今回の作業では、主に次の4点で迷いました。
- 会話数とメッセージ数の違いが分かりにくかった
- CSVへどの項目を出力すべきか判断が難しかった
- 複数のテーマを含む会話を、どの分類へ寄せるか迷った
- 日本語を文字化けさせず、正しく出力できたか確認する必要があった
特に、会話タイトルだけでは内容を判断できないケースが多くありました。
そのため、最初から分類まで行うのではなく、まず全会話を一覧化し、その結果を見て分類方法を検討することにしました。
会話数とメッセージ数の違い
conversations.jsonを確認する際、最初に分かりにくかったのが、会話数とメッセージ数の違いです。
今回のCSVでは、次の単位で出力します。
1つの会話 = CSVの1行
1つの会話には、利用者とChatGPTによる複数の質問と回答が含まれています。
利用者の質問
ChatGPTの回答
利用者の追加質問
ChatGPTの回答
この例では複数のメッセージがありますが、会話一覧では1件です。
今回確認した402件は、質問と回答の総数ではなく、ChatGPT上で作成された会話単位の件数です。
conversations.jsonには、1つの会話の中に複数のメッセージや管理用の情報が含まれています。
そのため、内部に含まれるデータの数を、そのまま会話件数として数えることはできません。
CSVへ出力する項目を決める
会話を一覧化するとき、最初はタイトルと日時だけでよいと考えていました。
しかし、将来の分類や再利用を考えると、タイトルだけでは不十分です。
今回の基本項目は、次のように整理しました。
| 項目 | 内容 | 後で使う目的 |
|---|---|---|
conversation_id |
会話を識別するID | 元の会話との対応確認 |
title |
会話タイトル | 内容の一次確認 |
create_time |
作成日時 | 時系列での整理 |
update_time |
更新日時 | 最終更新時期の確認 |
今後の整理では、次のような項目を追加できます。
category
subcategory
keywords
confidentiality
summary
status
rag_include
ただし、最初からすべての項目を決めようとすると、作業が複雑になります。
今回は、元データから客観的に取得できる基本項目を先に出力し、分類や機密度など、人の判断が必要な項目は後の工程へ分けました。
どのカテゴリへ寄せるか迷った
ChatGPTには、仕事、学習、開発、情報整理など、複数の分野について相談していました。
1つの会話に複数のテーマが含まれることもあり、タイトルだけでは分類先を決められませんでした。
また、主なカテゴリを1つに絞るのか、複数のカテゴリやキーワードを付けるのかも判断が必要でした。
そこで今回は分類を行わず、まず会話全体を確認するための索引作成までとしました。
分類ルールについては、次の記事で整理します。
PythonでCSVへ出力する
conversations.jsonを読み込み、会話ごとの情報をCSVへ出力するPythonスクリプトを作成します。
# ここに実際に使用したPythonスクリプトを掲載します。
#
# 主な処理
# 1. conversations.jsonを読み込む
# 2. 会話ID、タイトル、作成日時、更新日時を取得する
# 3. CSVへ出力する
# 4. 出力件数を表示する
スクリプトは、元のconversations.jsonを書き換えません。
JSONから必要な情報を読み取り、別のCSVファイルを新しく作成します。
日本語の文字化けを防ぐ
CSVを作成する際、特に確認が必要だったのが日本語の文字化けです。
CSVファイル自体を作成できても、ExcelやPowerShellで開いたときに、日本語が正しく表示されない場合があります。
PythonでCSVを保存するときは、Excelでの利用を考慮して、文字コードにutf-8-sigを指定しました。
encoding="utf-8-sig"
確認には、次の環境を使用しました。
- Excel
- VS Code
- PowerShell
ExcelとVS Codeでは正常に表示され、PowerShellだけで文字化けする場合は、ファイルが壊れているとは限りません。
PowerShellでは、文字コードを明示して確認します。
Get-Content -Encoding UTF8 ".\output\conversation_index_2026-06-08.csv" |
Select-Object -First 5
1つのソフトだけで判断せず、複数の環境で確認することで、保存時の問題と表示時の問題を切り分けました。
CSVを作成する
PowerShellで作業フォルダーへ移動します。
Set-Location "C:\作業フォルダー\chatgpt_export"
Pythonスクリプトを実行します。
python .\scripts\create_conversation_index.py
正常に処理されると、outputフォルダーにCSVが作成されます。
output/
└─ conversation_index_2026-06-08.csv
今回のデータでは、402件の会話が出力されました。
出力件数: 402
正しく索引を作成できたか確認する
今回確認したかったのは、単にCSVファイルが作成されたかどうかではありません。
将来の分類やRAGの元データとして使うためには、必要な会話が欠けたり、文字化けした状態で保存されたりしていないことが重要です。
確認した項目は、次のとおりです。
| 確認項目 | 確認する理由 |
|---|---|
| 出力件数 | 会話が途中で欠けていないか確認する |
| タイトルの空欄 | 内容を識別できない会話を把握する |
| 会話IDの重複 | 同じ会話が二重に登録されていないか確認する |
| 日本語の表示 | 後の分類や検索に影響しないか確認する |
| 日時の値 | 時系列で整理できるか確認する |
| 各列の内容 | 値が誤った項目へ入っていないか確認する |
PowerShellでCSVの件数を確認する場合は、次のコマンドを使用できます。
(Import-Csv ".\output\conversation_index_2026-06-08.csv").Count
今回の結果は次のとおりです。
402
ただし、件数が一致しただけでは十分ではありません。
空欄、重複、文字化け、列のずれなどを含めて確認する必要があります。
402件をすべて目視だけで検証するのは難しかったため、確認すべき項目や検証方法をAIと相談し、実際の件数、空欄、重複などはPythonやPowerShellで一括確認しました。
402件を一覧化して分かったこと
CSVへ出力したことで、これまでChatGPTと行ってきた会話の全体像を確認できるようになりました。
一方で、一覧を作ったことで新たな課題も見えてきました。
- タイトルだけでは内容を判断できない
- 同じようなタイトルの会話が複数ある
- 1つの会話に複数のテーマが含まれている
- 業務情報と個人的な情報が混在している
- 機密情報を含む会話がある
- 将来も使える情報と、一時的な相談が混在している
つまり、すべての会話をそのままRAGへ入れればよいわけではありません。
今後は、会話ごとに内容を確認し、次のような判断が必要になります。
再利用する
要約して残す
複数の会話を統合する
機密情報をマスキングする
内部限定で保存する
不要なものは対象外にする
今回作成したCSVは、その判断を進めるための出発点になりました。
今回のポイント
今回の作業で重要だった点は、次のとおりです。
- エクスポートデータを、将来再利用するための索引へ変える
- 会話数とメッセージ数を分けて考える
- 最初は客観的に取得できる項目だけを出力する
- 元データを変更せず、別ファイルへ出力する
- 日本語の文字化け、空欄、重複を確認する
- AIとスクリプトを使い、目視では難しい確認を補う
CSVは最終成果物ではなく、過去の会話を分類・要約し、将来の検索やRAGへつなげるための索引です。
次回行うこと
次の工程では、今回作成したCSVをもとに、402件の会話履歴をカテゴリ別に整理します。
主に次の内容を扱う予定です。
- 分類カテゴリの決め方
- カテゴリとサブカテゴリの使い分け
- キーワード辞書の作り方
- 複数テーマを含む会話の扱い
- どのカテゴリへ寄せるか迷った場合の判断
- AIによる一次分類と人による確認
分類結果は、その後の機密情報の判定、要約、Markdown化、RAG対象データの選定にも使用します。
おわりに
今回は、ChatGPTのエクスポートデータに含まれるconversations.jsonから、402件の会話をCSV形式の索引として出力しました。
この作業の目的は、単に会話数を数えたり、CSVファイルを作成したりすることではありません。
これまでの会話に含まれる情報を見つけやすくし、将来、分類、要約、Markdown化、検索、RAGなどに活用できる状態へ近づけることです。
conversations.jsonには多くの情報が残っていますが、そのままでは、どこに何が含まれているかを把握できません。
会話単位の索引を作ったことで、初めて全体を見渡し、残す情報、整理する情報、機密情報として扱う情報を検討できるようになりました。