序
2017年12月にリリースされたPureBuilder Simplyだが、約4年の月日を経てついにバージョン2.0となった。
私としては待望の更新であり、去年ずっとやりたいと思っていたことをこの年末年始で実現したものだ。
v1.16の機能はChienomiのぷちリニューアルのために必要で入ったものだが、正直2.0は機能的にもとめている人は多くなかっただろう。 2.0の主な機能は「Pandoc以外のドキュメントプロセッサを使えるようにする」である。
PureBuilder SimplyはPandocありきで開発されたため、コード自体もPandocに対して非常に密なものになっていた。 この問題の解消と、Pandocへの依存度の軽減、ついでにリファクタリングを行いたかった。
実際のところ、この待望のリファクタリングは、大したものではなかった。 私の記憶ではかなり汚いコードになっていたのだが、実際に見てみるとあまり修正する余地のないコードとなっていたのだ。 これは、バージョンを重ねるごとに不適切に見える箇所のリファクタリングを繰り返していたことが功を奏したようだ。
マルチプロセッサ
まず前提として、PureBuilder SimplyはPandocを使うことで強力なツールとして輝く。 本来はPandocを使うべきであり、Pandocを使わない場合はPandocの強力な機能が使えないため、制約を受ける。
具体的にはPandocを使わないことでPandocのテンプレート機能が使えなくなり、Pandocの強力に拡張されたMarkdownを使うこともできなくなる。 また、当然ながらMarkdownプロセッサではReSTは使えない。 このほか、TOCやSyntax Highlightingも使えなくなる。
端的に言うと、Pandocをどうしても使いたくない、もしくは使えない事情がない限り、この機能を気にする必要はない。
詳細はREADMEに書かれているが、.pbsimply.yamlのpbsimply_processorの値によって使い分けることができる。
(基本的に、別プロセッサに途中で切り替えることは想定していない。)
用意されているのは基本的にRubyのライブラリであり、RDoc, RDoc/Markdown, Kramdown, Redcarpet, CommonMarkerをサポートしている。
将来的には、docutilsもサポートする予定である。
Pandoc以外のプロセッサでは、Kramdownが強力かつ高速でおすすめだ。 Redcarpetはいささか貧弱である。CommonMarkerは拡張を含めてもGFM程度に過ぎない。 RDoc/Markdownは意外にも高機能だが、非常に遅い。 RDocは表現自体がRDocに制約されるのが特徴的だ。
RDoc/Markdownのつかいかた
RDoc/Markdownの使い方について説明されたドキュメントがなく、APIドキュメントに誤りがあったため、かなり難しかった。
まず、RDoc::Markup::ToHtml.newは引数をふたつ取り、1つ目に必須のOptions(RDoc::Options)、2つ目がMarkup(RDoc::Markup)である。
ここでOptionsを渡さなくてはならない、というのがドキュメントにないひとつめのポイントだ。
そして一見、Optionsに設定することでMarkdownを使うことができそうに見えるのだが、opt.markup = "markdown"としてもMarkdownにはならない。
RDoc::Markup#convertは文字列のほか、RDoc::Markup::Documentオブジェクトを渡すことができる。
RDoc::Markdown.parseはRDoc::Markup::Documentオブジェクトを返すため、これを組み合わせることでMarkdownとしてパースできる。
まとめるとこのようになる。
options = RDoc::Options.new
markup = RDoc::Markup.new
markdown = RDoc::Markdown.parse(File.read(sourcefile))
rdoc = RDoc::Markup::ToHtml.new(options, markup)
puts rdoc.convert(markdown)RubyGems
2.0もうひとつの目玉が、RubyGemsに対応したことだ。
gemによってビルド/インストール可能になっただけでなく、RubyGems.orgにて公開されたため、gem install pbsimplyとすることで導入できるようになりさらにハードルが下がった。
なお、従来プロセッサのコマンドはpbsimply-pandoc.rbだったが、これがpbsimplyに変更され、テストサーバー起動もpbsimply-testserver.rbからpbsimply-testserverに変更された。
むすび
そもそもPureBuilder Simplyはツールとしては成熟しており、私はいくつものウェブサイトをPureBuilder Simplyによって構築・管理している。
今回の変更はその効果を強化するものではないが、PureBuilder Simplyのツールとしての安定感を強化し、今後も安定して使えるようにするものである。
ぜひ、多くの人に使ってもらいたい。