この記事はNode.js Advent Calendar 2013 - Adventarの8日目です。
一日で二つかぶってしまった…。
Scaffoltはテンプレートジェネレータです。Chaplin.jsやBrunchで使われていて、作者はいずれも @paulmillr 氏です。Githubでのアクティビティがくっそ高いです。
簡単に言うと、handlebarsで展開できるRailsのscaffoldみたいなもんです。
インストール
$ npm install -g scaffolt
使い方は簡単で、project_root/generators/ 以下に何がどこに展開されるかというjsonを書いて、各ファイルをhandlebarsで展開し scaffolt <generator名> <名前>
みたいに入力するだけです。
generator.json
{ "files": [ { "from": "generator.json.hbs", "to": "generators/{{name}}/generator.json" }, { "from": "generated_file.coffee.hbs", "to": "generators/{{name}}/{{name}}.coffee.hbs" } ] }
展開される generator.json.hbs
{ "files": [ { "from": "{{name}}.coffee.hbs", "to": "app/file.coffee" } ], "dependencies": [] }
chaplin.jsの雛形を自分用にカスタマイズしたリポジトリがあります。
mizchi/brunch-with-chaplin-customized https://github.com/mizchi/brunch-with-chaplin-customized
拡張
自分が出したパッチが通ったので、無限に引数取れるようになりました。
Include args with prefix by mizchi · Pull Request #27 · paulmillr/scaffolt https://github.com/paulmillr/scaffolt/pull/27
{ "files": [ { "from": "foo.coffee.hbs", "to": "generators/{{name}}/{{$2}}-{{$3}}.coffee.hbs" } ] }
$ scaffolt mygenerator foo p2 p3
PRでそもそもオメーのコードきたないしさっさとリファクタしろよって文句いったけどマージしてくれてよかった。
でもまだnpm にpublishされてないからgithubのHEADしていする必要がある…
最近の会社での仕事
プロジェクトに特化したgenerator書きまくっていて、クライアントのシングルページアプリケーションだけど、1画面つくるの一瞬で終わるようになってて、皆プロジェクトごとにgenerator書きまくるべきだと思う。
仕事とは別に、このscaffoltを酷使して作ってるゲームがあって、あとで公開する。