Closed5

FlutterのCI/CDの改めてまとめ

ツルオカツルオカ

Flutterドキュメント

https://docs.flutter.dev/deployment/cd

個人的比較

方法 実装の手間 導入の手間 チーム運用
ローカルデプロイ(Grinder + Fastlane)
GitHub Actions
Codemagic等のAll-in-one型 [1]

当然これに限らず Fastlane + Codemagic という選択などもある。
https://blog.codemagic.io/ci-cd-for-flutter-with-fastlane-codemagic-jpn/

脚注
  1. 会社ルールやポリシーに依存 ↩︎

ツルオカツルオカ

Codemagic

  • 会社的な制約(海外Saasとの契約や情セキ説得などの障壁が無いのであれば)個人的にはmacOSビルド時間の短縮や低価格などを理由にCodemagicを使うのが今は良さそうと思っている。
  • CodemagicBitriseがモバイルアプリのCI/CDサービスとして有名
  • CircleCI という選択もあるがモバイルアプリに限定するなら上記の方が人気
  • 個人であれば無料枠からの利用ができるが、チーム(2アカウント以上)で利用しようとすると有料プランの利用が必須
  • 無料枠
    • 500時間/月
    • macOS M1 マシンが使える
    • タイムアウト120分

導入手順

https://blog.codemagic.io/getting-started-japanese/

macOSビルドも高速化&低価なので扱いやすそう。GitHub ActionsだとLinuxマシンの10倍の稼働時間がかかる のは有名な話。
https://twitter.com/h_tsuruo/status/1581580897253740546

チームでの利用には有料プランが必須

Starting November 1, 2020, we are making changes to our pricing for teams, whereby teams will become a paid feature, which means they no longer receive 500 free minutes or 2 free team seats.

https://blog.codemagic.io/pricing-changes-for-teams/

ツルオカツルオカ

GitHub Actions

  • GitHubでソースコード管理しているなら導入がスムーズ
  • レポジトリの権限的にはAdmin以上の権限が無いと環境変数周りの設定が面倒になるので必須
  • パブリックレポジトリの場合は全てが無料なので何も気にせず使える
  • 基本はプライベートレポジトリでの利用が主なはずので以下を気にする必要がある
    • GitHubの契約形態によって利用できるストレージと無料稼働時間/月が変わってくる
    • macOSの稼働時間がLinuxの10倍という最大の難所

GitHub Actionsの料金体系などの詳細

https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions#included-storage-and-minutes

ストアへのデプロイ

https://github.com/flutter/gallery/tree/main/.github/workflows

ツルオカツルオカ

Fastlane

  • Ruby製のモバイルアプリに特化したCDサービス(OSS)
  • 専用のFastfileで用意されたレーンごとに処理を実行する
  • 手元でプリミティブに実行しても良し、環境変数をCI/CDツールから参照できるようにしてGitHub Actionsで利用できるようにしても良し
  • Codemagicとの合わせ技も可能で自由度が高い

ドキュメント

わかりやすく記載されているので基本的にこれを読めば良い
https://docs.fastlane.tools/

レポジトリ
https://github.com/fastlane/fastlane

セットアップ

意外とFlutterのドキュメントもわかりやすい
https://docs.flutter.dev/deployment/cd#fastlane

ツルオカツルオカ

Fastlaneの各ストアへのデプロイ

Google Play Console

  • upload_to_play_storeを利用する(supplyのエイリアス)
  • 事前準備としてGoogle Play ConsoleのAPIアクセスの有効化やサービスアカウントのセットアップなどが必要
    • 同様に配信地域などの諸々のセットアップ も済ませておく必要がある(忘れがち)

https://docs.fastlane.tools/actions/upload_to_play_store/

App Store Connect

  • upload_to_testflight を利用する(pilotのエイリアス)
  • App Store Connect API(.p8ファイル)を使ってアップロードする
  • 開発環境も本番環境も特に意識すること無く同じコードで処理できる
    • 本番環境へのアップロード権限を絞るなどしたい場合はApp Store Connect側のRoleで設定すれば良い

https://docs.fastlane.tools/actions/upload_to_testflight/
https://docs.fastlane.tools/app-store-connect-api/

このスクラップは2022/11/19にクローズされました