こんにちは, Androidチームの @tomoaki_imai です。
先日 shibuya.apk というAndroid勉強会で メルカリのデバッグ機能についてお話をさせていただきました。スライドはこちらです。
要点としては以下2点となります。
- デバッグ機能はモジュール化して管理し、productionのコードに入れないようにする
- メルカリではクライアントのデバッグ設定画面以外にデバッグメニューもあるが、メニュー表示はUIに影響を及ぼすので、ビジビリティをデバッグ機能上で制御できるようにする
今回は発表ではほとんど話さなかった、メルカリのAndroidで実装しているデバッグ機能そのものについてもう少し触れたいと思います。
そもそもデバッグ機能とは
このデバッグ機能は開発者が効率よく開発を進めるためにDEV版のみに追加しているものです。
例えば
- サーバーサイドエンジニアが、開発中の機能が入ったブランチがデプロイされたサーバーに切替えて動作確認したい
- クライアントエンジニアがアプリの設定や機能などをサクッと確認したい
といった用途で利用しています。
デバッグ設定画面とデバッグメニューの違い
上でも述べましたとおり、メルカリAndroidではデバッグ設定画面とデバッグメニューという2種類のデバッグ機能があります。
-
デバッグ設定画面
-
デバッグメニュー
2つの用途の違いとしては、ざっくり以下のようになっています。
- デバッグ設定画面 : クライアント全体に影響するような設定を行う場合に利用
- デバッグメニュー : さっと確認したい値や、画面単位で影響するような設定を行う場合に利用
これらについては必要に応じて開発者が少しずつ機能を追加してきました。それぞれについてどのような機能があるか紹介します。
デバッグ設定画面
デバッグ設定画面では主に以下の様な機能を提供しています。
APIのドメイン変更
メルカリでは多くの機能を並行開発しているため、複数の開発サーバーがあります。そこで柔軟に環境を切替えるために、この機能が利用されます。
特殊画面を開く
エラー画面やメンテ画面など、通常の操作では開くことができない画面を開く機能です。この辺の画面を開発しているときは、さくっと開いて実機で確認できるので、とても便利です。
デバッグ・ログアウト
メルカリではログアウト機能を提供していないのですが、開発時にユーザーを切替えて作業を進めたい場合に、最低限の部分だけログアウトすることが出来る機能です。
デバッグメニュー
発表でお見せしたデモ動画です。
デバッグメニューでは主に以下の様な機能を提供してます。
自動入力
例えば入力して確認が必要な画面について、自動で入力する機能です。
仕組みとしては単純で、デバッグメニュー・モジュール経由でBaseActivity
に作ったonDevInput()
というメソッドを呼ぶだけです。自動入力を使いたい画面についてonDevInput()
をoverrideして、入力したい項目に適宜いれてあげます。
//MenuModule.java private void onDevInput(){ BaseActivity activity = (BaseActivity)mWeakActivity.get(); if(activity == null) return; activity.onDevInput(); }
//LoginActivity.java @Override public void onDevInput() { mEmailEt.setText("test@example.com"); mPasswordEt.setText("password"); }
Activity情報
今開いているActivity
名や、そのActivity
で利用しているintent
を確認できます。Activity
名は意外と覚えられないので重宝します。
APIブランチ確認
今クライアントに設定しているAPIのブランチ情報を確認できます。デバッグ設定画面でも確認できるのですが、いちいちデバッグ設定画面まで行くのが面倒なので、ここにも用意しています。
システム系情報
デバイスから取得できるシステム情報を取得しています。
- 画面dpiサイズ
画面のdpiをgetDisplayMetrics().density
で確認しています - デバイス情報
デバイス名やOSバージョンなどをBuild
オブジェクトから確認しています - Heapサイズ
アプリが確保しているメモリをRuntime.getRuntime()
でチェックします - 各種ID
Pushを送るために必要なIDなどを確認できるようにしています
マスターリフレッシュ
メルカリでは初回起動時の通信量を減らし、起動を早めるために、クライアント側に”マスターデータ”を保持しています。マスターデータはブランドカテゴリや県名などのような、通常変更がないデータのことです。このマスターデータがサーバーのマスターデータと差分があった場合は差分を取得するようにしています。サーバー側のマスターデータを更新した場合に、差分が反映されているかを確認させるためにこの機能を持っています。
メニューの表示/非表示について
メルカリではデバッグ機能を含むDEV版でもQAを実施しています。デバッグメニューが常に表示されているとUIに影響を及ぼすだけでなく、予期せぬ動作も起こす可能性もあります。そのため、デバッグメニューは表示、非表示をデバッグ設定画面からコントロールできるようにしています。その辺のノウハウはスライドに書いてありますので、ご確認ください。
デバッグメニュー表示
デバッグメニュー非表示
まとめ
今回はメルカリのAndroidクライントで実装しているデバッグ機能について紹介しました。デバッグ機能はサービスそのものとは関係がありませんが、開発時の効率性を上げるために非常に重要な機能です。うちではこんな便利なデバッグ機能を使ってるよ、というのがあれば、ぜひ教えて下さい!