Jetpackは、開発を簡素化し、安定したアプリケーションの作成を高速化するGoogleのAndroidライブラリセットです。ViewModel、Room、Navigationなどのコンポーネントは、ライフサイクル管理、データ保存、ナビゲーションといった典型的なタスクを解決します。Android Developers (2026)によると、Jetpackは50以上のライブラリをカバーし、それぞれがAndroidX(Support Libraryを置き換えた互換性ライブラリ)を通じてAndroid 5.0(API 21)との下位互換性を持ちます。
重要ポイント
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)。各カテゴリは、データ管理からユーザーインターフェースまで、アプリケーションの特定のレイヤーのタスクを処理します。
Googleは3つのJetpackの原則を推進しています:accelerate development(ボイラープレートを減らし、ビジネスロジックを増やす)、eliminate boilerplate(ViewModelは手動状態保存を排除し、RoomはSQLiteOpenHelperの記述を排除)、build with confidence(各ライブラリはリリース前に15,000以上のテストを通過)。Android Developers (2026)によると、Jetpackを使用するアプリはライフサイクル関連のクラッシュが30%減少します。
すべてのJetpackライブラリはAndroidX識別子(androidx.*などのアーティファクト)の下で配布されます。AndroidXはSupport Library(com.android.support.*などのアーティファクト)を置き換え、モノリシックライブラリを独立したバージョニングを持つモジュラーアーティファクトに分割しました。AndroidXへの移行は、gradle.propertiesのandroid.useAndroidX=trueオプションを介して行われ、Android Studioが自動的にインポートを変換します。
ViewModelはJetpackアーキテクチャの中心的なコンポーネントで、UIデータを保存します。画面回転時に破棄されるActivityとは異なり、ViewModelはメモリに残ります。ユーザーがフォームに入力し、電話を回転させてもデータは失われません。ViewModelは、LifecycleOwner(ActivityまたはFragment)が永続的にライフサイクルを終了(finish)すると自動的にクリアされます。
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 — ViewModelのライフサイクルに結び付けられた組み込みのCoroutineScopeです。このスコープで起動されたすべてのコルーチンは、ViewModelがクリアされると自動的にキャンセルされます。これにより、各ViewModelでのDisposableとCompositeDisposableの手動管理が不要になります。viewModelScopeを使用するには、androidx.lifecycle:lifecycle-viewmodel-ktxの依存関係が必要です。
Roomは、SQLite上に抽象レイヤーを提供するJetpack ORMライブラリです。生のSQLクエリを記述し、手動でCursorをオブジェクトに変換する代わりに、開発者はEntity(テーブル)、DAO(Data Access Object)、Database(エントリポイント)を宣言します。Roomは@Queryアノテーションを介してコンパイル時にSQLクエリを検証します。テーブルやカラムが存在しない場合、ビルドは明確なエラーで失敗します。
@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をスローし、スキーマ更新時の偶発的なデータ損失からプロジェクトを保護します。
Roomはプリミティブ型とそのラッパーのみを保存します。リスト、Date、カスタムオブジェクトを保存するには、@TypeConverter — 型をString(JSON)またはLong(timestamp)に変換する静的メソッドを使用します。テーブル間のリレーションシップは、@Relationアノテーションを持つネストされたオブジェクトと、効率的なjoinクエリのための@Transaction付きのヘルパーPOJOクラスを介してモデル化されます。
Navigation Component — 画面間の遷移を管理するJetpackライブラリです。手動でFragmentTransactionを呼び出す代わりに、開発者はナビゲーショングラフ(デスティネーションノードを持つXMLファイル)を作成し、システムは型安全な遷移メソッドを持つDirectionsクラスを生成します。Navigation Componentは、バックスタック、ディープリンク、画面間の引数渡しを正しく処理します。
// 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のアーキテクチャです。単一のcom.android.support:appcompat-v7:28.0.0の代わりに、AndroidXはandroidx.appcompat:appcompat:1.7.0、androidx.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%をカバーします。
最もよく使用されるアーティファクト:appcompat(ダークテーマ、古いAPIでのMaterial Design)、recyclerview(ViewHolderによる適応型リスト)、constraintlayout(フラットな階層構造の柔軟なコンテナ)、cardview(Material Designカード)、preference(Materialスタイルの設定画面)。各アーティファクトは独立してバージョン管理され、パッケージ全体を更新せずに修正を迅速に提供できます。
ArchitectureとAndroidXに加えて、Jetpackにはモバイル開発の一般的なタスクのための多くの専門ライブラリが含まれています。WorkManager — 実行が保証されたバックグラウンドタスク(同期、ログアップロード)用で、定期タスクや遅延タスク、ネットワークやバッテリーの制約をサポートします。DataStore — コルーチンベースのSharedPreferencesの代替で、型付きプロパティ(Preferences DataStore)とProtocol Buffers(Proto DataStore)をサポートします。
各ライブラリには独自の最小SDKとアーティファクトがあります。Googleはメジャーバージョンを年に1回(Androidリリースに合わせて)リリースし、セキュリティパッチを四半期ごとにリリースします。推奨 — APKサイズの増加を避けるために、必要なライブラリのみを含めてください。Jetpackコレクション全体(すべてのアーティファクト)は20 MB以上ですが、一般的なアプリは5~7のライブラリを使用し、APKに3~5 MBを追加します。
よくある質問
はい、Googleは2019年にSupport Libraryのサポートを終了しました。すべての新しいJetpackライブラリとGoogle Play ServicesにはAndroidXが必要です。移行はAndroid Studioを介して30~60分で完了します。
JetpackはJavaと完全に互換性があります。ただし、多くの機能(viewModelScope、コルーチン、Compose)はKotlinでのみ利用可能です。Googleは新しいプロジェクトにはKotlinを推奨しています。
ViewModelはメモリ内にオブジェクトを保存し、画面回転に耐えます。onSaveInstanceStateはシリアル化可能なプリミティブ(Bundle)にのみ適しています。ViewModelはプロセスが強制終了されたときに保存されません。そのためにはSavedStateHandleが必要です。
WorkManager — アプリが閉じられた後でも実行する必要があるタスク(同期、ログアップロード、分析送信)用。コルーチン — 画面に結び付けられたタスク用。
SharedPreferencesのインポートをDataStoredataStore.data.first()(suspend)で読み取り、dataStore.edit { ... }で書き込みます。DataStoreは非同期でANRから保護されています。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。