こんにちは!
2022 年にWantedly に新卒入社し、DX Squad でエンジニアをしている大森です。
今回は、日本最大の Ruby に関するカンファレンスである RubyKaigi に Wantedly がスポンサードし、いくつかの講演を聴講しています。Wantedly はスポンサーブースを設けていて、Twitterをフォローしてくださった方には技術書や開発に役立つ Engineering Handbook をプレゼントしています!
WantedlyはRubyKaigi2022にプラチナプランとして協賛し、技術書と開発に役立つHandbookをブースでプレゼントしています #rubykaigi | Wantedly, Inc.
2日目のお昼は天むすを頂きました。天むす発祥のお店の天むすらしく、とても美味しかったです。
本記事では、2日目の発表である How fast really is Ruby 3.x? について紹介させていただきます。
How fast really is Ruby 3.x?
RubyKaigi公式ページ: https://rubykaigi.org/2022/presentations/fujimotos.html#day2
スライド: https://github.com/fujimotos/RubyKaigi2022/blob/38fe29222e9a717f32d29eb6e604a387c6b18382/20220908-RubyKaigi2022.pdf
この発表は、Fluentd のメンテナをしてらっしゃる Fujimoto さんのご発表でした。
Fluentd とは、各種ログを収集し、パースし保存するなど、適切な処理を行うためのアプリケーションです。主にRuby で書かれていて、Wantedly でもさまざまな場面で活用しています。
Ruby 3x3
Ruby 3x3 という、Ruby を3倍早くしようというプロジェクトがありました。過去のRubyKaigiでは、Rails アプリケーションを題材に、 Ruby 3x3 の結果測定を行う発表があったそうです。
> Fibers Are the Right Solution https://rubykaigi.org/2019/presentations/ioquatix.html
この発表では、Rails アプリケーションの実行時間の大半はDBアクセスなどの待ち時間に使われている、といったグラフが示されていたようです。
そのため、Ruby の速度が 3倍になっても Rails アプリケーションが3倍高速になるわけではない、というお話でした。
Ruby のランタイムバージョンと速度の関係
Rails アプリケーションと違い、Fluentd はログをパースし処理するアプリケーションです。
その特性から、DBアクセスなどの外部読み込みによる待ち時間がないため、Ruby のランタイムをフルに利用できます。そのため、Ruby ランタイムの改善により、実際に速度向上がみられたようです。
次のグラフは、実際に発表で示されていたものを引用させていただきました。
Ruby 1.9 から 3.2 で Fluentd を動かして、LTSV のログのスループットを計測されたようです。
(https://github.com/fujimotos/RubyKaigi2022/blob/38fe29222e9a717f32d29eb6e604a387c6b18382/ltsv.png)
グラフから、スループットが バージョン 1.9.3 => 3.2.0+yjit で3.15倍になっていることがわかります。
多言語との比較
次に、メジャーなスクリプト言語でそれぞれテキストをパースするコードを書いて、スループットを比較する実験が行われました。
(https://github.com/fujimotos/RubyKaigi2022/blob/38fe29222e9a717f32d29eb6e604a387c6b18382/langs.png)
これをみると、Ruby は飛び抜けて早いわけではなく、むしろ他のスクリプト言語のほうが現状では早い、という結果であることがわかります。
Ruby 3x3 Revisted が達成されると、Fluentdのメンテナとしても嬉しいし、他の言語と比較して遅い、といった現状が解決されるかもしれないと話されていました。
Fluentd の未来
Fluentd の次期リリースが 2023年 3月に行われる予定だそうです。そこでは、Ruby 3.2 ベースになり、YJITも有効になるそうです。
YJITが有効になったことで、約10%の速度向上が確認できているそうです。
感想
Ruby 3x3 の結果、Rails アプリケーションが 3倍高速になるわけではない、という話は納得できました。しかし、Fluentdのように Ruby のランタイムをフル活用するアプリケーションでは、すごく効いてくることがわかりました。
また、Fluentd も Ruby 3.2 ベースでリリースされ、YJITが有効になるという話を聞いてWantedlyでもいつか導入してみたいと思いました。
興味深い発表をありがとうございました!
RubyKaigiも早いものでもう折返しです。
Wantedlyから参加したエンジニアが他の記事をこれからも出していきます。そちらも御覧ください。