DroidKaigi 2017に参加してきました

はじめに

Pairs事業部 Androidエンジニアインターンの中島です。
DroidKaigi 2017に参加してきました。私個人でははじめてのDroidKaigi参加でしたが、現在のAndroid開発の知見を多く得られて有益な時間を過ごすことができました。エウレカからも3名のエンジニアが4つのセッションに登壇しました。今回は特に印象に残ったセッションをご紹介します。

セッション紹介(エウレカから)

? Activityを改善した話(lvla0805さん)

ビジネスロジックやIO処理が多く書かれていて巨大だったActivityをどのように改善したのかという話でした。
実際の例として、else-ifが連続してフラグの状態をチェックしていくようなコードが挙げられていました。このようなコードがいくつも重なり合う事によってアプリが作られているためコードを追うことが困難になっている状態になっているということでした。

また、IO処理は単純に行数が多くなってしまうということも挙げられました。
この重なり合ったビジネスロジックと、大量のIO処理以外にも、責務から外れた動作を行うコンポーネントがたくさんあったり、いわゆる”神クラス”がたくさんあったり、外部の状態に依存したStaticメソッドが大量にあったり……と、大変な状態になっていました。その対策として、責務ごとにレイヤを分け、ModelとViewの間にPresenterを設けてViewとModelを分割しました。また、Dagger2を利用して依存性を解決するようにしました。これらによって、テストコードも書きやすくなり、全体の見通しも良くなり、ライブラリの載せ替えも簡単になりそうということでした。

Pairsのような大規模なアプリケーションとなると、やはりこのような問題が頻出すると思いますが、それに対しての対応策として責務をいくつもの層に分割する構成の仕方によるメリットは大きいと感じました。

h

Kotlin + RxJava + Dagger2 + Orma + Retrofitで作るAndroidアプリ(lvla0805さん)

表題の5つの要素を組み合わせてアプリケーションを作るというセッションでした。
KotlinはJavaの置き換えとして利用できるJVM言語で、RxJavaはReactive ExtensionsをJavaで利用するためのライブラリです。また、DIフレームワークにDagger2、ORMにOrma、HTTPクライアントにRetrofitを利用した構成でのセッションでした。

セッションではこの5つの要素をさっと説明しており、その構成でアプリケーションを書くことができるようになるという形です。
Kotlin + RxJava + ~ はちょうど個人的にも使ってみようとしていた組み合わせで、理解が一番難しいと感じたのはDagger2でした。「Dagger2とRxJavaは実際にコードを書いてみないとわからなかった」とのことだったので、実際に触って確かめてみようと思います。

Error Handling in RxJava (yuyakaidoさん)

RxJavaでのエラーハンドリングの話でした。各オペレータを組み合わせて以下のような複雑なエラー時処理

  • リトライを3回してもだめならキャッシュを表示する
  • リトライを3回してもだめならキャッシュを表示するがキャッシュもなかったらトーストを表示する

retry()retryWhen() 等のオペレータを利用して実現するにはどうすれば良いのかという内容でした。
Rxのストリーム中でスッキリと表現できるのは特にネットワークが絡む非同期処理で便利だと思いました。 このセッションで一番の難関だと思ったのはretryWhenの理解です。MarbleDiagramを見てもよくわからないので、実コードを見たほうが理解しやすいと思いました。

トークアプリで絵文字を実装した話 (futaboooさん)

Couplesで絵文字を実装した際の話でした。 まずは既存の他のアプリの仕様を把握するため徹底的に使ってみるというところから始めたそうです。

実装の概要としては、テンプレートで絵文字を表す内部的な表現を用意し、それを表示用の表現に変換するというものでした。

また、この中で、内部で絵文字の代わりとして扱っている文字列と、アプリ外へコピーした際の文字列の違いがあるという実装になっていたということを私はこれまで知らなかったです……。それ以外にも絵文字をひとつだけ送信した際にスタンプとして扱う等トークアプリではおなじみの処理が解説されておりこのようなアプリを書く方必見です。

セッション紹介(エウレカ以外の方)

Data Bindingで開発を気持ちよくしよう(ケノドン・ブノアさん)

Data Binding の広範なイントロダクションでした。これまで単純に値を単方向にバインドするくらいにしか使っていなかった私からすると、双方向や条件分岐、ラムダまで使えるということはとても驚きでした。

Android ORMの選び方(gfxさん)

Ormaの開発者の方のセッションでした。Android向けのORMは自分が触ったことのある3つくらいしか知らなかったのですが、それ以外にもたくさんのORMがあり、それぞれ設計思想やメンテされている状況も様々で、選択肢はたくさんあるのでそこからどう選択していくかはDBを使うアプリの根幹に関わる部分だけに重要だと思いました。

個人で11個のアプリを公開した結果(syarihuさん)

個人で11個もアプリを公開された方のセッションでした。おみくじアプリで凶がでたので★一つというレビューが付いたと言う話だったり、便利系ツールを公開してニュースサイトに掲載されたりと色々なエピソードがあるなあと感じると同時に個人でメンテを続けることの大変さを思い知らされました。

ドキッ★脆弱性 onCreate() から onDestroy() まで(ken5scalさん)

実際に起こった脆弱性の話でした。 非公開にする前提のActivityを公開にしてしまう、というところから始まった原因の事例からスタートし、それまでに適用していた対策や、最終的には人の対策が重要であるという内容でした。それまでに行っていた対策としてGoogle PlayのPre-Launch Report等があったとのことですが、システム的な対策を活用するのも大事ではあるものの、開発に関わる人の人的な対策も重要ということを感じました。

アフターパーティ

アフターパーティの会場はなんと都庁の展望台でした!夜景を楽しみつつAndroid開発の話やその周辺の話について美味しいご飯を食べながら語ることができ非常に楽しかったです。 個人的にはKotlinの話を多くできたのがとても有益でした。

おわりに

これまでこれほどの規模のカンファレンスに参加したことはあまりありませんでしたが、とても楽しく過ごすことができました。この大きなカンファレンスを開催・運営くださったスタッフの皆様、ありがとうございました!

  • このエントリーをはてなブックマークに追加

エウレカでは、一緒に働いていただける方を絶賛募集中です。募集中の職種はこちらからご確認ください!皆様のエントリーをお待ちしております!

Recommend

Pairs開発責任者が考える「プロダクト・マネジメント」に必要な5つの資質

EC2 Amazon Linuxインスタンス起動後に最初にやること