2007年 12月 30日

埋め込み Rakefile

rake が、あるファイルの、うめこまれた Rakefile を解釈する、みたいな機能をもってると便利だよなぁ

rake -f foo.user.js publish

とかできるようになるとうれしい。


と、まで書いたところで、Rakefile ってただの ruby スクリプトだから工夫したらできるよなと思ってやってみた。

ようは user.js でもあり ruby でもあるコードをかけばいい

// ; <<EOF # Embed Rakefile
// ==UserScript==
// @name        Vox Editing with WYSIWYG or HTML alternately
// @namespace   http://lowreal.net/
// @include     http://www.vox.com/compose*
// ==/UserScript==

ここに JS コード

/*
EOF
# ↑ ここまでヒアドキュメント

# ここに Ruby コード。
# ただし */ は書けないので正規表現リテラルかくときは注意しないといけない

desc "upload to userscripts.org"
task :release do
    foo...bar....
end

# ↓ JS のコメントアウトをとじる
# */

Ruby では // はコメントではなく正規表現リテラル。ヒアドキュメントで JS コードをスキップさせてる。

もちろん、このままだと DRY じゃなくてダサいので、rubygems とかに userscripts.org を操作するライブラリをあげて (rubyforge みたいな)、それを使うようにたらよさそう。(require "userjs/raketasks" みたいな)

でもこれ壮絶にキモいからやめたほうがいい…… (正気にもどった)

Rakefile にする必要も別にない。なにがやりたかったんだろう……