初めてのpsake ~PowerShelを使ったビルドツール~

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で作るスクリプトは、タスクと、その依存関係を示すコードからなります。
例えばビルドをするスクリプト(タスクのことです)は以下のよう。

task Build{
    Write-Host -ForegroundColor Green "Building"
    exec { msbuild  Sample.csproj } "Error Building" | out-null
}

コンポーネントテストをするスクリプトは以下のよう。

task Test{
    Write-Host -ForegroundColor Green "Testing"
    exec { mstest /testcontainer:Sample.dll } "Error Testing" | out-null
}

そして、これらの実行順序を考慮して、依存関係を示すスクリプトがこんな感じ。

task Full -depends Build, Test

タスクに相当するものとして、一時領域のクリーンアップや、ビルド、コンポーネントテスト、メトリクス取得、テストカバレッジ取得、配置パッケージ作成、などなどが考えられるでしょうか。

3. ビルドしてみる

では、実際にビルドしてみます。
上述したコードをbuild.ps1に格納していると仮定します。

.\psake.ps1 -buildFile "build.ps1" -taskList "Full" -framework "4.0"

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さんにバトンタッチです。

One Response to 初めてのpsake ~PowerShelを使ったビルドツール~

  1. ピンバック: MSBuildのログ情報 | 84zume Works

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。