Contents
必要ツールの概要と選定ポイント
| ツール | 2024‑04 時点の最新版* | 主な特徴 | 推奨利用シーン |
|---|---|---|---|
| VS Code | 1.88 (2024‑03 リリース) | 軽量・拡張性が高く、WSL2 とシームレスに統合できる。デバッグ UI が充実。 | 全般的な開発環境のフロントエンド |
| PlatformIO(VS Code 拡張) | 6.2.1 (2024‑12 リリース) | platformio.ini にビルド・アップロード設定を一元化。依存パッケージ自動取得。複数ボードの切替が容易。 |
プロトタイピング、マイコンごとのテンプレート管理 |
| GNU Arm Embedded Toolchain(gcc‑arm‑none‑eabi) | 13.2.0 (2023‑12 リリース) | GCC 13 系に基づく最新の C/C++ コンパイラ。C17 完全対応、LTO 標準有効化。 | 低レベルビルド・カスタムリンカ設定が必要な場合 |
| Make | GNU Make 4.3 (2020‑04 リリース) | ビルド手順をスクリプト化しやすく、CI/CD にそのまま組み込める。 | 大規模プロジェクト、既存レガシーコード、CI パイプライン |
*最新版は公式リポジトリ/ダウンロードページで確認できます。
参考リンク
- VS Code: https://code.visualstudio.com/
- PlatformIO Docs: https://docs.platformio.org/
- Arm GNU Toolchain Release Notes: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm
PlatformIO と Make の位置付け
| 目的 | PlatformIO が適しているケース | Make が適しているケース |
|---|---|---|
| 設定管理 | platformio.ini にボード・フレームワーク情報を宣言的に記述。複数環境の切替が GUI で直感的。 |
手書き Makefile のため、細かいビルドフラグやカスタムスクリプトを自由に組み込める。 |
| CI/CD | ビルド結果は pio run コマンドだけで取得でき、GitHub Actions のステップとして簡潔に記述可能。 |
既存の Make ベース CI がある場合はそのまま流用でき、依存関係が明示的。 |
| デバッグ | PlatformIO が自動生成した launch.json と GDB 設定でワンクリックデバッグが実現。 |
OpenOCD + GDB の手動起動が必要だが、細かいブレークポイント設定やスクリプトのカスタマイズが容易。 |
結論
- 初心者・プロトタイプ → PlatformIO が最速。
- 大規模・既存コードベース・CI → Make を併用または単独で採用。
WSL2 + Ubuntu のインストール手順
- WSL2 有効化(管理者 PowerShell)
powershell
wsl --install
# Windows が再起動したら自動的に Linux カーネルがダウンロードされます。
- Ubuntu 22.04 LTS のインストール
- Microsoft Store を開き「Ubuntu 22.04 LTS」を検索して「取得」→「インストール」
-
初回起動時にユーザー名とパスワードを設定
-
WSL2 がデフォルトになることを確認
bash
wsl -l -v # Ubuntu が "Running" かつ "Version 2"
ポイント
WSL2 は Linux カーネルがフルに動作するため、/usr/bin配下のツールはそのまま使えます。PATH を手動で追加する必要はありません。
GNU Arm Embedded Toolchain と Make の導入方法
1. 必要パッケージのインストール
|
1 2 3 4 |
sudo apt update # gcc-arm-none-eabi は Ubuntu 22.04 の公式リポジトリに含まれています。 sudo apt install -y gcc-arm-none-eabi make cmake git |
バージョン確認(インストール直後に実行)
|
1 2 3 |
gcc-arm-none-eabi --version # → arm-none-eabi-gcc (GNU Arm Embedded Toolchain 13.2.0) make --version # → GNU Make 4.3 |
2. PATH の取り扱い
Ubuntu の標準シェル (bash / zsh) では /usr/bin がデフォルトで PATH に含まれます。
追加設定は不要です。ただし、カスタムインストール先にツールを置く場合だけ環境変数を編集してください。
VS Code と PlatformIO のセットアップ
| 手順 | 操作内容 |
|---|---|
| 1 | VS Code を公式サイトからダウンロード・インストール(Windows → User インストール推奨) |
| 2 | 「拡張機能」ビュー (Ctrl+Shift+X) で PlatformIO IDE、C/C++ (Microsoft)、GitLens を検索して「インストール」 |
| 3 | VS Code の左下に PlatformIO アイコンが表示されたらクリックし、PlatformIO Home が開くことを確認 |
推奨設定(settings.json)
|
1 2 3 4 5 6 |
{ "terminal.integrated.shell.linux": "/bin/bash", "files.autoSave": "afterDelay", "C_Cpp.intelliSenseEngine": "Default" } |
PlatformIO で STM32 プロジェクトを作成する流れ
- PlatformIO Home → New Project
- Project Name:
stm32f4_blink - Board:
ST STM32F401RE(または使用マイコンに合わせて選択) - Framework:
ArduinoかSTM32Cube(どちらも C/C++ が書けます) - 「Finish」すると以下が自動生成されます
|
1 2 3 4 5 6 7 8 |
stm32f4_blink/ ├─ .vscode/ │ └─ launch.json ← デバッグ設定 (自動生成) ├─ include/ ├─ src/ │ └─ main.c └─ platformio.ini |
platformio.ini の例(STM32F401RE)
|
1 2 3 4 5 6 7 8 9 10 11 |
[env:stm32f401re] platform = ststm32 board = stm32f401re framework = arduino ; もしくは stm32cube upload_protocol = stlink monitor_speed = 115200 build_flags = -DDEBUG -Os ; サイズ最適化 debug_tool = stlink |
- ビルド:
PlatformIO: Build(Ctrl+Alt+B) - アップロード:
PlatformIO: Upload(Ctrl+Alt+U) - デバッグ開始:
PlatformIO: Debug(F5)
Tip
platformio.iniのbuild_flagsに-Wno-error=deprecated-declarationsを追加すると、古い API が警告になるケースを抑制できます。
Makefile を用いたカスタムビルド例と CI への展開
1. シンプルな Makefile(コメント付き)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# ------------------------------------------------------------ # プロジェクト名とソースディレクトリ # ------------------------------------------------------------ TARGET := blink SRC_DIR := src OBJ_DIR := build # ソースファイルを自動取得 SRCS := $(wildcard $(SRC_DIR)/*.c) OBJS := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS)) # コンパイラ/リンカ CC := arm-none-eabi-gcc LD := arm-none-eabi-ld # ビルドオプション(必要に応じて追加) CFLAGS := -mcpu=cortex-m4 -mthumb -O2 -Wall -Iinc LDFLAGS := -T linker_script.ld # リンカスクリプトはプロジェクト固有 # ------------------------------------------------------------ # ビルドルール # ------------------------------------------------------------ .PHONY: all clean flash debug all: $(OBJ_DIR) $(TARGET).elf $(OBJ_DIR): @mkdir -p $@ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) -c $< -o $@ $(TARGET).elf: $(OBJS) $(LD) $(LDFLAGS) $^ -o $@ clean: rm -rf $(OBJ_DIR) *.elf # ------------------------------------------------------------ # デバイス書き込み/デバッグ(OpenOCD + GDB) # ------------------------------------------------------------ flash: all openocd -f interface/stlink.cfg -f target/stm32f4x.cfg \ -c "program $(TARGET).elf verify reset exit" debug: all arm-none-eabi-gdb $(TARGET).elf -ex "target remote :3333" |
2. GitHub Actions 用サンプルワークフロー
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
name: Build & Test (STM32) on: push: paths: - '**.c' - '**.h' - 'Makefile' jobs: build: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - name: Install toolchain run: | sudo apt update sudo apt install -y gcc-arm-none-eabi make - name: Build firmware run: make all # テストはハードウェアが無い環境では実行できませんが、 # ビルドの成功だけでも CI の価値があります。 |
ポイント
- Makefile はmake clean && makeでフルリビルドが可能。
- CI に組み込む際はデバイス書き込み・デバッグステップを除外し、ビルドだけに絞る。
よくあるトラブルと対処法(チェックリスト)
| 症状 | 原因例 | 確認手順 | 解決策 |
|---|---|---|---|
gcc-arm-none-eabi: command not found |
PATH が破損、もしくはツールが未インストール | which gcc-arm-none-eabi → 何も返らない |
sudo apt install gcc-arm-none-eabi。WSL2 のデフォルト PATH に問題はありません。 |
| PlatformIO が Python 環境を認識しない | 複数の Python が混在(system/python3 と pyenv) | platformio --version でエラーが出るか確認 |
VS Code 設定に "platformio.pythonPath": "~/.platformio/penv/bin/python" を追記 |
| OpenOCD が USB デバイスを検出しない | 権限不足、WSL2 のデバイス共有未設定 | dmesg | grep -i usb で認識確認 |
Windows 側「デバイスの共有」有効 → WSL2 で udev ルール追加(下記) |
デバッグ中に target remote :3333 が接続できない |
OpenOCD が起動していない、ポート番号ミス | ps aux | grep openocd でプロセス確認 |
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg を手動実行しログをチェック |
udev ルール例(WSL2)
|
1 2 3 4 5 |
sudo tee /etc/udev/rules.d/99-stlink.rules <<'EOF' SUBSYSTEM=="usb", ATTR{idVendor}=="0483", ATTR{idProduct}=="3748", MODE="0666" EOF sudo udevadm control --reload-rules && sudo service udev restart |
備考:WSL2 の場合、USB デバイスは Windows 側で「共有」設定を有効にしないと認識されません。PowerShell で
wsl --list --verboseを確認し、対象ディストリビューションがRunningと表示されていることもチェックしてください。
バージョンアップ時の注意点と今後のロードマップ
1. PlatformIO → CMake 移行のヒント
| 移行項目 | PlatformIO 設定例 | CMake への変換例 |
|---|---|---|
ビルドフラグ (build_flags) |
build_flags = -DDEBUG -Os |
add_compile_definitions(DEBUG)add_compile_options(-Os) |
リンカスクリプト (upload_protocol) |
upload_protocol = stlink |
CMake では -T stm32f4x.cfg を OpenOCD 起動時に指定 |
実務的アドバイス:大規模プロジェクトで CMake に完全移行する場合は、まず PlatformIO の
platformio.iniを JSON 化し(pio project export --format=json)、生成された情報を基にCMakePresets.jsonを作成すると手間が省けます。
2. ツールチェーンのバージョン差分
- GCC 13 系では
-fno-commonがデフォルト化され、同名シンボルの重複がエラーになるケースがあります。レガシーコードでこの問題が出たら-fcommonを明示的に付与してください。 - PlatformIO 6.2.xは Python 3.12 が必須です。古い環境(Python 3.8/3.9)では自動インストールに失敗することがあります。WSL2 の
python3を最新版 (sudo apt install python3.12) に更新しておくと安全です。
3. 今後期待できる代替ツール
| ツール | 想定リリース時期 | 主な利点 |
|---|---|---|
| Zephyr SDK (v0.16) | 2026 Q3 | RTOS とビルドシステムが統合。PlatformIO の代替として、CMake + West が標準化されつつある。 |
| CMake‑Presets (VS Code 標準サポート) | 2024‑2025 | CMakePresets.json にビルド構成を JSON で記述でき、IDE と CI の設定が一元管理可能になる。 |
結論:現時点では PlatformIO が最もハンドホールドされた体験を提供しますが、長期的には CMake‑Presets + Zephyr SDK への段階的移行を視野に入れると、メンテナンスコストが低減します。
おわりに
- 本ガイドは 公式リリース情報 に基づく最新の無料ツールチェーン構成例です。
- 「WSL2 + Ubuntu」上であれば
/usr/binが自動的に PATH へ組み込まれるため、余計な環境変数設定は不要です。 - PlatformIO と Make は 目的別に使い分け することで、開発スピードと柔軟性の両立が可能です。
実務で最も重要なのは「ビルドが成功すれば次はデバッグ、最後に本番書き込み」 というフローを確実に回すことです。本稿の手順通りに環境を構築し、まずは “Hello, World” レベルの Blink プロジェクトで動作確認を行ってください。
※ 本記事は執筆時点(2024‑04)で確認できた情報に基づきます。ツールのバージョンが更新された場合は、各公式サイトをご参照ください。