Newer
Older
SmTIAS-Capture / docs / 04_SPEC / SPEC_03_アーキテクチャと非機能.md

アーキテクチャ・非機能仕様書 (Architecture & Non-functional Specification)

本ドキュメントでは,SmTIAS-Capture のアーキテクチャ(コード構成)と非機能要件を定義する.

アーキテクチャ (Architecture)

状態管理

  • provider パッケージを使用する
  • 画面ごとに ChangeNotifier を作成し,ビジネスロジックを UI から分離する

Provider 構成

Provider責務
CameraProviderカメラの初期化・プレビュー制御・撮影実行・ライフサイクル管理
GalleryProvider画像一覧の取得・キャッシュ・削除操作
DiagnosticsProviderカメラ診断の実行・結果保存(インフラのみ・UI 非表示)

ディレクトリ構成

lib/
├── main.dart                     # アプリエントリポイント,Provider 登録
├── app.dart                      # MaterialApp 定義,テーマ設定,180° 回転
├── providers/
│   ├── camera_provider.dart      # カメラ制御の状態管理
│   ├── gallery_provider.dart     # 画像一覧の状態管理
│   └── diagnostics_provider.dart # カメラ診断(インフラのみ)
├── screens/
│   ├── home_screen.dart          # BottomNavigationBar による画面切替
│   ├── capture_screen.dart       # 撮影画面 (S-01)
│   └── gallery_screen.dart       # 一覧画面 (S-02)
├── widgets/
│   ├── camera_preview.dart       # カメラプレビューウィジェット
│   ├── shutter_button.dart       # シャッターボタン
│   └── image_grid.dart           # サムネイルグリッド
└── services/
    ├── file_service.dart         # ファイル保存・命名・削除
    ├── permission_service.dart   # パーミッション管理
    ├── raw_capture_service.dart  # ネイティブ撮影(DNG/PNG)・診断の MethodChannel
    └── sound_service.dart        # シャッター音・保存完了音の制御

※ 撮影・画像変換・診断の実処理は Android ネイティブ android/.../RawCapturePlugin.kt(Camera2 / DngCreator)が担い, raw_capture_service.dart が MethodChannel で橋渡しする。

レイヤー構成

┌─────────────────────────────────┐
│  Screens(画面)                  │  UI 層: ウィジェット構築のみ
├─────────────────────────────────┤
│  Widgets(部品)                  │  再利用可能な UI コンポーネント
├─────────────────────────────────┤
│  Providers(状態管理)            │  ビジネスロジック・状態保持
├─────────────────────────────────┤
│  Services(サービス)             │  外部リソースとのインタフェース
└─────────────────────────────────┘
  • Screens は Provider を context.watch / context.read で参照し,直接 Service を呼ばない
  • Providers は Service を呼び出し,結果を状態として保持する
  • Services はプラットフォーム API やファイルシステムとの橋渡しを行う

非機能要件 (Non-functional Requirements)

画面輝度

  • アプリ起動時に画面の輝度をデフォルト値(0.8)に設定する
  • ユーザーが明るさスライダーで任意に調整できる
  • アプリ終了時にシステムの輝度設定に復帰する
  • アタッチメント装着時に光センサーで画面が暗くなることへの対策

パフォーマンス

  • 撮影操作から次の撮影が可能になるまでを,研究運用上ストレスのない時間に収める(旧 PNG 経路は約 2 秒.DNG 定量モードは設定反映のための 3 枚連続キャプチャ + 約 16 MB の DNG 書き込みのぶん長くなる)
  • 一覧画面のサムネイル読み込みは非同期で行い,画面表示をブロックしない

データ保全

  • 撮影データは端末ローカルにのみ保存する(クラウド同期なし)
  • 定量モードは RAW(DNG,10-bit BGGR Bayer)で保存し,ISP 処理による情報欠落を防ぐ(旧通常モードは非圧縮 PNG)

対応端末

  • 試験端末: AQUOS sense3(SH-02M,Android 9)
  • minSdkVersion: flutter.minSdkVersionandroid/app/build.gradle.kts が参照する Flutter 規定値)
  • targetSdkVersion: Flutter デフォルト(最新安定版に追従)