DroidKaigi 2019 に参加しての感想

[DroidKaigi 2019](https://droidkaigi.jp/2019/)、今年も楽しかったれす。
セッション、EXPO、conf-apps などの「個人の感想」です。
登壇の感想はまた別で。

# セッション

## DAY1

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">西新宿駅じゃなくて、新宿駅西口に来ちゃったぞ</p>&mdash; あめいぱわーにおまかせろ! (@amay077) <a href="https://twitter.com/amay077/status/1093309417389322240?ref_src=twsrc%5Etfw">2019年2月7日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

### Server-side Kotlin for Frontend: 複雑なAndroidアプリ開発に対するアプローチ

* https://droidkaigi.jp/2019/timetable/70925

弊社でも、モバイル向けの REST API をそれ専用に作ったりしているので、それの発展形が BFF(Backends for Frontends) と理解できた。

たくさんのクエリと結果を含んだ「神API」のできてしまう問題も分かりみが深い。

今は Java9 でサーバーサイドを開発しているので、Kotlin を部分的に採用するメリットもありそうだし、そうでなくても BFF を適用できたらよいなと感じた。

### PWAでここまで出来る

* https://droidkaigi.jp/2019/timetable/69046

PWA についておさらいするために聴講。

個人的な希望だけども、スマホのストレージは常に容量不足で、ローソンやマクドナルドなど、「ショップ毎のネイティブアプリ」というのは、インストールに壁がある。それが提供するサービスを考えれば PWA で十分だと思う。広告のためとか不要なPush通知のためにネイティブアプリにしているのだとしたら辞めて欲しい。

簡単にインストールでき、必要になったらフル版に「昇格」できる InstantApps はどこかへ消えてしまったね、わかるよ、作るの面倒だし、Android にしかリーチできないし。

## DAY2

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">『ホテルのモーニングは食べる』『会場の朝食も食う』「両方」やらなくっちゃあならないってのが「朝食付き宿泊プラン」のつらいところだな。覚悟はいいか? オレはできてる。ぱくぱく。</p>&mdash; あめいぱわーにおまかせろ! (@amay077) <a href="https://twitter.com/amay077/status/1093658207497539584?ref_src=twsrc%5Etfw">2019年2月7日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


### Dialogflowによる自然言語処理(NLP)を用いたボイスコマンド音声認識の精度向上

* https://droidkaigi.jp/2019/timetable/67146

「あ、Dialogflow って LUIS と同じやつだったんだ。」

LUIS も管理サイトは使いやすく思えなくて、バッチで学習させるツールを作って使っている。

Dialogflow vs LUIS では機能的にそんなに違いはなさそうだなーと感じたけど、細かく調べたらあるのかもしれない。選択肢が増えてよかった。
オフィスアワーで登壇者の方と会話したところ、氏は LUIS については知らないとの事だったので、MS系技術はやはりリーチ層が限られるのかなと思ったり(逆もまた然りで、私も Dialogflow を知らなかったわけで)。

### Wi-Fi RTTによる屋内測位アプリを作ろう

* https://droidkaigi.jp/2019/timetable/70885

屋内測位の話。
RTT(ラウンドトリップタイム)により、端末からWiFi基地局までの距離を推定する。
複数台の基地局を用意してそれぞれで距離を推定し、よしなに最適解を出してね、ということだった。
FusedLocation に組み込まれて、対応基地局が充実して、普通に使われるようになることを期待。

そういえば過去には [Skyhook](https://www.skyhook.com/) のような、WiFiの電波を利用した位置測地DBやアルゴリズムがあって現在も使われているはずだが、それらは「電波の強さ」で基地局までの距離を推定していると思われる。RTT はラウンドトリップタイムなので、そこが違うだけで、他のアルゴリズムは同じなのかなーと思った。

GPS以外の測位技術は、PDR(Pedestrian Dead Reckoning)も含めて、まだ普及するような技術が出てきていないので今後も要チェックやわ。

### All About Test of Flutter

* https://droidkaigi.jp/2019/timetable/70548

X-Plat パーソンとして、Flutter の様子を伺うために潜入。

IDEのテスト環境がちゃんと整備されていて良いな、使いやすそうなテスティングフレームワークだな、という印象。
特に、別セッションで、「Kotlin の coroutines のテストでハマりどころがある」という話を聞いた後では、 async/await なテストも普通にサポートしていて良さげだった。

ただし、個人的に Flutter は 「プレゼンテーション層を早く美しく作る」 という役割にとどめて、ロジックは Kotlin/Native に任せたい、という希望があります。

### Sharing Code between iOS & Android with Rust

* https://droidkaigi.jp/2019/timetable/70924

コード共有に目がないので潜入。
Rust のコード初めてみましたわ〜ｗ

圧倒的な速度差というのは置いておいたとしても、なるほど C++ に比べて簡潔な構文で良さげに見えた。
Java とのブリッジ定義もシンプルな記述に見えたし(iOS の方はしんどそうだけど)。

どうしてもパフォーマンス優先にしたいときの選択肢にはなりそうかな、と。
少なくとも C言語 よりはやる気にさせてくれそう。

### Android Enterpriseで実現できる端末管理の世界

* https://droidkaigi.jp/2019/timetable/70820

BtoB 屋さんなので聞いた。

企業向けの限られたユーザー群に業務用アプリを配布する方法をいつも考えていて、今は DeployGate を使っていてそれはそれで便利なのだけど、もっとセキュアに、あるいは簡易MDMのようなものが自作できないか、と考えていた。

自作は難しそうだけど、企業向けの Google Play Store の使い方なんてのもあるそうなので、オフィスアワーで会話できてよかった。

## Fast Prototypes with Flutter + Kotlin/Native

* https://droidkaigi.jp/2019/timetable/67217

X-Platパーソンなので(ry

とあるカンファレンス向けアプリを限られた期間内で作るために Flutter と K/N を採用してみたという話。
そういえば DeNA Tech conf アプリも Flutter 製だったなあと思いながら、イベントアプリでの X-Plat 採用は、期間や開発リソースの制約を考えるとマッチすることが多いのだろうと思った。

やはり Kotlin/Native -> Swift(.framework) からの -> Flutter がつらそう、という印象。
Flutter の MethodChannel ではエンティティクラスを渡すことも面倒そうだなと感じた。逆に言えば、ここに何らかのソリューションが登場したら「強い」だろうな、とも。

### 実践 WorkManager

* https://droidkaigi.jp/2019/timetable/70215

WorkManager による画像の事前(非同期)キャッシュの話。
WorkManager 自体はとても便利なAPIで、Androidアプリだけならそれを使わない手はないなーと思いつつ、iOS版では「アプリ実行時に非同期でキャッシュを溜めている」とのことで、Android版との機能の違いが出てきちゃうんだよなー、という X-Platパーソンの余計な考えがでちゃいました。

WorkManager は便利だけど iOS にはない、Android版だけ高機能にするか、仕様(実装)を共通にするために Android 版の機能をオミットするかは、Kotlin Multi Platform Project な世界では発生すると思うので、来年以降、いろいろなノウハウを得たいです。

### 巨大なアプリの開発を支えるフラグ管理術

* https://droidkaigi.jp/2019/timetable/70717

すいません、概要読まずに「アプリ内のステート管理の話かな？」と思って参加したら違いました、でも得るものは多かったです。

git でのソースコード管理において、Feature ブランチのマージコンフリクトが頻発するのを防ぐために、アプリの機能に ON/OFF のフラグを設け、Feature ブランチを main(master) ブランチに積極的に(機能OFFで)マージしていこうという戦略。

機能の OFF→ON のミスを減らすための ``build.gradle`` への記述の工夫も「なるほどー」という感じ。

# EXPO

車関連のサービス展示が3つもあって、これが MaaS か…という印象。
私も物流関係のB2B向け案件に携わっているので、なんだか身近に感じましたね。
DeNA のブースで 「おまえは MaaS で、俺は 3PL(3rd Party Logistics)、そこになんの違いもありゃしねぇだろうが！」などという会話をした（してないw）。

恒例のシール貼るやつ。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/DroidKaigi?src=hash&amp;ref_src=twsrc%5Etfw">#DroidKaigi</a> 2019<br>1日目のアンケート結果はコチラです！<br>明日は、また別のアンケートを実施します。ぜひ遊びに来てください(^^) <a href="https://t.co/kkmA5xH9NU">pic.twitter.com/kkmA5xH9NU</a></p>&mdash; CyberAgentDevelopers (@ca_developers) <a href="https://twitter.com/ca_developers/status/1093416959243300864?ref_src=twsrc%5Etfw">2019年2月7日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Xamarin はこんなもんでしょ。意外と多いくらい？

あとバリスタさんコーヒーおいしかったです。

## DroidKaigi アプリ

今年もコントリビュートさせてもらいました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8227/6cc3e59e-c964-b172-c03c-952cc0a84a1c.png)
via [DroidKaigi 2019 WelcomeTalk - Speaker Deck](https://speakerdeck.com/mhidaka/droidkaigi-2019-welcometalk)

昨年は、当日も [バグを直したり](https://qiita.com/amay077/items/68ee7c8937507e6c6785) してましたが、今年は登壇者でもあり資料を作る必要があったので、あんまり時間は割けなかったのですが、小さめの PR を投げさせてもらいました。 Swift コードをマージしてもらったのはこれが初ですw

### Pull requests

* [Support data and view timezones](https://github.com/DroidKaigi/conference-app-2019/pull/379)
* [Set default tab to Day2 when 8 Feb](https://github.com/DroidKaigi/conference-app-2019/pull/444)
* [Add error callback for iOS in common module](https://github.com/DroidKaigi/conference-app-2019/pull/508)

あとは、気になったところを Issue 登録したりしました(対応して頂いた方、ありがとうございました)。

### Issues / Comments

* Feature Request - [Adopt "Optimistic Updates" when toggle favorite](https://github.com/DroidKaigi/conference-app-2019/issues/497)
* Feature Request - [Scroll to LIVE when Day1/Day2 secondary tapped](https://github.com/DroidKaigi/conference-app-2019/issues/446)
* Report Bug - [Open IME when app started](https://github.com/DroidKaigi/conference-app-2019/issues/656)
* Comment - [Useful setting items](https://github.com/DroidKaigi/conference-app-2019/issues/474#issuecomment-454298879)

# おわりに

人気のセッションはやはり満席だったみたいで、私はそれを避けてニッチめなセッションを聞かせてもらいました。
どれも参考になるよいセッションでした。

自分は B2B でモバイルアプリを作っている人ですが、DroidKaigi では B2C なサービスに関するネタが多くて、それはそれで貴重なのですが、エンプラ向けのセッションがもうちょっとあると嬉しいなあと思いました(実際エンプラ向けのセッションのオフィスアワーには人がたくさん質問に来てましたし)。

あと、Firebase に関するセッションって少なかったですね(Firestore に関してはゼロ?)、ちょっと意外でした。

現地で観られなかったセッションに関しても、すでに [動画公開](https://www.youtube.com/channel/UCgK6L-PKx2OZBuhrQ6mmQZw) していただいて感謝しきりです。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/DroidKaigi?src=hash&amp;ref_src=twsrc%5Etfw">#DroidKaigi</a> スタッフ半端ないBOT「DroidKaigiスタッフ半端ないって。あいつら半端ないって。イベント終了から3日以内にほとんどのセッション動画公開するもん。そんなんできひんやん、普通。」 <a href="https://t.co/sSxQPOzPGz">https://t.co/sSxQPOzPGz</a></p>&mdash; あめいぱわーにおまかせろ! (@amay077) <a href="https://twitter.com/amay077/status/1094987179531460610?ref_src=twsrc%5Etfw">2019年2月11日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

さっそく動画を流しながら仕事をしています(仕事が手に付かない)。

かと言って、参加しなくてもよかったかといえばそれは No! であの雰囲気を感じられることが一番の収穫なんですよね、毎年思ってますけど。