株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。
2018年3月2日のイベントでは「Androidエンジニアとして自身の価値を高める極意」を開催。独立系システムベンダーでエンジニアとしてモバイル向けアプリケーション開発を中心に活躍しており、Androidアプリ開発の著書も持つ木田学さんが、エンジニアが自身の価値を高めるための材料として、最新のAndroid開発のトレンドについて紹介してくれました。

■今回のイベントのポイント
・なぜ自分の価値を高めるのか?
・Androidの現状
・Android開発技術要素の拡大

テックファーム株式会社。開発エンジニア。iOSやAndroid等、モバイル向けアプリケーションを中心に開発。健康支援アプリ、音声認識アプリ、ドローンアプリなど幅広い領域の開発を手掛けている。共著に『Androidアプリ 開発の極意』(技術評論社)などがある。
なぜ自分の価値を高めるのか?
テックファーム社のエンジニアとして、顧客である生命保険会社のスマホアプリ、音声入力の名簿検索アプリ、ドローン制御アプリなど様々なアプリを多数手掛けてきた木田さんは、冒頭で「なぜ自分の価値を高めるのか?」について、マズローの5段階欲求説に基づき、紹介してくれました。そして、自分の価値を高めるのは自己実現のためであると説きます。

スマホは利用頻度が高く、人に影響を与えられる素晴らしいツールで、スマホアプリを作れることはすなわち多くの人に影響を与えられる素晴らしい仕事と考えているそうです。
多くの人に使われるAndroidアプリ開発を極めていくことは、エンジニアの価値向上につながると考え、今回のイベントも「皆さんの価値を高める材料を増やす」ためになればとのこと。
Androidの現状
まずはAndroidのシェアから。2008年に世界初のAndroid端末が登場し、現在は世界で75%のシェアを獲得。ライバルであるiOSは20%なので、数の上では圧倒しています。
でも、これはあくまでも世界規模で見た場合のお話で、日本国内はちょっと違います。
2011年時点の調査ではありますが、日本国内ではiOSが約6割、Androidが約4割という結果が示されており、国内におけるiPhoneの人気の高さがうかがえます。

また、Android OSの最新バージョンは8.1ですが、市場ではバージョン5.0、6.0、7.0の3つのバージョンが8割を占めています。複数バージョンの存在は、Androidアプリ開発でも注意が必要かもしれません。
Android開発技術要素の拡大
では、いよいよ本題です。Androidアプリ開発に求められる技術にはどのようなものがあるのでしょうか。
「多様化する社会のニーズに向けてアプリやサービスを開発していくにあたり、開発の現場においても、幅広い知識が必要とされてきています」(木田さん)
実際にAndroidアプリ開発にも、さまざまなニーズがあり、品質重視、スピード重視、外部サービス連携、クラウド連携、複数ベンダーとの連携などが求められています。
こうした多様化するニーズに対応するため、Android開発の技術もすそ野が広がっています。その中でも重要な技術を6項目に分けて紹介してくれました。

まずは開発環境について。IDE(統合開発環境)にはGoogle社が提供するAndroid Studioがよく使われています。
プロジェクトのビルドには、gradleが使われることが多いのですが、元々Google社内で使われていて今はOSS化されたbazelというビルドツールも使われ始めており、「今後はbazelに置き換わるのではないだろうか」(木田さん)とのことでした。
その理由として、Android OS 8.1から端末上の人工知能を加速させるNeural Networks APIが実装されており、TensorFlow Liteが使用できるようになりましたが、TensorFlow Liteのサンプルプロジェクトをみるとビルド方法にbazelが使用されており、これから出番が増えていくだろうというのが木田さんの見立てです。
また、プラグインや、メモリリークをチェックするアナライザーなどについても、開発現場で使われているものをいくつか紹介してくれました。
開発言語は、現在はJavaが主流ですが、今後はkotlinが使われるようになるのではないか、とのことでした。
Androidアプリの開発においてもオープンソースソフトウェア(OSS)が、いたるところで利用されています。

「OSSを利用することで開発工数が大幅に減り、バグが出にくくなります。ただし、デメリットもあり、バージョンアップで動かなくなったり、そもそも(設計上の)バグを含んでいたりというケースもあります。しかし、それらを差し引いてもメリットのほうが大きいと言えます」(木田さん)
そして、イベント通知ライブラリEventBus、RESTクライアントライブラリRetrofitなど、OSS利用に有用なライブラリも紹介してくれました。
BaaS(Background as a Service)とは、バックエンドの機能を提供するサービスのことで、Webアプリケーションで言うサーバサイドに相当します。
主要なものとして、AmazonのAWS、MicrosoftのAzure、GoogleのFirebaseなどがあります。FirebaseはGoogleのサービスなので当然ですが、AWSにはAWS SDK for Android、AzureにはAzure Mobile Access SDK for Androidという、それぞれを利用するためのAPIを実装したライブラリが提供されています。
そのほか、バックエンドの負荷考慮についても、いろいろなノウハウがあることを教えてくれました。

アプリを公開するなら、Google Play Consoleで、できること(やるべきこと)を知っておくと良いそうです。同Consoleからは機種制限、レビューコメント、公開制限事項などの設定が行えます。
また、AndroidアプリがGoogleマップやGoogleドライブなどのサービスにアクセスするためのAPIを提供するGoogle Play Servicesの機能も、知っておくと良いとのことでした。
バグレポートでは、リアルタイムクラッシュレポートツールFirebase Crashlyticsが便利とのこと。また、試験の自動化では、Googleが公開しているAndroid用UIテスト自動化フレームワークEspressoをよく利用しているそうです。
CI(継続インテグレーション)では、他の分野でもお馴染みのJenkinsや、Concourse CIなどが使われており、また、外部サービスとして、前述のFirebaseや、OpenSTFというツールを利用することもあるそうです。
多様化するニーズに対応するには、デザインソフトの知識も求められます。木田さんのお勧めはSketch。モバイルに特化した機能があり、異なる解像度の機種に向けたデザインを作成するのにも便利だとか。
また、iOSアプリとの比較も重要で、コンポーネント(ボタンやテキストボックス等)や、フラットデザインとマテリアルデザインの違いを押さえておくことで、同じアプリのiOS版とAndroid版のUIの整合性が保てるなど、メリットも多いといいます。

以上、充実した1時間半のイベントでした。今回のイベントで、Android開発の最新事情の一端を垣間見ることが出来ました。エンジニアとしてやりたいことがあるなら、自己実現のためにも、最新技術のトレンドを常にキャッチアップしておくことが大切ですね。