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


はじめに

ESP-IDFは、公式がVSCodeの拡張機能を出しています。が、これの設定がなかなか難しい。

「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」で検索するか、

settings.jsonのidf.customExtraPathsに、先のパスたちをセミコロン区切りで1行で追加していきます。

"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でログが見られるというのが一番の収穫でした。

参考