【IRBは人間がつくっているんだよ編】にて、IRBチームの他のメンバの発表を紹介しました。 本稿は、わたくしの発表Build Your Own SQLite3についてです。 スライドはここにあります。
トークの概要はこうです。SQLite3という用途の広いデータベースがあります。これを任意の環境で使用するためには、”VFS(Virtual FileSystem)レイヤ” を書く必要があります(UNIX系やWindows向けのVFSレイヤはSQLite3ソース内に実装されています)。このトークを聴けば、あなたも “俺のSQLite3” をビルドできるようになります。
ちなみに、このしまもんブログの記事もSQLite3データベースに保存されています。
本題
この記事では、Rubyをマイコンで動かすこと(つまり普段のPicoRuby開発。といっても趣味レベルですけど)のモチベーションと、その開発の一部についてRubyKaigiで披露するモチベーションには若干の違いがあって、でも両方やっていくんだぜ、まあ結局はひとつなんだけどな、ということを書きます(なに言ってんだろう)。
普段のPicoRuby開発のモチベーションというのは、PicoRubyエコシステムをMicroPythonに負けないようなものへと育てて、IoTやロボット開発や教育分野などにRubyプログラミングを届けることです。
他方、今回のRubyKaigiでは、「マイコンにあんまり興味がないRubyist」にも関心を持ってもらえるような技術トピックを抽出しました。 ただたんに「マイコンでRubyとSQLite3が動いたよー」っていう話ではないのです。
Rubyから掘り下げるコンピュータの世界
具体的に説明しましょう。 今回の発表に、このような図を入れました:
図の左側はLinux(UNIXまたはPOSIXと言っても大差ないです。本稿ではLinuxとします)、右側はベアメタル(OSなし)マイコンです。
左ではCRuby、右ではPicoRubyがそれぞれ SQLite3::Database.open
を呼んだとき、そこからなにが起きるかを表現しています。
Linuxは、CRuby -> sqlite3 gem -> libsqlite3 -> System call interface -> …ときれいにレイヤが分かれています。 責任の分界がはっきりしています。 これは基本的には人類の叡智の結晶でして、アプリ開発のしやすさやメンテナンス性や拡張性や移植性やセキュリティなどのバランスをとったレイヤ構造です(たぶん)。
対して右側のマイコンは、ぜんぶPicoRubyです。ぜんぶをPicoRubyの中に実装しています。 詳しくは、発表の録画が公開されたらご覧ください。
追記:録画が公開されました→https://rubykaigi.org/2023/presentations/hasumikin.html#day3
ここで強調したいのは、PicoRubyにおいて SQLite3::Database.open
からスタートする一連の動作が、最終的にハードウェア(SDカード)へ届くまでのプロセスは、LinuxにおいてSSDが動くまでのプロセスと本質的に同じだという点です。
ここがマイコンプログラミングの楽しいところです。 パブリックネットワークに露出しない(させない)ことでセキュリティについての考慮を減らせるし、そもそもリソースが小さいから当然なのですが、いろいろすっとばして実装することになります。 個人の趣味レベルの開発でも、Rubyのレイヤからハードウェア駆動のレイヤまで一気通貫に組み立てることが比較的に容易です。
初心者から強者まで
マイコンプログラミングもLinuxプログラミングも、コンピュータを動かすことの本質はいっしょですから、わたくしのPicoRubyトークを聴けば、パソコンの仕組みの理解にも役立つはずです。 プログラミング初心者が聴いてくれれば、コンピュータへの興味を深められるようなトークをできたのではないかと自負しています。
OSやデバイスドライバなどのサポートを受けられない環境に足りていないパーツをどうやって埋めていくかのヒントは、Linuxの仕組みを観察することから得ています。 Linuxで実現されていることをひとつずつ取り出して、マイコンへ適用すべきものと省略できるものへと分け、必要なものを実装します。 決して、腕力で無理矢理に解決しているのではありません。
もしかしたら、高レベルから低レベルまでを自前で書くことが「力業」に見えたかもしれません。 まあ、そういう面があることは否定しません。 RubyKaigiは “コード自慢大会” ですから、この点で歴戦の強者たるRubyistたちにも少しくらい訴えかけるようなトークを演出してはいます。 テックトークは “総合格闘技” なので。
たのしいマイコンRuby
最近の十数年間で、Webシステムはずいぶんと高度化しました。 RubyがRailsのためばかりに使われるのだとすると、入門の敷居が高いままです(もちろん、Rails Girlsの取り組みは素晴らしいものです)。
ワンチップマイコンはコンピュータを理解するのに最適な題材のひとつであり、マイコンでRubyを動作させることは、Rubyが世界とつながる道を敷くことだと考えています。 RubyがRailsを通じて世界とつながっているのとは、別の道です。 道は複数あるのがよいと思います。
そして以上は、「マイコンでRubyが動くとなにがうれしいのか?」という “よくある質問” への回答のひとつでもあります。