スペースエージェントの開発組織が抱えていた問題をスクラムで改善した話① 〜導入編〜 | Spaceagent Blog
はじめまして。スペースエージェントでエンジニアリングマネージャーを担当しております @kaiba です。ランチリーダー、CSO(Cheef Sake Officer)でもあります(自称)。前職は...
https://www.wantedly.com/companies/spaceagent/post_articles/137511
技術的負債(英: Technical debt)とは、行き当たりばったりなソフトウェアアーキテクチャと、余裕のないソフトウェア開発が引き起こす結果のことを指す新しい比喩である。https://ja.wikipedia.org/wiki/%E6%8A%80%E8%A1%93%E7%9A%84%E8%B2%A0%E5%82%B5
以前、スペースエージェントでのスクラム導入の記事を書かせて頂いたエンジニアリングマネージャーの海馬沢です。
今回は第二弾として、スペースエージェントが抱える技術的負債とその改善の話を書きます!
本来、外部に公開することはおろか内部でも蓋をしたくなるような技術的負債をあえて公開することで、改善に向かっているプロセスなど、同じように技術的負債に悩まされたことのある同士たちに勇気を持ってもらえるきっかけになれば幸いです!
どんなサービスにも多かれ少なかれ技術的負債は付き物ですが、 スペースエージェントの最も大きな技術的負債は「分断されたモノリス」だと感じています。
この用語は Ruby on Rails(以後 Rails) 界隈で時々耳する用語です(単純に僕が Rails の勉強会に行くことが多いだけ?)
1 枚岩(モノリス)と表現される Rails のサービスが、適切に分割されていない状況を指すようです。
スペースエージェントのバックエンドは CakePHP なのですが、Rails の影響を強く受けたフレームワークですので、 同じ問題が起こります。
スペースエージェントは以下のサービスを運営しています。
データベースは以下があります。
これらのサービスは会員情報が共通だったり、同じ情報を複数のサービスで表示する部分もあるため、 いずれも上記 2 つのデータベースを参照しています。
また、CakePHP のプロジェクトはサービスの数だけあります。
CakePHP も Rails と同じく、テーブルに紐付いたモデル層を使用し、そこにビジネスロジックを書きます。
SPACE CLOUD で作成したビジネスロジックを民泊物件.com で使用したいケースが当然あり、 モデル層のソースコードをコピーして使っており、その後編集され差分が出ています。
「ソースコードをコピーして使う」という精神的苦痛が大きく、 すでに本来同一であるべきビジネスロジックに差分がでてしまっています。。
上記のソースコードの差分を無くしたいのですが、スタートアップらしくどんどん新機能やデザインの Try and Error を繰り返しているため、僕が join したときにはドキュメントや自動テストはほとんどありませんでした。
「なんでこんな構造にしてしまったんだ…」と頭を抱えたくなりますが、限られたメンバー、リソースで当時できることをやったのです。
ヘイトを吐いても良いことはありません。
「少しづつ良くしていこう」というポジティブな気持ちを持つように心がけます。
いくつか方法が思いつきます。
サービスの機能や今後のビジネス展開を含めてあるべき姿を考えたとき、「CakePHP のプロジェクトを統合する」が自然で今後の開発工数も少なく済むと判断し、これを採用しました。
データベースの変更は影響が大きく、どこに問題が生じるかすぐにはわかりません。
王道なやり方ですが、以下の方法で進めています。
E2E テストは以下の技術を使用し、CI で動作させます。
今でしょ!と言いたいところですが、直近のエンハンスや機能追加を行うプライオリティが高く、時期を見計らっているところになります。。
とはいえ、必ず解消しなければならに問題ですので、2018年の11月頃 から日々少しずつリソースを割いて進めています。この負債が解消されれば開発速度、品質が大きく向上することになるのでガツっとやってしまいたいところでもあります。
まだまだこの負債に対してのリファクタリングは始まったばかりで長い戦いになります。
そんな負債を含め未来あるサービスを一緒に改善から育てていきたい方を募集中です笑
大規模リファクタリングに興味がある方、よりよい改善案がある方、是非お声掛けください!