こんにちは、hachi8833です。Kaigi on Rails 2023無事終了&成功おめでとうございます!主催運営・スポンサー・スタッフ・参加者の皆さま、素晴らしいカンファレンスをありがとうございます。「参加してよかった」「幸せしかない」という声を何度となく直に耳にしました。
動画配信だけは現地で様子がわかりませんでしたが、こちらも順調だったようで何よりです。参加者は現地と動画視聴を合わせて1000人を超えていたそうです。
配信でしたが楽しめました!
運営の方・登壇された方、ありがとうございました🙏🙏#kaigionrails— すずか (@suzuka_hori) October 28, 2023
次回のスタッフ募集に応募が殺到したという話に、特に成功の手応えを感じました↓。
#kaigionrails にご参加の皆様、お疲れ様でしたそしてありがとうございました!おかげさまでとても良いカンファレンスになりました。
さて、業務連絡です。クロージングで「スタッフ募集してます」と言いましたが、すでにすごい数の応募をいただいているのでいったん締め切りとします。感謝!— 大倉雅史(OKURA Masafumi) (@okuramasafumi) October 29, 2023
SmartBank Tech様によるスポンサーブースのまとめ↓、貴重な記事ですね。
#kaigionrails ブース紹介ブログを公開しました✨2日目もぜひいろいろなブース回ってみてくださいね。B/43のブースも何度でもお越しください😚
全10ブース網羅! Kaigi on Rails 2023のスポンサーブースまとめ - inSmartBank https://t.co/Rnjur8ewFE
— SmartBank Tech (@SmartBankTech) October 27, 2023
発表資料については既に多くの方が続々とブログでまとめていらっしゃるので、スライドなどの網羅については、皆さんのブログや以下のruby-jp SlackのScrapboxにおまかせすることにして、もう少しフリースタイルで書いてみたいと思います。
参考: 発表資料 -- Kaigi on Rails 2023 - ruby-jp
後でアクセスしやすいようにスライドをまとめ始めました #kaigionrails /【Kaigi on Rails 2023】発表資料まとめ https://t.co/Ks0v3xyOEn
— はっさん (@hassasa3) October 28, 2023
🔗 Simplicity on Rails - RDB, REST and Ruby by MOROHASHI Kyosuke - Kaigi on Rails 2023
こちらはDay1の発表なのですが、Day1の夜に多くのベテラン開発者たちがこの発表を大絶賛していたので、ここで触れておきたいと思います。「Railsをやっている/これからやる全ての若手開発者たちにぜひとも学んで欲しい内容」「これもキーノートスピーチにすべき」と称賛する声までありました。
本日の #kaigionrails の発表資料です。 https://t.co/Fiw1CA4Ydj
聞いてくださった皆様、発表機会をくださったオーガナイザーの皆様、ありがとうございます!
Day2 も気楽になって楽しみたいと思います。— MOROHASHI Kyosuke (@moro) October 27, 2023
私は現地にいながら、この発表を見そびれていました... 😢
moroさんが既にスライドを公開してくださったおかげで、やっと後追いでその一端に触れられました。moroさんの長年に渡るRailsアプリ設計のエッセンスがいくつも凝縮されていて、話の切り口が本当に見事でした。スライド1枚の引用では到底伝えきれないので、ぜひスライドを隅々までご覧ください。動画が待ち遠しい発表のひとつです。
以下からは、私が見たDay2の発表のメモです。
🔗 Railsの型ファイル自動生成における課題と解決 by Yuki Kurihara - Kaigi on Rails 2023
Rubyの型シグネチャ言語であるRBSをRubyコードから自動生成する取り組みです。
ksssさんはこれを支援するためのツールorthoses-railsを作りました。読み方は「オーサウスィーズ」だそうです。
これに関連して、Rubyのドキュメント生成ツールであるYARDの型情報を流用できるorthoses-yardや、YARDの記法ミス修正のためのrubocop-yardも作ったそうです。
締めの一言は「RBSは、本当は手書きがベスト」でした。
スライドで使われていたかわいいイラストも気になったので発表後にお尋ねすると、Mixi社内で自由に利用できるイラスト素材なのだそうです。
🔗 Fat Modelを解消するためのCQRSアーキテクチャ by Shogo Terai - Kaigi on Rails 2023
Kaigi on Rails 2023で発表した「Fat Modelを解消するためのCQRSアーキテクチャ」の資料です!
ご清聴どうもありがとうございました!https://t.co/o2ZJWF7tE9 #kaigionrails #YOUTRUST— 寺井省吾 / YOUTRUST (@krpk1900_dev) October 28, 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
11:05-35 A会場で話すネタhttps://t.co/eKoZQ3TDVs #kaigionrailsA
— Yusuke Iwaki (@yi01imagination) October 28, 2023
先ごろRails 7.1にも採用されたPlaywright用Rubyインターフェイス(ウォッチ20230906)であるplaywright-ruby-clientを開発したYusuke Iwakiさんの発表です。
Playwrightに限らず、cypress-on-railsやPythonのPyTestなど他のライブラリとも比較しながら、システムテストの内部動作に関する豊富な経験や知見を紹介しています。
自分もPlaywrightをdocker-compose経由でRailsのシステムテストに使いたいと思いつつ後回しになっていたので、参考にしたいです。
🔗 Multiple Databasesを用いて2つのRailsプロジェクトを統合する by imadoki - Kaigi on Rails 2023
#kaigionrails
遅くなりましたが発表資料ですhttps://t.co/Xknf2pxbMA— いーま (@imadeathne) October 30, 2023
pixivの2つのWebサービス「pixivコミック」と「pixivノベル」をRailsのマルチプルデータベースを用いて統合した話です。
参考: Active Record の複数データベース対応 - Railsガイド
アプリケーションの統合作業では、どちらをどちらに合わせるかを慎重に検討する必要があり、「pixivコミック」と「pixivノベル」のスキーマや構成が似ている分、やりやすい面もあれば注意すべき点もあります。
モデル切り替えの実装はswitch_point風にしたそうです。
🔗 Hotwire的な設計を追求して「Web紙芝居」に行き着いた話 by Yasuko Ohba (nay3) - Kaigi on Rails 2023
本日の #kaigionrails でのトーク「Hotwire的な設計を追求して『Web紙芝居』に行き着いた話」の資料です https://t.co/N8jEQNpTCG
— Yasuko Ohba (大場寧子) (@nay3) October 28, 2023
今回のKaigi on Rails 2023では、Hotwire(Turbo/Stimulusも)に関連する発表は全部見ると決めていて、実際そうしました。その中から万葉の@nay3さんによる発表を取り上げてみます。
Hotwireで画面を作っていると、ついSPA的にコンポーネント化でまとめたくなる気持ちになりがちですが、それが必ずしもよい結果を生むとは限らないそうです。
HotwireはSPA的なクライアントサイドの部分更新に見えて、実はむしろRails伝統のサーバーサイド画面制御に立脚しているという指摘になるほどと思いました。DHHがHotwireをこのような形にしたのもうなずけます。
参考: シングルページアプリケーション - Wikipedia -- SPA
同発表で、Turboドキュメントの日本語化も万葉で手がけていることを知りました↓。ありがとうございます!
Turbo Handbook 翻訳サイト: https://t.co/lNbpAOjuFv
こちらです #kaigionrails #kaigionrailsA https://t.co/lp7YfPxoph— tatsuosakurai (@tatsuoSakurai) October 28, 2023
🔗 ActiveSupport::CurrentAttributes: すっごく便利なのに嫌われ者?! by Sampo Kuokkanen - Kaigi on Rails 2023
昨日のAndreyさん(右)の発表に続き、Evil MartiansのSampoさん(左)による発表です。
スピーカーとして#kaigionrails参加してます! pic.twitter.com/MlQDKKfYpq
— 合同会社イービルマーシャンズ (@evilmartians_jp) October 27, 2023
参考: Rails API ActiveSupport::CurrentAttributes
タイトルを見た瞬間から、自分が以前翻訳した以下の記事を思い出しました。Sampoさんの発表でも言及いただき、ありがとうございます!
発表では、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さんとの当時のやりとりも回想する興味深い内容でした。
みてる。https://t.co/NGvdSUliX8#kaigionrails
— しげる。 (@_4geru) October 28, 2023
byrootが正しさよりもコミュニケーションが重要って言うんだからもう我々がイキってコードが全てみたいな恥ずかしいこと二度と言えんよ #kaigionrails
— 蜘蛛糸まな🕸️ / HolyGrail (@HolyGrail) October 28, 2023
2件目は、mastodonで発生したMarshal.#dump
エラーのバグ修正でした。
おー今年の幕張踏んだバグの話だ。https://t.co/LNbfcTUQmO #kaigionrails #kaigionrailsA
— Taketo Takashima (@taketo1113) October 28, 2023
参考: Marshal.#dump
(Ruby 3.2 リファレンスマニュアル)
このバグもbyrootさんの当初の予想を超えていて、Ruby 3.2.1のオブジェクトシェイプに関連していたとのことでした。再現の難しそうなバグですね...
発表を聴いていて思い出されたのが、ついこの間Railsウォッチで取り上げた(ウォッチ20231018)以下の記事でした。こちらの翻訳記事は明日公開いたしますので、どうぞお楽しみに。
参考: Writing Object Shape friendly code in Ruby
修正は以下で行われました。byrootさんの締めの言葉は「Marshal.#dump
のようなRubyバージョンに依存する不安定なものを当てにするもんじゃない」でした。
PR の修正内容見てみると結局 marshal dump をやめて別の仕組みにするのではなくて、marshal_dump の挙動を変える修正で対応したのか。
— Taketo Takashima (@taketo1113) October 28, 2023
まったくトリビアですが、byrootさんがhashを「アッシュ」とフランス語風に発音していたことに気づきました。
最後に
Kaigi on Rails 2023というカンファレンスに参加でき、最初の現地開催が見事成功を収める場に居合わせる機会に恵まれ、本当によかったと思います。
Day2の翌日が日曜日というのも地味に嬉しいポイントでした。私は名残惜しさをこらえて2日とも電車で帰りましたが、浅草橋で朝までコースの人たちにとってありがたかっただろうと想像しています。
カンファレンスの場では、本当に多くの方々からの「TechRachoいつも読んでます」「Railsウォッチを社内読み会してます」「Rails 7.1のChangelogマジ助かりました」といったお声に直に触れる機会を得られたのが貴重でした。おそらく、これまで参加したイベントで最も多かったと思います。今後も精進いたしますので、これからもTechRachoをよろしくお願いします。
そして、改めてすべての関係者の皆さま、お疲れさま&ありがとうございました!
追記(2023-11-01)
公開しました。