【iOS/Xcode】Fastlaneの導入方法!ビルドや証明書周りの自動化ツールとCI/CD
この記事からわかること
- iOS/Xcodeの自動化ツール:Fastlaneの導入方法と使い方
- Homebrew/rbenv/bundlerのインストール手順
- セットアップ方法
- AppfileやFastfileとは?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- watchOS:10.0
- Swift:5.9
- macOS:Sonoma 14.1
- fastlane:2.221.0
Fastlaneとは?
「Fastlane」とはiOSまたはAndroidアプリの配布やテスト周りの作業を自動化するためのCI/CDツールです。できることは大きく分けて以下の4つになります。
- App StoreConnect/GooglePlayでのリリース作業
- テストの実行
- コード署名まわり
- スクリーンショットの自動生成
仕組みとしてはFastfile
というRubyで記述した設定ファイルを用意し、ターミナルなどからコマンドを実行するだけで特定の作業を自動で行ってくれるものになります。
CI/CDとは?
CI/CDとは「Continuous Integration(継続的インテグレーション)/ Continuous Delivery(継続的デリバリー)」の略称で、ざっくり言うとソースコードの統合(Integration)と配布(Delivery)を自動化する手法のことを指します。
Fastlaneの導入方法
Fastlane
を使用するにはまず導入作業が必要になります。今回はFastlane
を導入するためにHomebrew
、rbenv
、bundler
の3つがインストールしていきます。Homebrewから直接Fastlane
をインストールすることもできますが、macOSのシステムRubyをそのまま活用すると依存関係の問題が多発するので、それぞれを管理できるツールを使用して導入まで進みます。
- Homebrew・・・MacOS(及びLinux)のパッケージ管理ツール
- rbenv・・・Rubyのバージョン管理ツール
- bundler・・・RubyのGemパッケージマネージャー
それぞれのツールのインストールはターミナルを起動させたままのカレントディレクトリで行っていきます。
1.Homebrewの導入
Homebrew
は以下コマンド実行して導入できます。詳細な方法は以下の記事を参考にしてください。
おすすめ記事:Homebrew(ホームブルー)のインストール方法
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
環境変数パスを通します。
$ vi ~/.zshrc
// viで開いた中に記述
export PATH=/opt/homebrew/bin:$PATH
// 保存して閉じる
:wq
// 現在開いているターミナルに反映
$ source ~/.zshrc
バージョンが適切に返ってこれば成功です。
$ brew -v
Homebrew 4.1.18
2.rbenvの導入
Homebrew
を使ってrbenv
を導入します。
$ brew install ruby-build rbenv
環境変数パスを通します。
$ vi ~/.zshrc
// viで開いた中に記述
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
// 保存して閉じる
:wq
// 現在開いているターミナルに反映
$ source ~/.zshrc
バージョンが適切に返ってこれば成功です。
$ rbenv --version
rbenv 1.2.0
3. Rubyの導入
続いてRuby
をインストールしていきます。まずはインストール可能なバージョンを確認するために-l
または--list
オプションを実行します。
$ rbenv install --list
--list
オプションでインストール可能なRubyの最新安定版が表示されるのでそこからインストールしたいバージョンを決めてインストールしていきます。
$ rbenv install 3.1.4 // Rubyのインストール
$ rbenv global 3.1.4 // globalにインストールしたRubyのバージョンを指定
$ rbenv init // 反映
バージョンが適切に返ってきて、rbenvのgemが動作していれば成功です。
$ rbenv versions
* system
3.1.4
$ which gem
/Users/<UserName>/.rbenv/shims/gem // ○
/usr/bin/gem // ×
4. bundlerの導入
bundler
をgem
を使用して導入していきます。
$ gem install bundler
バージョンが適切に返ってこれば成功です。
bundler -v
Bundler version 2.5.13
ここまででPCへの導入作業が完了しました。一度作業すれば後はXcodeのプロジェクトに対してこれから説明する手順を実行してするだけになります。
XcodeプロジェクトにFastlaneを組み込む
XcodeプロジェクトにFastlane
を組み込んでいきます。ターミナルを起動しカレントディレクトリをXcodeプロジェクトに合わせてbundle init
コマンドを実行します。
$ bundle init
実行するとプロジェクトルートに「Gemfile」が生成されます。GemFile
はGemとツールのバージョンを指定するためのテキストファイルです。
# frozen_string_literal: true
source "https://rubygems.org"
# gem "rails"
この中にgem "fastlane"
を追加してbundle install
コマンドを実行します。するとfastlane
を動作させるために必要なライブラリなどがインストールされていきます。いろいろインストールされますがこれはfastlane
が依存関係を多く持っているためです。
# frozen_string_literal: true
source "https://rubygems.org"
# gem "rails"
gem "fastlane"
bundle install
コマンドが完了すると「Gemfile.lock」がプロジェクトルートに生成されます。このファイルにはインストールされたGemのバージョンと依存関係が記録されています。同じGemfile.lockを使用する他の開発者や環境でも、バージョンの齟齬がないように環境構築することができるようになります。
$ bundle install
Fastlaneのセットアップ
bundle exec fastlane init
コマンドを実行してFastlaneを使用するための設定ファイルを生成していきます。実行すると「ファストレーンを何に使いたいですか?」と問われるので該当の番号を指定します。今回は4:手動セットアップ
を選択したいので4を入力してEnter
を押し、その後も3回Enter
を叩きます。
$ bundle exec fastlane init
What would you like to use fastlane for?
1. 📸 Automate screenshots
2. 👩✈️ Automate beta distribution to TestFlight
3. 🚀 Automate App Store distribution
4. 🛠 Manual setup - manually setup your project to automate your tasks
完了するとプロジェクトルートに「fastlane」ディレクトリが生成されその中に「Appfile」と「Fastfile」ファイルが生成されます。
AppFileとは?
Appfileはアプリケーションに関する基本的な情報を設定するためのファイルです。Apple IDやBundle ID、チームIDなどを定義する際に使用します。
# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
# apple_id("[[APPLE_ID]]") # Your Apple Developer Portal username
# アプリのバンドルIDを定義
app_identifier "com.XXX.XXX"
# Apple ID
apple_id "sample@sample.com"
# Apple Developer PortalのチームID
team_id "XXXXXXX"
# App Store ConnectのチームID
itc_team_id "XXXXXXX"
# itc_team_id("XXXXXXX") # 括弧付きでも可
「Fastfile」内で 「Appfile」で定義している値を使用したい場合はCredentialsManager::AppfileConfig.try_fetch_value(:キー名)
を使用します。
team_id = CredentialsManager::AppfileConfig.try_fetch_value(:team_id)
Fastfileとは?
Fastfileはfastlaneで実行するアクションやワークフロー(レーン)を定義するファイルです。ここには、テストの実行、ビルドの作成、配布など自動化したいタスクを記述します。レーンや各アクションの記述方法は以下の公式リファレンスを参考にしてください。
中には以下のようにlane
を追加して処理を実装していきます。lane
は複数記述することができ$ bundle exec fastlane レーン名
というコマンドをターミナルから実行することで処理を走らせることができます。
default_platform(:ios)
platform :ios do
desc "レーンの説明"
lane :レーン名 do
# 実行したい処理
end
desc "レーン2の説明"
lane :レーン2名 do
# 実行したい処理2
end
end
今回はFastlaneの導入とXcodeプロジェクトへのセットアップまでをまとめました。次は実際にFastlaneを使用して自動化していく記事を作成したいと思います。
おすすめ記事
【Xcode/Fastlane】テストの自動化方法!run_testsアクションの使い方
【Xcode/Fastlane】自動ビルドしてipaファイルを生成/アーカイブする方法!build_app
【Xcode/Fastlane】バージョンとビルド番号を自動でインクリメントする方法!increment_version_number
.envファイルを用意する
Fastfile内で値をそのままハードコードするのではなく.env
ファイルを用意し、そこに秘密にしたい値(IDやKeyなど)を定義しておき、Fastfileから読み込ませることも可能です。
.env
ファイルはプロジェクト直下に作成したいので以下コマンドで空のファイルを生成し、中にキー名=値
の形式で記述します。
$ touch .env
USER_ID=XXXXXX
Fastfile内で参照したい場合はENV['キー名']
形式で取得することができます。
ENV['TEAM_ID']
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。