最近色々と選択肢のあるコンパクトなLinuxボード上でmruby使ったら幸せになれるかなって思ったのがきっかけでmrubyの勉強開始します。
とりあえずの目標は、mrubyでMQTTクライアントを実装することですが、当面は基礎固めを優先してmrubyの機能を一つ一つ学んでいこうと思います。
MQTTはM2M、IoT分野などで今後ひろがっていくことが想定されるPubSubプロトコルです。メッセージのサイズが小さく、最初からネットワーク品質の悪い場合が有る回線(3G回線など)で使用される事を想定した設計になっています。
参考: HTTPからMQTTへ
インストール
インストールの方法とかも色々調べて纏めておこうかと思いましたが、こちらにとても解り易く纏めてあったので詳細はスキップで。
なお、mrubyをビルドすると最終的に実行可能バイナリが./bin以下に作られます。僕はこれを /usr/local/mruby/bin にコピーして使用しています。
ソースコードをダウンロード
mrubyは軽量Rubyフォーラムから安定板がダウンロードできますが、まだ活発に開発されていますので実際の製品開発にしようする段階まではgithubのmasterを追いかけた方がいいと思います。
$ git clone https://github.com/mruby/mruby.git
###ビルド設定
$ cd mruby
ビルドの設定ファイルはbuild_config.rb
です。
とりあえず試しているところなので僕は殆どデフォルトのままですが、gemboxの設定をflull-core
に変えています。
こうすると./mrbgems
にあるライブラリを全て読み込んでくれるようですが、その分ビルドしたバイナリは大きくなるでしょうから使用する環境によって帰る必要が有ると思います。
デフォルトではdefault
です。当面これで問題ないと思います。
conf.gembox 'default'
./mrbgems
に置いたライブラリを全て読み込みたい場合はfull-core
に設定。
conf.gembox 'full-core'
###ビルド
$ rake
###インストール
出来上がったバイナリをパスの通った場所にコピーします。
$ mkdir -p /usr/local/mruby/bin
$ cp bin/* /usr/local/mruby/bin/
$ echo "export PATH=/usr/local/mruby/bin:\${PATH}" >> ~/.profile
$ source ~/.profile
とりあえず Hello World
まずは定番のHello Worldしてみます。ファイルにコードは書かずにirbのmruby版であるmirbからやってみます。ターミナルから
$ mirb
と入力するとmirbの対話シェルが立ち上がります。おもむろにputs "Hello World"
してみます。
> puts "Hello World"
Hello World
=> nil
おk。でもこれだけじゃ面白くないので、ファイルにコードを書いてコンパイルして実行してみます。
勉強用に適当にディレクトリ作ってそこに移動します。
$ mkdir -p mruby-learn/hello_world
$ cd mruby-learn/hello_world
Hello Worldでは明らかに必要ないですが、あえてモジュールとクラスを使って書きます。
module Hello
class World
def say!
puts "hello world"
end
end
end
hw = Hello::World.new
hw.say!
とりあえずコンパイルせずにそのまま実行。
$ mruby hello_world.rb
hello world
おkです。続いてコンパイルしてみます。
$ mrbc hello_world.rb
$ ls
hello_world.mrb hello_world.rb
拡張子がmrbのファイルができました。
実行する時はmrubyコマンドに"-b"をつけて実行するようです。
$ mruby -b hello_world.mrb
hello world
おー。次は基本クラスのお勉強しよう。多分だいたいRubyと同じだけど一応。