前にちょっと書いたけどBlosxomの動的生成インターフェイスをGruntから叩き、その結果を指定ディレクトリに保存するだけのGruntプラグインを書いて使ってる。汎用性はあんまり考えてないけど、Blosxom側が優秀なのでそれなりにあるような気がする。本体の書き換えが不要で、特殊なプラグインを必要とせず、動的生成向けのプラグインたちが普通に動くといった辺りが、ビルトインの静的生成システムと比べた利点。
Download: grunt-blosxom.js
設定は以下の様な形で書く。普通のGruntプラグインとは違うので、混乱しないようにsrc
やdest
は使わず、固定か--file
オプションで生成すべきファイルのパスを指定する。
blosxom: {
options: {
root: '.grunt/weblog/',
datadir: '.grunt/weblog/entries/',
static_dir: 'blog/'
},
article: {
file: grunt.option('file')
},
feed: {
file: 'index.rss'
}
}
options
は以下の様な構成になっている。本当はほとんど同じことが書かれるはずのblosxom.conf
を読みたい所だけど、blosxom.conf
はPerlスクリプトのため、Node.jsからパースするのは面倒そうなのでやめた。
root
: blosxom.cgi
が置かれているディレクトリdatadir
: $blosxom::datadir
と同じディレクトリstatic_dir
: 生成したファイルを保存するディレクトリ実行は、生成するファイルを固定で指定したターゲット(上記設定だとfeed
ターゲット)の場合はそのまま、それ以外では--file
オプションで、以下のいずれかの形のパスを渡す。
$blosxom::datadir
からの相対パスpath/to/entry.flavour
日付指定などを組み合わせることも可能(のはず)。相対パスのみ許可するとGruntプラグイン側では何もすることなくて簡単なんだけど、ターミナルではともかく、エディタ等の他のプログラムから呼ぶ場合は絶対パスの方が手軽なので、プラグイン側に相対パスに変換する機能をもたせた。
$ grunt blosxom:article --file=blosxom/grunt-blosxom.txt
上記設定だと、このようなコマンドでblog/blosxom/grunt-blosxom.html
が作成される。わかりやすい!
実際に使ってるものはもうちょっと汎用性を犠牲にした特化型のもの(index.rss
をfeed
にリネームして保存する機能とかがある)だけど、まぁ大体はこんな感じ。Blosxomを叩くこういった補助ツールは結構昔から作っていた。古くは秀丸マクロでリレイアウトからFTPでアップロードなどとしてたものから、Perlでフロントエンドを作るようになった。一時Vimスクリプトで書き直したけど、それはすぐ投げ捨て、Node.jsで書き直した。一年ほど前にGruntプラグインにするように路線変更をし、今に至ってローカルで生成するように書き直した。という遍歴。変歴。