こんにちは、minne事業部のnissyiです。2023年5月11日(木)から13日(土)にかけて、RubyKaigi 2023が長野県松本市で開催されました。GMOペパボ株式会社(以下、ペパボ)では、エンジニア約30人がオフライン参加したので、そのレポートをお届けします。
- RubyKaigiとは
- ペパボのブースについて
- 印象に残ったセッション
- Matz Keynote / 30 Years of Ruby
- Make Regexp#match much faster
- UTF-8 is coming to mruby/c
- DIY Your Touchpad Experience: Building Your Own Gestures
- Implementing "++" operator, stepping into parse.y
- Revisiting TypeProf - IDE support as a primary feature
- Ruby vs Kickboxer - the state of MRuby, JRuby and CRuby
- 当日ヘルパー
- その他関連イベント
- KaigiEffect
- Rubyメソッドかるた
- おわりに
RubyKaigiとは
プログラミング言語のRubyやその周辺技術を中心とした国際的な技術カンファレンスです。Rubyを作ったMatzことまつもとゆきひろさんやRubyのCommitterをはじめ、世界中からRubyを愛するRubyistたちが集まり、最先端の発表やRubyist同士の交流を楽しみます。 RubyKaigi 2023はオフライン・オンラインのハイブリッドで開催されました。会場には約1,200人ものRubyistが集まり、約30ものスポンサーブースが出展されていました。
昨年に引き続き、GMOインターネットグループとしてスポンサー協賛し、グループパートナーとブースを出展しました。昨年の様子に関しては、こちらの記事をご覧ください。
ペパボのブースについて
SUZURI事業部のほりゆうです。今回初めてオフラインでRubyKaigiに参加しました。11日がRubyKaigiの初日でしたが、前日の10日から会場入りしてDevRelチームのブース設営をお手伝いしました。
ペパボのブースではSUZURIのアイテムの展示、ステッカーやお菓子の配布、そして会場で使うことができるQRコードのシールの発行を行なっていました!!
GMOペパボブースでSNSアイコンのステッカーを印刷して配っています!是非お越しください!!🧑💻 #pepabo #GMOdev #rubykaigi pic.twitter.com/F0waYwhGOT
— Yuta Kurotaki (@kurotaky) May 12, 2023
QRコードの方は特に好評で、多くの方にシールの発行をしていただきました!ブースに立ち寄ってくださった皆様、ありがとうございました。
3日目は自分とkeigo、yagijinの3人でブースに来てくださった方向けにマジックもしました。RubyKaigi限定で、Rubyをテーマにしたマジックも多くの方に楽しんでいただきました。来年も盛り上げたいと思います!
マジックをしていた、minne事業部のやぎじんです。マジックを披露するだけでなく、ブースの運営に参加したことでブースに来てくださった方々とたくさん交流できたので、そのことについてご紹介します。
具体的には、Rubyやセッションについてのお話だったり、ペパボのテックブログを読んでくださった方から感想をいただいたり、プロダクト開発において私が最近悩んでいることについて一緒に考察していただいたりと技術イベントならではの交流ができました。廊下ですれ違ったときにいきなり話し始めるのは難しいですが、ブースという場を生かしながら技術紹介を行ったりSUZURIのグッズなどの具体的なプロダクトを設置したりすることで、ペパボのことを知ってもらいながら技術的なトークに花を咲かせました。 他にも、SUZURIやminneを使ってくださっているユーザーの方々から「こういった作品をつくることができました〜」というような具体的な感想をいただきました。普段エンジニアとして開発に取り組んでいると、ユーザーからの声を直接聞くことが少ないので、この体験を経て開発のモチベーションを上げることができました。
上記のようなすてきな交流ができて言葉では表せないくらい良かったです!!お話ししてくださった皆様ありがとうございました!
印象に残ったセッション
Matz Keynote / 30 Years of Ruby
minne事業部の nobu09 からは、初日最初のセッションの Matz Keynote についてご紹介します。
Rubyは今年で30周年を迎えました。このセッションでは、Rubyの生みの親のMatzことまつもとゆきひろさんが、その30年をいくつかの時代に区切りながらふりかえり、その時々で得た教訓や未来へ向けた展望を語ってくださいました。
年代 | 起きたこと |
---|---|
1993年02月24日 | Ruby was named Ruby(Rubyの概念が誕生した日) |
1993年02月-1994年12月 | Rubyがあまり知られていない時期、一人で開発 |
1994年12月-1995年12月 | Alpha Release インターネットに公開する前の時期 |
1995年12月-1997年08月 | First Public Release(0.95) |
1997年08月-1999年11月 | Ruby 1.0 |
1999年12月-2004年08月 | Books and Conferences 本の出版やカンファレンスがもりあがってきた時期 |
2004年09月-2009年01月 | Ruby on Railsの登場、Killer Application |
2009年01月-2013年02月 | Ruby1.9.1リリース(互換性がない大規模な改修) |
2013年02月-2015年11月 | Ruby2.0 20周年記念 |
2015年11月-2020年02月 | Ruby 3x3 Ruby3.xに備えてRubyを3倍速くするというキャッチフレーズ |
2020年02月- | Ruby3.0 |
Rubyの名付けについての教訓は「Good Name」でした。Rubyの他には、Coral、Tishなどの名前の候補があったそうで、もしTishになっていたら、RubyKaigiはTishKaigiになっていたかもしれないという話を交えつつ、良い名前を選ぶということはとても大事なことだとお話されていました。
First Public Releaseの時代には「Community = Communication」ということをお話されていました。それまで一人で開発していたRubyを複数人で開発することでコミュニケーションが生まれ、開発に関わってくれた方がコミュニティに参加してくれるようになったことでRubyコミュニティが広がっていったそうです。
Rubyを3倍速くするというキャッチフレーズの時代では「Leadership and Vision」というお話でした。Rubyを3倍速くすることは、当初は確実に実現できるとは思っていなかったそうですが、「3倍速くする」というビジョンを掲げたことにより、さまざまな実装・改善を行ってくれる方があらわれ、実現することができたと言えるのではないかと仰っていました。このことから、リーダーシップとビジョンを提示していくことは大事なことだと学んだとお話しされていました。
発表の終盤では、ChatGPTでRubyの型を推論できるというデモをしつつ、人間がわざわざ型を書かなくても型を十分に推論してくれる未来がくるのではないかとお聞きしました。
最後に「Rubyコミュニティ全体でRubyをよくしていくことに、みなさんに参加してもらいたい」と締めくくられていました。自分は「これからRubyコミュニティに少しずつ参加していきたい」という気持ちを抱きながら今回のRubyKaigiに参加したのですが、このKeynoteを聞いて「今後のRubyは、このRubyKaigiに集まっているみんなで作っていくのだ」と気持ちが盛りあがりました。
Make Regexp#match much faster
EC事業部のsymmondsです。私が最も印象に残ったセッションはMake Regexp#match much fasterです。
このセッションはRubyの正規表現の強力さについて述べられ、ReDoS対策のためにRuby3.2で導入された正規表現マッチング(Regexp#match)のメモ化(キャッシュ)による最適化についての発表でした。
Rubyに限らず他言語でも報告されていますが、正規表現マッチングにはReDoSと呼ばれる正規表現のパターン評価に時間を要する文字列を入力することで、マッチング時間が膨大になってしまう脆弱性があります。この脆弱性への対応としてReDoSを防ぐのではなく、正規表現マッチングのメモ化による最適化が行われマッチ時間を高速にしたということが述べられました。
ReDoSが起こった際には、正規表現のマッチングにおいて同じ状態のマッチングが何度もされるといったことが起こります。これを一度失敗したものについては同じマッチングがされないようメモ化を導入することによって、正規表現マッチングの高速化を行ったというものでした。ただし、いくつかの正規表現は最適化できないことも述べられており、全ての正規表現が最適化されているわけではないとのことでした。
私自身、正規表現を書くことはあるもののReDoSのことを考慮できていなかったので、正規表現を使う際にはマッチング時間を気にしつつReDoSのことも意識していきたいと思います。また、将来的にはRuboCopを使ってReDoSの疑いがある正規表現については警告を出すように進めているとの話もあり、その機能があればとても便利そうに思ったのでリリースされるのを楽しみにしています。
UTF-8 is coming to mruby/c
EC事業部のしおりんです。 私が印象に残ったセッションはUTF-8 is coming to mruby/cでした。
このセッションは、現在ASCIIしかサポートしていない状態のmruby/cにおいて、UTF-8に対応できるよう0から取り組んでいるという発表でした。mruby/cとはプログラム実行時のメモリの消費量が軽量的なRubyで、主にマイコンやIoT分野、キーボード向けのファームウェアであるprk_firmwareなどで用いられているものです。
「UTF-8とは何か、文字コードが異なることでどのような違いがあるのか」という基本から、「対応していないとどういう点で不便なのか」というところまで、💎や🏯などのRubyKaigiに関連した絵文字を用いた丁寧な説明があったところが、とてもわかりやすく面白かったです。
また、あまり知る機会がない「文字コードを使えるようにするためのアプローチ方法」などがとても興味深かったのと同時に、そのチャレンジにワクワクしながら取り組んでいるima1zumiさんの様子も、発表を聞きながら感じられたことも印象的でした。
普段そこまで意識せず利用している文字コードに関して、具体的にどう動いているのかをのぞいて見ることで「こんなにも奥が深いものなんだ」ということを初めて知りました。普段何気なく使っているものを深掘りしていくことへの興味が湧いたセッションでした。
DIY Your Touchpad Experience: Building Your Own Gestures
鹿児島エンジニアリングチームのkurehajimeです。 自分が印象に残ったセッションはDIY Your Touchpad Experience: Building Your Own Gesturesでした。 こちらはfusumaというLinuxデスクトップでタッチジェスチャを可能にするGemを開発したお話で、RubyKaigiの中では珍しいデスクトップ向けアプリケーションをテーマとしたセッションです。
詳しい内容は発表スライドをぜひ見ていただきたいのですが、セッションを聞いて感じたのが「アーキテクチャが非常によく練られているなぁ」という点でした。 拡張性が高く他のアプリケーションの邪魔もしないように丁寧に配慮されていて、「なるほど綺麗だなぁ」と感激したのですが、それもそのはず、この方はfusumaの前にxSwipeという同じ目的のツールをPerl/Synapticsで開発していました。一度ツールを完成させたあと、もう一度ゼロから作り直しているからこそさまざまな知見が活かされているのかもしれません。
「自分も何かツール作りたい」と刺激を受けたセッションでした。
Implementing "++" operator, stepping into parse.y
こんにちは、今年2月に入社したminne事業部の sakiです。今年初めてRubyKaigiに現地参加しました! 私がKaigiに参加して「面白い!」と感じたセッションは、Misaki Shioiさんによる、Implementing "++" operator, stepping into parse.yというセッションです。
「Rubyにインクリメント演算子を足してみよう」というテーマで、以下4つの実装パターンの試行錯誤の過程を順にお話ししてくださいました。
++
をInteger#succ
で置き換える++
を自前のメソッドで置き換える++
をスキャナで+=1
に置き換える++
をパーサで+=1
に置き換える
1つ目のsucc
メソッドを使った実装では、i = 0
で変数に0を代入した後にi++
の実行結果を1にすることができたので「意外と簡単に実装できるのかな?」と思いきや、succ
メソッドは変数に戻り値を代入しないためにi
の中身は0のままで1になっていませんでした。「これでは完全にインクリメント演算子の挙動を実現していない」となり、「では、2つ目の自前のメソッドで置き換える方法で実装してみたらどうか?」 といった形で話が進んでいきます。
まず、Rubyというプログラミング言語自体に機能を追加しよう、というアイデア自体が「面白い!」と感じ、「どうやって実装するのだろう」とワクワクしながらお聴きしました。 「この実装方法なら上手くいくかな」と会場全員で見守るような雰囲気があり、前の実装方法で実現できなかったことをクリアできたときや、新たな問題が発生したときの会場の沸き具合がすさまじく、スピーカーとオーディエンスが一体となってKaigiを作り上げている感覚がして楽しかったです。セッションの内容自体が面白いのですが、Shioiさんのお話の間合いも素晴らしくてトーク自体に引き込まれるので、Rubyに関することだけでなくプレゼンテーションに関しても学びの多いセッションでした。
Shioiさんの後日談のブログも拝見しました。昨年も一昨年もスピーカーをされていたので、「きっとRubyのことなら何でも知っている方なのだろう」と勝手に思っていましたが、
++
を実装する…といっても実際には何をすればよいのかさっぱりわからず、しばらくはparse.yやcompile.cやinsns.defあたりを開いては閉じ、宙を眺めるという無為な日々を送りました。 (RubyKaigi 2023に参加しました & 登壇しました - shioimm || coe401_ より引用)
と書かれているのを読んで、自分にとって遠い存在のように感じてしまうすごいRubyistの方も、日々全く分からないところから始めていらっしゃるのだな、と励みになりました。私もまずは最新のRubyを使ってみるところから始めようと思いました。
Revisiting TypeProf - IDE support as a primary feature
minne事業部のnissyiです。私の中で最も印象に残ったセッションは、Revisiting TypeProf - IDE support as a primary featureでした。
Ruby 3.0から搭載された静的型解析ツール TypeProfがあまり使われていない、という内容から始まりました。より使ってもらえるように開発者体験の向上を目指して、TypeProf ver.2を作り直しているとのことでした。この ver.2 は ver.1 の反省点を活かしながら Ruby 3.3 への搭載を目指して開発が進められていて、解析アルゴリズムの作り直しに取り組まれているそうです。
会場では TypeProf ver.2 のデモンストレーションが行われました。このデモンストレーションで、動作がとても高速だったことと、IDE上で型注釈が表示されコメント化することで、実行前にエラーを発見できることに驚きました。型注釈をコメント化する、という内容は発表スライドを見るとイメージが掴みやすいかと思います。
私はまだまだ、RBSなどのRubyの静的型解析に関する機能を使うことができてないので、これからどんどん使っていきたいという気持ちとプロダクトにも導入していきたいという気持ちが高まりました。
Ruby vs Kickboxer - the state of MRuby, JRuby and CRuby
minne事業部の nacalです。私が色んな意味で最も印象に残ったセッションは、Ruby vs Kickboxer - the state of MRuby, JRuby and CRubyです。
!? #rubykaigiB pic.twitter.com/xVR2BXD6gP
— なかる (@_nacal) May 13, 2023
冒頭から壇上で突然キックボクシングが始まり、私たちは一体何を見に来ているのかという空気で会場が包まれました。セッションの内容としては、COVID-19の影響によってジムに行けなくなってしまったのでトレーニング用のマシンをRubyで開発したというものでした。(普通そうはならんやろ)
ハードウェアを必要とするトレーニングマシンでは、単純にサーバー側のコードをRubyで実装するのみではなく、実際のマシンの制御や操作を指示するクライアントアプリの制御が必要です。今回このシステムでは、マシン制御をmruby、アプリからの操作の指示をJRuby、仲介となるサーバーをCRubyで書いたとのことで、その何としてもRubyを使ってやるんだという心意気からRubyへの熱狂的な愛を感じざるを得ませんでした。
特にモバイルクライアントからのJRubyを使って指示を実現するためにはさまざまな課題があり、技術選定や試行錯誤の過程を紹介しながら、最後には小さなデモトレーニングマシンを壇上の大きなスクリーンに映し出して無事にトレーニングをすることができ、会場は大きな拍手に包まれました。
このセッションを聞いて「Rubyでこんなこともできちゃうのか!」と感じました。実用性という面では現実的ではない部分もあるとは思いますが、日常的にRubyでWeb開発をしている上では出会わなかったようなおもしろいRubyの一面を見ることができたのはRubyKaigiならではの体験だったかなと思います。
また英語のセッションということもあり、はじめはちゃんと内容を理解できるのか不安な部分はあったのですが、デモや実際のコードを交えながら進めていただいたのでとても理解しやすかったです。英語があまり分からないからといって興味のあるセッションの公聴を諦めるのはもったいないので、躊躇せず気軽に参加してみると意外と理解できる部分も多いなと感じました。
当日ヘルパー
SUZURI事業部の tanaken0515 です。当日ヘルパーとして参加しました。
当日ヘルパーはRubyKaigi 2023の運営チームの一員です。運営チーム(About - RubyKaigi 2023)は40名を超える規模なので最初は驚くかもしれません(オーガナイザー13名、デザイナー1名、ネットワークオペレーション担当者9名、当日ヘルパー20名)。加えて、イベント運営を専門とする業者の方も(私の目算ですが)およそ30名いらっしゃったので、総勢70名の規模です。
私を含むヘルパーの半数以上のメンバーは、前日から会場の設営を行ないました。スポンサーブースの設営を行なう各企業の方々がいらっしゃるので、その方々のチェックインを実施したり、各企業のノベルティが詰まった荷物を各ブースに運んだり、RubyKaigiのオフィシャルノベルティを配置したり、といったことが主な作業です。
会期中は、それぞれのヘルパーに持ち場が与えられて、基本的にはその持ち場での業務になります。私は受付を担当して、参加者のみなさんのチェックインと備品(ネームバッジなど)の配布を行ないました。参加された約1,200名のみなさま、スムーズな受付にご協力いただきありがとうございました!
基本的には持ち場での業務になりますが、例外的な業務もたくさん発生します。運営チームメンバーは常にトランシーバーを装着しており、その場の状況に応じて行動します。ヘルパーは、オーガナイザーからの指示を受けて動くこともあれば、自身で問題を発見して報告して動くこともあります。より良いRubyKaigiにするために自身が貢献できている、と実感できるのでおすすめです。興味のある方はぜひヘルパーに応募してみてください!会期の数ヵ月前にSNS等でRubyKaigi公式アカウントから募集が出るはずですので、来年に向けて要チェックです!
その他関連イベント
前夜祭(Shibuya.rb)
RubyKaigiの2週間前、4/27(木)には第2本社のGMO Yours・フクラスで「Shibuya.rb RubyKaigi 2023 前夜祭 @GMO Yours・フクラス」が開催されました。 関連イベントに関する紹介や、RubyKaigi 2023のCFPに応募したものの不採用となってしまったセッションの発表、懇親会が行われ約100名の参加者が楽しみました。
KeebKaigi 2023
RubyKaigi前日(Day0)に33GAKUでKeebKaigi 2023が開催されました。
直近数回のRubyKaigiでは、お昼休みになると会場の廊下に自然発生的にキーボードが並べられ、交流が発生するのが定番(?)となっていたのが、今年は公式のスピンオフイベントとして開催されました。
このイベントはSUZURIでもスポンサーもさせて頂きました。KeebKaigi 2023のオフィシャルノベルティはSUZURIで購入できます!
KeebKaigi 2023では、コワーキングスペースを貸し切り、キーボードが好きなRubyistが集まりキーボードを並べて交流や登壇、LTなどが行われました。
ペパボからはkurotakyとyuchiがLT("狭ピッチ"トーク)を行いました。
イベントアーカイブ動画もありますので興味がある方はぜひどうぞ。
余談ですが、今年のRubyKaigiの会期中でも会場の廊下の椅子にキーボードが並べられていました。
Day0からさまざまなRubyistと交流ができ、非常に楽しいイベントでした。会期中もKeebKaigiがコミュニケーションのきっかけになったので、来年も開催されることを期待しています。
各社交流ランチ
会期中は参加している各企業の若手を中心に、交流ランチ会が開催されていました。
誕生月ごとにグループ分けという小学生以来の懐かしい体験をし、さまざまな企業のメンバーと会社やRubyについてワイワイ話しながら松本の美味しいランチをいただきました。こういった他企業の人々と、Rubyという1つの共通言語を持った状態で交流できるのも、オフラインの技術カンファレンスの醍醐味の1つだったと感じます。
Rubyistたちの交流の様子は、#rubyfriends で見ることができるので、ぜひご覧ください。
RubyMusicMixin 2023
こんにちは、 keigo です。私からは、RubyKaigiの3日目のあとに開催された、RubyMusicMixin 2023 についてのレポを書きます。
LPサイトめちゃ爆イケなので、ぜひ見ていってください!: https://conference.pixiv.co.jp/2023/rubymusicmixin
本イベントは、色々と縁がありオーガナイズチームにも参加させていただいておりました。当日自分は、DJに加えカメラマンとしても参戦しておりました。
yuchiです。引き続きRubyMusicMixinについてのレポートです。
自分もDJに加えVJ、カメラマンとして参加しました。VJとは会場のかかってる曲や雰囲気、照明などに合った映像を出す役割の人です。今回の会場ではDJブースの横にスクリーンを設置し、投影を行っていました。
そのため、DJブースの目の前にいると見えづらい状態で、主に見てもらえるのはブースから少し下がった位置にいる人と考え、あまり激しい点滅のあるような映像は使わず、落ち着いた映像を出すように意識をしながらVJをしていました。
当日の様子
照明やVJなどがめちゃいい感じの空間でした!!!
みなさんのおかげで、DJも爆盛り上がりしました!! (photo by yuchi)
Rubyistが一体となって盛り上がるのめちゃ最高です!もし来年も開催されたら、みなさんで行きましょう!
KaigiEffect
SUZURI事業部のほりゆうです。RubyKaigiに参加してさまざまな影響を受けました。一番大きな変化は、Rubyとの向き合い方、学習の仕方の変化です。今回Rubyを作っている皆様と、コミュニティに深く関わっている皆様と直接関わらせていただいて「楽しく交流しながらも、ここにいらっしゃる方々は圧倒的に勉強している」ということを肌で感じました。
発表に関しても頑張って聞いても分からないことが多く、悔しい思いもしました。 来年までに名著を読み漁り、しっかり予習をした上でRubyKaigiに臨みたいとやる気を頂きました。頑張ります! 本を読む際も、著者の方を思い浮かべながら勉強できるのでRubyKaigiに参加できて本当に良かったです。
こんにちは!SUZURI事業部のうごです。一番大きな変化はRubyに対する関わり方です。これまではRubyを使うだけだったのですが、使うだけではなく、コミュニティの発展にも貢献したいと思うようになりました。 RubyKaigi終了後、RailsGilrsのドキュメント更新一緒にやりませんか?という記事を見かけました。そこで、Rails Girlsのドキュメントの翻訳に取り組むことにしました。執筆日時点では1つのプルリクエストがマージされて、Rails Girlsのドキュメントに反映されています。これからも自分のできることからRubyのコミュニティに貢献していきたいです。
Rubyメソッドかるた
minne事業部の yanagi です。 RubyKaigiから後日、ペパボのオフィスにてRubyKaigiで永和システムマネジメントさんに頂いたRubyメソッドかるたで遊びました。
RubyKaigi 2023で「Rubyメソッドかるた」を配布します! - ESM アジャイル事業部 開発者ブログ
かるたでは普段からよく使っているメソッドから、RubyKaigiの発表で知ったクラス・メソッド、かるたで見るまでは知らなかったマニアックなメソッドまで取り扱われていました。
Object#==
の取り札 と間違えて Object#equal?
の取り札をお手つきしたことでオブジェクトの同値性と同一性の違いの話になったり、Object#public_send
があることで Object#send
では privateメソッドも呼び出せることに気づいたりと、遊んでる間も勉強になる場面が何度もありました。また、知らなかったメソッドでも説明を聞けばメソッド名から推測して取ることができたという場面も多々あり、やはり名前は重要だと改めて実感しました。
かるたの取扱説明書の番外編にもありましたが、読み上げる情報を変えるだけでゲーム性が大きく変わるところもこのかるたの面白さです。読み札の通りにクラス名から読むと、取り札にもクラス名が書かれているので本来のかるた要素が大きくなります。また、クラス名は読まず引数・戻り値・説明の順で読むとRubyの知識がより求められるようになってきます。こうして遊び方を工夫することによってあらゆるRubyの習熟度の人が集まっても楽しめそうです。
この日のかるたはあらゆる部署のエンジニアが集まって行われ、さらにたまたま通りかかったエンジニアが急きょ参戦したりと、部署を超えて社内のRubyistとRubyの話で盛り上がることができ、とても楽しい時間になりました。永和システムマネジメントさん、すてきなかるたを作っていただきありがとうございます!
おわりに
EC事業部のsymmondsです。
RubyKaigiのオーガナイザーをはじめ、運営に関わってくださった人々のおかげで今年もペパボから約30名程の人数で参加することができました。この場を借りて、御礼を申し上げます。
久しぶりのオフラインでの大規模カンファレンスなこともあり、コミュニティの熱量をじかに感じることができました。また、他社の方々とお話しすることで良い刺激をもらうことができました。参加させていただいたことでの学びを活かして、日頃の業務やサービス開発に取り組んでいきたいと思います。