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に渡すと会話タイトルの一覧化や分類もやってくれる。

関連記事

ブログ

BLOG

PAGE TOP