プロジェクトごとにRailsのScaffoldみたいなコードジェネレータがほしいけど、作るのが手間。
なのでできるだけ手間がかからないコードジェネレータジェネレータ書いてみた。
まだnpmに登録してないので npm install -g mizchi/summon
で入れる。
# 初期化
$ summon init
> init .generators
# foo ジェネレータを生成
$ summon generator foo
> generate generator
generate /Users/mizchi/proj/summon/.generators/foo/generator.coffee
generate /Users/mizchi/proj/summon/.generators/foo/foo.json.hbs
# foo ジェネレーターを使う
$ summon foo
> generate foo
generate /Users/mizchi/proj/summon/app/foo.json
.generators
を生成したら最初からgeneratorというジェネレータが入っていて、それを使って他のコマンドを生成する。(使わなくてもいい)
基本的には foo/generator.coffee を呼ぶだけ。API見て察してください。
module.exports = (g, {$1}) ->
g.gen 'default-generator.coffee.hbs', ".generators/#{$1}/generator.coffee"
g.gen 'dummy.json.hbs', ".generators/#{$1}/#{$1}.json.hbs"
g.genで使うファイル名と出力先のパスを指定する。ただのスクリプトなのはイテレーションしたり色々したり出来るようにする余地を残すため。
summon foo arg1 arg2 --x 3 --y 4
ってコマンド打ったら引数オブジェクトには {$0: 'foo', $1: 'arg1', $2: 'arg2', x: '3', y: '4'}
が入ってるので、それを使ってコードを展開する。
Handlebars以外とか、ヘルパを仕込む仕組みとかまだ考えてない。