Droid Kaigi DAY.02 (Mar 10th, 2017) 参加レポート

### Droid Kaigi DAY.02 (Mar 10th, 2017) 参加レポート

* [1日目](http://qiita.com/yanap/items/6a85f201be9e66b30409)

受講したものを書いております。

- 10:40 - Room3 Android ORMの選び方
- 11:50 - Room1 How to implement material design animation
- 12:40 - Room3 Kotlin + RxJava + Dagger2 + Orma + Retrofit で作るAndroidアプリ
- 14:20 - Room5 Can You Read Your Tests? Clean and Useful Android Testing, with JUnit and Spock!
- 16:00 - Room3 エンジニアが武器にするMaterial Design
- 17:10 - Room1 テスト0から目指すクラッシュフリー率99%

#### 10:40 - Room3 Android ORMの選び方

http://gfx.hatenablog.com/entry/2017/03/10/141908

gfx
個人でORMを作っている
Ormaが自身の欲しい機能を全部実装できた
SQLiteオープンヘルパーをそのまま使う
よりORMを使った方が品質の良いアプリを作れる
コードを書くのが好き
https://github.com/gfx
https://github.com/gfx/Android-Orma
Kibela
https://kibe.la/
コンフルエンスとかをやっつけたい
ローカルDBとのやりとりの方がWebAPIとの通信より　数千倍早い
cache
offline-first development
ユーザーの行動ログをローカルに一旦保存しておき、サーバに送信成功したら消す
SharedPreferences
SQLiteをwrapper
realm
SQL-92 メリットもあるしデメリットもある
object relation mapper
SQLiteは表(エクセルみたいな感じ)で入ってる
表 ⇄　Javaオブジェクト を シリアライズ、デシリアライズしている

```
todos.equal(Todo_Meta.title, title)
keyがJavaのフィールドであることで、typoを防止する

todos.titleEq(title)
もっと良い
補完される
ドキュメントを読まなくても使えるというのがORMとして１番いい
```

Association
  Rails

Pub-Sub
  スターとかいいねとかの状態を管理する

Migration
  実際に開発する際には、ALTER TABLE文書かないといけないのか、ある程度自動でやってくれるのか見た方が良い

##### ActiveAndroid

もっと有名なORM
使うのが非常に簡単
デメリットはメンテナンスされていない
ベースライン
リフレクションベースで実装しているので、ソースコードが大変なことになっている
モデルの定義は 常にモデルっていうクラスを継承しないといけない
設計ミスしている
CookPadではActiveAndroidを書き直した
暗黙的に定義すると人は気づかない
データベースハンドルはない
staticおじさんが設計したもの
railsのactive recordもこんな感じ
.saveするだけで良い
Query Builder
whereに直でSQLを書いてるので、SQLを意識しないといけない
Association非常にシンプル
Has-Many Associationは使い物にならない　リストを返す
Pub-Sub コンテントプロバイダーを通じて
Migration はひどい 開発中　カラムをたすたびに なんかアプリが落ちて、アプリアンインストールして使うみたいな感じになる
OSSとしては寿命

##### greenDAO v3.2.0

3.0.0からだいぶ変わりました。
ModelにAnnotationをつけると関連する
かなり速いらしい
Model Definition
Model 自分のコードとGreenDAOが生成するコードが混在するので、ガイドラインを作らないと混乱する
Usage DBハンドル　関連クラスがあってよくわからん
eq where文のSQLは結構進んでる
Association 保存する順番は自分でコントロールしないといけない
pub-sub, migration サポートしてない
作者がobjectboxっていうのを作ってる

##### Requery

アノテーションプロセッサーベース　結構モダン
スカイプのエンジニア
モデル定義　代わり映えする　アブストラクトクラスを作るかインターフェースを定義するか
デフォルトで全てのものがカラムになる
DBハンドルは明示的に作る
EntityDataStoreは割と合理的
RXJava, RXjava2をサポートしている
Pub-Sub
Migration スキーマのバージョンをあげるとALTER TBALEを発行してくれる
          開発中にスキーマバージョンあげるというと
他のDBもサポートしてるけど、そこが欠点

##### Realm

Realmオブジェクトを継承しないといけない
DBハンドルをとってきて操作する
ネストが深くなる
Query Builder　type safeではない
Association, Pub-Subがサポート
Realm Mobile Platform
Migrationは結構辛い
ジェネレートテッドクラスを直接触らなくて良い、でもtype safeじゃない

#### Orma

ベースクラスを必要としない
何も要求しない
使い方 DBハンドルを作って、普通に使う
Todo_Relation
Query Builderはtype safe
インデックスを貼らないと検索できないようにしている
遅い操作ができないようにしている
Association いい感じに保存してくれる
Pub-Sub RXJava2
Migration　スキーマdiffマイグレーション
           diffとってALTER TABLEを発行している
           Gitと同じことをやればいいんじゃないだろうか
           renameは難しい
sqlite_master
sqlite3 foo.db
versioning hash sha256

#### 11:50 - Room1 How to implement material design animation

* [How to implement material design animation スライド](https://speakerdeck.com/takahirom/how-to-implement-material-design-animation)
* [アニメーションアイコンが作れるAndroid Icon Animatorを触ってみる](http://qiita.com/takahirom/items/3deee8b73e0a2bc1a50b)
* https://github.com/nickbutcher/AnimatorDurationTile

#### 12:40 - Room3 Kotlin + RxJava + Dagger2 + Orma + Retrofit で作るAndroidアプリ
@lvla0805

* https://github.com/lvla/DroidKaigi2017Contributors
* [Room3 Kotlin + RxJava + Dagger2 + Orma + Retrofit で作るAndroidアプリ スライド](https://speakerdeck.com/lvla/kotlin-plus-rxjava2-plus-dagger2-plus-orma-plus-retrofit2-dezuo-ruandroidapuri)
* [Dagger2入門解説](http://qiita.com/lVlA/items/26cb093adbc778013467)
* [逆引きよく使うRxJava1.x オペレータ](http://qiita.com/lVlA/items/6d206ee3fb4715116be4)
* [ユースケースで入門するAndroid RxJava1](http://qiita.com/lVlA/items/22ec9c1361a7772e34ef)

#### 14:20 - Room5 Can You Read Your Tests? Clean and Useful Android Testing, with JUnit and Spock!



#### 15:10 - Room2 2つのアプリ、1つの設計のデザイン指針

デザインデータを１つ作ると
１つのソースで
複数の国、複数のアプリに展開できる

国ごとに課金の方法が変わる
UXデザイナーの人がやることとしては

詰まった時にどうするか？
通信が失敗したらどうするか？

エンジニアリングとデザインのバランスが重要

#### 16:00 - Room3 エンジニアが武器にするMaterial Design

* [エンジニアが武器にするMaterial Design
 スライド](https://speakerdeck.com/seto_hi/enziniagawu-qi-nisurumaterial-design)

デザイナーはアイコンを作るだけ
新卒のデザイナーを教える
エンジニアもデザインの勉強するぞい！
マテリアルデザインは論理的に作られているので、エンジニアが勉強するのがおすすめです。
社内勉強会をやる！

マテリアルデザインは人間工学など色々なことが考慮されている
人間は待つことにストレスを感じる。
ユーザーを１秒以上待たせてはいけない。

UI観点では意見を出し、色彩に関することはデザイナーに任せる

* [RAIL モデルでパフォーマンスを計測する
](https://developers.google.com/web/fundamentals/performance/rail)

#### 17:10 - Room1 テスト0から目指すクラッシュフリー率99%

*[テスト0から目指すクラッシュフリー率99% スライド](https://speakerdeck.com/srym/journey-to-99-percent-crash-free)

* [
Firebase Crash Reporting](https://firebase.google.com/docs/crash/?hl=ja)

* [Timber](https://github.com/JakeWharton/timber)
ログDの変わりに使える

* https://github.com/trello/RxLifecycle

* https://github.com/srym/vulture

レガシーな職場でもVultureは使える
３万ユーザーくらいのアプリに対して使用実績がある