LoginSignup
18
20

[WIP]Google I/O 2024で驚いたところメモ

Last updated at Posted at 2024-05-23

特に驚いたところを赤く表示しています。(ちょっと風邪引いてまとめるのがいつもより遅くなっています。 :pray: )

Keynote

(いつも通り夜ふかししながら書いているのでクオリティ低めです。)

  • Gemini
    AI Overview

Photos
ナンバープレートの番号を聞ける。

Geminiはcontextが長いのがいいらしい。
コードのコメントについてGeminiが返してくれるなどの開発者の話など。

1.5 Pro

1Mコンテキストで 35言語で使えるように。

2Mトークン。 private previewが始まった。

NotebookLM

pdfとかドキュメントとかを入れられる。

靴の写真を撮ってそれで、購入したメールを探したりできる

AlphaFold 3

1.5 Flash

速いっぽい?

Project Astra

universal AI Agent
会話可能な速さに。

動画を撮りながらそれを解説させたりするデモがあった。

新しいフォームファクターの話が一瞬写った?Vision Proみたいな視点の動画が流れた

Imagin3

画像生成。
文章を理解する能力が高い。
文字のレンダリングもうまくできる。
labs.google.com

AI Music sandbox

YouTubeと AI Music sandboxというのを作った。

Veo

動画生成。

生成された動画の時間をexpand(延長)できる

クリエイターとのコラボで試しているデモ。

path to AGIという発言。

TPU

AIの電気消費が深刻
trilliumを作った
Axion ProsessorというCPUも作っている。

NVIDIA BlackwallというGPUも利用可能に。

検索

Google検索がたくさんGoogle検索して、AI Overviewを提供している。

検索で、プランニングしてくれる。3日のご飯っていれると3日間のご飯を提案してくれる。

AI organized search result page。色々検索でページだけでなくマップとか出す。

動画で検索できるように。
現実で起きていることのトラブルシューティングなどができる。動画で、これ回らないみたいなんだけど。。みたいな感じで質問できる。

GeminiのSide panel

来月利用可能に
Google Meetなどで利用可能っぽい?

今月に以下が利用可能に
ボタンがでてきて、Gmailの引用で長いスレッドを要約できる。
GeminiによるGmailのreplyの自動生成。

Gmailからスプレッドシートででexpenceのサマリとかを作れる。

AI teammate

roleとobjectiveをもったteammateを作れる。(やばそう)

サマリ作ってくれたりする。メモリも持ってくれる。
いろいろなものに即レスしてくれたりするかもしれない。

Gemini Live

AstraをGemini Appに 今年。

Gems

GPTsっぽいやつ?
今年

Gemini Advanced

動画とpdfとかをたくさん載せてもContext Lengthが長いので処理できたりする。

AdvancedもContext Lengthが2Mに。

35+ language

Android

AI at the core

  • 囲って検索
  • AIアシスタント

囲って検索が数学とかもできるうように、年末までに

Android experience

GeminiをContext Aware。

YouTubeで見ているものに関してGeminiで質問できたりできる。
AndroidアプリのGoogle DriveでみているpdfをGeminiに渡せたり。なにかアプリから渡せるAPIできるのかな?

Gemini NanoがMulti modalに。
Talkbackが画像を解説してくれたりとか。

オンデバイスモデルで電話で詐欺っぽいのがかかってきたときに詐欺だよって出したりできる。

Developer news

GeminiのAPIで以下が利用可能。
Video frame extraction。
Parallel function calling。
Content caching。

Gemini 1.5 Pro complexタスクに使う
Gemini 1.5 Flash 速いコスパが良い

両方今日使える。

Gemma

OSSのModel。自由に使える。

RecurrentGemma
CodeGemma

画像を読み込めるPaliGemmaができた。

Gemma2ができる 27B

SynthID

AIが作ったものを分かるように。
Open sourceに。

LearnLM

GeminiをLearning向けにファインチューンしたもの。
Gemsの一つ。Learning coach。
Videoで質問したりできる。
selected userでYouTubeで問題作ったりとか質問したりできるように

Developer Keynote

世界中の開発者がAIを使えるようにするというミッションでやっている。
Android Studioなど色んなところで使える

image.png

Context Caching

今月使えるようになる。

どう動くのか?
Context Windowはいいけど、計算量がかかる。
例えばプロンプトの大部分が変わらない場合、それをキャッシュし、次のときに軽く取得できる。例えば記者が次の記事を書きたいときにこれまで書いた記事を集めたいとしたときに、最初に20centかかったとする。次のときのpromptでは10centで良くなる。これは法的文書化、研究文書などたくさんの用途がある。

Gemini API Competition

Gemini API Competitionが行われる。あのBack to the futureのelectric classic DeLoreanがもらえるらしい。

Android

Excellent experiencesとAI at the coreをかかげているっぽい。

Gemini nanoの話。ローカルで動く。またアプリにモデルを組み込む必要がない。

MediaPipe

Gemini nanoではなくカスタムモデルを使う場合はこちらを使う。

Developer Productivity

噂に聞いていた、Kotlinの発表
First class tooling and library support for Kotlin multi-platform on Android
Google DocsアプリはKotlin Multiplatformにマイグレートして、Android, iOS, Webでロジックを共有している。
Workspaceチームは他のGmail, Calender, Driveなどで投資を続ける。
https://youtu.be/ddcZnW1HKUY?t=1062

Composeでの最初のピクセルが描画されるまでの時間の改善。
ComposeでのSharedElementTransitionのサポート

Material Guidanceを使ったアプリを作りやすくなるComponentを用意

ListDetailPaneScaffold
SupportingPaneScaffold
NavigationSuiteScaffold

image.png
https://youtu.be/ddcZnW1HKUY?t=1232 より

ComposeでのStylusやMouse、Keyboardのサポートが増えて、Handwriting recognitionにより、文字の認識により手書きの文字をテキストにすることができる。
image.png
https://youtu.be/ddcZnW1HKUY?t=1254

Firebase device streamingにSamsungなどを追加に。

Compose UI Check mode
adaptiveなレイアウトになっていない問題やaccessibilityの問題を見つけてくれる。
image.png
https://youtu.be/ddcZnW1HKUY?t=1317

SoundClouldの話、Composeでモバイルのスキルが使えるので、どのフォームファクターでもComposeが使えるのが良い的な。

Android Studio

Geminiでクラッシュを解析して、解決策をしてくれる。

AIに何を共有するかを渡せるようになった。
https://youtu.be/ddcZnW1HKUY?t=1533

Android StudioのGeminiがリファクタリングができるように。右クリックでGemini -> transform "simplify and make idiomatic"で

image.png

こういうDiffを出してくれる
image.png

https://youtu.be/ddcZnW1HKUY?t=1594 より

この画面でさらにドキュメントを追加してもらうこととかもできる。
image.png

デザイナーから渡された画像を使って画面を自動生成して作るデモ
Gemini Pro 1.5になって、Context Sizeも増えることで、画像をGeminiに渡せるように。

結構いい感じ。

デザイナーから渡された画像:
image.png

出来上がったもの:
image.png

https://youtu.be/ddcZnW1HKUY?t=1835 より

Web

OnDevice AIがWebGPUとWASMで可能になる。

BilliBilliがWASMをつまってテキストをスピーカーの後ろに移動させたところ、かなりの数値の改善が見られた。
https://youtu.be/ddcZnW1HKUY?t=2001

Chrome 126以降 Gemini NanoがChromeのデスクトップクライアントに組み込まれるようになる。

"Help me write"という機能が追加になり、短い文章を生成してくれるようになった。

Cross platform

Project IDXが Public betaに。
WebでできるIDEみたいな感じ。

Flutter

WASM対応でJSのパフォーマンスが2倍になった話。

Firebase

新しいアイコンに
Firebase Data Connect with Google Cloud SQLのpreviewを公開。安全でタイプセーフなアプリをFirebaseで作成できる。コードを書く量を減らせるように設計されている。
Data connectはAIの開発のために構築されている。vectorやfunction callingなどが使える。

Firebase App Hosting
GitHubからソースコードを取り出し、ビルドして、Google Cloudにデプロイするので速い。
Firebase Genkit
アプリ開発者向けのAI統合フレームワーク。 Genkitの引数を変えると簡単に、AIのモデルを変えられる。

AI Models

OpenSourceのAI Model

CodeGemma
先月リリース
コード用

RecurrentGemma
先月リリース
ニューラルネットワークとローカルアテンションを使って、メモリ効率を向上させ推論を高速化するもの。

PaliGemma
マルチモーダル対応

Gemma2
new architectureだそう。

Google AI Edge
Generative modelを含むすべてのいいモデルへのアクセスを提供して、edgeでツールを走らせられるようにする。
TensorFlow liteが拡張されPytorchのモデルが動かせるようになった。

デバイス上でRAGを走らせることができる。
RAGの例として、家族が好きなものをメモとして書いて、それを利用して、モデルへのプロンプトを拡張して、もっと良い回答を得られるようにしたい場合MediaPipeでできる。

image.png
https://youtu.be/ddcZnW1HKUY?t=3496 より

What's new in Android

AI

Gemini nanoの話(端末上で動くGemini)
AICoreによってAndroid 14+に統合されていて、Google AI Edge SDKによってAPIが提供されているらしい。(ちょっと難しいけど、Google AI Edge SDKを使うと、端末のAICoreにアクセスできるということっぽい)

image.png
https://youtu.be/_yWxUp86TGg?t=88 より

Gemini nanoは現状Pixel 8 ProとGalaxy S24で利用可能。
(Galaxy S24はメモリ8GBなので自分はメモリがハードウェア要件なのではと他のブログなどを見て勘ぐっていたのだけど違うみたいだった)

現状のユースケースは、
メッセージで、シェイクスピア風の文章を作ったり(いる?)、レコーダーでいろんなAIを組み合わせる一つとして使ったり、
Adobe Acrobatで要約したりして使っている。

Android on-device gen AI under the hoodの紹介
今年の後の方でnanoがマルチモーダル可能になってもっと良くなる。nanoのアーキテクチャについて知りたい人は見てみて。

Prototyping SDKsというくくりで以下の2つが話されていた
Google AI client SDKを使ってアプリに組み込める。
Vertex AI for Firebase SDK

Material3 adaptive librariesの話
adaptive
adaptive-layout
adaptive-navigationが利用可能に。
例えばadaptive-navigationを使うと勝手にボトムバーが、ナビゲーションレールになる

上でも紹介があったが、以下が追加された

ListDetailPaneScaffold
SupportingPaneScaffold
NavigationSuiteScaffold

スクリーンでなくペイントして考えることが大事で、そうすることで、ユーザーがパネルのサイズを調整できるようにできる。この機能はMaterial3 Adaptiveに追加される。
image.png

https://youtu.be/_yWxUp86TGg?t=483 より

このあたりは Building UI with the Material 3 adaptive library のセッションと Building adaptive Android apps のセッションを見ると良いそう。

Target SDK 35(Android 15)にするときにedge to edgeがデフォルトになるという話。 enableEdgeToEdge()を呼んでおくと、バックポートしてくれたり、3ボタンのBottom Navigationなどもうまく管理できるようにできる。

Android 15ではシンプルなデフォルトを提供する。 ステータスバー、ナビゲーションバーがデフォルトで透明化される。
image.png
https://youtu.be/_yWxUp86TGg?t=565 より

Material3のTopAppBarやNavigationBarを使うと自動でハンドリングできる。

Android 15では開発者オプションのpredictive backのオプションが消され、有効にしているアプリではユーザーに表示されるようになる。

ウィジェットの話

ウィジェットの追加前にプレビューを表示できるようになった。
アプリからウィジェットを追加するように求めることができる。
Glance1.1でUnit Testのサポートなどが入っている。

Canonical widget layoutがリリース。ベストプラクティスに則ったWidgetのレイアウトが利用できて迅速に使い始められる。

Build Android Widgets with Jetpack Glanceで詳細が聞ける。

Media and camera

Android 15のカメラで画像を明るくできるLow light boost

CameraX 1.4 betaのUltraHDRなど

camera-viewfinder-composeでComposeでViewFinderを利用して、画面上にプレビューを表示できるのが 1.0-alphaでリリース。

Media3のパフォーマンス向上。新しいtransformerAPIを使って、ビデオのエンコードが5倍高速になったり、YouTube shortでは19%タイムアウトが削減されたりした。

Performance

Battery: バッテリー消耗の原因は画面オフ中のものであることが分かった。APIを適切なものを選ぶ必要がある。

Perfettoを使うとAndroid 14以上で電力消費が見られる

詳細はHow to improve battery efficiency of background work on Android

Practical performance problem solving in Jetpack Composeというコードラボで、実際的なパフォーマンスの問題解決について学べる。

簡単にパフォーマンスを改善する方法は、ベースラインプロファイルとdex reorderingを入れ、R8を入れることによって60%の改善が見込める。

Vulkanの話 ゲームを作る人向けの話なのでとばさせてください

セキュリティとプライバシー

Safer intent 悪意のあるアプリがintent filterの一致を悪用できないように改善。ただ、これは複雑なものになりそうなので、strict modeでテストできるようにしている。

意図しないbackground activityの起動を減らすためにデフォルトでブロックするように。

mininumでインストールできるTarget SDKのバージョンが24より小さいとインストールできなくなる。(多分、RuntimePermission周りかな)

Photo picker (アプリが直接ユーザーデータにアクセスしないようにする。)。広い権限が必要な場合はそれが必要な理由を明示する必要があるようになった。

Play Integrity APIを使っているアプリは80% 未承認な利用がそうでないアプリに比べて少なくなっている。

Safeguarding user security on Androidで詳細が聞ける。

Credential Manager

ユーザーログインのためのシンプルな開発者サービスを提供する。sign-in with Googleやpasskeyやパスワードを1つのインターフェースに集約して、アプリでの複雑さを減らうことができ、安全で関連性の高いログインの方法を出す。ユーザーはいつでもログインの方法を選ぶことができる。
DASHLANE、TikTok, KAYAKなどでパスキーのサポートを開始し、Credential Managerに移行し、ユーザーにいい影響が出ている。KeyboardでもCredential Managerのオプションを表示するようになった。
運転免許証などのIDをdigital walletで保存できるようになり、それをアプリに共有できるようになった。
Wear OSもサポート。

Wear OS 5 developer preview

新しいcomplication data type?というものが定義された。 (文脈的にWatch faceの表示タイプ的な感じなのかな?)
Building for the future of WearOS で詳細。

Running Metricsが追加。Ground Contact Timeなどで、いつ疲労するかなどが分かるようになったらしい。

Google FitのAPIから移行するためにRecording APIというのが導入し、歩数とかが測定でき雨量に。

Health Connect

アプリにユーザーのデータを提供するために新しいパーミッションが増えたらしい。

AndroidTV

Compose for TV 1.0.0-beta01
パフォーマンスと入力サポートを改善、あらゆる範囲の改善を追加。
TVマテリアルカタログアプリでコンポーネント、テーマやレイアウトを探索できる。
Android Studioのテンプレートも更新された。

AndroidTVへの改善
Video Discover API
Androidのフォームファクターをまたいだ再開を可能にする。Android TVのContinue Watching APIと後方互換性がある。

Round app icon
丸いアイコンが標準になった。TV app icon guidelineどおりに表示されていることを確認する。

Power reduction
MediaSessionとちゃんと連携して、power state changeに対応できるようにする。

Everything you need to know about Google TV and the Android TV OS で詳細。

Android for cars

(Xで流れてきてある程度知っていた)

Car app quality tierを導入
car readyなアプリを作るためのガイドライン。

Android automotive OS向けの2つの新しいエミュレーター遠隔ディスプレイエミュレーターアプリが画面間をどのように移動するのかをテストできる(ちょっとよく分かっていない)。configurableエミュレーターを使うとさまざまなシステムバーの設定をエミュレート可能になり、車固有のカットアウトを表示可能になる。

Androidオートモーティブを実行するPixelタブレット用のシステムイメージをリリース。 これにより物理デバイスでテストする手段が提供される。 (そこまでやるのか。)

スタイラスによる手書き

ユーザーはテキストを入力するときにスタイラスを置く必要がなくなるようなアップデート。
Composeの場合は最近のアップデート(1.7)までアップデートする必要がある。Android TextViewなどではそのまま対応できる。
詳しくはここ
https://developer.android.com/develop/ui/views/touch-and-input/stylus-input/custom-text-editors

CanvasFrontBufferedRendererなどレイテンシーを下げるためにCanvasをレンダリングに使う新しいAPIが追加。

詳細はIncrease user productivity with large screens and accessories

Developer productivity - Compose

Compose compiler が Kotlin2.0からKotlinのリリースと共にリリースされるように。

Strong Skipping mode。(割と知っている話題)。パフォーマンスのデバッグをしたくなく、勝手に早くなって欲しいというのが理由。

Composeパフォーマンス

  • Rippleの遅延生成を可能にするためにIndication APIを書き直した。カスタムIndicationがある場合はbreaking changeになる。がマイグレーションドキュメントを用意している

  • Comnpose RuntimeにLow Levelな変更を加えた。preferenching APIの改善とslot tableの書き直し。もうそれはテーブルではなくなった。最初からテーブルではなかったという人もいますが (自分もコード読んでいて、使っている構造はIntArrayで中身はparentとかがある木みたいな構造でした)。外部には影響がないです。

  • Modifier.animateItem()をつけるだけでmoveなどのアニメーションが簡単にできるように。
    https://youtu.be/_yWxUp86TGg?t=2020

  • Shared Element Transition。他の画面との要素を関連付けするために使われる。predictive back supportもしているので、バックのジェスチャーで戻るときもアニメーションして戻ったりできる。

  • ContextualFlowRowとColumnを使うと画面内に表示するもの以外はComposeしない。そしてコンポーズした数が出せるので、展開インジケータを作成できる。
    image.png
    https://youtu.be/_yWxUp86TGg?t=2068 より 。赤矢印追加しています。

  • Textがrich contentを受け取れるように。キーボードからGifを受け取ったりできる。

  • linkとベーシックなHTMLをTextがサポート

  • Accessibility スキャナなどの関連機能のComposeサポート。

Updates to Android accessibility features and APIs で詳細。

Kotlin Multiplatform

Kotlin Multiplatformをサポート。 (support Kotlin Multiplatform on Androidみたいな微妙な言い方を他ではしていたんだけどここではシンプルに言っていて良かった)
今はビジネスロジックの共通化にフォーカスしている。

Android Studio, GeminiとAndroid Studio, そして DeveloperProductivityについては What's new in Android development tools

Android 15 Beta2が明日リリース。 2日前の動画なので、2024/05/18かな。

What's new in Android development tools

デバッグでラムダの中とかも簡単にbreakpoint貼れるようになるなど。
image.png

USB-CケーブルのUSB 3.0以降でないときに警告で遅くなるというのを教えてくれる。

Device Stremingから繋いでいる端末の設定を変更できる
resetもできる。

image.png

image.png

https://youtu.be/2wOfYgIMf-A?t=630 より
レイアウトインスペクタのsnapshotを使うと3Dでレイアウトが見れる。

ComposeのUIチェックにはPreviewのここから入れて、ボタンが小さいとかコントラストが足りないので文字が見にくいとかそういうのをチェック可能。
image.png
https://youtu.be/2wOfYgIMf-A?t=687

このFind CPU Hotspotsを押すとプロセスを最初から開始して、call stackを見ることができるが、ここから起動すると自動的にマニフェストにprofilableを入れて、アプリを起動できる。
image.png
https://youtu.be/2wOfYgIMf-A?t=940 より

LeakCanaryとの連携を開発中

Geminiとの連携の話。基本的には右クリックしてGemini -> Transformで色々できるという話。

Shift + F6で関数の中身を見て関数名をサジェストしてくれる。
image.png
https://youtu.be/2wOfYgIMf-A?t=1503

また、関数内の変数を全部考え直すことが可能
image.png
image.png
https://youtu.be/2wOfYgIMf-A?t=1507 より

GenerateにTest Scenariosが追加。エッジケースなどを考えてくれて、テストのメソッドなどを考えてくれる。
image.png
https://youtu.be/2wOfYgIMf-A?t=1575 より

コミットメッセージも考えてくれる
image.png
https://youtu.be/2wOfYgIMf-A?t=1605 より

画像を渡して、それのComposeを作ってくれるデモ (これはDeveloper Keynoteとかにもあったかも)

Firebaseのクラッシュの画面で、Geminiに解決のステップを解説させられるようになった。

去年のI/Oで紹介があったけど、クラッシュを見るときにAndroid Studioで見れるやつ。Android Gradle Plugin 8.3以上だとAndroid Studioはどのバージョンでクラッシュしたか分かるようになる。のでそのバージョンのコードでのクラッシュの場所がわかる。(仕組み気になる。)

Android Studioのリリースサイクルの変更。いつもだとstableバージョンをリリースして終わりだが、もっと頻繁にリリースして、stableリリースのタイミングを早めて、feature dropという形で、あたららしい機能を提供することで、リリースの頻度を高める。

Before
image.png
https://youtu.be/2wOfYgIMf-A?t=2504 より

After
image.png
https://youtu.be/2wOfYgIMf-A?t=2539 より

Actionable app profiling in Android Studio

App Startup

TTID(最初に表示されるまでの時間)とTTFD(コンテンツが表示されるまでの時間)の話。

TTFDを取るにはComposeならReportDrawnWhen、ViewならFullyDrawnReporterを使う

自分だけかもしれませんが、ソースコードが気になる方はこちら。
ReportDrawnWhen: https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity-compose/src/main/java/androidx/activity/compose/ReportDrawn.kt;l=128;drc=5f8df427d262f9848fab982f8c45ee3dc7f9acbc
FullyDrawnReporter: https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/FullyDrawnReporter.kt;drc=5713d41811d5a99c93b5d585cbac46bfaa9ed5a6
https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:activity/activity/src/main/java/androidx/activity/ComponentActivity.kt;l=1090?q=reportFullyDrawn&ss=androidx%2Fplatform%2Fframeworks%2Fsupport

Baseline Profileってあるけどなんで効くのか?

Before
image.png
https://youtu.be/ELKKWDPCLXU?t=274 より

Android Studio ProfilerでJit thread poolを見るとJit thread poolでJITコンパイルに数秒かかっているなどが分かる。
70%のJITコンパイルの時間の短縮などが見られるようになる。

After
image.png
https://youtu.be/ELKKWDPCLXU?t=284 より

overunのメトリクスは1%の一番悪い(長い)フレームのsyncronization deadlineを超えたフレームを出す。overrunはdealineを超えた時間の量。

image.png
https://youtu.be/ELKKWDPCLXU?t=398 より

これを調査するには?どのぐらいJIT Activityが行われているかを確認する。特にJIT thread pool children timeを見る。 アプリが実際にJITコンパイルに費やした合計時間を示す。
image.png
https://youtu.be/ELKKWDPCLXU?t=415 より

Android Studioのjankレンダリングを見る機能を使う。結果 Jit thread pool childrenが1.7秒かかり、8つのJank markerが表示されていることが分かる。

ここでBaseline Profileを入れてみると改善が確認できる。このOverrun マイナスになっているのはdeadlineを超えていないということ

image.png
https://youtu.be/ELKKWDPCLXU?t=470 より
image.png
https://youtu.be/ELKKWDPCLXU?t=492 より
他の数値も改善されている事がわかる。

image.png
https://youtu.be/ELKKWDPCLXU?t=505 より

Macrobenchmarkを使って、上記の測定を自動にできる。

image.png
https://youtu.be/ELKKWDPCLXU?t=521 より

エネルギー消費量も取れるようになったよという話。

LeakCanaryが新しいAndroid Studioで使えるようになる話。LeakがAndroid Studio内で見られるなど。

Designing scalable Compose APIs

(元になったドキュメントを読んだことがあるので、復習みたいな感じで)

Composable関数はComposable関数を呼び出せるので、Composable関数のAPIを作っていることになる。

  • どのようにComposable関数を考えて、計画するか?
  • どのようにKotlinの命名規則を活用するか?
  • APIの強固な構造を定義する方法
  • これらのAPIを検証し、保持する方法

これらのルールは

  • Composeのフレームワークでは必須
  • Libraryではガイドラインとして利用する
  • アプリでは推奨事項として利用する

どのようにComposable関数を考えて、計画するか?

FilterChipの例をみながらどのように新しいAPIを作ることを決めるかを見ていく。

まず新しいコンポーネントが思いついたときに、このAPIが1つの問題を解決することを目的としているかどうかを考える。
例えばFilterChipであれば、限られた選択肢の中から、簡潔な選択肢を表すコンポーネントが必要という問題を解決するコンポーネント。一つのコンポーネントが、一つ問題を一箇所で解決する。これによりAPIがユースケースベースになり、これにより簡単かつ明確に利用することができるようになる。

このFilterChipにSuggestionさせたいとか、クイックアクションさせたいとかがでてきたとすると、違う問題なので、違う場所で解決されるべきもの。

ただ、ほぼ同じ見た目なんだけどどうしたらいい?もしアプリで一貫した要求があり、バリエーションのあるコンポーネントがある場合は上位のレイヤーに新しいコンポーネントを作る良い機会になる。この場合はFilterChipにChipを作るような感じ。

image.png
https://youtu.be/JvbyGcqdWBA?t=185 より
Higher level APIに行くにしたがって、よりカスタマイズができず、より意見(opinioned)の持ったような形になる。
(LowとHighのイメージが逆なのでむずい)

ChipGroupというコンポーネントを作るべきか?向きの縦横はRowとかColumnでできるし、装飾もModifierでできるので、いらないということになる。(このあたりがコンポーネントが1つの問題を解決するという意味なのかもなと思った)

名前付け

(スライドがわかり易すぎる。)
image.png
https://youtu.be/JvbyGcqdWBA?t=323 より

以下1, 2, 3はそのまま説明の通り。
☓になっているGoogleChipやFeatureXChipについては、コンポーネントはユースケースや目的によって名前がつけられるべきなのでということ。

image.png
https://youtu.be/JvbyGcqdWBA?t=368 より

CompositionLocalによるカスタマイズはさけて、パラメーターを使おう。
APIユーザーはあることを期待するので、Modifierを最初のオプショナルパラメーターとして持つべき。
パラメーターにするべきか?Modifierにするべきか?あるコンポーネントの代表的な振る舞いやUIがパラメーターになるべき。

default値で、NullableとEmptyとDefaultの値どれを使うべきか?Nullableはその機能が必要ないとき例えばChipのImageとか。Emptyはその機能が必須だが、emptyになれるとき、ChipのContentとか。DefaultはShapeとか。

AccessibilityでChipに画像と文字が入っているときなどは、子のsemanticsをマージできる。

ボタンが押した状態などをテストしたい場合は?interactionSourceを外部から設定できるようにする。
(この方法はRoborazziでも動くらしい https://slack-chats.kotlinlang.org/t/16651702/hi-everyone-i-m-currently-integrating-https-github-com-takah )

image.png

https://youtu.be/JvbyGcqdWBA?t=1102 より

Backward compatibilityガイドをみると、後方互換性の保ち方がわかる。
https://goo.gle/kotlin-back-compat

まだ途中です。(ストックしておくと更新通知受け取れるかもです :pray: )
[WIP]

18
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20