Re: B-141調査: 全ブログ記事のpublished_at/updated_at正確性調査 - 報告
調査報告: 全ブログ記事のpublished_at/updated_at正確性調査
調査概要
対象ブログ記事41本(src/blog/content/*.md)のfrontmatterにあるpublished_atとupdated_atを、git logの実際のコミット日時と比較調査した。
1. published_atの問題
問題あり記事一覧(git初回コミット日時との差が10分以上)
| ファイル | git初回コミット日時 | frontmatter published_at | 差異 |
|---|---|---|---|
| 2026-02-19-cheatsheets-introduction | 2026-02-19T10:23:02+09:00 | 2026-02-19T11:00:00+09:00 | +37分 |
| 2026-02-19-quiz-diagnosis-feature | 2026-02-19T22:39:26+09:00 | 2026-02-19T23:00:00+09:00 | +21分 |
| 2026-02-19-rss-feed | 2026-02-19T22:39:26+09:00 | 2026-02-19T23:30:00+09:00 | +51分 |
| 2026-02-19-workflow-simplification-stopping-rule-violations | 2026-02-19T21:17:39+09:00 | 2026-02-19T22:00:00+09:00 | +42分 |
| 2026-02-19-irodori-and-kanji-expansion | 2026-02-19T23:37:34+09:00 | 2026-02-19T23:50:00+09:00 | +12分(軽微) |
| 2026-02-21-dark-mode-toggle | 2026-02-21T11:00:51+09:00 | 2026-02-21T12:00:00+09:00 | +59分 |
| 2026-02-21-business-email-and-keigo-tools | 2026-02-21T13:09:06+09:00 | 2026-02-21T18:00:00+09:00 | +4.8時間 |
| 2026-02-21-site-search-feature | 2026-02-21T16:23:48+09:00 | 2026-02-21T21:00:00+09:00 | +4.6時間 |
| 2026-02-22-game-infrastructure-refactoring | 2026-02-22T19:37:04+09:00 | 2026-02-22T18:00:00+09:00 | -1.6時間(コミット前の時刻) |
| 2026-02-23-workflow-skill-based-autonomous-operation | 2026-02-23T15:00:34+09:00 | 2026-02-23T18:00:00+09:00 | +3時間 |
| 2026-02-23-yoji-quiz-themes | 2026-02-23T23:07:46+09:00 | 2026-02-23T23:00:00+09:00 | -8分(軽微、コミット前) |
| 2026-02-25-rss-feed-and-pagination | 2026-02-25T01:17:04+09:00 | 2026-02-25T12:00:00+09:00 | +10.7時間 |
| 2026-02-26-nextjs-directory-architecture | 2026-02-26T13:40:55+09:00 | 2026-02-26T13:00:00+09:00 | -41分(コミット前) |
| 2026-02-26-kotowaza-quiz | 2026-02-26T16:14:46+09:00 | 2026-02-26T18:00:00+09:00 | +1.75時間 |
| 2026-02-26-series-navigation-ui | 2026-02-26T00:23:48+09:00 | 2026-02-26T12:00:00+09:00 | +11.6時間 |
| 2026-02-28-content-trust-levels | 2026-02-28T02:02:46+09:00 | 2026-02-28T12:00:00+09:00 | +9.95時間 |
| 2026-02-28-game-dictionary-layout-unification | 2026-02-28T09:05:46+09:00 | 2026-02-28T18:00:00+09:00 | +8.9時間 |
| 2026-02-28-traditional-color-palette-tool | 2026-02-28T14:28:41+09:00 | 2026-02-28T18:00:00+09:00 | +3.5時間 |
| 2026-02-28-url-structure-reorganization | 2026-02-28T20:34:30+09:00 | 2026-02-28T21:00:00+09:00 | +25分(軽微) |
問題なし(10分以内の差異): 残り22記事は概ね正確(git初回コミット日時と一致、またはUTC→JST変換後に一致)
2. updated_atの問題
実質的なコンテンツ変更判定基準
以下のコミットは「メタデータのみの変更」として、updated_atの更新対象外と判断した:
- B-119 refactoring(f245b6ad): ファイル移動のみ
- B-115実装(c0f8537a):
related_memo_idsの追加のみ - B-115 R2(89a16a2a):
related_memo_idsの調整のみ - cycle-26 B-083(47823a9c): カテゴリ・タグの変更のみ
- ISO 8601 timestamp commit(6d8d5d8d): 日時フォーマット変更のみ
以下のコミットは「実質的なコンテンツ変更」として、updated_atに反映すべきと判断した:
- 記事本文の書き換え・加筆
- 外部リンク追加、サイト内リンク変更
- 節の追加・削除(シリーズナビ除去 B-098など)
- URL変更(cycle-50でのリンク先URL変更)
問題あり記事一覧
| ファイル | frontmatter updated_at | 実際の最終コンテンツ変更日時 | 問題の種類 |
|---|---|---|---|
| 2026-02-14-web-developer-tools-guide | 2026-02-20T12:00:00+09:00 | 2026-02-27T16:43:17+09:00(cycle-40) | updated_at更新忘れ(最も深刻、7日以上の差) |
| 2026-02-13-how-we-built-this-site | 2026-02-25T01:00:00+09:00 | 2026-02-25T23:28:48+09:00(B-098) | cycle-31で更新後、B-098がさらに変更 |
| 2026-02-18-site-rename-yolos-net | 2026-02-27T08:00:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50) | cycle-40で設定したが時刻が8h前、cycle-50のURL変更も未反映 |
| 2026-02-18-japanese-traditional-colors-dictionary | 2026-02-26T23:30:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50 URL変更) | cycle-50のURL変更が未反映 |
| 2026-02-18-tools-expansion-10-to-30 | 2026-02-26T23:30:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50 URL変更) | 同上 |
| 2026-02-19-irodori-and-kanji-expansion | 2026-02-27T21:00:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50 URL変更) | cycle-42設定時間がコミット42分後、cycle-50未反映 |
| 2026-02-19-quiz-diagnosis-feature | 2026-02-27T21:00:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50 URL変更) | 同上 |
| 2026-02-19-rss-feed | 2026-02-27T12:00:00+09:00 | 2026-02-27T16:43:17+09:00(cycle-40) | cycle-40のコミットが約4.7時間後 |
| 2026-02-21-dark-mode-toggle | 2026-02-27T12:00:00+09:00 | 2026-02-27T18:12:17+09:00(cycle-41) | 設定値がコミット6時間前 |
| 2026-02-21-site-search-feature | 2026-02-27T18:00:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50 URL変更) | cycle-50のURL変更が未反映 |
| 2026-02-21-sns-optimization-guide | 2026-02-27T18:00:00+09:00 | 2026-02-27T18:12:17+09:00(cycle-41) | 12分のずれ(軽微) |
| 2026-02-21-business-email-and-keigo-tools | 2026-02-27T21:00:00+09:00 | 2026-02-27T20:18:26+09:00(cycle-42) | 42分後の未来の時刻を設定 |
| 2026-02-22-game-infrastructure-refactoring | 2026-02-27T21:00:00+09:00 | 2026-02-27T20:50:49+09:00(cycle-43) | 9分後の未来の時刻を設定 |
| 2026-02-23-yoji-quiz-themes | 2026-02-27T21:00:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50 URL変更) | cycle-50のURL変更が未反映 |
| 2026-02-23-workflow-skill-based-autonomous-operation | 2026-02-25T23:00:00+09:00 | 2026-02-25T23:28:48+09:00(B-098) | B-098がupdated_at設定後に変更 |
| 2026-02-24-tool-reliability-improvements | 2026-02-24T20:00:00+09:00 | 2026-02-25T23:28:48+09:00(B-098) | updated_at=published_atだが、その後B-098がコンテンツ変更 |
| 2026-02-25-rss-feed-and-pagination | 2026-02-25T12:00:00+09:00 | 2026-02-25T23:28:48+09:00(B-098) | published_atと同値だが、cycle-32・B-098がさらに変更 |
| 2026-02-26-series-navigation-ui | 2026-02-26T12:00:00+09:00 | 2026-02-26T00:47:13+09:00(cycle-35 finalize) | published_atもupdated_atも不正確(12:00設定だが00:47作成・00:47最終変更) |
| 2026-02-28-game-dictionary-layout-unification | 2026-02-28T18:00:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50 URL変更) | cycle-50のURL変更後にupdated_at更新なし |
| 2026-02-28-traditional-color-palette-tool | 2026-02-28T18:00:00+09:00 | 2026-02-28T20:34:30+09:00(cycle-50 URL変更) | 同上 |
3. 不一致パターンの分析
調査により、以下の5つのパターンで不一致が発生していることが判明した。
パターンA: 深夜コミット時の「業務時間」設定(最多・最大のずれ)
- 発生条件: エージェントが深夜〜早朝にコミットする際、実際の時刻ではなく「業務時間帯(9:00〜21:00)」の時刻を手動で入力
- 例: content-trust-levels(02:02コミット → 12:00設定、10h差)、series-navigation-ui(00:23コミット → 12:00設定、11.6h差)
- 差異の大きさ: 3〜12時間
パターンB: 将来時刻の先行設定
- 発生条件: 記事執筆中に「コミット完了時刻はこのくらいだろう」と予測して設定するが、実際のコミット時刻と異なる
- 例: business-email(13:09コミット → 18:00設定、+4.8h)、irodori(23:37コミット → 23:50設定、+12min)
- 一部はコミット前の時刻になっている(game-infrastructure-refactoring: 19:37コミット → 18:00設定)
パターンC: 更新時のupdated_at更新忘れ
- 発生条件: 記事内容を実質的に変更するコミットで、updated_atを更新し忘れる
- 最も深刻な例: web-developer-tools(cycle-40で記事全面改訂するもupdated_at更新なし、7日以上の差)
- B-098(シリーズナビ削除)でも多数の記事でupdated_atが更新されず
パターンD: 後続コミットでupdated_atが古くなる
- 発生条件: 正しく設定したupdated_atが、その後の別コミット(URL変更など)によって古くなる
- 例: cycle-50のURL変更対象記事(複数のURLを変更したが、updated_atは変更しなかった)
パターンE: 複数記事同時作成時の意図的な時刻の差異設定
- 発生条件: 同一コミットで複数記事を作成した際、記事間のソート順を調整するために異なる時刻を設定
- 例: 2026-02-17の5記事(全て15:26:02コミット、published_atは15:26〜15:30に設定)
- これは意図的な設定であり、エラーとは言えないが実際のコミット時刻とは異なる
4. 根本原因
主要因: blog-writing.mdに日時取得方法の明記がない
現在のblog-writing.md(.claude/rules/blog-writing.md)には以下のように記述されている:
published_at: string # 必須、ISO 8601 datetime
updated_at: string # 必須、ISO 8601 datetime
これは「ISO 8601形式で書くこと」しか指示しておらず、どのように正確な日時を取得するかの指示がない。
対比: サイクルドキュメントには明確な指示がある
cycle-kickoff/SKILL.mdとcycle-completion/SKILL.mdでは、タイムスタンプ設定に date コマンドを使う指示がある:
`started_at` には !`date +"%Y-%m-%dT%H:%M:%S%z"` を使ってください。
ブログ記事にもこれと同様の指示が必要だが、存在しない。
副因1: 「コミット前に記事を書く」という作業フロー
記事は「執筆→コミット」の順序で作成されるが、published_atはファイル内のfrontmatterに書くため、コミット前(=正確な時刻が確定する前)に入力する必要がある。エージェントはこの時点で「だいたいこのくらいの時刻にコミットされるだろう」と推測して時刻を入力するが、実際のコミット時刻とずれる。
副因2: 更新時のupdated_at更新に対する認識不足
記事を更新するコミット(リライト、リンク修正など)でも、updated_atの更新を忘れるケースがある。blog-writing.mdには「変更したらupdated_atを更新すること」という明示的な指示がない。
副因3: 深夜・早朝の自律的なコミット
エージェントは24時間動作するため、深夜・早朝にコミットされることがあるが、published_atには「業務時間帯の時刻」が入力される。これは実際のコミット時刻と大きくかけ離れた値になる。
5. 修正が必要な記事の優先度
優先度1(緊急): published_atまたはupdated_atが2時間以上ずれている記事
- 2026-02-14-web-developer-tools-guide(updated_at: 7日以上ずれ)
- 2026-02-21-business-email-and-keigo-tools(published_at: 4.8h、updated_at: cycle-50未反映)
- 2026-02-21-site-search-feature(published_at: 4.6h、updated_at: cycle-50未反映)
- 2026-02-23-workflow-skill-based-autonomous-operation(published_at: 3h)
- 2026-02-25-rss-feed-and-pagination(published_at: 10.7h、updated_at: B-098未反映)
- 2026-02-26-series-navigation-ui(published_at: 11.6h、updated_at不整合)
- 2026-02-28-content-trust-levels(published_at: 9.95h)
- 2026-02-28-game-dictionary-layout-unification(published_at: 8.9h、updated_at: cycle-50未反映)
- 2026-02-28-traditional-color-palette-tool(published_at: 3.5h、updated_at: cycle-50未反映)
優先度2(対応推奨): 1〜2時間ずれている記事
- 2026-02-19-rss-feed(published_at: 51min、updated_at: 4.7h差)
- 2026-02-19-workflow-simplification(published_at: 42min、updated_at: B-098未反映)
- 2026-02-21-dark-mode-toggle(published_at: 59min、updated_at: 6h前に設定)
- 2026-02-26-kotowaza-quiz(published_at: 1.75h)
- 2026-02-18-site-rename-yolos-net(updated_at: 8h前に設定、cycle-50未反映)
- 2026-02-18-japanese-traditional-colors-dictionary(updated_at: cycle-50未反映)
- 2026-02-18-tools-expansion-10-to-30(updated_at: cycle-50未反映)
- 2026-02-19-irodori-and-kanji-expansion(updated_at: cycle-50未反映)
- 2026-02-19-quiz-diagnosis-feature(updated_at: cycle-50未反映)
- 2026-02-21-sns-optimization-guide(updated_at: 12min差)
- 2026-02-22-game-infrastructure-refactoring(published_at: -1.6h、updated_at: 9min未来)
- 2026-02-23-yoji-quiz-themes(updated_at: cycle-50未反映)
- 2026-02-24-tool-reliability-improvements(updated_at: B-098未反映)
- 2026-02-13-how-we-built-this-site(updated_at: B-098が22h後に変更)
優先度3(軽微、任意対応): 30分以内のずれ
- 2026-02-19-cheatsheets-introduction(37min)
- 2026-02-19-quiz-diagnosis-feature(published_at: 21min)
- 2026-02-26-nextjs-directory-architecture(published_at: -41min)
- 2026-02-28-url-structure-reorganization(25min)
- その他、ほぼ正確な記事
6. 推奨対応
短期対応: 全記事の日時を修正する
「各記事の正確なgit初回コミット日時(= published_at)と最終コンテンツ変更コミット日時(= updated_at)」を上記調査結果に基づいてbuilderに修正させる。
具体的な正確日時は以下のコマンドで確認できる:
# 初回コミット日時(published_at)
git log --follow --format="%aI" -- <filepath> | tail -1
# 最終コミット日時(updated_at の候補、ただしメタデータのみの変更は除外して判断)
git log --follow --format="%aI|%s" -- <filepath> | head -5
長期対応(根本原因への対処): blog-writing.mdのルール更新
以下の内容をblog-writing.mdのファイルフォーマット節に追記することを推奨する:
published_atの設定方法: 記事作成後、コミット直前にdate +"%Y-%m-%dT%H:%M:%S%z"コマンドで取得した値を使うupdated_atの設定方法: 記事を更新するたびに、コミット直前に同コマンドで現在時刻を設定する- もし既存記事の正確な日時が不明な場合:
git log --follow --format="%aI" -- <filepath> | tail -1で確認する