Cake - C# Make -

Cakeって何?

Cakeを一言で言うと、「C#で書ける.NETのためのビルド自動化ツール」です。
定義は以下。

Cake (C# Make) is a cross platform build automation system with a C# DSL to do things like compiling code, copy files/folders, running unit tests, compress files and build NuGet packages.DSL

NuGetパッケージをリストア → ビルド → 単体テストカバレッジ取得 → パッケージング → NuGetリポジトリにPublish…みたいな一連の処理を全てC#で記述可能です。

Fullの.NET Frameworkと.NET Coreのどちらもビルドでき(MSBuild ToolsVersion 15.0は今対応中)、Cake自体の実装も昨年.NET Coreに移行しました。

Cakeの特徴

1. オープンソース
2016年6月に.NET Foundationに参加を表明しました。→.NET Foundation - Free as in Cake
現在、GitHub上で精力的に開発・管理されています。いきなりissueやPullRequest投げるよりも、まずgitterで質問してみるのがオススメ。

2. クロスプラットフォーム
WindowsLinuxおよびOS Xのいずれにおいても動作します。AppVeyor、Jenkins、VSTSTravisおよびBamboo等のCIツールにも対応済です。

3. ビルドスクリプトC#で書ける
皆さんは一連のビルド処理どうやってます?powershellやバッチファイルの秘伝のタレ…Fakeも有名ですが、F#なので敬遠してるって方も多いんじゃないかなあ。
CakeはFakeにかなり影響を受けていて、Taskベースのビルド処理を全てC#で記述できます。
実際のスクリプトはこんな感じ。

ふだんC#で開発している人ならば、そんなに違和感なくスラスラと読めるはず。

4. 拡張可能
プラットフォーム依存の処理を書きたい場合はAddinを開発することで拡張することができます(これもC#で書ける!)。Cakeスクリプトは基本的にC#でできることなら何でも書けるので、スクリプトごとにメソッドを書いてもいいですが、複数のアプリで使いまわしたい場合やCakeにContributeしたい場合はAddinを書くのがオススメ。
現在公開されているAddinは、AzureやAWS、Xamarin、Dockerなど80種以上。一覧はCake - Addinsを参照。

まとめ

.NET Foundationに参加したあたりに試しに使ってみたら結構すんなり適用できたので、最近はもっぱらCakeで遊んでます。有名どころだとNUnitなんかでも採用されてたりするし、Communityの雰囲気もいいんでしばらくは期待できそう。.NET Coreでの使用例についても書きたいけど、Visual Studio2017がRTMになってからですね。