cake-build -.NET Core クロスプラットフォームビルド自動化システム

cake-build -.NET Core クロスプラットフォームビルド自動化システム

Cake (C# Make) は、C# DSLを備えたビルド自動化システムで、コードのコンパイル、ファイル/フォルダのコピー、ユニットテストの実行、ファイルの圧縮、NuGetパッケージのビルドなどの操作を実行します。

最終更新 2022/07/12 20:13
黑哥聊dotNet
読了目安 3 分
カテゴリ
.NET
タグ
.NET C# NuGet

紹介

Cake (C# Make) は、C# DSL を備えたビルド自動化システムであり、コードのコンパイル、ファイル/フォルダのコピー、ユニットテストの実行、ファイルの圧縮、NuGet パッケージのビルドなどを実行するために使用されます。

URL: https://cakebuild.net/docs

ビルド

このチュートリアルでは Cake Frosting を使用します。これにより、ビルドをソリューションの一部として標準的なコンソールアプリケーションとして記述できます。Cake ビルドを実行する他の方法については、別途説明します。

以下の手順では、.NET Core 3.1.301 以降で Cake Frosting 1.0.0 以降を実行する必要があります。.NET SDK は https://dotnet.microsoft.com/download にあります。

新しい Cake Frosting プロジェクトを作成するには、Frosting テンプレートをインストールする必要があります:

dotnet new --install Cake.Frosting.Template

新しい Frosting プロジェクトを作成します:

dotnet new cakefrosting

これにより、Cake Frosting プロジェクトとブートストラップスクリプトが作成されます。

初期ビルドプロジェクト

クラス Program には、Cake を設定して実行するコードが含まれます:

public static class Program
{
    public static int Main(string[] args)
    {
        return new CakeHost()
            .UseContext<BuildContext>()
            .Run(args);
    }
}

クラス BuildContext は、追加のカスタムプロパティを追加するために使用できます。デフォルトのテンプレートには、引数 --delay で設定できるサンプルプロパティ Delay が含まれています。このプロパティは削除し、特定の要件に応じてカスタマイズできます。

public class BuildContext : FrostingContext
{
    public bool Delay { get; set; }

    public BuildContext(ICakeContext context)
        : base(context)
    {
        Delay = context.Arguments.HasArgument("delay");
    }
}

このファイルには、次の 3 つのタスククラスも含まれます:

[TaskName("Hello")]
public sealed class HelloTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
    {
        context.Log.Information("Hello");
    }
}

[TaskName("World")]
[IsDependentOn(typeof(HelloTask))]
public sealed class WorldTask : AsyncFrostingTask<BuildContext>
{
    // タスクは非同期にできます
    public override async Task RunAsync(BuildContext context)
    {
        if (context.Delay)
        {
            context.Log.Information("Waiting...");
            await Task.Delay(1500);
        }

        context.Log.Information("World");
    }
}

[TaskName("Default")]
[IsDependentOn(typeof(WorldTask))]
public class DefaultTask : FrostingTask
{
}

Default タスクは World に依存しています。World タスクは非同期タスクで、Delay プロパティが設定されている場合は 1.5 秒待機します。

サンプルビルドパイプライン

次の例は、単純なビルドパイプラインを作成します。タスク、MsBuild ソリューションをコンパイルするタスク、ソリューションをテストするタスクが含まれます。

この例では、リポジトリのルートフォルダに src/Example.sln として Visual Studio ソリューションが配置されている必要があります。

必要な using ステートメントを追加します:

using Cake.Common;
using Cake.Common.IO;
using Cake.Common.Tools.DotNet;
using Cake.Common.Tools.DotNet.Build;
using Cake.Common.Tools.DotNet.Test;

クラス BuildContext から Delay プロパティを削除し、ビルドするソリューションの構成を格納するプロパティ MsBuildConfiguration を追加します:

public class BuildContext : FrostingContext
{
    public string MsBuildConfiguration { get; set; }

    public BuildContext(ICakeContext context)
        : base(context)
    {
        MsBuildConfiguration = context.Argument("configuration", "Release");
    }
}

クラス HelloTaskWorldTask は削除できます。

ディレクトリをクリーンアップするタスク用の新しいクラス CleanTask を作成します:

[TaskName("Clean")]
public sealed class CleanTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
    {
        context.CleanDirectory($"../src/Example/bin/{context.MsBuildConfiguration}");
    }
}

ソリューションをビルドするための新しいクラス BuildTask を作成します:

[TaskName("Build")]
[IsDependentOn(typeof(CleanTask))]
public sealed class BuildTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
{
        context.DotNetBuild("../src/Example.sln", new DotNetBuildSettings
        {
            Configuration = context.MsBuildConfiguration,
        });
    }
}

ソリューションをテストするための新しいクラス TestTask を作成します:

[TaskName("Test")]
[IsDependentOn(typeof(BuildTask))]
public sealed class TestTask : FrostingTask<BuildContext>
{
    public override void Run(BuildContext context)
{
        context.DotNetTest("../src/Example.sln", new DotNetTestSettings
        {
            Configuration = context.MsBuildConfiguration,
            NoBuild = true,
        });
    }
}

DefaultTask クラスを更新して新しいタスクを呼び出します:

[IsDependentOn(typeof(TestTask))]
public sealed class Default : FrostingTask
{
}

ビルドスクリプトの実行

ビルドスクリプトを実行します:

./build.ps1

詳細なドキュメントは cake-build 公式サイト (https://cakebuild.net) をご覧ください。

最後に、私の記事を気に入っていただけましたら、フォローをよろしくお願いします。.NET エコシステムがますます良くなることを願っています!

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2025/05/24

こんにちは .NET run file、さようなら csproj

この記事では、.NET CLIのファイルベースプログラムの新機能を紹介します。これにより、開発者はプロジェクトファイルを作成せずにC#ソースファイルを直接実行できます。この機能は、メモリ内に仮想プロジェクトファイルを生成し、NuGet依存パッケージやプロジェクトプロパティの設定をサポートし、スクリプトやシンプルなアプリケーションの開発を便利にします。また、本記事では、ターゲットパス拡張、統一コマンドライン引数、パフォーマンス向上、およびより多くのファイルベースプログラムコマンドのサポートなど、この機能の今後の発展方向についても展望しています。

続きを読む
同じカテゴリ / 同じタグ 2026/04/22

各OSバージョンの.NETサポート状況(250707更新)

仮想マシンとテストマシンを使用して、各OSバージョンの.NETサポート状況を確認します。OSインストール後、対応するランタイムをインストールし、Stardustエージェントを実行できることを確認します(合格条件)。

続きを読む