Start Debugging

ModularPipelines V3: CI パイプラインを C# で書き、ローカルでデバッグし、YAML のお守りをやめる

ModularPipelines V3 を使えば、CI パイプラインを YAML ではなく C# で書けます。dotnet run でローカル実行、コンパイル時の安全性、ブレークポイントでのデバッグが手に入ります。

今週、CI が盲目的な push-and-pray ループである必要はないという別の知らせを目にしました。ModularPipelines V3 は活発にリリースされており (最新タグ v3.0.86 は 2026-01-18 公開)、シンプルな考え方を強く打ち出しています: あなたのパイプラインはただの .NET アプリです。

ソース: ModularPipelines repov3.0.86 リリース

フィードバックループを変える部分

.NET 10 のサービスを出荷しているなら、パイプラインのステップはすでに「コードらしい形」をしています: ビルド、テスト、公開、パッケージ、スキャン、デプロイ。問題はたいてい外側のラッパーです: YAML、文字列型の変数、そしてタイポを発見するための 5-10 分のフィードバックサイクル。

ModularPipelines はこれをひっくり返します:

プロジェクトの README からそのまま、貼り付けられる最小例として整えた中核の形は次のとおりです:

// Program.cs
await PipelineHostBuilder.Create()
    .AddModule<BuildModule>()
    .AddModule<TestModule>()
    .AddModule<PublishModule>()
    .ExecutePipelineAsync();

public class BuildModule : Module<CommandResult>
{
    protected override Task<CommandResult?> ExecuteAsync(IPipelineContext context, CancellationToken ct) =>
        context.DotNet().Build(new DotNetBuildOptions
        {
            Project = "MySolution.sln",
            Configuration = Configuration.Release
        }, ct);
}

[DependsOn<BuildModule>]
public class TestModule : Module<CommandResult>
{
    protected override Task<CommandResult?> ExecuteAsync(IPipelineContext context, CancellationToken ct) =>
        context.DotNet().Test(new DotNetTestOptions
        {
            Project = "MySolution.sln",
            Configuration = Configuration.Release
        }, ct);
}

これは最高の意味で退屈です: 普通の C# です。ブレークポイントが効きます。IDE が助けてくれます。「モジュールをリネーム」は怖いグローバル検索ではなくなります。

エコシステムと一緒に動くツールラッパー

v3.0.86 リリースは意図的に「小さい」ものです: pnpmgrypevault のようなツールの CLI オプションを更新します。これは、パイプラインフレームワークに肩代わりしてほしい類のメンテナンスです。CLI がフラグを追加または変更したら、動くべきは型付きラッパーであって、何十もの YAML スニペットが腐っていくことではありません。

実プロジェクトでモジュールモデルが好きな理由

大規模なコードベースでは、YAML の隠れたコストは構文ではありません。変更管理です:

すでに .NET 9 または .NET 10 で生きているなら、パイプラインを小さな C# アプリとして扱うのは「過剰設計」ではありません。それは短いフィードバックループと、本番でのサプライズの少なさです。

もっと深く掘りたい場合は、プロジェクトの「Quick Start」とドキュメントから始めてください: Full Documentation

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る