PureBuilder2
有用なユーティリティコード
- TOP
- Old Archives
- PureBuilder2
PureBuilder2とは
PureBuilder2は現行のPureBuilderを置き換える新しいサイトビルドツールだ。 コマンド一発でウェブサイトの更新が可能になる。「動的生成の事前作業化」が可能となる。
PureBuilderからの主な変更点は次の通り
- Rubyでの実装 (Windowsで動作可能に)
- MarkdownとeRuby対応
変更点は少ないようにみえるが、PrueBuilderとは互換性はないし、コードも新規に起こす。
Markdownへの対応
Markdownへの対応はKramdownライブラリを使用した。 非常に使いやすく、問題はないように見えた。 何を何に出力するかは、指定クラスの入れ替えによるポリモーフィズムによる。
このラッパークラスはごく簡単だと思ったのだが、そうはいかなかった。
現状、PureDocはライブラリであり、ドキュメントがRubyコードである。 これを出力するためのユーティリティはZshスクリプトになっている。
PureBuilderはその多くをPureDocに依存している。 PureBuilderが直接に依存していなくても、テンプレート側はPureDocオブジェクトを触れることになっているし、現状テンプレートを呼ぶところまでがPureBuilderの仕事なので、当然テンプレートではドキュメントを出力するために、PureDocオブジェクトを必要とする。
だが、当然ながらKramdownオブジェクトはPureDocオブジェクトと互換性がない。 機能を維持するためには、単にKramdownを呼び出すラッパーではなく、Kramdownを内部で使うPureDoc互換クラスが必要となる。
予定とは比べ物にならないほど大変な作業だ。
PureDocのインターフェイス
加えて、今のところPureDoc Translatorが保持している機能については、PureBuilderから使用することができなくなる。 旧来のPureBuilderは、コマンドとしてPureDoc Translatorを呼んでいたため問題がなかったが、ライブラリとして使うとTranslatorは使えない。
PureDocにその機能があるにはかかわらずPureDocに組み込まれていないのは、PureDocの仕様によるものだ。
PureDocの
##-----
...
##-----
という形式でYAMLをヘッダーとして埋め込めるという仕様は、PureDocにはないが、便宜上の拡張としてTraslatorにあり、PureBuilderはそれを前提として使用する。
これをPureDocに組み込むのであれば、PureDoc
クラスにその機能をいれてしまえば良い。
要はこの仕様をPureDocに取り込むか、PureBuilderに取り込むかの話なのだが、おそらくはPureDocに取り込むのが妥当なところ。
一方同じようにこのヘッダを取り扱いながら、ヘッダにLast UpdateとSinceを書き込む機能があったりするが、これはあきらかにPureDocではなくPureBuilderに実装されるべき機能だ。
一応、いまのところ次の方針を考えている。
- meta取り込みは
PureDoc#read_meta(text)
で行う。このヘッダはコメントになっているので、テキストを与える必要がある。これはPureDocライブラリが勝手に実行することはない - PureBuilderは
puredoc.meta
によりsince
とlast-update
を確認し、ない場合は追記する
PureBuilder2のおおまかなモデル
purebuilder本体はRubyライブラリとなり、基本的には各ディレクトリの.rebuild_rulesまたは.up*ファイルが処理手順となる。
これらをまとめて呼ぶためのスクリプトが、purebuilder.rebuildallになる。
対象ファイルに対して
PureBuilder.build(file, outputdir, extname)
とすることでビルドできる形だ。
インタープリタ起動役は
rebuildallでrebuildスクリプトのインタープリタは拡張子によって判断するが、拡張子がない場合はperl
を使う。
これは、perlはshebang行を解釈するためだ。この機能はsh/bash/zsh/rubyにないことを確認している。 Perlは「Shebangを解釈できないダメなシェルに代わって」起動するそうだが、どうやらLinuxが解釈するだけで、シェルに解釈を期待するのは厳しそうだ。