はじめに
株式会社アイキューブドシステムズでAndroidアプリ開発を担当しているt-yusakuです。
今回は、おそらくあまり知られていないであろうAndroid Enterpriseという領域のAndroidアプリ開発について紹介します。これに関連して、当社のAndroid開発チームがどのような業務を行っているか、どのような課題を抱えているかということにも触れます。
Android Enterpriseって何だろう?MDMやCLOMOに興味があるけどAndroid開発チームはどんなことをやっているの?と思っているAndroidエンジニアの方がこれらのことを知るきっかけになると嬉しいです。
CLOMO MDMとデバイス管理
Android Enterpriseの説明をする前に、デバイス管理というサービスがどのようなものかCLOMO MDMを例に説明します。
CLOMO MDMは、当社が提供しているデバイス管理サービスです。主に、デバイス用クライアントアプリとIT管理者用Webコンソールの2つで構成されています。 CLOMO MDMのAndroid用クライアントアプリとして、CLOMO MDM Agent for Androidがあります。 Android以外にもiOS、iPadOS、Windows、macOSといった主要なプラットフォームをサポート対象としています。企業などのIT管理者はこれらのプラットフォームのデバイスをWebコンソールから一括で管理することができます。
CLOMO MDMを使うことで、企業におけるモバイルデバイスの運用を効率的で安全なものにできます。 たとえば、IT管理者は業務に必要なアプリを特定の部署のデバイスへ自動インストールしたり、従業員が紛失してしまったデバイスをリモートで初期化したりすることが可能です。その他にもビジネスシーンでのデバイス運用に必要な数多くの機能を備えています。
また、Androidデバイスを管理する方法として複数のデバイス管理モードを提供しています。
- 企業が所有するデバイスを従業員に貸与する
- Fully Managed Deviceモード
- Work Profile on company-ownedモード
- 企業が所有するデバイスをKIOSK1などの業務専用デバイスとして使用する
- Dedicated deviceモード
- BYOD2として使用する
- Work Profile on personally-ownedモード
各管理モードは、Android OSに用意されているデバイス管理権限によって実現されています。個人が所有するデバイスではAndroid OS上に仕事用の領域を作成してその領域のみ管理することでデバイスの個人利用を妨げないようにしたり、企業が所有するデバイスではデバイス全体を管理下に置いてインストール可能なアプリを制限したりできます。これによって、ユースケースに応じた適切な権限モデルによる管理を可能にしています。
Android Enterpriseとは
Android Enterpriseは、Androidがビジネス向けに提供しているデバイスやサービス、ソリューションの総称です。 特にデバイス管理の分野においては、Google Playエコシステム上のGoogle Play EMM APIやAndroid Management APIというサーバーサイドのAPIとDPC(DevicePolicyController)と呼ばれるAndroidアプリを組み合わせて提供されるデバイス管理サービスやその機能群を指します。 先述のCLOMO MDM Agent for AndroidはここでいうDPCにあたります。
AndroidプラットフォームAPIとしては、android.app.admin
パッケージに主要なAPIが用意されており、主にDevicePolicyManagerを使用してデバイス管理の設定をOSに適用したりデバイスの状態を変化させたりします。
Android Enterpriseのデバイス管理アプリが特徴的な点は、ほとんどのアプリ動作がUIを介したユーザーアクションではなく、Android OSからのBroadcastや外部からのPush、スケジュールされたタスクなどを起点とするということです。 そのため、アプリのライフサイクルが一般的なAndroidアプリと大きく異なります。具体的には、DeviceAdminServiceという特殊なServiceを実装できます。Android OSは常にこのServiceがバインドされた状態を維持しようとするため、デバイス管理アプリは常にフォアグラウンドとして振る舞うことができます。
また、Android EnterpriseにはGoogleによる審査基準が定められています。基準を満たすと認められたものにはAndroid Enterprise Recommendedというバッジが付与されます。 当社が提供するCLOMO MDMは、デバイス管理ソリューションとして2019年からAndroid Enterprise Recommendedを保持しています3。
CLOMO MDMを支えるAndroidアプリ開発
これまでに紹介した内容から、Android EnterpriseにおけるAndroidアプリ開発の特徴をまとめると次のようになります。
- Google Playが提供するサーバー用APIと、デバイス管理権限を持つAndroidクライアントアプリ
- IT管理者用Webコンソールからの操作によるAndroidデバイスの状態や管理ポリシーの変更
- WebコンソールとAndroidデバイスの状態の整合性確保
- デバイスの状態に応じたリアルタイム制御のための多様なバックグラウンド処理
これを踏まえて、私たちがどのようなプロジェクトに取り組んでいるのか紹介します。
Android Enterpriseのアップデートに対応する
Android Enterpriseのデバイス管理には、Googleの定めたfeature listが公開されています。 CLOMO MDMの開発チームでは、このfeature listのアップデートに追従する開発プロジェクトが適時発足されます。 Androidエンジニアはクライアントアプリの設計・実装はもちろんですが、WebコンソールのUIやAPIの設計の一部にも携わります。 feature listの内容からAndroidデバイスがどのような振る舞いをするか、クライアントアプリの実装にどのようなAPIが必要かといった観点が、管理画面のテキスト表現やバックエンドAPIの設計において重要だからです。
また、AndroidプラットフォームのアップデートにもAndroid Enterpriseに関する変更が含まれるため、こちらも対応する必要があります。
たとえば、Android 12のプライバシーに関連した変更として、個人が所有するデバイスに対してデバイス管理アプリがIMEIといったデバイス固有識別子にアクセスすることはできなくなりました4。 一般的なAndroidアプリでは、すでにAndroid 10/API Level 29でデバイスの一意な識別子が取得できないような変更が行われていました5。しかし、企業がデバイスを大量に管理するような場合においては、各デバイスを識別できることが重要です。そのため、Android 10からAndroid 11の間は個人所有のデバイスであってもデバイス管理アプリが固有の識別子を取得できる状態が続いていました。Android 12ではデバイス固有識別子に代わるものとして、enrollment-specific IDという概念が登場しため、今回の変更が行われました。
こういったAndroid Eneterpriseに関わるアップデートへ対応するのがこのプロジェクトの役割です。
CLOMO MDM独自の機能を開発する
Android Enterpriseのデバイス管理機能はAndroidプラットフォームが提供しているため、Android Enterprise Recommendedを持つMDMソリューションであれば、同じような管理機能を利用できます。 しかし、これらの標準的な機能だけではユースケースやニーズを十分に満たせないということがあります。CLOMO MDMでは多様なデバイス管理方法やビジネス要件に対応するため、継続的な機能開発を行っています。
たとえば、ネットワークセキュリティの観点から企業が用意したWi-Fiアクセスポイント以外への接続を禁止したいというケースがあるとします。これに対して、CLOMO MDMではSSIDとBSSIDのリストを指定してWi-Fi接続設定を管理するという方法でWi-Fiアクセスポイントの制御機能を提供しています。一方、Android Enterpriseでは、API Level 33でDevicePolicyManager#setWifiSsidPolicy())が追加されSSIDを指定することによる制御がサポートされる見込みです。Android 12L/API Level 32以前に同様の機能は存在しませんでした。
プロダクト品質の維持と改善
新機能の開発やプラットフォームアップデートへの追従とは別に、品質の維持や改善という観点から継続的な開発を支えるチームも存在します。CSE(CLOMO Sustained Engineering)と呼ばれるチームでは、お客様からお問い合わせいただいた事象の調査や不具合の修正、軽微な仕様変更などを主な役割として担います。また、開発ツールの整備や開発環境のメンテナンスといった作業もこのチームの役割に含まれます。
今回は、クライアントアプリの動作を調査する場合の特徴を紹介します。
企業が所有するデバイスをCLOMO MDM管理下に置くためには、デバイスの初期設定プロセスの中でクライアントアプリのインストールやデバイス管理権限の取得、Webコンソールへのチェックインといったキッティング処理を行う必要があります。これはプロビジョニングと呼ばれるAndroidプラットフォームが提供している仕組みの中で実現されています。 つまり、私たちが開発しているアプリはデバイス初期設定中にすでにデバイス上で動作していることになります。したがって、キッティング中の動作をADBやLogCatなどの一般的なツールを用いて調査することはたとえ開発途中のデバッグビルドであったとしてもできません。 そのため、キッティング後に開発者向けオプションを有効にして取得できるbug reportを活用したり、問題が発生したときにそれをLog以外として出力する仕組みを用意したりといった工夫をする必要があります。
このように、単に事象の調査や不具合の改修というだけでなく、継続的で効率的な開発を支えるような改善や工夫を行うこともCSEチームの重要な役割です。
Androidアプリ開発チームの課題
CLOMO MDMはAndroidのサポートを始めてから10年以上が経過しており、Android Enterprise feature listへの追従や新機能のローンチといった継続的な開発を行ってきました。
長期に渡ってプロダクトが成長してきた一方で、使用している技術スタックは近年のAndroid開発のメインストリームから外れており、いわゆる「技術的負債」と呼ばれる部分が増えつつあります。また、現在の主要な技術スタックに関する知見・ノウハウが不足していることも事実です。
たとえば、以前の記事で取り上げたようにCLOMO Launcher以外の製品ではJavaを使った開発を続けています。
アイキューブドシステムズではAndroidアプリでKotlinを採用したことがないという事情があったため、今後のKotlin採用の足がかりにしたいという思いもありました。
Androidアプリ新製品リリースプロジェクトの話 - i3Systems Engineering blog
その他に、Jetpackや主要なオープンソースライブラリの活用があまり進んでいないといった事情もあります。
当社のAndroidアプリ開発に携わるようになって2年経過した6私がこれらの背景について個人的に考察すると、強力なデバイス管理権限を持つバックグラウンドのServiceがメインのアプリであり一般的なAndroidアプリと構成や開発事情が異なることで、Androidアプリ開発の変化へ追従する動機づけが低かったのではないかと考えています。
このような事実に対して、今後のメンテナンス性やプロダクト品質の観点からはもちろん、採用観点でも解決すべき課題だと私は認識しています。Android開発チームは担当のプロジェクトとのバランスを取りながらこれらに取り組む必要があります。 そのため、主流となっている技術の社内勉強会を開いたり、プロダクトのソースコードにそれらを取り入れた場合のサンプルコードを実装して共有したりすることで、課題を解決するための足がかりや土台となるような取り組みを行っています。もちろんこれだけでは不十分なので、今まで取り入れることができていなかったライブラリの導入やアーキテクチャの検討を進めているプロジェクトもあります。開発チームには、これらを押し進める力が必要とされています。
最後に
今回は、Android Enterpriseの概要やAndroid Enterprise領域でデバイス管理サービスを開発するAndroidエンジニアがどのような開発を行っているのか、当社のAndroid開発チームがどのような課題をもっているのかを紹介しました。 この記事を書いた背景として、Android Enterpriseやデバイス管理といった分野はAndroidアプリ開発としてはマイナーであまり知られていないということがあります。そうした状況で、Androidエンジニアの方にAndroid EnterpriseやCLOMO MDM、当社の開発組織に興味を持ってもらえる機会を増やしたい考えてこの記事を書きました。
株式会社アイキューブドシステムズでは、Android Enterprise領域の開発へ携わることに関心のあるAndroidエンジニアを募集しています。Android Enterpriseは知らなくても、長年にわたって継続的に開発されているプロダクトを積極的に改善・推進できるエンジニアを大募集しています!
カジュアル面談を行うこともできるので、エントリーの際にその旨を添えてお気軽にお問い合わせください。
-
飲食店の注文用端末のような特定の用途のみで利用可能な端末のこと。とくにAndroid Enterpriseでは、特定のアプリをフルスクリーンで表示し続けることを指す。↩
-
Bring Your Own Device。従業員個人が所有するデバイスを業務で利用すること。↩
-
https://www.i3-systems.com/news/20190123, https://androidenterprisepartners.withgoogle.com/provider/#!/9↩
-
What's new for enterprise in Android 12 | Android Developers↩