こんにちは、YOUTRUST Webエンジニアの寺井(YOUTRUST/X)です。
2023/10/27(金)と2023/10/28(土)の2日間に渡って行われたKaigi on Rails 2023に、私は運営メンバーとSpeakerとして参加してきました。
今回は、Kaigi on Rails 2023を通して感じたことを記事にまとめたいと思います。
発表内容について
私は「Fat Modelを解消するためのCQRSアーキテクチャ」というタイトルで、YOUTRUSTで採用しているアーキテクチャについて発表しました。
内容としては、参照系と更新系の責務を分離することによって、ModelやControllerの肥大化を防いでいるということを話しました。
発表の後、懇親会やXでいくつかご質問をいただいたので、ここで補足したいと思います。
質問①「CQRSではなくCQSなのではないか?」
結論から言うと、ご指摘いただいた通りYOUTRUSTのアーキテクチャはCQRSよりもCQSの定義の方が近いと思いました。
改めて調べてみたところ、文脈によっていくつか定義はあるようですが、一般的にはCQRSでは参照と更新のModelを分離するようなので、CQRSの場合CreatePostCommand
は更新専用のPost Model、PostsQuery
は参照専用のPost Modelと、Post Model自体を分離することになりそうです。
YOUTRUSTの場合は、CreatePostCommand
でもPostsQuery
でも同じPost Modelにアクセスしているので、CQRSよりはCQSと表現した方が良さそうでした。
とても勉強になったので、ご指摘いただきありがとうございました。
質問②「UseCaseはServiceとどう違うのか?」
はじめに、YOUTRUSTではServiceクラスは使っていないので、厳密に区別はしていません。
Serviceクラスの定義は人によってばらつきがあると思いますが、一般的には「更新、参照問わず複数のModelに関わるクラス」として知られていると思います。
Serviceクラスと比較して、UseCaseは用途を更新系に限っており、参照を目的としては使いません。
また、UseCaseでは関わるModelの数は特に気にしていません。
発表でも紹介しましたが、YOUTRUSTではUseCaseに以下の責務を持たせています。
- Commandや通知処理、ログの書き込みなどを呼び出す
- ロックをかけたりトランザクションを張る
- 認可に関するバリデーションを行う
質問③「チームへの浸透などの運用はどうしているのか?」
- ControllerのindexとshowからはQueryを呼び出す
- Controllerのcreate、update、destroyからはUseCaseを呼び出し、UseCaseからCommandを呼び出す
Railsで規定されているルールではない、上記のようなルールをどのように守って開発しているのか?という質問でした。
こちらは、YOUTRUSTではある工夫をしているので、次のブログ記事でご紹介させてください!(11月中には公開したいと思います!)
発表の事前準備について
発表の準備中、とても嬉しかったことがありました。
発表の数日前、YOUTRUSTからKaigi on Rails 2023に参加するメンバーをカレンダーに招待して発表練習に付き合ってもらいました。
練習の当日は、なんと招待していたメンバー全員に加えて、招待を送っていなかったアプリチームのエンジニアとエンジニア人事のみんなまで参加してくれました。
修正案のイメージを実際にスライドを作ってまで説明してくれたり、最後の最後までフィードバックしてもらい、とても感謝しています。
発表の本番について
発表自体はとても楽しめました!
私はコロナ禍の後にエンジニアになっているので、この規模のカンファレンスでオフラインで登壇するのは初めてでした。
発表前は10分間の時間があったので、ステージの上から、発表を見に来てくれている人たち全員の顔を順番に見ていました。
後ろの方には、これまで自分が発表を見させてもらってきた人や、スクール時代に一緒に勉強していた人、いつもRubyのイベントでお会いする人たちが見えました。
最前列には、壇に一番近いところでYOUTRUSTのみなさんが見てくれていて、その横には前職で一緒に頑張っていた人たちや、これまで自分を育ててくれた人たちが来てくれていて、感慨深い気持ちで発表を始めることができました。
懇親会について
懇親会では、これまで話したことがなかった初めての人たちとたくさん話すことができました。
私が数ヶ月前にYOUTRUSTに導入したgit-pr-releaseの作者の方に直接感謝の言葉を伝えることができたり、以前私が書いた記事を読んで参考になったと伝えてもらったりして、すごく嬉しかったです。
また、設計のクオリティや導入の決断に対して感心の声をかけてもらえることもありました。
設計や導入の選択をしたのは、弊社の創業エンジニアのやまでぃさん(YOUTRUST/X)です。
同じくやまでぃさんが、YOUTRUSTの設計をより具体的に知ってもらうために、GitHubでサンプルコードを作成して公開しているので、興味がある方はぜひ一度のぞいてみてください。
また、発表でもご紹介した、本番コードを実際に見せながら解説するイベント『OPEN CODE』は、明日2023/11/1(水) 19:30から開催予定です。
まだ定員に空きがありますので、ご興味があればぜひお待ちしております!
終わりに
Kaigi on Rails 2023は、準備から当日まで全部を通して、私がエンジニアになってから間違いなく一番楽しい期間でした。
普段の業務をしながら運営活動をしたり、運営をしながら発表をするのは大変でしたが、一緒に働くYOUTRUSTのみんなやKaigi on Railsの運営チーム、そしてKaigi on Rails 2023の参加者のみなさんのおかげで、最高の体験になりました。
来年のKaigi on Railsを楽しみにして、今日からまたがんばっていきたいと思います🔥