psakeはPowerShell (PS)に統合されたビルド自動化ツールだ。バージョン2.01はPowerShell 2.0で動作する。Ayende Rahien氏はこのツールをRhino Toolsのビルドに使っている。
このプロジェクトのオーナーであるJames Kovacs氏は、psakeを使うとどんな改善がもたらされるか、 説明している 。
psakeではビルドスクリプトにPowerShellを利用します。なので、ビルド自動化のために、実行可能なXMLを作成して各括弧をいじくり回すような負担を背負わなくて済みます。psakeの構文は、rake(Ruby製のビルドツール)とbake (プログラミング言語Booで書かれたビルドツール)に影響を受けていますが、このふたつよりも簡単に記述できます。既存のコマンドラインの使い方をそのまま役立てることができるからです。
バージョン2.01では、PS 2.0で動作するようになり、その上、PSのモジュールとして作り直されている。この変更が生み出す主な利点は、
- ビルドスクリプトは、psakeがどこにインストールされているか知らなくていい。Invoke-psakeを呼ぶだけでビルドが実行される。
- カプセル化。明示的に公開しなければ、変数はモジュール内のプライベートな変数となる。なので、グローバル変数は必要ない。
- モジュールは必要に応じてアンロードできる。アンロードするとそのモジュールのコードと変数はメモリ上からすべて削除される。
2.01のその他の新しい特徴は、
- コーディングスタイルが今までと違っている。
- "Trap"ステートメントに代わってTry/Catchが使われている。
- "exec"関数が取り除かれた。
- タスクの"前"処理と"後"処理を定義できる。
- タスク名の書式を定義できる。
- "TaskSetup"関数を定義すれば、すべてのタスクより前に処理を実行できる(NUnitから拝借した)。
- "TaskTearDown"関数を定義すれば、すべてのタスクが終わった後に処理を実行できる。(これもNUnitから拝借)。
- "psake_buildSucceeded"という名前のグローバル変数を作成できる。ビルドが成功したらこの変数をtrueに設定すれば、ビルドの正否を検証できる。
- Run-Psakeに"$noexit"スイッチが加わった。これによって、Run-Psakeはexit()関数を使わなくて済むので、コマンドラインでビルドスクリプトをテストするときに、いちいちPSを閉じずに済む(ビルドが失敗したときはexit(1)が呼ばれるのが規定の動作なので、呼び出し元コードがビルドが成功したか失敗したかを決めることができる)。
- psake-buildTester.ps1からInvoke-psakeを呼ぶためにわずかな変更が加えられた。
- 事後条件や事前処理、事後処理等についてのサンプルが追加された。
Ayende Rahien氏はpsakeをRhino Toolsのビルドに使っていることについて書いている。はじめはNAntをもとにしたビルドツールを使っていたが複雑になりすぎて、“深い知識を持った人でも恐る恐る進まなければならないような‘魔窟’”になりつつあった。そこで、氏はRakeやBakeを使ってその可能性を評価した後、50行で必要な処理を行えるpsakeを使うようになった。
psakeはGitHubからダウンロードできる。ライセンスはMIT Licenseだ。