重い腰を上げて、ブログをリニューアルしました。 というのも、このブログに用いていた、 Hakyllという静的サイトジェネレータが、 メジャーバージョンアップして、 それに追従しておきたいなあというのがありました。

その際に、ついでなので、Bootstrap化と、 変なところを直しておきました。 いろいろやっていると、なかなか大変です。

Hakyllに、WindowsだとUTF8が上手く扱えない問題があって、 それを直すのにも時間がかかってしまいました。 たぶん、そんなに大きなデータを扱わないからだと思うのですが、 readFile で適当にファイル処理をしている部分がたくさんあって、 これが下手にUnicode対応しているおかげで、 デフォルトロケールのエンコーディングで勝手にデコードしてくれます。 だもんで、UTF8で書かれた文章は、 UTF8ロケール以外だと、Hakyllではなんだか微妙に文字が化けます。

ロケール非依存で、UTF8決め打ちで処理したい場合、 readFileのエンコーディング指定版は存在しないので、 openFile -> hSetEncoding か、 openBinaryFile -> hGetContents -> decodeUTF8 かのどちらかになりますが、 いかんせん readFile を行っている箇所が多くて大変なので、 今回は同じ型シグネチャを持つ、utf8-stringSystem.IO.UTF8 モジュールを用いました。 utf8-string 自体レガシー感が漂うパッケージですので、 これで pull-request を送るのは何だかなあと言うのもありまして、 パッチは保留しています。

実は、GHC.IO.Encoding モジュールに、グローバルエンコーディングを変更する APIがあったりもしますが、 例によって例のごとく、Windowsだと指定しても動かない模様で、 きちんとバイナリを読んできちんとUTF8でデコードするという処理を行うのが、 正当な方法かなあと思います。 今は気力が足りないので、これはまたいずれの機会に。

また、改行コードが CRLF だと、記事のメタ情報と本文情報の切り分け部分のパーズが 上手くいかないというバグが、これまたHakyllの方にありまして、 これはもうめんどくさいので、文章の改行コードを全部LFに変更しました。 これも直してあげると良いのかなあ。 Pandocは良く出来てるのに、Hakyllのこの辺の文字コードやら改行コードやらの扱いが 適当でLinuxから離れるととたんに残念になりますね。

Hakyll自体は、3から4へのバージョンアップでだいぶ良くなっていると思います。 なにより大きいのは、基本のAPIが、ArrowからMonadになりました。 Arrowとはなんだったのか。

hakyll-init なるコマンドも実装されて、これを使えば、 さくっとサイトのひな形が作れます。 あとはBootstrapをぶち込めば、 今っぽいサイトができちゃいますね。いやあ、楽です。

というわけで、なんとか良い感じに移行できました。

https://github.com/tanakh/tanakh.jp

当サイトのソースはこちらで管理していますので、興味のある方はどうぞ。