第6章

公開前のテストとリリース準備

自動テスト、実機確認、プライバシー、ストア素材、バージョン管理をそろえて公開判定を行います。

この章で学ぶこと

  • 公開前に何をどの環境で確認するか決める
  • ストア申告と実際のデータ利用を一致させる
  • 1つのビルドを段階的にテスト配布する

1. 自動チェックをそろえる

毎回同じ順で確認します。

dart format --output=none --set-exit-if-changed .
flutter analyze
flutter test

テストは次の層に分けます。

種類 確認すること
Unit test 入力検証、並び順、状態変化
Widget test ボタン、エラー、読み込み、空表示
Repository test 保存成功、権限拒否、通信失敗
Rules test 未認証・別利用者を拒否する
Integration test ログインから保存・削除まで
手動実機確認 キーボード、戻る操作、権限、通信切断

生成AIには正常系だけでなく、空文字、長い文字、連打、画面を閉じる、通信が戻る、時刻がずれる、といった失敗条件を挙げてもらいます。

2. 公開候補の接続先を固定する

公開候補を作る前に、次を記録します。

  • GitのコミットID
  • pubspec.yamlのversion
  • FlutterとDartのバージョン
  • 接続するFirebase Project ID
  • Android applicationId / iOS Bundle ID
  • 有効な機能フラグ
  • 使用した署名方法

pubspec.yamlの例です。

version: 1.0.0+1

1.0.0は利用者向けの版、1はビルド番号です。AndroidとiOSの各ストアへ再アップロードするときは、必要に応じてビルド番号を増やします。

3. 実機テストの表を作る

少なくとも次を確認します。

項目 Web Android iOS
新規登録・ログイン・ログアウト ○ ○ ○
作成・再読込・削除 ○ ○ ○
入力エラーと通信失敗 ○ ○ ○
小さい画面・文字拡大 ○ ○ ○
外部リンク・問い合わせ先 ○ ○ ○
データ削除手順 ○ ○ ○
広告のテストIDと同意 対象時 対象時 対象時

デバッグ版だけでなく、公開と同じreleaseビルドで確認します。AndroidとiOSのログイン連携では、ストア署名後の証明書やBundle IDが影響することがあります。

4. プライバシーと申告を準備する

次を説明できるようにします。

  • 収集するデータ、目的、保存先、保存期間
  • 第三者SDKへ送られるデータ
  • 利用者がデータとアカウントを削除する方法
  • 問い合わせ先
  • 広告識別子、解析、クラッシュ情報の利用
  • 生成AIへ利用者入力を送る場合の送信先と注意

プライバシーポリシーを書くだけでなく、アプリの実装、Google PlayのData safety、App StoreのApp Privacy、広告の同意画面を一致させます。SDKを追加すると送信データが変わることがあるため、リリースごとに見直します。

5. 段階的に配る

開発者の実機
  ↓
チーム内テスト
  ↓
少人数の外部テスト
  ↓
段階公開
  ↓
全体公開

WebはプレビューURL、AndroidはInternal testing、iOSはTestFlightを使います。テスターには「自由に触って」ではなく、シナリオと報告方法を渡します。

公開判定チェック

  • 自動チェックがすべて成功した
  • 本番のSecurity Rulesをテストした
  • 3プラットフォームのrelease候補を実機確認した
  • プライバシー、データ削除、問い合わせ先が公開されている
  • ストア画像と説明が実際の画面・機能と一致する
  • 管理者が2人以上いて、署名・更新手順を復旧できる
  • エラー監視、予算通知、公開停止の担当が決まっている
  • 広告はテスト広告で確認し、本番広告を自分でクリックしていない

やってみよう

自分のアプリ用の公開判定表を作り、各項目に「確認者」「確認日」「証拠となるURLやビルド番号」を追加してください。