Kaigi on Rails 2024 に参加しました! 去年は現地参加できなかったので、今回は実際に足を運んで発表を聞くことができてよかったです。
今回のブログ記事では、自分が会場で聞いた発表の感想を五月雨式に書いていきたいと思います。📝
(一つ一つの感想は短めなのでご了承ください!)
発表の感想:Day 1
Rails Way, or the highway
Rails を Rails Way に乗せつつもどのようにスケールさせていくかというお話でした。Rails アプリケーションを拡張する際は、他のものを混ぜ合わせるのではなくて、Rails Way を意識して拡張し、ルールに則って設計することが大事だと分かりました。
Rack を理解し Rails アプリケーション開発の足腰を鍛えよう
Rack を使ったワークショップでした。Rack アプリケーションの基本的な構造から、環境変数、レスポンスヘッダー、ルーティング等を意識して実装することで、Sinatra や Rails が内部的に Rack をどのように使っているのかを意識することができました。
Rails の仕組みを理解してモデルを上手に育てる - モデルを見つける、モデルを分割する良いタイミング -
たくさんお世話になっている五十嵐さんの発表でした! どのような場合に PORO をつくると良いのか、Service 層はなぜオススメできないのか、Fat Model をどのようにして判断するのか、等々、知見がたくさん詰まった発表でした。バリデーションを条件分岐したくなった時にモデルを分割する、という考え方はとても参考になりました。
カラム追加で増える ActiveRecord のメモリサイズ イメージできますか?
add_column すると何バイト増えるのか → 224 バイト から始まり、CRuby のメモリレイアウトの話から増えたオブジェクトの理解に話がつながっていきました。メモリの使い方を意識しつつ ActiveRecord を使っていきたいと思いました。
Sidekiq で実現する長時間非同期処理の中断と再開
Rails では Active Job を経由して Sidekiq を活用した非同期処理を実装することができます。大きなアプリケーションだと、その非同期処理の中断・再開処理が重要になり、そのためにはきちんと仕組みを理解して使いこなす必要があることが分かりました。
カスタムしながら理解する GraphQL Connection
GraphQL を具体的にどのような場面で活用しているか、独自の検索エンジンで使うページネーションの機能を例に挙げながら解説していて勉強になりました。GraphQL でページングを行うには Connection を使うとよく、Connection Type でサポートされていないクラスについては、Custom Connection の定義で対応できることが分かりました。シークエンス図もスライドにあって、流れをイメージしやすかったです。
リリース 8 年目のサービスの 1800 個の ERB ファイルを ViewComponent に移行した方法とその結果
ViewComponent へと手動に移行するのは大変 → パーサーを書いて自動化しよう! という流れが面白かったです。手作業ではなく、自動化することで、大規模なリファクタリングを可能としたのがとても参考になりました。自分のプロジェクトの目的にあったスクリプトを書けるようになりたいと思いました。
現実の Ruby/Rails アップグレード
Rails のアップグレードは大変です。自分も以前 Rails のアップグレード作業をしたとき、一度に多くの変更を加えようとしてうまくいかなかったことがありました。アップグレードに備えるために日々テストコードを整備すること、段階的にアップグレードすること。普段から備えておき、実際の作業では戦略を立てて進める大事さを改めて感じました。
Hotwire or React? 〜React の録画機能を Hotwire に置き換えて得られた知見〜
どんな場合には Hotwire が適していて、どんな場合には React が適しているのか、Rails のフロントエンドを考える時に誰もが直面するこの疑問に、実際の事例をもとに答えを出していて参考になりました! 「紙芝居の仕掛け」として Stimulus を考えて、CRUD 操作が主体のときには Hotwire を積極的に使いたいと思いました。
発表の感想:Day 2
作って理解する RDBMS のしくみ
今まで体系立てて学んだことが無かった RDBMS のしくみを、とても分かりやすく解説した発表でした。クエリエクスキュータやバッファプールマネージャ等の全体像の流れを掴みつつ、AVL 木や B+tree 等のデータ構造とアルゴリズムまで説明があり、とても分かりやすかったです。発表が終わった後、どうして Zig を採用したのかについてもお訊きできて良かったです!
ActiveRecord SQL インジェクションクイズ (Rails 7.1.3.4)
SQL 文のリテラルと 1 対 1 に対応する値は安全で、位置指定ハンドラや名前付きハンドラを利用していないものは原則的に安全ではない、ということが分かりました。SQL フラグメントを受け取るメソッドを把握しつつ、params のような外部入力を雑に渡さないように気をつけようと思います。
OmniAuth から学ぶ OAuth 2.0
OmniAuth が使われているコードを読んだことはありますが、一体どういう仕組みになっているんだっけ?という知識はあまりなかったので勉強になりました。自前で実装することで、理解を深めていく過程がとても良かったです。
入門『状態』
オブジェクトにまつわる『状態』を扱ううえで、どのようなポイントがつらく、どのように改善していけばよいのかを実際のコードを用いて解説していました。個人的にはマーティン・ファウラーの『リファクタリング』の内容とも通ずる部分があって、とても楽しく聞くことができました。
Hotwire 光の道と Stimulus
えにしテックカンファレンスでも発表頂いた大場さんの発表でした! Hotwire の、特に Stimulus とどのように向き合っていけばよいのかを詳細に解説していて知見がたくさん詰まっていました。発表後、「ほとんど情報がないこれらの知見をどうやって調べましたか?」と質問させていただいたところ、実際にコードを書きながら試行錯誤していたとのことでした。やはり、自分で手を動かして理解を深めるのはとても大事だということを改めて感じました。
The One Person Framework 実践編
えにしテックと交流がある、あそなすさんの発表でした! 自分の会社では今年の夏頃に 15 周年カンファレンスを行ったのですが、そこでの高橋さんや角谷さんの発表をアプリの形で実践した内容になっていて、とても嬉しかったです。kairanban というアプリの着眼点も素晴らしいと感じました。
Data Migration on Rails
自分は Rails の data migration で基本的には rake task しか使ったことがなかったので、それ以外の方法を学べて勉強になりました。特に maintenance_tasks という Gem を使う方法は全く知らなかったので、これから活用していきたいと思います。
30 万人が利用するチャットを Firebase Realtime Database から ActionCable へ移行する方法
Firebase Realtime Database から MySQL に移行するにあたって、Action Cable をどのように導入していったかについての過程を知ることができました。コストやメンテナンス性、パフォーマンスの観点から、技術を選択する際にどのような視点を持つべきか、移行において何を注意すべきかを学ぶことができました。
サイロ化した金融システムを、packwerk を利用して無事故でリファクタリングした話
packwerk という名前は聞いたことはありましたが、それを実際に活用している事例は知らなかったので面白かったです。モジュラーモノリスを選択するにあたって、packwerk がどのように役立つのかを知ることができました。
Identifying User Identity
えにしテックと交流がある諸橋さんの発表でした! User を(ほぼ)id だけのテーブルにすることで、「いる」こと = identity があることを表現し、その identity がデータという持ち物を持っていると設計することで、ActiveRecord と親和性の高いモデルになることが分かりました。登録中や退会済みなど、ユーザーの状態もうまく扱えることを実感できました。
WHOLENESS, REPAIRING, AND TO HAVE FUN: 全体性、修復、そして楽しむこと
ラストの基調講演は、島田さんの発表でした!
この発表はジュニアエンジニアである自分にとって、とても心に響く内容でした。システム全体が自分たちの問題を解く形にうまく構成されていること、つまりアーキテクチャ――さまざまなシステムコンポーネントを意識しながら開発をすることが大事で、個別の解像度を高めていくことが良い設計に必要だと分かりました。設計には銀の弾丸は存在せず、1つずつ問題を解いていくことでだんだん出来上がっていくものという視点は、とても大切だと感じました。
余談ですが、以前研修の帰り道に島田さんと一緒に浜松町のあたりを歩いていたとき、島田さんが「Rails も含めた開発における『設計』の視点をみんなが持つようになればいいな〜」という話をしていて、そのときは「なるほどな〜」と思いながら話を聞いていました。そのときの話が、今回の基調講演につながっていると思うと、個人的にとても感慨深いものがありました。
そして、「オプション」の話です。えにしテックでは社内でケント・ベックの『Tidy First?』の読書会をしていました。「オプション」についてかなりの紙幅が割かれており、とても簡略化すると「コードを簡潔に保つことで将来の仕様変更や機能追加にも対応できるようにしよう! これは金融業界のオプション取引と相似しているんだぜ!」という内容でした。
それを鑑みて Rails での設計論(Rails Way)を眺めると、ケント・ベックの思想を体現していることが分かります。まさに Ruby on Rails scales from HELLO WORLD to IPO ですね!(IPO も金融の用語(?)ですし)
更に、『時を超えた建設の道』。これに関するエピソードでも思い当たることがあります。最近じぶんが Rails のコードに対してとあるバグ修正(バリデーション)のコードを追加したのですが、それは既存のコードとの整合性を考えると適切ではないものでした。変更を加えた後、全体との調和を取るために、他の部分のコードも修正する必要があったのです。こうしたちょっとしたリファクタリングにも「修復(再調和)」という視点が必要だと感じました。
Process Feel という概念は初めて知りました。「うまく言語化できないけれどなんとなくおかしい気がする」という感覚は、システム全体を見渡すときに大事な感覚だと思います。そしてシステムから感じ取るためには、常に全体性を感じ取れるように修復を続ける必要がありそうです。確かにコードベースがスパゲティになってしまったら、その感覚を持つことは難しそうです。
Rails の上手な使い方、スライドで登場された本も目を通したいと思います。ONCE のコードも読まなきゃ……。
最後に Have Fun です。確かにプログラマーをしていると、一日最低 8 時間はコードに向き合う必要があります。そのとき開発が楽しければ、間違いなくモチベーションに繋がりますし、成長にも繋がります。楽しさは、「いきいき」とした活気につながり、システムの躍動につながるのだと思います。
ここだけの話ですが、Kaigi on Rails の会場に、島田さんから借りたリーナス・トーバルズの『それがぼくには楽しかったから』を持ってきていたのですが、うっかり渡しそびれてしまいました。発表が終わった後にこの本を渡せていたら……と思うとちょっと後悔。しかし、これも何かのメッセージなのでしょう! もう一度 JUST FOR FUN を読み返して、今後の開発に繋げていこうと思います。
イベントの感想
懇親会
今回は2つの懇親会に参加しました!
Day 1 のオフィシャルパーティでは色々な方とお話しさせて頂きました。一人ひとり名前を挙げると長くなるので割愛しますが、とても楽しい時間を過ごすことができました。こうしたパーティの良いところは、ずっと気になっていたけど今まで会えなかった方と会えること、また会いたいと思っていた方と再会できること、そして今まで知らなかった方と交流できることの3つだと思います。
Day 2 の mov さんのドリンクアップでも色々な方とお話しさせて頂きました。個人的に印象深かったのが PEN さんの Trick に関するお話です。RubyKaigi 2024 で PEN さんが Keynote で「Writing Weird Code」というとてもすごい発表をされていました。
tomoya ishida さん「Writing Weird Code」 ~ RubyKaigi 2024 1 日目キーノート | gihyo.jp
このコードをどのくらいの期間で作ったのですか?と質問したところ、「(ブラッシュアップの期間を除くと)1日か2日くらいで作った」とのことでした。ちょっと凄すぎて何も言えなかったです……。自分ももっと Ruby を楽しみつつ書いて、もっと Ruby を理解していきたいと思いました。
インターネット物理モデル
Kaigi on Rails が終わった日の翌日、僕が会長を務めるプログラミングスピーチ会で、「インターネット物理モデルを観に行こう!」というイベントを開催しました。
programming-speech.connpass.com
Kaigi on Railsスペシャル:日本科学未来館のインターネット物理モデルを観に行こう! - connpass
誰も集まらなければ自分一人で赴こうと思っていたのですが、なんと! 11 名の方が参加してくださいました! 本当にありがとうございます。
インターネット物理モデルを使って、0 と 1 に見立てたボールを使って、ネットワークの通信の仕組みを体感しました。文字や音楽、上下左右の動きを複数のルーターを経由して別の端末に送ることをピタゴラスイッチのように体感することができました。
10 年前にも日本未来科学館に行ったことがあるのですが、そのときはたしか時間の都合上体験することができなくて、外から動いているのを眺めるだけで終わってしまいました。
今回は Kaigi on Rails で知り合った方々と一緒に体験できて、本当に楽しかったです。このようなイベントを開催することができたのも、Kaigi on Rails に物理参加できたおかげだと思います。
おわりに
自分は偶然性(セレンディピティ)という言葉が好きなのですが、物理空間での交流はネット空間と違い、ランダムネスがあり、予期しない出来事が生まれやすく楽しいです。特に自分はカンファレンスやイベントに参加したとき、できる限り、初めての方と話すようにしています。ときどきうまく話せずに自分の至らなさを痛感することがありますが、皆さん親切に話を聞いてくださるので、とても助かっています。
現地参加することのメリットは、登壇者の方に質問できることです! もしこの記事を読んだ方で今までオフライン参加したことがない人は、ぜひ会場に赴きましょう! 僕に話し掛けるのもウェルカムです。❤(ӦvӦ。)
今回の Kaigi on Rails は本当に素晴らしい Kaigi でした。発表者の皆様、スタッフの皆様、お話ししてくださった皆様、本当にありがとうございました。また次回も参加したいと思います!