【RubyKaigi 2024事前勉強会】igaigaさんとCoincheck開発チームが語る。必見のセッションと見どころ
Coincheckの開発チームのために特別に社内で開催されたRubyKaigi 2024の事前勉強会では、講師としてigaigaさんを迎えカンファレンスの注目すべきポイントを解説していただきました。この3時間の社内勉強会では、RubyKaigi 2024のポイントとなるセッションをはじめ、それぞれのセッションでどのようなテーマが取り上げられるのかを語っていただき、参加者にとって実り多い時間となりました。
本記事では、CoincheckからRubyKaigi 2024に参加するエンジニア、日下、牟田、そして櫻井が当勉強会の要点等を分かりやすく紹介します。
まずはRubyKaigi 2024の事前勉強会で紹介された、特に興味深いセッションについて紹介します。
基調講演: Leveraging Falcon and Rails for Real-Time Interactivity
Leveraging Falcon and Rails for Real-Time Interactivity
RubyKaigi 2024の事前勉強会では、多くのセッションが紹介されました。その中でまず注目したのは、Samuelさんによる基調講演「Leveraging Falcon and Rails for Real-Time Interactivity」です。
Falconは、Pumaのライバルとしても知られるHTTPサーバで、1秒間に1万リクエストを処理できるという非常に高速な処理能力を持つことで知られています。10年くらいにわたる開発期間を経て、Falconは特に並行処理の技術を発展させています。
Fiberと非同期処理
Falconが注目を集める理由の一つに、RubyのFiberを活用した非同期処理の実装があります。並行処理の方式には一般的にOSのスレッドを使うか、Ruby内部でプログラマーが明示的に切り替える方式の二つがあります。Fiberは後者の方式で、軽量なスレッドとして機能し、メモリ消費を大幅に削減しながら効率的に処理を切り替えることができます。FalconはFiberを使用しており、高密度なワーカー配置を実現し、スケーラビリティとリソース効率の向上を図っています。
その結果、Falconの最大の特徴は、そのメモリ使用量の少なさとI/Oのブロック時に自動でスレッドを切り替える能力が得られ、これにより、同時に多くのリクエストを効率的に処理することが可能になっています。
非同期処理の課題とFalcon
現代のWebアプリケーション開発では、非同期処理の効率が非常に重要です。Fiberのようなツールが提供する非同期I/Oは、リソースの有効利用と応答性の向上に寄与しますが、その実装は複雑さを伴います。この複雑な部分(=手動でFiberを切り替える)を意識せずに恩恵を受けれるところが、Falconのすごいところです。
Samuelさんは、Falconの開発過程で得た知見や改善を共有し、これまでの10年間の技術進化についても話されるのではないかと予想します。特に、Ruby本体にFiberやFiberSchedulerの改善をどのように取り入れたかが注目されます。
また、FiberSchedulerのライバルであるMaNyについてはSasadaさんが開発を手がけており、両者の比較も興味深い話題となりそうです。Sasadaさんが当日どのような質問をするかも見どころの一つです。
Rubyにおける大量のスレッドを支えるMaNyプロジェクトについて紹介するセッションになりそうです。他言語では既に実現しているM:Nスレッド(多数のユーザースレッドを少数のシステムスレッド上で動かす技術)をRubyに導入するための取り組みです。この技術により、Rubyの並行処理能力が大きく向上する可能性があります。
Sasadaさんの説明は非常にわかりやすく、参加者にRubyの内部構造の理解が進むような説明がされると思います。技術的な洞察だけでなく、Rubyが直面している課題とその解決策を探る場ともなりそうです。
どちらも、ぜひお見逃しなく。
基調講演: Matz Keynote
具体的なセッション詳細は記載されていませんが、Rubyの生みの親としてRuby開発者のモチベーションを高める内容になると期待されています。彼の話はプログラミング言語に対する情熱を新たにかき立て、コミュニティにおける革新の重要性を強調してくれると思われます。
また、松本さんとの写真撮影もファンにとっては見逃せない機会です。参加者の皆さんはぜひ松本さんと写真を撮ってきてください。
基調講演: Writing Weird Code
tompngさんは最近、irbコミッターとして活動しているため、型推論についての進歩を共有してくれるのかを期待しています。irbでの型推論は実行履歴を用いてより正確な推論を行うため、静的解析とは異なるアプローチを採用しています。
また、tompngさんは超絶技巧プログラマとしての顔を持っていて、こちらはhttps://github.com/tric/trick2022 でのtompngさんの作品です。
基調講演の前にみると、tompngさんのすごさがわかると思います。いろんな技巧を散りばめており、tompngさんのアーチスト的な側面が見られると思います。
RubyKaigi2024で注目のテーマ
JIT(Just-In-Time Compilation)の進化とRubyのパフォーマンス向上
次にRubyKaigi 2024で注目するのは、Rubyの実行速度を向上させるJust-In-Time (JIT) コンパイル技術です。特にMJITからYJITへの進化に焦点が当てられ、その最新の最適化技術がどのようにRubyアプリケーションのパフォーマンスに影響を与えているかがセッションで紹介されるのではないでしょうか?
Takashi Kokubun / YJIT Makes Rails 1.7x Faster
MJITはRuby 2.6で導入され、当初から速度の三倍の向上を目指して開発されました。しかし、RailsのようなI/Oが多いアプリケーションでは、期待されたパフォーマンス向上を達成できませんでした。
Maxime Chevalier-Boisvert / Breaking the Ruby Performance Barrier
ShopifyのMaximeさんたちのチームによって開発されたYJITは、Ruby 3.2で正式版になり、3.3でさらに改善が行われました。特にRailsアプリケーションの実行速度が最大50%向上し、コスト削減に大きく貢献しています。YJITはRust言語で書かれています。使用する際にRust処理系をインストールする必要がありますが、必要に応じてOFFにできることからMatzによる承認が得られています。
Pitchfork(参考:スタディサプリ最大のRailsアプリケーションにYJIT+pitchforkを導入してメモリ使用量を劇的に削減するまで )
Shopifyが使用しているHTTPサーバーunicornの派生版であるPitchforkは、JITの性能を最大化するために、PreforkとReforkのタイミングを最適化します。これにより、類似のワーカーが多い場合にメモリの無駄遣いを防ぎます。
YJITの今後の展望
昨年までのJIT周辺の流れも考えると、KokubunさんとMaximeさんのセッションでは、YJITの開発プロセス、特に高速化に至るまでの課題と成功が詳細に語られるのではないでしょうか。JIT技術をさらに進化させることで、Ruby自体の書き方にも影響を与え、純粋なRubyコードで高性能なアプリケーションを実現できるようになるかもしれません。
例えば、JITの上では、CよりRubyで書いた方が早くなることがあるます。kokubunさんのセッションで話題となるかもしれません。
YJITなしで同じパフォーマンスが得られた話
YJITでさらに早くできたケース
今年
YJITで速くなる提案
YJITのさらなる進化についての提案や、次世代のJIT技術に関する議論が行われることが期待されます。
Namespaceの導入
RubyKaigi 2024では、Ruby言語にNamespaceを導入することが大きな話題となっています。これは、Rubyコミュニティの長年の夢であり、tagomorisさんのセッションではこの新機能の実装状況やその影響について語られる予定です。
Satoshi Tagomori / Namespace, What and Why
昨年のカンファレンス Chris Salzberg / Multiverse Ruby で「可能性がある」と話されて以来、具体的な進展が非常に待ち望まれていました。名前空間の導入は、gemなどを隔離された環境で開発するための大きな一歩となり、実装が期待されています。
パーサーに関する最新動向
パーサー、Rubyの基盤となる技術です。RubyKaigi2024でも、字句解析、構文解析、そしてAST(抽象構文木)の生成に関するセッションがあります。これらのプロセスはRubyの仮想マシンがコードを効率的に実行するために欠かせない要素であり、プログラミング言語の核心的な構成要素です。ただし、Rubyの文法の複雑さがパーサーのコードベースの拡大を招き、これが改良作業を困難にしています。
この背景から、現在Rubyコミュニティではいくつかの重要なパーサープロジェクトが注目を集めています。
The grand strategy of Ruby Parser の、金子さんが提案している「Lrama」は、新しい構文解析アプローチを採用しており、Rubyの解析効率を向上させることを目指しています。一方で、「Bishon」というプロジェクトは、依存関係の問題を解消することに注力しており、より安定したパーサーの開発を進めています。
もう一つ、注目されているのがShopifyによる「Prism」プロジェクトです。これまでに乱立していた複数のパーサーを一つに統一し、その結果として生成されるASTを効率的に解析することが目的です。
例えば、RubocopなどのツールはASTを基にコード解析を行っていますが、Prismの導入によりこれを置き換える提案がされて、採用されたように記憶しています。
これらのパーサーに関する議論は非常にアツい分野になっております。最終的な決定はMatzさんによって行われるでしょう。
ここまでのパーサーの歴史が書かれている非常に良い記事がこちらです。
予習にぜひ。
型システムに関する議論
一方で、Rubyの型システムに関する議論も盛んに行われています。昨年のKeynoteでもあったように、「人間がいちいち型を定義しないで型推論をできるようにするべき」というのがMatzさんの予測です。
その中で、このタイトルは野心的ですね。この型推論の進化を目指す中で、SoutaroさんはRubyコードの中に型定義を導入するとこんなにメリットがあるって、Matzさんいかに認めてもらうのか?が、注目点ではないでしょうか?
これに対して、Kokuyouさんは、LLMを使用した今風の内容を提供してくれそうです。
また、mametterさんは昨年、Typeprofの全面的な書き直しを提案し、今年はその最新の進展が聞けそうです。
Coincheckではまだ型の導入をしていませんが、これらのセッションからより有益な情報をキャッチアップして、自分たちのプロダクト開発に活かしていけたら良いですね。
その他のトピック
WebAssembly (wasm) とRubyの連携
いくつかのセッションで、RubyGemをWebAssembly上で動作させるための最新の進展が紹介されます。
これは、Rubyをブラウザだけでなく、さまざまなプラットフォーム上で動作可能にするための重要なステップです。昨年、Rubyがwasm上で動作することが発表されて以来、その実用性と拡張性についてさらなる発展が期待されています。
Rubyとゲーム
YujiyokooさんとGedorinkuさんのセッションでは、異なるハードウェア上でRubyを動かす技術に焦点が当てられます。Gedorinkuさんは、スーパーファミコンでRubyを動かすらしいですね。
毎年、異なるハードウェアでRubyを動かしてくれていますが、ハードごとにノウハウが異なることが大変とのことで、今年も非常に楽しみです。
その他の注目セッション
emのノウハウ:Hiroshi SHIBATA / Long journey of Ruby standard library
研鑽Ruby書いている方:Jeremy Evans / Reducing Implicit Allocations During Method Calling
Monoruby:
S_isshiki1969さんによる、Rustで書かれた全く新しいRubyのJIT実装に関するセッションです。これはRubyの実行速度を大幅に改善する可能性を秘めています。
HomebrewとRuby:
Mike McQuaid / Using "modern" Ruby to build a better, faster Homebrew
MikeMcQuaidさんのセッションでは、MacのパッケージマネージャーであるHomebrewがどのようにRubyの依存問題を解決しているのかが議論されるでしょう。
ERBの進化:
M_sekiさんはERBの設計について話し、テンプレートエンジンがどのように進化しているかを紹介されます。
他の言語の機能をRubyに入れる話:Vladimir Dementyev / Ruby Mixology 101: adding shots of PHP, Elixir, and more
まとめと参加予定者からのコメント
RubyKaigi 2024の事前勉強会では、igaigaさんが丁寧に一つつずセッションを紹介してくれることで、それぞれのセッションの比較ポイントや注目すべきポイントが見えてきました。RubyKaigiは、Rubyの最新の進展を学び、Rubyの未来について共に考える絶好の機会です。Coincheckは、RubyKaigi 2024に「Gold Sponsors」として協賛しています。現地には開発エンジニアが現地に参加しますので、ぜひ気軽に声をかけてください。
櫻井 湧太 / coincheck / 決済システム・リスティング部クリプト入金開発
はじめまして、クリプト入金開発グループの櫻井です。
並行処理プログラミングがマイブームなので、Samuelさんの基調講演でのFalconに関する内容や、sasadaさんのRactorに関する話題を特に楽しみにしています。
また、型に関する講演でどのようなアプローチや議論がなされるのかも楽しみです。
初めてのRubyKaigi現地参戦となりますので、現地ならではの交流も楽しみたいと思います!
現地でお会いしましょう。よろしくお願いします!
日下 宗之 / coincheck / アプリケーション基盤 G
アプリケーション基盤G の日下です。
Coincheck では、 その多くの部分が Ruby / Rails を利用したアプリケーションです。アプリケーション基盤G では、Ruby / Rails のアップデートも行なっていますので、将来的なアップデートの内容なども気になるところですし、開発者体験をよくするために、型やパーサーの話も気になっています。
とはいえ、仕事での活用などは抜きにして、セッションの内容はもちろんのこと、食も含めて沖縄での RubyKaigi を楽しませてもらおうと思っています。現地で、いろいろなエンジニアの方と交流できること、楽しみにしています!
牟田 健斗 / coincheck / Crypto Asset事業本部 販売所事業部 販売所事業推進G
こんにちは、販売所の開発チームの牟田です。
RubyKaigi2024では去年に引き続き、NamespaceやJIT・パーサーなどのセッションがあり、どのようなテッキーな話を聴けるのか楽しみしています。特にMaximeさんのセッションで、どのようにYJITのC言語依存を減らし高速化を実現したのか、それに伴いRubyの書き方にどのような影響があるのか についてお話があるようなのでとても注目しています。
それ以外にも企業ブース、現地ならではの食事やRubykaigiに参加される皆さんとの交流もとても楽しみです!
Official PartyやAfter Partyにも参加しますので是非現地でお話しましょう〜
カジュアル面談受付中!
Coinckeckでは「新しい価値交換を、もっと身近に。」をミッションに、
暗号資産やブロックチェーンにより生まれる「新しい価値交換」、またその次に現れる新しいテクノロジーにより実現される変革を誰もが身近に感じられるように、より良いサービスを創出する仲間を募集してます。
少しでも話を聞いてみたい!と思う方は、ぜひお気軽にお問い合わせください。ご応募頂いた場合ご経歴とご意向に沿って、社内で幅広くポジションを検討させていただきます。