heihei blog

Blog icon by Unsplash https://unsplash.com/@virussinside

2019年12月を振り返る

大晦日

皆さんいかがお過ごしでしょうか。

カナダ旅行も残す所あと空港行きのバンを待つのみです。家に帰り着くまでが旅行。 時間があるので、12月を振り返ります。

振り返り

イチョウ並木を見た

f:id:shaunkawano:20191231171945p:plain

明治外苑にて。二年続けて見に来ています。きれいです。

餃子パーティーした

f:id:shaunkawano:20191231172003p:plain

↑Before

f:id:shaunkawano:20191231171954p:plain

↑After(Google Photosの加工が・・)

カナダ旅行にきた

詳細はこちらに。

shoheikawano.com

その他、アナと雪の女王2をカナダの映画館でみたりしました!!

あと数時間で2019年も終わりだ〜!もうすぐ、空港に向けて出発します。 飛行機を乗ってる間に年越しです。これも初めて。

まじで内容ないですが、以上!12月もお疲れさまでした!

オーロラを見るためにカナダに行った

実際は、まだ居ますが。。あと5時間くらい空港に向かうまで時間があるので、airbnbの宿泊先でのんびりしています。

背景

新婚旅行兼ねて。もう一カ国くらい、来年中に行けたら良いなと思っています。

カナダを選んだ理由

小学生の頃からオーロラが見たいと思っていて、「オーロラが見れる場所」に絞って決めました。 オーロラが見れる場所というと、他にもたとえばノルウェーなどもあるらしいのですが、英語が確実に通じる場所が良いと考えてカナダを選びました。

実際にオーロラがよく見れてツアーなどがある場所はYellowknife(イエローナイフ)です。

移動スケジュールざっくり

12/25-12/31(1/1日本着)のプランです。

  • 12/25の夜に成田を出発、12/25の朝にVancouver(バンクーバー)に到着
  • 12/27早朝にVancouverを出発、Edmontonを経由してお昼過ぎにYellowknifeに到着
  • 12/27の夜、12/28の夜、12/29の夜にオーロラ鑑賞
  • 12/30は丸一日Yellowknifeを観光
  • 12/31の早朝にYellowknifeを出発し、Vancouverを経由して日本時間1/1の夕方に成田に到着

宿泊先

Airbnbで合計3箇所をまわる形で宿泊しました。 Vancouverでは空港から電車で数駅ほどのMarine Driveという街の場所を選びました。立地がとてもよかったですし、何より広くてきれいでした。映画館なども徒歩1分くらいのところにあったり。

Yellowknifeでは、27, 28日は空港から車で10分くらいの場所に、29, 30日はOld Townと呼ばれる地域のほうの宿を予約していました。一軒目はとても大きなお家で、部屋もいくつかあって他にも宿泊しているグループが二組くらいいました。キッチンは完全共用で、シャワー・トイレなどは複数箇所ありました。

宿泊先などについては、個別にて詳細にお伝えできますので、もし気になる方はお気軽に連絡くださいー!

オーロラ見れた?

3日間行けば、90%以上の確率で一度は見れるらしいです。自分たちの場合は運良く三日夜すべて見れました!

最後にオーロラの写真をいくつか貼って終わりにします。

後ほど、カナダ旅行で持参したものなどを別記事で紹介するかもしれないです!(しないかもしれないです)

f:id:shaunkawano:20191231152825p:plain

f:id:shaunkawano:20191231152841p:plain

2019年11月を振り返る

今年も残りあとちょっと

師走になってしまいました。11月、ゆるりと振り返ります。

振り返り

tondemi 平和島店で運動してきた

bandainamco-am.co.jp

トランポリンやボルダリングなどができます。

久しぶりにがっつり運動して大変でしたが、スッキリとリフレッシュもできて、運動は偉大だと思いました。 ボルダリングは初めてでしたが楽しかったです!!またいきたい。

f:id:shaunkawano:20191201162023p:plain

Potatotips#66に参加してきた

Potatotips自体久しぶりでしたが、Androidブログ枠で参加してきました。弊社から先輩エンジニアの方が二名登壇されていて応援も含めて。むっきーさんこりんさんお疲れさまでした!🙏

当日の登壇内容のまとめブログは以下です。

shoheikawano.com

ふるさと納税で贅沢した

かにしゃぶした。正義。

f:id:shaunkawano:20191201161955p:plain

香川県でうどん食べまくってきた

金曜日にお休みいただき、早朝から出発し、土曜日の夜の便で帰ってきました。弾丸ではありましたがまるまる2日分満喫してきました。うどんは夫婦二人で11種類食べきりました(?) いろんなうどんに出会いました。残りは、うどんの写真で締めようと思います。11月もお疲れさまでした。2019年も残り一ヶ月。頑張っていきましょう。

f:id:shaunkawano:20191201161947p:plain

f:id:shaunkawano:20191201162005p:plain

f:id:shaunkawano:20191201162016p:plain

f:id:shaunkawano:20191201162030p:plain

f:id:shaunkawano:20191201162046p:plain

f:id:shaunkawano:20191201162053p:plain

f:id:shaunkawano:20191201162101p:plain

f:id:shaunkawano:20191201162107p:plain

f:id:shaunkawano:20191201162116p:plain

f:id:shaunkawano:20191201162127p:plain

最後はやどんのマンホールで。

f:id:shaunkawano:20191201162038p:plain

めちゃめちゃ食べたけど、夫婦ふたりとも体重は減ってました。体重謎すぎる。

2019年10月を振り返る

今年も残り12.1%

師走はすぐそこですね。。!

11月も半ばを過ぎてしまいましたが、あんまり気にせず、、10月をざーーーーーーっくり振り返ります。

振り返り

「天気の子」展に行った

銀座の松屋で行っているという新海誠さんのツイートを見て、暇だったので急遽行ってみることに。かなり久しぶりの銀座でした。

「天気の子」展自体はわりと人がいてさささーっと見てきました。一番盛り上がるシーンの映像とかが音楽付きで流れていたりして勝手に盛り上がりました。楽しかったですね。

f:id:shaunkawano:20191118002712p:plain

函館に行った

友人の結婚式&出張が重なり、ついでに観光も重ねようということで、お休みもいただき観光してきました。

友人のスピーチで特に感動して最高の結婚式だったし、ご飯とかも言わずもがな最高でした。また行きたい。ラッピはめちゃくちゃ行きました。もちろんおしゅしも食べました。

f:id:shaunkawano:20191118002638p:plain

実家に帰った

年末年始などシーズンを避けて帰ることもあるんですけど、今回は家族会議的なものがあり帰っていました。ちょっとでも手伝いができてよかったです。かっこいい兄にもしびれました。

f:id:shaunkawano:20191118003831p:plain

その他

久しぶりのことをしようということで、ボーリングやパズルとかやりました。

f:id:shaunkawano:20191118002701p:plain

f:id:shaunkawano:20191118002654p:plain

パズルは完成まで3日くらいかかりましたw雲の部分が特に難しかったですw

以上!すぐ11月の振り返りも書きますん。

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参加しました。とても楽しかったです!思ったより時間がかかってしまったので、次はブログ枠以外で参加しようと思います!

#AskAndroid at Android Dev Summit 2019 - Jetpack Composeの内容をざっくりメモした

全部の内容は記載できていないです。もし間違いなどがありましたらご指摘いただけたら嬉しいです。

動画は下記です:

www.youtube.com

Q. いつalphaかbetaになるか?

来年Betaになる

Q. RecyclerViewのようなRecycling Logicなどはあるか?(静的なViewのみの利用を想定しているか?)

静的なViewというよりは動的なViewのために用意している。現状のPreviewにはRecycling Logicはないが、いずれくる予定。

Q. アプリを作成する上で、XMLではなくJetpack Composeのみの利用も想定しているか?

  • 0からアプリを作る段階でJetpack Composeを利用できる
  • 既存のXMLをCompose関数内部で利用したりその逆の方法などについても紹介している
  • 既存のコードと互換性のある形にしたいと考えている

参考:

www.youtube.com

Q. Jetpack Composeのパフォーマンスについて?

  • 現在はExperimental Compilerに頼り切っている状態
  • 現在は、アプリがかくついたりすることもある(現在は小さなことにもallocationなどをしていたりしている)
  • 既存のサンプルアプリはいい感じになっているはず
  • 今後よくなっていくはず

Q. LiveDataやDatabindingを使うよりもより良い・きれいな選択肢か?

  • LiveDataにかんしてはComposeを利用できる
  • Databinding似関してはアプローチが違う
    • DatabindingはViewを用いる
    • Composeは自動で再構成される

Q. 今後のXMLなどの既存コードからの置き換えについて?

  • 今の開発者たちはandroid.widgetにたいして親しみがある
  • 既存とはまったく違うやり方のものがある
    • 既存のシステムと1-1で対にならないものもある
      • JavaからKotlinへの変換のように簡単にはならなそう
  • 既存のViewコードの置き換えは、見た目の観点と、ロジックの観点などにおいて混合している
    • 機械翻訳のようなことが必要。取り組むには面白そうではあるが、現時点では目標としていることではない

Q. 既存のView構造に取り入れることはできるか?たとえばWebViewをComposeで表示するなど

  • 既存のComposeのRepositoryではComposeのWrapper上でWebViewを表示するようなことをしている

Q. 現時点でComposeを学ぶために一番適している場所?

Android Studio Canary 4.0が必要

Q. LinearLayoutの代わりにConstraintLayoutを用いた動的なViewの構成をサポートするか?

  • ConstraintLayoutはまだ
    • 将来的にはサポート予定
  • LinearLayoutについてはRowとColumnがそれにあたる

Q. フィードバックを送信するには?

Slack group

Stackoverflow

https://stackoverflow.com/questions/tagged/android-jetpack-compose

Issue Tracker

https://issuetracker.google.com/issues?q=jetpack%20compose

Bug報告

https://issuetracker.google.com/issues/new?component=612128&template=1253476

フィードバックはほしい。フィードバックと共に開発をしていく

Q. 「UI構築するにはJetpack Composeのほうが良くなる」というのは正式な回答か?

  • 新しいUI構築のための手段
  • 新しいUI構築の手段として開発者に提案しているものの一つ

Q. 違うスクリーンサイズの対応はどのように行われる?

  • Jetpack Composeでは簡単に対応できるようになるはず
    • 簡潔なコードで対応可能
    • ツールが手助けしてくれる
      • プレビューで簡単に確認できる

Q. Navigation Componentは利用できるか?

※ここはわからなかったです。(多分Fragmentのサポートは難しそう?) - Navigation Componentで利用できるのはFragmentだけではない

Q. ComposeとApply Changesは関係あるか?

  • あまり関係ない
  • 開発者はスムーズに開発がしたい
    • ComposeにおいてはPreviewがある

Q. Composeを使う場合、Layoutはどこでどのように描画されているのか?またこれらの方法は変わるのか?

  • XMLレイアウトを互換性のある形で利用する場合
    • 既存とあまり変わらない
  • Composeのみを利用する場合
    • ランタイムに初期化
  • 完全に既存の描画方法とは別

Notes - An Opinionated Guide to Dependency Injection on Android (Android Dev Summit '19)

f:id:shaunkawano:20191026000524p:plain

※Notes記事では、英語のセッション動画やポッドキャストの内容を(雑に)英語でメモに書き残すことを行っています。本記事は、あくまで動画を見ながら、参考程度に読んでいただくことを想定しています。Notes記事には雑メモ程度のものだったり、書き起こしのようなものもあります。これから実際の動画を見る際には、本記事の内容が少しでもお役に立てば幸いです。(内容において不備、誤字脱字等ありましたら気軽にご連絡いただけると嬉しいです!m(__)m)

本記事は、An Opinionated Guide to Dependency Injection on Android (Android Dev Summit '19)の記事です。

Dependency Injection

Car needs engine to work = Engine is a dependency of car = Car depends on engine

  • With dependency injection, those dependencies are provided to a class instead of the class creating them itself.
  • You should always apply dependency injection principle to your app
    • sets fundamentals of testable and scalable app
    • Reusability of code
    • Good balance of loosely-coupled dependencies
    • Ease of refactoring

Dagger

Recommendation

  • Does not use reflection
  • Recommended tool
  • Dagger is used on Gmail, Google Photos, Youtube

Steep learning curve..

  • Started providing a common guidance, which is a set of documentation from the basics to the complex topics
  • Codelab for Dagger

dagger-android?

  • Google is stopping its development
  • Adding no more feature
  • Trying to reduce the amount of code you have to write

Better Dagger code with Kotlin

Dagger + Kotlin = ♡

  • No more JvmStatic
  • Qualifier Annotations
  • Kotlin wildcards

Future versions

  • Some more improvements are coming
    • e.g. for companion object

Simple DI Approach in Android

  • still under construction
  • how it will look like
    • Focus on binding declarations

Bindings

The time you spend working on DI should really go to what you keep working on to scale your app.

Injection

  • Not just using @Inject, you should do some more extra work, for example to set up app component
  • Add @EntryPoint for Android component class
    • Tells that you want this Android component to be a entry point into the graph
  • Support and provide easy hookups for lifecycle related components like ViewModel

Components

  • Predefined Components
    • SingletonComponent
    • ActivityComponent
    • ServiceComponent
    • FragmentComponent

Jetpack DI Initiative

  • Integrated with Dagger
  • Jetpack Extensions
    • Fragments
    • ViewModel
    • WorkManager

Takeaways

  • Use DI
  • Use Dagger
  • Check out the guidance
  • We're improving DI in Android, so stay tuned!

所感・まとめ・個人的に印象に残ったことなど

  • 共通ガイドを作った
    • 基礎的なところから複雑なトピックまで扱ってるからみてほしい
  • Kotlinとの相性をもっと良くしていきたい
    • 今後のリリースでCompanion Objectに関連したリリースなども行う予定?
  • dagger-androidの開発今はやめてる
    • もっとよくできると思っているから
  • セットアップコスト、学習コストを下げていきたい
    • ActivityなどのAndroidのEntryPointとなるFrameworkに対して@EntryPointを付与することで、そのクラスを起因にグラフを作る、つまり今までのonCreate内でのComponentクラスのセットアップまわりの処理などを自動でやってくれるような仕組みとか
    • 他のLifecycleに関するAACのクラスなどをより簡単にDIできるようにする仕組みとか
    • 独自に定義しなくてもある程度一般的なComponentを用意しておくとか

DIはいいぞ、Daggerもいいぞ、どんどん良くしていくからぜひ使ってくれよな!感が伝わりました

以上です!