Generat Blosxom files with Grunt。

前にちょっと書いたけどBlosxomの動的生成インターフェイスをGruntから叩き、その結果を指定ディレクトリに保存するだけのGruntプラグインを書いて使ってる。汎用性はあんまり考えてないけど、Blosxom側が優秀なのでそれなりにあるような気がする。本体の書き換えが不要で、特殊なプラグインを必要とせず、動的生成向けのプラグインたちが普通に動くといった辺りが、ビルトインの静的生成システムと比べた利点。

Download: grunt-blosxom.js

設定は以下の様な形で書く。普通のGruntプラグインとは違うので、混乱しないようにsrcdestは使わず、固定か--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からパースするのは面倒そうなのでやめた。

実行は、生成するファイルを固定で指定したターゲット(上記設定だとfeedターゲット)の場合はそのまま、それ以外では--fileオプションで、以下のいずれかの形のパスを渡す。

日付指定などを組み合わせることも可能(のはず)。相対パスのみ許可するとGruntプラグイン側では何もすることなくて簡単なんだけど、ターミナルではともかく、エディタ等の他のプログラムから呼ぶ場合は絶対パスの方が手軽なので、プラグイン側に相対パスに変換する機能をもたせた。

$ grunt blosxom:article --file=blosxom/grunt-blosxom.txt

上記設定だと、このようなコマンドでblog/blosxom/grunt-blosxom.htmlが作成される。わかりやすい!


実際に使ってるものはもうちょっと汎用性を犠牲にした特化型のもの(index.rssfeedにリネームして保存する機能とかがある)だけど、まぁ大体はこんな感じ。Blosxomを叩くこういった補助ツールは結構昔から作っていた。古くは秀丸マクロでリレイアウトからFTPでアップロードなどとしてたものから、Perlでフロントエンドを作るようになった。一時Vimスクリプトで書き直したけど、それはすぐ投げ捨て、Node.jsで書き直した。一年ほど前にGruntプラグインにするように路線変更をし、今に至ってローカルで生成するように書き直した。という遍歴。変歴。