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
コマンドで待機しているので、変更を検知して自動的に再コンパイルされる。
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 ユーザが見つけれるようにしよう。