Feedforce Developer Blog

フィードフォース開発者ブログ

RubyKaigi 2018 に行ってきたので今更所感などをまとめました

仙台グルメとお土産をあまり堪能できなかったので仙台リベンジをしたいはのちゃ (id:hano_tea) です。仙台で食べた牛タンはやはり美味でした。

だいぶ開催から日が経ってしまいましたが、 RubyKaigi 2018 に参加してきたので、その様子を写真で振り返りつつ、感想などを纏めようと思います。

RubyKaigi に行く前に書いた記事はこちら。

developer.feedforce.jp

目次

発表内容を振り返って

今回の RubyKaigi も、3日間にわたって沢山の興味深い発表が行われました。

個別に発表を振り返るにはこのスペースは狭すぎる && そもそも聞けなかった発表も大量にある、ということで、 ここでは私はのちゃが聞いた発表のみに絞って所感をまとめようかと思います。

今回の RubyKaigi の発表で私が聞いた発表は主に以下のようなテーマのものが中心でした。

  • (Ruby3 に向けた)高速化
  • ML
  • IoT(mruby)

それぞれのテーマについてざっくり纏めてみます。

Ruby と 型

多分何度も言われていることだとは思うのですが、

「Rubyが明示的な型注釈を書かなければいけない言語になることは無い」

ということが大前提のようです。これは Ruby の父 Matz の弁です。

「言語に明示的な型注釈を強制されることはないが、静的型検査による恩恵は享受したい…」という大変欲張りな要求をどう叶えるのかというところから、 様々なアプローチが試みられているようです。

どんなアプローチが試されているのかについては Day 2, @mametter さんの発表 "Type Profiler: An analysis to guess type signatures" で紹介されていました。(詳細は割愛します)

rubykaigi.org

この発表では Type DB という型情報を格納しておくデータベース的なものを用意するアプローチを検討していました。

既存の Ruby 型拡張ライブラリにはかなりよく出来ているものもあり、(型定義を頑張って用意すれば)実用性もそれなりにあるとのこと。

問題は型定義を用意する部分なので、ここをいかに「楽に済ませるか」、可能なら「自動で生成できないか」、というのが鍵になりそうでした。

Ruby の高速化

昨年の RubyKaigi でも色々な発表がありましたが、今年も高速化については色々な発表がありました。 個人的な印象としては、去年は「まだ少し遠い未来の話」という印象だったのが、今年は「もう目前まで来ている」と思えるぐらいに進んでいる印象でした。

特に印象に残っているのは

  • 3日目の Keynote, "Parallel and Thread-Safe Ruby at High-Speed with TruffleRuby" by @eregontp さん
  • 同3日目の "The Method JIT Compiler for Ruby 2.6" by @k0kubun さん

の2つの発表です。

Parallel and Thread-Safe Ruby at High-Speed with TruffleRuby

f:id:hano_tea:20180620172603j:plain

1つ目の TruffleRuby (とりゅふるびー、らしいです) は発表のはじめに Optcarrot のデモがありましたが、 最新版を含む他の Ruby 実装と比べても圧倒的な速度(FPS比で3倍以上)を魅せつけて会場を沸かせていました。

あらゆるケースで高速化するわけではなく、物によっては高速化があんまり効かなかったり、 かと思えばシンプルなベンチマークだとなんと9倍以上の高速化になる場合もあったりと、アプリケーションによって相性の差が割と激しそうな印象でした。

肝心のどうやって高速化しているのかというところなんですが、並列化とインラインキャッシュを使っている…ということぐらいしか理解が追いつきませんでした… この記事を書いている最中に見つけた以下のブログ記事が参考になりそうだったので掲載しておきます。

Graal/Truffleについて軽く | κeenのHappy Hacκing Blog

ちなみに Rails はまだ動作させることが難しく、DB、アセット周りは多少のパッチで動くものの、多くのC エクステンションのパッチがまだまだ必要とのことでした。

The Method JIT Compiler for Ruby 2.6

f:id:hano_tea:20180620172635j:plain

2.6.0 preview2 が Ruby 2.6 系の最新版(プレビュー)ですが、 with JIT だとバグがあるのでプロダクション環境で使わないように、トノコト。

まだどんな環境でもコンパイルできる、使用できるというところまでは来ていないものの、多くの環境で動くようになってきているようです。 また、速度面でも改善が進んでおり、去年時点で(LLVM比)5倍程度早かったものが5.7倍になっています。 更に、 Optcarrot は Ruby2.0 比で 2倍早く。すごい。

しかし、 Rails は現状むしろ遅くなってしまうという問題が。

原因を調査したところ、ざっくりまとめると「Rails はよく呼ばれるメソッドが特定しにくく、キャッシュを上手く活用できていない」というのが主な原因らしいです。 原因と対策はもう検討済みとのことだったので、改善されるのを期待して待ちたいところです。

Rails に限った話ではないのですが、MJITにおいては C で書かれたコードは最適化が難しく、むしろ Ruby で書いたコードのほうが最適化しやすいらしいです。 試しに C で書かれたコードを Ruby で実装しなおして JIT で使ったら 2倍強 も早くなったというのは興味深かったです。

f:id:hano_tea:20180620172702j:plain

C language is dead

正式版 2.6 が楽しみになる発表でした。

Ruby と 機械学習、数値演算

去年の RubyKaigi でもいくつか発表はあったのですが、その時はまだ Ruby で機械学習、あるいは数値演算系の処理を行うイメージがほとんどなく、 特にどの発表も聞かずに終わってしまいました。

今年は自分の所属しているプロダクトの状況や私自身の興味の変化などもあり、 Ruby 界隈での機械学習がどのような状況なのか気になったため、いくつかのセッションを聞きに行ってみました。

結論から言うと、「Rubyでも機械学習をする下地がだいぶ整ってきている」というように感じました。 Ruby の書きやすさに乗っかりながら機械学習系のライブラリを Ruby ライクに扱えたり、 GPGPU を Ruby で書けたりなど、夢が広がる発表が多かったです。

以下に発表に関連するページ類を掲載しておきます。

▼ 初日にRuby用数値演算ライブラリ Cumo の発表を行った @sonots さんの記事。

blog.livedoor.jp

▼ 同じく初日、 @mrkn さんの "Deep Learning Programming on Ruby" で出てきたライブラリ mxnet.rbRed Data Tools

github.com

red-data-tools.github.io

▼ 最終日、 @prasun_anand さんの "High Performance GPU computing with Ruby" で紹介されていたライブラリ ArrayFireRbCUDA

github.com

github.com

現状では、機械学習初心者がいきなり Ruby でバリバリやれるかというと恐らくそこまでではなく、手軽さではまだまだ Python など他言語にだいぶ分がありそう。 機械学習の仕組みを理解していて、コードに落とし込めるだけの知識を持っていれば、今からでも Ruby で機械学習もある程度出来るのかな、というイメージでした。

何はともあれ、これもまた今後の発展が楽しみです。 Ruby の書きやすさ、書いていて楽しいという特徴を活かしながら様々な分野のコードが書けるようになるのは素晴らしいと思います!

IoT と Ruby

f:id:hano_tea:20180620172737j:plain

IoT はちょっと主語が大きいかもしれませんが組み込み向けの mruby、およびマイコン向け mruby/c の話。

今回、とある酒造の「麹の温度」を確認するためのシステムを PSoC 5LP というマイコンと mruby/c を使って構築した事例の話を聞いたのですが、 Ruby でシングルボードコンピュータでもない、マイコン向けのコードを書き、実際にそれを使える…というのはかなり面白そうだと思いました。

自作キーボード 温泉に浸かっている私としては、自作キーボードに搭載するマイコンのファームウェアを Ruby で書けたら カスタマイズがしやすくなってより深く 温泉に浸かることができそうだと思いました。

自作キーボードの話はともかく、 Ruby で IoT 向けデバイスのコードを書けるのは開発効率を大幅に上げることができそうで、今後も継続してチェックしたい分野だと思っています。

写真で振り返る RubyKaigi 2018

上記のまとめで紹介できなかった写真を紹介します。

f:id:hano_tea:20180620172950j:plain
今年のネックストラップとネームカード。スタンプラリー付き。

f:id:hano_tea:20180620172956j:plain
メインホールの様子。キーノートなどの単一セッション時は満席に。

f:id:hano_tea:20180620173001j:plain
舞台脇にあるサブプロジェクタ的な。表示内容が Ruby 風味で楽しい。

f:id:hano_tea:20180620173005j:plain
Matz による初日キーノートの様子。

f:id:hano_tea:20180620172946j:plain
恒例の Where are you from? ボード。初日なのでまだ付箋がほぼ無い。

f:id:hano_tea:20180620173010j:plain
今年は会場周辺に飲食店がほぼ無かった関係か、 Bento スポンサーの Money Forward 様によるお弁当の提供がありました。3日間ありがとうございました!

f:id:hano_tea:20180620173015j:plain
初日のLTで弊社古橋が登壇しました!

f:id:hano_tea:20180620173028j:plain
こちらも恒例デカ外人クイズ。

f:id:hano_tea:20180620173037j:plain
Ruby コミッター大集合。

f:id:hano_tea:20180620173105j:plain
RubyKaigi 2019 in Fukuoka!

f:id:hano_tea:20180621190541j:plain
RubyKaigiに参加したFF社員(と misoca の人)で集合写真。misoca の人は元FFの同期です。

謝辞 && PR

今回の RubyKaigi は会社から交通費、宿泊費、及び RubyKaigi の参加チケット費を支給していただきました。ありがとうございました。

f:id:hano_tea:20180530143500p:plain
Tシャツも1人1枚まで配布してもらえたよ

弊社では特にRubyKaigi参加の条件などは(少なくとも今の所)なく、参加希望で手を挙げれば出社扱いで RubyKaigi に参加できます。 (もちろん、別途所属プロダクトチームでの調整はある程度必要ですが、基本的には問題ないはず…)

今の所 RubyKaigi が主ですが、セミナーや勉強会への参加費補助は多くの場合出ますし、 他言語、他の技術スタックに関するカンファレンスに関しても、業務に関わりのあるものであれば補助の検討も可能です。

弊社技術チームでは毎週金曜日に技術勉強会を社内カフェスペースにて開催しております。 もし弊社に興味を持たれた方がいらっしゃいましたら、以下のページからお気軽にお問い合わせください!

カジュアルエントリー / 株式会社フィードフォース