mruby/cをdocker hubにあげた。要点5つ課題6つ。docker(129)


紹介(introduction)

mrubyは、Rubyの小型版です。
mruby/cは、mrubyコンパイラを利用して生成した拡張子mrbファイルを実行できるさらに小規模なruby実行環境です。
http://www.s-itoc.jp/activity/research/mrubyc/

mrubyはRubyの基本機能を持っており、
mrubyコンパイラは、Rubyコンパイラのまつもとゆきひろさんが書かれています。
https://github.com/mruby/mruby

基本的なrubyプログラムは、mruby, mruby/cで動きます。

<この項は書きかけです。順次追記します。>

要点1

mruby/cの実行は、拡張子mrbファイルをmrubcコマンド(Vertual Machine)で呼ぶ

要点2

mrbファイルは、mrbcコマンド(mrubyコンパイラ)でrbファイルから変換して作る.

要点3

mruby環境は
http://github.com/mruby/mrubyから
mrubyc環境は
http://github.com/mrubyc/mrubycから
取得しそれぞれmakeコンパイルする。

要点4

gcc, ruby, mruby, mrubycの版が違うと対応しないかもしれない

要点5

mrubycは小さく、各種CPUに対応して作り易い

経緯(history)

田中和明さんのmrubyの講義を聞いたのは過去2回。
田中和明さんのmruby/cの講義を聞くのは3回目。

これまでもすごく興味は持っていたが、自分が何をするといいか見当がついてなかった。

http://swest.toppers.jp/
swestでRuby, mruby, mruby/cの関係者6人の方とお話しをした。
まつもとゆきひろさんはじめ、Ruby, mruby, mruby/c関係者と同時に話をしたのは初めて。

自分が発言したのは「キーワード引数をコンパイラでmrubyで対応できるようにならないか」
参加者から「静的な解決をすればできるはずだけど、、、」

swestに参加していただいた方々の議論の中で、音楽関係のプログラムを組みやすくするためのdelayについてよい提案があった。

記事(article)

俄然やる気になり、mruby/cを触ろうと qiitaに
mruby/cを導入してみた(Mac編) 課題11(1つ解決)
https://qiita.com/kaizen_nagoya/items/ae733370b5ca1b5b2e46
という記事を書いている。

mruby/cはまだ、brewもapt も対応していないことがわかった。

そこで、docker でmruby/cを導入し、結果をhubにあげた。利用の仕方は下記

docker mrubycの利用方法

$ docker pull kaizenjapan/mrubyc
$ docker run -it kaizenjapan/mrubyc
root@f5fb4d1350a8:/# cd mrubyc
root@f5fb4d1350a8:/mrubyc# cd sample_ruby
root@f5fb4d1350a8:/mrubyc/sample_ruby# /mruby-1.3.0/bin/mrbc basic_sample01.rb
root@f5fb4d1350a8:/mrubyc/sample_ruby# ../sample_c/mrubyc basic_sample01.mrb
30
-10
30

作成(production)

docker pushまでの経緯

公式gcc。

gccを使うため、今回は公式gcc dockerを利用。
なぜかbisonが入っていないので入れる。

$ docker run -it --name gcc gcc
bash
$ apt update; apt -y upgrade
$ apt install bison ruby wget

mruby 1.3.0

なぜかdockerだと1.4.1だとmrubyc実行時にエラーになる。
mac だとmruby 1.4.1 でもエラーにならなかったはず。

$ wget https://github.com/mruby/mruby/archive/1.3.1.zip  
$ unzip 1.3.0.zip
$ cd mruby
$ make

mrubyc

$ git http://github.com/mrubyc/mrubyc.git
$ cd mrubyc
$ make

docker hubへの登録

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
04cbd59912eb        mrubyc:latest       "/bin/bash"         23 seconds ago      Up 21 seconds                           sharp_franklin
$ docker tag 0d4197b2f770  kaizenjapan/mrubyc:latest
$ docker images
REPOSITORY                                              TAG                 IMAGE ID            CREATED             SIZE
kaizenjapan/mrubyc                                      latest              0d4197b2f770        14 minutes ago      1.86GB
$ docker push kaizenjapan/mrubyc:latest

課題

課題1 Path

まだPath設定をしていない。コマンドはfull pathもしくは相対pathで実行

mrc.sh
#!/bin/bash
/mrubyc/sample_c/mrubyc $1.mrb

mrcの実行

root@04cbd59912eb:/mrubyc/sample_ruby# chmod +x mrc.sh
root@04cbd59912eb:/mrubyc/sample_ruby# ./mrc.sh basic_sample01    
30
-10
30

この項は、まだdocker hubに反映していない。

課題2 apt

apt install mrubyは、1.2.1を導入する。
mruby 1.2.1 だと, mrubycでError: Illegal bytecode.

課題3 brew

brew install mrubycがない

課題4 dockerfileをまだ書いてない

課題5 sampleがmrbになっていない

mrb.sh
#!/bin/bash
for rb in `ls -1 *.rb`
do
    /mruby-1.3.0/bin/mrbc $rb
done

mrb.shの実行

root@04cbd59912eb:/mrubyc/sample_ruby# chmod +x mrb.sh
root@04cbd59912eb:/mrubyc/sample_ruby# ./mrb.sh

この項は、まだdocker hubに反映していない。

課題6 編集

現状では普段使うエディタが入っていない。
vim導入はまだdocker hubに反映していない。

root@04cbd59912eb: apt install vim

<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>

文書履歴(document history)

ver. 0.10 初稿 20180905
ver. 0.11 要点、課題追記 20180906朝
ver. 0.12 エディタ 追記 20180906 昼
ver. 0.13 docker hubへの登録 追記 20180906 午後2時