ujunのブログ

mruby 触り始めました

最近、mrubyを触り始めています。 自分用に最初に作ったのは、SQLite(Google Chromeの閲覧履歴データ)からselectするmrubyのコードをCに組み込んでみたものです。

成果物

github.com

取り急ぎOSXの動作しか考慮しておりません。。
以下のようにビルドするとバイナリができます。

gcc -o gchist -I../path/to/mruby/mrbgems -I../path/to/mruby/include -I/usr/include gchist.c -lsqlite3 ../path/to/mruby/build/host/lib/libmruby.a

動作としては、以下のように実行すると、Google Chromeの閲覧履歴からタイトルのリストを標準出力に出すだけ。

$ ./gchist 
Google
GAE で Perl を動かせるなら - あくる日
QuickTime でサポートされるメディア形式を拡充する - Apple サポート
QuickTime でサポートされるメディア形式を拡充する - Apple サポート
QuickTime でサポートされるメディア形式を拡充する - Apple サポート
Play Windows Media on your Mac | Telestream Flip4Mac | Overview
Play Windows Media on your Mac | Telestream Flip4Mac | Overview
firefox chrome - Google 検索
・・・
・・・

または、引数を指定すると、SQL文のLIKEのようにして、タイトルの文字列とマッチするものだけを表示します。

$ ./gchist centos
Apache HTTP Server Test Page powered by CentOS
番外 VirtualBoxにインストールしたCentOS6の画面解像度を800×600以上に設定する方法 | Web 覚書ノート
【CentOS 5.5】Grubの設定ファイルが見つからない【カーネルパニック】 - Yahoo!知恵袋
ubuntu上のCentOSを再起動したときにカーネルパニックが発生する場合の対処 - think-t の晴耕雨読
Virtual PC 2007の導入記録(CentOS4.6) - 走り続けたい社内SEブログ
[CentOS] Docker の Remote API を HTTP 経由で使えるようにする - Qiita
Apache HTTP Server Test Page powered by CentOS

参考情報

  • mrubyのビルド

blog.matsumoto-r.jp

非常にわかりやすくて、とても助かります!!

  • 機能のアイディア

以下のアイディアを参考にさせていただき、CLIChromeの履歴を一覧表示する機能を作成しました。

github.com

日経Linuxを立ち読みしていた時に知ったプロダクトです。

日経Linux - 本誌目次 - 2015年3月号:ITpro

mruby_config

SQLiteを使うので、

mgem add mruby-sqlite3

をしておきます。

いろいろなmgemを試していた名残で、不要なものもたくさん入ってしまっていますが、現在のbuild_config.rbは以下のよう。

MRuby::Build.new do |conf|
  toolchain :gcc

  conf.bins = %w(mrbc)

  # mruby's Core GEMs
  conf.gem 'mrbgems/mruby-bin-mirb'
  conf.gem 'mrbgems/mruby-bin-mruby'
  conf.gem 'mrbgems/mruby-array-ext'
  conf.gem 'mrbgems/mruby-enum-ext'
  conf.gem 'mrbgems/mruby-eval'
  conf.gem 'mrbgems/mruby-exit'
  conf.gem 'mrbgems/mruby-fiber'
  conf.gem 'mrbgems/mruby-hash-ext'
  conf.gem 'mrbgems/mruby-math'
  conf.gem 'mrbgems/mruby-numeric-ext'
  conf.gem 'mrbgems/mruby-object-ext'
  conf.gem 'mrbgems/mruby-objectspace'
  conf.gem 'mrbgems/mruby-print'
  conf.gem 'mrbgems/mruby-proc-ext'
  conf.gem 'mrbgems/mruby-random'
  conf.gem 'mrbgems/mruby-range-ext'
  conf.gem 'mrbgems/mruby-sprintf'
  conf.gem 'mrbgems/mruby-string-ext'
  conf.gem 'mrbgems/mruby-string-utf8'
  conf.gem 'mrbgems/mruby-struct'
  conf.gem 'mrbgems/mruby-symbol-ext'
  conf.gem 'mrbgems/mruby-time'
  conf.gem 'mrbgems/mruby-toplevel-ext'

  # user-defined GEMs
  conf.gem :git => 'https://github.com/iij/mruby-io'
  conf.gem :git => 'https://github.com/iij/mruby-dir'
  conf.gem :git => 'https://github.com/iij/mruby-pack'
  conf.gem :git => 'https://github.com/iij/mruby-socket'
  conf.gem :git => 'https://github.com/matsumoto-r/mruby-simplehttp'
  conf.gem :git => 'https://github.com/matsumoto-r/mruby-httprequest'
  conf.gem :git => 'https://github.com/mattn/mruby-json'
  conf.gem :git => 'https://github.com/mattn/mruby-http'
  conf.gem :git => 'https://github.com/matsumoto-r/mruby-mrbgem-template'
  conf.gem :git => 'https://github.com/matsumoto-r/mruby-sleep.git'
  conf.gem :git => 'https://github.com/mattn/mruby-sqlite3.git'
  load '/Users/juchino/myruby/src/ujun/mruby_cross_compiler/mruby-cross-compile-on-mac-osx/mrbgem.rake'
end

雑感

mruby自体は、組み込み機器の文脈で話題になることが多いように思いますが、私の場合は、ちょっと目的が違います。

私の場合、制約があってRubyの処理系を導入できないような環境だけど、Rubyツール書きたい!となることが結構あります。このようなときに、軽いバイナリ一個持って来ればrubyでいろいろ書けてしまうmrubyは、非常に有難いです。

せっかく触り始めたのだし、今後業務で活用していければと思います。