ご相談はこちら
お問い合せ

Let’s Talk!

まずはお気軽にお問い合わせください。 担当より折り返しご連絡いたします。
092-292-9749(平日10:00〜19:00)
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
This is some text inside of a div block.
Oops! Something went wrong while submitting the form.

fastlaneを使った自動化で、効率的なFlutter開発を実現する方法を解説!

目まぐるしく状況が変わるモバイルアプリ開発において、アップデートや新機能の効率的な提供は、非常に重要な問題です。

しかし、いまだに多くの開発者が、Google PlayストアやApp Storeへのアプリリリースを手動で行っているのが現状です。このように手動でリリース作業を行うと、ヒューマンエラー発生の可能性が高まり、アプリケーションの構築、コード署名の管理、アプリストア提出の処理などに時間がかかってしまいます。

ここでfastlane(ファストレーン)の出番です。fastlaneは、iOS・Androidアプリのベータ版のデプロイメントとリリースを自動化してくれるアプリ開発の自動化ツールで、スクリーンショット生成やコード署名処理、アプリリリースなど、手作業では煩雑な作業をすべて処理することができます。

歴史と進化

fastlaneは、2014年にFelix Krausによってリリースされました。当時は、コード署名とApp Storeへのアプリのアップロードに重点が置かれていました。

【 〜2015年まで 】

Google Playストアへの提出や、Androidビルド用のGradleのような機能を拡張することで、Androidとそのリリースプロセスへのサポートを拡大しました。

【 2016年〜2018年 】

fastlaneはリリースプロセスを促進するための、次のようなツールを導入しました。

・snapshot:App Store用のアプリのスクリーンショット撮影を自動化

・screengrab:Playストア用のアプリのスクリーンショット撮影を自動化

・match:コード署名を管理

【 2018年〜2021年 】

コミュニティの成長やエコシステムの更新が行われたことで、Slack、Jira、Firebaseなどとの統合が可能なサービスも追加されました。また、ドキュメントも改善され、開発者が既存のワークフローにfastlaneを統合するのに役立つ、操作手順などの手引きやサンプルも提供されました。

【 2021年〜現在 】

GitHub Actions、GitLab CI、Circle CI、Bitrise、Jenkins、Travis CI、CodemagicなどのCI/CDプラットフォームとの統合が可能になっています。また、Flutter、React Native、NativeScriptなどのクロスプラットフォーム技術のサポートも始まっています。

fastlaneが注目を集めた理由

従来のモバイルアプリの開発やデプロイメントには、手動の作業も多く、時間がかかるだけでなく、ヒューマンエラー発生の確率も高く、非効率的と言えます。

そこで「自動化」に注目が集まりました。fastlaneは、ベータ版や本番環境のデプロイメントを自動化し、CI/CDパイプラインを有効に活用できるとして、人気が広まっています。

fastlaneの設定方法

【 fastlaneをインストール 】

brew install fastlane

【 fastlaneの設定 】

ターミナルからプロジェクトのディレクトリに移動し、以下を実行します。

fastlane init

【 FastFileの定義 】

ここでは、様々なタスクを自動化するために必要な、カスタムワークフローであるレーンを定義します。

・iOS Fastfileの例

# ios/fastlane/Fastfile
default_platform(:ios)
platform :ios do
  desc "Build and push a new beta build to TestFlight"
  lane :beta do
    match(type: "appstore") # Code signing
    build_app(scheme: "MyApp") # Build the app
    upload_to_testflight # Upload to TestFlight
  end
  desc "Build and release a new version to the App Store"
  lane :release do
    match(type: "appstore") # Code signing
    build_app(scheme: "MyApp") # Build the app
    upload_to_app_store # Upload to the App Store
  end
  desc "Build shorebird release build"
  lane :release_shorebird do
	  shorebird_release(platform: "ios")
	  upload_to_testflightend
	desc "Build shorebird patch"
	lane :patch_shorebird do
	  shorebird_patch(platform: "ios")
	end
  desc "Run tests"
  lane :test do
    run_tests(scheme: "MyAppTests")
  end
end

・Android Fastfileの例

# android/fastlane/Fastfile
default_platform(:android)
platform :android do
  desc "Build and push a new beta build to Google Play"
  lane :beta do
    gradle(task: "assemble", build_type: "Release") # Build the app
    supply(track: "beta") # Upload to Google Play Beta
  end
  desc "Build and release a new version to Google Play"
  lane :release do
    gradle(task: "assemble", build_type: "Release") # Build the app
    supply(track: "production") # Upload to Google Play Production
  end
  desc "Run tests"
  lane :test do
    gradle(task: "test")
  end
end

【 GitHub Actionsワークフローファイル 】

このファイルは、既存のCI/CDパイプラインにfastlaneを統合するのに必要です。

name: Fastlane CI/CDon:
  push:
    branches:
      - main
  pull_request:
    branches:
      - mainjobs:
  ios:
    name: Build and Deploy iOS App
    runs-on: macos-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3- name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.1' # Specify the Ruby version to use- name: Install dependencies
        run: |
          gem install fastlane
          bundle install

      - name: Run Fastlane beta lane
        run: fastlane beta
        env:
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} # Set up as a secret in GitHub- name: Run Fastlane release lane
        run: fastlane release
        env:
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} # Set up as a secret in GitHub- name: Run Fastlane Shorebird release lane
        run: fastlane release_shorebird
        env:
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} # Set up as a secret in GitHub- name: Run Fastlane Shorebird patch lane
        run: fastlane patch_shorebird
        env:
          APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} # Set up as a secret in GitHubandroid:
    name: Build and Deploy Android App
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3- name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.1' # Specify the Ruby version to use- name: Install dependencies
        run: |
          gem install fastlane
          bundle install

      - name: Run Fastlane beta lane
        run: fastlane beta
        env:
          GOOGLE_PLAY_JSON_KEY: ${{ secrets.GOOGLE_PLAY_JSON_KEY }} # Set up as a secret in GitHub- name: Run Fastlane release lane
        run: fastlane release
        env:
          GOOGLE_PLAY_JSON_KEY: ${{ secrets.GOOGLE_PLAY_JSON_KEY }} # Set up as a secret in GitHub

これによって、開発とデプロイのプロセス全体を自動化することができます。fastlaneは、モバイルアプリ開発における継続的デプロイメント(CD)と継続的デリバリー(CD)に関連するタスクに主に使用されます。

課題と限界

iOSアプリのビルドには、Xcodeの影響によりmacOS環境が必要です。GitHub ActionsがmacOSランナーを提供していますが、キュー時間が長くなり、Linuxランナーよりもコストがかかります。

・複雑さと手間

iOSのコード署名は複雑で、Androidの署名キーの管理も必要です。

・環境固有の構成

環境ごとに異なる処理が必要です。

・セキュリティ

脆弱性を防ぐためには、パイプラインとコードのセキュリティを確保することが不可欠であり、秘密鍵を安全に管理することも重要です。

・ツールの統合

様々なツールやテクノロジーを統合するのは難しい場合があり、カスタムソリューションが求められることもあります。

・時間の制約

GitHub Actionsにはビルド時間の制限があります。

今後の展望とまとめ

GitHub Actionsと連携したfastlaneは、自動化、セキュリティ、クロスプラットフォームサポート、クラウドネイティブ機能の継続的な改善が期待されています。これらのツールは進化するにつれてさらに強力になり、モバイルアプリ開発者、その中でも特にFlutterを使用する開発者にとって欠かせないものになるでしょう。

▼ 関連記事 ▼

Flutterとは?クロスプラットフォーム開発の魅力に迫る

これらのトレンドを常にアップデートしておくことで、開発者は最適なツール/手法を活用した、効率的かつ安全で拡張性のあるCI/CDパイプラインを維持することができます。

参考/引用元サイト

[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
目次
記事をシェアする
Flutterデベロッパー

この記事を書いた人

James Mathew

Flutterデベロッパー

クロスプラットフォーム開発において、優れたユーザー体験を生み出すFlutter開発者です。幅広い経験から、多様なプラットフォームに渡って、シームレスで洗練された、統一感のあるプロダクトの開発に情熱を燃やしています。

Contact Us

プロダクト開発・新規事業・DX支援を行っています。
まずはお気軽にお問い合わせください。