はじめに (対象読者・この記事でわかること)
この記事は、ArduinoをCLI(コマンドラインインターフェース)で開発したいと考えているmacOSユーザーを対象にしています。特に、Arduino IDE 2.0に同梱された「arduino-cli」コマンドをHomebrewや公式スクリプトで導入しても「command not found」や「Permission denied」に悩まされている方に最適です。
この記事を読むことで、macOS特有のセキュリティ制限(Gatekeeper/XProtect)を回避しながら、Arduino CLIを正しいパスにインストールする方法がわかります。また、ボード定義の追加、スケッチのアップロード、ライブラリ管理まで一貫してターミナルだけで行えるようになります。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。 - macOSのターミナル(zsh)の基本的な操作(cd, ls, chmodなど) - Arduinoのスケッチ(.inoファイル)の基礎知識 - Homebrewのインストールと使い方(brewコマンド)
Arduino CLIとは?なぜGUIではなくCLIを使うのか
Arduino CLIは、Arduino IDEの裏側で動いていた「ビルド・ボード管理・ライブラリ解決」をターミナルだけで完結させる公式ツールです。GUI版IDEと完全に互換であり、ビルド結果も同一です。
CI/CD(GitHub Actionsなど)で自動ビルド・自動テストを回したい、複数のボードに対して同時にファームウェアを書き込みたい、VS Codeの統合ターミナルからワンコマンドで烧き込みたい、といった要求に応えます。GUIを起動するよりも明らかに高速で、Raspberry Piなどのリモート環境でも動作します。
macOSでArduino CLIを導入する際の正しい手順とハマりどころ
ステップ1:Homebrewでインストールする際の注意点
多くの記事では以下のように紹介されていますが、これだけでは不十分です。
Bashbrew install arduino-cli
このコマンドでインストールすると、arduino-cliは/opt/homebrew/bin(Apple Siliconの場合)または/usr/local/bin(Intel Macの場合)に配置されますが、初回起動時にボード定義ファイルのダウンロードが失敗するケースが多発します。理由は、macOSの保護機構「Gatekeeper」がダウンロードした実行ファイルを検証し、署名がないと判断してネットワークアクセスをブロックするためです。
正しい手順は、インストール後に明示的に実行許可を与えることです。
Bashbrew install arduino-cli xattr -dr com.apple.quarantine $(which arduino-cli)
これで、Gatekeeperの検証対象から外れ、ボードマネージャが正常に動作します。
ステップ2:コアとボード定義を追加する
GUI IDEと同様、CLIでも利用したいボードのコアを追加する必要があります。例えばESP32を使う場合:
Basharduino-cli core update-index arduino-cli core install esp32:esp32
ここで「Error downloading index」と表示される場合、ほぼ100%プロキシ・社内ネットワークの証明書問題です。macOSのキーチェーンに入っている自社ルートCAを信頼させるには、以下の環境変数を追加します。
Bashexport ARDUINO_CLI_CERTIFICATE=/Library/Keychains/System.keychain
ステップ3:スケッチをコンパイル&アップロードする
適当なディレクトリにBlink.inoを作成し、
Basharduino-cli compile --fqbn esp32:esp32:esp32 Blink arduino-cli upload -p /dev/cu.SLAB_USBtoUART --fqbn esp32:esp32:esp32 Blink
この時点で「Permission denied」が出る場合、カーネル拡張(kext)またはシリアルドライバの署名が原因です。Silicon Labs CP210xやFTDIの公式ドライバを再インストールし、macOSの「セキュリティとプライバシー」画面で「許可」ボタンを押すことを忘れないでください。
ハマった点やエラー解決
エラー1:zsh: command not found: arduino-cli
原因
Homebrewでインストールしたにもかかわらずパスが通っていない。特にM1/M2 Macでは/opt/homebrew/binがデフォルトPATHに含まれていない。
解決策
~/.zshrcに以下を追加して再ログイン。
Bashecho 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc source ~/.zshrc
エラー2:Error: unknown command "core" for "arduino-cli"
原因
2022年頃にサブコマンド体系が刷新された古い記事を参考にしてarduino-cli coreを打っているが、brewで入ったバージョンが古い。
解決策
brewで最新版に更新。
Bashbrew upgrade arduino-cli
エラー3:アップロード時にesptool.pyが見つからない
原因
ESP32コアに付属するesptoolが~/Library/Arduino15/packages/以下にダウンロードされるが、パーミッションが600になっており実行できない。
解決策
パーミッションを一括で修正。
Bashchmod -R 755 ~/Library/Arduino15/packages/esp32/tools/esptool*
まとめ
本記事では、macOSでArduino CLIを使う際に遭遇する「Gatekeeper」「PATH」「パーミッション」「証明書」という4つの壁を突破する方法を解説しました。
- インストール後に
xattr -dr com.apple.quarantineでGatekeeperを回避 - Apple Siliconでは
/opt/homebrew/binをPATHに追加 - 社内プロキシ環境では
ARDUINO_CLI_CERTIFICATEでキーチェーンを参照 - ボードアップデート後に
chmodで実行権限を復活
この記事を通して、ターミナルだけでArduinoスケッチのビルド・烧き込み・ライブラリ管理が完結できるようになり、CI/CDやリモート開発の選択肢が広がりました。
次回は、VS Codeのタスク連携とGitHub Actionsで複数ボード向けに並列ビルドする方法を紹介します。
参考資料
