こんにちは
こんにちは!Androidエンジニアの富田です。先日、Connehito Marché #1〜Android市〜という勉強会を開催しましたので、そのLT内容を簡単にですがレポートさせていただきます!今回は、「Androidに関することなら何でも発表してOKです!」というテーマで、みなさんの新鮮なネタ(ナレッジやノウハウ)をおすそ分けしていただきました!
LT内容
CDC Testingをためしてみた
katsutomuさんのおすそ分け!
CDC Testingとは、コンシューマドリブンコントラクトテストと呼ばれています。マイクロサービスのテスト手法の一つでサービス間の連携が壊れていないことをテストできます。ConsumerとProviderという登場人物がいて、ConsumerをAndroidクライアント、Providerをサーバサイドと表現してその実行サンプルのデモがありました。
- CDC Testingでは、Pactツールが有名
- Pactのモックサーバを利用できる
- API利用者はリクエストに対して期待するレスポンスをContractファイルに定義できる
- ContractファイルはJSON形式のファイルで、API提供者にContractファイルを共有できる
- クライアントの良い点は、実装と仕様が同期できてAPI設計仕様について主体感がある
- サーバサイドの良い点は、破壊的な変更を検知できる。さらにpact_brokerを使うネットワーク図も作成できる
- サービスが拡大する中で導入するのは難しいかもしれないので検証が必要
Android Developer Toolsのバグを見つけて直してもらった話
kikuchyさんのおすそ分け!
Android Lintのバグに遭遇。kotlin.collection.Map#forEach
が、java.util.Map#forEach
と勘違いされる影響でAndroid Lintに怒られるので、Google Issue Trackerデビューをしてバグを直してもらいました。
- AndroidのIssue Reportについてはこちらを参照
- 類似のバグ報告を真似すると楽にレポートを作れる
- Issueに対して星が多いと目に留まりやすく対応してもらえる可能性が高くなる!
- 問題を再現するために小さなプロジェクトをzip添付すると良い
- 2018/1/12にバグ修正された!
- SDKでバグを見つけたら、どんどん報告していきましょう!
Androidでスクレイピングした話
futaboooさんのおすそ分け!
本を読んだ後に記録したい!でも読書管理するためのWeb版読書メーターはあるけど、Androidアプリがない...自分でAndroidアプリを作ってGoogle Playストアに公開しました!
- なければ作ればいい!
- BookLifeを作りました!
- BookLifeのソースコードも公開されています!
- 利用したツールはPostman、 Charles、 Chrome DevTools
- ハマったところは突然の仕様変更!新しいセキュリティでリクエストにtokenが必要になって調査に一週間かかった
LiveData❤️ViewModel
tummyさんのおすそ分け!
AACのLiveDataとViewModelがめっちゃいいよ!LiveDataとViewModelの組み合わせについての紹介でした。
- YAPC::Okinawaにも「GraphQLをプロダクション導入した結果」というテーマで登壇します!
- LiveDataは監視することができるデータでActivity/Fragment生きているときにアクティブになる
- ViewModelはUIに関するデータを保持・管理できて空のFragmentを持っていそう
- LiveDataの
Observer#onChanged
の引数は、@Nullableから@NonNullになる予定 - AS3.1でDataBinding + LiveDataサポート!
Firebase Cloud Functionsを使ってみた話
jyeganさんのおすそ分け!
Firebase Cloud Functionsを使ってみたお話。Flamingo社ではエンジニアが二人しかおらず、Firebase Cloud Functionsの利用についての紹介でした。
- Firebaseとは、Googleが提供しているmBaaSで、モバイルアプリを使う時に便利なサービスが提供されている
- Firebase Cloud FunctionsはJavaScriptで書いてNode.jsで実行される。Firebaseの他のサービスのイベントをトリガーにできる
- バックエンドの処理が短時間で実装できる
- Firebaseのドキュメント充実している
- JavaScript/TypeScriptで雑に実装していた。エラーハンドリングが難しい
- Firebase Cloud Functionsはまだベータ版なので、大規模には難しいかも
OkHttp3とRetrofit2そしてコルーチンを組み合わせて非同期通信を実現するお話
Yoshihisaさんのおすそ分け!
APIを叩くAndroidアプリではOkHttp、Retrofit、ReactiveX(Rx)を使うとコールバック地獄に陥りやすい。Coroutineを用いてコールバックから脱したい...こんな感じで書きたい!
try { val info = api.getInfo() } catch (e: Exception) { Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show() }
- Coroutineは、中断・再開が可能な関数
- Coroutineは、現時点ではexperimentalだけど、1.3ではexperimentalが外れる予定
- gradleに
coroutines-core
、coroutines-android
を導入すれば、kotlin.coroutines=enable
は不要 - adapterはJake神の
retrofit2-kotlin-coroutines-experimental-adapter
を使うと良い - Coroutine時代に備えて今から勉強しておこう!
Kotlin Issueを投げてみよう!
富田のおすそ分け!
Android版ママリのPRレビューの指摘からKotlin改善のヒントをもらい、それを基に初めてKotlinのIssueを投げて受理されました。
- KotlinのIssue管理はYouTrackで行われている
- Androidアプリ開発でKotlinを触っていると、意外と改善Issueが見つかる
- 実際に投げたKotlin Issueはこちらです
- 分からないことがあれば、Kotlin SlackチャンネルやStack Overflowで質問することが一般的なようです
- Kotlin Issueを投げてみよう!
最後に
コネヒトで初の社外勉強会でしたが、LT(知ってる)枠、オーディエンス(知りたい)枠のご参加のみなさんや運営に協力してくださった方々のおかげで無事開催できました!ありがとうございました!!Connehito Marché はAndroidのテーマだけではなく、いろいろなテーマで継続的に開催していきますので、ご興味があれば立ち寄ってみてください!