Scaffoltというジェネレータが便利

この記事は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を酷使して作ってるゲームがあって、あとで公開する。

09d65af1ce69817e3e96c651c155db00.png (PNG 画像, 296x403 px)