この記事はmrubyファミリ (組み込み向け軽量Ruby) Advent Calendar 2024の9日目の穴埋め記事です
rfコマンドのアップデートを続けていくうえで、他プロダクトでも再利用できそうな機能を切り出してmrbgem(以下mgem)にしたのでそれのご紹介。
mruby-commit-id
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
CRubyのMiniTestのObject#.stubのmrubyポーティング。 シンプルだけどシュッと扱えるので便利。mruby本体にあってもいい気がする。
mruby-yyjson
JSONの高速パースをウリにしたyyjsonを使ったmruby-yyjsonを作った。 また、rfで必要だったので色付けして出力することもできる。 yyjsonのAPIが扱いやすくて実装が楽しかった記憶。
mruby-rapidyaml
yyjsonに続いてYAMLの高速パーサーrapidyamllを使ったmruby-rapidyamlを作った。 mruby-yamlはmgemに含まれているlibyamlをビルドする必要があるが、rapidyamlはシングルヘッダでビルドできるのでその分ビルドも早いはず。 しかし、rapidyamlはC++のライブラリなので、必然的にmrubyもC++でビルドする必要があるので利用環境によってはマッチしないかもしれない。 ちなみに、このmgemも色付け出力をサポートしている。便利。
mruby-terminal-color
mruby-yyjsonやmruby-rapidyamlの色付けに使用しているmgem。 CRubyのraibowあたりを参考に設計してた気がする…たぶん(忘れた)。 こういったmgemは誰かが作っていて車輪の再々xN発明だけど、自分がほしい機能がなかったので作った(はず)。
番外編: awkでmrubyを実行できるようにした
mgemじゃないネタ枠。 思いついてから案がいシュッと実装できて面白かった記憶。