2022-03-05

Cryogen のカスタマイズ

前回の投稿で、 Cryogen のバージョンアップに伴い Cryogen 自体のカスタマイズが必要だとを書いた。

カスタマイズ自体はかなり簡単にできたのだが、 Clojure 経験不足だからか正直なところドキュメントの記載だけではピンと来なかった。 ということで、またわからなくなること必至のため記しておく。

cryogen-core のバージョンは 0.4.1 だ。

対象のドキュメント Cryogen: Customizing/Extending Cryogen を以下に全文引用する。

You can copy the cryogen-core.compiler namespace directly into your project (where it will override the one from the cryogen-core.jar) and modify it to your liking. It is not very long or complicated and is quite easy to modify. That is what we did for this site (although it uses a much older version of cryogen-core, you may still use the same strategy today).

機械翻訳にリンクを添えた ↓

cryogen-core.compiler 名前空間をプロジェクトに直接コピーし(cryogen-core.jar のものを上書きします)、好みに応じて変更することができます。これはそれほど長くもなく、複雑でもなく、非常に簡単に修正することができます。このサイトでは、このような方法をとっています(かなり古いバージョンの cryogen-core を使用していますが、現在でも同じ方法をとることができます)。

早い話が「Cryogen の公式ページのコードを真似ろ」。

はじめはナンノコッチャと思ったのだけど、Cryogen の repo のコードを眺めて「cryogen_core/compiler.cljをコピって自分でサイトジェネレータを書いたらええんやで?」だと理解した。

Cryogen のエントリポイントは cryogen/core.cljcryogen/server.clj があるが、いずれもサイトジェネレータは cryogen-core.compiler 名前空間の compile-assets-timed を呼び出してるだけなので、これを cryogen_core/compiler.clj からコピった自分用ジェネレータに変える、という趣旨らしい。

とった手順は以下の通り。

  1. cryogen_core/compiler.clj をコピって自分のサイトのコードに src/cryogen/compiler.clj として配置する
  2. src/cryogen/compiler.clj を自分の必要な形に書き換える
    • 今回デフォルトの Cryogen から変えたかったのは、 RSS フィードの要約機能を取り除いて HTML 全文載せるようにすることだった
    • add-description 関数の中で利用されている util/enlive->plain-textutil/enlive->html-text に変更、add-description に依存する関数 compile-assets, compile-assets-timedcryogen.compiler に定義した
    • それ以外の関数は cryogen-core.compiler を参照する
  3. cryogen/core.cljcryogen/server.clj で、 compile-assets-timed の名前空間を cryogen-core.compilercryogen.compiler に変える
  4. lein serve してエラーがない&期待の出力になっていれば完了

これで概ね自分が期待する出力を得られるようになった(はず)。 気付かないところで破壊的な変更をしているかも知れないので、それは経過観測していく。この投稿をした後で RSS フィードが本当に届くか心配だ。

あと既知の問題として、新たに追加された lein serve:fast がちゃんと動いてんのかこれ? であったり、 Markdown 保存時の再生成が怪しかったりする。 これらは、ちまちま直していきたい。

これで repo の統合だったり GitHub Action 化が見えてきた。