やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

hugoの日付書式がクソすぎる(悪いのはgo言語です)

 yyyy-MM-dd HH:mm:ssのような書式ではなく2006-01-02 15:04:05である。この数値でなければ正しく表示されない。は? なにこれ? ひどくない?

手順

  1. Go言語をインストールする
  2. hugoをインストールする
  3. プロジェクト作成&pulpテーマ適用
  4. 以下のように設定ファイルを編集する

コード

 日付の表示形式をyyyy-MM-ddに変更したい。以下のようにする。

config.toml

[params]
    listPageDateFormat = "2006-01-02 15:04:05"
    singlePageDateFormat = "2006-01-02 15:04:05"

 具体的な日時に見えるでしょ? これ、フォーマットなんだぜ……。

 ハァ? と思うでよね? ふつうyyyy-MM-dd HH:mm:ssとか%Y-%m-%d %H:%M:%Sとか、そーゆー感じなのにさ。具体的な数値をフォーマットにしちゃってんの。2006-01-02 15:04:05だよ? これをみて、だれが書式だと思う? 具体的な日時を示しているようにしか見えないだろ。

 よしわかった。数値をフォーマットにしてるのね。無理やり納得しよう。でもさ、だとしたら2000-01-01 00:00:00とかがフォーマットにふさわしいと思うじゃん?

 ためしにlistPageDateFormat2000-01-01とかにしてみ? どうなると思う? なんと、7000-11-11になる。西暦7000年って……。ドラえもんすら世界遺産に認定されるレベルの超未来なんですけど……。バカなの?

f:id:ytyaru:20201108120037p:plain

 執筆当時は2020-11-08だった。なのに日付も11になっている。これは月の値が出力されたものと思われる。つまり01は月を出力するフォーマットだと予想できた。

 じゃあ時間や秒は? 詳しくはさっぱりわからんので書式について調査した。すると、悲しいまでに残念な事実が続々と発覚する。

書式

 フォーマットの数値については、以下サイトのコード例を自力でマージすることで見つけた。

 まとめると以下。

対象 書式
2006
01
02
15
04
05

 せめて2000-01-02 03:04:05にして欲しかったわ。2006-01-02 15:04:05ってなに? どこから出てきたの? 覚えられねーよ、こんなマジックナンバー。バカじゃないの?

 じつはこれ、HugoでなくGo言語の書式らしい。ウソだろ……お前の書式、糞すぎ!? どこへ行こうとしているんだお前は……。ついていけねーよ。キモいのはキャラだけでなく書式もか。ほんとキモい。Go to hell !!

疑問の声

 お客様からお疑いの声が続々と届いております。

 しかし、やはりあのクソフォーマットでやるしかないという結論。はいクソ。

なぜこんなクソ書式なのか?

 開発者がロクに考えなかったから。なんだってさ。ひどい。クソすぎ。

アメリカ式の時刻の順番なのだ。"1月2日午後3時4分5秒2006年"(つまり「自然な順番」で1, 2, 3, 4, 5, 6)を指している

 これはひどい。最初からひどい。時刻なのに国際標準も考えなかったのか。1,2,3,4,5,6という自然な順序って、何を言っているんだって感じ。もうその並び順が英国式じゃん。なんで年が最後なんだよ。欧米か!

 そもそも、数字じゃなくてフォーマット文字列にしろや。既存のdateコマンドやプログラミング言語を参考にするとか、色々あったろうに……。新しい言語だったのに、なぜ過去の風習を踏襲しなかったのか。

最初からよく考えていればこの順番にはしなかった

 などと犯人は話しており、

もうその順番になっているので変えられないし、それにきちんと文章化もされている

 と自身を正当化している模様。

 使いにくくわかりにくいことについて解決する気はないらしい。

 さよならGo言語。もう君とは関わりたくない。キャラも言語もキモい。

デフォルト値

 話を戻す。Hugoの設定について。日付書式のデフォルトは英語圏のものになっている。

config.toml

[params]
    listPageDateFormat = "January, 2006" # See https://gohugo.io/functions/format/
    singlePageDateFormat = "January 2, 2006"

 英語はやめてくれ……。というか言語設定hasCJKLanguage = trueとかlanguageCode = "ja-jp"とか指定しているんだから、自動的にその国の表記にして欲しい。日本なら令和e年m月n日 h時m分s秒とかにしてくれ。せめて西暦y年m月n日 h時m分s秒とかさぁ。多言語にできないならデフォルトはyyyy-MM-ddにしてくれない? これならISO-8601だし国際規格に則った標準なのに。

 どのみち、大本のGo言語の日付書式がクソだから終わってる。ここでもやはりC#は最強。見習ってくれ。

所感

 私はいまだかつてこんなクソったれフォーマットを見たことがなかった。あまりのクソさに衝撃だったので、つい記事にしてしまった。

 私的には、もうこれだけでHugoを避けたくなる。というか、Go製すべてのソフトウェアを使いたくなくなった。マジでありえない。なんて言語を広めてくれたんだ。Googleめ。

対象環境

$ uname -a
Linux raspberrypi 5.4.72-v7l+ #1356 SMP Thu Oct 22 13:57:51 BST 2020 armv7l GNU/Linux