こんにちは、2024年に新卒で入社し、クラウドハウス労務事業部でバックエンドエンジニアをしているdaiki_fujiokaです。
本記事では、3日目の最後のセッションである Yukihiro "Matz" Matsumoto(@yukihiro_matz)さんによる Matz Keynoteについて紹介させていただきます。
セッション内容: 「Better Ruby」
発表者は Rubyist であれば誰もが知っている Ruby 生みの親 Matz ことまつもとゆきひろさんになります。
テーマは「Better Ruby」で、この1年間における Ruby の発展を踏まえてこれからの Ruby をより良くするために必要なことを紹介されていました。
本記事ではKeynoteで発表されたことをまとめ、私がこれまで参加したセッションも含めて感じたことについて紹介しています。
Ruby の設計思想や特徴について、設計者自身から聞ける非常に貴重な体験でした。
設計者による Ruby に込められた思想について
Ruby の求める思想として Fun to code や A Programmers' Best Friend などを掲げ、エンジニアが自然に楽しく Ruby を書けることを目指しています。
セッションでは Ruby の特徴として以下のようなものを挙げられていました。
- エンジニアがあったらいいなというメソッドが実装されている
- 実装に対して不必要な制限を設けていない
- RubyGems やソフトウェアの拡張機能の豊富さ
- 大きな Ruby コミュニティ
- etc
実際に Ruby を利用しているエンジニアとしてこれらの恩恵というのは大きなものです。初学者でもわかりやすい直感的な言語仕様とドキュメントの充実さは、新卒エンジニアが取り組みやすい言語として優れていると実感します。
Ruby とパフォーマンス
初学者の目線から見て完成している Ruby ですが解決すべき課題はたくさんあります。
セッションではパフォーマンスに着目し、RubyKaigi 2024 3日間のセッションを踏まえて紹介します。
プログラムの処理速度
かつて Ruby は実行速度が遅い言語として評価されていましたが、近年の改善によって大規模なプロダクトにも活用できる性能になってきました。GitHub や Shopify など規模の大きい企業が Ruby を活用していることは皆さんもご存知かと思います。
プログラムの処理速度が向上した要因としては以下が挙げられ、
- プログラムが使用する構造体の最適化
- Gabage Collector の最適化
- コンパイラの改善
実際にできた機能としては YARV や JITコンパイラ(MJIT, YJIT)などが該当します。
セッションではTakashi Kokubun(@k0kubun)さんの YJIT Makes Rails 1.7x Faster や Aaron Patterson(@tenderlove)さんの Speeding up Instance Variables with Red-Black Trees にて紹介されました。
特に近年の Web アプリケーションは高速化のためにメモリを頻繁に使うことに加えて、ストレージなどに比べて高価であることが知られています。Ruby がより高速化、省エネ化することでプロダクトがより本質的な部分にコストをかけられるように支援しているのです。
Concurrency なプログラムへの対応
Ruby の言語特徴として Concurrency なプログラミングが不得意であるという性質を抱えています。
Ruby はこれまで非同期処理の手法として Threads や Fiber を提供しています。
これらのメソッドはM:Nスレッドと呼ばれる多重に並行実行するプログラムを実現できません。
そこで RubyKaigi 2024 では上記の課題を解決する策として Fiber Scheduler や Ractor が提案されました。
セッションではKoichi Sasada(@ko1)さんの Ractor Enhancements, 2024 や Samuel Williams(@ioquatix)さんの Leveraging Falcon and Rails for Real-Time Interactivity にて紹介されています。
Ruby コミュニティの開発速度の向上
Ruby コミュニティの提供するソフトウェアにとって大きな障害となるのが、Ruby の Parser の問題です。
ソフトウェアが Ruby 言語を理解するために Parser が必ず利用されるのですが、Ruby は統一された Parser が存在しません。複数存在する Parser には相互に互換性がなかったり、日々更新される Ruby の機能に対応していないものが存在したりしました。
そこで Ruby は Universal Parser と題して Parser の画一化を目指しています。性質の違う2つの Parser である Prism、そして Lrama がそれぞれの進捗やソフトウェアに対する貢献について紹介されていました。
セッションではYuichiro Kaneko(@spikeolaf)さんの The grand strategy of Ruby Parser や Koichi ITO(@koic)さんの RuboCop: LSP and Prism にて紹介されています。
上げられた3つのパフォーマンス改善の施策を通じて Ruby の仕組みに詳しくなることができました。良いコードを書くためには背景知識を知っておくことは必要不可欠であり、RubyKaigi 2024 のあとも引き続き学習して Ruby に対する知見を増やしていきます。
Ruby の未来に向けて
これらの発展は2004年に思い描いた Ruby に欲しい機能が今現実に起きています。
Ruby1系に存在しなかったキーワード引数やJIT、今回のセッションで紹介されたNamespaceがSatoshi Tagomori(@tagomoris)のNamespace, What and Whyなどが全て実現されれば、Ruby4 へのバージョンアップも視野に入れているとのことでした。
当時は夢物語だった理想も、今では現実になり、さらなる Ruby の発展に向けて Ruby4.0 への様々な夢を膨らませています。
感想
RubyKaigi に3日間参加してきましたが、発表者・参加者全員が Ruby コミュニティとしてより良いものを作りたいという空気を感じました。
残念ながら私は参加したセッションの全ての内容を理解できませんでした。しかし普段使っているものの裏側を知り、たくさんの人の熱意を感じ、よりエンジニアとして精進していきたいと思えるカンファレンスになりました。
初日終了後のオフィシャルパーティでは実際にまつもとさんとお話しして、感謝の意を伝えさせていただく機会にも恵まれました。
これからも Ruby コミュニティに貢献できるように頑張ります!
Techouseでは、社会課題の解決に一緒に取り組むエンジニアを募集しております。 ご応募お待ちしております。 jp.techouse.com