スペースマーケット
スペースマーケット、Fat Controller化したRailsからNestJSへ。有志活動で13%止まりだった移行を専任チーム発足で立て直す
スペースマーケットは2014年から使ってきたRailsのFat Controller / Fat Model問題を解消するため、2021年初頭にNestJSへの移行を開始した。しかし有志ベースの活動では200本以上あるAPIのうち26本(約13%)で停滞。2024年夏に会社として専任チーム「Marketplace X」を発足させ、基盤を再定義したうえで移行を再開し、2025年7月19日時点で移行率は約20%まで回復した。
課題
Fat Controller / Fat Model化したRailsで改修が困難になり、有志の移行は13%で停滞
アプローチ
専任チームMarketplace Xを発足し基盤を再定義してからNestJSへの移行を再開
効果
2025年7月19日時点で22本を移行し移行率は約20%まで回復
背景
スペースマーケットは2014年にRuby on Railsで開発された。当初は迅速な開発を実現できたが、サービスの成長とともに開発速度の維持が難しくなり、Fat Controller / Fat Modelという問題が顕在化した。機能追加のたびに影響範囲の調査に時間がかかり、コードの密結合が進んで改修が困難になっていた。この状況を打開するため2021年初頭にNestJSへの移行プロジェクトが発足する。選定理由として挙げられたのは、TypeScriptの静的型付けによる安全性、DI(Dependency Injection)による疎結合な設計、エコシステムの豊富さの3点だった。当時の技術検証資料には「Nest.js Wayに従うことで、テストがしやすく、スケーラブルで疎結合で保守が容易なアプリケーションを作成できる」という方針が記されている。移行対象はバージョンの異なる2つのAPI群(合わせて200本以上)と予約関連APIで、まず前者2つをNestJSでリプレイスすることが最初のゴールに据えられた。
移行のプロセス
移行は3つの時期に分けて語られている。
- 黎明期(2021年初頭〜): ディレクトリ構造、Passportによる認証機能、TypeORMでのDB操作、GraphQL、DataLoader、CQRSパターンなどを技術検証し、2021年6月ごろから本格的な開発を開始した
- 停滞期(2022年夏〜): 有志による移行作業だったため日々のプロダクト開発や機能改善が優先され、まとまった時間の確保やモチベーションの維持が難しく、四半期ごとの移行本数が落ち込んだ。2024年までの移行は200本以上のAPIのうち26本(約13%)にとどまり、RailsとNestJSの2システムが並存して運用コストが増加した
- 転換期(2024年夏〜): 会社として移行プロジェクトに本気で向き合う意思決定が下され、専任チーム「Marketplace X(MXチーム)」が発足した
MXチームは2024年9月から2025年5月にかけて、いきなりAPIを移すのではなく基盤の再定義から着手した。別プロダクトと相乗りしていたインフラ・AWS構成を分離し、src配下にフラットに置かれていた約80のモジュールをClean Architectureに則って再構成し、過去に移行済みのAPIも並行してリファクタリングした。ORMはより堅牢な型安全性を求めてTypeORMからPrismaへ移行し、Node・NestJS・各種ライブラリのバージョンアップも実施した。
移行前後の変化
| 指標 | Before | After | |
|---|---|---|---|
| 移行対象API | 200本以上(2バージョンのAPI群) | 2026年上半期中に完了予定 | |
| 移行本数・移行率 | 26本・約13%(2024年まで) | 22本・約20%(2025年7月19日時点) | |
| 推進体制 | 有志による移行作業 | 専任チーム Marketplace X | |
| ORM | TypeORM | Prisma |
結果
基盤整備を終えてAPI移行を再開した結果、2025年7月19日時点で22本(調査の結果不要と判断されたものを含む)の移行が完了し、移行率は約20%まで回復した。記事はこの状態を「歯車が再び力強く回り始めています」と表現している。当面のゴールは2026年上半期中に対象の2バージョンのAPIを移行し終えることで、その先はチーム外のエンジニアも開発できる仕組みを整え、エンジニア全員で移行を加速させることを目指している。
学び
有志ベースの改善活動は日々のプロダクト開発に押されて必ず停滞する、というのが最大の教訓として示されている。会社として専任チームを置く意思決定があってはじめて移行は再開した。また移行再開前に基盤(インフラ分離・Clean Architecture化・ORM刷新)を作り直した点も特徴で、著者は技術的負債の解消を「守りの開発」ではなく、周囲のエンジニアの成長と開発体験の向上を通じてプロダクトを良くする弾み車だと位置づけている。
