Contents
Rust 2026 年版 エンベデッド開発環境構築ガイド
本稿は 2026 年 7 月時点で利用可能な公式ツール(rustup 1.27.0、rustc 1.78.0、cargo 1.78.0)を前提にしています。バージョン番号は rustup --version・rustc --version で確認できます。
rustup のインストールと更新
rustup は Rust エコシステム全体を管理する公式ツールです。OS 毎に個別のバイナリをダウンロード・保守する手間が省け、rustup update だけで stable と nightly の最新コンパイラを取得できます。本セクションでは、安全かつ将来的なリンク切れリスクを最小化したインストール方法と、定期的な更新フローを解説します。
インストーラ取得方法
公式のリダイレクトページ https://rustup.rs から取得すれば、URL が変わっても常に最新のインストーラが提供されます。以下は OS 別の手順です。
Windows
Windows では 64bit MSVC ビルドを推奨します。
- ブラウザで
https://rustup.rsにアクセスし、“Download rustup‑init.exe” をクリック(リンクは常に最新版へリダイレクト)。 - ダウンロードした
rustup-init.exeを安全なフォルダー(例:C:\Program Files\rustup)に保存します。 - 管理者権限でコマンドプロンプトを開き、次のコマンドを実行してインストールします。
cmd
C:\Program Files\rustup\rustup-init.exe -y --no-modify-path
Linux / macOS
シェルスクリプトは TLS 1.2 以上で暗号化された接続を使用し、途中で改ざんされる危険がありません。
|
1 2 |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y |
インストーラは自動的に OS とアーキテクチャを判別し、~/.cargo/bin に rustc, cargo, rustup を配置します。
デフォルトツールチェーンと定期的なアップデート
インストール直後のデフォルトは stable ですが、プロジェクトごとに別バージョンを指定できます。また、月に一度の更新がベストプラクティスです。
デフォルトツールチェーンの確認・変更
|
1 2 3 4 5 6 |
# 現在有効なツールチェーンを表示 rustup show active-toolchain # stable ↔ nightly を切り替える例 rustup default stable # または `rustup default nightly` |
定期的な更新手順
|
1 2 3 4 5 6 |
# rustup と全コンポーネント(stable・nightly 両方)を最新版にする rustup update # 更新後の動作確認(ビルドが成功すれば完了) cargo clean && cargo build --release |
ポイント:
rustup updateはインストール済み全ツールチェーンとコンポーネント(例:llvm-tools-preview)を同時に更新します。手動で個別にアップデートする必要はありません。
組み込みターゲットの追加とサイズ最適化
組み込み開発では、デスクトップ向けツールチェーンだけではビルドできない thumb 系や riscv 系のトリプルを追加する必要があります。ここでは代表的なターゲット導入例と、バイナリサイズを 30 KB 前後に抑えるための Cargo 設定をご紹介します。
ターゲット追加例
以下のコマンドは 一度だけ 実行すれば、以降は cargo build --target <triple> が利用可能になります。
| ターゲット | 主なボード例 | 追加コマンド |
|---|---|---|
thumbv7em-none-eabihf |
STM32F4 系(Cortex‑M4, ハードウェア FPU) | rustup target add thumbv7em-none-eabihf |
riscv32imac-unknown-none-elf |
ESP‑C3、GD32V 系 RISC‑V 32bit MCU | rustup target add riscv32imac-unknown-none-elf |
ポイント:ターゲット追加はローカル環境に対してのみ行われます。CI 環境でも同様に
rustup target add …を最初のステップで実行してください。
cargo‑binutils と llvm‑tools‑preview の導入
組み込みバイナリのサイズ測定や逆アセンブルには、llvm-tools-preview コンポーネントと cargo-binutils が必須です。2026 年版では次の手順でインストールできます。
|
1 2 3 |
rustup component add llvm-tools-preview # 標準コンポーネントを追加 cargo install cargo-binutils --locked # バイナリユーティリティをインストール |
インストール後に利用できる主なサブコマンドは以下の通りです。
cargo size --target <triple>….text/.data/.bssのサイズレポートcargo objdump --target <triple> -d… ディスアセンブル結果
ビルドプロファイルでのサイズ削減設定
Cargo.toml に以下を追記すると、リリースビルド 時にサイズ最適化とパニックハンドラの軽量化が自動的に有効になります。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[profile.release] opt-level = "z" # 可能な限りコードサイズを優先 debug = false split-debuginfo = "off" codegen-units = 1 # デバッグ情報削減と最適化効果の向上 # 全クレートで panic 時に abort を呼び出す設定 [profile.release.package."*"] panic = "abort" lto = true # リンカタイム最適化(Link Time Optimization) # Cortex‑M4F 向けリンカオプション例 [target.thumbv7em-none-eabihf.'cfg(target_os = "none")'.rustflags] link-args = ["-T", "memory.x"] # カスタムメモリレイアウトスクリプト |
結論:
opt-level = "z"とpanic = "abort"の組み合わせで、典型的な Cortex‑M4F アプリは 30 KB 前後に収まります。サイズが更に厳しい場合は、使用しないライブラリの除去や-C link-arg=-nostartfiles等を検討してください。
デバッグプローブと IDE 統合(VS Code・RustRover)
probe‑rs 系ツールは J‑Link、ST‑Link、OpenOCD、DAPLink など多様なデバッガを 単一コマンド で扱える点が最大の魅力です。本節ではインストールから VS Code と RustRover の設定まで、実際に手を動かす手順を示します。
probe‑rs / cargo‑embed のインストールと基本設定
|
1 2 3 |
cargo install probe-rs-cli --locked # プローブ制御コマンド cargo install cargo-embed --locked # フラッシュ・デバッグ用 CLI |
Embed.toml に記述するプローブ別設定例
ポイント:
Embed.tomlはリポジトリルートに置くだけで、cargo embed flashが自動的に対象ボードを認識します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# J‑Link 用設定(STM32F429ZI) [default.probe] type = "jlink" chip = "STM32F429ZI" # ST‑Link 用設定(STM32F401RE) [default.probe] type = "stlink" chip = "STM32F401RE" # OpenOCD (SWD) 用設定例 [default.probe] type = "openocd" config_files = ["/usr/share/openocd/scripts/board/st_nucleo_f4.cfg"] # DAPLink 用設定(nRF52840) [default.probe] type = "cmsis-dap" chip = "nRF52840_xxAA" |
実行例:
|
1 2 3 |
cargo embed flash --probe jlink # J‑Link でフラッシュ cargo embed debug --probe stlink # ST‑Link でデバッグ開始 |
VS Code 用拡張とデバッグ構成例
- 拡張インストール
-
Marketplace から
rust-analyzer、cortex-debug、Embedded Debuggerを追加。自動更新はデフォルトで有効です。 -
settings.jsonの推奨設定(共通部分)
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "rust-analyzer.cargo.allFeatures": true, "rust-analyzer.checkOnSave.command": "clippy", "cortex-debug.openocdPath": "/usr/local/bin/openocd", "cortex-debug.probeLaunchCommands": [ { "name": "J-Link", "command": "jlink" }, { "name": "ST-Link", "command": "st-link" } ], "embedded-debugger.logLevel": "info" } |
launch.jsonのデバッグ構成(STM32F4 + J‑Link)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "version": "0.2.0", "configurations": [ { "type": "cortex-debug", "request": "launch", "name": "Debug STM32F4 (J-Link)", "executable": "${workspaceFolder}/target/thumbv7em-none-eabihf/release/my_firmware", "servertype": "jlink", "device": "STM32F429ZI", "svdFile": "${workspaceFolder}/stm32f429.svd" } ] } |
RustRover での組み込みデバッグ構成例
JetBrains 製 IDE の RustRover は、cargo embed を直接呼び出す Run/Debug Configuration が用意されています。
-
新規 Cargo 構成作成
Run → Edit Configurations → + → Cargo -
必須項目
| 項目 | 設定例 |
|---|---|
| Command | embed --probe jlink flash |
| Working directory | プロジェクトのルート ($PROJECT_DIR$) |
| Environment variables | RUST_LOG=info;PROBE_RS_DEBUG=1 |
- 実行
Run ボタンを押すと、RustRover のコンソールに probe‑rs のログが出力され、VS Code と同様にブレークポイントが有効になります。
結論:probe‑rs/cargo‑embed が提供する統一インタフェースのおかげで、IDE に依存せず J‑Link・ST‑Link・OpenOCD・DAPLink をシームレスに切り替えられます。
サンプルプロジェクトのビルド・フラッシュ手順
以下は公式テンプレートリポジトリ(https://github.com/rust-embedded/template)をベースにした、代表的な 3 ボード向け手順です。どれも cargo embed flash が動作すればすぐに実機で LED 点滅や UART エコーが確認できます。
STM32F4(Cortex‑M4, ハードウェア FPU)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 1. リポジトリ取得 git clone https://github.com/rust-embedded/template.git stm32f4-demo cd stm32f4-demo # 2. ターゲット追加(初回のみ) rustup target add thumbv7em-none-eabihf # 3. ビルド(release 最適化でサイズ削減) cargo build --release --target thumbv7em-none-eabihf # 4. J‑Link でフラッシュ cargo embed flash --probe jlink # 5. VS Code のデバッグ構成「Debug STM32F4 (J-Link)」を起動して確認 |
ESP‑C3(RISC‑V 32bit, 無 OS)
|
1 2 3 4 5 6 7 8 9 |
git clone https://github.com/rust-embedded/template.git esp-c3-demo cd esp-c3-demo rustup target add riscv32imac-unknown-none-elf cargo build --release --target riscv32imac-unknown-none-elf # OpenOCD 用設定ファイルはプロジェクトに同梱の `esp-openocd.cfg` を使用 cargo embed flash --probe openocd --config esp-openocd.cfg |
nRF52840(Bluetooth 5, Cortex‑M4F)
|
1 2 3 4 5 6 7 8 9 |
git clone https://github.com/rust-embedded/template.git nrf52840-demo cd nrf52840-demo rustup target add thumbv7em-none-eabihf # nRF は M4F 互換 cargo build --release --target thumbv7em-none-eabihf # DAPLink(CMSIS‑DAP)でフラッシュ cargo embed flash --probe cmsis-dap |
ポイント:各サンプルの
src/main.rsに「LED 点滅 + UART エコー」実装が入っているので、ビルド・フラッシュ後にボード上で LED が点灯し、シリアルターミナルにエコーバックが出れば成功です。
CI/CD パイプラインとトラブルシューティング
自動化は品質向上とデリバリー速度の鍵です。ここでは GitHub Actions と cargo xtask を組み合わせた 埋め込み向け CI の最小構成例と、よくあるエラーへの対処法をまとめます。
GitHub Actions + cargo‑xtask の例
リポジトリのルートに xtask/ ディレクトリを作り、以下のようなシンプル CLI(src/main.rs)を実装します。例ではビルドだけを行うタスクです。
|
1 2 3 4 5 6 7 8 9 10 11 |
// xtask/src/main.rs use std::process::Command; fn main() { let target = std::env::args().nth(1).expect("target required"); Command::new("cargo") .args(&["build", "--release", "--target", &target]) .status() .expect("cargo build failed"); } |
.github/workflows/ci.yml
|
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 |
name: Embedded CI on: push: branches: [ main ] pull_request: jobs: build-stm32f4: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Rust toolchain run: | curl https://sh.rustup.rs -sSf | sh -s -- -y source $HOME/.cargo/env rustup target add thumbv7em-none-eabihf rustup component add llvm-tools-preview cargo install cargo-binutils --locked - name: Build with xtask run: | cd xtask cargo run --release -- thumbv7em-none-eabihf - name: Size report run: cargo size --target thumbv7em-none-eabihf |
同様に build-esp-c3 ジョブを追加すれば、RISC‑V ボードの CI も完成します。cargo xtask にテスト実行やフラッシュ(ハードウェアが必要な場合は自ホストランナー)を組み込めば、ローカルと同一コマンド が CI でも走ります。
典型的なエラーと対策チェックリスト
| エラーシナリオ | 主な原因 | 推奨対策 |
|---|---|---|
undefined reference to __aeabi_* |
標準ライブラリが正しくリンクされていない | rustup component add llvm-tools-preview 再インストール → -C link-arg=-nostartfiles でリンカオプションを確認 |
probe.rs: No probe found |
USB デバイス未認識/ドライバ不足 | Windows は Zadig で WinUSB ドライバを付与、Linux/macOS は lsusb でデバイス確認 → 必要なら /etc/udev/rules.d/99-probe-rs.rules を作成 |
.bss がフラッシュ領域に配置される |
カスタムリンカスクリプトが未適用 | プロジェクトルートに memory.x を置き、link-args = ["-T", "memory.x"] を [target.<triple>.rustflags] に追加 |
cargo embed がタイムアウトする |
プローブのファームウェアが古い | cargo install --force probe-rs-cli で最新版取得 → 製造元サイトから最新ファームウェア(例: Segger J‑Link 7.80)を適用 |
CI 上で rustup target add … が失敗する |
ネットワーク制限またはキャッシュ破損 | rustup update && rustup self update を先行実行 → rm -rf $HOME/.cargo/registry で再取得 |
結論:CI 前にローカルで上記チェックリストを一度走らせ、エラーが無いことを確認すれば、GitHub Actions のビルドは安定します。問題が発生した場合は公式 issue や
probe-rsの GitHub Discussions を参照してください。
まとめ
| 項目 | 主なポイント |
|---|---|
| rustup | https://rustup.rs 経由で取得し、rustup update だけで stable と nightly が常に最新。バージョンは rustup 1.27.0 / rustc 1.78.0(2026‑07)。 |
| 組み込みターゲット | rustup target add … により一度の追加で永続利用。cargo-binutils + llvm-tools-preview がサイズ測定に必須。 |
| サイズ最適化 | opt-level = "z" と panic = "abort"、LTO 有効で 30 KB 前後のバイナリを実現。カスタムリンカスクリプト (memory.x) がメモリ配置の鍵。 |
| デバッグプローブ | probe‑rs / cargo‑embed が J‑Link・ST‑Link・OpenOCD・DAPLink を統一インタフェースで制御。VS Code と RustRover の設定例を掲載。 |
| サンプルビルド | STM32F4、ESP‑C3、nRF52840 各ボードのクローン → ターゲット追加 → cargo build --release → cargo embed flash で即実機確認可能。 |
| CI/CD | GitHub Actions + cargo‑xtask による自動ビルドパイプラインを提示。典型的エラーと対策チェックリストでトラブルシュートが容易に。 |
これらの手順を踏むことで、2026 年版の Rust エンベデッド開発環境 が安全かつ再現性高く構築できます。まずは rustup のインストールから始め、サンプルプロジェクトで「LED 点滅」を確認したら、本格的なファームウェア開発へと移行してください。 Happy hacking!