公開

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 本の特集が並んでいます。

参考