こんにちは、レシピ事業部プロダクト開発グループの赤松(@ukstudio)です。
昨年の10月頃からレシピ事業部ではひとつの大きなプロジェクトに取り組んでいました。このプロジェクトは社内ではOne experienceと呼ばれています。本記事ではこのOne experienceについてご紹介します。
One experienceとはなにか
クックパッドではレシピサービスを日本を含めた71ヶ国、29言語で展開しています。これまでは日本のサービスと海外のサービスは独立した別のシステムで別のサービスとして展開してきました。日本のレシピサービスは日本の組織が、海外のレシピサービスはイギリスにオフィスを置く海外の組織によって開発・運営を行なっていました。
One experienceはこの独立した2つのサービスを1つに統合し、国内・国外関係なく、全ユーザーに同じ体験を提供することを目的としたプロジェクトです。
現在、このOne experienceプロジェクトはほぼ完了しており、すでに海外で開発されていたシステム (以後グローバル版) に日本のレシピサービスが統合されています。一部の古いバージョンのモバイルアプリを使っているユーザーを除いてほぼすべての日本のユーザーのアクセスがグローバル版システムによって処理されるようになっています。
リソースを集中させ、大きなインパクトを生み出す
なぜ私たちはレシピサービスを統合することにしたのでしょうか。
私たちは「毎日の料理を楽しみにする」をミッションに掲げ、全力で取り組んでいます。このミッションの実現のためには様々なチャレンジを通して大きなインパクトを生み出していく必要があります。
ですが、日本と海外のサービスがそれぞれ別の組織で開発されていると、開発のためのリソースが分散してしまいますし、どちらかのみに作られた機能は当然そのサービスを使っているユーザーにしか届きません。
そうではなく、より大きな価値をよりたくさんの人に届けるために、2つのレシピサービスを1つに統合し、全員が1つのサービスを開発することとなりました。
日本のレシピサービスを海外のレシピサービスへ統合する
レシピサービスを統合することが決まったあと、日本のシステムをベースに統合するのか、グローバル版のシステムをベースに統合するのか議論しました。
日本版もグローバル版も主要なWebアプリケーションがRailsで実装されているという点では同じですが、インフラやWebフロントエンドで採用している技術スタックや、非同期ジョブやバッチ実行のための仕組みなど様々な点が異なっています。同様にモバイルアプリケーションも採用しているアーキテクチャなど日本版とグローバル版とで異なっていました。
このように日本版とグローバル版には様々な違いがあり、どちらに統合するにしてもなんらかのメリット・デメリットが存在します。そのうえで、最終的に「グローバル版をベースに日本のサービスを統合する」という決断を行いました。16年運用されてきた日本のRailsアプリが、10年運用されてきたグローバルのRailsアプリへ統合されることとなったのです。
決定の背景として、海外で展開していたレシピサービスは他の国や地域のレシピサービスを買収し取り込むことで成長してきた経緯があり、そのため外部のデータなどを取り込むための機能が既に存在していました。また、複数地域・言語でサービスを展開しているため、国際化の仕組みも備わっています。このような仕組みがない日本版システムに統合するよりも、グローバル版システムに統合する方がトータルでもっとも素早くシステムを統合できると判断したため、今回の決定に至りました。
サービスの統合は難しい
グローバル版に日本のレシピサービスを移行することが決まったとは言え、考えることはとても多くありました。
例えばグローバル版と日本版のレシピサービスではレシピを投稿したり、探すことができるというコアな部分は一緒ですが、グローバル版にしかない機能、日本版にしかない機能、グローバル版にも日本版にもあるが仕様が異なる機能、UIが違うものなど様々な違いがあります。
これらについては主に以下の観点から整理を行いました。
- 日本版で実装されていて、One experienceプロジェクト完了後も残したい機能を移植する
- = 日本版で実装されていて、One experienceプロジェクト完了後になくなる機能を決める
- グローバル版で実装されていて、One experienceプロジェクト完了後に残さない機能は削除する
特に日本版からグローバル版への機能の移植は、そのまま移植するのではなく、利用してくれているユーザーにとってあるべき形は何なのか、改めて考えながら移植を行いました。そのため一部の機能は日本版で提供していたものと変わっているものもあります。
また、検索はレシピサービスにおいて非常に重要な要素であり、特に人気順は有料会員向けの機能です。よって、日本版システムで実現できていたのと同等の品質でグローバル版の検索システムでも提供できる必要がありました。
そして、グローバル版は日本版とは別のシステムとして稼動しているサービスなため、当然データベースも別で運用されています。これは日本版のデータをグローバル版のデータベースに持っていく必要があるということです。グローバル版は日本の開発組織とは完全に独立して0から開発されていたため、日本版とグローバル版ではデータベースのスキーマにも違いがありますし、データを移行するにあたってダウンタイムを設けるかどうかで対応の難易度も変わってきます。今回、データ移行については両システムともダウンタイムなしでデータ移行を実現できました。
このような課題をひとつひとつ解決し、無事統合を完了させることができましたが、まだ今後の土台ができただけとも言えます。今後はよりたくさんの価値を届けられるよう引き続き開発を続けていきます。また、今回の統合によりレシピサービスを利用してくださっているユーザーにとって体験が大きく変わりました。現在も様々なご意見が寄せられており、これらにも目を通しながら鋭意改善を続けています。
さいごに
以上がOne experienceプロジェクトの概要です。
One experienceプロジェクトは、最初に立てた計画をそのまま最後まで実行したわけではありません。途中でユーザーインタビューやテストも実施して、その結果を踏まえて実装するものが変わることも何度もありました。最初はなくす予定だった機能を最終的に復活させたこともあります。
最終的な形がはっきりしないままプロジェクトを進めるのは心理的にそれなりの負荷がありましたが、ユーザーによりよい価値を届けるためにはこのやり方で良かったと今では思っています。最初にすべてを決めてしまうと、それを作り切ることだけが目的になってしまいかねないからです。
この不確実な状況でもOne experienceプロジェクトが完遂できたのは、データマイグレーションや採用する技術スタックなどの技術的な方針を最初に決め最後までほぼブレなかったこと、プロジェクトの各領域のリーダーたちがしっかりと各々の責任を果たし、連携できたからでしょう。
長らく運用してきたサービスのシステムを統合することはここでは書ききれない課題がたくさんありました。
この記事で軽く触れたものもありますが、いくつか例を挙げると以下のようなものがあります。
- 両システムを稼動させたまま、どうやって日本版のデータの変更をグローバル版にリアルタイムに反映するのか
- 日本の検索をグローバル版のシステムにどう移植したか
- 日本のチーム主導で作る機能をどのようにして国際化対応するか
- グローバル版への移行による日本からのアクセスにおけるパフォーマンスの劣化をできる限り軽減したい
- などなど
これらについても今後このブログで発信していく予定です。ぜひ弊社のXアカウントをフォローして更新をお待ちください。