FlutterアプリのCI/CDパイプライン構築ガイド
はじめに
私は現在業務で、Flutterのintegration_testパッケージを活用した回帰試験の自動化を行なっています。
この記事では、FlutterアプリのためのCI/CDパイプラインをGitHub Actionsを使用して構築する方法を紹介します。CI/CDパイプラインを設定することで、ビルドやテストのプロセス(CI:継続的インテグレーション)を自動化し、アプリのリリースやデプロイ(CD:継続的デリバリー)を円滑に行うことができます。これにより、手動の作業が減り、バグを早期に発見できるようになります。
前提条件
- Flutterプロジェクトが既に存在していること
- GitHubリポジトリが設定されていること
- GitHub Actionsを使用するための基本的な知識の理解
ステップ1:GitHub Actionsのセットアップ
まずはGitHub Actionsのセットアップから始めましょう。これは、GitHubリポジトリに新しいディレクトリとファイルを作成する簡単な手順です。
1.1 ワークフローファイルの作成
GitHubリポジトリのルートに .github/workflows
ディレクトリを作成し、その中にflutter.ymlファイルを作成します。
このファイルに、CI/CDのプロセスを定義します。
name: Flutter CI/CD Pipeline
# ワークフローをトリガーするイベントを定義
on:
push:
branches:
- main
pull_request:
branches:
- main
# ワークフロー内のジョブを定義
jobs:
build:
# ジョブが実行される仮想環境を指定
runs-on: ubuntu-latest
# ジョブ内のステップを定義
steps:
- name: Checkout repository
# リポジトリをチェックアウトするアクションを使用
uses: actions/checkout@v2
- name: Set up Flutter
# Flutterをセットアップするアクションを使用
uses: subosito/flutter-action@v2
with:
flutter-version: '2.22.0'
- name: Install dependencies
run: flutter pub get
- name: Run tests
run: flutter test
- name: Build APK
# リリース用のAPKをビルドするコマンドを実行
run: flutter build apk --release
ステップ2:テストの自動化
次に、Integrationテストの設定を行います。これにより、アプリの主要な機能が期待通りに動作するかどうかを確認できます。
2.1 Integrationテストの設定
Flutterプロジェクトに integration_test ディレクトリを作成し、その中にテストファイルを配置します。以下に簡単なサンプルコードを示します。
このコードは、アプリが正常に起動するかを確認する基本的なテストです。
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:my_app/main.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
testWidgets('sample test', (WidgetTester tester) async {
app.main();
await tester.pumpAndSettle();
// テストコードをここに追加
});
}
ちなみに私は、テストコードを書くにあたり、AAA:Arrange-Act-Assertを参考にしました。
ステップ3:CI/CDパイプラインでのテスト実行
次に、GitHub ActionsでIntegrationテストを実行するステップを追加します。
3.1 GitHub ActionsでのIntegrationテストの実行
flutter.yml にIntegrationテストのステップを追加します。
これにより、コードがプッシュされたときやプルリクエストが作成されたときに、自動的にテストが実行されます。
- name: Run integration tests
run: flutter drive --target=test_driver/app.dart
ステップ4:成果物の生成とデプロイ
次に、ビルド成果物の生成とアップロードを行います。これにより、テスト後にアプリのAPKファイルを生成し、保存します。
4.1 APKの生成とアップロード
生成されたAPKをGitHub Actionsのアーティファクトとして保存するためのステップを追加します。
- name: Build APK
run: flutter build apk --release
- name: Upload APK
uses: actions/upload-artifact@v2
with:
name: release-apk
path: build/app/outputs/flutter-apk/app-release.apk
ステップ5:デプロイメントの自動化
最後に、Firebase App Distributionを使用してテスターに自動的にデプロイするステップを追加します。
5.1 Firebase App Distributionへのデプロイ
Firebase App DistributionにAPKをアップロードし、テスターに配布するための設定を行います。
- name: Deploy to Firebase App Distribution
uses: wzieba/Firebase-Distribution-Github-Action@v1
with:
appId: ${{ secrets.FIREBASE_APP_ID }}
token: ${{ secrets.FIREBASE_TOKEN }}
groups: testers
file: build/app/outputs/flutter-apk/app-release.apk
まとめ
以上で、FlutterアプリのためのCI/CDパイプラインの基本的な設定が完了しました。このパイプラインは、コードのプッシュやプルリクエスト時に自動的にビルド、テスト、デプロイを行います。これにより、手動での作業が減り、開発効率が向上します。
この記事がFlutterアプリのCI/CDパイプライン構築の参考になれば幸いです。興味がある方は、ぜひ自分のプロジェクトに取り入れてみてください!
Discussion