Infinito Nirone 7

白羽の矢を刺すスタイル

グリッド表示とリスト表示を組み合わせた構造の画面を作る場合の 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軽井沢 初日の日曜日は移動日で、車を借りて軽井沢まで行きました。シーズンとしては雪が降ってもおかしくないところを走るため、レンタカーもスタッドレスタイヤのオプシ…

劇場版 SHIROBAKO のエンディング

この記事は SHIROBAKO ADVENT CALENDAR 2020 10 日目の記事です。 とにかく劇場版 SHIROBAKO のエンディングが素敵なのだ。多分にネタバレを含むので、まだ劇場版を見ていない方はいますぐ U-NEXT にサインアップして見てほしい。何ならテレビ放送の分まで配…

自宅に STF (Smartphone Test Farm) を立てて検証端末を管理する

コロナ禍のなかで検証用の Android 端末をどう調達・管理するのかという話題を DroidKaigi.fm #4 でしてきました。その会話の中で、自分の場合は検証端末を全部自宅に持っていて、STF を使ってつないでいるという話をしたのでそのあたりを少し掘り下げてみよ…

kotest 4.3.0 で Robolectric Extension が安定版になった

以前に kotest を使ったテストに Robolectric をあわせるときの注意点を書きましたが、このときはまだ Experimental な状態だった Robolectric Extension が 4.3.0 から安定版となりました。 blog.keithyokoma.dev マイグレーション作業 安定版となったこと…

Navigation Component で Build Variant ごとに Deep Link を定義する

Build Variant ごとに Deep Link (App Links) の host を変えたいとき、Navigation Component の navigation graph の定義をどうするかを示します。 <deepLink> では String Resources が使えない navigation graph も XML で記述したリソースだと考えると、次のような</deeplink>…

Android アプリのモジュールで kotest を使いユニットテストを記述する

以前は Kotlintest と呼ばれたテストフレームワークが Kotest と名前を変えて開発が進められています。 github.com このテストフレームワークは非常に多様なテストの記述方法をサポートしており、テストケースのスタイルからアサーションメソッド、パラメト…

チームで育てる Android アプリ設計プロジェクト、始まります

Peaks さんで「チームで育てる Android アプリ設計」と題した執筆プロジェクトに @kgmyshinさんと取り組むことになりました。この記事はこのプロジェクトが発足するまでの経緯や、執筆する本に込めた思いを伝えられればと言うことで書いています。 チームと…

Podcast を Apple Podcast や Google Podcast に登録する

Podcast を配信するにあたって、Apple Podcast や Google Podcast に登録しておくと、iPhone や Android のアプリから気軽に Podcast を聴けるようになります。各プラットフォーム向けに配信の設定をしておくと、アプリで Podcast の未読管理や前回からの視…

在宅勤務で手元にない端末でのアプリのデバッグをするために準備しておくこと

コロナ禍で在宅勤務が一気に広まり、自宅でアプリの開発やリリースをすることが多くなりました。この状況のなかで、アプリの挙動に問題があるなどで動作確認をしようと思うとき、その問題に対処するためのデータを集めたり、問題が発生したときの状況を確認…

SnapCamera で使える、背景を合成するレンズ3分クッキング

SnapCamera で使えるエフェクト(レンズ)は Lens Studio - Lens Studio by Snap Inc. というツールで自作できます。 カメラの映像から人だけをくり抜いて背景をはめるレンズから、3D モデルを配置したり、簡単な物理演算を組み合わせて 3D モデルを動かした…

我が家のリモートワーク環境

昨今の情勢を受けてリモートワークが始まり1ヶ月ほど経ちました。 キャンプチェアとローテーブルでの作業環境 以前は自宅にもクルーズアンドアトラスを置いて会社と同じデスク環境を持っていましたが、引っ越しを期に手放してしまったために今はHelinox のキ…

持続的なアプリ開発のための DX を支える技術 #DroidKaigi 2020

この記事は、DroidKaigi 2020 で発表予定だったセッション「持続的なアプリ開発のための DX を支える技術」を解説するための記事です。 セッション概要 Android の歴史はすでに 10 年を超え、数多のアプリケーションがストアで公開されています。これらのア…

DroidKaigi 2020 のスタッフを支える(はずだった)技術 - 運営スタッフ向けアプリ

DroidKaigi 2020 を支えるはずだった技術シリーズの、DroidKaigi 当日にスタッフを支えるはずだった技術の話として、運営スタッフ向けアプリを作った話をします。 運営スタッフ向けアプリを作り始めたきっかけ DroidKaigi も過去 5 開催をしてきていて、2020…

DroidKaigi 2020 を支える(はずだった)技術シリーズ、はじめます

DroidKaigi 運営スタッフの @keithyokoma です。 記事タイトルにあるとおり、DroidKaigi 2020 を支える(はずだった)技術シリーズと題して DroidKaigi 運営スタッフによる一連のブログ投稿をはじめます。 企画の意図 DroidKaigi はこれまで、2015 年から数…

DroidKaigi 2020 撮影機材

カンファレンス撮影に関する詳しい話は @e10dokup さんが https://ameblo.jp/e10dokup/entry-12575646342.html でしてくれてるので、自分は DroidKaigi 2020 で使う予定だった撮影機材について、昨年からのアップデートを書いておこうと思います。 ボディ Ca…

RxJava で delay など時間に関するオペレータを使ったときのテスト

例えば、次のコードのような 5秒後に "foo" という String を emit する Observable をかえす関数があるとします。 fun observeFoo(): Observable<String> = Observable.just("foo").delay(5, TimeUnit.SECONDS) この関数をユニットテストすることを考えます。 RxJav</string>…

Kotlin 1.4 の開発版を試す

やっていますか? 昨年の KotlinConf 2019 で Kotlin 1.4 についてのアナウンスがあり、今春のリリースを目指して開発が進んでいるそうです。 Releases · JetBrains/kotlin · GitHub を見ると、すでに現時点でも 1.4 向けの変更にタグが打たれているので、1.…

kotlinx.serialization でオブジェクトをシリアライズする #potatotips 67

potatotips #67 で kotlinx.serialization を使ったオブジェクトのシリアライズの手順について話してきたのでまとめておきます。いくつか発表のときにはできなかった部分を掘り下げています。 イベントリンク potatotips #67 (iOS/Android開発Tips共有会) - …