Linkers Tech Blog

リンカーズ株式会社の開発者ブログです。

RubyKaigi 2023に参加しました

こんにちは。情報システム部の呉です。

5.11~5.13の3日間、松本市でRubyKaigi2023が開催されました。参加の皆様、良い時間を過ごされましたでしょうか?

リンカーズでは、RubyKaigi2023にGold Sponsorとして協賛させていただき、私を含めて5名のエンジニアが現地参加しました(リモート参加のエンジニアも1人います)。とても楽しい体験でした。

この記事では、自分が印象に残った発表と、全体的の感想を共有させていただきたいと思います。

会場:まつもと市民文化会館(同僚から写真をもらいました)

自己紹介

リンカーズ株式会社情報システム部の呉澤冉(Go Takuzen)と申します。中国出身、来日5年目です。

リンカーズの応募をきっかけにRubyを勉強し始めて、今のRuby歴は2年ちょいとなります。

RubyKaigiの初参加は前回のRubyKaigi2022で、今回は2回目です。

まつもとさんのkeynote: 30 Years of Ruby

まつもとさんからRubyの歴史と小ネタが紹介されました。

  • Rubyの名前は、Ruby / Coral / Tishという候補がありました。
    • 別の平行宇宙で本当にTishKaigiが開催されているかもしれませんね笑
  • Rubyの基礎は、最初(まつもとさんが個人開発している、パブリック公開前)の時期からほぼ完成していました
  • Ruby 1.8と1.9は非互換で、1.9に移行したくないユーザーが多数いたので、コミュニティが5年ほど分断の状態になっていました。
    • こういう話題になると、やはりPythonが出てきますね。環境構築で「Python3をディフォルトにする」みたいなことをやってなかったのでしょうか:-D。Pythonの場合は、15年ほど分断されたらしいです。
  • Ruby3x3、「ごめんなさいできなかった」になる可能性が高いと想定されていました
    • 結果は本当にできましたね。

印象に残ったセッション

Build a mini Ruby debugger in under 300 lines

個人的には聴いたトークの中にこちらが一番newbie-friendlyで、「なるほど」連発でした。

今回紹介されたミニデバッガは、以下の技術を使っています。

  • Binding
    • 実行時のコンテキストを取得するAPI
  • TracePoint
    • インタプリタのイベントをトレースするAPI
  • Reline
    • REPL環境を作るためのライブラリ

結局、189行のコードで基本機能が動作するシンプルなデバッガが出来上がりましたね。素晴らしいと思いませんか。シンプルといっても、ruby/debugも同じ仕組みになっているらしいです。今回で習得した知識を持って、ruby/debugのコードを勉強してみたいと思っています。

The future version of Ruby Parser

パーサーについてのトークはもう1つありまして(Yet Another Ruby Parser)、

どちらも

  • Portability (Universal Parser)
  • Maintainability
  • Error tolerance

3つの課題を中心に紹介されました。

こちらのトークは、Ruby既存のパーサーを改善する話でした。

  • トークンを添削することでパーサーを構文エラーから回復させる
  • Rubyが今まで使っているBisonを拡張するのが困難なので新しいパーサージェネレーターを作ってBisonを置き換える

パーサーについて自分はほぼ何も知りませんが、発表者の金子さん(@spikeolaf)の説明がわかりやすくて、Slideも結構読みやすいので、色々勉強になりました。こんなハードルが高いプロジェクトを短時間で完成させるなんで、トークを聞きながら、金子さんがガチですげえ、と思っていました。(みなさんもきっと同じでしょう)

Yet Another Ruby Parser

こちらのトークではShopifyが主導している、YARP(Yet Another Ruby Parser)というRubyの新しいパーサーが紹介されました。

YARPはCRuby(Bison/parse.y)を依存せず、独立なプロジェクトで、他のツールやライブラリが簡単にYARPを使えることが、YARPの目標の一つです。YARPのリポジトリに、VSCode拡張が提供されていますので、早速手元で試してみました。(ドキュメントがまたそこまで完成されていなさそうなので、少し試行錯誤をしました)

foo = [

foo = []
foo.

若干いい感じで構文エラーを教えてくれるようになっていますね。

一方、改善できそうだなと思ったケースもありました。例えば:

{
  a: 1
  b: 2
}

とにかく、VSCodeまたは他のエディターはRubyMine並(もしくは以上)の使いやすさになる未来が見えてきましたので、YARPの今後はとても期待できると思います。

そして、LramaとYARPは、競争相手になっていますね。まつもとさんは最終どちらを採用されるか、楽しみにしています:-D

感想

  • 30代のRubyは元気でますます強くなっています。
  • 今回の記事では紹介しませんでしたが、Lightning Talksもとても面白くて大好きなセッションでした。
  • RubyKaigi参加した後は、多分1年の中で勉強のモチベーションが一番強くなる時期となります。来年のRubyKaigiで聞き取れる内容がもっと増えるように、これからの1年間は頑張って勉強したいと思います。
  • スポンサーさんから用意していただいたりんごジュース、クラフトビール(と冷蔵庫)は🙌!
  • 今回は飲み会が多数用意されましたが、自分はシャイな人間なので、参加するかを数日間迷っていたところ、全部満員になりました。。。特に一日のKaigiが終わって、盛り上がった会場から静かなホテルに入る瞬間、パーティーに行きたい気持ちがMAXでした。今年は残念でしたので、来年は絶対早めに枠を確保したいと思っています。
  • 松本はとてもいい街ですね。いい🏯、いい🍺、いい🍜...
  • ...

松本城(同僚から写真をもらいました)

成長を感じたRubyKaigi

去年津市で開催されたRubyKaigiが私の初参加でした。その時は、セッションを聴いても本当に何も分からなくて、RubyKaigiが終わった後に結構落ち込んでいました。

ちょうどその後、プライベートでnand2tetrisというオープンコースを勉強し始めて、数ヶ月をかけて完走しました。このコースではNAND論理ゲートからOSまで実装しながらコンピューターの基本的な仕組みを習得することができます。学んだ知識は今年のセッションを聴いた時に、結構役に立ちました。興味がある方がぜひnand2tetrisをやってみてください!

まとめ

あっという間に、RubyKaigi2023が終わってしまいました。スピーカーのみなさん、スタッフのみなさん、本当にありがとうございました!

また来年、沖縄にてお会いしましょう!