Jetpack — その概要とアーキテクチャコンポーネント

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

Jetpackは、開発を簡素化し、安定したアプリケーションの作成を高速化するGoogleのAndroidライブラリセットです。ViewModel、Room、Navigationなどのコンポーネントは、ライフサイクル管理、データ保存、ナビゲーションといった典型的なタスクを解決します。Android Developers (2026)によると、Jetpackは50以上のライブラリをカバーし、それぞれがAndroidX(Support Libraryを置き換えた互換性ライブラリ)を通じてAndroid 5.0(API 21)との下位互換性を持ちます。

重要ポイント

  • Android Jetpack — 50以上のライブラリで構成され、AndroidXを通じて下位互換性を確保し、Androidアプリ開発を加速します。
  • ViewModelは画面回転に耐え、Activity再作成時にデータを保持し、ユーザー入力の損失を防ぎます。
  • Room — SQLite上のORMレイヤーで、コンパイル時のSQLクエリ検証とコルーチンサポートを提供します。
  • Navigation Componentは型安全な引数を持つナビゲーショングラフを通じて画面間の遷移を管理します。
  • LifecycleはコントローラーのボイラープレートコードなしでActivity/Fragmentのライフサイクルイベントに反応できます。

Android Jetpackとは?

Android Jetpackは、2018年のGoogle I/Oで発表されたGoogleのライブラリ、ツール、アーキテクチャガイドラインのコレクションです。JetpackはSupport LibraryとAndroid Architecture Componentsを置き換え、それらを単一のエコシステムに統合しました。Jetpack以前は、各Androidライブラリが独立して更新され、バージョン競合が発生していました。Jetpackは単一のAndroidX識別子の下でバージョンを同期し、マイナーパッチ付きの安定したメジャーバージョンのモデルを導入しました。

Jetpackライブラリは4つのカテゴリに分類されます:Architecture(ViewModel、Room、Navigation、WorkManager)、UI(Fragment、Compose、Animation、Palette)、Behavior(DownloadManager、Media、Permissions、Sharing)、Foundation(Android KTX、Multidex、AppCompat)。各カテゴリは、データ管理からユーザーインターフェースまで、アプリケーションの特定のレイヤーのタスクを処理します。

Jetpackの哲学

Googleは3つのJetpackの原則を推進しています:accelerate development(ボイラープレートを減らし、ビジネスロジックを増やす)、eliminate boilerplate(ViewModelは手動状態保存を排除し、RoomはSQLiteOpenHelperの記述を排除)、build with confidence(各ライブラリはリリース前に15,000以上のテストを通過)。Android Developers (2026)によると、Jetpackを使用するアプリはライフサイクル関連のクラッシュが30%減少します。

基盤としてのAndroidX

すべてのJetpackライブラリはAndroidX識別子(androidx.*などのアーティファクト)の下で配布されます。AndroidXはSupport Library(com.android.support.*などのアーティファクト)を置き換え、モノリシックライブラリを独立したバージョニングを持つモジュラーアーティファクトに分割しました。AndroidXへの移行は、gradle.propertiesandroid.useAndroidX=trueオプションを介して行われ、Android Studioが自動的にインポートを変換します。

アーキテクチャコンポーネント:ViewModel、Lifecycle、LiveData

ViewModelはJetpackアーキテクチャの中心的なコンポーネントで、UIデータを保存します。画面回転時に破棄されるActivityとは異なり、ViewModelはメモリに残ります。ユーザーがフォームに入力し、電話を回転させてもデータは失われません。ViewModelは、LifecycleOwner(ActivityまたはFragment)が永続的にライフサイクルを終了(finish)すると自動的にクリアされます。

kotlin
class ProfileViewModel : ViewModel() {

    private val _userName = MutableLiveData<String>()
    val userName: LiveData<String> = _userName

    fun loadProfile(userId: String) {
        viewModelScope.launch {
            val user = repository.getUser(userId)
            _userName.value = user.name
        }
    }
}

@OptIn(ExperimentalLifecycleApi::class)
class MyObserver : LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    fun onStart() {
        println("画面起動")
    }
}

LiveData — ライフサイクルを尊重する観測可能なデータコンテナです。画面が表示されていない場合(onStop)、LiveDataは更新を送信しません。これにより、メモリリークや存在しないActivityの更新試行時のクラッシュを防ぎます。Lifecycle — 現在の状態(CREATED、STARTED、RESUMED)を保存し、他のコンポーネントが状態変更を購読できるようにするクラスです。ViewModel、LiveData、Lifecycleは、リアクティブなAndroidアーキテクチャの基盤を形成します。

ViewModelScopeとコルーチン

viewModelScope — ViewModelのライフサイクルに結び付けられた組み込みのCoroutineScopeです。このスコープで起動されたすべてのコルーチンは、ViewModelがクリアされると自動的にキャンセルされます。これにより、各ViewModelでのDisposableとCompositeDisposableの手動管理が不要になります。viewModelScopeを使用するには、androidx.lifecycle:lifecycle-viewmodel-ktxの依存関係が必要です。

Room:Androidでのデータベース操作

Roomは、SQLite上に抽象レイヤーを提供するJetpack ORMライブラリです。生のSQLクエリを記述し、手動でCursorをオブジェクトに変換する代わりに、開発者はEntity(テーブル)、DAO(Data Access Object)、Database(エントリポイント)を宣言します。Roomは@Queryアノテーションを介してコンパイル時にSQLクエリを検証します。テーブルやカラムが存在しない場合、ビルドは明確なエラーで失敗します。

kotlin
@Entity
data class User(
    @PrimaryKey val id: String,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM User WHERE id = :userId")
    suspend fun getUser(userId: String): User?

    @Insert
    suspend fun insertUser(user: User)
}

@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Entity Userは3つのカラムを持つテーブルを記述します。DAOはコルーチンで動作するためのsuspend関数を宣言し、クエリは自動的にバックグラウンドスレッドで実行されます。Room@Migrationアノテーションを介したマイグレーションをサポートしています。開発者はバージョン間の移行SQLスクリプトを記述し、Roomはデータ損失なしにそれを実行します。マイグレーションがない場合、RoomはIllegalStateExceptionをスローし、スキーマ更新時の偶発的なデータ損失からプロジェクトを保護します。

TypeConvertersとリレーションシップ

Roomはプリミティブ型とそのラッパーのみを保存します。リスト、Date、カスタムオブジェクトを保存するには、@TypeConverter — 型をString(JSON)またはLong(timestamp)に変換する静的メソッドを使用します。テーブル間のリレーションシップは、@Relationアノテーションを持つネストされたオブジェクトと、効率的なjoinクエリのための@Transaction付きのヘルパーPOJOクラスを介してモデル化されます。

Navigation Component — 画面間の遷移を管理するJetpackライブラリです。手動でFragmentTransactionを呼び出す代わりに、開発者はナビゲーショングラフ(デスティネーションノードを持つXMLファイル)を作成し、システムは型安全な遷移メソッドを持つDirectionsクラスを生成します。Navigation Componentは、バックスタック、ディープリンク、画面間の引数渡しを正しく処理します。

kotlin
// nav_graph.xml
// 
//     android:name=".ProfileFragment">
//     
//         android:defaultValue="-1"
//         app:argType="integer" />
// 

// フラグメントコード内:
class ProfileFragment : Fragment() {
    private val args: ProfileFragmentArgs by navArgs()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        loadProfile(args.userId)
    }
}

userId引数は、型指定(integer)とデフォルト値とともにナビゲーショングラフで渡されます。ProfileFragmentArgsクラスはNavigation Safe Argsプラグインによって自動生成され、正しいKotlin型を持つすべての引数を含みます。ディープリンクはグラフで設定されます:app:deepLink="app://profile/{userId}"。Navigation ComponentがURLを解析し、ユーザーがインターフェースをナビゲートしたかのようにバックスタックを作成します。

ボトムナビゲーションと条件付きナビゲーション

Navigation ComponentはNavControllerを介してBottomNavigationViewと統合します。各メニュー項目はグラフ内のデスティネーションにリンクされます。タブの切り替えはフラグメントを再作成せず、Navigation ComponentはNavBackStackEntryを介して状態を保持します。条件付きナビゲーション(認証されていない場合にログインを表示)には、onCreateでのチェックとともにnavController.navigate(condition)を使用します。

AndroidX:次世代のSupport Library

AndroidXは、各ライブラリが独立したバージョンを持つ独自のアーティファクトを取得するように再設計されたSupport Libraryのアーキテクチャです。単一のcom.android.support:appcompat-v7:28.0.0の代わりに、AndroidXはandroidx.appcompat:appcompat:1.7.0androidx.recyclerview:recyclerview:1.4.0などを提供します。これにより、異なる依存関係が異なるバージョンのSupport Libraryを引き寄せて競合を引き起こす問題が解消されました。

AndroidXへの移行は、Android Studio 3.2+でメニューのRefactor → Migrate to AndroidXを介して自動的に実行されます。StudioはJava/Kotlinファイル、マニフェスト、リソースのすべてのインポートを置き換えます。下位互換性はAndroidXの主な利点です。ライブラリはAndroid 5.0(API 21)以上で動作し、Google Play Console (2025)によるとアクティブデバイスの97%をカバーします。

主要なAndroidXアーティファクト

最もよく使用されるアーティファクト:appcompat(ダークテーマ、古いAPIでのMaterial Design)、recyclerview(ViewHolderによる適応型リスト)、constraintlayout(フラットな階層構造の柔軟なコンテナ)、cardview(Material Designカード)、preference(Materialスタイルの設定画面)。各アーティファクトは独立してバージョン管理され、パッケージ全体を更新せずに修正を迅速に提供できます。

その他の重要なJetpackライブラリ

ArchitectureとAndroidXに加えて、Jetpackにはモバイル開発の一般的なタスクのための多くの専門ライブラリが含まれています。WorkManager — 実行が保証されたバックグラウンドタスク(同期、ログアップロード)用で、定期タスクや遅延タスク、ネットワークやバッテリーの制約をサポートします。DataStore — コルーチンベースのSharedPreferencesの代替で、型付きプロパティ(Preferences DataStore)とProtocol Buffers(Proto DataStore)をサポートします。

  • Hilt — DaggerベースのDIフレームワークで、@HiltViewModel、@Inject、@Moduleアノテーションによる依存性注入を簡素化します。ViewModelおよびNavigationとの組み込み統合を提供します。
  • Paging 3 — RemoteMediator(ネットワーク+キャッシュ)、StateFlow、Composeをサポートする、ネットワーク/DBからのページネーションデータローディング用ライブラリ。
  • CameraX — 統一されたCameraControllerインターフェースを介してメーカーの違い(Samsung、Xiaomi、Honor)を抽象化するカメラ操作用API。
  • Security Crypto — Android Keystoreのマスターキーを使用したAES-256ベースのEncryptedSharedPreferencesおよびEncryptedFileを介したデータ暗号化。

各ライブラリには独自の最小SDKとアーティファクトがあります。Googleはメジャーバージョンを年に1回(Androidリリースに合わせて)リリースし、セキュリティパッチを四半期ごとにリリースします。推奨 — APKサイズの増加を避けるために、必要なライブラリのみを含めてください。Jetpackコレクション全体(すべてのアーティファクト)は20 MB以上ですが、一般的なアプリは5~7のライブラリを使用し、APKに3~5 MBを追加します。

よくある質問

Support LibraryからAndroidXに移行する必要がありますか?

はい、Googleは2019年にSupport Libraryのサポートを終了しました。すべての新しいJetpackライブラリとGoogle Play ServicesにはAndroidXが必要です。移行はAndroid Studioを介して30~60分で完了します。

JetpackはJavaで使用できますか、それともKotlinのみですか?

JetpackはJavaと完全に互換性があります。ただし、多くの機能(viewModelScope、コルーチン、Compose)はKotlinでのみ利用可能です。Googleは新しいプロジェクトにはKotlinを推奨しています。

ViewModelとonSaveInstanceStateの違いは?

ViewModelはメモリ内にオブジェクトを保存し、画面回転に耐えます。onSaveInstanceStateはシリアル化可能なプリミティブ(Bundle)にのみ適しています。ViewModelはプロセスが強制終了されたときに保存されません。そのためにはSavedStateHandleが必要です。

コルーチンの代わりにWorkManagerを使用するのはいつですか?

WorkManager — アプリが閉じられた後でも実行する必要があるタスク(同期、ログアップロード、分析送信)用。コルーチン — 画面に結び付けられたタスク用。

SharedPreferencesからDataStoreに移行する方法は?

SharedPreferencesのインポートをDataStoreに置き換えます。dataStore.data.first()(suspend)で読み取り、dataStore.edit { ... }で書き込みます。DataStoreは非同期でANRから保護されています。

まとめ

  • Android Jetpack — API 21までの下位互換性を持つAndroidXの下で統合された、Android開発のための50以上のライブラリセット。
  • ViewModelは画面回転に耐えUIデータを保持し、LifecycleはActivity/Fragmentの状態変更をコンポーネントに通知します。
  • Room — コンパイル時クエリ検証、マイグレーション、コルーチンサポートを備えたSQLite上の型安全ORM。
  • Navigation Componentは型安全な引数と自動ディープリンクを持つグラフを介して遷移を管理します。
  • WorkManagerはアプリ終了後もバックグラウンドタスクの実行を保証し、DataStoreはSharedPreferencesを置き換えます。
  • JetpackはArchitecture、UI、Behavior、Foundationの4つのカテゴリに分けられ、それぞれが独自のアプリケーションレイヤーをカバーします。
  • Jetpackを使用するアプリはライフサイクル関連のクラッシュが30%減少し、既製のアーキテクチャソリューションにより開発が迅速化されます。

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

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

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

こちらもお読みください