2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[2025年版] GitHub Actions でちょっと凝ったことしたいとき、シェルスクリプトじゃなくてもいいよ

Posted at

昨年、以下の記事を書きました。

あれから一年。実は 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 リポジトリに同梱しておくと、

./.github/workflows/command1.cs
// 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 ファイルのパスを渡すだけで実行されるのです!

.github/workflows/workflow.yml
...
      - 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月以降、より敷居が下がったよ、という最新情報でした。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?