ChatGPTとの学習ログ487件をClaude Codeで記事化しようとした話——壁にぶつかるたびに仕組みが変わった
「2年間使い続けてきたChatGPTのログ、せっかくだからObsidianにちゃんと保存して、WordPressにも上げたいな」
これが今回の出発点だった。
ChatGPTを使って勉強してきた記録が、気づいたら487件になっていた。Linuxのこと、サーバーのこと、コマンドのこと。毎日少しずつ積み上げてきた2年分の問答がそこにある。
ただ、そのままでは使えない。Q&A形式の会話ログは「学んだ瞬間」の記録であって、読み物にはなっていない。誰かに見せるにも、自分が見返すにも、もう少し整理された形にしたかった。
まず「タイトルだけ」Obsidianに入れるところから
ChatGPTにはエクスポート機能がある。設定から全会話をJSON形式でダウンロードできる。
「まずこれをClaudeに読ませて、タイトルの一覧だけでも出してもらおう」
エクスポートしたJSONをClaudeに渡すと、会話のタイトルと日付を一覧で返してくれた。それをObsidianのフォルダ構成に沿って整理し、まずはファイル名だけを作っていく。
Linux/
├── 01_基礎・概念/
│ ├── 2024-01-07_Unix and Linux Servers.md
│ ├── 2025-02-03_Asahi Linux概要.md
│ └── ...
├── 02_コマンド基礎/
│ ├── 2023-12-26_コマンド意味教えて.md
│ └── ...
中身は空でも、タイトルと構造が揃うだけで全体像が見える。これが第一歩だった。
次にやりたかったのが、この空ファイルに本文を入れていく作業——Q&A形式の会話ログを、読める記事スタイルに変換すること。
やりたかった変換のイメージ
変換前(Q&A形式)
User: scpコマンドでスペースが入ったパスを指定するにはどうすればいいですか?
Assistant: バックスラッシュでエスケープするか、パス全体をクォートで囲む方法があります...
変換後(記事スタイル)
## scpでスペースを含むパスを指定する
パスにスペースが入っていると、シェルがそこで分割してしまう。
解決策は2つ——バックスラッシュでエスケープするか、クォートで囲むか。
487件を手動でやるのは現実的じゃないので、Claude Codeに任せることにした。
最初のやり方——そしてすぐ壁にぶつかる
Claude Codeのセッション内でファイルを読んで変換して保存する、というシンプルな流れで始めた。
「10件くらいやったところで止まった。また5時間制限か……」
原因はコンテキストの蓄積だった。ファイルを読むたびに内容がセッションに積み上がっていき、10件ほどで上限に達する。次のファイルを読む時点では、すでに前の10件分が全部コンテキストに乗っかっている状態になる。
スクリプトで自動化を試みる
claude -p(非インタラクティブモード)をシェルスクリプトでループさせれば、ファイルごとにコンテキストがリセットされるのでは、と考えた。
for file in *.md; do
claude -p "記事に変換して: $(cat $file)" > "${file%.md}_article.md"
done
実行してみると401エラー。
「あ、OAuth認証だと引き継がれないのか……」
Claude CodeはClaude.aiアカウント(OAuth)でログインしていたため、サブプロセスとして呼ぶと認証が引き継がれないことがわかった。APIキー認証なら動くが、それは従量課金になる。
サブエージェント方式に落ち着く
Claude Codeには「Agent」というサブエージェント機能がある。メインのセッションとは独立したコンテキストで動くので、ファイルを読んでもメインに蓄積されない。
これを使って20件ずつバッチに分け、2本を並列で走らせる形にした。
メインセッション
├── Agent(バッチA: 20件)
└── Agent(バッチB: 20件) ← 同時に走る
1回の制限サイクルで約35〜40件処理できるようになった。手動で10件が限界だったのと比べると、大きな改善だった。
APIキーという選択肢——でも90日の壁
「320件残ってて、1サイクル40件だと……あと8〜9回待つのか」
Anthropic APIを直接使うスクリプトなら、Claude Codeの制限とは無関係に全自動で回せる。コストを計算してみた。
- モデル: claude-haiku(最安モデル)
- 1ファイルあたり: 約1,450トークン
- 320件合計: 約200円
安い。ただし落とし穴があった。
「APIクレジットって90日で失効するんだ……$20買って$2しか使わないと$18が消えるな」
最低購入額が$20で、このタスクで使うのは$2ほど。残りの$18は90日で失効する。他にAPI活用の予定があるかどうかで判断が変わる、という結論になった。
現時点の進捗
| 状態 | 件数 |
|---|---|
| 記事化済み | 167件 |
| 残り | 320件 |
| 進捗 | 34% |
サブエージェント方式でコツコツ進めている最中。制限リセットのたびに再開する運用になっている。
やってみてわかったこと
コンテキストの蓄積が一番の問題だった。Claude Codeのサブスクリプションは月額固定でも、セッション内でトークンが積み上がると制限に当たる。
「タイトルだけ先に整理する」という一手間が思いのほか有効だった。全体の構造が見えることで、どこから手をつけるかが判断しやすくなった。
完璧な仕組みを最初から作ろうとしない方が結果的に早い。10件でぶつかって→スクリプトを試して→サブエージェントに辿り着く、という流れは遠回りに見えて、実は一番の近道だったかもしれない。
メモ
ChatGPTのエクスポートはJSON形式。設定→データコントロール→「データをエクスポート」から取得できる。Claudeに渡すと会話タイトルの一覧化や分類もやってくれる。
関連記事
- WordPressの記事メンテナンスをClaudeに丸ごと任せたら、80件の関連記事が一気に整った話
- ClaudeCodeを複数端末で使うときのメモリ・設定同期方法|Mac+Raspberry Pi連携
