Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Kaigi on Rails 2023に参加しました(Day2)

こんにちは、hachi8833です。Kaigi on Rails 2023無事終了&成功おめでとうございます!主催運営・スポンサー・スタッフ・参加者の皆さま、素晴らしいカンファレンスをありがとうございます。「参加してよかった」「幸せしかない」という声を何度となく直に耳にしました。

動画配信だけは現地で様子がわかりませんでしたが、こちらも順調だったようで何よりです。参加者は現地と動画視聴を合わせて1000人を超えていたそうです。

次回のスタッフ募集に応募が殺到したという話に、特に成功の手応えを感じました↓。

SmartBank Tech様によるスポンサーブースのまとめ↓、貴重な記事ですね。

発表資料については既に多くの方が続々とブログでまとめていらっしゃるので、スライドなどの網羅については、皆さんのブログや以下のruby-jp SlackのScrapboxにおまかせすることにして、もう少しフリースタイルで書いてみたいと思います。

参考: 発表資料 -- Kaigi on Rails 2023 - ruby-jp

🔗 Simplicity on Rails - RDB, REST and Ruby by MOROHASHI Kyosuke - Kaigi on Rails 2023

こちらはDay1の発表なのですが、Day1の夜に多くのベテラン開発者たちがこの発表を大絶賛していたので、ここで触れておきたいと思います。「Railsをやっている/これからやる全ての若手開発者たちにぜひとも学んで欲しい内容」「これもキーノートスピーチにすべき」と称賛する声までありました。

私は現地にいながら、この発表を見そびれていました... 😢

moroさんが既にスライドを公開してくださったおかげで、やっと後追いでその一端に触れられました。moroさんの長年に渡るRailsアプリ設計のエッセンスがいくつも凝縮されていて、話の切り口が本当に見事でした。スライド1枚の引用では到底伝えきれないので、ぜひスライドを隅々までご覧ください。動画が待ち遠しい発表のひとつです。

以下からは、私が見たDay2の発表のメモです。

🔗 Railsの型ファイル自動生成における課題と解決 by Yuki Kurihara - Kaigi on Rails 2023

Rubyの型シグネチャ言語であるRBSをRubyコードから自動生成する取り組みです。

ruby/rbs - GitHub

ksssさんはこれを支援するためのツールorthoses-railsを作りました。読み方は「オーサウスィーズ」だそうです。

ksss/orthoses-rails - GitHub

これに関連して、Rubyのドキュメント生成ツールであるYARDの型情報を流用できるorthoses-yardや、YARDの記法ミス修正のためのrubocop-yardも作ったそうです。

ksss/orthoses-yard - GitHub

ksss/rubocop-yard - GitHub

締めの一言は「RBSは、本当は手書きがベスト」でした。


スライドで使われていたかわいいイラストも気になったので発表後にお尋ねすると、Mixi社内で自由に利用できるイラスト素材なのだそうです。

🔗 Fat Modelを解消するためのCQRSアーキテクチャ by Shogo Terai - Kaigi on Rails 2023

CQRS(Command and Query Responsibility Segregation)というパターンをRailsで実践した話です。

参考: CQRS パターン - Azure Architecture Center | Microsoft Learn

発表を聞いた範囲では、モデルの手前に層を追加して、CommandとQueryに分担させることだとひとまず理解しました。

YOUTRUSTでは、さらに工夫してCommandの手前にUseCase(コマンドの組み合わせを定義)も配置することでCommandをシンプルに保っているそうです。

これにより、参照系と更新系でデータソースを分けられる、責務が明確になって縮小されるのでモデルの肥大化防止につながり、テストもしやすくなるというメリットも得られたとのことです。こんな方法もあるんですね。

🔗 E2E testing on Rails 2023 by Yusuke Iwaki - Kaigi on Rails 2023

先ごろRails 7.1にも採用されたPlaywright用Rubyインターフェイス(ウォッチ20230906)であるplaywright-ruby-clientを開発したYusuke Iwakiさんの発表です。

YusukeIwaki/playwright-ruby-client - GitHub

Playwrightに限らず、cypress-on-railsやPythonのPyTestなど他のライブラリとも比較しながら、システムテストの内部動作に関する豊富な経験や知見を紹介しています。

自分もPlaywrightをdocker-compose経由でRailsのシステムテストに使いたいと思いつつ後回しになっていたので、参考にしたいです。

🔗 Multiple Databasesを用いて2つのRailsプロジェクトを統合する by imadoki - Kaigi on Rails 2023

pixivの2つのWebサービス「pixivコミック」と「pixivノベル」をRailsのマルチプルデータベースを用いて統合した話です。

参考: Active Record の複数データベース対応 - Railsガイド

アプリケーションの統合作業では、どちらをどちらに合わせるかを慎重に検討する必要があり、「pixivコミック」と「pixivノベル」のスキーマや構成が似ている分、やりやすい面もあれば注意すべき点もあります。

モデル切り替えの実装はswitch_point風にしたそうです。

eagletmt/switch_point - GitHub

🔗 Hotwire的な設計を追求して「Web紙芝居」に行き着いた話 by Yasuko Ohba (nay3) - Kaigi on Rails 2023

今回のKaigi on Rails 2023では、Hotwire(Turbo/Stimulusも)に関連する発表は全部見ると決めていて、実際そうしました。その中から万葉の@nay3さんによる発表を取り上げてみます。

Hotwireで画面を作っていると、ついSPA的にコンポーネント化でまとめたくなる気持ちになりがちですが、それが必ずしもよい結果を生むとは限らないそうです。

HotwireはSPA的なクライアントサイドの部分更新に見えて、実はむしろRails伝統のサーバーサイド画面制御に立脚しているという指摘になるほどと思いました。DHHがHotwireをこのような形にしたのもうなずけます。

参考: シングルページアプリケーション - Wikipedia -- SPA

同発表で、Turboドキュメントの日本語化も万葉で手がけていることを知りました↓。ありがとうございます!

🔗 ActiveSupport::CurrentAttributes: すっごく便利なのに嫌われ者?! by Sampo Kuokkanen - Kaigi on Rails 2023

昨日のAndreyさん(右)の発表に続き、Evil MartiansのSampoさん(左)による発表です。

参考: Rails API ActiveSupport::CurrentAttributes

タイトルを見た瞬間から、自分が以前翻訳した以下の記事を思い出しました。Sampoさんの発表でも言及いただき、ありがとうございます!

Railsの`CurrentAttributes`は有害である(翻訳)

発表では、Ryan Biggさんの主張にうなずける点も多々あるとしつつ、上手に使えばActiveSupport::CurrentAttributesはとても強力で便利だよ、と教えてくれました。

また、本日のキーノートスピーカーであるbyrootさんが以前修正した、Rails 5.2とPumaのセキュリティ問題にもCurrentAttributesが関連していた話も紹介していました。「byrootさん、ありがとう!」

参考: Information Exposure with Puma and Rails · Advisory · puma/puma

トークも笑いのツボを押さえていて観客を盛り上げていました。大阪仕込でしょうか?


ところで、これまでRubyKaigiやKaigi on Railsのような場で海外勢と思しき人に英語で話しかけると「あ、日本語で大丈夫ですから!」と返事をいただく経験を何度となくしています。

AndreyさんとSampoさん、そしてDay1のzzakさんは皆日本語で問題なくコミュニケーションできる方々だったこともあり、Day2の懇親会でも他の参加者たちとすっかり打ち解けて話に興じている姿を目にして嬉しくなりました。

🔗 A Decade of Rails Bug Fixes by byroot - Kaigi on Rails 2023

Day2のトリをつとめたのがRailsコミッターの@byrootことJean Boussierさんです。
byrootさんは@casperisfineという業務用アカウントもGitHubで使い分けています。

発表は録画の形で行われました(日本語字幕も用意されていました)。内容は、byrootさんが手がけた2件のバグ修正です。

1件目はかなり昔のもので、カウンタキャッシュのバグ修正が当初の予想を超えて厄介だった話でした。@tenderloveことAaron Pattersonさんとの当時のやりとりも回想する興味深い内容でした。

2件目は、mastodonで発生したMarshal.#dumpエラーのバグ修正でした。

参考: Marshal.#dump (Ruby 3.2 リファレンスマニュアル)

このバグもbyrootさんの当初の予想を超えていて、Ruby 3.2.1のオブジェクトシェイプに関連していたとのことでした。再現の難しそうなバグですね...

発表を聴いていて思い出されたのが、ついこの間Railsウォッチで取り上げた(ウォッチ20231018)以下の記事でした。こちらの翻訳記事は明日公開いたしますので、どうぞお楽しみに。

参考: Writing Object Shape friendly code in Ruby

修正は以下で行われました。byrootさんの締めの言葉は「Marshal.#dumpのようなRubyバージョンに依存する不安定なものを当てにするもんじゃない」でした。


まったくトリビアですが、byrootさんがhashを「アッシュ」とフランス語風に発音していたことに気づきました。

参考: 無音のh・有音のh - Wikipedia

最後に

Kaigi on Rails 2023というカンファレンスに参加でき、最初の現地開催が見事成功を収める場に居合わせる機会に恵まれ、本当によかったと思います。

Day2の翌日が日曜日というのも地味に嬉しいポイントでした。私は名残惜しさをこらえて2日とも電車で帰りましたが、浅草橋で朝までコースの人たちにとってありがたかっただろうと想像しています。

カンファレンスの場では、本当に多くの方々からの「TechRachoいつも読んでます」「Railsウォッチを社内読み会してます」「Rails 7.1のChangelogマジ助かりました」といったお声に直に触れる機会を得られたのが貴重でした。おそらく、これまで参加したイベントで最も多かったと思います。今後も精進いたしますので、これからもTechRachoをよろしくお願いします。

そして、改めてすべての関係者の皆さま、お疲れさま&ありがとうございました!

関連記事

Kaigi on Rails 2023に参加しました(Day1)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。