要約
- App Store ConnectやGoogle Play Consoleでのアップロード要件を満たすビルド番号自動更新
- GitHub ActionsとCiderを組み合わせたCI/CD
はじめに
FlutterアプリをApp Store ConnectやGoogle Play Consoleにアップロードする際、同じビルド番号のアプリは受け付けてもらえません。前回よりも大きなビルド番号である必要があり、手動での更新は忘れがちで面倒な作業です。この記事では、GitHub ActionsとDartパッケージの「Cider」を使ってビルド番号を自動更新する方法を、実際のプロジェクト例とともに解説します。
対象読者
- App StoreやGoogle Playへのアップロードでビルド番号の管理に悩んでいる人
- CI/CDでの自動化に興味がある人
- 手動でのビルド番号更新を忘れがちな人
なぜビルド番号の自動更新が必要なのか
App Store Connect / Google Play Consoleの制約
App Store ConnectやGoogle Play Consoleでは、同じビルド番号のアプリはアップロードできません。必ず前回よりも大きなビルド番号である必要があります。
例えば、現在のアプリが1.0.0+10
の場合、次回のアップロードでは1.0.0+11
以上でなければなりません。この制約により、手動でのビルド番号管理は:
- 忘れやすい: リリース直前に気づいてバタバタすることがある
- 手間がかかる: 毎回手動でpubspec.yamlを編集する必要がある
- ミスが起きやすい: 間違った番号を入力してしまう可能性
Ciderとは
CiderはDart/Flutterプロジェクト用のバージョン管理ツールです。pubspec.yaml
のバージョン情報を自動で更新し、changelogの管理も行えます。
主な機能
- pubspec.yamlのバージョン番号自動更新
- セマンティックバージョニング(semver)に対応
- ビルド番号の自動インクリメント
- changelog管理
セットアップ方法
1. Ciderのインストール
dart pub global activate cider
2. 基本的な使用方法
# ビルド番号のみをインクリメント
cider bump build
# メジャーバージョンをインクリメント(1.0.0+1 → 2.0.0+1)
cider bump major
# マイナーバージョンをインクリメント(1.0.0+1 → 1.1.0+1)
cider bump minor
# パッチバージョンをインクリメント(1.0.0+1 → 1.0.1+1)
cider bump patch
GitHub Actionsでの自動化
実際のプロジェクトでは、GitHub Actionsを使ってdevブランチへのpush時に自動でビルド番号をインクリメントしています。
name: Bump Build Number
on:
push:
branches:
- dev
jobs:
bump-build-number:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
# 1. リポジトリのコードをチェックアウト
- name: Checkout code
uses: actions/checkout@v4
# 2. Dart SDKをセットアップ (ciderの実行に必要)
- name: Setup Dart
uses: dart-lang/setup-dart@v1
# 3. ciderパッケージをインストール
- name: Install Cider
run: dart pub global activate cider
# 4. ciderを使ってビルド番号を+1する
- name: Bump build number
run: cider bump build
# 5. 変更をコミットしてpushする
- name: Commit and push changes
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git add pubspec.yaml
git commit -m "ci: Increment build number" -m "Automated by GitHub Actions"
git push
ワークフローの詳細解説
-
トリガー設定:
dev
ブランチへのpushで自動実行 -
権限設定:
contents: write
でファイル更新権限を付与 - 環境構築: Dart SDKをセットアップしてCiderをインストール
-
ビルド番号更新:
cider bump build
でpubspec.yamlのビルド番号を自動インクリメント - 変更のコミット: GitHub Actions botアカウントで変更をコミット・プッシュ
実際の動作例
実行前のpubspec.yaml
name: saitama_univ_app
description: "A new Flutter project."
version: 1.1.0+52
実行後のpubspec.yaml
name: saitama_univ_app
description: "A new Flutter project."
version: 1.1.0+53
ビルド番号(+の後の数字)のみが自動でインクリメントされます
まとめ
GitHub ActionsとCiderを組み合わせることで、App Store ConnectやGoogle Play Consoleの要件を満たすビルド番号の自動更新が実現できます。これにより:
- アップロードエラーの防止: 同じビルド番号によるアップロード失敗を防げる
- 作業効率の向上: 手動でのビルド番号更新作業が不要になる
- ヒューマンエラーの削減: 番号の更新忘れや入力ミスがなくなる
特に複数人での開発やCI/CDパイプラインを構築している場合、このような自動化は開発フローの改善とリリース作業の確実性向上に大きく貢献します。