Flutter個人開発にXcode Cloudは必要?GitHub Actionsとの使い分けを整理
Xcode CloudにFlutter SDKは標準では入らない。ADPの月25時間、署名〜TestFlight、analyze/Androidまでを分けて、個人開発での併用を考える。
FlutterでiOSアプリを何度かリリースしていると、ArchiveしてTestFlightへアップロードする作業を自動化したくなる。一方で、PRごとの flutter analyze やテストも自動化したい。そこで候補になるのが、AppleのXcode Cloudと、GitHubのGitHub Actionsだ。
「どっちが必要か」で比べると答えが出にくい。得意な仕事が違う。
先に結論
Flutter個人開発なら、どちらか一方に全部寄せる必要はない。
- PRごとの
flutter analyze/ テスト / Android向けの確認 → GitHub Actions - iOSの署名からTestFlight配信 → Xcode Cloud
という併用が現実的だ。Xcode Cloudは「必須」ではない。すでにApple Developer Programに入っていて、手動のArchiveとアップロードに時間を取られているなら、試す価値がある、という位置づけになる。
何を比べているのか
どちらも「リポジトリの変更をきっかけに、ビルドやテストを自動で走らせる」仕組みだ。ただし前提が違う。
| Xcode Cloud | GitHub Actions | |
|---|---|---|
| 主な舞台 | Appleプラットフォーム向けのビルドと配信 | Linux / Windows / macOS を選んで任意のジョブ |
| 設定の置き場 | Xcode / App Store Connect側のワークフロー | リポジトリ内の YAML |
| Flutterとの関係 | 公式ドキュメントでカスタムスクリプトが前提 | ランナー上にFlutterを入れて好きなコマンドを実行 |
| Android | 対象外 | 同じリポジトリで扱える |
Flutter公式のContinuous deliveryでも、Xcode Cloudは独立した節として扱われ、GitHub Actionsはfastlane連携の一例として並ぶ。最初から「どちらかが正解」ではない。
Xcode CloudにFlutter SDKは標準では入っていない
ここが、Swiftだけ書いてきた人との差だ。
FlutterのXcode Cloud手順は、一時的なビルド環境にはmacOSとXcodeに含まれるツール、加えてHomebrewがあると説明したうえで、リポジトリをcloneしたあとにFlutterを自分で入れる例を示している。具体的には ios/ci_scripts/ci_post_clone.sh で Flutter を git clone し、flutter precache --ios や flutter pub get、必要なら CocoaPods まで走らせる。
つまり「Xcode CloudをオンにしたらFlutterアプリがそのまま通る」ではない。初回はスクリプトとワークフローの調整がいる。Apple側のカスタムビルドスクリプトも、依存関係のインストールやビルド前後の処理をスクリプトで足す前提の機能だ。
調査前に分かりにくかったのはこの点だ。Xcode Cloudの強みは「ゼロ設定でFlutterが動くこと」ではなく、Appleの署名と配信の流れに乗りやすいことにある。
Apple Developer Programには一定のコンピュート時間が含まれる
Xcode Cloudの利用開始によると、利用には Xcode 15.0 以降と Apple Developer Program のメンバーシップが必要で、毎月25コンピューティング時間がメンバーシップに含まれる。未使用分の翌月繰り越しはない。足りなければ、100時間 / 49.99米ドル〜といった月額プランがある。
コンピューティング時間は、ビルドや自動テストなどクラウド上のタスクに使った時間だ。Appleの説明では、分析・アーカイブ・ビルドとテストを並列に走らせる、と書かれている。
個人開発で意味があるのは、「別途CIサービスを契約する前に、すでに払っているADPの枠で試せる」ことだ。最初から有料プランを前提にしなくてよい。
一方、GitHub Actionsは別の課金だ。公開リポジトリの標準ランナーは無料で使える。非公開リポジトリはプランに含まれる分数があり、超過分はランナー種別ごとの分課金になる。flutter analyze のような Linux ジョブは、iOS用のmacOSランナーより負担が軽いことが多い。
iOSの署名〜TestFlightはXcode Cloudが得意
Xcode Cloudの概要は、ビルド・並列テストに加えて、TestFlightとの連携や App Store Connect への組み込みを機能として挙げている。ワークフローから新しいビルドをテスターに届ける、という話が公式の製品説明に含まれている。
たとえば、手動でTestFlightへアップロードしていると、既存のビルド番号と重複してアップロードに失敗することがある。Flutter公式のXcode Cloud手順によると、Xcode Cloudは新しいワークフローのビルド番号をデフォルトで 1 から始め、成功したビルドごとに増やしていく。すでに高いビルド番号を使っているアプリでは、Next Build Numberを設定して既存番号と衝突しないようにする。CI側のビルド番号を使う構成にすれば、こうした番号管理も自動化できる。
GitHub Actionsでも、macOSランナー上で xcodebuild し、App Store Connect API や fastlane で TestFlight に上げる道はある。Flutter公式もfastlane経由の配信を案内している。ただしGitHub Actions側でTestFlight配信まで組む場合は、署名やApp Store Connectへの認証を含め、CI向けの設定を自分で構成する必要がある。構成次第で取り方はいくつもある。
個人開発で消耗しやすいのは、まさにこの層だ。Xcode Cloudは「YAMLが好きだから」ではなく、署名とTestFlightまでをAppleのツールチェーン側に寄せたいときに効く。
analyze / test / AndroidまでならGitHub Actionsが得意
FlutterアプリはiOSだけで終わらない。PRのたびに次を回したい、という需要がある。
flutter analyze- ユニットテスト
- 場合によっては Android のビルド確認
これらは Linux 上で足りることが多い。GitHub Actionsは OS をジョブごとに選べる。ランナーの選び方のとおり、ubuntu-latest のようなラベルで安価(または公開repoなら無料)なチェックを回せる。設定はリポジトリ内の YAML に残るので、クローンすれば再現しやすい。
Xcode Cloudに同じことを全部載せると、Androidが載らないうえ、PRごとの軽量チェックまでコンピュート時間を食う。月25時間は「無制限の日常チェック枠」ではない。
結局、個人開発ではどう分けるか
仕事を分けるとこうなる。
| やりたいこと | 向きやすい方 | 理由 |
|---|---|---|
| PRごとに静的解析・テスト | GitHub Actions | Linuxで足りる。設定がリポジトリに残る |
| Androidの確認も含めたい | GitHub Actions | Xcode Cloudの範囲外 |
| mainやタグからTestFlightへ | Xcode Cloud | 署名〜配信をApple側に寄せやすい。ADPの25時間で試せる |
| まだストア未提出でローカル実行だけ | どちらも急がなくてよい | 手動アップロードの痛みが先に来てからで足りる |
Flutter個人開発なら、チェックはGitHub Actions、iOS配信はXcode Cloudという併用も有力だ。
「Xcode Cloudは必要か」への答えは、多くの場合こう言い換えられる。
必須ではない。ただしADPに入っていて、iOSの提出作業を自動化したいなら、無料枠の範囲で使う理由はある。日常の品質チェックまではGitHub Actionsに任せた方がバランスがよい。
いまの時点で自分で確かめる必要があること
記事の判断は公式ドキュメント上の役割分担までだ。次はプロジェクトごとに実測がいる。
ci_post_clone.sh込みの1ビルドが、何分・何コンピューティング時間になるか- 月25時間で、配信用ワークフローが何回まわるか
- 依存関係(とくに iOS のパッケージ解決)がクラウド上で安定するか
ここは推測で埋めない。1アプリだけ通して、App Store Connectの使用状況を見た方が早い。
出典
- Xcode Cloudの概要 - Apple Developer
- Xcode Cloudの利用開始 - Apple Developer
- Writing custom build scripts - Apple Developer Documentation
- Continuous delivery with Flutter - Flutter docs
- Setting the next build number for Xcode Cloud builds - Apple Developer Documentation
- Choosing the runner for a job - GitHub Docs
- GitHub Actions billing - GitHub Docs