Droidcon KrakówでRuntime Permissionsの話をしました
片渕 真太郎
スクラムエンジニアリンググループの片渕です。
今回、Droidcon Krakówというカンファレンスに参加・登壇してきましたので、その知見を共有させて頂きます。
ちなみに、Kraków(日本語読みはクラクフ)というのはポーランドの一都市で、日本でいうと京都に相当する歴史のある古都だそうです。
発表について
当日は、「Managing Runtime Permissions」というタイトルで45分枠で話をしました。
Marshmallow対応にあまり時間を割けていない開発者が、この話を聞いた後にRuntime permissionsへの対応方針が立てられる事を目標に話題を組み立てました。
大まかに、以下の様な構成で話をしました。
- 仕様の複雑さ
- デザインパターン
- 自動生成による問題の解決
仕様の複雑さ
実行時にパーミッションを制御するコードを書こうとすると、開発者は様々な事を考慮しなければならない事に気付きます。
以下がその一例です。
- ダイアログに存在する”Never ask again”の存在
- 同じpermission groupに所属するpermissionは許可/拒否の設定が共有される事
- protectionLevelがdangerousなカスタムパーミッションも考慮に入れなければならない事
- sharedUserIdによってパーミッションの設定情報が共有される事
WRITE_SETTINGS
とSYSTEM_ALERT_WINDOW
という例外的なパーミッションが存在している事use-permission-sdk-23
の存在や、maxSdkVersionを指定するなどの小技- targetSdkVersionが22以下でもMarshmallowでは設定画面からパーミッションをオフにできる事
各問題の詳細に関しては、以下の記事が詳しく参考になります。
- RiskFinder株式会社ブログ: Runtime Permission
- Android Mのruntime-permissionに潜む罠
- Android 6.0 の Runtime Permissions (M Permissions) に対応するためのアクティビティ図
パーミッションのハンドリングはアプリの機能が使用できるかどうかという問題に関わってくるので、開発者は煩わしいと思っても対応をないがしろにする事はできません。
デザインパターン
Googleはgoogle.com/designにパーミッションを尋ねる際のデザインガイドラインを公開しています。 それによると、
- アプリにとって必要不可欠なパーミッションものは初回起動時に認可を求める
- パーミッションの仕様用途が不明なものに関しては適切な説明画面を設ける
という対応方針に従えば良い事が分かります。
また、Permissions Best Practicesで触れられている様に、Intentの使用を検討する事、必要なパーミッションのみを求める事も重要です。
ユーザーが不安なくアプリを使え、かつユーザビリティを損なわない事を念頭に注意深く導線を設計する必要があります。
自動生成による問題の解決
上記で説明した仕様の複雑さを解決する為に、annotation processingを利用してコンパイル時に必要なコードを生成するPermissionsDispatcherの紹介をしました。
このライブラリは必要に応じてメソッドにアノテーションを付与するだけで良いので、ActivityやFragmentからif-elseなどの条件分岐を消す事ができ、適切な粒度でコードを分割する事が可能になります。
また、annotation processingを利用している為パフォーマンス面での懸念もありません。
このライブラリは今年の8月末から開発を開始しましたが、今ではメルカリや海外版cookpadを始め、いくつかのアプリにご利用頂いているようです。
海外カンファレンスへの参加
なぜ参加したのか
東京は世界の中でも有数のIT勉強会が活発な都市であり、わざわざ海外に行く必要はないと思う方もいるかもしれませんが、私は以下の理由から今回の参加を決めました
- 東京は勉強会こそ多いものの参加者が固定化しており、マンネリを感じていた
- 英語でのプレゼン経験が無かったので、挑戦したかった
- ヨーロッパではどんな技術要素がトレンドなのか、日本とは何が異なるのか興味があった
また、個人的に運営に関わっているDroidKaigiというイベントを海外に向けてアピールする狙いもありました。
Droidconについて
Androidアプリの開発に関わっている人は聞いた事があるかもしれませんが、Droidconとはカンファレンスのブランド名であり、ニューヨーク、ロンドン、モスクワ、バンガロールなど世界中でDroidconを冠したイベントが実施されています。
Androidの大規模なイベントといえば日本ではABCやDroidKaigi、海外だとBig Android BBQなどがありますが、恐らく最も世界的に認知されているブランドはDroidconだと思います。
Droidcon Krakówについて
クラクフと聞いて「ヨーロッパのメジャーな都市でもないし、あまりカンファレンスのレベルも高くないのでは?」と思った方もいるかもしれません。
実際自分もそう思って応募したというのが正直な所でした。
しかし、実際にはスピーカーの半数近くはポーランド国外から来ており(ドイツ、フランス、イタリア、トルコ、ウクライナ、USなど)、トークの内容もRxJava、Kotlin、Material Design、App Invite、Data Binding等モダンなテーマが多かったです。
特にRxJavaに関してはRxJava Essentialsの著者のIvan MorgilloやSasa Sekulicによるハイレベルかつ実践的なトークを聞く事ができました。
また、スポンサーもSoundCloud(ベルリン)やGenymotionを開発しているGenymobile(パリ)らが顔を揃えており、東京のカンファレンスと比較しても勝るとも劣らない充実ぶりでした。
当日の様子は、Youtubeにaftermovieが公開されています。
準備について
CFP(call for papers)
私は15分程で走り書きしたものを送信してしまったのですが、振り返ればしっかりと文章を練っておけば良かったなと感じます。
というのも提出した文章は当日のタイムテーブルに表示されるので、参加者はその情報を頼りに聞きたいセッションを選ぶからです。
時間に余裕がある場合は、制限文字数ギリギリまで書き、英語が堪能な人に添削をお願いするのが良いかと思います。
プレゼンテーション
私は英語が堪能ではないので、以下の準備を事前に実施しました。
- スライドだけ見ても意味が伝わる様にする事
- 各スライドで何を喋るか大まかに決めておく事
- スライドができたら何回か通してみて時間の配分をつかむ事
また、当日はゆっくりすぎるかな?と思うくらいゆっくりと英語を話す事を心がけました。
参加者は英語が母国語でない人の方が圧倒的に多いですし、自分の発音やイントネーションに自信がない場合はゆっくり話した方が意味が伝わりやすいと思います。
ちなみに、CFPの文章とプレゼンで使用したkeynoteはこちらに公開しました。
見る人が見ればかなり稚拙だと思いますが、興味がある方は覗いてみてください。
その他
やって良かった事
- 事前にどんなスピーカーがいるのかチェックしていたので、会場で出会った時にスムーズに打ち解ける事ができました。また、自分のアクティビティを知ってもらう為にTwitterやBlogで英語でも発信する様にしていました。
やっておけば良かった事
- 海外のトークでは、ただ話すのではなく身振り手振りを交えたり、質問者に景品を渡す等、盛り上げる為の工夫が日本より求めらると感じましたが、今回そこまで手が周りませんでした。
- 名刺を忘れてしまったのですが、会場では名刺交換が頻繁に行われていたので持って行くべきでした。
おわりに
海外のカンファレンスで発表するというとハードルが高いと思うかもしれませんが、私は自信が無い人にこそスピーカーとして参加する事をお勧めしたいです。
何故かと言うと、スピーカーとして参加する事で「君のトークはここが良かったね」などと向こうから話しかけて貰えるので、コミュニケーションのきっかけを増やせるからです。
日本でも、2016/02/18-19にDroidKaigi 2016が開催されます。
今回は英語と日本語のトークを採択しており、海外からもスピーカーが参加する予定です。
より良いAndroidアプリを開発したいという方は、ぜひ参加して一緒に盛り上げていきましょう。
皆様のご応募をお待ちしております。