SansanでAndroidアプリケーションエンジニアをしている山口です。
Sansanでは先日Androidアプリのサポートバージョンを2019年4月1日よりAndroid 5.0 以上にさせていただくことをお知らせしました。
これに至った背景や流れについて書きたいと思います。
始まり
私は今年の7月に入社しました。Sansanでは入社して3ヶ月の間、部長との1on1をする機会が毎月設けられています。 そこでこんな会話がありました。
部長「Androidアプリの開発をやっていて辛いところはどの辺り?」
私「iOSと比べてサポートするバージョンが多くて辛いです。出来ればAndroid 5.0からにしたいです。」
部長「いいんじゃない?」
私「え?いいんですか?」
「いいんじゃない?」というのはもちろんちゃんとした理由があることが前提です。Android 4系をサポートするコストや現状のユーザ数・割合などを考慮した上でサポートを終了するほうが事業がよりよい方向に進むと判断できればという話でした。 チームのスクラムイベントでこのことを共有し、Android 4系のサポート終了へ向けた動きが始まりました。
Android 4系サポートの現状を整理する
現在のSansan AndroidアプリはAndroid 4.2以上をサポートしており、2018年8月のAndroid 4系のユーザ割合は以下のようになっていました。
- Android 4.2: 1.3%
- Android 4.3: 0.2%
- Android 4.4: 4.3%
これであればAndroid 4系をサポートを終了しても影響は少ないと判断できそうです。しかしこれだけでは単にユーザが減るだけで事業上の利点があるようには見えません。開発上どういった利点があるのかを整理します。
テスト台数の削減
現状Sansan AndroidアプリはAndroid 4.2~8.1をサポートしており、機能テストでは計9台のテストを行っています。これがAndroid 5.0からになると2台削減されテストが約22%削減されます。Android 4.2の端末は2013年発売ということもあり、動作が遅くバッテリーの保ちも悪いです。単にテストをするだけでも最新の端末をテストするよりコストがかかります。テストをするだけで問題がなければいいですが、Android 4系のみで起きるバグが起きた場合調査が大変です。数年前までの情報を遡って調査を行わなければいけません。最新のOSでは修正されていて修正方法が見つからなかったり、見つかったとしてもよくわからないワークアラウンドで、他バージョンに影響が出ないように分岐ができてしまうなど開発上の問題が多いです。Android 4系のサポートを終了することでこの問題が軽減される可能性があります。
マテリアルデザインのサポートコスト削減
マテリアルデザインのAPIはAndroid 5.0から始まりました。Android 5.0以上では1行で書ける設定(例えば android:elevation
等)がAndroid 4系ではXMLを別途用意して実現しなければならず、実装・UI確認に手間がかかります。drawale-v21などv21のフォルダを作ってファイルが2つになる手間もあります。
更にAndroid 4系はそもそもマテリアルデザインの世界に生きていないため、マテリアルデザイン自体をサポートする必要があるのか?ということからまず考えなければなりません。これらの考慮をしないだけで開発スピードが上がりそうです。
Multidex環境でのビルド高速化
Android 5.0からはMultidexの最適化が行われビルド速度が向上します。開発用にProduct Flavorを切ってminSdkVersion 21にし、開発中はそのProduct Flavorを使うTipsがありますがAndroid 4系のサポートを終了すればそういった設定は不要です。常にビルド高速化の恩恵を受けられます。
64K を超えるメソッドを使用するアプリの設定 | Android Developers
更にAndroid 4系でMultidexを使用するためにはサポートライブラリが必要になります。この影響でAndroid 4系上ではInstant Runが使えなくなり、さきほどのようなAndroid 4系のみ起きる問題のデバッグを行うときはInstant Runなしの非効率なデバッグを行わなければいけなくなります。Android 4系のサポートを終了することでサポートライブラリを削除し、常にInstant Runが使用できるようになります。
他社の動向を調べる
SansanのようなBtoBの企業でのサポート状況を見てみると、Salesforceが2018年5月18日にAndroid 4系のサポートを終了しています。
BtoCではメルカリやクックパッドなどがAndroid 4系のサポートを終了しています。
世間的な流れとしてもAndroid 4系のサポート終了が進みつつあると考えられます。
了承を取る
これらの情報を元に各種関係者の了承を取っていきます。実際にはエンジニアリングマネージャーに協力頂き関係者との調整が始まりました。所属するプロダクト開発部での合意を経て、サポート部・カスタマーサクセス部の了承を取りました。サポートを終了すると言っても突然ではユーザに影響を与えてしまうため、協議の結果半年後にサポートを終了する形でまとまりました。そして最後にユーザに対して約半年後にサポートを終了するという形でお知らせさせていただきました。
今後の方針を決める
さて、ここまでで無事Android 4系のサポート終了がまとまりました。しかし、サポートの終了はこれで終わりではありません。また時間が過ぎていくとAndroid 5.0のユーザも少なくなっていき、サポートを切ったほうが良い時期が来るでしょう。そこで今後のサポート方針についても議論しました。具体的には以下のようにまとまりました。
- ユーザーが5%以上存在する OS のマイナーバージョンのサービスを維持する
- ユーザーが5%以上存在する CPU アーキテクチャのサービスを維持する
- 観測期間は1ヶ月
- 他社の BtoB サービスの動向も参考にする
- 開発に悪影響を与えるバージョンであるかを加味する(開発スピード・保守運用のコスト)
最後の項目を定めているのは、数字だけ見てバージョンを切っていくと単にユーザ数が減るだけになるためです。サポートを終了することで事業や開発の中でどういった利点があるかを明らかにした上でサポート終了の可否を決めていきます。
PRでの変更点
では具体的にコード上で何を変更したかを上げていきます。
minSdkVersion
を21にする- Multidexのサポートライブラリの削除
Build.VERSION.SDK_INT
で処理を分けている部分の削除drawable-v21
,style-v21
ディレクトリをdrawable
,style
ディレクトリに統合する- Android 4系用に実装しているワークアラウンドの削除
これにより261行ほど削除することができました。色々な箇所で分岐がなくなり読みやすいコードになりました。
終わりに
今回はSansanのAndroidアプリでAndroid 4系のサポートを終了した話をさせていただきました。
Sansanでは引き続きサポート対象を見直しつつ効率的な開発が進められるように取り組んでまいります。 現在モバイルエンジニアを絶賛募集中ですので、興味のある方は話を聞きに来ていただくだけでも構わないのでお待ちしております。