賢くなりたいトイプードルの日記

データサイエンス系の話をメインにしていきます

RaspberryPiにrubyとmrubyを導入

ラズパイのバージョンは以下の通り

$ cat /etc/debian_version

10.8

ラズパイにRubyを入れる

bashでwhich rubyしても何も出力されない。ラズパイにrubyが入ってなかったのでrbenvを使って入れる。

$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

$ cd .rbenv
$ mkdir plugins
$ cd .plugins
$ git clone git://github.com/sstephenson/ruby-build.git

$ cd ~
$ source .bash_profile

次に ruby をインストールするのに必要なモジュールもインストールする。

$ sudo apt-get install autoconf
$ sudo apt-get install libssl-dev libyaml-dev
$ sudo apt-get install bison build-essential
$ sudo apt-get install libreadline6-dev
$ sudo apt-get install libncurses5-dev

rubyのバージョン確認

2.5.8
2.6.6
2.7.2
3.0.0
jruby-9.2.15.0
mruby-2.1.2
rbx-5.0
truffleruby-21.0.0
truffleruby+graalvm-21.0.0

最新のバージョンをインストールする。結構時間がかかる。自分の場合は30分くらいかかった。

$ rbenv install 3.0.0

rubyのバージョン3.0.0を使うことを明示する

$ rbenv global 3.0.0

確認

$ rbenv versions
* 3.0.0 (set by /home/pi/.rbenv/version)

RaspberryPi の GPIO を使う場合は root 権限が必要。
sudo でも ruby が使えるようにシンボリックリンクを張っておく。

$ sudo ln -s ~/.rbenv/shims/ruby /usr/bin/ruby
$ sudo ln -s ~/.rbenv/shims/irb /usr/bin/irb

ラズパイにMRubyを入れる

mrubyを入れる

$ git clone https://github.com/mruby/mruby.git
Cloning into 'mruby'...
 remote: Enumerating objects: 133, done.
remote: Counting objects: 100% (133/133), done.
remote: Compressing objects: 100% (77/77), done.
remote: Total 61770 (delta 42), reused 100 (delta 32), pack-reused 61637
Receiving objects: 100% (61770/61770), 16.27 MiB | 1.19 MiB/s, done.
Resolving deltas: 100% (38712/38712), done.

$ cd mruby
$ ls
AUTHORS          Makefile      benchmark        lib                   src
CODEOWNERS       NEWS          build_config     minirake              tasks
CONTRIBUTING.md  README.md     build_config.rb  mrbgems               test
Doxyfile         Rakefile      doc              mrblib
LEGAL            TODO.md       examples         mruby-source.gemspec
LICENSE          appveyor.yml  include          oss-fuzz

以下のようにパスの指定。

sudo mkdir /usr/local/mruby
export MRUBY_HOME=/usr/local/mruby
export PATH=$PATH:$MRUBY_HOME/bin

minirakeでビルド。mrbgems/default.gemboxやbuild_config/default.rbなどにmgemを追加している場合はそれもビルドされる。

$ ruby ./minirake
CPP   src/array.c -> build/host/src/array.pi
CPP   src/backtrace.c -> build/host/src/backtrace.pi
CPP   src/class.c -> build/host/src/class.pi
CPP   src/codedump.c -> build/host/src/codedump.pi
<中略>

標準では、これでmrubyフォルダにbinフォルダが生成される。

以下コマンドでbinフォルダを/usr/local/mruby/にコピー

sudo cp -rfp bin /usr/local/mruby/

 下記の様に実行すると、インタラクティブにmrubyを試すことができる。

$ ./bin/mirb 
mirb - Embeddable Interactive Ruby Shell
 
This is a very early version, please test and report errors.
Thanks :)
 
> puts "Hello World"
Hello World
 => nil
> 

mrbgems/default.gembox に使いたいライブラリを追加。

conf.gem :github => "mattn/mruby-xquote"
conf.gem :github => "matsumoto-r/mruby-sleep"
conf.gem :github => "iij/mruby-io"
conf.gem :github => "iij/mruby-regexp-pcre"
conf.gem :github => "iij/mruby-require"
conf.gem :github => "iij/mruby-dir"
conf.gem :github => "iij/mruby-env"

ビルド

$ ruby ./minirake

ビルド環境をいったんクリーンにしたい場合は、

ruby ./minirake clean

とすると、mruby/bin以下が空になる。

mrbファイルを実行

次にmrubyコマンドでrbファイルを実行・コンパイルしてみる。

$ mkdir ~/raspi_dir
$ cd ~/raspi_dir

# ~/raspi_dirでmrubyコマンドを使えるようにシンボリックリンクを作成
$ sudo ln -s ~/mruby/bin/mruby
$ sudo ln -s ~/mruby/bin/mrbc
$ sudo ln -s ~/mruby/bin/mirb

$ touch hello.rb
$ vim hello.rb
module Hello
  class World
    def say
      puts "Hello World"
    end
  end
end

hw = Hello::World.new
hw.say

mrubyコマンドでhello.rbを実行できる

$ mruby hello.rb
Hello World

mrbcでコンパイルするとmrbファイルが生成される

$ mrbc hello.rb
$ ls
hello.rb hello.mrb

mruby -bコマンドでmrbを実行できる

$ mruby -b hello.mrb
Hellow World