タイトル: Androidアプリケーション
SEOタイトル: Android アプリ開発完全ガイド — Kotlin/Compose/Jetpack/Room/Retrofit
| この記事の要点 |
|
Android アプリケーションとは
Android アプリは、Google が提供する Android OS 上で動作するモバイルアプリケーションです。世界のスマートフォン OS シェアの約 70% を占め、Play Store を通じて配信されます。
アプリの正体は .apk / .aab (Android App Bundle) というパッケージファイルで、内部に Dalvik bytecode (Android 5.0 以降は ART に変換) と各種リソース (画像 / レイアウト XML / 文字列) が含まれます。
開発環境
| 項目 | 内容 |
|---|---|
| IDE | Android Studio (IntelliJ IDEA ベース、無料・公式) |
| SDK | Android SDK (Android Studio に同梱)。API レベル別に切替可能 |
| ビルドツール | Gradle (Kotlin DSL / Groovy DSL) |
| 言語 | Kotlin (推奨) / Java |
| 動作確認 | Android Emulator / 実機 (USB デバッグ ON) |
| デバッグ | ADB (Android Debug Bridge) |
| 配信 | Google Play Console (登録料 25 USD、買い切り) |
主要コンポーネント
| コンポーネント | 役割 |
|---|---|
| Activity | 画面 1 枚を表す。最も基本的な UI 単位 |
| Fragment | Activity 内で再利用可能な UI 部品。タブ画面・大画面対応に |
| Service | UI を持たないバックグラウンド処理 (再生・同期など) |
| BroadcastReceiver | システムイベント (起動、電源、通知) を受信 |
| ContentProvider | アプリ間データ共有 (連絡先、写真など) |
典型的なアプリ構造 (Kotlin)
// MainActivity.kt
package com.example.myapp
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.foundation.layout.*
import androidx.compose.ui.unit.dp
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
GreetingScreen()
}
}
}
}
@Composable
fun GreetingScreen() {
var name by remember { mutableStateOf("") }
Column(Modifier.padding(16.dp)) {
TextField(value = name, onValueChange = { name = it }, label = { Text("名前") })
Spacer(Modifier.height(16.dp))
Text("こんにちは、$name さん!")
}
}
AndroidManifest.xml
アプリのメタ情報・宣言ファイル。Activity の登録、権限、最低 API レベルなどを指定します。
build.gradle (Module レベル)
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
namespace 'com.example.myapp'
compileSdk 34
defaultConfig {
applicationId "com.example.myapp"
minSdk 24 // Android 7.0 以上
targetSdk 34 // Android 14
versionCode 1
versionName "1.0"
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion "1.5.4"
}
}
dependencies {
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.activity:activity-compose:1.8.2'
implementation platform('androidx.compose:compose-bom:2024.02.00')
implementation 'androidx.compose.material3:material3'
// Room (ローカル DB)
implementation 'androidx.room:room-runtime:2.6.1'
implementation 'androidx.room:room-ktx:2.6.1'
kapt 'androidx.room:room-compiler:2.6.1'
// Retrofit (HTTP)
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-moshi:2.9.0'
// Hilt (DI)
implementation 'com.google.dagger:hilt-android:2.50'
kapt 'com.google.dagger:hilt-compiler:2.50'
}
API レベルと Android バージョン
| Android | API レベル | リリース年 |
|---|---|---|
| 7.0 Nougat | 24 | 2016 |
| 8.0 Oreo | 26 | 2017 |
| 9 Pie | 28 | 2018 |
| 10 | 29 | 2019 |
| 11 | 30 | 2020 |
| 12 / 12L | 31 / 32 | 2021 |
| 13 Tiramisu | 33 | 2022 |
| 14 UpsideDownCake | 34 | 2023 |
Play Store に出すアプリは毎年 targetSdk を最新付近に保つ義務があります (例: 2024 年から targetSdk 34 以上が必須)。
Lifecycle (Activity)
onCreate ─→ onStart ─→ onResume ─→ [実行中] ─→ onPause ─→ onStop ─→ onDestroy
↑ ↓
onResume ←── onPause (戻ってきた場合)
- onCreate : 1 回だけ。View 構築・データ取得初期化
- onStart : 画面が見えるようになった
- onResume : フォアグラウンドに来た (操作可能)
- onPause : 別画面が手前に来た (まだ見える)
- onStop : 完全に裏に行った
- onDestroy : 破棄される直前 (回転や finish() で発生)
Jetpack ライブラリ群
| ライブラリ | 用途 |
|---|---|
| Jetpack Compose | 宣言的 UI ツールキット (React に近い感覚) |
| Room | SQLite ラッパー、コンパイル時チェック付き ORM |
| ViewModel | UI 状態保持、画面回転で破棄されない |
| LiveData / Flow | 非同期データのリアクティブ伝搬 |
| Navigation | 画面遷移の宣言的管理 |
| WorkManager | バックグラウンド非同期ジョブ |
| Hilt | Dagger ベースの DI フレームワーク |
| Paging 3 | 無限スクロール/ページング |
| DataStore | SharedPreferences 後継、型安全 |
Retrofit による HTTP 呼び出し
data class User(val id: Int, val name: String, val email: String)
interface ApiService {
@GET("users")
suspend fun getUsers(): List
@GET("users/{id}")
suspend fun getUser(@Path("id") id: Int): User
@POST("users")
suspend fun createUser(@Body user: User): User
}
val retrofit = Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(MoshiConverterFactory.create())
.build()
val api = retrofit.create(ApiService::class.java)
// 利用 (Coroutines)
lifecycleScope.launch {
val users = api.getUsers()
Log.d("API", users.toString())
}
Play Store 配信フロー
- 署名鍵生成:
keytoolで keystore 作成 - リリースビルド: Android Studio → Build → Generate Signed Bundle/APK で
.aab出力 - Play Console: 25 USD のデベロッパー登録 (1 回のみ)
- アプリ作成: ストア掲載情報、スクリーンショット、説明文を準備
- 内部/クローズド/オープン/製品版のテスト段階を経て公開
- 審査: 通常数時間〜数日 (新規アカウントは長め)
FAQ
Q: Kotlin と Java、どちらで始めるべき?
A: Kotlin 一択です。Google 公式ドキュメント・サンプル・Jetpack ライブラリのすべてが Kotlin 前提で書かれており、コード量も Java の 30〜50% 減ります。
Q: Compose と XML レイアウト、どちらを学ぶべき?
A: 新規プロジェクトは Compose。ただし既存アプリ保守では XML + View もまだ多数現役なので、両方知っておくと有利です。
Q: iOS と同時開発したい (クロスプラットフォーム)
A: Kotlin Multiplatform Mobile (KMM) / Flutter (Dart) / React Native (JS) の 3 択。UI 共有度は Flutter > React Native > KMM、ネイティブ感は逆順です。