会社のデータベースそのものである「One API Platform」について、プロダクトオーナーとCTOに語ってもらいました #1
こんにちは!いい生活エンジニア採用・広報担当の黒江です🙋♀️
寒暖差の激しい日が続いておりますが、みなさまいかがお過ごしでしょうか?
今回から、いい生活のプロダクトを支えるメンバーと、いい生活 CTOの松崎さんとの対談をお届けします👏
CTO対談初回の今回は、One API Platform のプロダクトオーナーの中山さんと松崎さんに、One API Platform について語ってもらいました!
今回の対談は3つの記事に分けてご紹介させていただきます!
One API Platform はいい生活の"心臓部"
黒江:
中山さんが担当している One API Platform ってどのようなものなのでしょうか?
中山さん(以下 中山):
One API Platform は社内のプロダクトにレバレッジを効かせるためのインフラとして存在するプロダクトです。
One API Platform は長らく「みんなで開発しているバックエンド API」でした。
「One API Platform」というプロダクトとして独立して丸2年が経ちます。
黒江:
もう少し詳しく教えていただけますか?
中山:
それでは、詳しく One API Platform について説明する前に、いい生活の2000年代のプロダクト開発について簡単に説明しますね。
いい生活は2000年代、不動産領域において各業務を独立して解決するプロダクトを開発していました。
しかし、この時代にはプロダクト間の連携が不自由で、例えば以下のような一連の業務の流れの中で、物件の情報や人の情報を別々のシステムに都度入力しなければならない状況がありました。
賃貸物件の募集が出る
申し込みがある
入居者が決まる
賃貸借契約を作成する
そこで、2012年4月にいい生活は、各種オプションを含めた不動産会社の基本業務全域をカバーする「ESいい物件One」をリリースしました。
このプロダクトは、Windowsデスクトップアプリをクライアントとしたクラウドサービスで、現在で言えばマルチテナントの SaaS です。
そして、この「ESいい物件One」のサーバーAPIとして開発されたのが、現在の「One API Platform」です。
11年の時を経て、業務アプリであってもクライアントの主流が、デスクトップアプリから Webアプリ・モバイルアプリに移ってきています。
この流れに合わせて、いい生活でも開発の軸足はデスクトップアプリから Webアプリへと移行しました。
ただし、ESいい物件Oneデスクトップアプリでできたことを全てできる Webアプリを作ろうとはせず、特定の業態で必要な機能を備えたシンプルなアプリを複数作成し、利用するようになりました。
このように見ると、2000年代の「個別の業務それぞれに対するプロダクトが乱立する」状況に逆戻りしているようにも見えると思います。
ですが、当時と今の決定的な違いとして、
共通のデータ基盤・API 基盤として「One API Platform を利用している」ということがあります。
黒江:
いい生活の様々な業務アプリの基盤なんですね!
中山:
実情としてどのような存在かについてもう少し掘り下げておきます。
現在のいい生活ではプロダクトチーム制を採用しており、個別のプロダクトにフロントエンドエンジニアも、デザイナーも、QAエンジニアも、バックエンドエンジニアも含まれています。
なので、One API Platform チーム以外でもバックエンドの開発は活発に行っています。
One API Platform では「全てのチームで独立にやってしまうと非効率なこと」を巻き取って効率化したり、
インフラやその他諸々からの制約事項を考慮した機能開発であるかのレビューなどを行っています。
松崎さん(以下 松崎):
いい生活にとってこの One API Platform は、ある種心臓部です。
僕らの提供してるサービスのうち、特に重要と思われる大部分のデータが、実はここに入っています。
現状では全てのデータが入ってるわけではないですが、今後はより広げていった方がいいだろうなと考えています。
僕らが持ってる莫大なデータ、例えばアプリが生み出す様々なデータや、お客様が使う様々なデータが、ここに集約されていくような状態になればいいなと思い、開発を進めています。
当たり前の状態を守りながら、より良いものを目指す
黒江:
One API Platform のコンセプトについてもう少し教えてください。
中山:
僕が One API Platform に入った頃には、既に巨大なものになっていて、いい生活の売り上げのかなり大きい割合を占めていました。
ここが不安定になってしまうのはよくない、と考えているので、コンセプトとしては基本的には守りなんですよね。
今もう既にあるものは、その互換性を維持して守らなければならない。
その一方で守るだけではなく、機能の追加などもしていかないと、他社さんの類似サービスと比較されて、どんどん使われなくなってしまうという側面もあります。
既に巨大なものに対して、「さらにここに付け足していかなきゃならん」という難しさはありましたね。
例えば、データセンターから AWS に移行した際も、僕たちは「今動いてるものはそのまま動いている」という状態をしっかり守っていく必要がありました。
でもそれがあるからといって、機能の追加をやめてしまうと、売れなくなってそれはそれで潰れてしまいます。
なので、そこの両立をちゃんとしなきゃならんな、って思ってます。
松崎:
One API Platform は「縁の下の力持ち」のような側面があるんですよ。
One API Platform のチームが相対するのは、社内のいろんなアプリの開発チームです。
もちろん、その結果として、アプリの先にいるお客様のデータも支えています。
例えば、GmailやSlackのように世の中で広く使われている一般的なWebサービスって、当たり前に動いてると思われがちですよね?
でも、その状態を維持するのは簡単なことではありません。
今の時代、この「当たり前に動く」という高い品質を保てていることが、期待値のベースラインになっています。
同じように One API Platform も、社内の開発チームが安心できる環境を作る必要があります。
つまり、「One API Platform にデータを蓄積し続けるアプリをどんどん書いてていいんだ、だから僕たちは新しい機能とかをお客様に提供できるんだ」という当たり前の環境を作り、守り続けることが宿命です。
一方で、さっき中山も言ってたましたが、新しい機能の追加もしていく必要があります。
加えて、インターネットの世界では技術の変化が激しいので、同じものを放っておくと陳腐化してしまいます。
それを避けるためには、技術のモダン化、アップデートや改善、リファクタリングを行うことも必要です。
サービスとして品質を保つこと、サービスの中の技術が古くなりすぎないようにすること、使ってもらう人たちに対して裾野を広げること、この3つを目指してやってきています。
でも、この3つが言語化されたのって実は最近なんじゃないかなと思ってます。
中山:
最初に説明したように、One API Platform という一つのプロダクトとして切り出されたのは2年前です。
それまではバックエンドエンジニアが集まって開発しているバックエンド API でした。
そのため、実はこのバックエンド API の責任者って明確にはいなかったんですよね。
強いて言うなら松崎さんが担当だったんですけど (笑)
松崎:
そうだね。
中山:
そして、2年前のプロダクト制に移行するタイミングで、実質的にコアライブラリを担当していた僕が One API Platform のプロダクトオーナーを任せてもらいました。
松崎:
その一方で、さっき出たデータセンターから AWS への移行の話は、One API Platform を中山に任す前の話だったんだよね。
One API Platform の今後は中山に任せようという考えはありました。
でも、実際に任せられるかどうかっていうのは、特に One API Platform は会社の心臓部なので、「よし、こいつに託す」と決断することは、やっぱり難しいじゃないですか。
そこで、実際に AWS 移行を通じて、改めて「どういうものが今動いているのか」ということを一緒に再確認しました。
再確認していく過程で、中山にも「ああ、この辺りはあまり詳しくなかったな」という気づきがあったんじゃないかなと思っています。
複数のプロダクトに携わり、経験を活かす
松崎:
こういう質問を改めて中山にしてこなかったんだけど、AWS 移行って楽しかった?
中山:
もちろん楽しかったですよ。
僕はハードな仕事やレガシーなものと戦うのも好きだし、ユーザーが存在するものを作るのも好きなんですよね。
松崎:
なるほどね。
One API Platform は「壊れたら会社が終わってしまう」ようなシステムだし、ユーザーはいい生活のお客様全員みたいなものだから、やりがいはあるよね。
加えて、One API Platform の AWS 移行は 約10ヶ月で実行、ついでに Kubernetes の導入によるモダン化も行う、という比較的ハードなお題もセットだったしね。
中山:
面白さを感じた理由としては、パズル的にコードを書き換えるというのが好きだから、というのもありますね。
目の前に渡されたものや、既に答えがあるものでも、追加で改善することは楽しいです。
あとは、自分がソフトウェア的に何か制御できるコントロール範囲の権限の広さ、意義の大きさがあるのが楽しかったですね。
松崎:
じゃあ、少し目線を変えて技術的な面でいうと、dejima から始まる Kubernetes 移行のアイデアが出た時、最初はどう思った?
中山:
2019年当時に Kubernetes を選んだのは納得します。
また、クラウドロックインをできるだけ避けるために ECS は使わないというのも妥当だったかなとも思います。
それに、既にオンプレミスで動いてるものと、Kubernetes が相性がいい形になっていたので適切だと思いました。
黒江:
途中で口を挟んでしまいすみません!
先程から出てくる dejima って何でしょうか?
中山:
dejima については、ちょっと後で説明しますね。
簡単にいうと、toCのコンシューマー向けのホームページなどに向けた、24時間365日動くいい生活のプロダクトのバックエンドのサービスです。
松崎:
じゃあ、Kubernetes を実際に使ってみて、感触はどうだったかな?
当時新しい技術だった Kubernetes は黎明期を終えて成熟期に向かっているタイミングだったよね。
しかも特性としてアップデートの頻度もそれなりに高いから、いろいろと手間もかかったと思うんだけど。
中山:
そうですね。
まず松崎さんの策略なんでしょうが、僕が1回いい生活を辞めて転職し、戻ってきてから最初に dejima のチームに入ったのは本当に神采配でしたね。
松崎:
狙いがうまくハマった感じか……
中山:
dejima のチームで2ヶ月間で開発させてもらって、めちゃくちゃ効率的に勘所を学べました。
その直後に始まった One API Platformでは dejima で学んだことを活かしてめちゃくちゃいい形で進められたんですよ。
dejima で学んだ 頻繁なバージョンアップ など Kubernetes の手間のかかる部分については、最初からちゃんと考慮した設計にしたので問題なく対応できました。
また、他に dejima で学んだことを活かした例としては、必ずメンテナンスされるドキュメントを作ることを徹底してやっています。
最低限必要なことが書かれたドキュメントを必ず作って、それを必ずメンテナンスし続けましょう、といったポリシーが One API Platform 立ち上がり当初に決まりました。
そして、ちゃんと2年経った今もそのポリシーが守られています。
松崎:
最低限、っていうのは?
中山:
最低限というのは、あまりくどくど説明しないようにするということです。
例えば、新しく入った人と、もうしばらくチームにいる人向けですと、ドキュメントの性質が違います。
多くの場合、新しく入った人向けに書くと説明がくどいものになってしまいます。
ですが、チームに入って理解してしまえば全て自明になるため、メンテナンスが難しくなります。
そこで、僕たちはチームにいる人が普段行うオペレーションをただ書き下したものを、最低限のドキュメントとして作成しています。
これは十分に新しく入った人にも、キャッチアップに役に立つのではないかと考えているからです。
これを実践すると、驚くほど効率的にチームが回っているので、他のチームも見習うべきだと思いますね。(笑)
松崎:
ドキュメントのあり方を工夫したのも中山の自慢ポイントだよね(笑)
中山:
これは自慢ポイントですね(笑)
このように、Kubernetes のアップデート対応やドキュメントのあり方などをいろいろ dejimaで学びました。
それを踏まえて、「じゃあ僕はこういう風にやります」って言って、進めてきたのが、今の One API Platform です。
松崎:
あと中山が行った偉大な作業シリーズの中には、テストの充実もあるよね。
長い間メンテナンスされていて規模も大きいので、テストが充実していると良い、というかそうあるべきなんだよね。
でも実際は様々な歴史的経緯もあり、当時はあまりテストが充実していないという状態だった。
それが、「移行」というプロジェクトの性質もあり、特にテストの充実を目指して頑張ってやってくれました。
今も継続して取り組んでいるしね。
中山:
そうですね、当時よりテストは増えていると思いますね。
続きが気になるところですが、今回はここまでとさせていただきます!
読んでいただき、ありがとうございました😊
いい生活では新卒/キャリア採用を行っております!
下記から気軽にご応募ください!
また、いい生活では現在25卒以降の学生さん向けにサマーインターンの募集を行っております🌻
下記よりご応募お待ちしております!
対談の続きが気になるそこのあなた!!
いい生活公式noteの「いいnote」のフォローもお願いいたします!🙌
それでは今回はこちらで失礼します!
中山さんと松崎さんの対談は、どんどん盛り上がってまいります…!
次回はこちらの対談の続きです!
下記よりご覧ください👀
撮影:杉山 泰之