こんにちは。サーバーサイドエンジニアの武井です。他社で稼働していたサービスをYappliのサービスに統合いたしました。統合から1年以上経過しましたので当時を振り返っての経験をお話ししたいと思います。
何を統合したか
これは会社の沿革にも書いてあることなのですが、Yappliは2019年にGMO TECH株式会社が提供する「GMOアップカプセル」事業を譲受しました。私は元々GMOでエンジニアをしていましたが数名のメンバーとともにYappliに移籍いたしました。アップカプセルというサービスはアプリを構築するSaaSサービスで、要するにYappliの競合だったわけです。びっくりですね!
私達のYappliでの最初のミッションはYappliのシステムの内容を理解しつつ、アップカプセルで動作しているアプリとサーバーシステムをいかにスムーズにYappliのシステムに組み込むかということでした。
統合の方針
まずはアップカプセルの機能で出来ていたことでYappliの機能で何が出来て何が出来ないかの洗い出しがおこなわれました。アップカプセルのお客様が重要視していた機能をなんとかYappliでも再現できるように、かなり苦心のあとがにじむ仕組みが考えられました。アプリはYappli製のものにアップデートして切り替えることが決定していましたので、サーバーサイドを中心に両者の違いを吸収する仕組みを作る事になりました。
サーバーサイドで課題になったのは主にDB構成でした。そもそものサービスの設計思想が異なるので仕方がないことなのですが、Yappli側はマルチクライアントを実現するためにSQLiteによる分割構成をとっていましたが、アップカプセル側は1クライアントで1つのDBサーバを使用する構成でした。アップカプセル側にはYappli側にはないポイントシステムやセグメント情報が膨大にあり、DBを単純に統合することは困難であると判断されました。
そこでYappli側のシステムからアップカプセル側のDBを参照するためのAPIサーバを構築することになりました。このシステムは焼き鳥の肉と肉に間にはさまるネギの連想から「negima」と名付けられました。
negimaの構成
サービス統合という立ち位置から以下の様な前提条件としました。
- クライアントがすべてYappliに移行するまでの限定的な利用(当時は1年利用を想定)
- 凝ったことはしないですみやかに完成すること
- なるべくメンテフリーで
その結果 PHPのLumenフレームワークを採用してシステムを構築することにしました。
Yappliのサーバーサイド開発といえばgo言語が主流なのですが、当時移籍したばかりの私はgo言語の開発に慣れていませんでしたのでスピード実装する自信がありませんでした。アップカプセルのCMS管理画面はLaravelフレームワークを使用していましたので、その軽量高速版であるLumenフレームワークは今回のAPI開発には学習コストも少なくうってつけに思えました。
苦心したところ
Lumenフレームワークを使っての開発はそれなりにスムーズに行えたのですが、システム統合ならではの苦心も色々ありました。
- 秘密のおまじない
あまりお行儀の良い振る舞いではないのですが、ある特定のワードがCMSで設定された場合、アプリへのレスポンス時にyappliのシステムからnegimaシステムに切り替わります。アップカプセル側の入稿画面が一部生きていて、そのデザイン設定やアップロード画像を参照するためです。
- AWSの構成
YappliもアップカプセルもAWSを使用していましたが当然ことなるアカウントを使用しています。アップカプセルのAWSアカウントはYappliに移管したものの、本番環境、ステージング環境、開発環境のAWSアカウントがそれぞれ分かれていますので、どのように組み合わせてアクセスを制御するかに苦心しました。SREチームの多大なる協力がなければ実現出来ませんでした。
- 会員システム
Yappli側とアップカプセル側のユーザーをマッピングする必要がありました。Yappli側では端末ごとにユーザーを一意に識別する仕組みなのに対し、アップカプセル側はクライアント毎にユーザーIDを発行する仕組みでした。ユーザーのスマホの機種変更にYappli側とアップカプセル側で同じ様に変更処理をすることや、アップカプセル側のユーザー無効化設定をYappli側アプリに反映させる処理などでかなり苦労しました。
それはシステム面の統合だけではなく
こちらはテックブログですのでシステム面の事を中心に記述しましたが、もちろんお客様あってのサービスです。アップカプセルとYappliでは出来ることも違いますし料金の価格帯も違います。アップカプセルからYappliに移行してもらえるお客様も移行をためらうお客様もいらっしゃいます。そういったお客様ひとつひとつに根気強く向き合ってきた営業チームやサポートチームには本当に頭が下がります。
もちろんシステム面においても1人で全て実装したわけではなく、一緒に移籍した仲間やCTOの佐野さんをはじめ、快く受け入れていただいたYappliの既存メンバーの多大なる協力の上に作られています。関係された皆様ありがとうございました。