Help us understand the problem. What is going on with this article?

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!!");
    

    実行結果
    image.png

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

    powershell
    "Hello, World!!"
    

    実行結果
    image.png

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

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

    実行結果
    image.png

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

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

    実行結果
    image.png

その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"]);
    

    実行結果
    image.png

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

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

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

    powershell
    mkdir ./work
    dotnet script init
    code .
    

    実行結果
    image.png

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

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

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

    実行結果
    image.png
    ※インテリセンスが効き始めるまでに時間がかかる場合があります

もっと詳しく!

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

おわりに

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

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

以上、閉廷!!

Midoliy
🎥 Youtubeで生配信をしていたりします。 ぜひチャンネル登録してください! |> https://www.youtube.com/user/dgakusei
https://midoliy.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした