Car App: CarPlayとAndroid Auto開発の本質

著者: IT Sectr 公開日: 2026-02-15 読了時間: 9 分

Car App — 車載インフォテインメントシステム向けアプリケーションで、Apple CarPlayおよびAndroid Autoと統合されます。CarPlayはAppleの技術で、iPhoneのインターフェースを車の画面に投影し、Siri、タッチスクリーン、またはステアリングホイールのボタンで操作します。Android AutoはAndroidスマートフォン向けのGoogleの類似技術です。Car Appの開発には、iOS向けのSwiftでのCarPlay frameworkとSiriKitを使用したアプリケーション、およびAndroid向けのKotlinでのCar App Library、MediaBrowserService、NavigationManagerを使用したアプリケーションの作成が含まれます。Car Appのサポートは現代の自動車の標準になりつつあります — Appleによると、米国の新車の98%がCarPlayをサポートし、Android Autoは200以上のモデルで利用可能です。

重要なポイント

  • Car App — CarPlay(iOS)およびAndroid Auto(Android)向けアプリケーション、運転中の使用に最適化
  • Apple CarPlay — iPhoneのインターフェースを車の画面に投影、Siriとタッチで操作
  • Android Auto — Google Assistant対応でAndroidスマートフォンを車の画面に投影
  • CarPlay framework — Swiftでインターフェースを構築するためのCPInterfaceController、CPTemplate、CPListItem
  • Car App Library — MediaBrowserServiceとNavigationManagerを使用したAutomotiveアプリケーション作成のためのAndroidライブラリ

Car Appとは

Car App — スマートフォンの投影を介して車載インフォテインメントシステム(IVI)で動作するアプリケーションです — iOS向けApple CarPlay、Android向けAndroid Auto。Android Automotive OS(車に組み込まれたOS)とは異なり、CarPlayとAndroid Autoはモバイルアプリケーションの拡張機能であり、電話上で実行され、インターフェースを車の画面に投影します。Car Appは、CarPlayまたはAndroid Autoのプロトコルを実装する既存のiOS/Androidアプリです。

Car Appの主要カテゴリ: ナビゲーション(Apple Maps、Google Maps、Waze、Sygic)、オーディオ(Spotify、Apple Music、YouTube Music、Audible、Castbox)、メッセージング(Siri/Google Assistantによる読み上げとディクテーション)、自動車機能(EV充電、駐車、車両状態)、VOIP通話(WhatsApp、Zoom)。各カテゴリには独自のインターフェーステンプレートがあります — ListTemplate、MapTemplate、AudioTemplate。システム自体が、登録されたIntentsに基づいてアプリケーションがどのカテゴリをサポートするかを決定します。

Car Appの制限: AppleとGoogleは安全性のためにUXを厳格に管理しています — 最小限の要素数、大きなボタン(最小48x48 pt)、テキスト入力なし(音声のみ)、運転中の自動インターフェース調光、動画禁止。押下時の応答時間は100 ms未満である必要があります。すべてのアプリケーションは必須の審査を受けます(CarPlayの場合はApp Review、Android Autoの場合はGoogle Play Console + CTS)。

Apple CarPlay: CarPlay frameworkとSiriKit

CarPlay framework(旧CPKit) — SwiftでCarPlayアプリケーションを作成するためのAppleのフレームワーク。主要なクラスはCPInterfaceControllerで、テンプレートナビゲーションを管理します。CPInterfaceControllerにはテンプレートスタックが含まれています:CPListTemplate(リスト)、CPMapTemplate(ナビゲーション)、CPNowPlayingTemplate(オーディオ)、CPVoiceControlTemplate(音声制御)。CPListTemplateにはCPListItemが含まれています — アイコン、テキスト、アクション付きのリストアイテムです。

CarPlay向けSiriKit — 車内でのアプリケーションの音声制御のためのSiriKit拡張機能。アプリケーションはIntentsを登録します(INPlayMediaIntent — 再生、INStartWorkoutIntent — ワークアウト、INSendMessageIntent — メッセージ)。CarPlay接続時にSiriが自動的に有効になり、ステアリングホイールの音声制御ボタンから利用可能です。SiriKit CarPlayはCarPlay Dashboardをサポートしています — CarPlayホーム画面にアプリケーションからの情報(目的地、現在のトラック)を表示するウィジェットです。

CarPlay接続プロセス: iPhoneはLightning/USB-Cケーブルまたはワイヤレス(CarPlay Wireless、iOS 9以降)で車に接続します。接続後、アプリケーションがCPApplicationDelegateを実装している場合、iOSは自動的にCarPlayセッションを開始します。開発者は接続のタイミングを制御しません — システムはセッションの開始時と終了時にdelegateメソッドを呼び出します。CarPlayはマルチタスキングをサポートしています:音楽に切り替えてもナビゲーションはバックグラウンドで動作し、音声ガイダンスは鳴り続けます。

Android Auto: Car App Library

Android Car App Library — Android Autoと互換性のあるアプリケーションを作成するためのAndroidライブラリ。基本コンポーネント:CarAppService — Android Autoのエントリポイント;Session — セッションのライフサイクル管理;Screen — アプリケーションの各画面;CarScreenManager — 表示管理。アプリケーションはメディアコンテンツ用のMediaBrowserServiceとナビゲーション指示用のNavigationManagerをサポートします。

MediaBrowserService — オーディオアプリケーションの主要コンポーネント。アプリケーションは再生を管理するためにMediaBrowserServiceとMediaSessionを実装します。Android Autoは自動的にコントロール(再生/一時停止、次へ、前へ)とトラックリストを表示します。NavigationManagerはナビゲーションアプリケーションに使用されます — 曲がり角の指示、ルートステータス、アラートを中継します。NavigationManagerはAndroid Autoのステータスバーにナビゲーション指示を表示するためのCarNotificationをサポートしています。

Android Autoの要件: アプリケーションのマニフェストにcategory="android.intent.category.APP_AUTO"が必要です;AndroidXと最小SDK 26+の使用が必須;ダークテーマ(DayNight)のサポート;タッチおよび音声制御のサポート;Android Auto Compatibility Test Suite(CTS)への準拠。Google PlayはセキュリティとUX要件への準拠について各アプリケーションをチェックします。認証プロセスには1〜4週間かかります。

コード例: SwiftとKotlin

CarPlay frameworkを使用したSwiftでのCarPlay向けナビゲーションアプリケーションの例。

swift
import CarPlay

class CarPlaySceneDelegate: CPTemplateApplicationSceneDelegate {

    func templateApplicationScene(
        _ templateApplicationScene: CPTemplateApplicationScene,
        didConnect interfaceController: CPInterfaceController
    ) {
        let searchItem = CPListItem(
            text: "住所を検索",
            detailText: "目的地を入力"
        )
        searchItem.handler = { _, completion in
            // 検索画面を開く
            completion()
        }

        let favoritesItem = CPListItem(
            text: "お気に入り",
            detailText: "保存済み住所"
        )
        favoritesItem.handler = { _, completion in
            showFavorites()
            completion()
        }

        let section = CPListSection(items: [searchItem, favoritesItem])
        let listTemplate = CPListTemplate(
            title: "ナビゲーション",
            sections: [section]
        )

        interfaceController.setRootTemplate(listTemplate, animated: true)
    }

    func showFavorites() {
        // お気に入り住所のリストを表示
    }
}

// 音声制御用のSiriKit Intent
class NavigationIntentHandler: NSObject, INSearchForMessagesIntentHandling {
    func handle(intent: INSearchForMessagesIntent,
                completion: @escaping (INSearchForMessagesIntentResponse) -> Void) {
        // Siriを介した音声コマンドの処理
        let response = INSearchForMessagesIntentResponse(
            code: .success, userActivity: nil
        )
        completion(response)
    }
}

重要なポイント:CPTemplateApplicationSceneDelegate — CarPlayセッションのエントリポイント;CPInterfaceControllerがテンプレートスタックを管理;CPListTemplateCPListItem — 基本UIコンポーネント;.handler — 各リストアイテムのクリックハンドラ。

Car App Libraryを使用したKotlinでのAndroid Auto向けナビゲーションアプリケーションの例:

kotlin
// CarAppService — Android Autoのエントリポイント
class NavigationCarAppService : CarAppService() {
    override fun createSession(): Session = NavigationSession()
}

// Session — セッションのライフサイクル管理
class NavigationSession : Session() {
    override fun onCreateScreen(manager: ScreenManager): Screen {
        return MainScreen(carContext)
    }
}

// MainScreen — ナビゲーション付きメイン画面
class MainScreen(carContext: CarContext) : Screen(carContext) {
    override fun onGetTemplate(): Template {
        val searchAction = Action.Builder()
            .setTitle("住所を検索")
            .setOnClickListener { showSearchScreen() }
            .build()

        val favoritesAction = Action.Builder()
            .setTitle("お気に入り")
            .setOnClickListener { showFavorites() }
            .build()

        return ListTemplate.Builder()
            .setTitle("ナビゲーション")
            .setHeaderAction(Action.APP_ICON)
            .addAction(searchAction)
            .addAction(favoritesAction)
            .build()
    }

    private fun showSearchScreen() {
        screenManager.push(SearchScreen(carContext))
    }

    private fun showFavorites() {
        screenManager.push(FavoritesScreen(carContext))
    }
}

// AndroidManifest — サービスの登録
<service
    android:name=".NavigationCarAppService"
    android:exported="true">
    <intent-filter>
        <action
            android:name="androidx.car.app.action.NAVIGATION" />
    </intent-filter>
    <category
        android:name="android.intent.category.APP_AUTO" />
</service>

重要なポイント:CarAppService — Android Autoのエントリポイント;Session — ライフサイクル管理;Screen — アプリケーションの各画面、Templateを返す;ListTemplate — Action付きリスト用テンプレート;category.APP_AUTO — マニフェストの必須カテゴリ。

要件と公開

Apple CarPlayの要件: アプリケーションはCarPlay Distraction Design Guidelinesに準拠する必要があります — 最小ボタンサイズ48x48 pt、テキストコントラスト4.5:1、アニメーションや動画なし、VoiceOverサポート。公開 — App Store Connectを介して、アプリケーションは標準のApple審査を受けます。App Store ConnectでCarPlayサポートを指定し、CarPlayインターフェースのスクリーンショットを添付する必要があります。CarPlayアプリケーションは広告なしで無料にすることはできません — Appleはアプリ内購入に対して30%(小企業は15%)の手数料を課します。

Android Autoの要件: アプリケーションはAndroid Auto Design Guidelinesに準拠し、Android Auto Compatibility Test Suite(CTS)に合格する必要があります。公開 — Google Play Consoleを介して、互換デバイスリストに「Android Auto」カテゴリを指定する必要があります。Google Playは以下をチェックします:ダークテーマ(DayNight)のサポート、接続喪失時の正しい動作、画面回転の処理、Google Assistantを介した音声制御のサポート。Android Autoアプリケーションに追加の手数料は必要ありません — 標準のGoogle Playモデル(15-30%)。

パラメータApple CarPlayAndroid Auto
フレームワークCarPlay framework(CPInterfaceController)Car App Library(CarAppService)
言語SwiftKotlin
音声アシスタントSiriKitGoogle Assistant
インターフェースCPListTemplate、CPMapTemplateListTemplate、MapTemplate
メディアMPNowPlayingInfoCenterMediaBrowserService
ナビゲーションCPNavigationSessionNavigationManager
公開App Store ConnectGoogle Play Console
手数料15–30%15–30%
審査App Review(1〜3日)CTS + Google Play(1〜4週間)

ワイヤレス接続サポート: CarPlay WirelessはiOS 9以降で利用可能で、Wi-Fi + Bluetoothが必要です。Android Auto WirelessはAndroid 11以降で利用可能です。ワイヤレス接続には、車が対応する標準をサポートしている必要があります。開発者は追加のコードを書く必要はありません — OSが自動的に接続を処理します。

よくある質問

Car Appはモバイルアプリとどう違うのですか?

Car Appは運転中の使用に最適化されています:最小限の要素、大きなボタン、音声制御、テキスト入力なし。アプリケーションは安全性要件に準拠する必要があります — AppleとGoogleのDistraction Design Guidelines

CarPlayではどのようなアプリカテゴリが利用可能ですか?

CarPlayは以下のカテゴリをサポートしています:ナビゲーション(Apple Maps、Google Maps、Waze)、オーディオ(Spotify、Apple Music)、メッセージング(Siriによる読み上げとディクテーション)、自動車機能(EV充電、駐車)、VOIP通話。

Android Auto向けアプリを開発するには?

Android Car App Libraryを使用します:エントリポイントとしてCarAppService、ライフサイクル管理にSession、各画面にScreenを実装します。アプリケーションはメディア用にMediaBrowserService、ナビゲーション用にNavigationManagerをサポートする必要があります。

Car Appに審査は必要ですか?

はい、両方のプラットフォームで審査が必要です。AppleはApp Reviewを通じてCarPlayアプリケーションを審査します。Android AutoはAndroid Auto Compatibility Test Suite (CTS)に合格し、Google Play Consoleでの確認が必要です。

Car Appにはどの言語が使用されますか?

CarPlay — SwiftとCarPlayフレームワーク(CPInterfaceController、CPTemplate、CPListItem)およびSiriKit。Android Auto — KotlinとCar App LibraryおよびMediaBrowserService。

まとめ

  • Car App — CarPlay(iOS)およびAndroid Auto(Android)向けアプリケーション、運転中の安全な使用に最適化
  • Apple CarPlayはCPInterfaceController、CPListTemplate、SiriKitを使用した音声制御でCarPlay frameworkを利用
  • Android AutoはCarAppService、Session、Screen、MediaBrowserServiceを使用したメディア再生でCar App Libraryを利用
  • 音声制御 — Siri(CarPlay)とGoogle Assistant(Android Auto)はナビゲーションとメッセージングに必須
  • UX制限 — 大きなボタン48x48 pt、最小要素、動画禁止、100 ms未満の応答
  • 審査 — App Store(1〜3日)とGoogle Play CTS(1〜4週間)、セキュリティとUXの確認あり
  • ワイヤレス接続 — CarPlay Wireless(iOS 9+)とAndroid Auto Wireless(Android 11+)がケーブルなしで利用可能

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください