# バッチ設計書 6-android

## 概要

本ドキュメントは、InvenTreeモバイルアプリのAndroid向けリリースビルドを実行するPythonビルドタスク「android」の設計仕様を記載します。

### 本バッチの処理概要

本バッチは、clean、update、translateの前提タスクを実行した後、flutter build appbundleコマンドを実行してAndroid向けのリリースビルド（AAB形式）を生成する処理を実行します。

**業務上の目的・背景**：InvenTreeモバイルアプリをGoogle Playストアで配布するためには、Android App Bundle（AAB）形式のファイルを生成する必要があります。本バッチを実行することで、クリーンな状態から依存関係の取得、翻訳ファイルの更新を経て、リリース品質のAndroidアプリケーションをビルドします。これにより、一貫性のあるビルドプロセスと品質の担保を実現します。

**バッチの実行タイミング**：開発者が手動でinvoke androidコマンドを実行した際に随時実行されます。Google Play ストアへの提出前やテスト配布時に実行されます。

**主要な処理内容**：
1. clean: ビルドキャッシュのクリーンアップ（前提タスク）
2. update: Flutter依存関係の更新（前提タスク）
3. translate: 翻訳ファイルの更新（前提タスク）
4. flutter build appbundle --release --no-tree-shake-iconsでAABファイル生成

**前後の処理との関連**：本バッチはclean、update、translateを前提タスクとして定義しており、これらが順番に実行された後にAndroidビルドが実行されます。

**影響範囲**：build/app/outputs/bundle/release/ディレクトリにAABファイルが生成されます。

## バッチ種別

Androidリリースビルド処理（ビルドタスク）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時 |
| 実行時刻 | なし（手動実行） |
| 実行曜日 | なし |
| 実行日 | なし |
| トリガー | 手動（invoke androidコマンド） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| FVMインストール済み | Flutter Version Managerがインストールされていること |
| Flutter SDKインストール済み | FVMで管理されたFlutter SDKが利用可能であること |
| Android SDK インストール済み | Androidビルドに必要なAndroid SDKがインストールされていること |
| Java JDK インストール済み | Androidビルドに必要なJava JDKがインストールされていること |
| 署名キー設定 | リリース署名用のキーストアが設定されていること |

### 実行可否判定

Android SDKとJava JDKが設定されており、署名用のキーストアが利用可能な場合に実行可能です。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | パラメータ不要（コマンドラインオプションはハードコード） |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| lib/**/*.dart | Dartソースファイル | アプリケーションソースコード |
| pubspec.yaml | YAML | プロジェクト設定・依存関係 |
| android/ | ディレクトリ | Android固有の設定・リソース |
| lib/l10n/collected/*.arb | ARB | 翻訳ファイル |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| build/app/outputs/bundle/release/*.aab | AAB | Android App Bundle |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | app-release.aab |
| 出力先 | build/app/outputs/bundle/release/ |
| 文字コード | バイナリ |
| 区切り文字 | なし |

## 処理フロー

### 処理シーケンス

```
1. invokeコマンド実行
   └─ tasks.pyのandroid関数が呼び出される
2. 前提タスク実行（pre=[clean, update, translate]）
   └─ clean: fvm flutter clean
   └─ update: flutter pub get
   └─ translate: collect_translations.py実行
3. Androidビルド実行
   └─ fvm flutter build appbundle --release --no-tree-shake-icons
4. AABファイル生成
   └─ build/app/outputs/bundle/release/にAABファイルが出力される
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[clean タスク実行]
    B --> C[update タスク実行]
    C --> D[translate タスク実行]
    D --> E[fvm flutter build appbundle --release --no-tree-shake-icons]
    E --> F{ビルド成功?}
    F -->|成功| G[AAB ファイル生成]
    F -->|失敗| H[エラー出力]
    G --> I[バッチ終了]
    H --> I
```

## データベース操作仕様

### 操作別データベース影響一覧

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| なし | - | - | データベース操作なし |

### テーブル別操作詳細

データベース操作は行いません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | FVM未インストール | fvmコマンドが見つからない | FVMをインストールする |
| - | Android SDK未設定 | Android SDKが見つからない | Android SDKをインストール・設定する |
| - | Java未設定 | Java JDKが見つからない | Java JDKをインストールする |
| - | 署名エラー | キーストアが無効 | 有効な署名キーを設定する |
| - | コンパイルエラー | Dartコードにエラーがある | ソースコードを修正する |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | - |
| リトライ対象エラー | - |

### 障害時対応

ビルドエラーが発生した場合、エラーメッセージを確認し、該当する問題を修正後に再実行してください。署名関連のエラーはandroid/app/build.gradleの設定を確認してください。

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | なし |
| コミットタイミング | ビルド完了時 |
| ロールバック条件 | なし（失敗時はAABファイルが生成されない） |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1回のビルド |
| 目標処理時間 | 5〜15分（マシン性能による） |
| メモリ使用量上限 | 8GB以上推奨 |

## 排他制御

同時に複数のビルドを実行しないでください。build/ディレクトリへの書き込み競合が発生します。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 標準出力 | ビルド実行中 | ビルド進捗情報 |
| 標準出力 | ビルド完了時 | 生成されたAABファイルパス |
| エラー出力 | エラー発生時 | コンパイルエラー詳細 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| なし | - | - |

## 備考

- --releaseフラグによりリリースモードでビルドされます
- --no-tree-shake-iconsフラグにより、アイコンのツリーシェイキングが無効化されます（全アイコンが含まれる）
- AAB形式はGoogle Playストアへの提出に必要な形式です
- APK形式が必要な場合は別途flutter build apkコマンドを使用してください
