この記事は「モバイルアプリ開発における AI 活用術」の詳細記事です。
目次
- はじめに
- GitHub Actions(CI)
- リリースブランチの作成
- CHANGELOG → ストア文言生成
- リリース前の E2E 検証
- 自動デプロイ(Fastlane + GitHub Actions)
- デプロイフロー
- 👤 人の判断ポイント
- 次のステップ
- 参考リンク
はじめに
開発が完了したら、GitHub にプッシュして CI・レビュー・リリースを行います。
このフェーズのゴール:
- GitHub Actions による CI の設定
- CHANGELOG からストア文言の自動生成
- Fastlane による自動デプロイ
GitHub Actions(CI)
PR が作成されると、自動で CI が実行されます。
ワークフロー例
モノレポ対応: このプロジェクトはモノレポ構造のため、Sodalio/ 配下の変更のみを検出して CI を実行します。カスタムアクション(.github/actions/)を使用して Flutter セットアップや変更検出を共通化しています。
name: Flutter CI
on:
push:
branches: [master, develop, 'release/**']
paths:
- "Sodalio/**"
- ".github/actions/**"
- ".github/workflows/ci-flutter.yml"
pull_request:
branches: [master, develop, 'release/**']
paths:
- "Sodalio/**"
env:
FLUTTER_VERSION: "3.32.4"
jobs:
flutter:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check changes
id: changes
uses: ./.github/actions/check-file-changes
with:
directory: Sodalio
- name: Setup Flutter
if: steps.changes.outputs.changed == 'true'
uses: ./.github/actions/setup-flutter
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
- name: Install dependencies
if: steps.changes.outputs.changed == 'true'
working-directory: Sodalio
run: flutter pub get
- name: Format check
if: steps.changes.outputs.changed == 'true'
working-directory: Sodalio
run: dart format --set-exit-if-changed lib test
- name: Analyze
if: steps.changes.outputs.changed == 'true'
working-directory: Sodalio
run: flutter analyze --no-fatal-infos --no-fatal-warnings
- name: Test with coverage
if: steps.changes.outputs.changed == 'true'
working-directory: Sodalio
run: flutter test --coverage
CI 高速化のポイント
| 設定 | 効果 |
|---|---|
paths |
変更があったディレクトリのみ CI を実行 |
| カスタムアクション | Flutter セットアップ、変更検出を共通化 |
--no-fatal-infos --no-fatal-warnings |
情報・警告レベルはブロックしない |
timeout-minutes: 30 |
長時間実行を防止 |
リリースブランチの作成
開発が完了したら、リリースブランチを作成します。
# リリースブランチを作成
git checkout -b release/1.1.0
# 開発内容をマージ
git merge feature/ai-image-generation
# master へ PR を作成
gh pr create --base master --title "Release 1.2.0"
CHANGELOG → ストア文言生成
CHANGELOG.md を元に、ストア用のリリースノートを生成します。
CHANGELOG.md の例
# Changelog
## [1.1.0] - 2025-01-15
### Added
- AI によるキャラクター画像自動生成機能
- 画像の再生成機能
### Fixed
- 会話履歴のスクロールが重い問題を改善
- 一部端末での画像表示の不具合を修正
### Changed
- キャラクター作成画面のUIを改善
@claude への依頼
この工程は PR 上の @claude コメントで依頼し、CHANGELOG 更新とストア文言生成の 作業 PR を切り出してもらう運用にしています。
💬 PR コメント(@claude):
「CHANGELOG.md の更新と、App Store 用のリリースノートを多言語で生成してください。
リリースノートにはユーザーに見える変更のみを記載(新機能/改善/不具合修正)。
内部実装・リファクタ・CI/依存更新・テスト追加・開発向け変更は記載しないでください。
対象言語: ja, en, ko, th, vi, id, es-419
配置先: Store/whats_new/{version}/{lang}.md」
生成されるストア文言の例
【新機能】
・AIがキャラクターの画像を自動生成!設定内容から自分だけのアバターを作れます
・気に入らなかったら再生成も可能
【改善】
・会話履歴のスクロールがスムーズになりました
・キャラクター作成画面がより使いやすくなりました
【修正】
・一部端末での画像表示の問題を修正しました
リリース前の E2E 検証
自動デプロイ前に release ブランチで ローカルの E2E テストを全実行し、スクリーンショット差分を確認します。
私は claude に e2e 用のカスタムコマンドを作成しており、そこから実行可能にしています。
自動デプロイ(Fastlane + GitHub Actions)
AppStore/GooglePlay への画像、文言、バイナリファイルのアップロードは release→master の PR において、workflow_dispatch を実行することで実現しています。
ワークフロー概要
name: Upload Store Metadata
on:
workflow_dispatch:
inputs:
version:
description: "Store version (x.y.z). Optional; defaults to pubspec.yaml."
required: false
version_code:
description: "Android versionCode. Optional; defaults to pubspec.yaml."
required: false
# Platform selection
upload_ios:
description: "Upload to App Store Connect"
type: boolean
default: true
upload_android:
description: "Upload to Google Play"
type: boolean
default: true
# Upload targets
upload_binary:
description: "Build and upload binary (IPA/AAB)"
type: boolean
default: true
upload_description:
description: "Upload app description (概要文言)"
type: boolean
default: true
upload_whats_new:
description: "Upload release notes (アップデート文言)"
type: boolean
default: true
upload_screenshots:
description: "Upload screenshots"
type: boolean
default: true
実行オプション
| オプション | 説明 |
|---|---|
version |
バージョン番号(未指定時は pubspec.yaml から取得) |
version_code |
ビルド番号(未指定時は pubspec.yaml から取得) |
upload_ios |
App Store Connect へのアップロード有無 |
upload_android |
Google Play へのアップロード有無 |
upload_binary |
バイナリ(IPA/AAB)のビルド&アップロード |
upload_description |
アプリ概要文言のアップロード |
upload_whats_new |
リリースノート(アップデート文言)のアップロード |
upload_screenshots |
スクリーンショットのアップロード |
アップロード対象
ストアへのアップロード対象は以下の 4 種類です:
| 対象 | 説明 | iOS | Android |
|---|---|---|---|
| バイナリ | アプリ本体 | IPA | AAB |
| 概要文言 | アプリの説明文 | description.txt | full_description.txt |
| アップデート文言 | 今回の更新内容 | release_notes.txt | changelogs/{version_code}.txt |
| スクリーンショット | ストア掲載画像 | screenshots/ | images/phoneScreenshots/ |
実用的なユースケース
| やりたいこと | 設定 |
|---|---|
| 文言だけ先に準備 |
upload_binary: false, upload_screenshots: false
|
| スクショだけ更新 |
upload_binary: false, upload_description: false, upload_whats_new: false
|
| バイナリだけ更新 |
upload_description: false, upload_whats_new: false, upload_screenshots: false
|
バイナリビルドはローカルで
GitHub Actions での iOS ビルドは時間がかかるため、実際の運用では以下のパターンが効率的です:
1. バイナリはローカルでビルド
$ flutter build ipa --dart-define=PRODUCTION=true --release
$ flutter build appbundle --flavor production --dart-define=PRODUCTION=true --release
2. fastlane で直接アップロード(ローカル)
$ cd ios && bundle exec fastlane upload_metadata
$ cd android && bundle exec fastlane upload_metadata
3. メタデータ(文言・スクショ)だけ Actions で更新
- upload_binary: false で実行
- 数分で完了
バージョン指定
-
version/version_codeの入力が優先 - 未指定時は
pubspec.yamlのversion: x.y.z+codeから抽出
メタデータの管理
ストアメタデータは Store/ ディレクトリで一元管理し、アップロード時に fastlane 形式に変換します:
Store/
├── description/
│ └── current/
│ ├── ja.md # 概要文言(日本語)
│ ├── en.md # 概要文言(英語)
│ └── ...
├── whats_new/
│ ├── 1.0.0/
│ │ └── ja.md, en.md, ...
│ └── 1.1.0/ # アップデート文言(バージョンごと)
│ └── ja.md, en.md, ...
└── assets/
└── screenshots/ # スクリーンショット
└── ja/current/
メリット:
- Markdown で管理できる
- Git で変更履歴を追跡
- バージョンごとのアップデート文言を保存
デプロイフロー
┌─────────────────────────────────────────────────────────────────────┐
│ 自動デプロイフロー │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ workflow_dispatch 実行 │
│ │ │
│ ▼ │
│ pubspec.yaml からバージョン取得 │
│ │ │
│ ▼ │
│ Store メタデータ同期(sync_store_metadata.sh) │
│ │ │
│ ├─────────────────┬─────────────────┐ │
│ ▼ ▼ ▼ │
│ iOS Build Android Build Screenshots │
│ (flutter build) (flutter build) (maestro/fastlane) │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ App Store Google Play 両ストアに │
│ Connect Console アップロード │
│ │ │ │
│ └─────────────────┴─────────────────┐ │
│ ▼ │
│ 審査待ち │
│ │
└─────────────────────────────────────────────────────────────────────┘
👤 人の判断ポイント
| # | 判断内容 | タイミング |
|---|---|---|
| 1 | ストア文言の最終確認 | リリースノート生成後 |
| 2 | ストアアップロードの実行判断 | workflow_dispatch 実行前 |
次のステップ
👉 運用編 へ進む




