昨年、以下の記事を書きました。
あれから一年。実は C#/.NET はあれからもう一歩先へ進みました。
上記記事では、「GitHub Actions ワークフロー内で C# で書いた処理を実行できるから、シェルスクリプトでは書きにくい凝った処理があったら、C# で実装する、という選択肢もあるよ」という話をしました。しかしそうはいっても、その実現のためには、以下のようなファイルとフォルダ構成が必要でした。
- その C# でやりたい処理を C# で実装するためのサブディレクトリ
- そのサブディレクトリ内に収める C# ソースファイル (.cs)
- 同じく C# プロジェクトファイル (.csproj)
上記のとおり、シェルスクリプトやシェルコマンドをインラインで書くのに比べると、やっぱりちょっと野暮ったいというか、ファイルがごちゃつく感じがしました。
しかし 2025 年 11 月の .NET 10 のリリースに伴い、この状況は変わりました。.NET 10 からは、C# ソースファイル (.cs) x 1つだけあれば、その C# プログラムを実行できるようになりました!
例えば以下のような C# ソースファイルを Git リポジトリに同梱しておくと、
// index.html をテキストとして読み取り...
var indexHtml = File.ReadAllText("./public/index.html");
// <base href="/"> を <base href="/my-repo/" /> に置換して..
indexHtml = indexHtml.Replace("<base href=\"/\" />", "<base href=\"/my-repo/\" />");
// index.html に書き戻し
File.WriteAllText("./public/index.html", indexHtml);
上記コードは、以下のように dotnet CLI の引数に .cs ファイルのパスを渡すだけで実行されるのです!
...
- name: Setup .NET SDK
uses: actions/setup-dotnet@v5
with:
dotnet-version: 10.0.x
- name: Perform pre process
run: dotnet ./.github/workflows/command1.cs
...
上記のような HTML ファイルの書き換えは、sed とか awk とかで簡単にできはするのですが、これはあくまでも例でありまして、例えば XML ファイルの生成だとか JSON ファイルの書き換えなど凝った処理が必要な場合に C# のソースファイル 1 本で実現できるのは利点だと思います。
なお、このような .cs ファイル x 1本のコードを実装する際、VSCode であればちゃんと言語サーバーが仕事して、各種コード補完が完璧に動作します。
以上、「GitHub Actions でちょっと凝ったことしたいとき、C# で書いてもいいよ」が、2025年11月以降、より敷居が下がったよ、という最新情報でした。