fastlane
概要
fastlane は、モバイルアプリのデプロイ時の様々なタスクを自動化してくれるツール。スクリーンショットの生成 (fastlane snapshot) や、コード署名 (fastlane match)、アプリのリリース等を自動化できる。
🚀 The easiest way to automate building and releasing your iOS and Android apps
https://github.com/fastlane/fastlane
概念
fastlane における主要な概念としては、Lane と Action がある。
table:概念
概念 概要
Lane ある1まとまりの作業の流れ (テストの実行やビルド、デプロイ等) をまとめたもの
Action 実行可能な特定のタスク。通常 Lane から必要な Action を組み合わせて呼び出し作業を達成する
Lane は、テストの実行、特定の設定下でのビルド、DeployGate, TestFlight, App Store へのアップロード... 等、モバイル開発の上で必要となる一連の作業をまとめた単位になる。開発やあるいは CI/CD からは、必要に応じてfastlane コマンド経由で特定の Lane を実行することになる。
Action は、Lane から利用可能な特定のタスク。Lane 内で行う一連の作業の記載は、この Action の組み合わせで簡潔に記載できるようになっている。fastlane に最初から組み込まれた便利な Action が 数多くある が、必要に応じて自作することもできる。
設定ファイル
fastlane 関連の設定ファイルは、基本的にプロジェクト Root 下の ./fastlane に配置する。設定ファイルには以下のような種類がある。プロジェクトに初めて fastlane を導入する際に fastlane init を実行すると、Appfile と Fastfile は自動で生成される。Matchfile、Snapfile は、fastlane match、fastlane snapshot を利用する場合には必要になる。もっともよく触ることになるであろうファイルは Fastfile で、ここに各 Lane の定義を記載していくことになる。
table:設定ファイル
ファイル名 概要
Appfile Apple ID や Bundle Identifier など、fastlane から利用するアプリ関連情報を記載する
Fastfile fastlane 経由で実行できる自動化内容を記載する
Matchfile fastlane match で利用する。管理する証明書類の格納先等を記載する
Snapfile fastlane snapshot で利用する。撮影対象のデバイスや撮影時の設定等を記載する
Scanfile scan action 用の設定ファイル
Deliverfile deliver action 用の設定ファイル
Gymfile gym action 用の設定ファイル
...etc
秘匿情報の管理
秘匿情報は環境変数経由で受け渡すのがよく、安全かつシンプルなのは dotenv を利用する方法のようだ。fastlane はその引数で env ファイルを受け渡すことができる。
code:.env
SLACK_URL="https://hooks.slack.com/services/T03NA19Q5/..."
CRASHLYTICS_API_TOKEN="123abc"
code:console
fastlane beta --env .env
https://docs.fastlane.tools/best-practices/keys/
ただし、.env ファイルに記載したいのが秘匿情報ばかりとは限らない。物によってはチームメンバと public に共有した方がやりやすいものもあるかもしれない。そのような場合には、public に公開可能な dotenv と、秘匿情報を分ける、という方法もある。--env オプションで受け渡せる .env ファイルは 1 つのみであるため、秘匿情報を管理した env は Fastfile 内で直接ロードすれば良い。
code:.env.secret
FL_GITHUB_RELEASE_API_TOKEN="hogehoge"
code:.env
SLACK_URL="https://hooks.slack.com/services/T03NA19Q5/..."
code:Fastfile.rb
fastlane_require("dotenv")
Dotenv.load(".env.secret")
# ENV'FL_GITHUB_RELEASE_API_TOKEN' が読み取れる
https://www.joshholtz.com/altconf-fastlane-best-practices/#slide=11
fastlane を導入する
インストールする gem のバージョンを複数の環境で揃えるために Bundler を利用すると良い。
code:console
$ gem install bundler
$ bundle init
生成される Gemfile を以下のように編集して、bundle install する。生成される Gemfile.lock もバージョン管理に含めること。
code:Gemfile
source "https://rubygems.org"
gem "fastlane"
fastlane インストール後は、下記コマンドを実行すると、いくつかの質問への回答を求められる。この回答とプロジェクトの状態に応じて、最終的に最低限必要な設定ファイルとして ./fastlane 以下に Appfile, Fastfile が生成される。
code:console
$ fastlane init
fastlane docs
fastlane list
fastlane lanes
App Store Connect API
fastlane から App Store Connect へのアクセスには API キーを発行して利用できる。従来は Apple ID を利用していたが、これからはこちらの方が良いようだ。
https://zenn.dev/moga/articles/752b5f5a8fc001060d1a
https://docs.fastlane.tools/app-store-connect-api/
Tips
https://speakerdeck.com/giginet/xiang-jie-fastfile?slide=83
https://www.joshholtz.com/altconf-fastlane-best-practices/#slide=22
参考
他の人が書いてる Fastfile を見て「なるほど〜」という作業
https://made.livesense.co.jp/entry/2019/05/31/070000
https://en-jp.wantedly.com/companies/classi/post_articles/57007
https://medium.com/@mertserin/using-fastlane-match-and-gym-for-delivering-ios-apps-part-1-909ca33c8c6b