22Inc. サービス開発日誌

スタンプスのサービス開発チームが日々の業務で得たノウハウ、経験の共有ブログです。

RubyKaigi2019レポート(前半)

こんにちは、22Inc.の山崎です。

2019/04/18〜4/20 に福岡県にて開催されたRubyKaigi2019に参加してきたので、その様子をレポートにしました!

私にとって、今回は初めてのRubyKaigiだったのですが、とても濃厚な3日間でした…!

本記事ではRubyKaigi前日の0日目と、1日目についてレポートします。

どのセッションも印象的でしたが、その中からいくつか抜粋してお伝えします。

(※記事内の写真は一部、以下のページからお借りしております。

https://photos.google.com/share/AF1QipPpyj9FB5hh6EWacaFEMEPZfZM1P7TK72ErP4qKyQXfAE4Qcq6RTT3A6aQXAKr0Dw?key=QmlPQmZheHZDLW8xQzN0U3VmWUZRQ0Z0RFNtY1JB

)

0日目

RubyKaigiは4/18から開始でしたが、私は前日から現地入りしました。

f:id:yamazaki22:20190426165902j:plain
会場となった福岡国際会議場

私が宿泊したのは会場から徒歩7分ほどにあるホテルでした。会場まで歩いて行ける距離にあるというのは、滞在期間が長いぶん非常に助かりました…

1日目

スポンサードトーク

RubyKaigi初日は、GMOペパボ様とラクスル様によるスポンサードトークから幕を開けました。

特にGMOペパボ様は開催地である福岡との関わりが強く、産学連携もされているとのことでした。

こうした企業による活動やスポンサードのおかけで、我々はこの会場でRUbyKaigiという大規模カンファレンスに参加できているのだと改めて感じました(GMOペパボ様、ラクスル様、どうもありがとうございました!)

Matzのキーノート

f:id:yamazaki22:20190507184836j:plain

さて、いよいよ初日のキーノートスピーカーによる講演が始まりました。

初日のキーノートは、Rubyの生みの親であるMatz(まつもとひろゆき氏)による講演です!

話の内容としては、主にRuby3にて実装される機能や改善される性能についてでした。

箇条書きで書くと、主に以下のことを話されてました。

  • Rubyのこれまでの弱点(と言われてきたこと)
  • Ruby on RailsとTwitterとの関係(パフォーマンスの改善)
  • Ruby3でやること
    • 静的解析
    • パフォーマンス改善
  • Ruby2系との後方互換性をどう保つか
  • Ruby2.7で導入する予定のパターンマッチングの紹介

以下、上記の箇条書きに沿って感想を書いていこうと思います。

Rubyのこれまでの弱点(と言われてきたこと)

よくRubyおよびRuby on Railsの弱点として語られることは「処理が遅い」ということでした。その点についてMatzは触れつつも、「でもGithubっていう大規模サイトでRubyは使われているわけで、言うほどパフォーマンスに問題があると思っていない」と言い、現行のRubyは十分速いのでは?と発言。

確かにGithubレベルの大規模サービスで問題なく動いているし、そもそもRubyの処理速度がボトルネックになるほど大規模なサービスというのはごくごく少数派だよね、というのはうなずけます。

アドテクノロジーなど、大量のトラフィックを瞬時に捌くとなると確かに不向きではあると思いますが、そうした例外を除けば全然Rubyでもいいよね!というのが現状ではないかと。

Ruby on RailsとTwitterとの関係(パフォーマンスの改善)

Matzは続いて、「Rubyの処理速度が遅くてRubyはダメだ、という主張がされるようになったのは、TwitterがRubyから別言語に乗り換えたことがきっかけではないか」と述べました。この話はよく聞くことですが、Matzも同様の認識のようでした。

しかし、実はTwitterはRuby1,8を使い続けていたので、Ruby1.9で改善された処理速度の恩恵を受けられないままだった…というのが実情だったとMatzは述べます笑

Rubyは2系になってからも少しづつ処理速度は改善してきており、3系でも速度改善がなされる見込みとのことでした。

Ruby3でやること

  • 静的解析

    Rubyは動的型付け言語ですが、それはMatzの思想が反映された結果とのこと。Matz的には「静的型付け言語は、DRYではないので好きではない」らしく、Ruby3でも型制御は導入しないとのことでした。

    ただ、型チェック機能は導入したいとのことで、Ruby3では型宣言の代わりにいくつかコンポーネントを導入する予定だそうです。

    そのコンポーネントとは、「型情報を書いたファイル」、「Typeプロファイラ」、「静的型チェッカー」といったものであり、それらが揃うと型宣言をせずとも型チェックが可能になるらしいです。 この発表には会場も興味津々で、2系から3系への大きな変化が発表されたことによる興奮が伝わってきました。

  • パフォーマンス改善 十分にRubyは速いと言っていたMatzでしたが、Rubyでもより多くのトラフィックを捌けるようにしたいらしく、パフォーマンス改善をRuby3では行うとのことです。 パフォーマンスを左右するのはメモリとCPUですが、なぜMatzがシングルスレッドで動かす前提でRubyを作ったのかを語るなど、Rubyの背後にある思想が垣間見れた一瞬でした。

Ruby2系との後方互換性をどう保つか

Ruby3系が出る際、2系との後方互換性をどうするかという問題についてMatzは、「そもそも、後方互換性を維持することはすごく大変だ」と、少し辛そうに語っていました笑

中でもキーワード引数については、実は現行の2系においていくつか想定外の挙動も起きているとのことだったので、「あるべき姿にしようとすると、既存のコードが壊れる」という問題を抱えていると、別のセッションで語られていました。

Ruby2.7で導入する予定のパターンマッチの紹介

case式にて用いることができる、パターンマッチ機能がMatzの口から紹介されました。この機能を用いれば、従来は複雑にならざるを得なかったcase式やif文をスリム化し、可読性も高まることが期待されます。

Ruby coreチームからの発表

f:id:yamazaki22:20190507184938j:plain

Rubyコミッターの笹田さんをはじめとした、Ruby coreチームからのRuby3の開発進捗発表の場でした。

大きなトピックとしては、以下のものが紹介されました

  • 静的解析機能
  • JITコンパイラについて
  • パターンマッチング
  • RubyGems とBundlerの統合の進捗
  • irbなど実行環境と、Rubyドキュメントの統合
  • キーワード引数の受け取りを厳密にするために、あえて後方互換性を弾いた(というよりあるべき姿に矯正する思想)

Pattern matching -New feature in Ruby 2.7

@k_tsjさんによる、Ruby2.7から導入されるパターンマッチング機能の解説でした。

詳細は以下のスライドに記載がありますが、これまで複雑に書かざるを得なかった部分をかなり短縮して書けそうです!個人的には2.7にバージョンアップしたら、すぐに使いたい機能だと思っていますし、おそらく2.7の目玉機能となるのではないでしょうか?

https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7?slide=62

After Party

1日目の終了後、中洲川端にある商店街を貸し切って宴会が行われました! 写真から分かる通り、本当に商店街の通りをジャックしてます笑

f:id:yamazaki22:20190426170136j:plain
商店街の端から端まで、こんな感じでテーブルとご飯が立ち並ぶ異様な光景…!

まとめ

0日目、1日目についてお届けしました。

2日目、3日目については、後半の記事を御覧ください!!