@kaiba です。
暑くなってきたので思い切ってボーズにしました。
えらく不評でして、僕も戸惑っていますがとても快適です!
技術的負債シリーズの続きです。
- 技術的負債の話(1)ではスペースエージェントが抱える技術的負債について書きました
- 技術的負債の話(2)では本来1つであるべきDBを結合しました
スペースエージェントが抱える技術的負債(復習)
スペースエージェントは複数のサービスを運営しており、雑に書くと上記のような構成になっています。
この構成はRails界隈では「分断されたモノリス」と呼ばれており、あまり良い設計とは言えません。
今回は分断されたCakePHPを1つにしました
社内で使用する管理画面をSPACE CLOUDに統合する形で1つにしました。
どのように結合したか
口にするのはすごく簡単で、namespaceを切り、そこに管理画面を配置しただけです。 しかし、コピーして作られたモデル層は注意が必要です。
具体的に見ていきましょう。
今回は例として、SpaceAgent
という namespaceに管理画面を置く例を書きます。
コントローラのディレクトリを掘る
ディレクトリを掘り、ここに管理画面のコントローラをすべてコピーします。
Controller/SpaceAgent
コントローラのnamespaceを変更します。
<?php
namespace App\Controller\SpaceAgent;
use App\Controller\AppController;
use Cake\Event\Event;
class ChatController extends AppController
フロントエンドのディレクトリを掘る
webroot/spaceagent
同じくコピーします。
routes
routesにprefixをつけて、管理画面のroutesをコピーします。
<?php
Router::prefix('spaceagent', function (RouteBuilder $routes) {
// ここに管理画面routesをペーストする
});
この時点でモデル層に差異がなければ動くはずですが、当然差異があるわけで、動かない画面がありました。
モデル層、コンポーネント、バッチ
ここからは 気合
と 根性
と サービスとメンバーへの愛情
でコツコツとやっていくだけです…!(笑)
こちらも namespace を切ることを考えましたが、おそらく殆どのコードが共通化すべきコードですので、 手でマージしていく方法を採用しました。
テストする
技術的負債の話(2)でシステムテスト仕様書を作成しました。
これが担保できれば大きなバグは潰せるでしょう。
早速システムテスト仕様書が効いてきました!
リリース
管理画面のURLが変更になります。
ユーザへの影響は皆無なのですが、社内への丁寧な周知も必要でしょう。
以下を周知しました。
- 管理画面のURLが変更になること
- リリース予定時期
- リリース作業の開始と終了
リリース後「管理画面が見られなくなった!」という問い合わせが多数来てしまい、
僕の伝達力、コミュニケーション力の低さが露呈しました…。
口頭でもSlackでも何度も伝えてきたのですが、うまく伝わってなかったのですね…。
まとめ
- 分断されたモノリスを1つに結合できた
- これまで管理画面への機能追加は、ソースコードのコピーが嫌すぎて二の足を踏んでおりましたが、ストレスなく機能追加できるようになりました!
- 開発環境の構築が楽になり、誰でも管理画面の開発ができるようになった!
しかし、まだ民泊物件とSPACE CLOUDは分断されたままです。 ここはユーザやSEOへの影響もあるので単純には行きませんが、以下の理由で峠は超えたと考えています。
- 収益物件.com というサービスがAPIを叩く形で分割できているので、同様の構造にすれば分離できることがわかっている
- 2つのサービスをマージする方法も今回示せたので、1つのCakeにすることもできる
まだまだ大きな問題がありますが、だいぶ普通のCakePHPのプロジェクトになってきた感じがします。