どうしてもC#をVSCodeで書きたい

# C#もVSCodeで書きたい

Unityでゲームを作りたいとなったときにC#を書く環境が大体Visual Studioになっているが、自分は以下の理由でVSCodeで開発したかった。

- 言語ごとにエディタを使い分けるのは面倒（これが大きい）
- 設定を共有できる（Visual Studioでもできるのかもしれない）
- 自分がMacなのでWin版に比べて不便そう

意外とそれっぽい記事が見つからなかったので備忘としてまとめる。

## 大まかな開発環境構築

自分はMagicOnionを使用するためバージョンは少し古いものの自分は以下を参考にした。（実際はMagicOnion4+.NET5）
あとは[MagicOnionのREADME](https://github.com/Cysharp/MagicOnion)を読めば大体何とかなる。

https://qiita.com/_y_minami/items/db7b19eb5979ef1d6fe9

本記事では特定のフレームワークによらず広くC#の開発全般で使えそうな内容のみを記載するため、環境構築手順は割愛。

# VSCodeでC#を書くための設定

## VSCode

ディレクトリ構成はMagicOnionの流儀に則り、大体以下のような感じ。

```
Project-Root
...
|_ .vscode
  |_ extensions.json
|_ Client(Unityのプロジェクトルート)
|_ Server(普通の.NETプロジェクト)
|_ Shared
|_ .gitignore
|_ project.code-workspace
...
```

### Extensions

以下.vscode/extensions.jsonの中でUnityやC#に関係するものたち。
それぞれ簡単に紹介。

```extensions.json
{
    "recommendations": [
        "ms-dotnettools.csharp",
        "patcx.vscode-nuget-gallery",
        "kleber-swf.unity-code-snippets",
        "tobiah.unity-tools",
        "unity.unity-debug",
        "k--kato.docomment",
        "fudge.auto-using"
    ],
    "unwantedRecommendations": [
        "eservice-online.vs-sharper"
    ]
}
```

- [ms-dotnettools.csharp](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp)
  - MS公式のC#拡張。とりあえず入れておくやつ。
- [atcx.vscode-nuget-gallery](https://marketplace.visualstudio.com/items?itemName=patcx.vscode-nuget-gallery)
  - Visual StudioにあるNuGet(C#のパッケージマネージャ的存在)のGUIを再現して使えるようにしてくれる。無くてもいいけど、素晴らしいので入れている。

- [kleber-swf.unity-code-snippets](https://marketplace.visualstudio.com/items?itemName=kleber-swf.unity-code-snippets), [tobiah.unity-tools](https://marketplace.visualstudio.com/items?itemName=Tobiah.unity-tools), [unity.unity-debug](https://marketplace.visualstudio.com/items?itemName=Unity.unity-debug)
  - 上記は全てUnityのスクリプトを書くときにあると便利なもの。

- [k--kato.docomment](https://marketplace.visualstudio.com/items?itemName=k--kato.docomment)
  - `///`と打つとC#のコメントスニペットを生成してくれる。

- [fudge.auto-using](https://marketplace.visualstudio.com/items?itemName=Fudge.auto-using)
  - importが必要な場合、自動でusing文をインサートしてくれる。

- [eservice-online.vs-sharper](https://marketplace.visualstudio.com/items?itemName=eservice-online.vs-sharper)
  - **非推奨**。C#を扱う記事でたびたび紹介されているが、最終更新日が2019年（2021/9/22現在）だったのと、usingのorganize方式がMS公式のC#拡張と若干異なっていたので使わないようにした。

### settings

`project.code-workspace`に書いているが、もちろん直接設定を変えても問題ない。

```settings.json
{
...
	"settings": {
		"files.exclude": {
			"**/*.sln": true,
			"**/.vs": true,
			"**/*.unity": true,
			"**/*.prefab": true,
			"**/bin": true,
			"**/obj": true,
			"**/Assets/**/*.meta": true,
			"**/Assets/Plugins": true,
			"**/Assets/Scripts/Generated": true,
			"**/Assets/Scripts/MagicOnion*": true,
			"**/Assets/Scripts/MessagePack": true,
			"**/Library": true,
			"**/Logs": true,
			"**/Packages": true,
			"**/ProjectSettings": true,
			"**/Temp": true,
		},
		"extensions.ignoreRecommendations": false,
		"editor.formatOnSave": true,
		"editor.semanticHighlighting.enabled": true,
		"csharp.format.enable": true,
		"omnisharp.enableRoslynAnalyzers": true,
		"omnisharp.useEditorFormattingSettings": true,
		"omnisharp.enableImportCompletion": true,
		"omnisharp.organizeImportsOnFormat": true,
		"csharp.semanticHighlighting.enabled": true,
		"[csharp]": {
			"editor.defaultFormatter": "ms-dotnettools.csharp"
		}
	},
...
}
```

- `files.exclude`
  - Unity系のメタファイルや`.sln`ファイルなど直接編集することのないものをファイル検索やプロジェクトマネージャ等で表示されないようにする設定。

- `"extensions.ignoreRecommendations": false`
  - これがあると先の`extensions.json`で指定した推奨・非推奨の拡張を表示してくれる（ユーザ設定で表示しないようにしている人もいるので念のため）

- その他各種設定
  - 保存時にフォーマットしたりIDEっぽく文法をチェックして色々光らせたり注意したりしてくれるようになる。`csharp`や`omnisharp`で始まる項目は全部[MS公式C#拡張](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp)の設定項目。

## Unity（使用する場合）

何も設定しないとUnityからスクリプトを開いたときにVisual Studioが立ち上がってしまう（と思う）。

Preferences -> External Tools -> External Script Editorを`Visual Studio Code`に変更する。（画像はv2019.4.15f1）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227149/8ba41ec7-d6da-53bd-cdb3-2366641d4a4b.png)

もしくは、同じ項目を`Open by file extension`にしておいてOS側の設定で`.cs`をVSCodeに紐づければUnity側で指定しなくとも拡張子に応じて自分の好みのエディタが開かれる。


# おしまい

C#は趣味として使うのが初めてだが、VSCodeでもちゃんと設定すればそんなに不便なく作業できそう。
~~大人しくVisual Studioを使えばいいのに~~