Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

RubyKaigi2019にLanyard Sponsorとして参加してきました

初めまして、DSOC Development Groupの村田です。

4/18(木)〜20(土)の3日間、福岡国際会議場で開催されたRubyKaigi2019にLanyard Sponsorとして参加させていただきました。私は普段はデータ統括部門であるDSOCで、サーバサイドをRuby on Railsで開発しています。今回初めて、RubyKaigiに参加してきたのでそのレポートをご紹介致します。

RubyKaigiとは?

プログラミング言語Rubyに関する国内最大のカンファレンスで、年に一度日本のどこかで複数日に渡って開催されています。このイベントには国内外から多くのRubyist たちが集まり、様々なセッションが行われます。Rubyコミッターの方々も多く参加し、そしてたくさんの企業が協賛しているイベントで、Rubyistにとっては年に一度のお祭りのようなものです。

rubykaigi.org

スポンサーブースで「RubyKaigiで楽しみにしているコト」を募集!

弊社は、RubyKaigi参加者の出会いのきっかけとなればとの思いを込めて、「RubyKaigiで楽しみにしているコト」を付箋に書いて投票してもらうという企画を行いました。参加者全員に配られるネームカードに、ルビーをかたどった付箋が挟まれていて、その付箋に「RubyKaigiで楽しみにしているコト」を書いてブースに用意したパネルに貼っていただくと、抽選でTシャツやお米などのノベルティが当たるというものです。
f:id:murata67:20190422231046j:plain
Rubyエンジニアの祭典「RubyKaigi 2019」に協賛します | Sansan公式メディア「mimi」

Rubyの生みの親であるMatzさんやRubyおよびRailsコミッターの松田さんもブースに遊びにきてくださいました。
f:id:murata67:20190422231222j:plainf:id:murata67:20190422231039j:plain

3日間でとてもたくさんの方が企画に参加してくださり、パネルは皆さんの「RubyKaigiで楽しみにしているコト」でいっぱいになりました!
皆様ご参加いただきありがとうございました!!
f:id:murata67:20190422231053j:plain

セッションをいくつかご紹介!

たくさんのセッションがあった中で気になったセッション、興味深かったセッションをいくつかご紹介します。

Day1. 13:30-14:10「How to use OpenAPI3 for API developer」

まずは1日目の13:30-14:10にあった @ota42y さんのOpenAPI3についてのセッション。

speakerdeck.com

DSOCの開発チームでも、半年くらい前からAPI仕様書をAPI BlueprintからOpenAPI3に移行しつつあったので、聞きたかったセッションの一つでした。
大規模なマイクロサービスの場合APIの数も膨大になってきます。そんな時にまずAPI定義を取り決め、その定義に沿ってクライアントとサーバの開発を同時に進めることをSchema First Developmentというそうです。
クライアントとサーバの開発を同時に進めて結合するには、必ずどちらもAPI定義通りに実装する必要があります。そんな時 commitee.gem を使えば、リクエストとレスポンスのバリデーションをRack層でやってくれ、定義と実装が同じであることを担保できるそうです。便利! さらに、アプリケーション側では to_s とか Time.parseとかしなくても定義通りに型変換してくれるという賢さ。すぐに導入してみたい!
定義からRubyオブジェクトにマッピングできるopenapi_parser.gemもご紹介いただき、大収穫でした。

Day2. 11:20-12:00「Better CSV processing with Ruby 2.6」

続いて2日目の11:20-12:00にあった @ktou さんと @284km さんのOpenAPI3についてのセッション。

slide.rabbit-shocker.org


Ruby 2.6でCSVの読み込みと書き込みがめちゃめちゃ速くなったよ! というお話でした。読み込みで1.5〜3倍、書き込みで1.5〜2.5倍とのこと。
CSVの形式によって処理を最適化することで、パフォーメンスもメンテナンス性も向上できたそうです。また、今まではCSVオブジェクトは読み込みのみもしくは書き込みのみの場合でもParserとWriterの両方を初期化していましたが、それを必要な時に初期化するようにしたことも速度改善に役立ったとのことでした。
「必要なことだけする」ことがパフォーメンス的にもメンテナンス的にも大事だと学びました。

Day2. Keynote「All bugfixes are incompatibilities」

2日目のKeynoteの @nagachika さんのRuby安定版のメンテナンスについてセッション。

www.slideshare.net

Rubyの新機能は常にtrunkブランチ(gitでいうmaster)で行なっていて、クローズされたbugfixのみ安定版にbackport(gitでいうcherry-pickのような)するという運用になっているそうです。Rubyの安定版には、バージョンごとに担当メンテナがいて、新バーションが出るごとに担当をスライドしてメンテナがいなくなったバージョンがサポート外となるそうで、現在2名の安定版メンテナがいらっしゃるので一つのバージョンに対して2〜3年サポートされます。
新しいメンテナが入ってくれれば、もっと長期間サポートされるよ、ということで将来のメンテナへ、安定版メンテナになるための資質が紹介されました。

  • Rubyの実装について広く浅く知っていること
  • 1本のブランチを約1年管理するので継続的に活動できること
  • メンテナンスポリシーに理解があること(基本的にバグ修正だけbackportする、新機能や非互換のものは入れない)
  • チケット1つ1つを見て、いる、いらないを判断することができる(でも見分けるのは結構難しい)

ハードルは高そうですね。こんな大変な作業を常にやってくださっているメンテナの方々に本当に感謝です!

その後は、メンテナンスの失敗談をいくつか共有いただきました。
それらの失敗談から、バグ修正であっても、もともとSyntaxエラーであった誰も使っていない機能の修正をして、使われ出してからそれに付随したバグが生まれた場合の方が影響は大きいので、backportする際には影響の大きさを考えることが大切だというお話をされていました。これは安定版のメンテナンスだけでなく普段の開発にも言えることであり、今後改めて意識していきたいなあと思いました。

他にもまだまだ面白いセッションがありました!

Rubyコミッターの方々が登壇されて、QAや公開開発会議が行わた「Ruby Committers vs the World」では、こんなにたくさんのコミッターの方が一同に会したところを目にするのは初めてで、公開開発会議で熱い議論が交わされる場面も見ることができて、とても感動しました!!
f:id:murata67:20190422231238j:plain

RubyKaigiへの参加を通して

周りにはすごい人がいっぱいいて、まだまだまだまだ自分は勉強が足りてないと実感したと共に、やらないと! 挑戦してみたい! と思ったこともたくさんありました。また自分の取り組みや学んだことをアウトプットすることの大切さも感じました。
あとは技術的なことではないですが、英語の勉強はすぐにでも始めないとと思っています。セッションの聴講でも感じましたが、それ以上に外国の方とのコミュニケーションにおいて、考えをうまく伝えられないことにもどかしさを感じました。リスニング力、スピーキング力を磨いて、来年のRubyKaigiでは世界中のRubyistたちと交流できたらなと思います!

そしてそんな来年の開催地は、、、松本!
f:id:murata67:20190422231321j:plain

RubyKaigi2020も楽しみにしています!
f:id:murata67:20190422231209j:plain

最後に

After RubyKaigiというイベントをやります!
RubyKaigiについて語りたい方、SansanのRubyistともっと話したい方はぜひお越しください〜!
raksul.connpass.com

© Sansan, Inc.