この記事を読むと…
- VSCodeでArduino開発をする2つの手法があることを知る
- PlatformIOとVSCode-Arduinoの違いとそれぞれの特徴が分かる
混乱の Arduino + VSCode 開発
みなさん、地球に生まれた人類なら一度は思ったことがあるでしょう。
「VSCodeでArduino開発をしたい!!!!!!!!」
インターネットで「Arduino VSCode」と調べると、大きく分けて2つの手法がヒットします。1つ目は VSCode-Arduino拡張機能 を使う方法、2つ目は PlatformIO (こちらも拡張機能)を使う方法です。
今回は、これら2つの違いと特徴を説明します。
リンク
VSCode-Arduino
PlatformIO IDE
VSCode-Arduino vs PlatformIO
項目 | VSCode-Arduino | PlatformIO |
---|---|---|
形態 | VSCode拡張機能 | VSCode拡張機能 |
パブリッシャー | コミュニティ(かつてはMicrosoftだったが、現在はサポートが終了) | PlatformIO |
ベース技術 | Arduino CLI | PlatformIO Core |
コード補完やエラー表示 | △ | 〇 |
ボードへの書き込み | 〇 | 〇 |
ArduinoIDEとの互換性 | 〇 | ✕ |
機能の豊富さ | △ | 〇 |
VSCode-Arduino
VSCode-Arduinoとは、 Arduino IDEの各機能をVSCodeから使えるようにする拡張機能 です。
VSCode-Arduino拡張機能は、Arduino CLIというツールをVSCodeから使えるようにしています。Arduino CLIとは、Arduino IDEの各機能(コンパイル、書き込み、ライブラリ管理、ボードマネージャの管理…)をコンソール上から行えるツールです。
Arduino CLIを使って、Arduino IDEの機能をVSCode上から触れるようにしてあるわけです。
ここでポイントなのは、 プロジェクトの構造やツールチェインは、Arduino IDEと同じ ということです。従って、VSCode-ArduinoはArduino IDEと互換性があります。
PlatformIO IDE
PlatformIOは、オリジナルのツールチェインを使ってコンパイル、ビルド、Arduinoに書き込みを行います。
そのため、PlatformIOでは、 プロジェクトの構造もツールチェインもArduino IDEと全く違います 。従って、PlatformIOはArduino IDEと互換性はありません。
Arduino IDEと並行する位置に存在するIDE と考えてもらえると分かりやすいです。
具体的に何が違うの?
VSCode-ArduinoとPlatformIOではどんな差異があるのか、具体例の一部を紹介します。
プロジェクトの構造
VSCode-Arduino
MyProject/
├── MyProject.ino
└── MyFunctions.ino # ファイル分割する場合
PlatformIO IDE
MyProject/
├── .pio/
│ └── # 依存環境のソースなど
├── src/
│ └── main.cpp
└── platformio.ini # 設定ファイル (依存環境などもここに記述)
文法
項目 | VSCode-Arduino | PlatformIO |
---|---|---|
#include <Arduino.h> | 不要 | 必要 |
プロトタイプ宣言 | 不要 | 必要 |
ヘッダファイル | 不要 | 必要 |
拡張子 | .ino | .cpp, .hpp, .c, .h, ... |
std::vectorなどSTL機能 | ほぼ ✕ | ◯ |
例外処理 (try-catch) | ✕ | ◯ |
ライブラリのソースの場所
VSCode-Arduino
バラバラ (Arduino IDEと一緒) です。
(Windowsだったら、 ..\Documents\Arduino\libraries\
や ..\AppData\Local\Arduino15\
など)
PlatformIO
プロジェクト内の、 .pio\libdeps\
にまとまってる。
しかも依存環境の情報も設定ファイル (platformio.ini
) に書き込まれる…!!
言語支援機能について
VSCode-ArduinoもPlatformIOも、あくまで 主機能はコンパイル、ビルド、書き込み などになっています。(PlatformIOはプロジェクト管理などもできて高機能ですが)
従って、いずれを使う場合も、補完機能や静的解析(エラーの表示)などの言語支援機能は、Microsoftの公開している C/C++ という別の拡張機能を使うことになります。
PlatformIO IDEでは
PlatformIOでは、C/C++拡張機能はPlatformIOのインストール時に自動的にインストールされます。セットアップも完璧に行ってくれるので、基本的にLSPがよわよわで困ることはありません。補完や静的解析はバッチリ動作します。
VSCode-Arduinoでは
VSCode-Arduinoは、あくまでArduino IDEの機能をVSCodeから使えるようにしたものに過ぎないので、C/C++のセットアップなどは行ってくれません。そのため、これは自分で行うことになります。
しかし、Arduino IDEはライブラリやフレームワークなど依存環境をPC中にバラバラに保存しています。従って、C/C++拡張機能をインストールしても、かなり複雑な設定をしないと補完機能や静的解析はまともに動きません。
結論
初学者の人 → Arduino IDE
オススメ → PlatformIO
Arduino IDEとの互換性をどうしても保ちたい人 → VSCode-Arduino
ちなみに
ESP32にはESP-IDFというのがあったり、他にも色々あったりしますが、使ったことがないので触れません。