mruby-mrbgem-templateを使ってmrbgemをつくる方法

はじめに

唐突に mrbgem を作りたくなる時、ありますよね。そんな時、なにかいい方法無いかなと思ったら @matsumotory さんの mruby-mrbgem-template というものが非常に便利だったので備忘録がてら使い方を記します。

環境

  • OS X El Capitan
  • mruby 1.3.0
  • mruby-mrbgem-template commit cb5c0a3887d(2017/10/4時点の最新バージョン)

使い方

導入

mruby を取得する

おそらく master でもよいのですが、バージョンを明確にしたかったので mruby 1.3.0 を取得して build することにしました。

$ wget https://github.com/mruby/mruby/archive/1.3.0.zip
$ mv 1.3.0.zip mruby-1.3.0.zip
$ unzip mruby-1.3.0.zip
$ cd mruby-1.3.0
mruby-mrbgem-template のインストール

mruby-1.3.0/build_config.rb を編集し、mruby-mrbgem-template を使用する gem として追加します。具体的には次のように編集します。

MRuby::Build.new do |conf|
  # load specific toolchain settings

  # Gets set by the VS command prompts.
  if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
    toolchain :visualcpp
  else
    toolchain :gcc
  end

  enable_debug

  # Use mrbgems
  # conf.gem 'examples/mrbgems/ruby_extension_example'
  # conf.gem 'examples/mrbgems/c_extension_example' do |g|
  #   g.cc.flags << '-g' # append cflags in this gem
  # end
  # conf.gem 'examples/mrbgems/c_and_ruby_extension_example'
  # conf.gem :core => 'mruby-eval'
  # conf.gem :mgem => 'mruby-io'
  # conf.gem :github => 'iij/mruby-io'
  # conf.gem :git => 'git@github.com:iij/mruby-io.git', :branch => 'master', :options => '-v'
  # ↓↓↓ 追加
  conf.gem github: 'matsumoto-r/mruby-mrbgem-template'
  conf.gem '../mruby-nmea'
  # include the default GEMs
  # (以下省略)
mruby の build

mruby を build します。単純に rake コマンドを実行するだけです。

$ rake
create.rb の作成

mruby-1.3.0 の直下に create.rb を作成します。中身は、次の通り。paramsの各値を編集します。

params = {
  :mrbgem_name    => 'mruby-example',   # mrbgemの名前
  :license        => 'MIT',             # ライセンス
  :github_user    => 'miyohide',  # GitHubのユーザ名
  :mrbgem_prefix  => '..',   # mrbgemのディレクトリのパス
  :class_name     => 'Example',  # 生成するクラス名
  :author         => 'miyohide',  # 作者名
}

c = MrbgemTemplate.new params
c.create
雛形作成

これでmrbgemの雛形をつくる準備が整ったので、

$ ./bin/mruby create.rb

を実行すると、mrbgemの雛形が作られます。上記のようにcreate.rbを設定すると、

[~/work/mruby-1.3.0]$ ./bin/mruby create.rb
Generate all files of mruby-example
create dir : ../mruby-example
create dir : ../mruby-example/src
create file: ../mruby-example/src/mrb_nmea.c
create file: ../mruby-example/src/mrb_nmea.h
create dir : ../mruby-example/mrblib
create file: ../mruby-example/mrblib/mrb_nmea.rb
create dir : ../mruby-example/test
create file: ../mruby-example/test/mrb_nmea.rb
create file: ../mruby-example/mrbgem.rake
create file: ../mruby-example/Rakefile
add gitignore entry: ../mruby-example/.gitignore
create file: ../mruby-example/mruby-example.gem
create file: ../mruby-example/.travis.yml
create file: ../mruby-example/.travis_build_config.rb
create file: ../mruby-example/README.md
create file: ../mruby-example/LICENSE

  > create miyohide/mruby-example repository on github.
  > turn on Travis CI https://travis-ci.org/profile of miyohide/mruby-example repository.
  > edit your mruby-example code, then run the following command:

  cd ../mruby-example
  git init
  git add .
  git commit -m "first commit"
  git remote add origin git@github.com:miyohide/mruby-example.git
  git push -u origin master

  > finally, pull-request mruby-example.gem to mgem-list https://github.com/bovi/mgem-list

[~/work/mruby-1.3.0]$

という実行結果が出力され、mrbgem_prefix + / + mrbgem_name なディレクトリが作成されます。

あとは実装とテストを書くだけ

あとは、mrbgem_nameで指定したディレクトリに移動して、CやRubyで実装を書くだけです。mrblibディレクトリやlibディレクトリにそれぞれRubyとCでの実装を書き、testにテストを書くみたいです。

また、作成した直後でも rake test を実行することでテストを動かすことができます。

[~/work/mruby-example]$ rake test
git clone --depth=1 git://github.com/mruby/mruby.git
Cloning into 'mruby'...
(省略)
             mruby-example
             mruby-bin-mrbc - mruby compiler executable
             mruby-test - mruby test
================================================

>>> Test host <<<
(省略)
Total: 959
   OK: 959
   KO: 0
Crash: 0
 Time: 0.1 seconds
[~/work/mruby-example]$