Codemagicを使ってFlutterアプリをFirebase App Distributionにデプロイする
概要
はじめまして、JINSでアプリエンジニアをしていますCab(@kose_k)です。
主にモバイルアプリやWebアプリを開発してます。
今回FlutterのテストアプリをFirebaseで配布するため、Codemagicを使ってデプロイできるようにしたのでその流れを紹介します。
Codemagicとは
Codemagicは、モバイルアプリケーションのテスト・ビルド・デプロイを自動化するためのCI/CDサービスです。
Flutter以外にReact NativeやiOS、Androidのプロジェクトをサポートしています。
無料枠があり、Flutterに関するドキュメントも多いことからCodemagicを採用しました。
準備
今回はCodemagicの設定だけにフォーカスして書いていきますので下記の設定については割愛します。
別途まとめていきたいと思います。
- Firebase App Distribution
- Apple Store Connect
Codemagicの設定
Codemagicログイン
こちらのリンクからログインします。
GitHub / Bitbucket / GitLab のアカウントでログインできます。
アプリの追加
ログインができたら、[Add application]からアプリを追加します。
[Select repository]に一覧が出てくるので、連携するアプリケーションのリポジトリを選択します。
[Select project type]も選択します。今回はFlutterを選択します。
Workflow設定
Build for platforms
今回はAndroidとiOSを選択します。
テストだけを実施するRun tests only
も選択できます。
Run build on
macOS M1 VM
を選択します。
Build trigger
どのタイミングで実行するか選択します。
今回はrelease
ブランチにマージした時に実行されるように設定しました。
Environment variables
すでにCodemagicで設定されている環境変数についてはこちらを参照
Dependency caching
今回は使用していないので割愛します。
Tests
静的解析、単体テスト、結合テストを設定できます。
今回はflutter analyze
のみ実行しますが、
まだ試せていませんが、iOS simulatorやAndroid emulatorでテストができるのはGood!だと思います。
単体テストや結合テストも実施したら展開していきます。
Build
Flutter, Xcode, CocoaPodsのバージョンを指定します。
チームの開発環境に合わせて設定することができるのは嬉しいですね。
Distribution
Android/iOSのコード署名は必要になりますので設定していきます。
Android code signin
こちらの公式ページに手順があります。
下記コマンドでkeystore_name.jks
というファイルが生成されます。
※取り扱いには要注意
keytool -genkey -v -keystore keystore_name.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias alias_name
基本的に手順通りでOKですが、Configure signing using environment variables で環境変数を設定する場合は、こちらを参照ください。
iOS code signin
こちらの公式ページに手順があります。
App Store Connect API キーを生成し、Apple Developer Portal integrationに接続します。
Step 2. Connecting the Apple Developer Portal integration for your team/accountは、Applicationの設定ではなく、Teams内の設定なのでご注意ください。
Firebase App Distribution
こちらの公式ページに手順があります。
※トークンやキーの扱いには注意しましょう。
こちらの設定をする前に、Firebase上でプロジェクトを登録し、AndroidとiOSのアプリをそれぞれ追加しておきましょう。
Firebase App Distribution上で登録したAndroidとiOSのアプリのアプリ ID
を、Codemagic上のAndroid Firecase app ID
とiOS Firebase app ID
に登録します。
テストが失敗した場合にPublishしてしまわないようにPublish even if tests fail
はOFFにしておきましょう。
Notifications
EmailかSlackを選択できるので、設定しておくと結果が通知されます。
結果
成功するとfinishedステータスになります。
失敗するとfailedステータスになりますので、詳細でエラーログを確認することができます。
どのステータスでどんなエラーが出ているのかも出力され確認しやすいのでGood!だと思います。
比較的簡単にFlutterのCI/CDを構築できるのはありがたいので活用していきたいと思います。
各フェーズ間でスクリプトの実行もできるのでありがたいですね。
今後はもっとCI/CDをアップデートして、開発に時間を使っていこうと思います!
Discussion