本日、Jetpack Compose の 2026 年 4 月リリースが安定版になりました。このリリースには、コア Compose モジュールのバージョン 1.11(BOM マッピングの完全版を参照)、共有要素のデバッグツール、トラックパッド イベントなどが含まれています。また、ぜひお試しいただき、フィードバックをお寄せいただきたい試験運用版の API もいくつか用意しています。
本日のリリースを使用するには、Compose BOM のバージョンを以下にアップグレードしてください。
implementation(platform("androidx.compose:compose-bom:2026.04.01"))
Compose 1.11.0 の変更
テストでのコルーチンの実行
Compose でテストのタイミングを処理する方法が大幅に更新されました。Compose 1.10 で発表されたオプトイン期間を経て、v2 テスト API がデフォルトになり、v1 API は非推奨になりました。主な変更点は、デフォルトのテスト ディスパッチャが変更されたことです。v1 API はコルーチンをすぐに実行する UnconfinedTestDispatcher に依存していましたが、v2 API は StandardTestDispatcher を使用します。つまり、テストでコルーチンが起動されると、仮想クロックが進むまでキューに登録され、実行されなくなります。
これにより、本番環境の条件がより適切にシミュレートされ、競合状態が効果的に解消され、テストスイートが大幅に堅牢になり、不安定さが軽減されます。
テストが標準のコルーチン動作に準拠し、将来の互換性の問題を回避するため、テストスイートを移行することを強くおすすめします。API マッピングと一般的な修正については、包括的な移行ガイドをご覧ください。
共有要素の改善とアニメーション ツール
共有要素と Modifier.animatedBounds の便利なビジュアル デバッグツールも追加しました。これにより、ターゲットの境界、アニメーションの軌跡、一致した数など、内部で何が起こっているかを正確に把握できるようになり、遷移が期待どおりに動作しない理由を簡単に特定できるようになります。新しいツールを使用するには、SharedTransitionLayout を LookaheadAnimationVisualDebugging コンポーザブルで囲むだけです。
LookaheadAnimationVisualDebugging( overlayColor = Color(0x4AE91E63), isEnabled = true, multipleMatchesColor = Color.Green, isShowKeylabelEnabled = false, unmatchedElementColor = Color.Red, ) { SharedTransitionLayout { CompositionLocalProvider( LocalSharedTransitionScope provides this, ) { // your content } } }
トラックパッド イベント
ノートパソコン内蔵のトラックパッド、タブレット用の着脱式トラックパッド、外付け/仮想トラックパッドなど、トラックパッドの Compose サポートを刷新しました。基本的なトラックパッド イベントは、一般的に PointerType.Mouse イベントと見なされるようになり、マウスとトラックパッドの動作がユーザーの期待に沿うようになります。以前は、これらのトラックパッド イベントは PointerType.Touch の偽のタッチスクリーン指として解釈されていたため、ユーザー エクスペリエンスが混乱していました。たとえば、トラックパッドでクリックしてドラッグすると、選択ではなくスクロールが行われていました。Compose の最新リリースでこれらのイベントのポインタ タイプを変更したことで、トラックパッドでクリックしてドラッグしてもスクロールされなくなります。
また、API 34 以降でプラットフォームによって認識される、より複雑なトラックパッド ジェスチャー(2 本指のスワイプやピンチなど)のサポートも追加しました。これらのジェスチャーは、Modifier.scrollable や Modifier.transformable などのコンポーネントによって自動的に認識され、トラックパッドでの動作が改善されます。
これらの変更により、組み込みコンポーネント全体でトラックパッドの動作が改善されます。具体的には、冗長なタッチ スロップが削除され、より直感的なドラッグ&ドロップの開始ジェスチャー、テキスト フィールドでのダブルクリックとトリプルクリックによる選択、テキスト フィールドでのデスクトップ スタイルのコンテキスト メニューが導入されます。
トラックパッドの動作をテストするために、performTrackpadInput, を含む新しいテスト API が用意されています。これにより、トラックパッドで使用される際のアプリの動作を検証できます。カスタム ジェスチャー検出器がある場合は、タッチスクリーン、マウス、トラックパッド、スタイラスなどの入力タイプ全体で動作を検証し、マウスのスクロール ホイールとトラックパッドのジェスチャーがサポートされていることを確認してください。
コンポジション ホストのデフォルト(Compose ランタイム)
HostDefaultProvider、LocalHostDefaultProvider、HostDefaultKey、ViewTreeHostDefaultKey を導入し、compose-runtime を通じてホストレベルのサービスを直接提供できるようにしました。これにより、ライブラリがルックアップのために compose-ui に依存する必要がなくなり、Kotlin Multiplatform のサポートが向上します。これらの値をコンポジション ツリーにリンクするために、ライブラリの作成者は compositionLocalWithHostDefaultOf を使用して、ホストからデフォルトを解決する CompositionLocal を作成できます。
プレビュー ラッパー
Android Studio のカスタム プレビューは、Compose プレビューの内容をどのように表示するかを正確に定義できる新機能です。
PreviewWrapperProvider インターフェースを実装し、新しい @PreviewWrapper アノテーションを適用することで、特定の Theme の適用などのカスタム ロジックを簡単に挿入できます。このアノテーションは、@Composable、@Preview、または @MultiPreview でアノテーションが付けられた関数に適用できます。これにより、プレビュー機能全体で動作する汎用的で使いやすいソリューションが提供され、繰り返しコードが大幅に削減されます。
class ThemeWrapper: PreviewWrapper { @Composable override fun Wrap(content: @Composable (() -> Unit)) { JetsnackTheme { content() } } } @PreviewWrapperProvider(ThemeWrapper::class) @Preview @Composable private fun ButtonPreview() { // JetsnackTheme in effect Button(onClick = {}) { Text(text = "Demo") } }
非推奨と削除
- Compose 1.10 のブログ投稿でお知らせしたとおり、
Modifier.onFirstVisible()は非推奨となります。この名前は、特に遅延レイアウト内で誤解を招くことが多く、スクロール中に複数回トリガーされることがありました。Modifier.onVisibilityChanged()に移行することをおすすめします。これにより、特定のユースケースの要件に合わせて、可視状態を手動でより正確にトラッキングできます。 TextFieldsの D-pad ナビゲーションがデフォルトで常に有効になったため、ComposeFoundationFlags.isTextFieldDpadNavigationEnabledフラグが削除されました。この新しい動作により、ゲームパッドやテレビのリモコンの D-pad イベントで、まず指定された方向にカーソルが移動するようになります。カーソルがテキストの末尾に達した場合にのみ、フォーカスを別の要素に移動できます。
今後の API
今後の Compose 1.12.0 リリースでは、compileSdk が compileSdk 37 にアップグレードされ、AGP 9 と Compose に依存するすべてのアプリとライブラリがこの要件を継承します。Compose は新しい compileSdks を迅速に採用して最新の Android 機能へのアクセスを提供することを目指しているため、最新のリリース バージョンを常に最新の状態に保つことをおすすめします。さまざまな API レベルでサポートされている AGP のバージョンについて詳しくは、こちらのドキュメントをご覧ください。
Compose 1.11.0 では、次の API が @Experimental として導入されています。アプリでこれらの API をお試しいただき、フィードバックをお寄せください。@Experimental APIs は早期の評価とフィードバックを目的として提供されており、今後のリリースで大幅な変更や削除が行われる可能性があります。
スタイル(試験運用版)
スタイル設定用の新しい試験運用版の基盤 API を導入します。Style API は、コンポーネントの視覚要素をカスタマイズするための新しいパラダイムです。従来は修飾子を使用していました。この API は、シンプルな状態ベースのスタイル設定とアニメーション トランジションを備えたスタイル設定可能なプロパティの標準セットを公開することで、より深く、より簡単なカスタマイズを実現するように設計されています。この新しい API により、すでに有望なパフォーマンス上のメリットが得られています。Style API が安定したら、Material コンポーネントでスタイルを採用する予定です。
押下状態のスタイルの背景をオーバーライドする基本的な例:
@Composable fun LoginButton(modifier: Modifier = Modifier) { Button( onClick = { // Login logic }, modifier = modifier, style = { background( Brush.linearGradient( listOf(lightPurple, lightBlue) ) ) width(75.dp) height(50.dp) textAlign(TextAlign.Center) externalPadding(16.dp) pressed { background( Brush.linearGradient( listOf(Color.Magenta, Color.Red) ) ) } } ){ Text( text = "Login", ) } }
ドキュメントを確認し、バグがあればこちらから報告してください。
MediaQuery(試験運用版)
新しい mediaQuery API を使用すると、宣言型でパフォーマンスの高い方法で UI を環境に適応させることができます。複雑な情報取得を UiMediaScope 内のシンプルな条件に抽象化し、必要な場合にのみ再コンポーズが行われるようにします。
キーボードの種類やポインタの精度などのデバイス機能から、ウィンドウ サイズや姿勢などのコンテキスト状態まで、幅広い環境シグナルをサポートすることで、高度にレスポンシブなエクスペリエンスを構築できます。derivedMediaQuery でパフォーマンスが組み込まれており、高頻度のアップデートに対応できます。また、スコープをオーバーライドできるため、ハードウェア構成全体でテストとプレビューをシームレスに行うことができます。以前は、デバイスが卓上モードであるかどうかなど、特定のデバイス プロパティにアクセスするには、多くのボイラープレートを記述する必要がありました。
@Composable fun isTabletopPosture( context: Context = LocalContext.current ): Boolean { val windowLayoutInfo by WindowInfoTracker .getOrCreate(context) .windowLayoutInfo(context) .collectAsStateWithLifecycle(null) return windowLayoutInfo.displayFeatures.any { displayFeature -> displayFeature is FoldingFeature && displayFeature.state == FoldingFeature.State.HALF_OPENED && displayFeature.orientation == FoldingFeature.Orientation.HORIZONTAL } } @Composable fun VideoPlayer() { if(isTabletopPosture()) { TabletopLayout() } else { FlatLayout() } }
UIMediaQuery を使用すると、デバイスがテーブルトップ モードかどうかなど、デバイスのプロパティをクエリする mediaQuery 構文を追加できます。
@OptIn(ExperimentalMediaQueryApi::class) @Composable fun VideoPlayer() { if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) { TabletopLayout() } else { FlatLayout() } }
ドキュメントを確認し、バグがあればこちらから報告してください。
グリッド(試験運用)
Grid は、Jetpack Compose で複雑な 2 次元レイアウトを構築するための強力な新しい API です。Row と Column は線形デザインに最適ですが、Grid を使用すると、スクロール可能なリストのオーバーヘッドなしで、画面レベルのアーキテクチャと複雑なコンポーネントに必要な構造制御を行うことができます。Grid を使用すると、トラック、ギャップ、セルを使用してレイアウトを定義できます。また、Dp、パーセンテージ、固有のコンテンツ サイズ、柔軟な「Fr」単位などの使い慣れたサイズ設定オプションも使用できます。
@OptIn(ExperimentalGridApi::class) @Composable fun GridExample() { Grid( config = { repeat(4) { column(0.25f) } repeat(2) { row(0.5f) } gap(16.dp) } ) { Card1(modifier = Modifier.gridItem(rowSpan = 2) Card2(modifier = Modifier.gridItem(colmnSpan = 3) Card3(modifier = Modifier.gridItem(columnSpan = 2) Card4() } }
アイテムを自動的に配置することも、複数の行と列に明示的にまたがらせて正確に配置することもできます。最も優れている点は、適応性が高いことです。グリッド トラックとスパンを動的に再構成して、テーブルトップ モードや向きの変更などのデバイスの状態に対応できるため、さまざまなフォーム ファクタで UI を見栄えよく表示できます。
ドキュメントを確認し、バグがあればこちらから報告してください。
FlexBox(試験運用)
FlexBox は、高性能で適応性のある UI 向けに設計されたレイアウト コンテナです。利用可能なコンテナのサイズに基づいて、アイテムのサイズとスペースの配分を管理します。アイテムの折り返し(wrap)や複数軸での配置(justifyContent, alignItems, alignContent)などの複雑なタスクを処理します。アイテムを拡大(grow)または縮小(shrink)してコンテナを埋めることができます。
@OptIn(ExperimentalFlexBoxApi::class) fun FlexBoxWrapping(){ FlexBox( config = { wrap(FlexWrap.Wrap) gap(8.dp) } ) { RedRoundedBox() BlueRoundedBox() GreenRoundedBox(modifier = Modifier.width(350.dp).flex { grow(1.0f) }) OrangeRoundedBox(modifier = Modifier.width(200.dp).flex { grow(0.7f) }) PinkRoundedBox(modifier = Modifier.width(200.dp).flex { grow(0.3f) }) } }
ドキュメントを確認し、バグがあればこちらから報告してください。
新しい SlotTable 実装(試験運用版)
SlotTable の新しい実装を導入しました。このリリースではデフォルトで無効になっています。SlotTable は、Compose ランタイムがコンポジション階層の状態の追跡、無効化/再コンポーズの追跡、保存された値の保存、コンポジションのすべてのメタデータの実行時の追跡に使用する内部データ構造です。この新しい実装は、主にランダム編集のパフォーマンスを向上させるように設計されています。
新しい SlotTable を試すには、ComposeRuntimeFlags.isLinkBufferComposerEnabled を有効にします。
今すぐコーディングを始めましょう。
Jetpack Compose には多くのエキサイティングな新しい API があり、今後もさらに多くの API が登場する予定です。今こそ Jetpack Compose への移行を検討しましょう。Google は、皆様からのフィードバックや機能リクエスト(特にまだ開発中の @Experimental 機能について)を重視しています。こちらからお寄せください。Compose をお楽しみください。
続きを読む
-
プロダクト ニュース
拡張オーバーレイから完全な没入型環境まで、Android XR エコシステムは急速に拡大しており、Samsung Galaxy XR はすでに本日発売されています。
Stevan Silva, Vinny DaSilva • 所要時間 3 分
-
プロダクト ニュース
Google I/O では毎年、Android 開発を含むエコシステムとプロダクト全体にわたる新しい発表とリソースが提供されます。開発が AI とエージェント支援ツールに移行するにつれて、Android 向けにどのような方法で構築する場合でも、より適切にサポートできるようサービスを拡大しました。
Simona Milanovic • 所要時間: 2 分
-
プロダクト ニュース
Google I/O 2026 では、Android エコシステムの最新の進歩が、開発効率を最大限に高めながらアプリの品質を向上させるのにどのように役立つかをご紹介しました。
Ataul Munim • 所要時間 3 分
最新情報の入手
Android 開発に関する最新の分析情報を毎週メールでお届けします。