はじめに
この記事はFlutter初心者の筆者が学習のために書いている記事です。
間違っていたら温かくご指摘いただけるとありがたいです。
やりたいこと
今回はGitHub Actionsを使って、FlutterのCIを作成していたいと思っています。
とりあえずテストコードの実行と静的解析ができれば良いかなと思っています。
workflowsを作る
GitHub ActionsでCIを作るにはworkflowsを作る必要があります。(というかworkflowsを作るだけで良いです。)
Flutterプロジェクト直下に以下のディレクトリ構成でyamlファイルを作成します。
# yamlファイルの名前は好きな名前にしてください。
.github/workflows/flutter-ci.yaml
GitHub Actionsは、この「.github/workflows/」の下にあるyamlファイルを実行してくれます。
次に、yamlファイルの中身を書いていくのですが、設定するのは大きく分けて以下の3つです。
- ワークフローの名前
- トリガー(どのタイミングで実行されるのか)
- 実際に実行されるジョブ
実際に作成してみたyamlファイルは以下になります。
# ワークフロー名を定義
name: flutter-ci
# トリガーを定義
on:
# プルリクエスト作成がトリガーとなる(GitHib Actionsが実行される)
pull_request:
# プルリクエスト作成時とプルリクエストを対象にコミットが行われた時
types: [opened, synchronize]
# 対象ブランチを指定(masterブランチに対するプルリクエストが対象)
branches:
- master
# GitHubページ上から手動で実行できる
workflow_dispatch:
#実行するジョブを定義
jobs:
# ジョブ名を設定
flutter-ci:
# ジョブを実行する仮想ホストマシンタイプ
runs-on: ubuntu-latest
# タイムアウト時間を設定
timeout-minutes: 5
# steps配下に実行したいアクションを定義する。
steps:
# 当該リポジトリをチェックアウト
- name: checkout
uses: actions/checkout@v2
# Flutterをインストール(キャッシュする)
- name: flutter cache
uses: subosito/flutter-action@v2
with:
flutter-version: "3.10.0"
channel: "stable"
cache: true
cache-key: flutter
cache-path: ${{ runner.tool_cache }}/flutter
- name: install Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: "3.10.0"
channel: "stable"
# Flutter pub get 実行
- name: flutter pub get
run: flutter pub get
# 性的解析実行
- name: flutter analyze
run: flutter analyze
# テスト実行
- name: flutter test
run: flutter test
ざっくりと説明すると、以下のような感じです。
[CIが動くタイミング]
・ masterブランチに対するプルリクエストが作成されたタイミング
・ masterブランチに対するプルリクエストにコミットが行われたタイミング
・ 手動実行もできるようにしておいた
[実際に行われること]
・ コードの静的解析
・ テストコードの実行
このyamlファイルをmasterブランチにpushしたら準備は完了です。
実際に動かしてみる
適当なブランチを作成して、masterブランチに対してのプルリクエストを作成します。
すると、こんな感じにCIが実行されます!(このプルリクエストにコミットしても同じようにCIが動きます。)

注意事項
GitHub Actionsは料金が発生してしまうケースがあるようです。
Privateリポジトリの場合に発生する可能性があるようなので、試すときはPublicリポジトリで試すのが良さそうですね。
最後に
初めてGitHub Actionsを触ってみたのですが(というか初めてCI/CDを触った)、思っていたよりも簡単でしたね。
とりあえず初歩的なCIの実装であれば、初心者でも小一時間あればできてしまう印象でした。
JenkinsとかCircleCIとかはとっつきにくくてCI/CDを少し嫌厭してたのですが、GitHub Actionsはそんな事なくてとても良かったです。