# 技術スタック (Tech Stack)

## 概要 (Overview)

MiniTIAS は Flutter を用いたクロスプラットフォームモバイルアプリケーションである．初期段階では Android のみを対象とし，将来的に iOS 等への展開を視野に入れる．

## 試験端末 (Test Device)

| 項目 | 値 |
| --- | --- |
| 端末名 | AQUOS sense3（SH-02M） |
| OS | Android 9 Pie（Android 10 にアップデート可能） |
| インカメラ | 800 万画素 |
| RAM / ROM | 4GB / 64GB |

## フレームワーク・言語 (Framework & Language)

| 要素 | 選定 | 理由 |
| --- | --- | --- |
| フレームワーク | Flutter（最新 stable） | 将来的なクロスプラットフォーム対応のため |
| 言語 | Dart | Flutter の標準言語 |
| 対象 OS | Android | 試験端末が Android のため．初期は Android のみ |
| minSdkVersion | 21（Android 5.0） | Flutter のデフォルト．AQUOS sense3（API 28）で問題なし |

## 主要パッケージ (Key Packages)

| パッケージ | 用途 | 備考 |
| --- | --- | --- |
| `camera` | インカメラのライブプレビュー・撮影 | Flutter 公式プラグイン |
| `image` | 撮影画像の PNG エンコード | YUV → RGB → PNG 変換に使用 |
| `path_provider` | アプリ内ファイルパスの取得 | 保存先ディレクトリの参照に使用 |
| `permission_handler` | カメラ・ストレージの権限管理 | Android の実行時権限リクエスト |
| `provider` | 状態管理 | Flutter 公式推奨．シンプルかつ拡張しやすい |
| `screen_brightness` | 画面の輝度制御 | アタッチメント装着時の明るさ調整に使用 |

※ パッケージバージョンは環境構築時に最新 stable を採用し，`pubspec.yaml` で管理する．

### 共有ストレージ保存 (Shared Storage)

画像の保存先は `Pictures/MiniTIAS/`（Android 共有ストレージ）とする．Android 10 以降の Scoped Storage 制約により，`path_provider` では共有ストレージに直接書き込めない．保存方法は以下のいずれかを環境構築時に検証・確定する．

- `saver_gallery` 等の既存パッケージを利用
- Platform Channels で Android の MediaStore API を直接呼び出し

### 状態管理 (State Management)

`provider` パッケージを使用する．画面数が少なくシンプルな構成のため，大規模な状態管理ライブラリは導入しない．

### 静的解析 (Static Analysis)

Dart 標準のリンター（`analysis_options.yaml`）を使用する．Flutter プロジェクト作成時に生成されるデフォルト設定をベースとし，プロジェクト固有のルール追加は規約整備フェーズで定義する．

## 役割分担 (Role Distribution)

| 処理 | 実行場所 | 備考 |
| --- | --- | --- |
| 撮影・ライブプレビュー | スマホ（Flutter アプリ） | インカメラ使用 |
| 画像保存（PNG） | スマホ（Flutter アプリ） | 共有ストレージに保存 |
| データ転送 | USB 接続 | PC からフォルダを直接参照 |
| キャリブレーション | PC | カラーバーを用いた色補正 |
| 色変換・解析 | PC | L\*a\*b\* 変換，色差計算等 |

## 開発環境 (Development Environment)

| 要素 | 選定 | 備考 |
| --- | --- | --- |
| IDE | VS Code | Flutter / Dart 拡張機能を使用 |
| Flutter SDK | 最新 stable | Dart SDK 同梱 |
| Android SDK | Android Studio 経由で導入 | ビルドツール・エミュレータを含む |
| JDK | Flutter 推奨バージョン | Android ビルドに必要 |
| ADB | Android SDK 同梱 | USB 経由の実機デバッグに使用 |
| バージョン管理 | Git + GitHub | `gh` CLI で PR 管理 |
| CI/CD | 初期段階では導入しない | — |

### VS Code 拡張機能 (VS Code Extensions)

| 拡張機能 | 用途 |
| --- | --- |
| Flutter | Flutter 開発統合（ビルド，デバッグ，ホットリロード等） |
| Dart | Dart 言語サポート（補完，解析，フォーマット等） |

### 環境の再現性 (Environment Reproducibility)

別の PC への移行を容易にするため，以下の方針で環境をコード化する．

**リポジトリで Git 管理するもの:**

| ファイル | 役割 |
| --- | --- |
| `pubspec.yaml` | Dart パッケージとバージョンの管理 |
| `.vscode/extensions.json` | 推奨 VS Code 拡張機能の定義 |
| `.vscode/settings.json` | プロジェクト固有の VS Code 設定 |

**SDK のインストール自動化:**

- Windows パッケージマネージャー（Scoop）を使用し，セットアップスクリプトで SDK 類を一括インストールする
- 対象: Flutter SDK，Android Studio，Git，GitHub CLI 等
- スクリプトはリポジトリに含め，`ENV_02_環境構築手順.md` で手順を説明する

**環境セットアップの流れ:**

1. `git clone` でリポジトリを取得
2. セットアップスクリプトを実行（SDK 一括インストール）
3. `flutter doctor` で環境の過不足を確認
4. VS Code が推奨拡張機能のインストールを提案

※ 詳細な環境構築手順は `ENV_02_環境構築手順.md` に記載する．
