コンテンツにスキップ

組み込み機器におけるウェブAPI

組み込み Rust の場合はハードウェアリソースの制約から、大量の画像や映像コンテンツを配信するケースは少ないです。Cortex-M シリーズや RISC-V などの汎用的なマイクロコントローラーでサポートされているメモリ量は、RAM: 128KiB 〜 512KiB 程度、フラッシュ: 512KiB 〜 4MiB 程度です。

外付けのRAMを用意することで32MiB程度に拡張することもありますが基板のサイズアップやコストアップにつながるため、あまり好まれません。

そこでよく使われる技法が、HTTP 経由の GET/POST アクセスに対して、JSON 形式などのテキストデータを返却するAPIを用意するパターンです。

sequenceDiagram
    participant FE as フロントエンド
    participant EMB as 組み込み機器

    FE->>EMB: GET /status
    EMB-->>FE: {"temperature": 25.5, "humidity": 45}

    FE->>EMB: POST /setting
    EMB-->>FE: {"status": "success"}

    FE->>FE: 描画更新

フロントエンド側(ブラウザーアプリやPCソフトウェア)は必要なデータのみを組み込み機器から受信し、JavaScriptやTypeScript(React, Svelte, Astroなど含む)でUIを構築したり、データ処理を行ったりします。 ハードウェアリソースに制限があるマイコンと柔軟な実装が可能なブラウザーアプリの役割分担を行うことで、開発の効率化やメンテナンス性を向上させることができます。

計算負荷の高い処理については Rust で実装した WASM(WebAssembly) をウェブフロントエンド側で実行するパターンもあります。科学計算や座標計算などが必要な場合は検討の価値があるでしょう。

2026年時点では tauri, dioxis, egui, leptos などの rust で実装されたフレームワークが存在しますが、現時点では React などのメインストリームのウェブフレームワークと比較すると完成度の面で大きく劣ります。

また,Windows での使用を考慮すると Electron など汎用フレームワークも視野に入ってきますが、メモリ消費量やバイナリーサイズ肥大化(起動速度が遅い)などの欠点もあり、用途に応じて選択する必要があります。