ブログエンジンを自作した

静的サイトジェネレータ flxble を自作して, ウェブサイトをそれに移行した.

Markdown プロセッサは Markdig を使い, それ以外はテンプレートエンジンも含めて全て F# で自作した.

現在 1000 記事あるテスト用のブログを全部レンダリングしてタグや月別アーカイブ, RSS まで生成するのに合計 1.7 秒ほどしかかからないので, Hugo ほどではないが十分高速なブログエンジンの部類に入るだろう.

他の多くのテンプレートエンジンと違ってわたしの自作したテンプレートエンジンは内部で mutable state を使っていないので1, 自動的にスレッドセーフになっている.

そのお陰で安全に並列化できるのだが, 並列化しなくても既存の end-user2 .NET テンプレートエンジンの中でおそらく最速になってしまった.

せっかくなので Hugo にも勝ちたいが, プロファイラにかけたところ, 実行時間のほどんどを Markdig の Markdown パーシング・レンダリングが占めていたので, 自分で書いた部分をいくら弄ってもこれ以上速くなる望みがあまりないことがわかった.

さすがに Markdown 処理系を自作したくはない.


  1. F# の標準ライブラリの ListMap はすべて immutable なので, 何も考えてなくても勝手にスレッドセーフになる. ここらへんは ML 系言語の面目躍如ではないだろうか.

  2. 独自のスクリプト言語を採用しているなどの理由で任意コードの実行ができず, エンドユーザに使わせても安全なもの. Razor は無制限で C# を使えるのでこの枠には入らない.