C#15.0を試すためにDev Containersを使う【VSCode】
新しい言語バージョンを試したい時のなやみの種
といえば、プレビュー版のSDKをインストールすることです。
いや、インストール自体はいいんですけど、管理とかアンインストールとかその後が大変です。
- 検証プロジェクト以外でもプレビュー版のSDKが使われちゃう
- 古いプレビュー版SDKが残り続ける
みたいな問題があります。
C#のSDKである「.NET SDK」は、インストールしたあとは簡単で困ることはほとんど無いのですが、アンインストールとか、複数バージョンとか絡み始めると、ちょっと面倒になります。
※回避策はもちろんいっぱいあるんだけど…
ま、そもそも、「検証のためにプレビュー版をインストールする」のが良くないのかも しれません…
Dev Containers拡張をつかう
そんな需要にピッタリなのがVSCodeの Dev Containers拡張 です。

コンテナ技術をつかって、一時的な環境で開発できます。PC本体へのプレビュー版SDKインストールは要らないので、綺麗なままでいられます!
しかも準備がめちゃくちゃ簡単でした。
C#15.0 + .NET SDK 11 preview + Dev Containers
こちらの記事を参考に環境構築します。
参考記事:Docker Desktop不要!WSL2 + Docker Engine + DevContainerでC#開発環境を作る【第3弾:C# + .NET 10編】
devcontainer.json
記事にあるように.NETプロジェクトのrootに.devcontainer/devcontainer.jsonを作成します。
そしてコンテナイメージへのパスをpreview版にします。
- "image": "mcr.microsoft.com/dotnet/sdk:10.0",
+ "image": "mcr.microsoft.com/dotnet/sdk:11.0-preview",
DevContainerの起動

記事にあるようにリモートホストのアイコンをクリックすると、起動できます。アイコンがない場合は拡張インストールできてないか、隠れているだけなので右クリックから設定します。
Dockerをインストールしていない場合は自動でインストールされるので楽です。
Windows環境の場合、WSL2経由でコンテナが動くようです。
Windowsだと通常統合ターミナルはPowerShellかコマンドプロンプトだと思いますがこの状態だとbashになります。
root@4f1ef9df3022:/workspaces/csharp15# ls -la
total 32
drwxrwxrwx 1 ubuntu ubuntu 4096 Apr 18 06:46 .
drwxr-xr-x 3 root root 4096 Apr 18 12:49 ..
drwxrwxrwx 1 ubuntu ubuntu 4096 Apr 18 06:31 .devcontainer
-rwxrwxrwx 1 ubuntu ubuntu 18250 Apr 18 06:44 .editorconfig
-rwxrwxrwx 1 ubuntu ubuntu 8059 Apr 18 06:44 .gitignore
-rwxrwxrwx 1 ubuntu ubuntu 103 Apr 18 06:50 csharp15.slnx
drwxrwxrwx 1 ubuntu ubuntu 4096 Apr 18 06:48 src
C#拡張/C# DevKitをプレリリース版にする
さて、そのままの状態でC#コードを書こうとするとエラーが出ると思います。
これはSDKが.NET 11 previewなのに C#・C#DevKitの2つの拡張が正式リリース版、つまり古い状態のためです。
そこで、C#拡張/C# DevKitをプレリリース版にアップデートします。
DevContainer環境では、VSCode拡張もローカルにインストールされたものではなく、コンテナ環境上で設定されたものが動きます。
(※devcontainer.jsonで拡張も指定していたのはこれ)

C#拡張/C# DevKitそれぞれの設定を開いて「プレリリース バージョンへの切り替え」を押します。

拡張がインストール後、場合によってはコンテナのビルドが必要になるかもです。指示に従って進めます。
無視でOK?「C# Workspace Requirements」というエラーがでる

こういうエラーがいきなり表示されます。
が、出てても動くっぽいです。単純に.NET8 - 10の間か、しかみてないようです。
いつもの拡張を入れる
ここまでで普通に使えるようになります。
が、一部の拡張はこのDevContainer環境ではつかえません。
そこで追加で拡張を入れます。
拡張ビューがDevContainer環境だと2段になりますが、上のローカルにインストールされた拡張一覧で、グレーアウトされてるのが使えない拡張です。「開発コンテナー:~ にインストールする」というボタンがある場合はそれを押してDevContainer拡張にも導入します。

導入した拡張は、右クリックメニューで「devcontainers.jsonに追加」を選ぶことでjsonに記録され、環境を再構築するときに自動で拡張が入るようになります。便利~!

完成…!
これで、汚さないでC#15の環境ができました。union型もエラーになりません…!


やったね!
Discussion