見出し画像

【fastlane】効率的なFlutter開発を実現するための方法を考えてみる

fastlane(ファストレーン)は、iOS・Androidアプリのベータ版のデプロイメントとリリースに発生する手動の作業を自動化してくれるアプリ開発の自動化ツールです。

目まぐるしく変化する現代のモバイルアプリ開発では、効率的なアップデートや新機能の提供が重要視されています。これを実現できるのが‍fastlaneです。

本ブログでは、fastlaneの誕生/進化から、設定方法、現状の課題、今後の展望を解説していきます。


歴史と進化

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を使用する開発者にとって欠かせないものになるでしょう。

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

いいなと思ったら応援しよう!