PR

ベアメタルRust組込み開発をはじめよう

機械制御

組込み開発を行うためのプログラミング言語としては、C, C++, Pythonなどが有名ですが、Rustという選択肢を忘れてはいけません。現在、Rustの組込み開発コミュニティは非常に活発に活動しており、簡単に開発を始められるためのリソースが続々とリリースされています。

この記事では、今、組込みRustが注目を集めている理由について解説し、開発を始めてみたいと思った方向けに、本や勉強会、資料などを紹介します。(記事中には、本やデバイスへの広告リンクを含みます)

Rustで組込み開発するメリット

高い安全性と信頼性

Rustで開発を行うことにより、コードのコンパイル時にメモリ安全性が保障され、

  • バッファオーバーフロー
  • ダングリングポインタ

などの主要な脆弱性を回避することができます。

組込み開発ではなくWebの例ですが、クラウドWatchの記事では、2024年時点でも、悪意ある攻撃の約6割がバッファオーバーフローの脆弱性を標的としているそうです。また、IT mediaエンタープライズ(有料記事)が伝えるところによると、かのFBIがバッファオーバーフローに対し「許しがたい欠陥」であると憤慨し、その根絶を図っているとのことです。

以上から、開発者の能力に依存せず、システムとして脆弱性を作りにくいRustを採用することが、今後ますます求められるようになるでしょう。

高いパフォーマンスと低オーバーヘッド

Rustは完全型付き言語として、すべての変数のタイプを管理します。そのため、例えばPythonのように、数値が入ると想定していた変数に文字列が代入されてしまった、ということが起こり得ません。

しかしRustでは、共通する特徴(トレイト)を持つ型に対して抽象化した実装をすることが可能です。たとえば、usizef32などの「数値」を引数にとる共通の関数を定義することができます。このように抽象化した実装をしても、コンパイラが実行時の型を推論・特定してくれるため、安全性が失われることはありません。このような特徴をゼロコスト抽象化といい、コード記述の柔軟性とパフォーマンスの両立を実現しています。

また、OSを使用しない組込み開発ではno_std環境を使用することで、標準ライブラリ(std)に依存しない開発を可能とし、マイコンのRAMやROMのリソースを削減できます。

モダンなエコシステムと開発体験

実は、最も強調したいのはCargoシステムの有用性です。このシステムはRust開発のコアとして、ビルドシステムやライブラリ管理など様々な役割を果たします。特に便利なのはライブラリ管理機能で、Rustのライブラリ(クレート)はすべてcrates.ioにてバージョンごとに管理され、いつでも過去のリソースを利用することができます。

よって、昔使っていたライブラリが今はもう配布されていない、という悲劇に見舞われることはありません。

また、「Rustは学習コストが高く、コンパイルできるコードを書くのが一苦労」という評判も散見されます。しかしこれは、「Rustで一度コンパイルが通ってしまえば、謎の脆弱性で途中終了することはない」というメリットの裏返しです。コンパイル失敗時には丁寧なエラーメッセージが表示されるので、これに従って開発を進めることでRustを学習することができます。

つまり、コンパイラが「先生」としての役割を果たしてくれるのです。

メリットまとめ

以上より、組込み開発でRustを使用することのメリットは

  1. 安全性の保障
  2. 開発の効率性
  3. 快適な開発体験

と、まとめることができます。これらはすべて、Rustのコンパイラが非常に「頭がいい」ことに由来するものです。

組込みRustの始め方

組込みRustの本

組込みRustを始める際には、以下の本をおすすめします。

Raspberry Piを対象とした本として、naotacoさんの

があります。また、拙著

Rust×Raspberry Pi Picoで本気の組み込み開発 IMUで姿勢情報を取得しよう! (技術の泉シリーズ)

では、Raspberry Pi Picoを対象とした組込みRust入門を解説しています。

これらの本はすべてkindle unlimitedで読めるため、購入前にコードが古くなっていないか確認するとよいでしょう(Rust×Raspberry Pi Pico本のコードが動かなくなっていた場合には、@doraneko_b1fまで連絡ください)。Rustの組込み開発コミュニティが活発である影響で、ライブラリのアップデートが頻繁に行われた結果、過去のコードが動かなくなる場合があります。

より深い理解を求める場合には、

基礎から学ぶ 組込みRust

をおすすめします。こちらはWio Terminalを対象とした開発を行う本ですが、特定のデバイスに限らない一般的な「組込みRust」の仕組みについても詳しく解説されています。

組込みRustの勉強会

上原哲太郎先生をはじめとした、立命館大学・IoTセキュリティ研究センターの方々が、ベアメタルRust研究会を開催されています。内容はRustでRaspberry Pi PicoやRaspberry Pi Pico Wを操作するための入門編なので、開発をはじめてみたい方におすすめです。

connpass IoTセキュリティ研究センターのグループページ

より深く知りたい人へ

組込みRustの全体像を示した公式ドキュメントである、The Embedded Rust Bookは非常におすすめです。Raspberry Piのような有名なものではない、独自のデバイスを動かしてみたい場合には、いつもここに立ち返ると良いでしょう。

また、U-Dev(U-知能デバイス研究所)では、爆速入門や実装例集などの組込みRust関連記事をたくさん公開しています。

などの記事を参考に、組込みRustをはじめましょう!

(コードが古くなっていることに気づいた場合は、@doraneko_b1fまで連絡ください!)

コメント

タイトルとURLをコピーしました