Infinito Nirone 7

白羽の矢を刺すスタイル

サウナにハマるきっかけになった温泉:箱根湯寮

この記事は「サウナAdvent Calendar 2023」の12日目の記事です。 adventar.org 箱根湯寮 箱根湯寮とは箱根湯本にある温泉です。 www.hakoneyuryo.jp 箱根湯本駅からも割りと近いのですが、激坂を登った先にあるため駅からシャトルバスで行くことをおすすめし…

Jetpack Compose TextField の横幅を n 文字分だけ確保したい

View の仕組みでは、 TextView のプロパティとして ems が定義してあり、これを利用するとTextView の横幅を ems で指定した文字数分の横幅にしてくれます。 R.attr | Android Developers Jetpack Compose では Text や TextField にそのものズバリな引数や …

近況2023

この記事は「mhidakaが2つ目を建立したAdvent Calendar 2023」の10日目の記事です。近況を報告せよとのことだったので、なんとなく今年のハイライト的な記事を書いておきます。 adventar.org 今年たのしかったこと 桜のAACR AACRとは長野県の安曇野市周辺で…

WorkManager Migration to 2.9.0

AndroidX WorkManager の 2.9.0 がリリースされました。以前のバージョンからこのバージョンに上げるにはマイグレーションが必要です。 https://developer.android.com/jetpack/androidx/releases/work?hl=en#2.9.0 Configuration.Provider の実装 2.8.x 以…

DEEDS BREWING #BeerAdventCalendar2022

この記事は Beer Advent Calendar 2022 - Adventar の 9 日目の記事です。 これがうめぇんだ! DEEDS XPA しっかりとした苦味がありつつ、後味スッキリですいすい飲めます。 最高です。 DEEDS DOUBLE TIME さっきの XPA の苦味と後味にくわえ、HAZY PALE ら…

DEEDS BREWING #BeerAdventCalendar2022

この記事は Beer Advent Calendar 2022 - Adventar の 9 日目の記事です。 これがうめぇんだ! DEEDS XPA しっかりとした苦味がありつつ、後味スッキリですいすい飲めます。 最高です。 DEEDS DOUBLE TIME さっきの XPA の苦味と後味にくわえ、HAZY PALE ら…

多くのパラメータを持つ関数・コンストラクタの呼び出しに必要な引数を名前付きで自動生成したい

やりたいこと 次のように定義されたコンストラクタを名前付き引数を使って呼び出したい。 // 定義 data class Sample( val hoge: String, val fuga: String, val moga: String, val piyo: String, val foo: String, val bar: String, val baz: String, val q…

つけ麺 えん寺 #つけ麺AdventCalendar2022

この記事は つけ麺 Advent Calendar 2022 - Adventar の4日目の記事です つけ麺 えん寺 ベジポタつけ麺肉増し味たま付き これがうめぇんだ! 説明 ベジポタつけ麺をやっているお店です。 吉祥寺・中野・池袋・東高円寺に「えん寺」がある他、野方に「花みず…

BottomSheetScaffold の sheetContent を空にしてはいけない

BottomSheetScaffold を使って BottomSheet を作るとき、BottomSheet の中身は BottomSheetScaffold の引数にある sheetContent で作っていきます。 developer.android.com BottomSheetScaffold( sheetContent = { /* BottomSheet の中身 */ } ) { paddingVa…

Jetpack Compose 1.2.0 では Scaffold の content に PaddingValues を必ず設定する

Jetpack Compose 1.2.0 (正確には Jetpack Compose 1.2.0-alpha07 以後) から Scaffold の content で Scaffold から渡される PaddingValues を使わないと Lint エラーとなります。 developer.android.com Lint で指摘される例 次の例は Lint のエラーとなり…

DroidKaigi: Weekend Chat の配信を支える構成

Mac を利用した Discord と OBS による YouTube Live 配信環境 DroidKaigi: Weekend Chat は Mac 上で Discord をつないで @mhidaka さんと話しているのを OBS に流して YouTube Live 配信にのせています。 Loopback Windows であれば音声キャプチャはそれほ…

CircleCI で Android アプリプロジェクトのビルドに利用する Docker Image が変わったので更新する

次のような記述で Android 用の Docker Image を利用すると、ジョブのステータスを表示する画面で You’re using a deprecated Docker convenience image. Upgrade to a next-gen Docker convenience image. といったメッセージが表示されます。 executors: a…

Jetpack Compose で GridLayout を実現する

Jetpack Compose には LazyVerticalGrid というグリッド表示をしてくれる Composable がありますが、LazyColumn など他のスクロール可能な Composable にネストしてグリッド表示を作りたい場合は LazyVerticalGrid は利用できません(スクロール可能な Compo…

age++

おかしい。ついこの間 0x20 歳になったばかりだと思っていたのに、もう年齢がインクリメントされてしまった。 コロナはまだまだ収束しそうにないし、それどころか戦争が始まるし、あちこちてんやわんやのドッタンバッタン大騒ぎ感がありますが、私は元気です…

Bundle の大きさを知りたい

前回の Navigation Component の振る舞いに関する記事 に関連して、Activity#onSaveInstanceState などで最終的に Bundle がどの程度の大きさになっているのかを知りたくなったのでいろいろ試してみました。 blog.keithyokoma.dev 結論、次の Stack Overflow…

BottomNavigationView と Jetpack Navigation の組み合わせでバックスタック管理の挙動が変わり TransactionTooLargeException になるパターン

Jetpack Navigation 2.4.x から、multiple backstack がサポートされ、BottomNavigationView と組み合わせて下タブのタブごとにバックスタックを分けて管理できるようになりました。 例えば、A/B/C の 3 つのタブがあったとき、A タブでの画面遷移と B タブ…

AAC ViewModel と StateFlow を組み合わせたときのユニットテスト

前回の続きで、Kotlin Coroutines の StateFlow を利用した AAC ViewModel のテストをする場合の Kotlin Coroutines 1.6.0 の記述について。 blog.keithyokoma.dev StateFlow をつかった AAC ViewModel 次のような AAC ViewModel を継承した SomeViewModel …

グリッド表示とリスト表示を組み合わせた構造の画面を作る場合の Groupie と JetpackCompose の対比

様々な要素を組み合わせた一覧画面の構成 次の図のように、グリッドやリストを組み合わせた画面を作ることを考えます。 画面構成 RecyclerView を使う場合、Groupie を使うとかなり楽にこの画面構成を実現可能です。 Jetpack Compose を使う場合、1.1.0-beta…

RxJava と Kotlin Coroutines のテストチートシート

忘れそうになるのでメモ。テストは Kotest をつかっているが、極力 JUnit でのテストの記述と対比しやすいよう StringSpec で書いていく。 最近 RxJava から Kotlin Coroutines への乗り換えを進めていて、テストの書き方がどう異なるか(あるいは同様となる…

2021 振り返り

去年の年末の振り返りも発掘したので、同じような感じで振り返ってみます。 チームで育てる Android アプリ設計の出版 2020年振り返りでは、技術者視点でDXを上げていく活動 として前職での活動やアウトプットを軽く振り返っていました。その結実として今年…

Dagger Hilt と WorkManager を組み合わせて使う

Dagger Hilt は Android 用に様々な場面で使いやすいようになっていて、WorkManager を使った場合にも Dagger Hilt で DI が実現できるようになっています。 依存関係 Dagger Hilt と WorkManager を依存関係に追加します。2021/12 時点で Dagger Hilt の KS…

Target SDK Version を 31 に上げるときに引っかかるポイント: SparseArray

Kotlin を使用したアプリケーションという前提で、次のような構成のアプリがあり、このアプリの Target SDK Version および Compile SDK Version を 31 (Android 12) に上げることを考えます。 Target SDK Version を上げる前の構成: build.gradle android {…

BottomNavigationView で setupWithNavController と setOnNavigationItemSelectedListener を同時に使いたい

Android Jetpack の Navigation Component と BottomNavigationView を組み合わせる場合、setupWithNavController 拡張関数を呼びだすだけで nav graph と BottomNavigationView の menu を紐付けてくれるようになります。 val navView: BottomNavigationVie…

Hilt 1.0.0 へのマイグレーション

Google I/O 2021 で Hilt がついに安定版に到達し、1.0.0 がリリースとなったことが告知されました。 この記事を執筆時点で Dagger Hilt および AndroidX Hilt の最新版は次のとおりです。 Dagger Hilt: 2.36 AndroidX Hilt: 1.0.0 それぞれにコンポーネント…

Deprecated アノテーションが deprecated になってしまったのを undeprecated した流れ

Android 12 の preview 段階で @Deprecated アノテーションが deprecated になったのがちょっと話題になりましたが、Android 12 Beta 1 では deprecated になったのを undeprecated にしたことが What's new in Android で語られました。 youtu.be @Deprecat…

チームで育てるAndroidアプリ設計の一般販売が始まりました。

告知記事です。 Peaks のクラウドファンディングで執筆し先日電子版を先行リリースした「チームで育てるAndroidアプリ設計」の一般販売が始まりました。 これまではクラウドファンディングで出資いただいた方にのみ電子版・書籍の配送手続きをしていましたが…

val age = 0x20

やったね僕も二十歳(16進数)になりました! 去年の自分はなにか目標でも立ててたのかと思って振り返ったら何もありませんでした。代わりに DroidKaigi がコロナ禍の始まりとかちあって中止となったことで、それまでのいろいろな準備をせめて何らかの形でア…

ViewBinding を用いた View の操作をユニットテストする

ViewBinding を使うと View のアクセスを簡略化 & @NonNull を標準として堅牢にロジックを作れるようになります。 ここでこの ViewBinding を用いて次のような View の操作をメソッドとして定義したクラスを作ったとして、そのクラスにあるメソッドをユニッ…

2020振り返り

なんやかんややってたら2020年も終わってしまうので振り返っておきます。来年になにか活かせるかどうかは分からない。 技術者視点で DX (Developer Experience) を上げていく活動 ここの DX はデジタルトランスフォーメーションではなく、デベロッパーエクス…

軽井沢ワーケーションをしてきた

12/13~12/16にかけて星野リゾート BEB5軽井沢でワーケーションをしてきました。 BEB5軽井沢 初日の日曜日は移動日で、車を借りて軽井沢まで行きました。シーズンとしては雪が降ってもおかしくないところを走るため、レンタカーもスタッドレスタイヤのオプシ…