【ESP-IDF / VSCode】ビルドができないときはESP-IDF toolsのパスを確認しよう

# はじめに

ESP-IDFは、公式がVSCodeの拡張機能を出しています。が、これの設定がなかなか難しい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091433/5fc67e0d-8b00-8ed8-e786-f78042c0bc24.png)
「ESP-IDFのコマンドプロンプトではビルドが通るけど、VSCodeだと何故かこんな感じでエラーが出てビルドができない」といった人向けです。

# 環境

* Windows 10
* ESP-IDF v4.2.1
* VSCode v1.56 (April 2021)

# ESP-IDF拡張機能のログ

「エラーが出たときはログを見ろ」ってよく言われますね。VSCodeのESP-IDF拡張機能のログは次の場所にあるようです。Linux、Macは未確認です。

| OS | 場所 |
| :- | :- |
| Windows | `%USERPROFILE%\.vscode\extensions\espressif.esp-idf-extension-VERSION\esp_idf_vsc_ext.log` |
| Linux / MacOSX | `$HOME/.vscode/extensions/espressif.esp-idf-extension-VERSION/esp_idf_vsc_ext.log` |

私の場合は、`Error: CMake or Ninja executables not found`とのことで、CMakeやNinjaが見つからないよって言われてました。

# CMakeとかNinjaはどこにあるのか

コマンドプロンプトやPowershell版のESP-IDFを開くと、はじめになにか色々出ますよね。その中にこのような記述があります。

```
Adding ESP-IDF tools to PATH...
    C:\Users\USERNAME\.espressif\tools\xtensa-esp32-elf\esp-2020r3-8.4.0\xtensa-esp32-elf\bin
    C:\Users\USERNAME\.espressif\tools\xtensa-esp32s2-elf\esp-2020r3-8.4.0\xtensa-esp32s2-elf\bin
    C:\Users\USERNAME\.espressif\tools\esp32ulp-elf\2.28.51-esp-20191205\esp32ulp-elf-binutils\bin
    C:\Users\USERNAME\.espressif\tools\esp32s2ulp-elf\2.28.51-esp-20191205\esp32s2ulp-elf-binutils\bin
    C:\Users\USERNAME\.espressif\tools\cmake\3.16.4\bin
    C:\Users\USERNAME\.espressif\tools\openocd-esp32\v0.10.0-esp32-20200709\openocd-esp32\bin
    C:\Users\USERNAME\.espressif\tools\ninja\1.10.0\
    C:\Users\USERNAME\.espressif\tools\idf-exe\1.0.1\
    C:\Users\USERNAME\.espressif\tools\ccache\3.7\
    C:\Users\USERNAME\.espressif\tools\dfu-util\0.9\dfu-util-0.9-win64
    C:\Users\USERNAME\.espressif\python_env\idf4.2_py3.8_env\Scripts
```

これらは、コマンドプロンプトを起動するたびに一時的に追加されるもののようで、VSCodeにこのパスが追加されていなかったためにエラーになったようです。
ということで、これらのパスをVSCode拡張機能に追加していきましょう。

# VSCodeの拡張機能にパスを追加する

`Ctrl` + `,`で設定画面を開いて「esp-idf custom extra paths」で検索するか、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1091433/2103b5c5-a736-54d8-759a-fc47c4d855a1.png)
settings.jsonの`idf.customExtraPaths`に、先のパスたちをセミコロン区切りで1行で追加していきます。

```json
"idf.customExtraPaths": "C:\\Users\\USERNAME\\.espressif\\tools\\xtensa-esp32-elf\\esp-2020r3-8.4.0\\xtensa-esp32-elf\\bin;C:\\Users\\USERNAME\\.espressif\\tools\\xtensa-esp32s2-elf\\esp-2020r3-8.4.0\\xtensa-esp32s2-elf\\bin;C:\\Users\\USERNAME\\.espressif\\tools\\esp32ulp-elf\\2.28.51-esp-20191205\\esp32ulp-elf-binutils\\bin;C:\\Users\\USERNAME\\.espressif\\tools\\esp32s2ulp-elf\\2.28.51-esp-20191205\\esp32s2ulp-elf-binutils\\bin;C:\\Users\\USERNAME\\.espressif\\tools\\cmake\\3.16.4\\bin;C:\\Users\\USERNAME\\.espressif\\tools\\openocd-esp32\\v0.10.0-esp32-20200709\\openocd-esp32\\bin;C:\\Users\\USERNAME\\.espressif\\tools\\ninja\\1.10.0;C:\\Users\\USERNAME\\.espressif\\tools\\idf-exe\\1.0.1;C:\\Users\\USERNAME\\.espressif\\tools\\ccache\\3.7;C:\\Users\\USERNAME\\.espressif\\tools\\dfu-util\\0.9\\dfu-util-0.9-win64"
```

こんな感じで、結構長いです。Qiitaのコードブロックは行内の折返しはできないのかな……。
とりあえず、これを追加して、念の為VSCodeを開き直したら、ビルドが通るようになると思います。

# 終わりに

VSCode上で開発できるようになると色々便利そうですが、環境構築がなかなか難しいですね、これ。`esp_idf_vsc_ext.log`でログが見られるというのが一番の収穫でした。

# 参考

* [ESP IDF in VS code Failing - Something went wrong while trying to build project.](https://www.esp32.com/viewtopic.php?f=40&t=20780)（ESP-IDFのログの場所）