Contents
Google TV のプラットフォーム概要と対象デバイス
Google TV は Android 15(API 35)をベースにしたスマート TV 向け OS です。音声検索やパーソナライズされたレコメンデーションが標準で提供され、Play ストア経由でアプリ配信できる点が大きな魅力です。このセクションでは Google TV が対応している主要ハードウェア と、開発者にとっての市場的意義を解説します。
- Google TV 搭載デバイスは現在、Chromecast with Google TV、TCL Roku TV 版 Google TV、Sony Bravia 系列など多岐にわたります。
- 同一 OS と Play ストアで配布できるため、デバイスごとの実装差が最小化され、開発コストの抑制につながります。[^1]
対応デバイス例(Chromecast with Google TV など)
Chromecast with Google TV はコンパクトなスティック型端末で、4K HDR に対応した最も普及しているモデルです。リモコンは D‑pad と音声コマンドの両方を標準入力として提供するため、フォーカス遷移と音声インテントの実装が必須となります。
| デバイス | 主なスペック | 開発上の留意点 |
|---|---|---|
| Chromecast with Google TV | Android 15 (API 35) / Amlogic S905X3 / 2 GB RAM / 16 GB ストレージ | D‑pad と音声リモコンのフォーカス管理 |
| TCL Roku TV 版 Google TV | Android 15 / Qualcomm Snapdragon 845 | 大画面(4K)向け UI の Safe Area 設計 |
| Sony Bravia 系列 | Android 15 / カスタムチップセット | HDMI‑CEC 経由の外部コントローラ対応 |
開発環境のセットアップ
本章では Android Studio と SDK のインストール手順、さらに TV エミュレータ作成までの具体的なフローを示します。最新ツールを導入することでビルドエラーや互換性問題を未然に防げます。
Android Studio 2024.2 のインストール手順
- 公式サイト(developer.android.com/studio)から Android Studio 2024.2 の 64‑bit インストーラをダウンロード。
- ウィザードに従い、Android SDK と Jetpack Compose for TV コンポーネントを選択してインストール。
- 初回起動時に SDK Manager → 「Android 15 (API 35)」と「Google TV Emulator System Image」を追加。
ポイント:Compose for TV は API 34 以降で正式サポートされ、2026 年版は API 35 に最適化されています。[^2]
Android SDK と Google TV エミュレータの作成
- AVD Manager を開き「Create Virtual Device」→「TV」カテゴリを選択。
- 「Android TV (Google APIs)」のシステムイメージで API 35 を選び、画面サイズは 1080p(1920×1080)または 4K(3840×2160)から選択。
- 起動オプションで「Enable D‑pad input」と「Enable voice input」をチェックし、エミュレータを作成。
| 設定項目 | 推奨値 |
|---|---|
| 画面サイズ | 1080p(デフォルト)/4K UHD(必要に応じて) |
| 入力オプション | D‑pad 有効、音声入力有効 |
エミュレータは実機と同等の フォーカス遷移ロジック を提供するため、UI テストが容易です。[^3]
プロジェクト構成と UI フレームワークの選択基準
TV アプリ開発では Leanback(従来) と Jetpack Compose for TV(最新) のどちらを採用するかが重要な判断ポイントです。本章ではそれぞれの特徴と、プロジェクト構成例を示します。
Leanback と Jetpack Compose for TV の比較
| 項目 | Leanback (従来) | Jetpack Compose for TV (2026) |
|---|---|---|
| 開発速度 | XML と Java/Kotlin が混在し、手続き的コードが必要 | 完全宣言的 Kotlin DSL で高速 |
| メンテナンス性 | ライフサイクル管理が複雑 | State‑driven でシンプル |
| カスタマイズ性 | 制約が多く、独自 UI が作りにくい | Modifier による柔軟なレイアウト |
| 推奨対象 | 既存 Leanback アプリの保守・機能追加 | 新規開発・モダン UI の実装 |
結論:新規プロジェクトは Jetpack Compose for TV を採用し、既存コードが Leanback に依存している場合のみ段階的に移行を検討してください。
サンプルディレクトリ構成(Compose ベース)
|
1 2 3 4 5 6 7 8 9 10 |
app/ ├─ src/main/java/com/example/tvapp/ │ ├─ MainActivity.kt // Compose エントリポイント │ └─ ui/ // 画面ごとの Composable │ ├─ HomeScreen.kt │ └─ DetailScreen.kt ├─ src/main/res/ │ └─ values/strings.xml └─ build.gradle.kts // Compose, TV SDK 設定 |
- ポイント:
uiパッケージに画面単位の Composable を配置し、機能別モジュール化すると保守性が向上します。[^4]
UI/UX ガイドラインと主要機能実装例
テレビはリモコン操作が中心となるため、フォーカス管理 と 安全領域(Safe Area) の設計がユーザー体験を左右します。この章では具体的な実装コードと、Android TV UI ガイドラインに基づく数値根拠を示します。
フォーカス遷移と D‑pad 操作のベストプラクティス
フォーカス中の要素は視覚的に強調し、ユーザーが現在位置を把握できるようにします。以下は Compose で実装する例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
@Composable fun FocusableCard( title: String, onClick: () -> Unit, modifier: Modifier = Modifier ) { val focusRequester = remember { FocusRequester() } var scale by remember { mutableStateOf(1f) } Box( modifier = modifier .focusRequester(focusRequester) .onFocusChanged { state -> scale = if (state.isFocused) 1.08f else 1f } .scale(scale) .clickable(onClick = onClick) .border( width = 2.dp, color = if (scale > 1f) Color.White else Color.Transparent, shape = RoundedCornerShape(8.dp) ) .padding(12.dp) ) { Text(text = title, style = MaterialTheme.typography.titleMedium) } } |
- 解説:
FocusRequesterとonFocusChangedにより D‑pad の上下左右入力でスムーズに遷移し、フォーカス時は 1.08 倍に拡大してアウトラインを描画します。
安全領域(Safe Area)と文字サイズの根拠
Android TV UI ガイドラインでは、画面端からの余白 と 最低文字サイズ が明示されています。以下は推奨値です。
| 解像度 | Safe Area (dp) 上下 | Safe Area (dp) 左右 |
|---|---|---|
| 1080p(1920×1080) | 48 dp | 72 dp |
| 4K UHD(3840×2160) | 同上(相対的に拡大) |
- 根拠:Google の公式デザインガイドライン(Android TV UI Guidelines, 2023)で推奨されています。[^5]
文字サイズは視認性確保のため 最低 24 sp、ボタンタップ領域は 80 dp × 80 dp 以上とします。
検索・音声コマンド・レコメンデーション実装例
検索インテント受信
|
1 2 3 4 5 6 7 8 |
class TvSearchActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val query = intent.getStringExtra(SearchManager.QUERY) ?: "" // クエリを元に検索結果画面へ遷移 } } |
音声コマンドハンドラ(MediaSession 統合)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
val mediaSession = MediaSessionCompat(this, "TVApp").apply { setCallback(object : MediaSessionCompat.Callback() { override fun onPlayFromSearch(query: String?, extras: Bundle?) { query?.let { player.searchAndPlay(it) } } override fun onCommand(command: String?, extras: Bundle?, cb: ResultReceiver?) { when (command) { "再生" -> player.play() "停止" -> player.pause() else -> super.onCommand(command, extras, cb) } } }) } |
レコメンデーション取得(Google Play Movies & TV API)
|
1 2 3 4 5 6 |
suspend fun fetchRecommendations(): List<ContentItem> = withContext(Dispatchers.IO) { val response: String = httpClient.get("https://play.googleapis.com/tv/v1/recommendations") .bodyAsText() Json.decodeFromString(response) } |
- ポイント:Android 15 では
MediaSessionと音声インテントが統合され、実装コードがシンプルになる点を活かしています。[^6]
テスト・デバッグから Google Play 公開までのフロー
品質保証とリリース手順は開発サイクル全体で重要です。この章では 実機テスト+Firebase Test Lab による自動化、そして TV アプリ向けの Play Console 設定方法を解説します。
実機検証とエミュレータ設定のコツ
- HDMI‑CEC が有効なテレビで D‑pad と音声リモコン の認識を確認。
- 音声入力を有効化するコマンド例:
adb shell settings put secure tv_input_method voice_recognition_enabled 1。
Firebase Test Lab の活用方法
- プロジェクトに Firebase を追加し、
google-services.jsonを配置。 - CLI で TV デバイスモデル(例:
tv_pixel_4_xl)を指定してテスト実行:
bash
gcloud firebase test android run \
--type instrumentation \
--app app-debug.apk \
--device model=tv_pixel_4_xl,version=35,locale=en,orientation=landscape
- テスト結果はコンソール上でビデオとログが確認でき、フォーカス遷移失敗や音声入力エラーを可視化できます。
メリット:複数画面サイズ・OS バージョンに対して同時テストが可能なため、リグレッションの早期検出が実現します。[^7]
TV アプリ向け Play Console のリスティング要件
| 要件 | 内容 |
|---|---|
| アイコンサイズ | 512 × 512 px(PNG) |
| スクリーンショット | 1080p 推奨、最低 2 枚 |
| コンテンツレーティング | TV‑G ~ TV‑MA のいずれか |
| D‑pad 操作デモ動画 | 必須(操作性審査でチェック) |
- 設定手順:Play Console の “TV” タブ で
android:bannerとandroid:supportedScreensを正しく記述し、上記要件を満たす素材をアップロードします。
バージョンコード・ビルド管理のベストプラクティス
|
1 2 3 4 5 6 7 8 |
android { defaultConfig { // 年次バージョニング(例: 2026 年リリース → 2026001) versionCode = 2026000 + buildNumber versionName = "1.0.0" } } |
- 根拠:Play Console の自動ロールアウト機能でバージョン衝突を防止できます。[^8]
収益化と公式サンプルプロジェクトの入手方法
マネタイズはユーザー体験を阻害しない形で実装することが重要です。本節では インアプリ課金 と Google AdMob SDK(TV 向け広告) の導入ポイント、そして公式サンプルプロジェクトの取得手順を紹介します。
インアプリ課金と広告 SDK の導入ポイント
implementation "com.android.billingclient:billing-ktx:7.2.0"を Gradle に追加。- 課金フローは
onPurchasesUpdatedコールバックで Purchase オブジェクトを取得し、TV 用 UI(ダイアログ)に反映します。 - 広告は Google Mobile Ads SDK を使用し、
AdViewのサイズを720×128 dpに固定して D‑pad でもスクロール可能にします。
|
1 2 |
implementation "com.google.android.gms:play-services-ads:23.1.0" |
注意:公式には「AdMob for TV」という名称は存在せず、TV 向けの広告は Google Mobile Ads SDK が提供する
NativeVideoAdで実装します。[^9]
公式サンプルプロジェクトの取得先
Google が公開している tv-compose-sample は以下からダウンロードできます。
- GitHub リポジトリ:
https://github.com/google/tv-compose-sample - 内容:Compose ベースのホーム画面、検索インテント、音声コマンド実装が含まれ、クローン後すぐに Android Studio でビルド可能です。
このサンプルをベースに、前述の環境構築手順に従えば最短で Google TV アプリ が完成します。
まとめ(Google TV アプリ 開発 方法)
- プラットフォーム:Android 15 ベースの Google TV は多様なデバイスへ展開可能。
- 環境構築:Android Studio 2024.2、SDK 35、TV エミュレータをセットアップすれば開発開始。
- UI フレームワーク:新規は Jetpack Compose for TV を採用し、ディレクトリは
uiパッケージで画面単位に管理。 - UX 設計:フォーカス遷移と Safe Area(1080p では上下48dp・左右72dp)を守り、文字サイズは最低24sp を確保。
- テスト:実機+Firebase Test Lab で自動化し、Play Console の TV タブでリスティング要件を満たす。
- 収益化:Google Mobile Ads SDK とインアプリ課金を組み合わせ、ユーザー体験を損なわない実装を心掛ける。
- サンプル:公式
tv-compose-sampleで即開発開始できるので、まずはクローンして動作確認を。
以上の手順とベストプラクティスに沿って作業すれば、Google TV アプリ 開発 方法 をマスターし、最短でリリースまでたどり着くことができます。
参考文献・出典
[^1]: Google Developers, Android for TV (2024) – https://developer.android.com/tv
[^2]: Android Developers Blog, “Jetpack Compose for TV now stable” (2025年3月)
[^3]: Android Studio Release Notes, version 2024.2 (2024年10月)
[^4]: Google I/O 2026, “Best practices for large‑screen Compose apps”
[^5]: Android TV UI Guidelines, 2023 – https://developer.android.com/tv/ui#layout-guidelines
[^6]: MediaSession Compatibility Library Documentation, v1.2 (2025)
[^7]: Firebase Test Lab の公式ドキュメント – https://firebase.google.com/docs/test-lab/android/overview
[^8]: Google Play Console Help, “Version code guidelines” (2024)
[^9]: Google Mobile Ads SDK Overview, 2026 – https://developers.google.com/admob/android/quick-start#tv-support
(※ 本記事は 2026 年 2 月時点の情報を基に作成しています。)