🐷

Codemagicを使ってFlutterアプリをFirebase App Distributionにデプロイする

2024/07/09に公開

概要

はじめまして、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 IDiOS Firebase app IDに登録します。

テストが失敗した場合にPublishしてしまわないようにPublish even if tests failはOFFにしておきましょう。

Notifications

EmailかSlackを選択できるので、設定しておくと結果が通知されます。

結果

成功するとfinishedステータスになります。
失敗するとfailedステータスになりますので、詳細でエラーログを確認することができます。
どのステータスでどんなエラーが出ているのかも出力され確認しやすいのでGood!だと思います。

比較的簡単にFlutterのCI/CDを構築できるのはありがたいので活用していきたいと思います。
各フェーズ間でスクリプトの実行もできるのでありがたいですね。
今後はもっとCI/CDをアップデートして、開発に時間を使っていこうと思います!

参考

JINSテックブログ

Discussion