RubyKaigi2017 速報!! (1日目)

f:id:selmertsx:20170919020509j:plain

こんにちは。開発基盤部兼ヌリカエエンジニアの森岡です。

カープ優勝で沸き立つ広島から、RubyKaigi 2017の1日目の様子をお知らせさせて頂きます!

Money Forward さんによるスポンサーセッション

最初のセッションは Ruby Kaigiのスポンサーをされている Money Forwardさんから。 Money Forwardさんは、卜部さん、松田さん、金子さんと3人も Ruby Committerがおられることで有名な会社ですね! Money Forwardさんでは、そのような Ruby Committerの方々から Ruby を学ぶことができる環境を整えておられるようです。うらやましい!

明日、2017年9月19日に重大発表があるとのことなので、皆様楽しみにしていましょう! あと福岡に支社を作るとの発表も!採用も頑張っているとのことですので、福岡のRubyエンジニアの方、よかったらお話しを聞かれてみてはいかがでしょうか?

Keynote ゆるふわRuby生活

RubyKaigi 1日目のkeynoteは、salesforceでフルタイムRuby Committerをされている中田伸悦さんからでした!

発表では、Rubyの開発で使っているツールや、Ruby Committerのコミュニティ、Ruby の build方法から、直近見つけた面白いissueについてお話しされていました。 取り扱ったissueについては、下記の2点になります。

[ruby-list:50578] [質問] 変数pが定義されている時のabsの動作について Feature #13812: Refinements で定義した to_s を String interpolation が呼んでくれない - Ruby trunk - Ruby Issue Tracking System

上記 issueの原因や対処方法をRubyのコードベースで説明されていました。 ゆるふわというタイトルでしたが、Rubyの内部実装にまで踏み込んだ、見ごたえのあるセッションでした!

API Development in 2017

2つ目のセッションは、Drecomのonkさんから、Rubyでの Web Application開発におけるAPI開発のお話しでした! API開発におけるこれまでの歴史から、これからの未来のお話しを、自社でのAPI開発を交えてお話しをされていました。

ドリコムでは、ソーシャルゲームを開発しているため、Rubyを書いているServer Engineerと、 C++やC#を扱っている Client Engineerの方がおられます。 双方のエンジニアの認識を合わせるために、OpenAPIを利用して Schema First Development な REST APIの設計をしているとのことです。 JSON schemaを書くのは少々ツライところがありますが、ドリコムではYAMLを分割・mergeできるようなツールを作成したとのこと! ツールにはJSON referenceやJSON pointerの概念を利用しているようです。

そして OpenAPIを利用した現在の REST APIから、GraphQLに移行しつつある現在のトレンドをお話しされておりました。

How Close is Ruby 3x3 For Production Web Apps?

3つ目のセッションは、AppFolioよりNoah Gibbsさんから、Ruby on Railsのベンチマークについてのお話しでした。

Ruby 3×3では、Rubyの速度を3倍にする!ということを目標として掲げています。 しかしながら、何をもって3倍とするのかは難しい問題でして、この問題は昨年のRubyKaigiでもお話しがされていました。

Ruby3x3: How are we going to measure 3x? - RubyKaigi 2016

昨年の発表において、warming upが大切というお話しがされましたので、Noahさんはそこを踏まえたベンチマークソフトを作成したとのこと! そのベンチマークを利用して確認したところ、1000 requestのwarming upを行った状態において、ruby 2.0.0 から 2.4.1 で比較すると 150%の速度が見られたようです。また、warming upのために行うrequestの回数も速度に影響を与えるらしく、 十分にwarming upされた web applicationとそうでないものとの間では、同じバージョンのrubyでも5~7%程度の差がみられたようです。

発表資料やベンチマークに利用したコードはこちらで公開されておりますので、よろしかったらご確認ください! How Close Is Ruby 3x3 for Real Web Apps? - Google スライド GitHub - noahgibbs/rails_ruby_bench: A Rails-based benchmark for Ruby development

Gemification for Ruby 2.5/3.0

4つめのセッションは、GMO ペパボのhsbtさんから、Ruby 2.5 / 3.0 における Gemificationのお話しでした。 Gemification というのは、Rubyの Standard Library を、Default gems や Bundled Gemsのように出す取り組みのことです。詳細は下記のURLに書かれています。 StdlibGem - Ruby - Ruby Issue Tracking System

opensslの修正など、リリースサイクルがRubyとは異なる gem に対して、Rubyの開発とは切り分けることによって、下記のメリットを取りに行くことを目的として行っています。

  • openssl等の修正を迅速に行う
  • ruby interpreter developper が、rubyの開発にのみ集中できるようにする

rubyではこの取り組みを進めているとのことですが、fileutilsやfiddleなど、既にrubygemsに登録されているものがあるなどの苦労話や、 ruby 2.5.0における bundler の default gem対応などについて、お話しがありました!

発表資料はこちらになります! Gemification for Ruby 2.5/3.0 - SSSSLIDE

また事前にペパボさんの技術ブログにも投稿されているので、そちらも掲載させて頂きます。 RubyKaigi 2017 に登壇します & GMO ペパボがスポンサードします - ペパボテックブログ

How to optimize Ruby internal.

5つ目のセッションは Ruby Commiterのwatson1978さんから、Rubyの最適化についてのお話しでした。 Rubyの高速化には、速度を計測する、最適化のアイデアを考える、実装するの3つのステップがあるとのことで、それぞれのステップについて詳細にお話しがありました。

まず、速度の計測では、watsonさんは iprofilerとxcodeを利用しているようです。これらのツールはrubyで書いたコードをCレベルでパフォーマンスチェックができるらしくボトルネックの検出にものすごく便利そうな印象でした!

最適化のアイデアを考える方法については、watsonさんが実際に速度を改善した Hash#mergeのPRを例に説明されていました。シンプルな最適化において、基本的にメソッドを探す時間の短縮か、無駄なオブジェクトの生成を行わないようにするという2つの指針で行っていて、Hash#mergeについては、これまではobjectを生成していたものを、objectを生成せずに行うようにしたとのことです。これによって、なんと速度が1.5倍程度まで向上したとのこと!

watsonさんの他の活躍は、下記のURLにてご確認下さい。 https://github.com/ruby/ruby/pulls?page=1&q=is%3Apr+author%3AWatson1978

Development of Data Science Ecosystem for Ruby

f:id:selmertsx:20170918171313j:plain

このセッションは、弊社SpeeeのフルタイムRuby Committerである mrkn (頭に被っているのは弊社のヌリカエというサービスよりヌリカエルくんです)より、Ruby から Python インタープリタを呼び出す仕組みを提供するライブラリである PyCallについて、デモをはさみながらお話しをさせて頂きました! デモの中では、Pythonのライブラリであるseaborn、pandas、kerasをPyCallを使って呼び出すなどしておりました。

発表の中では、Apache Arrow を利用してRuby用のデータ処理ツールを提供するプロジェクトである Red Data Tools Project についても話されました。 Red Data Tools Project はクリアコードのkouさんが主催し、弊社のhatappiも参加しているプロジェクトです。9/19にて、ワークショップも開催しますので、よろしければ足を運んで頂ければ幸いです!

Ruby Committers vs the World

Cookpadの庄司 嘉織さんからの発表から、このセッションがスタートしました。 その中で、Ruby 3×3を強力に進めていくため、CookpadにRubyのCommitter である遠藤侑介さんがジョインされたことが発表されました!

クックパッド、フルタイムRubyコミッターとして遠藤侑介氏を採用 次世代バージョンの中心的機能となるRubyの堅牢性向上に貢献 | クックパッド株式会社

遠藤さんは、Ruby 3の中では型システムの検討を進めていくとのことです。 「Ruby以外に良い言語が出てきたら、Rubyをもっと強くする!」という庄司さんの一言が印象的なお話しでした。

その後、Ruby Committerに対する質問コーナーが始まり、Rubyにおける型注釈に関する Ruby Committerの方々の所感や、右代入など貴重な話を沢山聞ける内容となっていました。特に印象的だったのは Rubyを3倍早くするために、企業からして欲しいことは何か?といった質問に対して、ベンチマークを作って欲しいというお話しと、RubyKaigiを手伝って欲しいというお話しが出たことです。後者については、Ruby開発者がコーディングする時間を作るために、すごくありがたいサポートであるというお話しでした。

以上で、RubyKaigi 2017 の1日目のレポートを終わらせて頂きます! 次回のレポートは、弊社エンジニアの 西岡からお届けさせて頂きます!