開発mdx-playgroundメモ
claude-code-syncのjqフィルタバグ修正と日記自動生成パイプライン構築
claude-code-syncのログ取得がほとんど動いていなかった問題を修正し、日記自動生成コマンド /make-diary を完成させた日。
sync-once.sh のjqフィルタバグ
症状
sync-once.sh を実行しても、1日のうち大半の会話ログが取得できていなかった。数十セッション分あるはずが1件しか出力されない。
原因
Claude Codeの message.content フィールドは文字列型と配列型の2パターンを取る。修正前のjqフィルタは文字列型しか処理しておらず、ツール実行を挟むやり取り(配列型content)が全て欠落していた。
修正内容
- jqの
typeビルトインで型を判定し、配列と文字列で処理を分岐 - 配列型contentから
textエントリのみ抽出し、tool_result(ファイル全文やコマンド出力)は除外 // ""による null安全なアクセスを追加
結果
| 指標 | 修正前 | 修正後 |
|---|---|---|
| 取得メッセージ数 | 1件 | 29件 |
| カバー率(体感) | 5%未満 | 90%以上 |
/make-diary コマンドの完成
ログが正しく取得できるようになり、日記自動生成パイプラインが動くようになった。
実行フロー:
sync-once.shで指定日のログを取得- Markdownログを読み込み、プロジェクト別・トピック別にカテゴリ分け
- カテゴリごとにサブエージェントを並列起動して詳細記事を作成
- 全詳細記事を統合した
diary-YYYY-MM-DD.mdを作成 - pathリンターで整合性を検証
サブエージェント並列実行により、記事間の依存がなく独立して生成できる。
.claude/tasks/ のクリーンアップ
Claude Codeのサブエージェントが .claude/tasks/ に一時ファイルを蓄積しており、96ディレクトリが溜まっていた。.gitignore に追加し、git rm --cached で追跡解除、ローカル削除を実施。
学び
- jqで外部データを処理するときは
typeで型チェックしてから処理する - Claude CodeのJSONLは、ユーザーメッセージの
contentが文字列と配列の両方を取りうる - 自動生成ディレクトリは早めに
.gitignoreに追加しておくべき