2022の12日目の記事です。本題まで長いので読み飛ばしていただいて結構です。限らずプログラムを書かされることは間々あります。いったときに、特に言語を指定されなければ自分の慣れている言語で書きたいものです。ところで、筆者にとってその「慣れている言語」というのがC#なわけですが、これがどうにも講義で使うのには相性が良くないのです(個人の感想です)。講義でプログラムを求められる状況では、うちの場合大抵その一回限りの使い捨ての、コンソールアプリとすら言わないような実行して出力を見るだけといったようなものを書くことになります。C++やPythonであれば、(予め環境構築が終わっていれば)適当に1つファイルを作って書き捨て、実行すればそれでいいので何も思うところはありません。consoleしてプロジェクトを作らねばなりません。プログラムが記述されたファイルと実行ファイル以外にいろいろファイルやフォルダが生成される始末で、「書き捨て」をするには余りに仰々しすぎるのです。試行錯誤もっと、それこそC++やPythonのように、プログラムが記述されたファイルと、せいぜいコンパイル後の実行ファイル程度でどうかしたい。Compiler)を直接叩いてコンパイルしようと思い立ちました。実際これでコンパイル、実行自体はできるのですが、いくつか問題がありました。インテリセンスが効かないまず、始めにやってみて気が付いたのは、単に.csのファイルを開くだけでは、VSCodeでインテリセンス等が全くと言っていいほど効かないのです!C#と言えば静的解析(ほんとに?)。それが効かないのは余りに面倒でした。cscを叩く方法でC#にインテリセンスを効かすにはどうするか。いくつか方法はあるのですが、最も単純なのは、*.csprojをワークスペースに配置することです。consoleすれば簡単に生成できます。consoleが必要なものの、1回で済むならだいぶ状況は良くなったと、初めはそう思いました。フォルダ内にエントリポイントがあるファイルを複数置けないこの方法の問題点は何か。それは、VSCodeで開いたフォルダ全体が1つのプロジェクトとして認識されるため、エントリポイントを1つしか持てないということです。言い換えれば、Mainのあるファイルがフォルダ内に複数あると、VSCode上でエラー表示が出るのです。実際にはcscでコンパイルするのでエラーは無視できるのですが、うっとうしいですし、本当にエラーになっているものを見逃すかもしれません。適当にファイルの中身の切り貼りを自動化すれば、一応大した手間なくエラーも無くコンパイルもできる状態にはできるものの、各.csファイルは単体でコンパイル/実行不可能なうえ、自動化用の諸々(当時私は専用のC#プログラムとtask.jsonで行っていました)がフォルダ内に散乱して、結局当初の目的をあまり達成できていませんでした。光明さてそうこうしいたある時、「そういえばC#をインタープリタ的に実行できるのがあった気がする」と思い出しました。それについて調べたところ、dotnet-scriptというものを見つけ、これがまさに自分の求めていたものでした。(CSX)と書いてあり、これがそのdotnet-scriptのファイルなのですが、ここに書いてあったことにこれを書いている今気が付きました。scriptsについての紹介になります。scripts(dotnet-script)とはどういうものなのかの話の前に、簡単にインストール方法を説明しておきます。dotnet-scriptをするだけです。できることdotnet-scriptでは以下のことができるようです。アプリケーションへの埋め込みInteractive実行(これが先ほど言った「インタープリタ」的実行)スクリプト実行(主目的)このうちアプリケーションへの組み込みは今回説明しません。scriptまたはdotnet-scriptと入力することで、インタプリンタ環境が起動します。文法は通常のC#とほぼ同じです。リテラルや変数を;無しで打つと値を表示してくれます。ImplicitUsing(後述)によるものですが、初めからある程度using済みなので、少し変わった電卓程度の用途には十分使えます。起動後初めの出力が異様に遅いので、適当に数字を打って出力させておくといいでしょう。一応後述のスクリプトファイルを読み込んだり、NuGet参照したもできますが、あまり複雑なことをするには(当然ながら)向いてはいません。打ち間違いに強い電卓でしょう(個人のry)。終了は#exitで行えます。スクリプト実行さて本題、求めていたスクリプト実行です。initとすれば、直下にomnisharp.jsonとmain.csxが、.vscode下にlaunch.jsonが生成されます。これができればあとは好きにC#を書いていけます。filenameでできます。(普通にファイルを作っても問題ありませんが、たまにスクリプトファイルとして認識してくれずインテリセンス等が効かなくなることがあります。その場合、VSCodeを開きなおせば問題ありません。