BLOGサブスレッドの日常
2018.10.02
fastlaneを使ってみる
s.kono
むおおおお!
今日はfastlaneのDocumentationを軽く読んでみたので、それに関してちょっとまとめた話を書きます!
アプリが一旦完成してから、リリースするまでの間のタスク
iOS/Androidアプリに限った話ではないかもしれませんが、プログラムは一旦書き終えた後も、テストして修正したり、hotfixを適用したり、少しずつ仕様を変えたりしながら、何度も何度もビルドを行います。
具体的にはこんな感じの目的でビルドを行うと思います:
- 社内でテストするため、開発サーバ向けのビルドを行う
- 納品や受け入れテストのために、ステージングビルドを行う
- AppStore/Google Play Storeにアップロードするためにリリースビルドを行う
また、このビルドを行う際は、同時に他のこともいろいろ行うことがあります:
- バージョン番号を上げる
- (テストを書いているなら)CIでテストするためにCIへアップロードしビルドをトリガーする
- ビルドしたアプリの実行ファイルを特定の名前へリネームする (例: myproject-ver1.2.3_build20180101.apk など)
そして何より、こういったタスクをまとめておくことで、 設定の間違いによるヒューマンエラーが起きにくいようにする ことが可能です。各IDEにはGUIツールでapkを生成する機能がついていますが、設定を一通り確認するのは非常に面倒で、さらにヒューマンエラーも起きやすくなるので、個人的には 最初以外は使いたくない と思っています。
今まではシェルスクリプトを書いていたんですが、これも面倒になってきたので、ちょっと巷で有名なfastlaneを触ってみることにしました。という記事を書きます。
What is fastlane?
Android/iOS/macOSのアプリをビルドするためのツールです。
- macOSでのみ動作
- Rubyで書かれている
できることは、Actionsにまとめられています。これを見ると、めちゃいろいろなことができることが分かります。
Documentationを見ると、主なfeaturesはこれらのようです。
- テストの実行
- Beta配布用のサービスへ、アプリをアップロード
- TestFlight/Google PlayへのBetaテスト用配布
- アプリのスクリーンショットの撮影
- 例
- ストアに出ているものと、最新版の見た目が違う、を防げる
- ローカライズしたときの、各言語ごとのスクショを取るのを自動化
- 各解像度ごとのスクショを撮れる
- AppStore/Google Playへのファイルアップロード
この記事では、アプリをビルドしてipaを作成するところまでをゴールとします。
Getting Started for iOS
Setup fastlane
# 最新のXcode command line toolsをインストール
$ xcode-select --install
# 初期化
$ cd /path/to/your-project
# Gemfile作成
$ vim Gemfile
# fastlaneをプロジェクトへインストール
$ bundle update
# fastlaneの初期化コマンドを実行
$ bundle exec fastlane init
Gemfile
の中身はこんな感じです:
source "https://rubygems.org"
gem "fastlane"
Gemfileを作るのは、プロジェクトごとにfastlaneを入れるためです。ほとんどの場合、ビルドツールもバージョンは固定したいですよね。
fastlaneはどのようにツールを使われているかを計測して、サーバに送信しているようです。これをオプトアウトする場合はFASTLANE_OPT_OUT_USAGE=true
なんかを環境変数としてセットしてあげるか、Fastfile
の先頭にopt_out_usage
をつければ良いようです。
fastlane init swift
というオプションもあるようで、これはswiftで書かれたFastfileを生成するオプションのようです。Betaなのでまだ問題あるかもですね。iOSの場合はRuby無しで動くようにするの目指しているのかも。Android側とは書式変えなければならなくなることに関してどう考えているんだろうか。
話題を戻します。bundle exec fastlane
を実行した時、いろんなことを聞かれます。Enterキーを押してで進めて行きましょう。ざっくりとこんな感じのことでした:
- 匿名でanalyticsデータを送ってる。これは
Fastfile
の先頭にopt_out_usage
を追加すれば無効にできる ./fastlane
フォルダ作ったよWhat would you like to use fastlane for?
(fastlaneをどのようにお使いになられますか?)- 僕は
4. Manual setup - manually setup your project to automate your tasks
を選択しました。
- 僕は
./fastlane/Fastfile
作った./fastlane/Appfile
作ったFastfle
の中に、各lanes
がある。各lane
には違う自動化のためのタスクがある。例えばスクショとったり、署名したり、新規リリースをアップロードしたり。Fastfile
をカスタマイズするには、テキストエディタでそのファイルを開く。そしてそれをあなたに合った形でlanesやactionsを編集できる。- すべてのアクションは、Actionsを見て欲しい
実際にはもうちょっと書かれてますが、かいつまみました。
Edit your Fastfile
./fastlane/Fastfile
は、最初こんな感じになってます。
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
default_platform(:ios)
platform :ios do
desc "Description of what the lane does"
lane :custom_lane do
# add actions here: https://docs.fastlane.tools/actions
end
end
これを、Building your appを見ながら、例えば下記のように修正します:
platform :ios do
desc "My first build"
lane :build_debug do
get_certificates(
development: true,
username: "my.apple.developer@example.com"
)
get_provisioning_profile(
development: true,
app_identifier: "*",
skip_install: true,
readonly: true,
skip_certificate_verification: true,
username: "my.apple.developer@example.com"
)
build_app(
scheme: "MyApp",
workspace: "MyApp.xcworkspace",
export_method: "development",
include_bitcode: true)
end
end
これはDeveloperアカウント(Distributionではない)で、開発ビルド(adhoc/appstoreビルドではない)したときのプロパティです。
username
,workspace
,scheme
などは、適宜変更が必要です。- 各アクションの説明とプロパティに関しては、必ず一度Documentationに目を通してください。(僕もちょっとハマりそうになりました)
- get_certificates
- get_provisioning_profile
readonly: true
を設定しておくと、サーバに勝手にProvisioningProfileを作りに行ったりしなくなります。
- build_app
- ビルドのたびに、usernameに対するパスワードを聞かれます。これはfastlane-credentialsを使ってパスワードを保存しておけば問題なく通るようになります。
- ちなみにパスワードはmacOS Keychainへ保存されるとのこと
続けて bundle exec fastlane build_debug
を実行すれば、しばらくした後にipaがカレントディレクトリに生成されます。
僕は途中一つハマったんですが、もしUnable to locate Xcode. Please make sure to have Xcode installed on your machine
というエラーが出るようであれば、issueがあるのでこちらを参考に、Xcodeでオプションを有効にしてあげてください。
Fastfileの書式の簡単な解説
ここまでiOSのビルドの設定について解説してみましたが、さらっと流したので、用語の解説等をしておきます。
fastlaneツール自体はRakefileの亜種?タスクランナー?みたいなもので、例えばmy_buildtaskっていうタスクを定義しておいて、fastlane my_buildtask
といったコマンドでコマンドラインで叩くと、my_buildtaskの中に記述された処理が順番に実行されていきます。このタスクのことをfastlaneではlane
と呼びます。
で、my_buildtask
が実行されたときに順番に実行する処理をaction
って呼んでおり、そのactionとして「iOSアプリをビルドする」「Crashlytics BetaなんかのWebサービスにアプリを送信してβ配布する」といったことが可能です。
例えば、こんな風に書いた時:
platform :ios do
desc "My first build"
lane :my_buildtask do
get_certificates
get_provisioning_profile
build_app
end
end
lane
はmy_buildtask
、
action
は、get_certificates
, get_provisioning_profile
, build_app
となります。
fastlaneが優秀なのは、このactionがめっちゃ豊富にあることです。これは前述のactionsのドキュメントをご覧ください。
おつかれさまでした!
追記: Fastfileの書式の簡単な解説
を追加
この記事を書いた人
s.kono