Studyplus Engineering Blog

スタディプラスの開発者が発信するブログ

RubyKaigi 2024 参加レポート

こんにちは!スタディプラスがスポンサーしていたRubyKaigi 2024にエンジニア4名が参加しました。その参加レポートをお送りします。

tech.studyplus.co.jp

RubyKaigiを楽しむためにやってよかったこと

事前勉強会

RubyKaigiは言語のコア部分に関わる発表が多く、Webアプリケーション開発者が普段行う業務からすると難しい話も多いです。とはいえせっかく参加するので、なるべく理解したり凄さを感じたりするために、スタディプラス社内でRubyKaigi事前勉強会を開催しました!

やり方としては、SmartHRさんのRubyKaigi 2024事前勉強会で発表されていた『ふつうのWebサービス開発者がRubyKaigiを楽しむためのRubyの知識』を参考に、近年RubyKaigiでホットなテーマの中で4名がそれぞれ興味を持ったテーマを1つ選び、お互いに共有し合う形で進めました。

参加メンバーが選んだテーマは以下でした。

  • JIT/YJIT
  • Parser/LSP
  • Wasm
  • メモリ管理

事前勉強会資料抜粋

この後の感想で触れますが、発表の解像度がかなり上がったので事前勉強会はすごくおすすめです!ぜひRubyKaigiに参加される方はやってみてください。

旅のしおりを準備した

参加者4名は同じ飛行機・宿を利用するため、事前・事後の動きは共通していたので、焦らないように那覇での動き方をまとめた 旅のしおり を準備しました。

那覇に前乗りする際、会場の事前受付を済ませるまでの移動の流れや、現地の公共交通機関でどの電子マネーが使えるかなどがわかっていたので、焦らず、スムーズに動くことができました。

旅のしおり抜粋

現地の様子

那覇空港の到着時にRubyKaigi広告

羽田空港からの飛行機を降りたら、RubyKaigiの広告がお出迎えしてくれて気持ちが高まりました。

RubyKaigi広告

会場入り口

ポップで可愛いRubyKaigi 2024のデザインが施された会場入り口です。自動ドアが閉まっているときに見えるシーサーが可愛いです。

会場入り口

スポンサー

今回のスポンサー一覧です。スタディプラスはGoldスポンサーとして協賛しています。

スポンサー一覧

参加メンバー感想

メンバーの感想を紹介していきます。

川井

個人的にはDay2のキーノートが印象的でした。

Leveraging Falcon and Rails for Real-Time Interactivity

こちらはRailsでFalconとliveのgemを使ってFlappyBirdというゲーム実装の話でした。ゲームのロジックはほとんどRailsのサーバー側にあり、WebSocketsを利用してフロントが描画するHTMLのみ通信をしているという点が印象的でした。普段はRailsを使っているので内容は非常にわかりやすかったです。セッションで利用されたコードはGitHubに公開されているので興味ありましたら是非手元で試してみてください!

github.com

ゲーム起動中は常にWebSocketsの通信が発生しており、中身を見るHTMLの要素が送られてることがわかります。

全体の感想

RubyKaigiに参加するのが初めてだったので、それぞれのセッションがどんな感じなのかわかりませんでした。実際に行ってみると、セッションには様々なレベルのものがありました。中にはRubyの深い部分の話で難しいセッションもありましたが、多くのセッションは事前に深い技術的な知識があまりなくても理解できるように説明されておりとても学びやすいものでした。個人的にRubyの仕組みを勉強するモチベーションになったので、来年に向けてレベルを上げてまた参加したいです!

水口

1. 印象に残ったセッション ( Reducing Implicit Allocations During Method Calling )

Rubyのバグ修正に取り組んでいるJeremy Evans氏による「Ruby 3.3で行われた、また3.4で予定されているメソッド呼び出し時の暗黙的なオブジェクト割り当て(配列やハッシュの生成)を減らすための改善」についてのセッションでした。研鑽Rubyプログラミングの原著者ということで、いまの私の知識から相当に背伸びをしたRubyの改善のお話を聞けるのではないかと思って聴きに行きました。

どれだけのオブジェクトがメソッド呼び出しで暗黙的に割り当てられているかをまず知ることが、その削減のために必要であるということで、objects_allocated メソッドを作成して、これを利用して暗黙的に割り当てられているオブジェクト数を調査する方法が紹介されていました。

そして、 Keyword Splat Separation と彼が呼んでいる最適化手法に始まり、 Allocationless Anonymous Splat Forwardinggeneric argument forwarding と名付けられた手法が展開され、どのように改善していったかが説明されました。英語のセッションでしたが、構成が分かりやすかったのである程度ついていけました。ただ、改善方法の詳細についてはその場で理解しきれず、公開された資料を見ながら追いかけているところです。

このセッションでRubyを作っているプログラマーの凄さを思い知ることになりましたし、いまの自分には理解が難しい改善によって、普段の私たちのRubyを用いたWebアプリケーションの開発が便利になっているのだなと痛感しました。

知らないこと、分からないことが何かを知ることができました。そして、Ruby自体を開発している方々の凄さをもっと肌感覚で理解できる知識も得たいと感じました。まずは『研鑽Rubyプログラミング』を読み返します。

2. ご飯について

沖縄のご飯はとても美味しいですね。あまりにたくさん食べたので少しだけ抜粋して紹介します。

  • 沖縄料理

天ぷら文化が強い沖縄なので、行く前から絶対にもずくの天ぷらで泡盛を飲みたいと思っていました。また、海ぶどう、ゴーヤ、ヘチマなど、食べたいと思っていたものは一通り食べることができました。

沖縄料理

  • コンビニの楽しさ

沖縄のコンビニにしか存在しない商品が多数あり、宿も素泊まりで毎日の朝ごはんはコンビニを物色して、夜も飲みから帰ってきてからコンビニのものを食べていました。

沖縄のコンビニ

  • スパイスカレー

飲食店を探していたら、スパイスカレー屋が多い印象を受けました。島野菜のアチャールなど、沖縄ならではのものも食べることができました。近年人気なんでしょうか?

なお、とある店を出た瞬間にMatzとすれ違ったのですが、びっくりしすぎて声をかけられませんでした。残念。

沖縄のスパイスカレー

3. Rubyistとの交流

MatzのKeynoteで「RubyKaigiは私の常識・価値観を破壊してくる。私のようなおじさんと写真を撮りたがる人がいるんですね」という趣旨の話題を挙げていましたが、私もその一人でした。Rubyを書き始めてから人生が好転しており、私はRubyに救われた人間という自覚があります。しかし、なかなかMatzに声をかけるタイミングがありませんでした。残念!

また、私はStudyplus Engineering Podcastという社外に向けて当社のエンジニアの活動を発信するPodcastを運営しているため、何名か存じ上げているPodcastを配信されている方とお話できました。当社のPodcast発起人や私含め、社内に多くのリスナーがいる Rebuild.fm のmiyagawaさんや、『論より動くもの.fm』を運営するSTORESさんのCTO藤村さんとお話できたのが個人的に熱かったです。挙げきれないのですが、他にもPodcast配信者の方とお話できて良かったです。

4. 総論的な感想

私は2018年からRubyを書き始め、2019年から業務でWebアプリケーションを開発するようになり、Ruby歴は6年です。しかし、タイミングが合わなかったり、コロナ禍に見舞われたためRubyKaigiの現地参加は初めてでした。

実際に参加してみて、「こんなにすごい人たちがRubyを開発しているのか!かっこいい!」であったり、「これほど皆が同じ話題を共有して、これほど高い熱量で楽しそうに話しているのか!」とRubyコミュニティの力強さを感じることができました。後日配信のRubyKaigiのセッションを聴いたことはありましたが、現場の熱量の高さを感じられたり、開発者がすぐ傍にいて簡単に話しかけることもできるという体験は現地でしか味わえないものだと思いました。

私自身、また参加したいですし、来年は当社の社員からもっと多くの人を参加できるように調整を頑張ります。

羽鳥

2024年卒のソフトウェアエンジニアとして、今回初めてRubyKaigiに参加しました。まず、コミュニティの温かさと活気に圧倒されました。エンジニアたちのフレンドリーな雰囲気のおかげで、初心者でも気軽に話しかけることができました。また、業界の第一線で活躍する方々と直接対話する機会が多く、大変刺激を受けました。

印象的だったのが、Day 1のキーノートであるWriting Weird Codeです。この発表では、Rubyのコードを使ってQuineやアニメーションを実現するものが紹介されました。

実際にGitHubに公開されているコードをクローンして動かしてみましたが、「これが本当にRubyのコードで動くんだ……!」と衝撃を受けました。例えば、wavy/wave.rbでは「wave」という文字の形状からアニメーションの現在のフレーム数を計算しています。ターミナルに表示されているコードをコピーしてirbにペーストすると、その瞬間からアニメーションが再開されるという面白い仕組みになっています。

quine

RubyKaigiに参加して感じたこととして、私もOSSにコントリビュートしたいという意欲が湧きました。また、セッションでRubyの内部実装や低レイヤーについて頻繁に言及されたので、それらに関して勉強したいと強く思いました。本当に楽しかったです!

次回のRubyKaigiもぜひ参加したいです!

山田

聞いた発表はどれも、興味深かったのですが、特に印象に残ったものについて書きます。

The grand strategy of Ruby Parser

speakerdeck.com

事前の予習会でParser周りを担当していたため、特に楽しみな発表でした。

LR parser(generator)と手書きparserを比較して何がいいのかという話から始まり、Ruby3.3から使われるようになったLramaの話や、最近入った改善点や今後の話をされていました。

LR parserの話では、複雑な文法のルールの組み合わせを人が見て理解してミスなく修正するのは難しく既存の文法と衝突など発生しうるが、機械的に発見してくれる点は大きなメリットだなと思いました。

また、発表全体としてParser周りのgrand designをベースに何が完了して、何に取り組んでいるかという形で話をされていました。
その中で発表者の金子さん一人で実装を進めていたところに、コントリビューターが増えて手わけして開発が進んでいるところもいいなと感じた発表でした。

Ruby3.4で入る予定のUniversal Parserが実現した後にParser周りがどのようになっていくか楽しみです。

一方、金子さん達のLrama, Universal Parser関連のプロジェクトとは別に手書きParserであるPrismのプロジェクトもあります。
Matzのクロージングキーノートで触れられていましたが、Universal ParserとPrismどちらがCRubyの正式なParserとなるかまだ決定していない状況です。

今回Prismの作者のKevin Newtonさんが参加できなかったこともあり、RubyKaigiを通してPrism側から見たParserの話に関する発表はほとんどありませんでした。Prism側から見たRubyのParser周りの話も聞いてキャッチアップしていきたいと思いました。

Long journey of Ruby standard library

speakerdeck.com

標準ライブラリの歴史や分類の話から始まり、RubyGemsやBundlerについての最近入った機能や今後についてなどの話でした。 普段から使う標準ライブラリやBundlerなどに関する内容だったため、身近に感じる話が多かったです。

Rubyバージョンアップの際にDefault gemsの中でBundled gemsに変更されるライブラリがあります。その際に利用者から見ると対象のライブラリをGemfileに追加する必要がありますが、Ruby3.3で変更予定のライブラリに警告を出す機能が追加されたことを紹介されていました。
自分のコードだけではなく、使っているライブラリ側のコードに対してどのライブラリかの情報含めて警告が出るので、気づいたらライブラリ開発者に連絡してほしいと言われていました。

Rubyのアップデートで遭遇するようになった警告ですが、今回の発表を思い出すことで、より有効活用できそうだと思いました。

また、個人的に初日のOfficial Party中に発表者の柴田さんに標準ライブラリ周りが整理されて使いやすくなってきている感謝を伝えることができたのでよかったです。

The state of Ruby dev tooling

Rubyの開発者向けツールについて、Rubyコミニュティは多くの努力をしてきたが、他の言語などと比較してどうか、今後どうするべきかという話でした。

主にRustのエコシステムと比較されており、RustはBuild、Test、Formatter、Linter、Language serverなどはほとんど使うものが決まっている。一方でRubyはそれぞれ選択肢がたくさんある。それによって、以下のようなことが発生している。

  • 環境構築の難しさ
  • どのツールを選択するか意思決定が必要になる
  • 多くの設定が必要
  • 学習コストがかかる
  • 扱うツールの差によりコラボレーションが難しくなる

Rust以外の言語についてはツール群が統合されているかどうかで、言語を分類されていました。

  • Fragmented
    • Ruby、Python、JavaScript、C/ C++、Java、PHP
  • Consolidated
    • Rust、Go

後発の言語の方が統合されており、そこからRubyも学んでいく必要があるとのこと。

Rubyでのツール群の統合の例として、Prismの話もされていました。成果として、ParserのAPI部分についてはPrism APIを公式のAPIとして採用することにもなっています。

まとめとしてどのようにツール群を統合していくか「Big Picture」を考えていく必要があるという話をされていました。

わたし自身、RubyにRBSが出てきた時に期待感と同時に、既にあったSorbetなどと今後どちらがメインで使われていくことになるのか不安を持ったことも覚えています。
色んな選択肢があり、開発者に自由があることはRubyのいいところです。一方で今後も新しい利用者が増えてコミュニティが盛り上がっていくためには、ツール群を統合してコミュニティの力を集中して体験を良くしていくことも必要なことだと感じました。

沖縄のグルメ

技術的な話ではありませんが、せっかく沖縄に行くのでグルメも楽しもうというこで、沖縄らしい食べ物をたくさん楽しむことができました!
どれも美味しかったのですが、個人的おすすめを紹介します。

  • 第一牧志 公設市場
    2つ目は食べ物そのものではありませんが、公設市場です。1Fで選んだ食材を2Fで調理してもらって食べることができます。「おじさん」という魚を刺身と塩バター焼きにしてもらいましたが新鮮で最高でした。

全体を通して

RubyKaigi中に懇親会などで他社の方とも話をさせてもらう機会も多くあり刺激を受けることができました。また、その中にStudyplusを使っていたor使っているという方も多くいました。それだけ使われているサービスということを実感できたことは開発の励みになりました。

また、登壇されている方はみな普段からRubyコア部分に関連する開発をされている方ばかりで、成果を発表されている姿はエンジニアとしてもカッコいいなと思いました。
わたし自身、RubyKaigiに限らずコミュニティで発表できるような成果をどんどん作っていきたいというモチベーションを上げることができました! まずは今回のRubyKaigiの発表やその周辺の領域で興味があったものをさわって手を動かしていきます!

まとめ

RubyKaigi 2024に参加してRubyコミュニティと沖縄の素晴らしさを感じることができました。引き続きスタディプラスはRubyコミュニティに貢献していきたいです!

また、それぞれのエンジニアリングに対する熱量も高まり、いわゆる Kaigi Effect の機運を感じております。今後の仕事やプログラマーとしての活動に活かしていきたいです。