Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Androidアプリの One Experience リリース

Androidアプリの One Experience リリース

本スライドはTech Kitchen #29 Mobile App One Experienceで使用したスライドになります。
https://cookpad.connpass.com/event/337770/

こやまカニ大好き

December 18, 2024
Tweet

More Decks by こやまカニ大好き

Other Decks in Programming

Transcript

  1. © 2024 Cookpad Inc. 5 このセッションでは技術的な話はあまりありません クックパッドのJPアプリを One Experience 版にアップデートしてリリースする上で、

    私達がどのようにリスクを考え、 どういう部分をコントロールできるようにリリースしていったかを説明していきます。 もし今後同じような作業が必要になったとき、参考にしていただけると嬉しいです。 今日話すこと
  2. © 2024 Cookpad Inc. 6 クックパッドではレシピサービスを67ヶ国、26言語で展開中 これまでは日本とそれ以外で独立した2つのサービスを運用していた One Experience は日本向けのクックパッドサービスを

    Global で運用されていたサービスに統一し、 全てのユーザーに同じ体験を提供するプロジェクト 詳しくはクックパッド開発者ブログを御覧ください。 https://techlife.cookpad.com/entry/2024/10/10/105832 One Experience プロジェクトについて
  3. © 2024 Cookpad Inc. 7 JP アプリと Global アプリは完全に別のアプリ •

    APIも別、データベースも別 • クライアント側のコード共有率もほぼゼロ • デザインも大きく異なる • プロジェクト開始時点では日本語対応もない Android の JP アプリと Global アプリの違い
  4. © 2024 Cookpad Inc. 8 Android の旧 JP アプリと Global

    ベースのアプリの違い 旧JP OneEx
  5. © 2024 Cookpad Inc. 9 モバイルの One Experience プロジェクトでは、 JP版アプリを完全にコードベースが異なるアプリで上書きしつつ、

    それまでのユーザーと同じ状態でログインしたまま、 アプリ内のデータも引き継いた状態で動かせるようにする。 モバイルの One Experience プロジェクト
  6. © 2024 Cookpad Inc. 12 JP版アプリとしてリリースするため、以下のような設定が必要 • 日本版アプリのビルド設定 ◦ ApplicationId

    ◦ アプリバージョン ◦ 証明書などなど • Firebase プロジェクト • データの引き継ぎ ◦ 認証情報(AccountManager) ◦ ローカルデータ(Room) • ストア情報 アプリ側の修正
  7. © 2024 Cookpad Inc. 13 • JP版アプリのビルド設定は、 flavor で切り替え •

    この作業は後続の作業をブロックするので、最初期に行う必要がある • 具体的な手法については開発者ブログを参照 • Android では flavor dimension という仕組みを使った柔軟なビルド設定が可能で、ドキュ メントも充実している ◦ https://developer.android.com/build/build-variants Gradle Composite Build を用いたビルドロジックの共通化について https://techlife.cookpad.com/entry/2024/11/20/130000 JP版アプリのビルド設定
  8. © 2024 Cookpad Inc. 14 • JP版とGlobal版はバージョニングルールにも違いがあった • Global版はセマンティックバージョニング ◦

    major.minor.patch.build ◦ 毎週リリースのたびに minor を繰り上がる ◦ hotfix では build が繰り上がる • JP版は yy.ww.bb.bb ◦ ww はリリース日の週番号 ◦ bb はビルド番号(最大4桁) ◦ 毎週リリースのたびに ww が繰り上がる ◦ hotfix では bb が繰り上がる • 今後も週次リリース予定なので、JP版のルールで統一することに アプリバージョン
  9. © 2024 Cookpad Inc. 15 One Experience の段階リリース中は アプリバージョンのルールを一部変更していた ブランチ運用やバージョニングを簡略化することで

    Global アプリの週次リリースへの影響を抑えるため • 100%になるまではJPアプリを v24.27.xx.xx で固定 • xx.xx の部分はリポジトリで管理せず、 Google Play のバージョンを見て自動で繰り上げ アプリバージョン(段階リリース中)
  10. © 2024 Cookpad Inc. 16 JPアプリとGlobalアプリは Firebase プロジェクトも別だった 今回のプロジェクトにあたり、以下の2つの方針のどちらを取るか悩んだ。 •

    Global/JPアプリで同一の Firebase プロジェクトを利用する ◦ Google Analytics や Crashlytics の情報の継続性が失われる • JPアプリではこれまで利用していた Firebase プロジェクトを維持する ◦ 主にプッシュ通知まわりでバックエンドの追加開発が必要 プッシュ通知のような重要な仕組みを壊さない事を優先し、 JPアプリの Firebase プロジェクトを切り替えることにした。 Firebase プロジェクト
  11. © 2024 Cookpad Inc. 17 旧JPアプリ内のローカルデータを OneExperience版で扱うためには、 データのマイグレーション処理が必要になる。 クックパッドではほとんどのデータをサーバ側にもたせているが、 以下の2種類のデータはマイグレーションが必要だった

    • 認証情報のマイグレーション ◦ AccountManager に保存されていた ◦ 旧JPアプリのトークンとGlobalユーザーのトークンを交換することでログイン状態を 継続できる • 検索履歴のマイグレーション ◦ 検索履歴はローカルDBに保存されていた ローカルデータのマイグレーション
  12. © 2024 Cookpad Inc. 18 • 旧JPアプリでは AccountManager という仕組みで認証情報を保存 •

    Global アプリでは AccountManager を利用していなかった • 以下のような実装を追加した ◦ 旧JP版と互換性のある AccountManager 定義を Global 版に追加 ◦ アプリ起動時にマイグレーション済みでなければ AccountManager から認証情報を 取得し、ログインを行う処理を追加 ◦ 新しい認証情報の保存先は AccountManager ではないので、将来的には AccountManager の設定は削除予定 認証情報のマイグレーション
  13. © 2024 Cookpad Inc. 19 • マイグレーション処理の手順、APIの仕様はRFCと呼ばれる社内向けの Markdown 仕様 書で管理

    ◦ RFCは Pull Request で提出され、関係者のレビューを経由して最終仕様としてマー ジされる ◦ 内容に変更があれば追加のPRで修正する ◦ テストを書く際や仕様の確認に非常に便利 認証情報のマイグレーション
  14. © 2024 Cookpad Inc. 20 • 検索履歴は JP, Global の両方で

    Room に保存していた • たまたまDatabase名が違っていたため、JPのスキーマ定義を移植し、 Globalアプリ側のDBにマイグレーション処理を仕込むことができた • もしDB名、テーブル名が被っていたら検索履歴のマイグレーションはうまくいかなかった かもしれない • 通常のアップデートではあり得ないDB名・マイグレーション処理の衝突が起きるので注意 が必要 検索履歴のマイグレーション
  15. © 2024 Cookpad Inc. 22 OneExperienceのリリースをしていく上で、 以下のようなルールをあらかじめ決めていた。 • 段階的な公開機能を利用してリリースを行う •

    段階リリースを開始したらロールバックはしない • 100% リリースされるまでは Global 版と独立したリリースとして扱い、 すべてのリリースを別ブランチから配信する リリース作業
  16. © 2024 Cookpad Inc. 23 今回のプロジェクトでは、アプリのロールバックが非常に難しい • OneEx -> JP

    -> OneEx の順にアップデートしたとき 認証マイグレーションを適切に行えない ◦ 最初の時点で OneEx版にログイン済みの場合があるため • JP -> OneEx -> JP -> OneEx の順にアップデートしたとき 2回目の OneExアップデートで認証マイグレーションを適切に行えない ◦ 1回目のアップデート時点で OneEx版にログイン済みの場合があるため • 旧JP版とOneEx版の2つのプロジェクトの バージョン番号をあわせて更新していく必要がある • などなど ロールバックについて
  17. © 2024 Cookpad Inc. 24 今回のプロジェクトでは、アプリのロールバックが非常に難しい • OneEx(新規インストール) -> JP

    -> OneEx の順にアップデートしたとき ロールバックについて このとき最初の One Experience 版の データが読み込まれるため JP版の認証情報が反映されない One Ex One Ex JP
  18. © 2024 Cookpad Inc. 25 今回のプロジェクトでは、アプリのロールバックが非常に難しい • JP -> OneEx

    -> JP -> OneEx の順にアップデートしたとき ロールバックについて このとき旧JPのトークンがす でにないのでログアウト JP側でのログイン・ログア ウトが反映されない JP JP One Ex One Ex
  19. © 2024 Cookpad Inc. 27 Global 版の週次リリースフローを壊さないように、 JP版は以下の手順でリリースを行うことにした • JPリリース用に

    jp-release ブランチを用意する • JP向けの全ての修正は main ブランチにマージする • リリースしたいタイミングで main ブランチを jp-release にマージし、 jp-release からリリースする リリース手順について
  20. © 2024 Cookpad Inc. 28 リリース手順について(図) main release hotfix jp-release

    Global リリース Global リリース バックマージ バックマージ JP リリース JP リリース JP リリース JP リリース jp-release 固有の 差分がないので バックマージ不要
  21. © 2024 Cookpad Inc. 29 main に常にJP向けの修正が含まれていることで 複数のリリースブランチから main にバックマージする必要がなくなり、

    管理がシンプルになる。 jp-release に global 側の未検証のバグが入る可能性はあるが、 そこはJP版のリリース頻度を上げてカバーしている。 とにかく、JPアプリを高頻度、かつシンプルなフローでリリースできることに注力 リリース手順について
  22. © 2024 Cookpad Inc. 30 JPアプリの別ブランチ管理について • 良い面 ◦ Global

    アプリ側の週次リリースフローに影響を及ぼすことなく、高頻度でリリースが 可能になった ◦ 実際にリリース初期はかなり高頻度でリリースしていたので、有用だった • 悪い面 ◦ 特殊なリリースフローになってしまったので、リリースの自動化に関する部分が後回 しになった ◦ Global とリリースフローが揃い、 changelog やストア情報も完全に同期されるように なったのは先月 リリースフローの反省点
  23. © 2024 Cookpad Inc. 31 • 段階リリース開始から 100% リリースするまで3週間くらい •

    期間中のAndroidアプリリリース回数は14回 • 公開率5%で足踏みしていた期間が長く、 ユーザーの反応をみてバグを修正したりUIを変更したりしていた • 旧JPアプリではOneExperience 後のURLから起動できなくなるため、 Webが100%リリースされるタイミングで全プラットフォームが 100% リリース • 当時は毎日 Firebase の Release Monitoring を眺めて過ごしていた リリース期間
  24. © 2024 Cookpad Inc. 32 リリース前に変化を監視するためのダッシュボードを作成したりしていたが、 運用してみるとログ内容が想定と違っていたりしてかなり苦労した • Firebase プロジェクトが切り替わったことで、

    Google Analytics 上での変化などを監視できなくなった • 自前でログを取得していたので集計はできているが、 OneExperience 前後でログの内容もタイミングも変わってしまった • そのため、ユーザー行動の監視には今でもかなり苦労している リリース後の監視
  25. © 2024 Cookpad Inc. 34 • リリースだけでも考えることが多くて大変なプロジェクトだったが、 致命的な問題なくアプリを上書きすることができた • ほとんどのユーザーにはUIリニューアルだと感じてもらえていそう

    • 段階リリース中の変則的なリリースフローも解消され、 現在はJP/Global を同時に週次リリースしている • 今後も効率的な開発フローで クックパッドアプリの改善を進めていきます まとめ