目まぐるしく状況が変わるモバイルアプリ開発において、アップデートや新機能の効率的な提供は、非常に重要な問題です。
しかし、いまだに多くの開発者が、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は、ベータ版や本番環境のデプロイメントを自動化し、CI/CDパイプラインを有効に活用できるとして、人気が広まっています。
【 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パイプラインを維持することができます。