こちらの続編です。
当日見れなかったセッションをアーカイブで見ています。
見て気になったところや所感をなぐり書きするメモになります。
自分の所感になりますので参考程度にお願いします。実際のアーカイブを見ることをおすすめします。
Kotlin 2.0が与えるAndroid開発の進化
Kotlin2.0でのアップデート内容に関するセッション。
K2モードはbuild.gradleなどがまだできていない部分があり、Android開発ではまだ待ったほうが良さそう。
文法的にはキャストやスコープ、enumなどに変更が入っている。enumはentriesを使うとパフォーマンス的に有利。
backingFieledはviewModelでMutableStateを非公開にしてimmutableなフィールドを公開していたが、このあたりの記述が簡単になる。
power assertは下準備が必要だが、テストに失敗したときのメッセージがいい感じになる。
またstrong skip modeの変更がわかりやすく解説されています。とりあえずやってみる用途には、今まで見たstrong skip modeの解説の中で一番わかりやすいと思いました。
宣言的UIを学ぶ際に知っておくべき重要なコンセプト
命令的UIはHow、宣言的UIはWhatで記述する、ということが肝ですね。
State、副作用、CompositionLocalを解説しつつ、Swift UIやReactではどうやるの?というのが語られています。例えばCompositionLocalは、SwiftではEnvironmentalValue、ReactではuseContext、というふうに。
宣言的UIに適合するアーキテキチャ、MVI、TCA、Flux/Reduxの話が出ます。
Reduxはボイラーコードが多すぎるという批判があるようです。
SWR(state-while-revalidate)は、ReactのUIのなかで簡単にサーバーを呼び出すことができます。
宣言的UIについて整理でき、Android以外の技術への興味も湧きました。
オフライン・ファーストなアプリの実例: ガーナの農家アプリ
ガーナではネットワーク回線が弱くオフラインでもアプリが利用できる環境が必要となります。読み書き対応していているとのことです。書き込みは遅延処理で実行するとのこと。
roomのようなDBを使って、ローカルデータを使うことでネットワークが利用できなくても読み込めるようにする。
developer guideに解説があるとおり、repositoryレイヤーが重要。useCaseでfetchが必要か判断している。fetchしたときはDBに反映する。
遅延書き込みでは、DBに一回書き込む。DraftとSycnedのモデルを用意しておいて、同期する。workManagerを使う。
オフラインファーストはデベロッパーガイドでも推奨されており、NIAでは違った実装方法で実装されていますね。
また画像のキャッシュを使う方法や位置情報の扱いも紹介されています。
いまあるAndroidスキルでフルスタックデベロッパーになる💙
KMPのコンセプトやFleetを使ってサンプルリポジトリを見ながらKMPの特徴を解説されています。
またKtor ServerによってKotlinでサーバーサイドのプログラミングが紹介されています。
HTMLやCSSをKotlinで記述するようです。./gradlew run
によってサーバーを簡単に立ち上げられそうです。
JupiterNotebookをKotlinで書いてデータ分析に活用するというのも紹介されています。
JupiterNotebookは対話的にコードを書いてデータからグラフなどを作れるようです。
Pythonが有名かと思うのですがKotlinでも書けるようになっているんですね。
IntelliJ UltimatedならJupiterNotebookをサポートしているようです。
仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう
Composeプレビューのスクリーンショットテストの設定方法が仕組みから詳しく知ることができます。
robolectric/roborazziは設定が詳しくできる一方、詳しくできるために何ができるかを知っておく必要があります。そのあたりとても詳しく説明されていました。
clockを制御してアニメーションのタイミングを制御したり、
robolectricのRuntimeEnvironment.setQualifier
で動的に環境を変更する方法まで紹介されています。
ComposePreviewScannerというShowCaseのようなPreview関数を集めるライブラリが紹介されますが、こちらを使うとShowCaseよりもPreviewのアクセスできるプロパティが増えるとのことです。
roborazziを使わない公式のスクショテストの紹介も少しあり、
こちらは設定が簡単な反面、できることが少ないです。
DeNA/android-modern-architecture-test-handsonにて、サンプルも公開されています。
アイデアからIDEへ: Android Studio用プラグインの開発
Android Studio Pluginの作り方を手順を追いながら説明。
必要な概念もまとまっています。
Android Studioでprojectを作る際、テンプレートが用意されているらしく、
動画を見ながらやれば簡単なものなら作れそうなので、やってみたくなりました。
特有の概念してActionやServiceがある。
またスレッドの扱いにも特徴があるので注意したい。
[招待講演] Android StudioのGeminiでコーディングの生産性を高める
現状Android Studioのstableでできることは限られています。
動画で使い方のデモがあったので、わかりやすかったです。
セキュリティ的にgeminiにむやみに全部コードを共有するのはNGですが、
共有したいcontextを設定で変更することができます。
exclude fileもせていできます。.gitignore
で除外したものは除外されるようです。
.gitignore
に入れなくても、syntax/grammar
に入れて除外できるとのこと。
Transformation code、コード補完、リネーム、テスト生成、App Quality Insightとの統合、コミットメッセージなどの機能が解説されています。
将来的な機能もいくつか紹介されていました。
promptは英語で入れていました。日本語にどれだけ対応できているかは不明です。
2024年最新版!Android開発で役立つ生成AI徹底比較
github copilotのplugin、geminiについて紹介されています。
geminiはジェミナイとジェミニどっちなのかと思っていましたが、
日本語向けにはジェミニと紹介されているんですね。英語ではジェミナイと言われているようです。
セキュリティに関する注意はよくされていますが、ライセンス侵害にも注意しようとのこと。自動生成されたものがライセンスで守られていることがあるとのこと。
前半に導入や設定方法で、後半は実践的な使いこなしについてでした。
- copilot chatを使った実装 -> 開いているファイルの情報を取得する。関連するファイルを開くとのこと。copilot chatは日本語で入れてよさそう。
- コードリーディング -> チャットにファイルを添付して、特定の動作をしている箇所を探すこともできる。コードの説明もざっくりしてくれる。こちらはgeminiやchag gptのほうが詳しかったとのこと。
- コードレビュー -> コードレビューするときは、あなたはKotlin上級者です、というようなプロンプトを入れるとよいらしい。
- ドキュメント作成 -> ドキュメント作成では、kDocを使うやり方が紹介されている。コード補完でたたき台が作れる。またcopilot chatやgeiminiにチャットに送れば、日本語を指定することもできて良い。
テストデータを生成するとき、うまくクラスが読み込まれない時があるので、テストデータを書くファイルに持ってきてコメントアウトして読み込ませるとうまく補完が働くとのこと(最近自分もやってました)。
あとスライドを見ながら触っていて気づいたんですが、github copilotの設定から、Show IDE comppletions side-by-side
を使えば、IDEの保管と同時に保管を表示できるようです。
IDEの保管使いたいときはcopilotが邪魔して表示されずcopilotを切ったりすることがあったのですが、これだとその必要がなくなりますね。
おもにコード補完しか使いこなせていませんでしたが、チャットの使いこなしがたくさんあったので参考になりました。
注意事項を守りながら、活用していこうと思います。
タッチイベントの仕組みを理解してジェスチャーを使いこなそう
タッチイベントの基本から、独自実装するときの注意点までわかりやすく解説されています。
標準APIは、Modifier.~ableとdetect~Gesturesに分かれます。前者はエフェクトやトークバックが使えて、高水準。独自のジェスチャーやジェスチャーの競合の問題があるときに独自の実装をしよう、とのことです。
そのうえで気をつけたい概念についてここでは挙げきれませんが詳しく解説されています。
イベントの伝播について。子から親へ順に伝わります。
子で消費したいときは、子でconsume()して、親でisConsumedで判断し、消費されていたら無視するなどやる。
実装上の気をつけることも挙げられていました。
- pointerInputのkeyはちゃんと考えよう
- 荒くタップするとドラッグになる。TouchSlopを考える
- 2本の指が触れていて、一方が離れると、centroid(重心)が一気に変わってしまう
このあたり自分で実装してみるとハマりそうなので、
また独自実装するときは振り返りたいです。