全体の方針
やりたいこと
- スマホアプリ開発を効率的にしたい → Flutter を採用
- 商用利用も無料で行いたい → Android Studio は使わず CLI ベースに
- ホスト環境を汚したくない・開発メンバーで開発環境を統一したい → コンテナ(Docker / Podman)を利用
方針
- ホストには必要最低限のものだけをインストール
- Flutter SDK + Android SDK を含んだコンテナを用意し、
環境
- macOS Sequoia ver. 15.4.1
1. ホスト準備の手順
Java JDK 21 のインストール
echo "📦 Downloading OpenJDK 21 (Adoptium) for $PLATFORM..."
JDK_URL="https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.1%2B12/OpenJDK21U-jdk_x64_mac_hotspot_21.0.1_12.tar.gz"
TEMP_DIR=$(mktemp -d)
ARCHIVE_PATH="$TEMP_DIR/jdk21.tar.gz"
curl -L -o "$ARCHIVE_PATH" "$JDK_URL"
tar -xzf "$ARCHIVE_PATH" -C "$TEMP_DIR"
JDK_DIR=$(find "$TEMP_DIR" -type d -name "jdk-21*" | head -n 1)
mkdir -p "$HOME/java"
mv "$JDK_DIR" "$HOME/java/"
echo "✅ JDK installed to $HOME/java/"
- Android SDK の CLI には Java が必要。
- 今回は、JDK 21 を Adoptium からダウンロード・展開。
Java の存在確認と PATH 設定
JAVA_DIR=$(find "$HOME/java" -type d -name "jdk-21*" 2>/dev/null | head -n 1)
JAVA_HOME="$JAVA_DIR/Contents/Home"
export JAVA_HOME
export PATH="$JAVA_HOME/bin:$PATH"
# Java 実行可能ファイルが存在しない場合はダウンロードして再設定
if [[ ! -x "$JAVA_HOME/bin/java" ]]; then
install_openjdk_21
JAVA_DIR=$(find "$HOME/java" -type d -name "jdk-21*" | head -n 1)
JAVA_HOME="$JAVA_DIR/Contents/Home"
export JAVA_HOME
export PATH="$JAVA_HOME/bin:$PATH"
fi
-
JAVA_HOME
とPATH
を動的に設定することでsdkmanager
やemulator
の利用を可能に。
Android SDK の CLI ツール確認と導入
SDK_DIR="$ANDROID_SDK_ROOT"
CMDLINE_TOOLS_DIR="$SDK_DIR/cmdline-tools/latest"
export PATH="$JAVA_HOME/bin:$CMDLINE_TOOLS_DIR/bin:$SDK_DIR/platform-tools:$PATH"
# sdkmanager が無い場合は cmdline-tools をダウンロード
if [[ ! -x "$CMDLINE_TOOLS_DIR/bin/sdkmanager" ]]; then
mkdir -p "$SDK_DIR/cmdline-tools"
cd "$SDK_DIR/cmdline-tools"
PLATFORM_TAG="mac"
curl -L -o cmdline-tools.zip "https://dl.google.com/android/repository/commandlinetools-${PLATFORM_TAG}-11076708_latest.zip"
unzip -q cmdline-tools.zip && rm cmdline-tools.zip
mv cmdline-tools latest
cd -
fi
- Android SDK の
cmdline-tools
ディレクトリの存在確認。 - 無ければ Google 公式から zip をダウンロードし、自動展開。
- 環境変数
PATH
に必要な bin を追加。
Android SDK(Software Development Kit)
- Googleが提供するAndroidアプリ開発用のツール群セット。FlutterがAndroidアプリとしてビルド・実行するために必要。
- FlutterはAndroid Studioなしでも動作するが、その場合でもAndroid SDKのCLIツールがないとビルド・テスト・デプロイができない。
sdkmanager によるライセンス承諾と必要モジュールのインストール
yes | sdkmanager --licenses
sdkmanager \
"platform-tools" \
"emulator" \
"platforms;android-33" \
"system-images;android-33;google_apis;x86_64"
echo "✅ Initialization complete."
- Android SDK の CLI 利用にはライセンス承諾が必須 →
yes |
で自動化。 - Flutter のビルド・テスト・実機実行に必要な構成(emulator、platform-tools、system-images など)を一括導入。
sdkmanager(Android SDK Package Manager)
- Android SDKに含まれるCLIツール。SDKの構成要素(emulatorやplatform-toolsなど)を管理・導入するためのユーティリティ。
- GUIなしでSDKを管理するにはこのツールが必須。Flutterのflutter doctorでもsdkmanagerの存在確認が行われる。
adb の存在確認とホストへの導入
if ! command -v adb &> /dev/null; then
echo "❌ adb not found on host. Installing platform-tools (adb)..."
UNZIP_DIR="$HOME/android-sdk-host"
HOST_PLATFORM="darwin"
mkdir -p "$UNZIP_DIR"
PLATFORM_TOOLS_ZIP="platform-tools-latest-${HOST_PLATFORM}.zip"
DOWNLOAD_URL="https://dl.google.com/android/repository/${PLATFORM_TOOLS_ZIP}"
echo "📦 Downloading platform-tools for $HOST_PLATFORM from $DOWNLOAD_URL..."
curl -L -o "$UNZIP_DIR/$PLATFORM_TOOLS_ZIP" "$DOWNLOAD_URL"
echo "📦 Extracting platform-tools..."
unzip -qo "$UNZIP_DIR/$PLATFORM_TOOLS_ZIP" -d "$UNZIP_DIR"
echo "✅ platform-tools extracted to $UNZIP_DIR/platform-tools"
echo "👉 Add the following to your shell profile to use adb:"
echo " export PATH=\"$UNZIP_DIR/platform-tools:\$PATH\""
export PATH="$UNZIP_DIR/platform-tools:$PATH"
echo "📢 Current adb version:"
adb version
else
echo "✅ adb found: $(which adb)"
adb version
fi
- Flutter から実機やエミュレータへアクセスするには
adb
が必要。 -
adb
がホストに無い場合、Google 公式からplatform-tools
をダウンロードして導入。 - 自動的に
PATH
を通し、その場でadb version
を確認できるようにします。
adb(Android Debug Bridge)
- Android実機やエミュレータと接続して、アプリのインストール、ログ確認、デバッグ操作などを行うCLIツール。
- Flutterの
flutter run
やflutter install
は内部的にadbを使ってデバイスにアクセス。adbがないとFlutter開発が実機やエミュレータで進められない。
次回予定
- Flutterアプリをビルドするコンテナの構築