JS::Object#to_poroを使えと言ったな、あれは嘘だ
もう一昨年のことになるのですね。PicoRuby.wasmをつくったという記事を書きました。
そのなかでPicoRuby.wasmではJS::Object#to_poroというメソッドによってJSオブジェクトをてきとう1にRubyオブジェクトへ変換できる、と書きました。しかし2026年現在、その仕様は捨てられました、というのが本稿の釈明です。
経緯
最近、ピコルビーを玉突きリネームしました。従前PicoRubyと呼んでいたmruby/c VMベースのビルドをFemtoRubyへリネームし、MicroRubyと呼んでいたmruby VMベースのビルドをPicoRubyへリネームしました。2
これはつまり、今後の主力製品はmruby VMベースだよ、という宣言でもあります。
そしてPicoRuby.wasmのバージョンを0.9.6から3.4.xへと一気に上げました。このタイミングで、VMがmruby/cからmrubyへと替わっています。バージョンナンバリングポリシーを変更し、PicoRubyもmrubyのバージョン番号に合わせることにしました。ただしメジャー番号(1番目の要素)とマイナー番号(2番目)までをmrubyに合わせ、パッチ番号(3番目)はPicoRuby独自に付けます。3
一気に実用性を上げたPicoRuby.WASM
正直なところ、mruby/cベースではCRubyと同じ感覚で利用できないし、バージョン0.9.6までのPicoRuby.wasmはビミョーだなーと思っていました。mruby/cの言語機能の制限や組み込みメソッドの少なさが、CRubyに慣れている皆の衆には厳しいだろうな、と。
ことしに入ってからVMをmrubyにしたことで、CRubyとの互換性が高まりました。CRubyユーザでもほとんど違和感なくPicoRuby.wasmのアプリを書けるはずです。そして実用性を考えながらJSラッパーを書きすすめた結果、JS::Object#to_poroというワークアラウンドでは不便であることが見えてきたため、ちゃんとto_sとかto_iとかを書くように仕様変更しました。まあ最初からそうだろうなとは思っていたのですけど。AIコーディングのおかげで、このあたりの面倒でチマチマした実装がやりやすくなりました。
RubyKaigi 2026にてPicoRuby.WASMについて話します
じつは昨年のRubyKaigi 2025でもmruby/cベースのPicoRuby.wasmについてトークすることは可能でしたが、1年寝かせました。熟成させた甲斐があったと思います。1年かけてVMを変更し、ちょっとずつ進化させてきた新生PicoRuby.wasmと、その上に構築したSPAフレームワークによる “たのしいフルスタックRubyライフ” をお届けします。4
-
いい意味でも悪い意味でもてきとう ↩
-
picoは
0.000 000 000 001、femtoは0.000 000 000 000 001↩ -
ちなみにR2P2もおなじ方針でバージョニングするようになっています。だから以下のリリース版PicoRubyもすでにmruby VMです https://github.com/picoruby/picoruby/releases/ ↩
-
なんと初日のキーノート直後: https://rubykaigi.org/2026/presentations/hasumikin.html ↩