『基礎から学ぶ 組込みRust』を書きました

はじめに

2021年4月20日、『基礎から学ぶ 組込みRust』(C&R研究所) を出版します。Rust の文法から組込み Rust でファームウェアを作成するところまでを、片手で持てる (多分!まだ持ったことないけど!) 1 冊の本にまとめた、喉から手が出るほど (私が) 求めていた書籍です。 先日、無事入稿を果たしたので、今の気持ちを徒然なるまま綴ったのが、このエントリです。

基礎から学ぶ 組込みRust

基礎から学ぶ 組込みRust

一番始めに言いたいこととしては、今現在、「組込み Rust がプロダクションレディか?」、と問われると、「ほとんどのプロジェクトに対してそうではない」というのが私個人の見解です。セーフティクリティカルな分野では、機能安全をはじめとする認証の問題があり、そんなにおいそれとプログラミング言語変更できないことも承知しています。

でも、その上で言いたい!
プログラミング言語は進化していて、Rust は本当に良いプログラミング言語です!私は組込み製品開発で Rust を使いたいと強く望みます。 C/C++ の他にもう1つくらい、選択肢があっても良いと思いませんか?思いますね!思いましょう!
Rust を有力な選択肢とするためにはエコシステムの発展が欠かせません。そのためには関わる人口を増やさねば!と考えたわけです。そんなおり、今回の書籍執筆のお話をいただいて、本当に価値ある書籍を書けるかどうか不安に思いながらも、本書を執筆するにいたりました。

普段から Rust を書いている方は、これを機に組込み Rust にも興味持って頂けると嬉しいです。 本業が組込みの方は、とりあえず仕事で使うかどうかは置いておいて、最近話題になってるけどどんなもんかな、という気持ちで触ってもらえると幸いです。 けっこう既存のドキュメントにはない、コードリーディングとトライ&エラー繰り返して習得したこと、いっぱい書きました。

あと、冒頭でお知らせしておきたいのは、非常に残念なことながら、本書のカバー内容ではプロユースできるレベルには到達できません。そういう期待を持って本書に興味を持ってくださった方は、ごめんなさい!今後にご期待下さい。

私と Rust

私が Rust を学び始めたのは、3年前からで、比較的新参者と言えるでしょう。当初から C/C++ 以外で組込みで使える言語ないかなぁ、というモチベーションでした。 Rust の入門を済ませて、組込み Rust のドキュメント3本 (The Embedded Rust Book, Discovery, Embedonomicon) を夢中で読み、「これはイケる!」という結論になりました。

当時は、今よりさらに組込み Rust やっている人が少なくて、まず仲間を増やすことが第一歩だな、と考えたことを覚えています。 先述の組込み Rust ドキュメントの和訳が存在していなかったため、まずリーチできる日本語の情報源を増やそう、ということで、2018年の年末からドキュメントの和訳を開始しました。おおよそ半年かけて3本のドキュメントを和訳しました。

この頃、ブログでも積極的に組込み Rust のエントリを書き、Interface のイベントやったり、第1回技書博で組込み/ベアメタルRustクックブック出したりしていました。

そして記念すべき、Interface 2020年5月号 に組込み Rust の特集が掲載され、少しずつ活動の芽が出てきている感じがしていました。

その後、私事ですが、次男が産まれたことで少し活動の時間が取りにくくなり、なんやかんやしている間に本書の執筆をすることになりました (雑。

これは内緒なのですが、実践Rustプログラミング入門に組込みの章があって、組込み Rust の認知度が上がるの良いぞぉ、と思う半面、先を越された!と本気で悔しがっておりました。

書籍執筆の経緯

まさかこんなに早く組込み Rust を題材にした書籍を出版する機会が訪れるとは思ってもみませんでした。 現在担当してくださっている方から、Rust の基礎を解説する書籍執筆の依頼を受けました。

この時点で内心ウキウキでしたが、1つものすごい不安がありました。それは、「Rust の基礎を解説する書籍」の執筆依頼だったことです。 正直、組込み Rust という特定分野ですらあやしいのに、Rust の基礎を解説するのに私という人選が良いとは思えなかったわけです。 なので、組込み Rust に関してだったら書けると思うけど、本当に Rust の基礎が必要なら不適任です、という返信をしました。 この時点で、「多分お断りだろうなぁ…」と8割方諦めていました。

先方から、「組込み Rust でええよ」(関西弁ではなかったですが) 、という予想外の返答が返ってきたので、心底驚きました。 この機会を逃すと次がいつになるかわかったものではないな、という打算もあり、Rust の文法から組込み Rust を扱う、という企画で執筆依頼を受けました。

Wio Terminal を選んだ理由

企画の当初から、Rust の文法解説から始めて、最終的にターゲットボードでアプリケーションを作る、という流れで話を進めていました。 そこで、ネックになったのが、ターゲットボード何にするか?です。
Discovery book だと STM32F3Discovery を採用しているのですが、現在だと少し入手性が悪くなっており、ドキュメントの内容終わった後も何して遊んで良いものか、という感想を持っていました。 (Discovery book は micro:bit 使うバージョンへの書き換えが進行中です)

そこで、当面は入手性が良さそうで、遊びがいがあって、安くて (3,000円くらい)、GDB デバッグできるもの、という条件で探していました。 遊びがい、という意味では、画面欲しいよね、と思ってました。やっぱわかりやすく遊べるので。embedded-graphics クレートの存在も知っていたので、対応するドライバがあるやつで探していると、意外と STM32 の評価ボードは高かったりで難航していました…。

当時、まだ共著じゃなかった井田さんに良いボードない?って質問したところ、Wio Terminal を紹介されました。 Wio Terminal は色々デバイスが載っているわりに、4,000円弱で手に入って、ちょっと改造すれば GDB デバッグもできます。 本の内容一通りやった後でも、色々遊べそうということもあり、Wio Terminal をターゲットにすることにしました。

Wio Terminal と Rust でいくなら、井田さんも書こうよ、という話をして、このあたりで引きずり込みました。

f:id:tomo-wait-for-it-yuki:20210329203923p:plain
かにさんを Wio Terminal に描写して遊びます

基礎から学ぶ組込みRust の良いところ

Rust の (最低限の) 文法から、組込み Rust のアプリケーション開発まで1冊の本にまとまっていることです。 この範囲を1冊でカバーしている本は、いまのところないはずです。 特に、embedded-hal トレイトの解説や BSP クレートを使ったアプリケーション作成方法は、あまりまとまった情報がないので、それが書かれているのは1つの特徴です。

ただ、Rust に入門する目的では、本書に掲載している文法の章を読むより、The Rust Programming Language 読んだり、他の入門書読む方が良いです。 またページ数の都合上、ドライバ書いたり、ブートストラップ書いたり、組込み Rust のリアルタイムフレームワーク RTIC を使ったりする内容は書けませんでした (無念じゃー!) 。

もう1つ重要な良いところがあります。 それは、私がしばらくは embedded-hal を取り扱った入門書を書かなくて済むことです! とにかく組込み Rust の認知度をあげるための活動を第一に行っていたわけですが、そのために自分が Rust を書く時間が少なくなっていました。 書籍発売で1つの区切りもでき、今後は自分が何か作りながら、その過程をまとめて公表できればなぁ、と思います。

書籍の想定読者と内容

組込みも Rust もあまり知らない状態からでも読めるようにしたつもりです。 しかし、どちらかの入門が済んでいる方が読みやすいと思います。どちらかというと、Rust の入門が済んでいる方が良いと思います。

C/C++/Rust 未経験者が本書を読んでどう感じるか、は未知数ですが、ちょっと色々話がつながらないところが出てくるのか、と思ってます。

回路図も参照しながら、こうデバイスがつながっているから、実装がこうなっているんだよ、という解説も書きました。 本書を読み終わった後でも、Wio Terminal 上の本書で取り扱っていないデバイス動かしたり、別のボード使うときに雰囲気だけでも読めると捗るはずです。 回路について、詳細な解説はしていません。なので回路図を見たことない方も気負わず読めると思います。

本書内で扱うデバイスは次の通りです。

  • LEDとボタン / GPIO
  • シリアル通信 / UART
  • タイマ / 割り込み
  • ブザー / PWM
  • 光センサ / ADC
  • 加速度センサ / I2C
  • 液晶ディスプレイ / SPI

無線はまだ動かないので、今後にご期待下さい!

サポートサイト

本書のサポートサイトです。本書について質問があれば、Issue にて受け付けています。また、本書で使うハードウェア一覧を掲載していますので、ぜひ発売日までにハードウェアを入手して、本の購入とともに Wio Terminal で遊んでいただければ幸いです。

目次を節レベルまで掲載していますので、ご購入の参考にして下さい。

GitHub - tomoyuki-nakabayashi/Embedded-Rust-from-Basics: 中林智之、井田健太が執筆した『基礎から学ぶ 組込みRust』 (C&R研究所) のサポートサイトです。