ColabでC#プログラムを実行させる

次の作業のための小ネタ。

久々にColabにアクセスすると、AIを使ってコード生成が出来るようになっていました。AIの試運転も兼ねて作業を試しました。

Colab上で.NETをインストールする

ここが最大のポイント。ColabはPythonしか使えないと思っていましたが、OSのコマンドを実行させて.NET環境をインストールできます。できるんだ…
執筆時点(2024-01-13)でも動きました。以下の点に注意。
・要ルート権限。Colabの場合はすでにルート。一般ユーザから実行する場合はsudoをつける
・.NET SDKのバージョンを、実行したいC#ソースのものに合わせる。執筆時点では7.0まで利用可能

!apt update
!apt install dotnet-sdk-7.0

通常のようにC#ソースを書きながら実行したい場合は、.NET interactiveもインストールします。今回はファイルがコンパイルできれば良いので省略。

参考までに、AIが生成したコードです。ほぼ完成形。あと乱数があるのか、結果がちょくちょく変わりました。

# prompt: install dotnet-sdk

!apt-get update
!apt-get install dotnet-sdk-6.0
# prompt: install dotnet-sdk

!sudo apt update
!sudo apt install dotnet-sdk-6.0

C#ソースコードをファイルに保存する

ここからはC#ソースを実行するためのテストです。
まずテスト用のファイルを作ります。

上の記事はC言語での内容ですが、C#でも同様にできました。

# prompt: create C# source code "hello world"

%%file hello.cs
using System;

namespace HelloWorld {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("Hello world!");
        }
    }
}

雑な英語のプロンプトでもコード生成してくれました。助かる。
なおファイルはColab上に保存されるので、Colabの終了とともにファイルは消去されます。必要ならダウンロードしてください。

C#ソースコードをコンパイル・実行

ファイル1個の場合はrunだけでよかったです。

!dotnet run hello.cs
コマンドの実行結果。hello.csは上記のもの

ちなみに、AIでコード生成すると dotnet build を出してきました。プロジェクトファイルを作っていないので、このままでは正しく動きません。

## AI生成のコード。そのまま実行しても正しく動かない

# prompt: compile and run hello.cs

!dotnet build hello.cs
!dotnet run hello.cs

GitHubからC#ソースをcloneして実行

これがやりたかったことです。C#ソースコードが実行できることを確かめたので、ピュアC#であれば既存のソースもColab上で実行できそうです。
ソースをprivateリポジトリに置いている場合、認証を通す作業が必要です。認証はGitHubのPersonal access tokenを使いました。SSHよりも手軽です。

## リポジトリをクローン

# コード実行前に、GitHubの Personal access tokenを取得。一度しか表示されないので要コピー。
# 有効期限をつけること。期限が切れていたら再作成

# トークンを指定してclone
%env TOKEN=****************************************
!git clone https://$$TOKEN@github.com/yourAccount/yourRepo.git

トークン、アカウントyourAccount、リポジトリyourRepoは必要なものに書き換えてください。

あとはクローンしたディレクトリに移動し、プロジェクトを実行します。

## プロジェクトをビルド・実行

%cd /content/yourRepo
!dotnet run yourProject
プロジェクトの実行結果。ソースの中身は上記のhello.csと同じ

これで、UnityのソースのうちピュアC#の部分、具体的にはゲームルールの部分はColabでも実行できそうです。

記事を書いていて知ったのですが、Colabが対応している .NET Core 7.0 は今年2024年5月14日にサポート終了、LTSの.NET Core 6.0 も2024年11月12日にサポート終了とのことです。どちらも終了間近…。


この記事が気に入ったらサポートをしてみませんか?