【DroidKaigi 2018】 ニッチな技術と交流の 2 日間

キッズリーのリードエンジニア (ときどき Android アプリ開発) の信岡です。

2018 年 2 月 8 日、9 日に開催された Android に関する国内最大規模のカンファレンス DroidKaigi 2018 において、弊社リクルートマーケティングパートナーズはシルバースポンサーを務めさせていただきました。 ブースに立ち寄ってくださった皆さま、ありがとうございました。 今回は 「ニッチな技術とコミュニケーション」 がテーマということで、私個人としてもセッションや交流から様々な刺激をもらいました。 運営の皆さま、参加者の皆さまに感謝しております。

弊社からは 「マルチモジュールのすヽめ」 というタイトルで釘宮が登壇しました。

複数の Android ライブラリモジュールからアプリを構築するようなプロジェクト構成にするというテーマで、その背景、目的や利点、具体的な分割の指針や設計思想、具体例などが話されました。

モジュール分割の指針として、具体的にはモジュールを意味のあるまとまりごと (機能ごとなど) に分けるということが述べられています。 レイヤードアーキテクチャを採用している場合にはレイヤーごとにモジュールを分けるという方針をとることもできますが、それではモジュール化による 「コンテキストを分ける」 という利点を享受できなくなってしまいます。 マイクロサービスの考え方と同じようにコンテキストを限定するということを考えると、このモジュール分割の指針は非常に有用でしょう。

弊社サービス 「スタディサプリ ENGLISH」 の Android アプリもこのようなマルチモジュール構成になっています。 発表の中でも触れられているように、1 つの画面に複数のモジュールの Fragment を表示する、ということも行なっています。 (下図参照。 発表スライドの 106 枚目より引用。)

私自身も Android アプリのマルチモジュールについては以前から実装を試してきました。 その動機やつまづき箇所 (データバインディングライブラリとの兼ね合いなど) は発表の中で触れられているとおりで、共感する内容でした。 1 画面に複数モジュールの Fragment を表示することは未経験だったので、その点は非常に刺激を受けたところです。 弊チームが担当している保育園向けのサービス 「キッズリー」 の Android アプリは現在のところ単一のモジュールでアプリを構成しているのですが、釘宮の発表の中でも触れられている利点や単一モジュールでの保守性に限界を感じていることなどから、マルチモジュールへの移行を考えています。

マルチモジュールでの Android アプリ開発について興味のある方は是非また情報交換しましょう!

弊社参加者のオススメセッション

弊社から参加した Android アプリエンジニアのオススメセッションをいくつか紹介します。

Kioskアプリと端末の作り方

こちらは私から。 DroidKaigi 2018 の中で、特に私が影響を受けたセッションです。

DeNA三輪さんによる発表。 Android 5.0 で導入されたデバイスオーナー (Device Owner) 機能を用いて特定用途に特化した情報端末 (Kiosk 端末) を作る、という内容でした。 今回のテーマでもある 「ニッチ」 と呼ぶにふさわしい、あまり知られていない機能ではないでしょうか。

デバイスオーナーというのは端末管理者 (Device Administrator) の一種です。 その権限は強く、デバイスオーナーアプリは DevicePolicyManager を使用して、端末の設定やセキュリティ、アプリをコントロールできます。 デバイスオーナーアプリを実装し、lock task mode を利用することで Kiosk 端末を実現します。 端末のプロビジョニングについては、NFC によるものと adb コマンドでの方法が紹介されていました。 コマンドでの初期化は端末数が多い場合に大変ではないか (現実的なのか) と感じ、オフィスアワーでその点について教えてもらったのですが 「マニュアル化して外部に委託することを実現している」 とのことでした。 オフィスアワーでの質問内容等も上記 Qiita 記事にまとめてくださっていますので、ぜひご覧ください。

私のチームでも特定用途に特化した情報端末をサービスとして顧客に提供しているので、非常に参考になりました。 弊プロダクトではサードパーティ製の MDM (Mobile Device Management) 製品を利用しているのですが、独自に開発する手間がない反面、機能が十分でないといった不満点もあり、本発表を聞いたことで独自に開発するというのも検討していきたいと思うようになりました。

発表を聞いてから調べてみたところ、Android のドキュメントでは単一用途向けの企業所有の端末のことを COSU (corporate-owned, single-use) 端末と呼んでいるみたいですね。 ドキュメントとしては下記ページにまとまっています。

上記ページでは、COSU 端末の実現方法として 3 種類書かれていました。 今回の発表内容は 「独自の DPC (device policy controller) アプリを開発する」 に相当するものですね。 他には 「Android Management API を使用する」 という方法もあるようで、まだ beta のようですが、これについても調査してみたいと思います。

React Native Android はなぜ動くのか

こちらはスタディサプリ ENGLISH の Android アプリエンジニアの kawapaso のオススメ。


ウォーターセル株式会社Yukiya Nakagawa さんのセッションです。 最初に、導入として React とは何かという話から始まり、ReactDOMReact Native との住み分けがどうなっているかなど説明されました。 React や React Native に詳しくない人にもわかりやすい導入でした。

そこから本題です。 React Native (の Android 向けの実装) の責務とそれぞれの内部実装についてで、具体的には下記の内容です。

  • JS 実行環境
    • JavaScriptCore によって JS が実行されている。
    • Android 向けに JavaScriptCore ライブラリをビルドするためのスクリプトを Facebook が提供している : JSC build scripts for Android
  • JS と Java のブリッジ
    • 配列や辞書については、C++ で JNI の実装が提供され、繋ぎこみが行われる。
    • 資料では、実際にネイティブモジュールを作る例を示しながら説明されている。
  • React から Android の View の構築
  • 公式のネイティブコンポーネントとネイティブモジュールの提供

ここでは簡単な紹介だけに留めますが、資料にはソースコードの表示もあってわかりやすくなっていますので、詳細はそちらをご覧ください。

最後にはリリースビルドの構築についても説明されます。

「React Native (Android) がどういう仕組みを知りたい」 「仕組みがわからないので本番投入していいのかどうか判断できない」 というような人は、この資料を見ると得るものは大きいのではないでしょうか。

Surviving a discontinuous world

こちらはキッズリーのプロダクトオーナー (ときどき Android アプリ開発) である保坂のオススメ。 本セッションについての以降の文は保坂によるものです。

FablicHiroshi Kurokawa さん のセッションです。

このセッションでは、新しく Android を始める人達向けに、Android 開発をしていると一度はハマる様々な問題の最新の解決策がわかりやすくまとめられていました。 このセッションで取り扱っている問題は、Android の初期からある問題で今まで多く議論されてきたものです。 今回のセッションでは、今までの解決策に加えて、去年発表された Architecture Components ライブラリなどを使用した解決策がまとめられていました。

具体的に、このセッションでは主に以下の問題を扱っていました。

  • 非同期処理
    • 通信の非同期処理と、その結果を View に反映させる際のスレッドまたぎの話です。
    • RxJavaKotlin Coroutine での解決策を提示しています。
  • 画面回転
    • 通信中に画面回転をしてイベントが取れなくなった際などの話です。
    • Architecture Components の ViewModel での解決策を提示しています。
  • 画面間でのデータの連動
    • 俗にいう LIKE 問題で、遷移した画面で LIKE をした際に、元のリストなどで LIKE されているようにするにはどうしたら良いかという話です。
    • おなじみの startActivityForResult メソッドの使用から始まり、イベントの Pub/Sub、Persistent repository での解決策を提示しています。
  • 一時的な画面間のデータ保持
    • 初回の登録などの際に、複数画面にまたがってフォームの入力をする際の、一時的なデータ保存についての話です。
    • こちらも、startActivityForResult メソッドから始まり、Local Storage や、Activity の中で複数の Fragment を使った解決策を提示しています。

また、これらの問題の再現方法などもセッションでは紹介されていますので、ご自分の開発しているアプリでどのような挙動をするか、まずは試してみるのが良いかもしれません。

Android アプリ開発者を募集中です!

2018 年 2 月現在、弊社では Android アプリ開発者を積極的に募集しております! 募集要項などは下記ページよりご確認ください。

「どういう働き方をしているのか知りたい」 「応募までは考えてないけどちょっと興味があるから話を聞いてみたい」 という方は、ご飯を食べながらやオフィスに来て頂いてお話をするということも可能です。 お気軽に Twitter の @nobuoka に連絡くださいませ!