Practice of Programming

プログラム とか Linuxとかの話題

Nanoc で PlantUMLを表示する

Nanoc とは?

静的サイトジェネレーターです。jekyllryhonkitとかの仲間です。

GitLabで静的ページを作るのに、honkitを使っていたのですが、最近、Nanocを試していました。

nanoc.app

Nanocの利点

  • ビルドが速い(honkitと比較すると爆速といえる)
  • filterを書くのが簡単

デメリットは、honkitだと、色々プラグインが存在して楽なんですが、あんまりなさそう?というのと、僕がRubyに慣れてないくらいですね。

お題の件の通り、honkitだと、PlantUMLもプラグインで表示ができるのですが、nanoc ではできません。

Nanocのフィルターを書いてPlantUMLに対応する

ですが、Nanocは、自分で簡単にフィルターを書くことができます。

フィルターは、lib/nanoc/filters/ の下に、.rb なファイルを作り、identifier に名前をつけて、それを、Rules ファイルの中で使うだけです。

もともと、markdownをhtmlに変えるのは、kramdownというフィルターがありますが、このソースコードをコピーしてきて、下記のパッチを当てて、適当なファイル名で保存すればOKです。

@@ -2,10 +2,10 @@
 
 module Nanoc::Filters
   # @api private
-  class Kramdown < Nanoc::Filter
-    identifier :kramdown
+  class KramdownPlantUML < Nanoc::Filter
+    identifier :kramdownplantuml
 
-    requires 'kramdown'
+    requires 'kramdown-plantuml'
 
     # Runs the content through [Kramdown](https://kramdown.gettalong.org/).
     # Parameters passed to this filter will be passed on to Kramdown.

単に、名前を変えているのと、require しているものをkramdownからkramdown-plantumlに変えるだけですね。

そして、Rules のほうで、

  filter :kramdownplantuml, :input => "GFM"

のようにすれば、PlantUMLに対応することができます。