Upgrade to Pro — share decks privately, control downloads, hide ads and more …

今改めてServiceクラスについて考える 〜あるRails開発者の10年〜

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

今改めてServiceクラスについて考える 〜あるRails開発者の10年〜

Kaigi on Rails 2025 登壇資料

Avatar for Tomohiro Hashidate

Tomohiro Hashidate

September 26, 2025
Tweet

More Decks by Tomohiro Hashidate

Other Decks in Technology

Transcript

  1. 4

  2. 2024/09/07 福岡Rubyist会議04 懇親会にて @junk0612 「サービスクラスってどう思います?」 @joker1007, @onk 「オッ!サービスクラスの話?」 みたいな感じになりまして、 ちょうど近くに座っていた

    @snoozer05 さんとビアバーに流れて議論する機会があった。 これを機にちょっと話をしたいなーと思っていたら、この前の関西Ruby会議08でもサービス クラスへの言及があって、話すなら今だなと思った。 9
  3. Railsのレイヤー分類はよく出来ている Railsの基本的なレイヤーはController, Model, Viewだけだ。Jobは非同期処理向けの Controllerと言える。 Controller: ユーザーからのリクエストをハンドリングし、モデルの処理結果を表 示するviewを選択する Model: RDB操作とビジネスロジック全部

    View: 処理結果の表示 これをきっちり守るだけで大体どこに何があるか想像が付く。 人間が簡単に覚えて共通認識を作れるのはこの程度だという割り切りが見える。 こういう共通認識の力こそがフレームワークを活用する利点。 逆に言えば共通認識を破壊するとフレームワークの利点が失われる。 22
  4. まずRDBと向き合う 参考: Identifying User Identity by moro dynamic! by moro

    パーフェクトRails著者が解説するdeviseの現代的なユーザー認証のモデル構成に ついて by 俺 31
  5. 現実的だが楽な道ではない 参考: A Packwerk Retrospective (2024) - Shopify Packwerkの依存性検出には限界があるし、コンポーネントの責務をどう分離するかの示唆を 与えてくれる訳ではない。

    特にドメインで分離した結果、機能面での依存が不自然になるのは非常に難しい問題で、簡単 に結論が出せる様な問題ではない。 コンテキストマッピングもコンポーネントの分割も、一度で上手くいく様なものではないの で、継続的に何度も判断を下し続けてコードとメンタルモデルを相互に改良し続ける必要があ る。(こういう行いをドメインモデリングの文脈では蒸留と呼ぶ)。 39