.htaccess を Ruby の DSL で記述してみる
2011-03-29 21:39:22
最近 .htaccess をいじることが多いんですが, 融通効かないなと思うことが多々あります.
.htaccess を Ruby で書くことができれば... ということでとりあえずプロトタイプ程度ですが作ってみました.
DSL の記述例
これが以下のように出力されます.
<IfModule mod_rewrite.c> RewriteEngine on <Limit GET> RewriteRule ^/user/(.*)$ /user.cgi?id=$1 [L,R] </Limit> </IfModule> Order Deny,Allow Deny from All Allow from 192.168.0.11 Allow from 192.168.0.12 Allow from 192.168.0.13 Allow from 192.168.0.14 Allow from 192.168.0.15
この .htaccess 自体はあまり気にしないでください.
DSL の構文を紹介するために適当に書いてます.
この DSL を実行するのに必要なプログラム, 使い方は以下の Gist をご覧ください.
DSL to write .htaccess files.
特徴
- Ruby で書ける
Ruby なので, Range オブジェクトや, その each メソッドを用いて, ループが書けます. - あらゆるディレクティブをメソッドとして記述できる
RewriteEngine や Order といったディレクティブは, 引数をひとつ受けるメソッドとして実行されます.
内部的には, method_missing で処理されています. - Ruby のコードブロックが使える
上記の例でいう IfModule メソッドのようにブロック引数を渡すと, <IfModule> ~ </IfModule> というように出力されます.
また, ブロックのネストにも対応しています.
あくまでもプロトタイプなので, 全然実用レベルでは無いですが, 洗練させればなかなかおもしろいものになるんでしょうか.
DSL を作るためのノウハウが足りないので, いいアイディアをお持ちの方は, 是非 @yuya_takeyama まで教えてください.
とりあえずは dsl { ~~~ } を省略できるようにしたい...