mruby 触り始めました
最近、mrubyを触り始めています。 自分用に最初に作ったのは、SQLite(Google Chromeの閲覧履歴データ)からselectするmrubyのコードをCに組み込んでみたものです。
成果物
取り急ぎ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のビルド
非常にわかりやすくて、とても助かります!!
- 機能のアイディア
以下のアイディアを参考にさせていただき、CLIでChromeの履歴を一覧表示する機能を作成しました。
日経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は、非常に有難いです。
せっかく触り始めたのだし、今後業務で活用していければと思います。