Fastlane は、iOSおよびAndroid向けモバイルアプリのビルドと公開を自動化するツールです。Fastlaneはコード署名、ビルド、テスト実行、スクリーンショット作成、App Store ConnectおよびGoogle Play Consoleへのアップロードを管理します。モバイル開発におけるCI/CDのデファクトスタンダードです。
主な要点
Fastlane は、モバイル開発のルーチンタスク(アプリケーションのビルド、テスト実行、スクリーンショット作成、証明書管理、TestFlight/App Store/Google Playへのビルドアップロード)を自動化するオープンソースツールです。FastlaneはRubyで書かれており、gem install fastlane コマンドでRubyGems経由で配布されています。
Fastlaneは2015年にiOSツールとして登場しましたが、すぐにAndroidに拡大しました。現在では数十の アクション(組み込みコマンド)のエコシステムであり、これらを組み合わせて lane と呼ばれるシナリオを作成できます。各laneは特定のタスクを実行します。例:build_release はリリースバージョンをビルドし、deploy_beta はビルドをTestFlightにアップロードします。
FastlaneはUber、Airbnb、Snapchat、Twitter、Shopifyなどの企業で使用されています。2024年の調査によると、60%以上のiOS開発者がプロジェクトでFastlaneを使用しています。このツールはローカル実行とクラウドCIシステムとの統合の両方をサポートしており、モバイルCI/CDのデファクトスタンダードとなっています。
# Fastlaneのインストール
sudo gem install fastlane -NV
# プロジェクトでの初期化
fastlane init
初期化後、Fastlaneは3つのファイルを含む fastlane/ ディレクトリを作成します:Fastfile(シナリオ)、Appfile(アプリ設定)、Matchfile(証明書設定)。この構造はiOSとAndroidの両プラットフォームで同じです。
Fastlaneのメイン設定ファイルは Fastfile です。プロジェクトルートの fastlane/ ディレクトリにあります。FastfileはRubyで記述されます。各 lane はアクションのシーケンスを持つ名前付きブロックです。laneはパラメータを受け取り、他のlaneを呼び出し、値を返すことができます。
# fastlane/Fastfile — iOSの例
default_platform(:ios)
platform :ios do
desc "Build and upload to TestFlight"
lane :beta do
match(type: "appstore")
gym(scheme: "MyApp", configuration: "Release")
pilot(skip_waiting_for_build: true)
end
desc "Deploy to App Store"
lane :release do
ensure_git_status_clean
match(type: "appstore")
gym(scheme: "MyApp")
deliver(
skip_metadata: true,
skip_screenshots: true
)
push_to_git_remote(tags: true)
end
end
各laneは fastlane ios beta または fastlane ios release コマンドで実行されます。Fastfileは変数、条件分岐、ループ、外部スクリプト呼び出しをサポートする完全なRubyファイルです。開発者は private_lane(ローカルメソッド)や他のFastfileからの import を通じてコードを再利用できます。
Fastlaneはほとんどのタスクに対して200以上の組み込み アクション を提供します。必要なアクションがない場合は、Rubyで独自のアクションを作成するか、sh("...") でシェルコマンドを呼び出すことができます。アクションはパラメータ(ビルド設定、パス、アクセストークン)を受け取り、後続のステップで使用する結果を返すことができます。
iOS向けFastlaneは3つの主要な問題を解決します:証明書とプロビジョニングプロファイルの管理、XcodeによるIPAビルド、App Store ConnectとTestFlightへの公開。これらの各タスクは個別のアクションでカバーされています。
match は証明書管理のためのアクションです。すべての証明書とプロビジョニングプロファイルを暗号化されたGitリポジトリに保存します。すべての開発者とCIサーバーが同じファイルセットを使用するため、競合や証明書の有効期限切れの問題がなくなります。新しいデバイスが追加されると、Matchは自動的にプロファイルを更新します。
sigh はApple Developer Portalを介してプロビジョニングプロファイルを作成およびダウンロードします。特定のタイプ(development、ad-hoc、appstore)のプロファイルを迅速に取得する必要がある場合に使用します。
gym はIPAをビルドします。Gymは xcodebuild を最適なパラメータでラップし、スキーム、設定、エクスポートオプションを自動的に選択して署名済みIPAを作成します。例:gym(scheme: "MyApp", export_method: "app-store")。
pilot はTestFlightを管理します。ビルドをアップロードし、テスターを追加し、レビューステータスを追跡します。deliver はメタデータ、スクリーンショット、価格設定、バージョニングを含む完全なApp Store公開を処理します。
# iOSアプリのビルドと公開
lane :deploy_ios do
cocoapods
match(type: "appstore", readonly: true)
gym(scheme: "MyApp", export_method: "app-store")
pilot(changelog: "Bug fixes and performance improvements")
end
App Store Connectで作業するにはアクセストークンが必要です。Fastlaneは2つの認証方法をサポートしています:App Store Connect API Key(推奨)と2要素認証付きApple IDです。APIキーは対話的なパスワード入力が不要なため、CI/CDに便利です。
| アクション | 目的 | 手動での相当 |
|---|---|---|
match | 証明書とプロファイルの管理 | Apple Developer Portal |
sigh | プロビジョニングプロファイル作成 | Xcode + Developer Portal |
gym | IPAビルド | xcodebuild + xcrun |
pilot | TestFlightアップロード | Xcode Organizer |
deliver | App Store公開 | App Store Connect Web |
scan | UIテスト実行 | xcodebuild test |
Androidでは、FastlaneはGradleによるビルド、APKおよびAABの署名、Google Play Consoleへのアップロード、Firebase App Distributionを自動化します。
gradle はAndroidビルドのメインアクションです。必要なタスクでGradleラッパーを呼び出します:gradle(task: "assembleRelease") またはAABの場合は gradle(task: "bundleRelease")。フラグ、環境変数、gradle.properties へのパスを渡すことができます。
supply はAPKまたはAABをGoogle Play Consoleにアップロードします。Supplyはバージョン、トラック(internal、alpha、beta、production)、リリースノート、価格設定、国別配布を管理します。例:supply(track: "beta", release_status: "completed")。
screengrab はGoogle Play用のスクリーンショットを作成します。異なるデバイスと言語でアプリのスクリーンショットをキャプチャするインストルメンテーションテストを実行します。結果のスクリーンショットはsupplyを介してアップロードされます。
# Androidアプリのビルドと公開
lane :deploy_android do
gradle(task: "clean bundleRelease")
supply(
track: "beta",
release_status: "completed",
version_code: 42
)
end
| アクション | プラットフォーム | 目的 | 手動での相当 |
|---|---|---|---|
gradle | Android | Gradleによるビルド | ./gradlew assembleRelease |
supply | Android | Google Playにアップロード | Google Play Console Web |
screengrab | Android | スクリーンショット作成 | 手動スクリーンショット + ImageMagick |
firebase_app_distribution | Android | Firebase配布 | Firebase Console Upload |
FastlaneはCI/CDパイプラインで動作するように設計されています。非対話モード、環境変数、ビルドアーティファクトを正しく処理します。以下は人気のCIシステムとの統合例です。
GitHub Actions では、FastlaneはRubyスクリプトとして実行されます。典型的なワークフロー:RubyとFastlaneをインストールし、キーを設定し(secrets経由で証明書、APIトークン)、laneを実行します。iOSにはmacOSランナーが必要です。Androidはubuntu-latestで動作します。
GitLab CI では、Fastlaneは .gitlab-ci.yml で同様のセットアップで使用されます:依存関係をインストールし、fastlaneを実行し、アーティファクトを渡します。GitLab CIはmacOSとLinuxランナーをサポートしています。
Bitrise — モバイルアプリケーション向けの専門CI/CD — はFastlaneの組み込みサポートを持っています。Bitrise WorkflowはFastlane Stepを呼び出すか、fastlaneでカスタムスクリプトを実行できます。BitriseはCode Signingマネージャーを通じて証明書を管理します。
# 条件付きテスト実行を含むCI/CD用Fastfile
lane :ci_test do
scan(scheme: "MyApp", code_coverage: true)
end
lane :ci_beta do
ensure_git_status_clean
version_bump_podspec(path: "MyApp.podspec")
match(type: "appstore", readonly: true)
gym(scheme: "MyApp", export_method: "app-store")
pilot(distribute_external: true)
end
CI/CD統合の重要な側面はシークレットの保存です。Fastlaneはdotenvを介して .env ファイルと環境変数を使用します。iOSの場合、重要な変数は:MATCH_PASSWORD、FASTLANE_APPLE_API_KEY、FASTLANE_APPLE_API_KEY_ID。Androidの場合:SUPPLY_JSON_KEY_DATA — Google Playサービスアカウントの内容。
Fastlaneには200以上の組み込みアクションが含まれています。以下は、プラットフォームと目的別に最も人気のあるアクションの概要です。
| アクション | プラットフォーム | 説明 |
|---|---|---|
gym | iOS | 最適化されたxcodebuildパラメータでIPAをビルド |
match | iOS | Git経由で証明書とプロビジョニングプロファイルを同期 |
pilot | iOS | ビルドをTestFlightにアップロードしテスターを管理 |
deliver | iOS | メタデータとともにApp Storeにアプリを公開 |
scan | iOS | レポート生成を含むユニットテストとUIテストを実行 |
gradle | Android | Gradleタスクを実行:assemble、bundle、test |
supply | Android | APKとAABをGoogle Play Consoleにアップロード |
screengrab | Android | Google Play用の自動スクリーンショット |
firebase_app_distribution | Android | Firebase経由でビルドを配布 |
snapshot | iOS | App Store用のシミュレーターでの自動スクリーンショット |
increment_build_number | iOS | Xcodeプロジェクトでビルド番号を自動インクリメント |
appcenter_upload | 両方 | ビルドをApp Centerにアップロード |
必要なアクションを見つけるには、fastlane action [名前] コマンドを使用します。これによりドキュメント、パラメータ、例が表示されます。完全なリストはローカルで利用可能です:fastlane actions。
Fastlaneは プラグイン(新しいアクションを追加するコミュニティ拡張機能)もサポートしています。プラグインは fastlane add_plugin [名前] でインストールされ、RubyGemsレジストリで利用可能です。人気プラグインの例:fastlane-plugin-versioning(バージョン管理)、fastlane-plugin-sentry(デバッグシンボルをSentryにアップロード)、fastlane-plugin-teams(Microsoft Teamsへの通知)。
よくある質問
Fastlane はモバイルアプリのビルドと公開を自動化するツールです。手動操作(ビルド、コード署名、ストアへのアップロード)を1つのコマンドに置き換えます。Fastlaneはリリース時間を数時間から数分に短縮し、公開時の人的エラーを排除します。
はい。Fastlaneは両方のプラットフォームを独立してサポートしています。iOSにはmacOSが必要ですが、AndroidにはLinuxのみで十分です。1つのFastfileでプラットフォームごとにlaneを分けることができます:platform :ios do ... end および platform :android do ... end。
match アクションを通じて管理します。暗号化された証明書とプロビジョニングプロファイルをGitリポジトリに保存します。各開発者がリポジトリをクローンし、matchが MATCH_PASSWORD 変数のパスワードを使用してファイルを復号化し、キーチェーンにインストールします。これにより「自分のマシンでは動く」問題が解決されます。
はい。FastlaneにはAPKとIPAをFirebase App Distributionにアップロードするための組み込みアクション firebase_app_distribution があります。テスターを追加するための firebase_app_distribution_add_testers も利用可能です。代替として、App Center用の appcenter_upload アクションもあります。
FastlaneはRubyGems経由でインストールします:gem install fastlane -NV。iOSにはmacOSとXcodeが必要です。AndroidにはLinuxまたはmacOSとJDKおよびAndroid SDKが必要です。GitHub ActionsにはRubyとFastlaneをインストールするための既製の ruby/setup-ruby アクションがあります。環境変数はCIシステムのシークレットを介して渡されます。
Fastlane はビルドと公開タスクを自動化するためのライブラリおよびCLIです。Bitrise と Jenkins は完全なCI/CDプラットフォームです。Fastlaneはそれらの中で動作します:JenkinsはFastlaneをパイプラインステップとして実行し、Bitriseは専用のStepを介してFastlaneを呼び出します。FastlaneはCIシステムを置き換えるのではなく、モバイル固有の機能で補完します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。