Visual Studio CodeでRustのコード補完・タスク・Debug実行

タイトルの通りVisual Studio CodeにてRustのコーディング環境の構築を目的としたものです。各アプリのバージョンによって導入が変わる可能性がありますがご了承ください。

ちなみにRustﾁｮｯﾄ ﾓ ﾃﾞｷﾅｲ ﾃﾞｽ

# インストール

RustとVSCodeをインストールします。
既に入ってる方は無視してください。

## Rust

### 本体のインストール

以下のコマンドよりインストールします(linux or mac)

```
curl https://sh.rustup.rs -sSf | sh
```
参考 : [Getting Started](https://doc.rust-lang.org/book/first-edition/getting-started.html)

## Visula Studio Codeのインストール

インストール : [Visual Studio Code](https://code.visualstudio.com/)

## 補完設定

### Rust (rls) 拡張機能のインストール

Rust公式？の[Rust (rls) 拡張機能](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust)を用いて補完を行います。

拡張機能ボタンより「Rust(rls)」 を探しインストールし、再読込を行います
![install_rust_rls.png](https://qiita-image-store.s3.amazonaws.com/0/27776/007f0568-7a3d-4c31-75d4-f4c772743d1d.png)

### nightlyのインストール

rustファイルを開くとtoolchainにnightlyが入っていない場合以下のポップが表示されるのでYESを押しインストールします。
![install_nightly.png](https://qiita-image-store.s3.amazonaws.com/0/27776/07dbf8fe-55a1-1872-2e62-b3662a54a18b.png)

installが始まるとVSCodeの左下にインストール中と表示され
![installing_nightly.png](https://qiita-image-store.s3.amazonaws.com/0/27776/e767c9d3-6b63-f940-6bc7-660121ba9977.png)

完了すると以下のように変わります

![installed_nightly.png](https://qiita-image-store.s3.amazonaws.com/0/27776/341d8509-0261-247f-1392-5ddc6692f365.png)

コマンドでもインストール可能なので失敗した場合は以下のコマンドより行ってください

```
rustup toolchain install  nightly
```

### RLSのインストール

上記のnightlyのインストールが完了すると下記の様なポップが表示されますのでYESでインストールします

![install_rls.png](https://qiita-image-store.s3.amazonaws.com/0/27776/e5dcee20-7d22-5828-1406-f1f23abe06ce.png)

nightlyと同じくインストール中は左下に進捗が表示され完了を待ちます

### 結果

すべてのインストールがうまくいくと無事Control+Spaceで補完がされるようになります

![print.png](https://qiita-image-store.s3.amazonaws.com/0/27776/4e9cd826-e798-f62e-40f4-2dca27988f59.png)

### タスク

ビルドや実行といったcargoの各コマンドをtaskとして隠蔽する設定を行います

上項目のRust (rls)をインストール済みの状態でcargoプロジェクトを開くと以下の様に自動でtask.jsonが生成されます

![task.png](https://qiita-image-store.s3.amazonaws.com/0/27776/f0cb24c8-f9ca-8732-b973-566d8d9c66c9.png)

これにより「command+p」で開いたコマンドパレットにて「task build」などでターミナルを開かなくてもビルドが可能となります。また、これによって設定されたタスク「cargo build」は次のデバッグでも利用するので編集には気をつけてください。

### ショートカット一発でビルド

「command+b」にてビルドが行えますが「cargo build」をいちいち選択する必要があり手間です。

ショートカットだけでビルドが実行されるよう以下のように.vscode/task.jsonのbuild項目のgroupにisDefaultを書き換えます。

```json

{
	"taskName": "cargo build",
	"type": "shell",
	"command": "cargo",
	"args": [
		"build"
	],
	"group": {
		"kind": "build",
		"isDefault": true
	},
	"problemMatcher": "$rustc"
}
```

## デバッグ

デバッグには[LLDB Debugger](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)を用いて行います。

### LLDBプラグインのインストール

VSCodeの拡張機能ボタンよりLLDBを検索・インストールを行い再読込を行います

![search_lldb.png](https://qiita-image-store.s3.amazonaws.com/0/27776/41857c3f-3940-ce70-c23d-5f543f3d9af2.png)

### LLVMのインストール

[ここ](https://github.com/vadimcn/vscode-lldb/wiki/Installing-LLDB)を参考にして環境に合わせてインストールしてください

## launch.jsonの設定

デバッグ実行を行うために、.vscode/launch.jsonの設定を行っていきます。

### launch.jsonの生成

何も設定していない状況では以下のように「構成がありません」と表示されています。

![unset_debug.png](https://qiita-image-store.s3.amazonaws.com/0/27776/68b906ae-58e4-631e-d366-f22429a0abb8.png)

右の歯車マークをクリックし「LLVM Debugger」を選択すると自動的に.vscode/launch.jsonが作られます

### launch.jsonの編集

デバッグするにはこれではまだ足りず設定を追加する必要があります。

言語指定

```json
"sourceLanguages": [
	"rust"
]
```

デバッグ実行する前にいちいちビルドコマンドを走らせるのは手間です。デバッグする前にビルドコマンドを走らせる

```json
"preLaunchTask": "cargo build"
```

ビルドコマンドを走らせるとターミナルウインドウが前面に来てしまうため「Debug Console」が前面に来るように設定します。気にならない人は設定しなくてよいと思います。

```json
"internalConsoleOptions": "openOnSessionStart"
```

実行するアプリケーションの指定。ここではdebugのhello_worldとしていますが環境に合わせて設定ください

```json
"program": "${workspaceRoot}/target/debug/hello_world"
```

以下最終型です

```json:.vscode/launch.json
{
	"version": "0.2.0",
	"configurations": [
		{
			"type": "lldb",
			"request": "launch",
			"name": "Debug",
			"sourceLanguages": [
				"rust"
			],
			"preLaunchTask": "cargo build",
			"internalConsoleOptions": "openOnSessionStart",
			"program": "${workspaceRoot}/target/debug/hello_world",
			"args": []
		}
	]
}
```

これによりF5などデバッグ実行を行うことでブライクポイントやスタックトレースを確認することが出来るようになります

![debug.png](https://qiita-image-store.s3.amazonaws.com/0/27776/b58fd7cb-33dd-60b7-7eed-e116fa409748.png)

以上