カラクリスタ

「輝かしい青春」なんて失かった人のブログ

hugo を止めて Perl で自分専用の StaticSiteGen を作りました

いや何やってんのお前……と言う感じがしないでも無いですが、 この度 the.kalaclista.com の生成システムを、 hugo から、Perl で書いた専用の Static Site Generator を使う様に切り替えました。

なんで今回はその辺りのお披露目話を書きたいと思います。

公開リポジトリ

システム本体

p5-Kalaclista

テンプレートなどの諸々

kalaclista

そもそもなぜ Perl でこう言う物を作ったのか

私は以前から hugo でこの Web サイトを作っていたのですが、 色々とこう摩訶不思議な使い方をしており、

HTML や XMLJSON を粉砕せずに書くの辛すぎる……

だとか、あるいは、

つーかこれ HTML とか Markdown の拡張しづれー

と言うのがありました。

まぁ私は色々とトンチキな hugo の使い方をしていたので、 余計にそう言う面が目立った可能性はあるものの、

  • HTML と XMLJSON を生成するのがつらい

と言う事については、前々から課題感を持っていました。

とは言え、そうは言っても hugo 以外に目立った乗り換え先も無し、 これはどうしたものなーと考えていた時期に、

YAPC::Japan::Online

が開催され(今年の 3 月頃)、その時に Perl への愛が高まったため、

おっしゃ、いっちょ Perl で StaticSiteGen を作るか!!1

と決意したのが事の始まりですね。 そしてなんか完成するまでに半年掛かってもう 9 月になったけどな!

Perl で Static Site Generator を作った上での利点

まず Perl で StaticSiteGen を自作した最大の利点としては、

  • 自分の欲しい機能を自由に実装できる

と言う点です。

まぁ自分で作ってるんだから当り前っちゃあ当り前なのですが、 静的な Web サイトを作る上で生成システムの自由度が Max になると言うのは、 生成する Web サイトの用件に対し完全な自由を得られる事と同義です。

そのため、

こう言った機能を実現したいけど、今の生成ツールだと厳しいなぁ……

と言うのが原則として無いので、欲しいものは作れる!と言う感じで、 こうモリモリとシステムを実装することができ、 生成ツールへの不満や不便な点はおおよそ解決できる様になりました。

また今回私の中の課題感であった、

HTML と XMLJSON を生成するのがつらい

と言う点については、Perl で HyperScript っぽいことを実現する Kalaclista::HyperScript と言うモジュールの作成と、 JSON については JSON::Tiny を使うことによって解決しました。

その他、私は今回の StaticSiteGen の作成にあたり、かなり偏執的にテストを書いていたため、

うん、ここをこう変えてみたけど、テストは壊れてないから良さげっぽいよね!

と言う事へ常に確認が取れる様になり、生成システムをガッツリと変更することが容易になった、 と言うのも今回の作業の利点だったかと思います。

あと蛇足ですけど、この上記の自作ツールで生成したこの Web サイト関連のファイルに対しても、 ほぼすべてのファイルに対しテストを書いていたので、 カバレッジスゴクタカイ と言う状態になっています。 なのでその点でもシステムに手を入れ易い、と言うのがあると思います。

Perl で Static Site Generator を使った上での欠点

そして光があれば影がある……みたいな話でもあるんですが、 今回のシステムでこの Web サイトの生成システムを入れ替えた結果、 この Web サイトの生成時間が 10 倍ぐらい遅くなりました。

まぁ秒数にして 2 秒前後掛かっていた生成時間が 20 秒ぐらいになった、と言う感じではあるんですが、 これは Ryzen 9 3950X で 31 threads をしばいての生成時間なので、たぶん他のシステムだともっと遅くなっている、 と思われます。

もっともこれは一回の生成で 2,000 ページ以上は生成している……と言う私個人の事情もあるかと思うのですが、 それにしても 20 秒前後は遅いなぁ……と言う気持ちになっています。

とは言え、これは生成速度への最適化がまだやってない段階での数字であり、 もう少し改善すれば速度を縮められるのでは?と言う余地のある話だとも考えています。 そのためその辺りは今後の課題点ですね。

またその他、今回のシステムは Perl を基軸として開発したため、 CPAN modules の過不足の影響は受けており、 具体的には CommonMark 周りはもうちょっとなんとかならんか?と言う気持ちがあります。

と言うか Perl の CommonMark ってここ数年、なんかメンテされてない様な気配があるんですよね……。 とは言え、そう言う事を言っているとお前がメンテせいやって言われるのが常ではあるのですが。

以上

と言う感じでこの Web サイトの生成システムを Perl で自作した、と言う話でした。

まぁこう言う記事を書いていると技術的な話をくれ!って言われそうですが、 中身の実装については cpanfile を眺めてくれ〜と言う感じであるのと、 変わったことをやっているか……と言われると、 HTML5::DOM 周り以外は特に奇妙なことをやってないので、まぁあんまり言うことが無いですね。

あとそう言う技術的な話は Zenn.dev で書いた方が良いかなー、 と考えてるので、その辺りはたぶんそっちで書くと思います。まぁ気分が乗ればですが……。

あとなんだろう。この Web サイトの基本的な部分は完成しているのですが、 一部表示の崩れが無いわけではないので、その辺りも今後改善して行くかなー、 と言う心持ちをしていますね。はい。