mrbgemsを作ってみる方法

下記が一番分かりやすかった 5分でつくる mrbgems

  • 作成するmrbgemsのディレクトリを作る, work/yournamegems とかなんでもよい
  • workディレクトリにmruby持ってくる、中身のbuild_config.rbをいじるのでリンクじゃなくてgit cloneしたやつのほうが最初はいいかな
  • mrubyもってきたら、mruby/build_config.rb に自分のmrbgemsの名前を記載する、例えば下記な感じ
MRuby::Build.new do |conf|
...
    conf.gem '../yournamegems'
...
end

あとはyournamegems内にRubyスクリプトを設置するなどすればよい

例えば下記

work/yournamegems/yourname.rb

class Yourname
    def initialize name
        @name = name
    end
    def yourname
        puts @name
    end
end


ふむ

  • mrubyだけで実装
  • C言語だけで実装
  • C言語 + mrubyで実装
  • といろいろできるらしい
  • よくみたら build_config.rbコメントアウトされてるかたちで
  # 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 :github => 'masuidrive/mrbgems-example', :checksum_hash => '76518e8aecd131d047378448ac8055fa29d974a9'
  # conf.gem :git => 'git@github.com:masuidrive/mrbgems-example.git', :branch => 'master', :options => '-v'

みたいなのあるからこのディレクトリの中身みてみてためしてみるのがいいのかなぁ

  • たとえば # conf.gem 'examples/mrbgems/ruby_extension_example'のところ
  • 中身のrbスクリプトが下記
class RubyExtension
  def RubyExtension.ruby_method
    puts "A Ruby Extension"
  end
end
> RubyExtension.ruby_method
A Ruby Extension
 => nil


というわけで下記のようにdefを追加して

class RubyExtension
  def RubyExtension.ruby_method
    puts "A Ruby Extension"
  end

  def extraYK
    puts "extra define from yk"
  end
end

下記のようにmirbで実行することもできる(追加したらコンパイルが必要、たぶん)

> y = RubyExtension.new
 => #<RubyExtension:0x10c4254b0>
> y.extraYK
extra define from yk
 => nil
> 
  • ではまぁなんとなくrubyコードをmruby/build_conf.rbに反映させてmrbgemsを追加する方法というのはわかった
  • あとはC言語と組み合わせるとどうなるんかとか, minirakeってなんやろかとか調べてみる