開発claude-code-tools

日記自動生成パイプラインが「空白日」をどう扱うか

2026-05-24 は、実コミットがゼロの日だった。手を動かして書いたコードは1行もない。やったことといえば、朝起きて自動化パイプライン /make-diary を引数なしで一発叩いただけ。だから今日の日記は「日記を作る仕組みそのもの」が主役になる。

毎朝この自動生成を回す運用にしていると、地味に効いてくるのが「作業がなかった日をどう扱うか」だ。今日はその挙動を、頭の中の想像ではなく実際の走行ログで確認できた。

何が起きたか

/make-diary を引数なしで実行すると、デフォルトで前日を対象にする。今日は 2026-05-24 なので、ターゲットは 2026-05-23(土)になった。

ところが 2026-05-23 は、セッションもコミットも一つもない完全な空白日だった。土曜で、開発に触れていない。パイプラインがこの穴をどう踏み抜くか、あるいは踏まずに迂回するかを、ログを追いながら見ていった。

空白日と確定するまでの調査

「前日は空白っぽい」という直感だけで日記を作らせると、内容ゼロのスカスカな記事が量産される。だから、本当に空白なのかを段階的に確認させた。流れはこうだった。

1. 同期ログのディレクトリが作られていない

sync-once.sh は、その日のセッションがあれば日付ごとのログディレクトリを切る。確認すると、2026-05-23 のディレクトリがそもそも存在しなかった。同期スクリプトの目から見て、その日は何も起きていない。

2. セッション jsonl の末尾タイムスタンプを直接見る

ディレクトリが無いだけでは断定できないので、セッションの生ログ(jsonl)の末尾タイムスタンプを直接読ませた。どのファイルも、最後のメッセージが 2026-05-22 で途切れている。23日に踏み込んでいるセッションは一つもなかった。

3. セッションの中身も JST 範囲で探す

末尾だけでは取りこぼすかもしれないので、セッション本文に 2026-05-23 の JST 範囲に入るメッセージが紛れていないかも探した。結果はほぼゼロ。23日に属する発話は実質的に存在しなかった。

4. git log でも当日コミットゼロ

最後に念のため git log で 2026-05-23 当日のコミットを確認。これもゼロ。コードの世界でも、会話の世界でも、その日は止まっていた。

ここまで来て「2026-05-23 は土曜で作業がなかった空白日」と判断を下した。

フォールバック — 直前の作業日へスライド

空白日と確定したので、無理に薄い記事をでっち上げるのではなく、直前の作業日 2026-05-22 にフォールバックして日記を生成させた。

日付解決ロジックは「前日にセッションがあるか」を見て、無ければ直前の作業日まで遡る。この挙動を、設計書の上ではなく実際の走行で目視できたのが今日の一番の収穫だった。

前日(05-23) にセッションあり? → No
  └ 直前の作業日まで遡る → 05-22 を採用

週末の穴は、翌週に作業を再開したタイミングで拾い直せる。空白日を埋めようと焦らず、未処理のまま次の作業日にスライドさせる。これが運用上は正しい振る舞いだと腹落ちした。

05-22 分の日記を生成

ターゲットが 2026-05-22 に決まったので、その日のログを再同期して、file-editor サブエージェントを並列で起動し、詳細記事4本と統合日記、タイムライン PNG を一気に吐き出させた。

生成した詳細記事は4本。

  • 非公開記事の漏えいを遮断する機構
  • NVIDIA ページのレンダリング修正
  • SpaceX S-1 の章別読解ワークフロー
  • テスト復旧計画の Codex 4ラウンドレビュー

検証

生成しっぱなしにせず、最後に表示まで確認した。

  • path リンターを通した。公開対象は1079件、path の重複はゼロ。
  • Dev Server を起動して、統合日記と詳細記事をブラウザで開き、どれも崩れず表示されることを確認した。

今日の構図

振り返ると、人間とパイプラインの役割がきれいに分かれていた。

  • 人間(自分)がやったこと: 「2026-05-23 は何もしてないな」と空白日を見抜く判断
  • パイプライン(Claude Code)にやらせたこと: 同期ログ確認 → jsonl 末尾タイムスタンプ走査 → 本文の JST 範囲探索 → git log 確認 → 空白日確定 → 直前作業日へのフォールバック → 記事生成 → 表示検証

自分は「この日は空白だ」と当たりをつける係に徹して、ログを舐めて裏を取り、迂回し、記事に仕立てる泥臭い往復はパイプラインに回してもらった。

今日の学び

  • 空白日は埋めるな、スライドさせろ: 作業がなかった日を無理に記事化すると中身ゼロの日記が残る。直前の未処理日にフォールバックする方が運用として健全。
  • 空白の確定は多段で取る: ディレクトリの有無だけで決めず、jsonl 末尾 → 本文 JST 範囲 → git log と裏を取れば、取りこぼしなく「本当に空白」と言い切れる。
  • 日付解決ロジックは走らせて初めて確認できる: 「前日が無ければ直前の作業日へ遡る」挙動は、設計を読むより実際の空白日に当てて目で見た方が早く納得できた。
  • 役割分担を固定する: 空白かどうかの判断は人間、走査と生成はパイプライン。この線引きを毎朝の運用に組み込めている。

明日やること

  • 週末をまたいだときのフォールバックが、複数日連続の空白でも直近作業日まで正しく遡るか確認する
  • 空白日と判定したとき、ログに「2026-05-23 は空白 → 05-22 にフォールバック」と1行残す(後から追える)