0.前置き
初めてAdvent Calenderに挑戦しています。
私の担当は、「PowerShell Advent Calendar 2011」の14日目です。
Webアプリケーション開発の効率化のためによくPowerShellを利用しますが、ブログで取り扱うのは初めてです。
今回のテーマは「psake」(日本の酒と同じ読み方)です。
psakeはPowerShellを使ったビルドツールです。
.NETの開発では、ビルドツールにMsBuildやNAntを利用することがありますが、psakeも同じ用途です。
では、さっそく。
1. psakeとは
psakeとは、PowerShellで書かれたビルドツールです。
アングルブラケット地獄に陥ることなく、PowerShellの機能をふんだんに使えるビルドスクリプトが書けます。
ソースコードと実行モジュールはGitHub上にホストされています。こちら。
NuGet経由で手に入れることも可能です。こちら。
2. 実際にビルドスクリプトを書いてみる
psakeで作るスクリプトは、タスクと、その依存関係を示すコードからなります。
例えばビルドをするスクリプト(タスクのことです)は以下のよう。
[sourcecode language=”powershell”]
task Build{
Write-Host -ForegroundColor Green "Building"
exec { msbuild Sample.csproj } "Error Building" | out-null
}
[/sourcecode]
コンポーネントテストをするスクリプトは以下のよう。
[sourcecode language=”powershell”]
task Test{
Write-Host -ForegroundColor Green "Testing"
exec { mstest /testcontainer:Sample.dll } "Error Testing" | out-null
}
[/sourcecode]
そして、これらの実行順序を考慮して、依存関係を示すスクリプトがこんな感じ。
[sourcecode language=”powershell”]
task Full -depends Build, Test
[/sourcecode]
タスクに相当するものとして、一時領域のクリーンアップや、ビルド、コンポーネントテスト、メトリクス取得、テストカバレッジ取得、配置パッケージ作成、などなどが考えられるでしょうか。
3. ビルドしてみる
では、実際にビルドしてみます。
上述したコードをbuild.ps1に格納していると仮定します。
[sourcecode language=”powershell”]
.\psake.ps1 -buildFile "build.ps1" -taskList "Full" -framework "4.0"
[/sourcecode]
psakeの本体は、psake.psm1ですが、いちいちモジュールを読み込むのは面倒だということで
あらかじめヘルパーとして、psake.ps1が用意されています。
普段利用するときは、psake.ps1経由が良いと思います。
引数として渡しているものは、
-buildFile | タスクが記述されているPSファイル |
---|---|
-taskList | 実行するタスク |
-buildFile | ビルドに利用する.NET Frameworkのバージョン(何も指定しないと3.5でビルドされる) |
です。
GitHubに、ASP.NET Webフォームのサンプルアプリをビルドスクリプトをセットにした、お試しpsakeセットを置きました。
こちらをご参照ください。
4. おわりに
気になるpsakeの採用実績(?)ですが、ちょっと調べました。
プロジェクト名 | 概要 | URL |
---|---|---|
AutoMapper | 規約ベースのマッピングツール | https://github.com/AutoMapper/AutoMapper |
Soma | ORマッパー | http://soma.codeplex.com/ |
Json.NET | .NETのJSONフレームワーク | http://json.codeplex.com/ |
Glimpse | クライアントからサーバーサイドをデバックできるツール | https://github.com/Glimpse/Glimpse |
今は自分が担当するプロジェクトにて、psakeで書いたビルドスクリプトをJenkinsに実行させています。
他のビルドツールと比較し、PowerShellで書けるpsakeのほうが管理しやすいです。
PowerShellの恩恵を受けられるのはやはり大きいです。
(PowerShell自体の機能が多いですし、Windowsに標準で入ってきますし。)
今日はこんなところです。
明日は、@RyosukeUemotoさんにバトンタッチです。
コメント
[…] .NETの開発で利用するビルドツールです。 CI環境で利用する場合は、もっぱらコマンドラインで利用します。 私は主にpsakeを利用したビルドスクリプトを利用しています。 (psakeについては「初めてのpsake ~PowerShelを使ったビルドツール~」を参照してください。) […]