• #claude-code-sync
  • #jq
  • #自動化
  • #日記生成
  • #bash
開発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 コマンドの完成

ログが正しく取得できるようになり、日記自動生成パイプラインが動くようになった。

実行フロー:

  1. sync-once.sh で指定日のログを取得
  2. Markdownログを読み込み、プロジェクト別・トピック別にカテゴリ分け
  3. カテゴリごとにサブエージェントを並列起動して詳細記事を作成
  4. 全詳細記事を統合した diary-YYYY-MM-DD.md を作成
  5. pathリンターで整合性を検証

サブエージェント並列実行により、記事間の依存がなく独立して生成できる。

.claude/tasks/ のクリーンアップ

Claude Codeのサブエージェントが .claude/tasks/ に一時ファイルを蓄積しており、96ディレクトリが溜まっていた。.gitignore に追加し、git rm --cached で追跡解除、ローカル削除を実施。

学び

  • jqで外部データを処理するときは type で型チェックしてから処理する
  • Claude CodeのJSONLは、ユーザーメッセージの content が文字列と配列の両方を取りうる
  • 自動生成ディレクトリは早めに .gitignore に追加しておくべき