giter8 テンプレートの作り方
前提
このエントリは giter8 の使いかたについては知っている前提です。
やっておく
giter8をアップデートしましょう。
verbatimとかの機能が最近追加されてます。
$ cs n8han/giter8
ディレクトリ構成
src/main/g8 の中にテンプレート化したいプロジェクトをぶっこみます。
参考: tototoshi/scalatra-bootstrap.g8 · GitHub
src └── main └── g8 ├── build.sbt ├── default.properties └── src └── main ├── resources └── scala └── $package$ ├── $servlet_class_name$.scala └── InitializationListener.scala
$foo$
$ で囲まれた文字列、及びファイル名はg8コマンドでとってくるときに置換されます。
また $package$ についてはそれ以下を典型的なディレクトリ構成にしてくれます。
例えば $package$ をcom.github.tototoshi にすると com/github/tototoshi っていうディレクトリを切ってくれます。
↓こんなかんじ
package $package$ import org.scalatra.ScalatraServlet import org.scalatra.scalate.ScalateSupport class $servlet_class_name$ extends ScalatraServlet with ScalateSupport { get("/") { contentType = "text/html" layoutTemplate("index.ssp", "message" -> "Hello, World!") } }
default.properties
置換する文字のデフォルトは default.properties に設定します。
例えば default.properties に
package=com.example servlet_class_name=ExampleServlet
と書けば、
g8 コマンド実行時、
package [com.example]: servlet_class_name [ExampleServlet]:
と聞いてくるようになります。
そのまま Enter すると package は com.example, servlet_class_name は ExampleServlet になります。
$のエスケープ
giter8 の使っているテンプレートエンジンは $ を特殊文字とみなすので、
ソースコード中に $ が含まれていると期待通りの動作をしてくれません。
$ を使いたいときはバックスラッシュでエスケープしましょう。
verbatim
とはいえ、たとえば jQuery つかった JavaScript の $ とかをいちいちエスケープするのはちょっとあれなので、
verbatim という機能を使います。
default.propertiesに
verbatim=*.js *.css
のように指定すれば *.js, *.css は文字列置換の対象になりません。
これは最近入ったみたいですね。g8.ignore · Issue #21 · n8han/giter8 · GitHub で議論されて追加されてます。
eed3si9n(読めない)さんありがとう!
testする
テストの方法は2通りあります。
- とりあえずgithubにpushればいいじゃない
- giter8-pluginを使う
一つ目は置いといて、2つ目の giter8-plugin は手元で動作確認するための sbt-plugin です。
詳しくは n8han/giter8 · GitHub の Readme: Using the giter8-plugin のとこ読んでください。
インストールすると sbt に g8-test コマンドが追加されます。
branchを使う
giter8 は git を使っているので、branch を使うと派生テンプレートみたいなのを作るのが楽です。
例えば
sbt-0.11.g8 っていうテンプレートを作ったら、 web project 用のテンプレートをそのブランチにしたりとか便利じゃないかなあ
以上。