来年のETロボコンにmrubyで参加しようと思ってるひとへ(2016年版)

本記事は [ETロボコン Advent Calendar](http://qiita.com/advent-calendar/2016/etrobo) の23日目の記事です。

# はじめに

同じタイトルで記事を書き始めて3度目になりました。
これを書くにあたって過去の記事を振り返ってみました。[2014年版](http://qiita.com/yamanekko/items/e8938228ef72449669fe)はまだ何も情報が公開されていなかった時期でもあり、競馬の予想みたいなことを書いてますが、[2015年版](http://qiita.com/yamanekko/items/f280345ad7545c7f14d3)の内容からあまり変化はないようです。
なので今年は書かなくてもいいかなとも思ったのですが、去年とあるイベントで参加者の方からmrubyは情報が少なくて困っていると聞きましたので、今年私が見聞きした話を書いてみることにします。何かのお役に立てば幸いです。

# 今年のETロボコンを振り返る
## mrubyで参加するチームは増えたのか？
個人的には各チームの開発環境や言語に何が使われているのかとても興味があるのですが、その辺の統計は取られてないようですね、残念。なので、個人的に聞き取り調査した情報です。もし、実はmruby使っていたというチームがあれば教えてください。

mrubyで参加したチームは去年は2チーム、今年は3チームでした。
一見増えたようにも見えるのですが、内訳は、2チームは去年mrubyで参加していたチーム、新しくmrubyで参加したチームも去年から関心を持っていたところだったりします。なので新たにmrubyで参加することにしたチームはいなかったようですね。
もし、検討したけど見送ったというチームがいたら理由を教えていただけると有り難いです。[^fn2]
CS大会に出たチームはいなかったようですね。

## 使用したmruby
[mruby on EV3RT + TECS](https://www.toppers.jp/tecs.html#mruby_ev3rt)が2チーム、[mimaki/mruby-toppers-ev3rt](https://github.com/mimaki/mruby-toppers-ev3rt)が1チームでした。

# 各mrubyについて

## mruby on EV3RT + TECS に関すること

[mruby on EV3RT + TECS](https://www.toppers.jp/tecs.html#mruby_ev3rt)

今年は個人的にTOPPERS関連のイベントに参加する機会があり、TECS開発チームの人に直接お話を伺うことができました。またいくつか提案をさせていただいたこともあるので、現時点での注意事項と共に挙げてみます。

### 既知の問題

#### 1) サンプルコードのジャイロとプッシュボタンの位置が逆

現在(2016-05-27リリースのバージョンbeta1.0.1とさらに古いもの)同梱されているサンプルコードは走行体のセンサーの位置が逆になっています。TECSチームの動作検証に使用した走行体が2014年初期のものだったためです[^fn4]。事情を説明して走行体を修正してもらったので、次のバージョンでは改善されているでしょう。

#### 2) GNU ARM Toolchain のバージョンに注意
[(toppers-users 4626) mruby on EV3RT + TECS を macOS Sierraで環境構築する際の make時のエラーについて](https://www.toppers.jp/TOPPERS-USERS/2016-December/004447.html)

先日、TOPPERSのusersMLに上記のような投稿がありました。

以前EV3RTの方でもGCCのバージョンを上げるとエラーになる問題がありましたね。
おそらくOSを上げたのが問題ではなくて[GNU ARM Embedded Toolchain](https://launchpad.net/gcc-arm-embedded)のバージョン依存の問題だと思うので、Sierraに限らずMacで使う場合は[gcc-arm-none-eabi-4_8-2014q3-20140805-mac.tar.bz2](https://launchpad.net/gcc-arm-embedded/4.8/4.8-2014-q3-update/+download/gcc-arm-none-eabi-4_8-2014q3-20140805-mac.tar.bz2)を使うことをお勧めします。(リリース日2016-05-27、バージョンbeta1.0.1の場合）

ただ、今後リリースされるバージョンで改善される可能性もあります。

#### 3) 使用しているEV3RTやmrubyのバージョンに注意
同梱されているEV3RTやmrubyはファイルのタイムスタンプからすると、2013年の5月〜6月当時のコードが使用されているようです。

EV3RTの方は春の段階で[^fn5]最新版になっているのが望ましいと思うので、TECS開発チームの方に要望を出してみたいと思います。

mrubyに関していえば、コードの日付が2013/05/27なので、ver 1.0.0よりも古いものとなっています。そろそろバージョンアップした方がいいんじゃないかなとも思うのですが、さすがにここまで古いと色々変わりすぎていてアップデートは大変そうです。モノとして完成されているのでこのままでという方針もありかもしれませんが、ググって出て来る情報が使えない可能性が高いので、今後の課題かなと思います。[^fn6]


### 拡張のハードルが高い
参加チームは公開されているものをそのまま使用されているようなので、基本的にはそのまま使って大丈夫です。
ですが、さらなる改良を求めてAPIの追加や機能改善しようとするとTECSで実装する必要があります。TECSを覚えないと拡張できないのではハードルが高いので、TECSを意識せずに拡張できる仕組みの必要性はTECS開発チームの方も認識されていて、対応策は検討されているようです。
ただ、来年度使えるタイミングではリリースされることは難しそうなので、しばらくは公開されているAPI内で開発するか、TECSで書くかになります。

例えば、技術教育で使われているC++のサンプルコードをmrubyに移植するにはAPIが不足しています。追加の要望は出しているので今後の対応に期待したいです。


### 実はユーザからの声を心待ちにしています

TECSに限られた話ではないのですが、開発チームはユーザの反応をとても知りたがっています。使ってみてわかりにくかったところ、改善案などちょっとした気づきでもお知らせいただけると中の人はとても喜びます。
じつは上記1), 2)についてMLでの指摘で気がついたものです。（ありがとうございます！）
TOPPERSのMLに投稿していただければ有り難いのですが、MLはちょっとハードル高いという人は個人的に教えてくださっても結構です。（私は開発メンバーではないのですがお伝えすることはできるので）

## mimaki/mruby-toppers-ev3rtに関すること

おそらくSOROT☆SCSKQさん[^fn1]が[mimaki/mruby-toppers-ev3rt](https://github.com/mimaki/mruby-toppers-ev3rt)（去年はmruby-ev3rt(軽量Rubyフォーラム版)として紹介していたもの）を使用されてたようです。
こちらは今年はカラーセンサー対応をした程度の修正で済んだそうです。(mruby本体はどの時点のものかは未確認)

遠方なこともあって、なかなかお話する機会がなくてET展で立ち話しただけなので私の聞いた話はこの程度ですが、詳しく知りたければ軽量Rubyフォーラムの方に聞いてみると良いでしょう。

## yamanekko版についてもちょっとだけ

[yamanekko版](https://github.com/yamanekko/mruby-ev3rt)については、今年はダミーカーの機会もがなかったのでETロボコン関係では使用できませんでした。
ETロボコン以外では、Sessalet(TODO:Sessltページへのリンク)で使用していました。OSC TokyoやET 2016、Ogaki Mini Maker Faire 2016のデモはmrubyでした。[^fn7]

### 今後はどうするの？
いちおうTOPPERSの中の人なのに別バージョンを作ってるのってどうなのよ？とも思われるかもしれませんが、試作をするには都合が良いので、こちらでいろいろ試してみて良さそうなものをmruby on EV3RT + TECS に取り込んでもらうといいんじゃないかなと思っています。

yamanekko版の特徴は、mrbgemsをC言語で作り込んでRubyのコードはシンプルにするポリシーなので、興味のある方はぜひ使ってみてください。サポートしますよ:smile:


# mruby参加者を増やすための課題

Rubyだとプログラム初心者の参加者の敷居が下がることを期待していますが、現状では周りに詳しい人がいるチームの参加にとどまっているようです。
なぜでしょう？
既にお気づきでしょう、親切に書かれたドキュメントがないからですね。
今後このあたりを解消できたらいいなと思っています。

# 結局mrubyってどうよ？

他のLL言語に比べて、TOPPERSにのっかっている分有利なところはあるようです。アドバンストのゲームを解くあたりは、Rubyのサクサク書けるところで優位性を発揮できるんじゃないでしょうか。私は走行体を持っていないので、実際に使ってみたチームに話を伺ってみたいです。

正直なところ、まだまだ初心者の人にmrubyを薦められるような情報が整っていないですが、来年のAdvent Calendarでは初心者の人こそmrubyですよと言えるようになっていたいですね。

情報が少ないという致命的欠点の解消にはしばらく時間がかかりそうですが、スジは良いので来年もmrubyで出場するチームが出てくることを心待ちにしています。

[^fn1]: ET2016で某Mさんからうちの会社のチームと聞いたので

[^fn2]: 情報不足が原因と言われそうですが

[^fn4]: 過去、ジャイロとプッシュボタンの位置が逆と指摘されて焦った経験のある方も結構いるのではないでしょうか

[^fn5]: 来年度に向けてアップデートがあると思うので

[^fn6]: 恒例？ET合わせで新しいバージョンがリリースされるかと思ったのですが出ませんでしたね。噂によると出す予定がなかったのではなく、間に合わなかった説があるので取り込むならそちらがリリースされた後の方が良いなという思いもあるので、現時点でのバージョンアップに消極的なこともあります

[^fn7]: C言語版を入れてたつもりが手違いでmruby版を動かしてしまっていたのでした