Androidブログ枠でpotatotips#66に参加してきた

Androidブログ枠として参加

2019/11/11のポッキーの日にpotatotipsがあり、参加してきました!今回のpotatotipsの会場提供はyappliさんでした!ありがとうございました! Androidブログ枠として参加したので、ざっくりAndroidやクロスプラットフォーム関連の発表の振り返りを雑に行います。

potatotips.connpass.com

当日のpotatotipsのイベントページは↑です。

写真

f:id:shaunkawano:20191114105329p:plain

キレイなオフィス!

f:id:shaunkawano:20191114105320p:plain

ポテチもたくさん!

内容

以下は、内容を軽く振り返り感想や雑メモなどです。

プラットフォームにおけるビルド 〜ビルドの仕組みとその改善について by @lai2580

speakerdeck.com

プラットフォームにおけるビルドの話でした。今までは、アプリ1つ1つにたいして1プロジェクト作成し、それをエンジニア自らビルドマシンでビルドしていたところから、もともとサーバーサイドのほうで採用されていたCircle CIを導入してスピード改善を行ったとのことでした。CI等のツールの知見は、プラットフォームにおけるビルドとなるとなかなか世の中にもあまりなかったりするのかな、と、自分は今まで一般的なアプリ開発しか経験がないので、つらみのスケールも違いそうだなと感じました。

Android エンジニアが Flutterに入門して驚いたこと3点 by @numatch2552

speakerdeck.com

Androidエンジニア目線でのFlutter入門の話でした。Flutter Doctorで最初はめちゃ怒られるけど怖くない(1つつずつ解決していける)こと。Pluginが入れやすい、使いやすく、「Flutterはプラグインで進化する」とのこと。Platformの機能に依存していないものも多いらしいです。Firfebaseを連携する際にも、ドキュメント充実しているから心配ない、とのことです!(Flutterあんまりさわれていない👼)

Edge-to-edge with Insetter by @_rmakiyama

speakerdeck.com

Android Qにて新しいジェスチャーナビゲーションが導入され、より没入感あるUXを実装するために、画面いっぱいにUIを広げて配置するEdge-to-edgeの実装が推奨されました。実装方法としてInsetterというChris Banesさんのライブラリが紹介されていました。楽に実装できそうですね。スライドにもありますが、このライブラリは後々Android Jetpack内部に移行するかもという記載がGitHubにあります。

The contents of this library may eventually be moved into Android Jetpack at a later date.

github.com

Firebase A/B Testing Targeting Tips by @mukky620

speakerdeck.com

実務でFirebaseを使う上でのハマったポイントなどについての話でした。Targetingにおいて、アプリバージョンを指定する場合、Androidの場合はversionNameを、iOSの場合は、versionではなくbundleVersionを利用するとのこと。iOSの場合、versionを指定するとコンソール上では対象者が表示されるのですが、こちらは間違いでbundleVersionを指定すると正しくターゲティングできるとのことで、ドキュメントにそのように記載があるのでコンソールの表示に関して不具合が起きているのではないかということでした。他にもAudienceとUserPropetyの違いなどが紹介されています。

How to test Coroutines in ViewModel by @hkusu_

speakerdeck.com

ViewModel内で定義されているsuspend関数のテストを行う方法についてです。通常のUnit Testの記述方法だと、ViewModelの関数の実行が完了するまでテスト自体が待機できず、完了前にテストが終了してしまい失敗します。この問題を解決する手段として、関数の戻り値をJobにしてテストコードで利用する方法、ViewModel生成時にCoroutineScopeを渡すようにし、テスト時にCoroutineScopeを差し替える方法、そしてViewModel作成時にDispatcherを渡すようにし、テスト時にはTestCoroutineDispatcherを利用する方法が紹介されていました。

Kotlin Multiplatform Projectで社内APIクライアントをつくる by @fusuma0325

speakerdeck.com

Kotlin Mutliplatformを用いて社内APIを用いたクライアントアプリを作る(特にPlatform別の実装周りについての)話でした。expectでいわゆるinterfaceのようなものを定義し、各プラットフォームでexpectに対応するロジックなどをactualを用いて実装する。Kotlin側でsuspend functionを定義する場合、iOS(Swift)側で利用するframeworkが生成されないため、Swift用にDeferred型を返す関数を用意したがクライアント側の実装詳細を知りすぎるため最終的にはラッパーなどを用意したとのことでした。(Kotlin Multiplatformあんまりさわれていない👼)

In-app updates on Android - Overview & Fitfalls by @kurun_pan

speakerdeck.com

In-App Updatesの概要と隠れた罠についての話でした。In-App Updates APIは基本的にGoogle Play Storeとの通信用APIと考えて問題ないとのことです。com.google.android.play:coreパッケージにあるとのこと。Google Play StoreのUI上でアプリ更新が利用できるかどうかで、このAPIもアップデート可能かどうかを判定しているという話が個人的には面白かったです。ただ、更新検知アルゴリズムがブラックボックスでアプリのアップデートリリース反映タイミングと異なるという点はなるほど難しいと思いした。サンプルコードなども用意されています。

github.com

まとめ

久しぶりにpotatotips参加しました。とても楽しかったです!思ったより時間がかかってしまったので、次はブログ枠以外で参加しようと思います!