Slide 1

Slide 1 text

Railsアプリから何を切り出す? 機能分離の判断基準 yumu 2025.09.27 Kaigi on Rails 2025 1

Slide 2

Slide 2 text

2 自己紹介 GMOペパボ minne事業部 プロダクト開発チーム yumu(湯村 美吹香) 新卒3年目、エンジニア5年目、Rubyist5年目 バックエンド > インフラ >>> フロント 昨年のKoRでスポンサーLTをしました。 💎 推しのgem : Shoryuken(ロゴ募集中) 💎 推しの漫画 : メイドインアビス 💎 X : @myumura3

Slide 3

Slide 3 text

3 minneとは 作家・ブランド数 95万件以上 登録作品数 1800万件以上 リリース 13年目 アプリ ダウンロード数 1500万以上

Slide 4

Slide 4 text

4 minneのアーキテクチャ(ものすごくざっくり) minne-app minne-web-front minne-auth

Slide 5

Slide 5 text

5 minneのアーキテクチャ(ものすごくざっくり) minne-app minne-web-front minne-auth

Slide 6

Slide 6 text

大規模ECサイトでの現実 6 開発速度の低下 DBパフォーマンス の悪化 コードベースの 複雑化 6

Slide 7

Slide 7 text

7 こんな迷いを抱えたことはありませんか? この機能、切り出した 方がいいのかな?

Slide 8

Slide 8 text

実際に分離した/分離を検討した機能の一部 88 ● 動画変換機能 → Shoryuken workerサービス化 ● アナリティクス機能 → Cloud Run Functions化 ● リワード広告機能 → Lambda関数化 ● サブスクリプション機能 → 分離見送り Ruby×AWSで作る動画変換システム Google Cloudで作るニアリアルタイムアクセス解析基盤

Slide 9

Slide 9 text

今日お話しすること 99 実践的な判断基準

Slide 10

Slide 10 text

今日お話しすること 10 10 1. 背景と課題 • なぜ機能分離が必要になったか 2. 5つの判断軸 • 実践的なフレームワーク 3. 実践事例 • 成功・失敗パターンの分析 4. まとめ • 考え方のポイント

Slide 11

Slide 11 text

11 5つの判断軸

Slide 12

Slide 12 text

5つの判断軸 12 12 1. ビジネスロジックとの関連度 2. 他インフラリソースとの依存関係 3. 機能の複雑さ 4. 運用コスト vs 開発スピード 5. ビジネス上の柔軟性が求められるか

Slide 13

Slide 13 text

5つの判断軸 13 13 軸1: ビジネスロジックとの関連度  高関連(分離避ける)  低関連(分離候補) ● コア機能(商品管理・注文・決済) ● 複数テーブル・モデルとの強い関連 ● 技術的処理(動画変換) ● 分析系(アクセス解析) 事例: サブスクリプション機能 ✍ ユーザーの権限制御・決済処理...との関連が強く分離見送り

Slide 14

Slide 14 text

5つの判断軸 14 14 軸2: 他インフラリソースとの依存関係  強依存(分離困難)  弱依存(分離可能) ● MySQLの直接参照が必要 ● 認証基盤への依存 ● S3経由でのデータ受け渡し ● API経由での疎結合 ● MySQL以外のDBを使用 事例: 動画変換機能 ✍ S3・SQS経由で処理完結、ビジネスロジックとも無関係で分離

Slide 15

Slide 15 text

5つの判断軸 15 15 軸3: 機能の複雑さ  複雑(要検討)  シンプル(分離しやすい) ● 複数サービス連携 ● データフローが複雑 ● 単一責任で外部依存少 事例: アナリティクス機能 ✍ 行動ログの集計を行うシンプルな機能。Cloud Run Functionsとして分離

Slide 16

Slide 16 text

事例: リワード広告機能 ✍ 運用コストは増加したが、適切な技術スタックが選択可能に 5つの判断軸 16 16 軸4: 運用工数 vs 開発スピード  運用コスト重視(分離リスク高)  開発スピード重視(分離メリット大) ● 複数デプロイパイプライン管理 ● 分散したログ・監視 ● 独立したリリースサイクル ● 技術スタック選択の自由

Slide 17

Slide 17 text

事例: リワード広告機能 ✍ 運用コストは増加したが、適切な技術スタックが選択可能に 5つの判断軸 17 17 軸4: 運用コスト vs 開発スピード  運用コスト重視(分離リスク高)  開発スピード重視(分離メリット大) ● 複数デプロイパイプライン管理 ● 分散したログ・監視 ● チーム対応力不足 ● 独立したリリースサイクル ● 技術スタック選択の自由 「コンウェイの法則」 組織構造とシステム構造のミスマッチ

Slide 18

Slide 18 text

5つの判断軸 18 18 軸5: ビジネス上の柔軟性が求められるか  求められない(分離メリット小)  求められる(分離メリット大) ● 単純な機能改善で十分 ● 単一用途のみ ● 切り捨て可能性が重要 ● 他サービスでも活用したい 事例: 動画変換機能 ✍ 他サービスでも活用可能なシステム

Slide 19

Slide 19 text

判断マトリックス 19 19 判断軸  分離推奨  要検討  分離避ける ビジネス関連度 低 中 高 インフラ依存 弱 中 強 複雑さ シンプル 中 複雑 運用コスト vs 開発スピード 開発スピード重視 バランス 運用コスト重視 ビジネス上の柔軟性 求められる 中程度 求められない 3つ以上が 分離推奨 👉 積極的に検討 2つ以上が 分離避ける 👉 慎重に判断

Slide 20

Slide 20 text

20 実践事例

Slide 21

Slide 21 text

21 実践事例① 成功パターン 動画変換機能 ・ アナリティクス機能 💡 Railsアプリケーションの複雑性緩和 ・ 他サービスで活用可能 判断軸  分離推奨  要検討  分離避ける ビジネス関連度 低 中 高 インフラ依存 弱 中 強 複雑さ シンプル 中 複雑 運用コスト vs 開発スピード 開発スピード重視 バランス 運用コスト重視 ビジネス上の柔軟性 求められる 中程度 求められない

Slide 22

Slide 22 text

22 実践事例② 要注意パターン リワード広告機能 💡 想定より複雑 ・ 運用コストとのトレードオフだが柔軟性重視で分離継続 判断軸  分離推奨  要検討  分離避ける ビジネス関連度 低 中 高 インフラ依存 弱 中 強 複雑さ シンプル 中 複雑 運用コスト vs 開発スピード 開発スピード重視 バランス 運用コスト重視 ビジネス上の柔軟性 求められる 中程度 求められない

Slide 23

Slide 23 text

23 実践事例③ 分離回避パターン サブスクリプション機能 💡 分離見送り ・ Railsアプリケーション内で最適化 判断軸  分離推奨  要検討  分離避ける ビジネス関連度 低 中 高 インフラ依存 弱 中 強 複雑さ シンプル 中 複雑 運用コスト vs 開発スピード 開発スピード重視 バランス 運用コスト重視 ビジネス上の柔軟性 求められる 中程度 求められない

Slide 24

Slide 24 text

24 まとめ

Slide 25

Slide 25 text

【再掲】5つの判断軸 25 25 1. ビジネスロジックとの関連度 2. 他インフラリソースとの依存関係 3. 機能の複雑さ 4. 運用コスト vs 開発スピード 5. ビジネス上の柔軟性が求められるか

Slide 26

Slide 26 text

考え方のポイント 26 26 ● 完璧な分離はなかなかない。トレードオフを理解して判断 ● チームの状況によって各軸の重みは変わる ● 分離された機能はAIが理解・活用しやすい ● 失敗から学び、判断基準を磨く

Slide 27

Slide 27 text

27 Thank You! Thank You!