けいぞうのメモ帳

言語設計のお勉強

mrubyの実行バイナリをbuild_config.rbごとにswitchしたい話

このエントリーはmruby Advent Calendar 2016 - Qiita の7日目として書かれました。

昨日はyharaさんの 細かすぎて見つからなかったmrubyの非互換 - NaCl非公式ブログ でした。 細かいところを詰めていく技術はぜひ見習いたいものです。

あらすじ

mrubyはライブラリであるmrbgemをstatic linkして使うため新しいgemを使うたびにリビルドが必要になります。
僕は普段、作業ディレクトリごとにmrubyのrepoを拾って来て作業しているのですが、少々かったるいもので、 開発中にbuild_config.rbが異なるmrubyバイナリを自由に変更できないかなーと思うときがありました。
例えば

  • mruby-mtestを組み込んでいる or いない。
  • mruby-json or mruby-iijson or mruby-pjson 違い
  • 正規表現ライブラリ違い

あたりです。 なのでmrubyバイナリを管理するCLIを実装しています。 Goで書くか迷ったのですが、言語のエコシステムはその言語で作りたい点からmruby-cliを用いています。

github.com

まだ全然動かない。ごめんね。 今週末には動くようにしておくので...

用例

$mrbox --name sample --file build_config.rb build 
$mrbox -n sample mruby sample.rb

とするとbuild済みmrubyバイナリを呼び出してsample.rbを実行するようにする予定です。

雑記

rubyで言えばbundler、仕組みはhaskellのstackを大いに参考しています。 haskellのstackはコンパイラのインストールもマネージャーの方で管理しているのでそのへんの参考とします。

コマンドの実行時にmrubyバイナリを指定する方法はどうしようかとか、名前がダサいから絶対に変えようとか、
mrbenvって名前をつけたかったけどrbenvとサブコマンドを揃える気はさらさらないから候補から外したとか
色々ありますが、来年1/31日をめどにv1.0.0にするつもりなのでその日までは破壊的な変更があってもお目こぼしください。

なにかご意見がありましたらブコメgithub issue、ツイッターあたりに書いておいていただけると読みやすくて助かります。

GitHub - qtkmz/mrb: command line tool for mruby とか [GitHub - bovi/mgem: A program to manage GEMs in mruby にpull requestしてしまうのも一つの形だと思うので、そのへんも含めてご意見ください。

明日のmruby アドベントカレンダーの方は絶賛募集中です

http://qiita.com/advent-calendar/2016/mruby