こんにちは、サーバーサイドエンジニアをしつつ、最近はAndroid開発初学者のhyogaです。 入門してからそろそろ1年経とうとしているので、もう初学者と言えないかもしれないですね。
クックパッドでは、開発を効率的に行うために、様々な仕組みやツールが導入されています。 この記事ではクックパッドでのAndroidアプリの開発中からアプリのリリースまでに使われる以下のような仕組みやツールについて広くお伝えできればと思います。
Flipper
Meta社の作っているFlipperというツールです。 クライアント側でセットアップし、使いたいPluginごとの対応が必要ですが 対応さえ済んでしまえばFlipperを開くだけで、以下の内容などが見れるようになります。
ネットワークViewerでは、 APIリクエストをmockして特定のAPIリクエストでエラーを起こしたり、レスポンスを任意の値に置き換えたりすることができます。 APIリクエストエラー時の挙動が簡単に確認できたりして、とても便利ですね。
APIレスポンスを書き換えている様子 | モックされたAPIレスポンスにより部分的にエラーになっている様子 |
---|---|
他にもShared Preferencesの内容を確認して、書き換えたりもできます。 クックパッドのAndroidエンジニアの中では必須ツールになっています。
開発者用のデバッグツール
社内で開発されている開発用のデバッグツールです。 クックパッドAndroidアプリは マルチモジュール化されています。 このデバッグツールもその中の1つのモジュールとして提供されており、 デバッグビルド版でのみ使うことができます。
この開発者ツールでは、以下のような事ができます
- APIの接続先(ステージング/プロダクション)の切り替え
- ログインしているユーザの行動ログの閲覧
- ログインしているユーザの簡単な切り替え
- A/Bテスト用のツールのA/Bパターンの切り替え
- などなど...
これにより、エンジニア以外でも特殊なツールなしにデバッグや動作確認が容易になっており、とても便利です。
また、この開発者ツールはリリース版ビルドには含まれないので、実験的に新しい機能や ライブラリを導入して試すような使われ方もしています。
Android StudioのFile and Code Templates
クックパッドAndroidアプリでは、VIPERっぽい*1アーキテクチャを用いて実装されています。
VIPERアーキテクチャでは、1つの画面を実装するために Interactor
、 Routing
などといったたくさんのファイルを用意する必要があり、あたらしい画面を実装するたびに、同じ似たようなコードを書くのはなかなか手間がかかります。
そこでクックパッドでは、 Android StudioのFile and Code Templates機能を使い、必要なファイル群をガガっと生成することができるようにしています。 基本的に新しい画面を実装する時は、このファイル群を編集していく形になります。
少し細かい工夫ポイントは、Templatesを使った時点でビルドが可能な状態になっていることです。
これによって、Interactor、 ViewModelといったデータの取得部分から実装する必要がなくなり、Viewから実装する選択肢を取れるようになりました。 Jetpack ComposeだとPreviewで簡単にViewを確認できるということもあり、個人的にはとても嬉しいです。
ちなみにTemplatesは .idea/fileTemplates/
以下に配置しており、クックパッドAndroid
アプリを開発するエンジニアが共通して同じものを使えるようにGitリポジトリに含めています。 *3
haneda: 開発中のアプリを簡単にインストールできる仕組み
クックパッドでは、GitHub Enterpriseを使っておりPR上でコードレビューなどをします。 クックパッドAndroidアプリのリポジトリでは、 PRを出すとCIによってビルドされたアプリがhaneda(社内のアプリ配信サービス)から配信され、 社員は手元の端末にPRの変更が適用されたアプリをインストールすることができます。
最新のビルドだけでなく過去のビルドなどもインストールできたり、クックパッドAndroidアプリだけでなく、クックパッドで開発されている全てのアプリがhaneda上で配信されているので、クックパッドのメンバーが社内の開発中アプリにアクセスしやすくなっています。
社内の誰でもQRコードから開発中のアプリをインストールできることはとても便利です。 エンジニア以外の人も開発中のアプリをインストールして動作確認したりドッグフーディングすることができます。
おわりに
どうでしたでしょうか? この他にも
- アプリにbeta機能として特定の機能を追加できるFeature Flag
- マルチモジュール構成になってるアプリの特定のモジュールだけを別アプリとして切り出すことのできる仕組み*4
- Markdownで管理された行動ログのログ定義から実装コードを自動生成できる仕組み*5
など日々エンジニア主体でAndroidアプリ開発を効率的に行う仕組みの改善や導入がおこなわれています。
クックパッドは、DroidKaigi 2022にゴールドスポンサーとして協賛しています!会期中は会場でブース出展しますので、興味を持っていただけた方はぜひブースにお越しください。 オフラインでもオンラインでも他の話も聞いてみたい!などあれば気軽にご連絡お待ちしてます!!
*1:https://techlife.cookpad.com/entry/2021/11/11/kaimono-jetpack-compose
*2:https://techlife.cookpad.com/entry/2021/11/11/kaimono-jetpack-compose
*3:共有されたFile Templatesを利用するにはAndroid Studioの設定からFile and Code TemplatesのSchemeをProjectにする必要があります
*4:https://techlife.cookpad.com/entry/2020/12/04/110000#%E3%83%87%E3%83%A2%E3%82%A2%E3%83%97%E3%83%AA%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE%E5%AE%9F%E8%A3%85