C#をスクリプト言語として利用する方法


はじめに

C#er 諸兄は人生の中で一度は、

C#をインタプリタ言語のように扱えたらどれだけよかったろう...

と考えたことがあるだろう。

それ、できますよってお話。

導入

前提

  • .NET Core 3.x 以上が導入されていることが望ましい

    • もちろん C#er 諸兄は問題ないよなぁ?!
  • VSCode が導入済み かつ C#プラグイン 導入済み

dotnet-script のインストール

  1. 以下のコマンドを実行する

    powershell
    dotnet tool install -g dotnet-script
    
  2. 以上、終了

使い方

その1:シェルで使う

サンプルは Powershell を利用しているが、dotnet コマンドが使えれば別になんでも良い。

  1. 以下のコマンドを実行する

    powershell
    dotnet script
    
  2. インタプリタ環境が起動するので、あとはお好みで

    powershell
    Console.WriteLine("Hello, World!!");
    

    実行結果

  3. ただ表示したいだけなら Console.WriteLine() すらいらない

    powershell
    "Hello, World!!"
    

    実行結果

  4. もちろん変数に保存した値の確認も同様に可能

    powershell
    var msg = "Hello, World!!";
    msg
    

    実行結果

  5. .NET と言えば NuGet!! もちろん対応

    powershell
    #r "nuget: Utf8Json"
    var json = @"{ ""key"":100 }";
    var data = Utf8Json.JsonSerializer.Deserialize<dynamic>(json);
    data["key"]
    

    実行結果

その2:VSCodeで使う / 単一ファイル

  1. 適当なところに .csx ファイルを作成して、VSCode で開く

    powershell
    New-Item main.csx
    code ./main.csx
    
  2. とりあえず Hello, World!! をする

    main.csx
    Console.WriteLine("Hello, World!!");
    
    // .csxだと直値を出力とかはできない. 以下はエラーとなるので注意.
    // "Hello, World!!"
    
  3. 実行してみる

    powershell
    dotnet script ./main.csx
    
  4. NuGet も利用可能

    main.csx
    #r "nuget: Utf8Json"
    var json = @"{ ""key"":100 }";
    var data = Utf8Json.JsonSerializer.Deserialize<dynamic>(json);
    Console.WriteLine(data["key"]);
    

    実行結果

その3:VSCodeで使う / インテリセンスを効かせる

その2の方法でも十分と言えば十分だけれども、インテリセンスのない C# なんて C# じゃない!!
ということで、インテリセンスを効かせた方法も紹介しておく。

  1. 適当なところにフォルダを作成して、C#スクリプトプロジェクトを作成する

    powershell
    mkdir ./work
    dotnet script init
    code .
    

    実行結果

  2. インテリセンスが効く!

  3. NuGetパッケージVSCode を開きなおせばインテリセンスが効くように!!

    main.csx
    // 以下を追記して、VSCodeで開きなおす
    #r "nuget: Utf8Json"
    

    実行結果

    ※インテリセンスが効き始めるまでに時間がかかる場合があります

もっと詳しく!

公式サイト を読み込むのだ!!

おわりに

私は dotnet-script は、これでがっつり開発!というよりか、わりと断片的なコードの動作確認のために利用しています。
スクリプト利用するなら F# の方がかなり優秀だと思います。

ただ、実用に耐えうるレベルのものなのでドンドン使っていってもいいのでは?と思います。

以上、閉廷!!