記事の日付を英語版からしか読まない
Pluso 開発 · · English · 中文

記事の日付を英語版からしか読まない

英語版のファイルがあって日付が空のとき、その記事は一覧の末尾に回り、時刻の欄も空になる。中国語版に日付を書いてあっても効かない。エラーも出ず、ログも残らない。ページはいつも通り生成されるので、長いあいだ誰も気づかなかった。

原因は「英語版しか読まない」より込み入っている。日付は記録が最初に作られた時点で、そのとき読んでいたファイルの値として決まり、その後どこからも書き戻されない。言語で分岐する代入がもう一行あるが、英語の優先を守っているように見えて、実際には死んだコードだ。

言語に関係なく代入する形に変えて、サイト全体を作り直した。差分はゼロだった。39 個の markdown と 13 本の英語記事が一バイトも変わらない。英語版はどれも日付を持っていて、この行が守ろうとしている「英語版はあるが日付が空」の状況が一度も起きていないからだ。行ごと消しても同じくゼロ差分になる。

つまり英語の優先は、優先順位の一覧によってでも、その行によってでもなく、記録が作られる瞬間に起きている。ファイルは名前順に読まれ、同じ記事なら英語版が日本語版と中国語版より後に来るので、記録は必ず英語版から作られ、日付も英語版のものになる。その行が英語の優先を守れていなかったのは、優先がすでにその前で起きていたからだ。

英語版がないときだけ並び順がものを言い、先に来たほうの日付が使われる。実際には日本語版が中国語版より先になる。この半分はファイル名が生んだ副産物で、誰かが決めた規則ではない。名前を変えれば変わってしまう。

いまの読み取りは、三つのファイルの日付をそれぞれ別に持ってから、中国語、英語、日本語の順に最初の非空値を取る。読むことと選ぶことが分かれ、順序は明示され、言語を増やすときはその一覧に一行足すだけで済む。ファイル名の並びを推測する必要はない。

注意が一つ残る。日付は最初の非空値を取るだけで、値の妥当性は検査せず、今日とも比べない。ビルドには未来の記事を飛ばす絞り込みがいまのところない。将来これを入れると、空の日付は比べようがなく公開可と判定されるので、検査はその読み取りの場所に置く必要がある。空の値が自然に止めてくれることは期待できない。