最近つくったPicoRubyの便利ツールを自慢させてくれ。そしてRubyKaigi 2026へ
R2P2というのはPicoRubyで書かれた、マイコンで動くなんちゃってUNIX風シェルシステムです1。プロラミング初心者の入り口になり、なおかつ実用的なマイコンアプリケーションのフレームワークにもなるように日々パッチを積んでいます。
ここではPicoRubyやR2P2を取り巻くエコシステムの改善について書きます。最近、R2P2 Web Terminal、RuntimeGemsマネジャ、そしてR2P2インストーラという3つの便利ツールをつくりました。
R2P2 Web Terminal
R2P2はシリアル接続のターミナルエミュレータをUIとして使用します。WindowsにはTera Term、LinuxにはGTKTermというすばらしい端末があるのですが、macOSにはすばらしい端末エミュレータがありません(ありません)。
PicoRubyをやる人の多くはRailsアプリプログラマであり、Railsでプロダクトをつくっている会社の支給マシンはMacであることが多いので、これは問題です。
ふと思い立ち、最新のXterm.jsをつかいR2P2のためのWebブラウザターミナルエミュレータをつくってみたところ、そこそこ不満のないものができあがりました。さらに、ローカルから任意のファイルをR2P2へアップロードする機能もつくりました。数年前のXterm.jsではここまでのR2P2対応はできなかっただろうと思います。すごい。
任意のRubyスクリプトをmrb(VMコード)へコンパイルしてからアップロードすることもできます。オンザフライコンパイルしないことでR2P2のメモリ消費を減らせますし、ユーザがpicorbc(PicoRubyコンパイラ)を手元に用意する必要もなくなりました。PicoRubyワークショップ参加者はラップトップをもってくるだけでいいのです!
RuntimeGemsマネジャ
マイコンを便利につかうためにはいろいろなライブラリが必要ですが、それらすべてをR2P2本体のビルドに含めるわけにはいきません。ROM容量に制限があるというのが1番目の理由。2番目の理由は、競合するふたつのライブラリを両方バンドルするとトラブルの元、という点です。
RuntimeGemsマネジャは、ユーザが選択したライブラリをGitHubから直接ダウンロードしてブラウザ上でmrbへコンパイルし、R2P2の/libディレクトリへアップロードします。/libディレクトリは$LOAD_PATHに含まれていますから、すぐにrequireできます。べんり。
https://picoruby.org/runtimegems
ひとつ注意したいのは、この仕組みには潜在的なセキュリティリスクがあるという点です。GitHub上のライブラリに悪意のあるコードが書かれていたら、それがそのままR2P2に載ってしまいます。R2P2はNet::WebSocketやNet::MQTTやBLEなどのネットワーキング機能を充実させていますから、ご利用はあくまでも自己責任です。
筆者(@hasumikin)のGitHubアカウントがクラックされたらR2P2本体にマルウェアが仕込まれる可能性もあるわけで、もともとからしてすべてにリスクはあります。ただやはりライブラリは攻撃の対象になりやすいと思うので、実用のIoTシステムを組むならライブラリを含めたコード全体をなるべくご自身で管理してください。
R2P2インストーラ
以上ふたつのツールで、PicoRubyワークショップの事前準備はまったく不要になりました。参加者はいつものラップトップとUSBケーブルだけ持参すればいいのです!
と思うじゃないですか? じつはまだ落し穴があります。会社支給マシンは、USBメモリのマスストレージクラス(MSC)を封じていることがあります。情報漏洩対策というやつですね。ラズパイピコにR2P2をインストールするためにはMSCを認識するデバイス(つまりパソコン)が必須ですが、これができない、ワークショップを始められない、ということがわりとしばしばありました。
そこでつくったのが、ラズパイゼロWをスタンドアロンなR2P2インストーラにするツールです。これをセットアップしたラズパイゼロWを参加者のラズパイピコに接続するだけで自動的にR2P2をインストールできます。ワークショップオーガナイザ各位はこれを準備しておくとよいでしょう。PicoRubyヘビーユーザなニキたちもひとつ持っておくとたいへんにべんりですよ。
https://github.com/picoruby/r2p2-installer
背景
R2P2 Web TerminalとRuntimeGemsマネジャの登場の陰には、R2P2のファイルシステムの変更という事情があります。PicoRuby開発当初から使用していたFatFSをやめ、Littlefsに乗り替えました。
FatFSのメリットはなんと言っても、パソコンが認識できるFATファイルシステムであることです。他方、書き込み失敗(によるFATテーブルの破損)という不安定要素がありました。また、Flash ROMの局所利用が重んで故障させやすく、それが回復不可能である点もデメリットです。ROMディスクのひとつのセクタが壊れると、それだけでラズパイピコが文鎮化します。いや、軽すぎて文鎮にもなりません。
Littlefsはウェアレベリング処理や書き込みのフェイルセーフ機能が充実していて、信頼性が高いです。壊れたセクタを検出したらそこを避けてくれるので、過去に文鎮化していたラズパイピコに新生R2P2をインストールして再利用できています。偉い。
引き換えに、ラズパイピコ版R2P2の便利機能のひとつだった「ファイルのドラッグ&ドロップ」はできなくなりました。もはやパソコンはR2P2をMSCデバイスとして認識しません。ですから、R2P2 Web TerminalやRuntimeGemsマネジャが必要になったのです。
これらのツールを支える技術
はい、なんと言ってもPicoRuby.WASMです。ブラウザ上でRubyをmrbへコンパイルしたり、R2P2とWeb Serial越しに通信してファイルをアップロードしたりダウンロードしたり。これらのコードはPicoRubyで書かれていて、マイコンで動いている組み込みライブラリとまったく同じコードがブラウザで動いています。
このPicoRuby.WASMについて、RubyKaigi 2026の初日に発表します2。時間に限りがあるから、この記事に書いたツールについては話しません。PicoRubyで書いたSPAフレームワークについて話します。この記事を読んでくれたみなさんなら特に、PicoRubyの「どこでもRubyワールド」がぐんぐん広がっていることを感じていただけるはずです。お楽しみに。