のぶLab.

流しのソフトウェアエンジニアの雑記帳. Android, Scala, Clojure, Ruby on Railsなど

DroidKaigi 2017に参加しました [Day1]

DroidKaigi 2017の1日目(3/9)に参加しました。

ここでは私が聴いた講演のメモやら感想やらを載せます。

各講演の記録

How to Apply DDD to Android Application Development

y-anz-m.blogspot.jp

DDDは難しいけど怖くない 行き当たりばったりの設計に、とりあえず動けばいいやで作られたアプリを長年メンテナンスし機能追加するほうがよっぽど恐ろしいです。

この言葉はいいなと思った。

質問コーナーでバリデーションロジックはどこに置くべきかとあり、ユーザ操作の補助的なものであればUI層・ドメインモデルとしての存在可否を確認するものであればドメイン層とのこと。

一口にバリデーションで片付けず、詳細を分析する必要があるということは新しい発見だった。

Android Security最前線

※ 資料が公開されたらリンク貼ります。

Android Nougatではsecurity周りが多数アップデートされた。その紹介。

Using Scoped Directory Access

Android 7.0から特定のディレクトリのみにアクセスを許可することが可能になった。

ユーザ側としてはディレクトリ単位でアクセス許可できるのは安心かもしれない。

Direct Boot

Android 6.x以前は端末が暗号化されている場合、ユーザがアンロックしていないと既存の保存先にデータ保存できなかった。

Android7.0からはロック解除されていない状態でダイレクトブートモードで動作し、端末暗号化ストレージにアクセスできる。

端末暗号化ストレージを使う際はセキュリティレベルが下がるので保存するデータは要精査。

Network Security Config

Android 7.0から、カスタムCA証明書を信頼するための安全で簡単なAPIが提供されるようになった。

デフォルトではユーザが追加したCAは信頼しないようになっている。

Android 6.x以前だと設定アプリからCA証明書を入れる操作をしてもらっていたが、その必要がなくなりユーザの負担が軽くなる。

インスペクションとAndroid Lint Custom Ruleによる、単一責任実装の実践

www.slideshare.net

自前でLintルールを追加して単一責任原則を満たしているか確認する手法の紹介。

クラス内のメンバ変数を元に単一責任原則を満たしているかの検査を行う。

チェック対象がプリミティブ値のみなので、"ThoughtWorksアンソロジー オブジェクト指向に近づく9つのルール"の"全てのプリミティブ型と文字列型をラップする"を実践していたら恩恵を受けられないw

でも設計原則をLintに組み込むチャレンジはとても面白い。

大規模アプリのリノベーション

※ 資料が公開されたらリンク貼ります。

2011年から開発されているはてなブックマークアプリのリファクタリングもといリノベーションの記録。

画面遷移をNavigatorとして表現しViewで画面遷移の実装を意識しない仕組みは、画面遷移をコードで表現できメンテナンス性も保たれてとても良さそう。積極的に取り入れたいと思った。

解剖 Kotlin ~バイトコードを読み解く~

speakerdeck.com

Kotlinプラグインを使えばKotlinコードをJavaデコンパイル可能。Kotlinのコードを理解するためにJavaデコンパイルしてどんなことをしているのか解読する。

null許容型は変数がnullになる領域の示している。nullの領域を狭めて非null領域を広くとることでnull安全なソフトウェアになる。

拡張関数を使って既存のクラスでもそのクラスが持っておいたほうが良い責務を後付で持たせることができる。

変更に強いEspressoテストコードを効率良く書こう

speakerdeck.com

Espresso Test RecorderはGUI操作で効率的にテストコードを記述できる。

ただし複数のテストパターンをGUI操作だけで作るのは非効率なので、元となるテストコードをGUI操作で生成しAndroid Studioリファクタリング機能を駆使して共通部分を抽出することで効率的に複数のテストパターンを作成できる。

共通部分が抽出されているので、UIの変更に対しても局所的な変更で済む可能性が高くなる。

実演でAndroid Studioリファクタリング機能を使ってコードを整理していく様子がとても素晴らしかった。テストコードを書く場合だけでなくプロダクトコードでも活かせそうなのでリファクタリング機能はしっかり習得したい。

Viewを動的に変化させるアプローチ

※ 資料が公開されたらリンク貼ります。

ユーザ操作にあわせてViewが動的に変化する処理を実現するために、スクロール量などを0.0~1.0などの値に正規化して他のviewではその正規化した値を元にalpha値やviewの大きさなどを変化させる。

その際にDataBindingを使いxml内に正規化された値を渡し、諸々の属性値にはその値を元に算出する処理を記述する。

DataBindingはviewにロジックが書けるのでドメイン知識が漏れてしまったり、可読性を損ねてしまうのではと心配しているが、このような使い方であればアリなのかなと思った。

Android Bikeを作ろう

https://speakerdeck.com/tnj/lets-make-android-bike

スマホホルダーが袋式で気圧センサーが外気圧を取得できなかったという話、センサー系を使う場合は環境の影響を受けやすいということを頭に置いておいた方がいいなと思った。

1日目が終わって

RxJavaやDataBindingに言及する講演が多かった。多すぎて少しお腹いっぱい…。やっぱりそれだけ流行っているんだろうなという印象。

講演時間が重なって参加できなかった講演もいくつかあるので、あとで資料読みたいー。