PureBuilder Simply 2.0
開発::web
序
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としてパースできる。
まとめるとこのようになる。
= RDoc::Options.new
options = RDoc::Markup.new
markup
= RDoc::Markdown.parse(File.read(sourcefile))
markdown
= RDoc::Markup::ToHtml.new(options, markup)
rdoc 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のツールとしての安定感を強化し、今後も安定して使えるようにするものである。
ぜひ、多くの人に使ってもらいたい。