ローカル環境でのテンプレートのテスト 

g8 コマンドに対して file:// URL を使ってテンプレートを渡すことが可能なので、 テンプレートをローカルのファイルシステム上に置くことができる。 これと、既存のファイルがあってもプロンプトせずに上書きする --force オプションを併用することでテンプレートを変更しながらテストすることができる。

例えば、Unfiltered テンプレートをローカルに clone してあるとして、以下のようなコマンドを実行できる:

$ g8 file://unfiltered.g8/ --name=uftest --force

ターミナルの別窓で、このようにテンプレートをテストする。

$ cd uftest/
$ sbt
> ~ compile

テンプレートを変更するには .g8 ディレクトリ以下にファイルを保存して、最初のターミナルで先程のコマンドを再実行すればいい:

$ g8 file://unfiltered.g8/ --name=uftest --force

uftest にある sbt セッションは ~ compile コマンドで待機しているので、変更を検知して自動的に再コンパイルされる。

Giter8Plugin を使う 

Giter8 は、テンプレートのテストをするための sbt プラグインを用意していて、これを使えば GitHub ブランチにテンプレートをプッシュする前にちゃんとテストをすることが可能となる。 上で推奨される手順にしたがって foundweekends/giter8.g8 テンプレートを使っていれば既に設定済みのはずだ。

既にあるテンプレートを現行プラグインにアップグレードさせるためには以下を project/giter8.sbt に書き込む:

addSbtPlugin("org.foundweekends.giter8" % "sbt-giter8" % "0.16.2")

このプラグインが設定されたテンプレートのベースディレクトリから sbt のシェルに入ると、 g8Test というアクションでデフォルトのアウトプットディレクトリ (target/sbt-test) 内にテンプレートが適用されて、そのプロジェクトに対してscriptted test がフォークプロセスで実行される。 テストスクリプトは project/giter8.test もしくは src/test/g8/test として提供できる。 もし無ければ >test が使用される。 特に sbt プロジェクトを生成するテンプレートはこの方法でテストできるはずだ。

sbt プロジェクト以外のテンプレートはどう対応するべきだろうか?

project/default.properties
TodaysMenu.html

それでも sbt のシェルを使ってテンプレートをテストすることは可能だ。 g8 というアクションを使えばデフォルトのフィールド値をテンプレートに適用して target/g8 ディレクトリ内にファイルを生成する。

GitHub にテンプレートをプッシュすれば即座に実際の g8 ランタイムを使ってテストをすることが可能だ。 (プロジェクト名に .g8 拡張子を付けるのを忘れないように) 完成したらテンプレートプロジェクトを wiki に追加して他の Giter8 ユーザが見つけれるようにしよう。