東京Ruby会議12のスポンサーブースでサービス統合の展示をします / 料理を食べながらRubyの話ができる非公式関連イベントを開催します

こんにちは。SRE の小川 (@coord_e) です。

東京Ruby会議12というイベントが 2025-01-18 (土) に開催されます。クックパッドは Ruby スポンサーとして協賛させていただきます。クックパッドから基調講演で鈴木 (id:eagletmt) が登壇します。また、筆者の小川もトークで登壇します。

regional.rubykaigi.org

クックパッドのスポンサーブースでは、以下の Techlife 記事で話題に上げた One Experience プロジェクトについて Ruby の視点で説明する展示を行います。

One Experience はレシピサービスのコードベースが丸ごと入れ替わるような大きな変化であり、往年の巨大 Rails モノリスである cookpad_all がついに退役に向かうなど Ruby / Rails やアーキテクチャの観点でこれまでのブログでは語り切れないような様々な変化がありました。ブースには One Experience プロジェクトの中心となった社員もおりますので、気になることはなんでもお話しできると思います。メンバー一同、当日ブースでお待ちしております!

更に、東京Ruby会議の非公式関連イベントとして、「Tech Kitchen #30 After 東京Ruby会議12: クックパッドのRubyライフ」を池尻大橋のオフィスで開催します。東京Ruby会議12のテーマ「Rubyと暮らす」にちなみ、クックパッド社員による Ruby の活用にフォーカスしたトークを用意しました。クックパッド社員が業務や日常生活でどのように Ruby を活用しているかを深掘りしていきます。懇親会では、弊社のキッチンでプロのシェフによる美味しい料理を食べながら Ruby の話ができます。

東京Ruby会議12のクックパッドブースにてイベントの参加方法をご案内いたしますので、当日はぜひブースにお越しください。

cookpad.connpass.com

【開催レポ】Tech Kitchen #29 Mobile App One Experience

レシピ事業部プロダクト開発グループの @miichan_ocha です。昨年の 12/18 (水) に「Tech Kitchen #29 Mobile App One Experience 〜サービス統合について語っちゃいます モバイルアプリ編〜」を弊社オフィスにて開催しました。

イベントではクックパッドレシピサービスの iOS/Android アプリ開発に携わる3名のモバイルアプリエンジニアから、昨年行った「One Experience」プロジェクトに関するお話をさせていただきました。この記事では、イベント当日の様子を発表資料とともに紹介させていただきます。

なお、「One Experience」プロジェクト自体の概要については下記の記事で紹介しているので、興味のある方はこちらもご覧ください。

日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望 by 三井田

最初の発表は私、三井田から「One Experience」プロジェクトで行った日本版とグローバル版のクックパッドモバイルアプリの統合や、現在のプロダクト開発グループの開発体制、これからやっていきたいことなどについてお話ししました。

speakerdeck.com

グローバル版の iOS/Android アプリを開発していたリポジトリから、日本向けとグローバル向け両方のアプリを配信するにあたってどのように開発を進めていったのか、統合が完了した今、これからどのようなことをやっていきたいのかなどをお話させていただきました。

週次リリースを実現するためのグローバルアプリ開発 by 山田

2番目の発表は、同じくレシピ事業部プロダクト開発グループに所属する山田 (@0x746572616e79) より、週次リリースを実現するためのグローバルアプリ開発についてお話ししました。

speakerdeck.com

プロダクト開発グループでは、1週間単位のスプリントでのスクラム開発を採用し、スプリントごとに機能のリリースを行っています。また、機能開発だけでなく、グローバル統合に伴う翻訳作業も同時に進める必要があります。この発表では、Feature Toggle を使ったスプリント(リリース)を跨いだ開発の進め方や、翻訳作業の流れについて紹介させていただきました。

複数リリースに跨った機能改善については、iOSアプリにおける複数リリースに跨った機能改善の開発事例紹介の記事にも詳しい記載があるので、興味のある方はこちらも合わせてご覧ください。

Androidアプリの One Experience リリース by こやまカニ大好き

最後の発表はレシピ事業部で Android アプリ開発を行っている、こやまカニ大好き (@kanidaisuki3) より、Android アプリを(コードベースが)別のアプリで上書きする具体的な手法についてお話ししました。

speakerdeck.com

この発表では、アプリのコードベースが完全に別物になっても、それまでのユーザーと同じ状態でログインしたままアプリ内のデータも引き継いだ状態で動かせるようにするために、どのように認証情報やローカルデータのマイグレーション、One Experience 版アプリのリリース作業を行なったのかなどについてお話させていただきました。

パネルディスカッション

発表後は、発表者3名にレシピ事業部部長の大石も加わり、参加者のみなさまからの質問への回答を中心としたパネルディスカッションを行いました。

グローバルのメンバーとのコミュニケーションはどうしているのか、日本版とグローバル版のUI統合はどのように決めたのかなどの多くの質問をいただき、とても充実した時間となりました。当日質問をくださったみなさまありがとうございました。

当時の質問や回答の一部は X の実況でご覧になれます。

懇親会

その後はシェフに作っていただいた料理を食べながら、参加者のみなさまと懇親会を行いました。美味しい料理を食べながら参加者のみなさまとたくさんお話・情報交換できてとても楽しかったです。

https://x.com/mimimi__ko/status/1869339039847092447 より

まとめ

今回のイベントはモバイルアプリ関連の Tech Kitchen としてはかなり久々のオフラインイベントで、私自身も久々のオフライン登壇で緊張していたのですが、参加者アンケートでもたくさんのフィードバックをいただき、開催して良かったなと思いました。今後もこのようなオフラインイベントを定期的に開催していけたら良いなと考えております。改めてこのイベントにお越しくださったみなさま、ありがとうございました。

トレンドワード機能を新システムに移行するときに考慮したこと

こんにちは。レシピ事業部検索チームの薄羽 (@usulity) です。

続々と関連記事が投稿されていますが、日本とグローバルのクックパッドを統合しました。

この統合に際して、日本のクックパッドの様々な機能がグローバル版へ移植されました。今回は、移植された機能の一つである「人気のキーワード」について、移植した際にどんな課題があってどう解決したのかの一部をご紹介できればと思います。

人気のキーワード

人気のキーワードは、「クックパッドで最近よく検索されているキーワード」を集計して、ランキング形式で掲載する機能です。

日本版クックパッドの人気のキーワードページ
日本版人気のキーワード

このように、人気のキーワードは1時間おきに更新され、その時期・時間帯のトレンドを反映したようなキーワードのランキングになっています。

トップページの検索窓の下にも上位のキーワードが表示されており、人目につきやすい機能の一つです。

グローバル版人気のキーワード

グローバル版にも人気のキーワード機能があります。

基本的な機能は日本のものと同じで、そのときのよく検索されているキーワードを表現しています。

グローバル版人気のキーワードのスクリーンショット
グローバル版英語の人気のキーワード

今回取り組んだタスクは、このグローバル版の人気のキーワードとして、日本の人気のキーワードを日本版の計算方式で表示することがゴールになります。

課題

ということで、「グローバルにも人気のキーワードがあるから、日本語でも集計を実行するように修正すれば終わり!」としたいところなんですが、いくつか問題があります。

そもそも、グローバル版と日本版は別物のアプリケーションであるため違いは色々ありますが、「ログがない」ことと「更新頻度の違い」は移植する上で大きな問題でした。

ログがない

人気のキーワード機能を移植するにあたり、ユーザが移行してきたタイミングではもう人気のキーワードを表示しておきたいという要望がありました。

人気のキーワードは検索ログから計算するため、人気のキーワードを表示するにはグローバル版で検索ログが溜まっている必要があります。

しかし、日本のユーザをグローバル版の方に流すまでは、日本のユーザはグローバル版の方にはいないため検索ログはありません。

このままでは移行してきたタイミングで人気のキーワードを表示することができないので、なんとかグローバルの方にログがない状態でも人気のキーワードを計算できるようにしておきたいです。

また、キーワードのクオリティの面でも懸念があります。

この次でも説明しますが、人気のキーワードの計算は、過去の長い期間に渡ったログを使うことで、そのときの人気度を計算しています。

そのため、移行の初期段階ではログが十分に溜まっていないことで、人気のキーワードの質が不安定になってしまう恐れがあります。

更新頻度の違い

日本の方は毎時の更新なのに対して、グローバルの方は日次の更新になります。

計算頻度が日次か毎時かでは、単なる実行頻度の違い以上の差があり、人気度の計算方法が異なります。

人気度は長期的な目線と短期的な目線の両方で見た時に、目立って検索されている語を抽出しています。

簡略化しますが、例えばグローバル版の方では、人気度を「そのキーワードのその日の検索回数」/ 「過去に渡ったそのキーワードの1日の平均検索回数」で計算します。

こうすることで、あるキーワードが平均よりその日多く検索されていたら、そのキーワードの人気度は高くなります。

毎時の計算においても同じようなことをしますが、時間の区切り方が異なります。

「その時間帯」で目立って検索されたキーワードを調べたいので、毎時の計算では人気度を、「そのキーワードが1時間の間に検索された回数」-「そのキーワードがこの時間帯で検索される平均回数」として計算します。

このように、日次と毎時では人気度の計算方法が異なり、毎時では日次より細かい単位で平均を計算します。

単純にグローバル版の人気のキーワードの計算を毎時に動かしても再現できないことが分かったので、グローバル版の人気のキーワード計算の仕組みを変えるか、新しくバッチジョブを用意する必要があります。

解決

日本版とグローバル版両方のログから合算する

移行先にログがない問題を解決するために、移行先の人気のキーワードは日本とグローバル両方のログから計算します。

幸い、日本版でも人気のキーワードの計算に特別な情報は使っていなかったため、グローバル版のログで情報が足りないといったことはありませんでした。

これにより、グローバル版に移行初期のタイミングでも、良いクオリティの人気のキーワードが計算できるようになります。

また、ユーザの段階的な移行を考えた時にも、この方法は利点があります。

日本版とグローバル両方からログを取得しているため、仮にユーザの50%は日本、もう50%がグローバルにいるようなケースでも、両方のプラットフォームでのユーザ行動を加味した人気のキーワードを計算できます。

実際に、 One Experience ではユーザを日本版から少しずつグローバル版の方へ移行していきました。

それぞれからの検索ログを同じ価値と見なして良いかは議論の余地がありますが、それを検証するのは大変なので、1つの検索ログが1回の検索を示すことだけ確認して、移行途中で日本版と大きく結果が離れていなければよしとしました。

このように、データソースを両方のプラットフォームから取得して計算することで、移行段階に左右されずに人気のキーワードを提供することができます。

日本用のバッチジョブを用意する

更新頻度の違いによる人気度の計算方法の違いが大きいため、今回は日本用のバッチジョブを用意することにしました。

グローバル版の方の仕組みを日本版に寄せる方向性も考慮しましたが、更新頻度以外に以下の理由で別のバッチジョブとして作ることにしました。

  1. グローバル版の方の人気のキーワードのクオリティをチェックしながら開発するコストが高い
  2. 日本とそれ以外の言語ではログの量に差があるため、そのためのパラメータ調整にコストがかかる

グローバル版では、多数の言語の人気のキーワードを計算しています。グローバル版の人気のキーワードの仕組みを変えた時、抽出されたキーワードのクオリティへの影響をチェックしたいわけですが、言語が違うのでチェックするのが大変です。

また、日本用にチューニングした人気度の計算方法が、他の言語でうまくいくとは限りません。日本向けに設定したパラメータが他の言語でも適切かどうかわかりせんし、また各言語向けに設定をするのもコストがかかります。

日本とその他の言語で別々のバッチジョブと言っても、将来的にはやはりなるべく1つにまとめられるようにしておきたいので、なるべくグローバル版の仕組みには乗るように注意しました。

結果とまとめ

結果として、ユーザの移行が始まる前に実装が完了し、無事移行初期段階でも人気のキーワードを表示することができました。

グローバル版日本の人気のキーワード
グローバル版日本の人気のキーワード

やはり、ユーザがどっちのプラットフォームに居ても人気のキーワードを計算できることは、One Experience ではとても有効な方法だったと思います。

また、バッチジョブを分けることで他の言語への影響をあまり気にする必要がなかったことも、開発していく上では重要だったと今改めて思います。一方で、人気のキーワードの計算が日本語だけ分かれていることでメンテナンスコストが増えてしまっているので、これを他言語と統合していくということが今後の課題として残っています。

個人的な感想としては、正しく人気のキーワードを計算できているのか最後まで不安がありましたが、結果としては日本版と同様のキーワードをグローバル版でも表示することができて良かったと思っています。

以上、One Experience における人気のキーワード機能の移行の話でした。

面白いと思ってくださった方は、ぜひチャンネル登録と高評価、また他にも色々な角度の One Experience 話が投稿されておりますので、ぜひそちらもご覧ください。