けいぞうのメモ帳

言語設計のお勉強

mrbox -- mruby binary manager -- を改めて紹介する

mruby advent calendarで書いたmrubyのバイナリを管理するmruby-cli wareがとりあえず困らない程度に実装出来たのでご紹介します。

mruby

以前書いた記事を参照ください。mruby1.0.0だか1.1.0の頃の話ですが変わったところはないと思います。

keizobookman.hatenablog.com

動機

mrubyを使って開発をしているときに、必要なgemを組み込んだmrubyの実行バイナリが必要になります。 しかし、mrubyのライブラリはstatic linkでgemを加えたいときは毎回リビルドが必要になります。 さらに、開発・テスト・本番で組み込みたいgemが違う場合は結構あり、それを手元でよしなにする方法がありませんでした。

mrbox

github.com

そこで実装したのがmrboxです。mruby sandboxの略のつもりで名前をつけました。"えむるぼっくす"か"えむるおーえっくす"かは各自好きに読んでください。
MacとArch Linuxを移動しながら開発していたのでそれらでの挙動はある程度保証できます。Windowsはビルドが出来なかったのでまだサポートしていません。
手持ちのWindows機は開発環境が整っていないのでv1.5とかv2.0とかでの対応になるでしょう。

mrboxを実行するとhelpが出力されます。

$mrbox 
Usage: mrbox [mrbox options] [command] [mrbox options] -- [mruby option]
Author:Kouichi Nakanishi(keizo042)
mruby binary sandbox manager.

example:
---

$mrbox build --name hello
$mrbox mruby --name hello -- -e 'puts "Hello mrbox World!"'

---

At first, you must execute 'mrbox setup'. 
by default, it use default mruby repository.
if you specifiy option '--name', download mruby repo into local  and manage it as this name.

options
--file (-f)     ---   using specific mruby's build_config.rb
--name (-n)     ---   nameing mruby binary, it use when build,clean,mruby.mirb,mrbc

subcommands:
build -- build mruby binary.
clean -- clean up mruby repo
help -- print help and version
init -- intialize local mrbox sandbox
show -- show your named mruby binaries
setup -- setup global mrbox's mruby sandbox
update -- update mruby repo
mruby -- use mruby
mirb -- use mirb
mrbc -- use mrbc
mruby_strip -- use mruby-strip
edit -- edit build_config.rb
config -- config mrbox

使い方は上記のexampleにあるように、--nameでインストールするmrubyにネームタグをつけて、
--fileで使用するbuild_config.rbを指定します。
実行するときは、--nameでつけたネームタグを用いてそのmrubyリポジトリを呼び出しbuild,update,executeなどを行います。
オプションは -- で区切られ、--以前はmrbox, -- よりあとは実行するバイナリに渡されます。

mrbox setupコマンドはデフォルトのmrubyレポジトリを落としてくるなどの環境のイニシャライズで、
~/,mrboxディレクトリになんやかんやを用意するコマンドです。
今はディレクトリを掘っているだけですが、今後の機能拡張に伴いいろいろぶち込むことを想定しています。

$mrbox setup
$mrbox build --name hello
$mrbox mruby --name hello -- -e 'puts "Hello mrbox World!"'

一度buildしたプロジェクトのbuild_config.rbはもう一度build --name helloなどをするか

$mrbox edit --name hello

とすることで編集が可能です。
mrbox edit helloでも編集出来るようにもしようと考えています。

TODO

  • stdin/out/errの取り回し
  • bovi/mgem対応
  • gembox対応
  • mrbox configコマンド実装
  • mrbox initコマンド実装
  • mrbox cleanをmrbox rmにrenameして改めてmrbox cleanを実装
  • サブコマンドオプション整備
  • Windows対応

bovi/mgemを呼び出してmgem configのbuild_config.rbを用いることや、mruby-onig-regexpの関係でビルドから外しているWindowsビルド整備や、
internalで呼び出しているrm -rf などをmrubyに移植したり(mruby-fileutilsの整備が必要)、gitコマンドを叩いているところをmruby-gitとしてexportしたりなどを考えています。

とりあえず困っていたmrubyバイナリの管理は解消されていい感じになりました。
mruby advent calendarの記事でも宣言したように2019/1/31をめどにv1.0.0をリリースし破壊的変更を控えるようにします。
それまではインターフェースをガンガン破壊的に変更していくつもりなので人柱力が高いひとのご協力をお願いします。