2013/03/22


今朝送った pull-req がマージされ、mruby が xquote をパースする様になりました。
CRuby では当たり前の機能ですが、mruby が解釈出来る様になって嬉しい人もいるかと思います。
今回の修正により、`/bin/ls` もしくは %x(/bin/ls) といったコードが実行されると mruby は Kernel モジュールの ` というメソッドを実行します。ですので例えば
mattn/mruby-xquote - GitHub
https://github.com/mattn/mruby-xquote
この様に Kernel モジュールに ` メソッドを実装する mrbgems を使用する事で `ls /path/to/target`.split("\n").sort.each do |x|
  # x を使って処理を書く
end
この様な処理を書ける様になります。もちろん mrbgems なので「俺、そんな機能いらないから」って人は使わなければいいだけとなります。また今回は popen を使いましたが各 OS 毎に違った実装というのもあるかもしれません。各環境独自の ` にすり変えられる事になります。
なお、mruby-xquote については IIJ さんが作られている mruby-process (Windows版は私の mruby-process-win32) に吸収して頂ける様、お願いするつもりなので取り込まれた暁には無くなるモジュールとなる予定です。
だいぶ CRuby に追いついてきて、ちょっとしたバッチ処理を書くのであれば CRuby と遜色なくなってきました。
require はあるし、IO はあるし、ありとあらゆる物が mruby で動くようになってきました。(参考: RelatedProjects)

最初に mruby を知り触りだした頃はオモチャでしかありませんでしたが、最近になってぐっと実用範囲が広まってきましたね。
Posted at by



2013/03/14


MRuby ユーザといえば Twitter でちょっと mruby についてつぶやいただけで名前の先頭に「M」が付く人達が一斉に返信してくるイメージがありますが(要出典)、もっとオープンに語らいたい事もあるかと思います。
MRuby をゆるふわと語ろうというチャットルームを Lingr に作ったので、MRuby に興味のある方は参加してみてはどうでしょうか。
Easy talking about MRuby – Lingr
http://lingr.com/room/mruby
MRuby を触った事ない人や、興味はあるけどどうやって始めたらいいか分からない人も気兼ねなく喋っていただければと思います。
また bot も作れるので MRuby で面白い bot を作ったら報告してみてはどうでしょうか。
Posted at by



2013/03/13


mruby で作られた bot を lingr 上で動作させる事に成功した。
mattn/mruby-lingrbot - GitHub
https://github.com/mattn/mruby-lingrbot
build_config.rb はこんな感じ。
MRuby::Build.new do |conf|
  toolchain :gcc

  conf.gem :git => 'https://github.com/mattn/mruby-sha1.git'
  conf.gem :git => 'https://github.com/mattn/mruby-sinatic.git'
  conf.gem :git => 'https://github.com/mattn/mruby-http.git'
  conf.gem :git => 'https://github.com/mattn/mruby-uv.git'
  conf.gem :git => 'https://github.com/mattn/mruby-json.git'
  conf.gem :git => 'https://github.com/mattn/mruby-sandbox.git'
end
そして Sinatic を使ったコードはこんな感じ。 #!mruby

sb = Sandbox.new

get "/lingr" do |rparam|
  "ワシもmrubyじゃ"
end

post "/lingr" do |rparam|
  json = JSON.parse(r.body)
  ret = ''
  json["events"].each do |e|
    if e["message"] && e["message"]["text"]
      m = e["message"]["text"].split(" "2)
      if m[0] == '!mruby'
        if m.size == 1
          ret = 'ワシがmrubyじゃ'
        elsif m.size == 2
          ret = sb.eval(m[1])
        end
      end
    end
  end
  ret
end

Sinatic.run :port => 8888
いい感じに Sinatra してていいですね。!mruby 1+2 みたいに発言すると、eval して返してくれるのですが、そのまま eval させると、UV の API でセキュリティ的にまずいので、Sandbox を用意しました。
mattn/mruby-sandbox - GitHub
https://github.com/mattn/mruby-sandbox
これを使うと実行しているmrubyとは別のスタックマシン上で制限された mruby が動作します。とある人に「欲しい」と言われて10分程度で作りました。今のところ、ご機嫌よく動いてます。
ちなみにこの bot にアイコンを付けたいので、誰か mruby のアイコン描いて下さい。お願いします。
icon ・ Issue #998 - mruby/mruby - GitHub
https://github.com/mruby/mruby/issues/998
試験的なのでちょくちょく落とすと思います。
Posted at by