公開
27,000 件の年表から特集を編む
chronoscroll の特集を 7 本から 17 本にした。新しく書かずに既存のイベントを参照するだけで組み、Wikipedia の記事と日付や表現が食い違うイベントは外した。10 月のデータを巻き戻さない JSON の作り方、OGP、R2 への同期も。
chronoscroll は、1829 年から現在までの歴史ニュース 27,453 件を縦の年表で見るサイトで、各イベントには Wikipedia の出典が付いています。「特集」は、テーマに沿ったイベントを年代順に通読する読み物のページ(/c/<slug>)です。2026-10-06 の 2 本の PR で、特集を 7 本 185 件から 17 本 491 件にしました(#56・#58)。足したのは、災害と防災・五輪・医学と感染症・女性の権利・公害と環境・音楽・航空・憲法と選挙・核兵器と軍縮・金融危機の 10 本です。
新しく書かず、既存のイベントを参照する
特集の正本は content/collections/<slug>.yaml で、中身は既存のイベントの id の並びです。新しい 10 本では、イベントを新しく書くことも、要約を上書きすることもしていません(例外は後で書く 1 件だけです)。イベントの総数は 27,453 件のままです。
候補は、テーマごとのキーワードでデータを洗い出し、日付・タイトル・要約・出典を 1 件ずつ読んで選びました。同じ出来事が 2 つの系列に重複しているときは、要約が詳しく日付が正しい方を採ります。特集どうしで同じ id は使わないので、女性参政権(1945)と戦後初の総選挙(1946)は「女性の権利」にだけ入れています。冒頭のリード文と説明文も、収録したイベントの本文に書かれている事実だけで書きました。
Wikipedia の記事と食い違うものは外す
候補の日付と表現は出典の Wikipedia の記事と突き合わせ、データが記事と食い違うものは外しました。外した理由は、各 YAML の冒頭に英語で書き残しています。
| 特集 | データの記述 | 記事の記述 |
|---|---|---|
| 五輪 | クーベルタンの提唱は 1892 年 11 月 23 日 | 11 月 25 日 |
| 医学 | SARS の新感染症指定は 2003 年 4 月 4 日 | 4 月 3 日 |
| 災害 | 1947 年のカスリーン台風が「上陸」 | 房総半島の先端をかすめた |
| 音楽 | 「ハートブレイク・ホテル」は 1 位 8 週 | Billboard Top 100 で 7 週 |
| 航空 | 1954 年 7 月 15 日に「ボーイング 707 初飛行」 | 飛んだのは原型機 367-80 |
| 核兵器 | アインシュタインの手紙を 8 月 2 日に大統領へ送付 | 8 月 2 日付で、大統領に渡ったのは 10 月 11 日 |
| 憲法と選挙 | 1976 年の総選挙は 12 月 9 日に実施 | 投票は 12 月 5 日 |
外すと特集が成り立たないものだけは、データの方を直しました。「憲法と選挙」の起点にした大日本帝国憲法は、手で整えた要約が「アジア初の近代成文憲法」でしたが、記事は「東アジア初の近代憲法」です(1876 年のオスマン帝国憲法が先)。正本の content/curated/top50.yaml を直し、生成済みのデータにも反映しました。一方、世界初の CD を「オランダのフィリップス工場」とする要約(記事は西ドイツ・ランゲンハーゲンのポリグラム工場)は、この PR では直さず、特集から外すだけにしています。
10 月のデータを巻き戻さずに JSON を作る
特集の JSON(一覧の collections.json と、特集ごとの本体)は、本来はビルドのパイプラインが作ります。ただ、年ページのキャッシュは CI にしかなく、手元のキャッシュは 2026-08-07 時点のものです。build.ts --offline をそのまま回すと、10 月の月次更新で入ったデータが巻き戻ります。
そこで、パイプラインの関数(parseCollectionYaml から buildCollectionDetail へ、と続くもの)を build.ts と同じ順に、コミット済みのデータへ当てて書き出しました。特集は id を参照するだけでイベント本体を変えないので、CI のフルビルドと同じ出力になります。既存の特集の出力が 1 バイトも変わらないことを確かめ、要約を直したときも、先に「変更なしで再出力すると 31 ファイルが 1 バイトも違わない」ことを確かめてから修正を当てました。差分はそのイベントの要約だけです。次の月次更新も、同じ YAML から同じものを作ります。
OGP は 1 行に収める
特集ごとの OGP 画像は、タイトル・リード・件数・期間を入れたカードです。サイトの URL が workers.dev に変わってから件数と期間の行が 2 行に折れていたので、その行を 1 行に保つようにして 12 枚を作り直しました。既存の 7 枚に残っていた chronoscroll.vercel.app の表記も、ここで消えています。#58 では、既存の 1 枚を同じ手順で作り直してピクセル差が 0 であることを確かめてから新しい 5 枚を作り、タイトルも 1 行に収まる「憲法と選挙の歴史」「金融危機の歴史」にしました。
R2 に送るのは変わったページだけ
イベントの個別ページ(/e/<id>)は R2 に置き、ビルドのたびに差分だけを同期しています(R2 + Worker の記事)。個別ページには収録されている特集へのリンクが出るので、新しい特集に入ったイベントのページは変わります。#58 では、特集に入らないイベントと既存の特集のイベントのページを 1 件ずつ本番と比べて 1 バイトも違わないことを確かめ、同期で変わるのは新しい特集の 154 件(put 約 154、del 0)と見込みました。どちらの PR でも、新しい特集から張ったリンク(152 件と 154 件)がすべて実在のページを指すことを、ヘッドレス Chrome で確かめています。2026-10-07 時点の本番の /c には、17 本の特集が並んでいます。
参考
- chronoscroll PR #56(災害・五輪・医学・女性の権利・公害、OGP のメタ行)
- chronoscroll PR #58(音楽・航空・憲法と選挙・核兵器・金融危機、要約の修正、R2 同期の見込み)
- 外した理由を書いた YAML の例: music.yaml・nuclear.yaml・olympics.yaml
- chronoscroll の README(17 本 491 件・個別ページから特集へのリンク)
- 本番の特集一覧 /c(2026-10-07 に 17 本を確認)