ぶていのログでぶログ

思い出したが吉日

今年作ったmrubyのmrbgemまとめ

この記事はmrubyファミリ (組み込み向け軽量Ruby) Advent Calendar 2024の9日目の穴埋め記事です


rfコマンドのアップデートを続けていくうえで、他プロダクトでも再利用できそうな機能を切り出してmrbgem(以下mgem)にしたのでそれのご紹介。

mruby-commit-id

github.com tech.buty4649.net

mrubyのコミットIDをMRUBY_COMMIT_ID/MRUBY_COMMIT_ID_SHORTというグローバル定数で取得できるようにするmgem。

$ ./bin/mruby -e 'puts MRUBY_COMMIT_ID'
f2dc44215c8207e8ba7c161fd699c55075a266e1

$ ./bin/mruby -e 'puts MRUBY_COMMIT_ID_SHORT'
f2dc44215

mrubyは細かくアップデートされていることもあり、タイミングによってmrubyの挙動が変わるということが稀に起こる(e.g. https://github.com/buty4649/rf/issues/246 )。 そこで、いつのmrubyのソースコードを使っているかをバイナリから確認できるようにするために、このmgemを作った感じ。

mruby-test-stub

github.com tech.buty4649.net

CRubyのMiniTestのObject#.stubのmrubyポーティング。 シンプルだけどシュッと扱えるので便利。mruby本体にあってもいい気がする。

mruby-yyjson

github.com tech.buty4649.net

JSONの高速パースをウリにしたyyjsonを使ったmruby-yyjsonを作った。 また、rfで必要だったので色付けして出力することもできる。 yyjsonのAPIが扱いやすくて実装が楽しかった記憶。

mruby-rapidyaml

github.com tech.buty4649.net

yyjsonに続いてYAMLの高速パーサーrapidyamllを使ったmruby-rapidyamlを作った。 mruby-yamlはmgemに含まれているlibyamlをビルドする必要があるが、rapidyamlはシングルヘッダでビルドできるのでその分ビルドも早いはず。 しかし、rapidyamlはC++のライブラリなので、必然的にmrubyもC++でビルドする必要があるので利用環境によってはマッチしないかもしれない。 ちなみに、このmgemも色付け出力をサポートしている。便利。

mruby-terminal-color

github.com

mruby-yyjsonやmruby-rapidyamlの色付けに使用しているmgem。 CRubyのraibowあたりを参考に設計してた気がする…たぶん(忘れた)。 こういったmgemは誰かが作っていて車輪の再々xN発明だけど、自分がほしい機能がなかったので作った(はず)。

番外編: awkでmrubyを実行できるようにした

tech.buty4649.net

mgemじゃないネタ枠。 思いついてから案がいシュッと実装できて面白かった記憶。