こんにちは!ラクマのサーバーサイドエンジニアの三谷(@shohei1913)です!
ラクマは4月18日~4月20日に開催されたRubyKaigi2019にスポンサーとしてブースを出展してきました。
スポンサー枠でイベントの参加枠が頂けたため、ラクマからは私と岸、坂田が参加してきましたので当日の様子をレポートしたいと思います!
RubyKaigiとは
RubyKaigiは、プログラミング言語Rubyに関する国際カンファレンスです。Rubyは国産言語ということもあり、毎年日本で開催されています。Rubyコミッターをはじめ、RSpecやBundlerの作者など著名な方々が一堂に会するイベントです。
ラクマでは毎年、エンジニアをRubyKaigiに参加させてくれていて、去年は3名がHelperスタッフとしてRubyKaigiに参加し、今年はPlatinum Sponsorsとして参加させていただきました。
RubyKaigiでは毎年、Matzによるキーノートがありますが、今年のメイントピックはRuby 3x3に向けた進捗と課題についてでした。
キーノートでは、Ruby3の3つの柱として、
- Performance
- Concurrency
- Static typing
が挙げられており、去年のRubyKaigiでも目玉だったMJITの話から、それを導入すると遅くなってしまうRailsでの解決策の話、並列処理に対する解決策などの話がありました。
個人的に気になったのは、Rubyの型についての話でした。今後もコード内での型宣言は導入されないようで、.rbi
という型定義ファイル等を使った型チェックがメインとなるようです。テストの実行ログから自動で型を推論してrbiファイルを書き出したり、作成されたrbiファイルの内容を編集したりして正確な型情報を定義していくようです。型チェックで有名なStripeが開発しているSorbetや@soutaroさんが開発しているSteepの発表もあったので、後ほど詳細をまとめたいと思います。
ブースの様子
ブースについては坂田よりレポートさせてもらいます。
冒頭でもふれましたが、今回のRubyKaigi2019ではプラチナスポンサーとして支援させていただきました。
ラクマ同様にRailsを運用しているSOK(Service Operation Kaizen)グループのメンバーとの合同だったので、一緒にブースでたくさんの参加者とお話をさせていただきました!
その様子がこちらです!
イカつい楽しい雰囲気のメンバーですね!!
今回のRubyKaigiではスタンプラリーが用意されており、参加者のみなさんが積極的にブースに回ってくれるような仕組みになっていました。こういうのは、スポンサーとしてはとても嬉しいですね。運営さすがです!
3日でほぼすべてのノベルティを配布し終わったのですが、
そんな中ブースに来てくださった方からは
- 楽天がRubyやRuby on Railsを使っているのを知らなかったです.
- 楽天パンダ可愛いですね!(知り合いが大好きです)
- (特に海外のかたから) 外国人の採用はやってますか?
などなどの声をいただきました。
ラクマのバックエンドはほぼ100% Ruby on Railsなのですが、楽天としてみたときにRubyが使われていることをあまり知られていなかったので、スポンサー活動などでもっと知ってもらいたいなと感じました。
ラクマでは積極的にスポンサーをやってますので、運営の方で興味ありましたら@huinまでご連絡ください!
気になったセッション
ここからは聴講したセッションの中で、特に気になったものを紹介します。
The challenges behind Ruby type checking (@soutaro)
Steepを開発している@soutaroさんのセッションでは、動的型言語であるRubyで型をチェックすることの難しさと解決法、今後の取り組み内容についての話がありました。(発表資料はこちら)
Rubyはダックタイピングがやりやすい言語なので、引数に複数の型を意図的に許容する実装をしている人も多いかと思いますが、その分、型定義ファイルを記載するときの記載が複雑になりそうです。今後はRuby標準ライブラリの型定義ファイルを準備していくそうなので、gemやRailsにも広がっていきそうですが、それぞれのサービスにどの程度型定義ファイルを実装していくか、職場によって大きく差が出そうな気がします。
一方で、型定義ファイルを準備できれば、実装時に想定していなかった呼び出され方への予防線として機能したり、不正なパラメータでの呼び出しを防止するような以下のコードがなくなり、コードの見通しは非常によくなりそうですね。(静的型付けの言語からきた人が動的型付けに怯えて、下のように過剰にチェックコード入れること多い気もするので...)
def something(arg)
raise ArgumentError, 'Invalid argument type' unless arg.is_a?(String)
# ...
end
Steepの型定義ファイルはこのリポジトリでイメージをつかむことができると思います。
How to use OpenAPI3 for API developer (@ota42y)
committeeの開発者の@ota42yのセッションでは、OpenAPI3の仕様についての話と、committeeのgemをOpenAPI3対応した話についての話がありました。(発表資料はこちら)
クライアントサイドとサーバーサイドの通信は、GraphQLやgRPCなど昨今色々と選択肢が増えてきている印象ですが、OpenAPI3は既存のREST APIの資産を引き継いでインターフェースの明文化ができることがメリットだと感じました。さらにcommitteeがOpenAPI3に対応したことで、スキーマファイルからバリデーションと型変換ができるようになったことは非常に魅力的でした。
リクエストに真偽値を含めても文字列に変換されてしまうため、paramsから受け取った後で真偽値変換するか文字列のまま比較しているコード(例: params[:hoge] == "true"
)もラクマにはあるので、自動で型変換してくれるとかなり助かりますね。
Red Chainer and Cumo: Practical Deep Learning in Ruby (@hatappi, @sonots)
去年に比べて機械学習関連のセッションが増えた印象がありました。
- Ruby for NLP : @youchan
- A Deep Learning Adventure : @nusco
- Red Chainer and Cumo: Practical Deep Learning in Ruby : @sonots, @hatappi
その中でも@hatappiさんは、Rubyで機械学習を行うためのRed Chainer、@sonotsさんはRed Chainer内部で使う数値演算ライブラリのCumoの作者として、Rubyを使った機械学習の現状やこれまでの取り組みを紹介してくれました。
機械学習はPython一強という状況ですが、サービスでの運用を考えた時にRubyで書けるというのは非常にメリットがあると思うので、このプロジェクトを今後もウォッチしようと思います。
Play with local vars (@ujm)
@ujmさんの発表はここで紹介するまでもなく、至る所でバズっていましたが生で見ると圧巻でした...
まず、vimで登壇資料が作られていることに驚き、登壇中にRubyを動かしてデモして、さらにparse.yをいじってマジックコメントを追加して動かすところまでやり切るとかほんと凄いです。=
を使わずにローカル変数に値を代入する4つの方法なんて、多分、この発表を聞かないと一生考えようとも思わないと思います。後日、RubyKaigiの発表動画が公開されると思いますが、@ujmさんの発表は絶対見た方がいいです。
最後に
RubyKaigiオーガナイザーの皆さま、スタッフの皆さま、素晴らしいイベントの運営ありがとうございます。貴重なセッションを聞けたり、商店街のアーケードで懇親会をしたり、RubyKaigiは本当にユニークで素晴らしいイベントです。是非、来年も参加したいと思います。
また、スポンサー、登壇など今後もラクマはエンジニアコミュニティに貢献していきたいと思います!