Day2: Android Studioを使いこなす - プロジェクト作成からデバッグまでの完全ガイド
はじめに
前回の環境構築に続き、今回はAndroid Studioの基本操作をマスターしていきます。単なる操作説明にとどまらず、実際の開発で役立つテクニックや効率的な作業方法も併せて解説します。
この記事を読み終える頃には、Android Studioを使って基本的なアプリを作成し、デバッグまでできるようになっているはずです。
対象読者
- Android Studio初心者の方
- IDEの使い方に不安がある方
- 効率的な開発フローを学びたい方
- チームメンバーにAndroid Studioを教える必要がある方
Step 1: Android Studioの起動とプロジェクト作成
Welcome画面の理解
Android Studioを起動すると、Welcome画面が表示されます。ここでは以下のオプションが利用できます:
- New Project: 新規プロジェクト作成
- Open: 既存プロジェクトを開く
- Get from VCS: Git等からプロジェクトをクローン
- Import: 他の形式からプロジェクトをインポート
プロジェクトテンプレートの選択
「New Project」をクリックすると、テンプレート選択画面が表示されます。
2025年推奨テンプレート
テンプレート | 用途 | 推奨度 | 説明 |
---|---|---|---|
Empty Activity | 学習・プロトタイプ | ⭐⭐⭐⭐⭐ | 最小構成、カスタマイズしやすい |
Empty Views Activity | 従来のView系開発 | ⭐⭐⭐ | XML Layoutを使用 |
Basic Activity | 実用アプリ | ⭐⭐⭐⭐ | AppBar、FAB付き |
Bottom Navigation | タブ形式アプリ | ⭐⭐⭐⭐ | Instagram型UI |
初学者への推奨: 「Empty Activity」を選択してください。これにより、Jetpack Composeを使った最新のAndroid開発を学べます。
プロジェクト設定の詳細解説
必須設定項目
Name: MyFirstApp
Package name: com.yourname.myfirstapp
Save location: ~/AndroidStudioProjects/MyFirstApp
Language: Kotlin
Minimum SDK: API 24 (Android 7.0)
Build configuration language: Kotlin DSL (build.gradle.kts)
各項目の詳細説明
Package name(パッケージ名)
- アプリの一意識別子(世界で唯一のID)
- Google Playで公開時に変更不可
- 逆ドメイン記法を推奨:
com.会社名.アプリ名
- 例:
com.google.gmail
、com.spotify.music
Minimum SDK の選択指針
API Level | Android Version | 市場シェア(2025年) | 推奨用途 |
---|---|---|---|
API 24 | 7.0 | ~95% | 一般的なアプリ |
API 26 | 8.0 | ~90% | モダン機能重視 |
API 30 | 11.0 | ~70% | 最新機能活用 |
💡 プロTips: API 24を選択すると、幅広いユーザーにリーチできます。
Step 2: Android Studioインターフェースの完全理解
メイン画面の構成要素
1. プロジェクトツールウィンドウ(左側)
MyFirstApp/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/yourname/myfirstapp/
│ │ │ │ ├── MainActivity.kt
│ │ │ │ └── ui/theme/
│ │ │ │ ├── Color.kt
│ │ │ │ ├── Theme.kt
│ │ │ │ └── Type.kt
│ │ │ ├── res/
│ │ │ │ ├── values/
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ └── themes.xml
│ │ │ │ └── mipmap-*/
│ │ │ │ └── ic_launcher*
│ │ │ └── AndroidManifest.xml
│ │ ├── test/
│ │ └── androidTest/
│ ├── build.gradle.kts
│ └── proguard-rules.pro
├── gradle/
└── build.gradle.kts (Project)
🔍 2025年現在の実際の構造
存在するファイル・フォルダ:
-
MainActivity.kt
: メインのアクティビティ -
ui/theme/
: Jetpack Composeテーマ定義(Kotlinファイル) -
res/values/strings.xml
: 文字列リソース -
res/values/themes.xml
: 従来ビューシステム用テーマ -
res/mipmap-*/
: アプリアイコン
存在しないフォルダ(理由も説明):
-
res/layout/
: ❌ Jetpack Compose使用のため不要 -
res/drawable/
: ❌ リソース未追加のため未作成 -
res/values/colors.xml
: ❌ Composeテーマ(Color.kt)で管理 -
xml/
: ❌ バックアップルール等未使用のため未作成
なぜ layout/ と drawable/ が存在しないのか?
1. Jetpack Compose への移行
// 従来のXMLレイアウト(res/layout/が必要)
setContentView(R.layout.activity_main)
// 現在のJetpack Compose(レイアウトファイル不要)
setContent {
MyFirstAppTheme {
MainScreen()
}
}
2. 必要時に自動作成される
これらのフォルダは、実際にリソースを追加した時に自動的に作成されます:
# 画像を追加すると drawable/ が自動作成される
app/src/main/res/drawable/
├── ic_star.xml
└── background.jpg
# XMLレイアウトを追加すると layout/ が自動作成される
app/src/main/res/layout/
└── custom_layout.xml
2. エディタエリア(中央)
- コードエディタ: Kotlin/Java コードの編集
- デザインエディタ: Jetpack Compose プレビュー
- レイアウトエディタ: XML レイアウトの視覚的編集
3. ツールウィンドウ(右側・下部)
主要なツールウィンドウ:
- Logcat: ログ出力とデバッグ情報
- Build: ビルド結果とエラー情報
- Run: アプリ実行時の出力
- Terminal: コマンドライン操作
- TODO: コード内のTODOコメント一覧
効率的なウィンドウ管理
ショートカットキー(Mac)
操作 | ショートカット | 説明 |
---|---|---|
プロジェクトビュー表示/非表示 | ⌘ + 1 |
プロジェクト構造の確認 |
ビルド結果表示 | ⌘ + 2 |
ビルドエラーの確認 |
実行結果表示 | ⌘ + 4 |
アプリ実行ログの確認 |
Logcat表示 | ⌘ + 6 |
デバッグログの確認 |
ターミナル表示 | ⌘ + 12 |
コマンド実行 |
Step 3: 初めてのアプリ実行とデバッグ
エミュレータでの実行
1. AVDの確認と起動
# コマンドラインからの確認
emulator -list-avds
# 特定のエミュレータを起動
emulator -avd Pixel_4_API_33
2. Android Studio からの実行
- ツールバーのデバイス選択ドロップダウンをクリック
- 使用するエミュレータまたは実機を選択
- **Run ボタン(▶️)**をクリック、または
⌘ + R
実機での実行とデバッグ
実機接続の準備
# ADBデバイス認識確認
adb devices
# 期待される出力例
List of devices attached
RF8M802WD5G device
USB デバッグが認識されない場合
Android 端末側での確認:
- 「開発者向けオプション」が有効か確認
- 「USBデバッグ」がオンか確認
- 「USB設定」を「ファイル転送/Android Auto」に変更
Mac側での確認:
# USB デバイスの認識確認
system_profiler SPUSBDataType | grep -i android
# ADB の再起動
adb kill-server
adb start-server
ビルドプロセスの理解
Gradle ビルドの仕組み
Android Studioでは、Gradleというビルドシステムが使用されます。
// app/build.gradle.kts の重要な設定
android {
compileSdk = 34
defaultConfig {
applicationId = "com.yourname.myfirstapp"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"
}
}
ビルドバリアント
Android開発では、複数のビルド設定を管理できます:
- debug: 開発用(デバッグ情報付き)
- release: リリース用(最適化済み)
// カスタムビルドタイプの追加例
buildTypes {
debug {
isDebuggable = true
applicationIdSuffix = ".debug"
}
release {
isMinifyEnabled = false
proguardFiles("proguard-android-optimize.txt", "proguard-rules.pro")
}
}
Step 4: コードエディタの活用方法
自動補完とコード生成
Live Templates の活用
Android Studio には強力なコード生成機能があります:
ショートカット | 生成されるコード | 用途 |
---|---|---|
fun + Tab |
Kotlin関数 | 関数定義 |
logd + Tab |
Log.d() | デバッグログ |
toast + Tab |
Toast表示 | ユーザー通知 |
コード自動生成(⌘ + N)
- Constructor: コンストラクタ生成
- Getter and Setter: プロパティアクセサ生成
- Override Methods: オーバーライドメソッド生成
リファクタリング機能
安全なコード変更
操作 | ショートカット | 説明 |
---|---|---|
名前変更 | ⇧ + F6 |
変数・クラス名の一括変更 |
メソッド抽出 | ⌥ + ⌘ + M |
選択コードを関数化 |
変数抽出 | ⌥ + ⌘ + V |
式を変数に置換 |
// リファクタリング前
button.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("message", "Hello")
startActivity(intent)
}
// メソッド抽出後
button.setOnClickListener {
navigateToSecondActivity("Hello")
}
private fun navigateToSecondActivity(message: String) {
val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("message", message)
startActivity(intent)
}
Step 5: デバッグとログ機能の活用
Logcat の効果的な使用方法
ログレベルの理解
import android.util.Log
class MainActivity : AppCompatActivity() {
companion object {
private const val TAG = "MainActivity"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ログレベル別の使い分け
Log.v(TAG, "Verbose: 詳細な情報")
Log.d(TAG, "Debug: デバッグ情報")
Log.i(TAG, "Info: 一般的な情報")
Log.w(TAG, "Warning: 警告")
Log.e(TAG, "Error: エラー情報")
}
}
Logcat フィルターの活用
タグによるフィルタリング:
tag:MainActivity
ログレベルによるフィルタリング:
- Error以上: エラーとクラッシュのみ表示
- Warn以上: 警告以上を表示
- Info以上: 重要な情報以上を表示
正規表現フィルター:
.*MainActivity.*onCreate.*
ブレークポイントとステップ実行
ブレークポイントの設定
- コードの行番号左側をクリック
- 赤い点が表示されれば設定完了
- デバッグ実行(🐛ボタン)でブレークポイントで停止
ステップ実行の種類
操作 | ショートカット | 説明 |
---|---|---|
Step Over | F8 |
次の行へ(関数内に入らない) |
Step Into | F7 |
関数内に入る |
Step Out | ⇧ + F8 |
現在の関数から出る |
Resume | ⌘ + ⌥ + R |
実行再開 |
実践的なデバッグ例
class MainActivity : AppCompatActivity() {
private var counter = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyFirstAppTheme {
CounterScreen()
}
}
}
@Composable
fun CounterScreen() {
var count by remember { mutableStateOf(0) }
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = "カウント: $count",
style = MaterialTheme.typography.headlineMedium
)
Spacer(modifier = Modifier.height(16.dp))
Button(
onClick = {
count++
Log.d("CounterScreen", "カウントが更新されました: $count")
}
) {
Text("カウントアップ")
}
}
}
}
Step 6: プロジェクト構造の深い理解
app/src/main/ 以下の重要ファイル
AndroidManifest.xml
アプリの設定ファイルです。以下の重要な設定が含まれます:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 権限の宣言 -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MyFirstApp">
<!-- メインアクティビティの宣言 -->
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
build.gradle.kts (app level)
アプリレベルのビルド設定:
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
implementation("androidx.activity:activity-compose:1.8.2")
implementation("androidx.compose.ui:ui:1.5.8")
implementation("androidx.compose.ui:ui-tooling-preview:1.5.8")
implementation("androidx.compose.material3:material3:1.2.0")
// テスト用ライブラリ
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}
リソース管理の最適化
strings.xml での多言語対応準備
<!-- res/values/strings.xml -->
<resources>
<string name="app_name">My First App</string>
<string name="counter_label">カウント: %1$d</string>
<string name="increment_button">カウントアップ</string>
</resources>
colors.xml でのデザインシステム構築
注意: Empty Activity テンプレートでは colors.xml
は作成されません。Jetpack Composeでは、色の定義は ui/theme/Color.kt
で行います:
// app/src/main/java/com/yourname/myfirstapp/ui/theme/Color.kt
package com.yourname.myfirstapp.ui.theme
import androidx.compose.ui.graphics.Color
val Purple80 = Color(0xFFD0BCFF)
val PurpleGrey80 = Color(0xFFCCC2DC)
val Pink80 = Color(0xFFEFB8C8)
val Purple40 = Color(0xFF6650a4)
val PurpleGrey40 = Color(0xFF625b71)
val Pink40 = Color(0xFF7D5260)
従来のXMLベースの色定義が必要な場合は、手動で作成します:
<!-- 手動作成: res/values/colors.xml -->
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>
Step 7: 効率的な開発ワークフロー
ホットリロードとライブプレビュー
Jetpack Compose プレビュー
@Composable
fun CounterScreen() {
// ... コンポーネントの実装
}
@Preview(showBackground = true)
@Composable
fun CounterScreenPreview() {
MyFirstAppTheme {
CounterScreen()
}
}
プレビューの活用方法
-
@Preview
アノテーションを追加 - エディタ右側の「Split」モードを選択
- リアルタイムでUIの変更を確認
ビルド時間の最適化
gradle.properties の最適化設定
# 並列実行の有効化
org.gradle.parallel=true
org.gradle.configureondemand=true
# メモリ設定
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m
# Kotlin インクリメンタルコンパイル
kotlin.incremental=true
kotlin.incremental.useClasspathSnapshot=true
# Android Gradle Plugin キャッシュ
android.enableR8.fullMode=true
android.useAndroidX=true
Step 8: よくある問題とトラブルシューティング
🚨 ビルドエラーの解決方法
Gradle Sync エラー
エラー例: "Failed to resolve: androidx.core:core-ktx:1.9.0"
解決手順:
# 1. キャッシュクリア
./gradlew clean
# 2. Gradle Wrapper 更新
./gradlew wrapper --gradle-version=8.2
# 3. Android Studio側でのクリア
# File → Invalidate Caches → Invalidate and Restart
メモリ不足エラー
エラー例: "Out of memory error"
解決方法:
// gradle.properties に追加
org.gradle.jvmargs=-Xmx6g -XX:MaxPermSize=512m
🚨 エミュレータの問題
起動が遅い場合
# コールドブート無効化(高速化)
emulator -avd Pixel_4_API_33 -no-boot-anim -no-audio
# GPU加速の確認
emulator -avd Pixel_4_API_33 -gpu host
Apple Silicon での x86 エミュレータ問題
問題: Intel用エミュレータが異常に遅い
解決: ARM64 システムイメージの使用
- SDK Manager → System Images
- 「arm64-v8a」イメージを選択
- 新しいAVDを作成
Step 9: プロダクティビティ向上のTips
便利なショートカット
コード編集
操作 | ショートカット | 説明 |
---|---|---|
行の複製 | ⌘ + D |
現在行をコピー |
行の削除 | ⌘ + ⌫ |
現在行を削除 |
コメント化 | ⌘ + / |
行コメントの切り替え |
自動インポート | ⌥ + ⏎ |
import文の自動追加 |
クイックフィックス | ⌥ + ⏎ |
エラー修正候補表示 |
ナビゲーション
操作 | ショートカット | 説明 |
---|---|---|
クラス検索 | ⌘ + O |
クラス名で検索 |
ファイル検索 | ⌘ + ⇧ + O |
ファイル名で検索 |
全体検索 | ⌘ + ⇧ + F |
プロジェクト全体を検索 |
定義にジャンプ | ⌘ + B |
関数・変数の定義場所へ |
戻る | ⌘ + ⌥ + ← |
前の場所に戻る |
プラグインの活用
推奨プラグイン
- Kotlin Multiplatform Mobile: KMM開発
- Rainbow Brackets: ブラケットの色分け
- GitToolBox: Git操作の強化
- Key Promoter X: ショートカット学習支援
プラグインのインストール方法
- 「Preferences」→「Plugins」
- 「Marketplace」タブで検索
- 「Install」をクリック
Step 10: 実践プロジェクト - Todo アプリの作成
理解を深めるため、簡単なTodoアプリを作成してみましょう。
UI の実装
@Composable
fun TodoScreen() {
var todoText by remember { mutableStateOf("") }
var todoList by remember { mutableStateOf(listOf<String>()) }
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
OutlinedTextField(
value = todoText,
onValueChange = { todoText = it },
label = { Text("新しいタスク") },
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(8.dp))
Button(
onClick = {
if (todoText.isNotBlank()) {
todoList = todoList + todoText
todoText = ""
Log.d("TodoApp", "新しいタスクが追加されました: ${todoList.last()}")
}
},
modifier = Modifier.fillMaxWidth()
) {
Text("追加")
}
Spacer(modifier = Modifier.height(16.dp))
LazyColumn {
items(todoList) { todo ->
TodoItem(
text = todo,
onDelete = {
todoList = todoList - todo
Log.d("TodoApp", "タスクが削除されました: $todo")
}
)
}
}
}
}
@Composable
fun TodoItem(text: String, onDelete: () -> Unit) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 4.dp),
elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
Row(
modifier = Modifier.padding(16.dp),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = text,
modifier = Modifier.weight(1f)
)
IconButton(onClick = onDelete) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = "削除"
)
}
}
}
}
デバッグ実践
-
ブレークポイント設定:
todoList = todoList + todoText
の行に設定 -
変数監視:
todoText
とtodoList
の値を監視 - ログ確認: Logcat でログ出力を確認
パフォーマンス監視とプロファイリング
Android Studio Profiler の活用
CPU使用率の監視
- 「View」→「Tool Windows」→「Profiler」
- アプリを実行中の状態で接続
- CPUプロファイラーで処理の重い箇所を特定
メモリリークの検出
// メモリリークを防ぐ正しい書き方
class MainActivity : AppCompatActivity() {
private var binding: ActivityMainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding?.root)
}
override fun onDestroy() {
super.onDestroy()
binding = null // メモリリークを防ぐ
}
}
開発効率を上げる追加設定
エディタのカスタマイズ
コードスタイルの統一
- 「Preferences」→「Editor」→「Code Style」→「Kotlin」
- 「Set from...」→「Predefined Style」→「Kotlin style guide」
フォントとテーマの設定
推奨フォント: JetBrains Mono, Fira Code
推奨テーマ: Darcula, IntelliJ Light
Git 連携の設定
.gitignore の設定
# Android Studio
.gradle/
.idea/
*.iml
local.properties
# ビルド成果物
/build/
/app/build/
# 署名ファイル
*.jks
*.keystore
# OS固有
.DS_Store
Thumbs.db
まとめ
Android Studioの基本操作から実践的なデバッグ技術まで、幅広くカバーしました。重要なポイントを振り返ります:
✅ プロジェクト作成: テンプレート選択とMinimum SDKの適切な設定
✅ インターフェース理解: 各ツールウィンドウの役割と効率的な使い方
✅ デバッグスキル: Logcat、ブレークポイント、プロファイラーの活用
✅ 効率的な開発: ショートカット、Live Templates、リファクタリング
✅ 実践経験: Todoアプリでの具体的な実装
これらのスキルを身につけることで、Android開発の生産性が大幅に向上します。次回は、Kotlinの基礎文法と、Android開発で特に重要な概念について詳しく解説していきます。
次回予告
Day3: Kotlin基礎からAndroid開発まで では、以下の内容を予定しています:
- Kotlin文法の基礎(null安全、拡張関数、コルーチン)
- Android開発でよく使用するKotlinパターン
- Jetpack Composeでの状態管理
- 実践的なアプリ開発演習
練習課題
今回学んだ内容を定着させるため、以下の課題に挑戦してみてください:
- 基本操作: 新しいプロジェクトを作成し、エミュレータで実行する
- UI実装: ボタンを押すとテキストが変わるアプリを作る
- デバッグ: ブレークポイントを設定してステップ実行を体験する
- ログ活用: 様々なログレベルでメッセージを出力し、Logcatで確認する