Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

iOSアプリのリリースフロー自動化ツールfastlaneのmeetupに通訳で参加しました

iOSエンジニアの@kitasukeです。

2015年6月26日にヤフー株式会社様にてfastlane meetupが開催されました。

fastlaneとはiOSアプリにおけるリリース作業の自動化統合ツールです。 開発者のFelix Krauseさんが来日されていたので開催されることになりました。 ちょうど弊社でも導入し始めたので参加したいなと思っていたところ、タイミングよく岸川さんにお誘い頂いて通訳としてお手伝いさせてもらいました。

当日の内容は、Felixさんからのfastlaneの説明と、fastlaneなどに関するLTという構成でした。 当日の参加者の方からのつぶやきがtogetterにもまとまっているので、そちらもご覧ください。 また、Felixさんが今回の来日についてのブログ記事を書いているので、そちらもご覧ください。

本記事がfastlaneの公式日本語ガイドとして参照されました! *追記 2015/07/17

Felixさんからの発表

fastlaneとは

fastlaneより引用

fastlane lets you define and run your deployment pipelines for different environments. It helps you unify your apps release process and automate the whole process. fastlane connects all fastlane tools and third party tools, like CocoaPods and xctool.

iOSアプリにおけるリリースフローの作業を自動化する統合ツールです。 今までXcodeiTunes Connectといったツール上で行ってきた作業を自動化出来ます。 全プロセスの自動化も可能ですし、特定の作業のみを自動化させることも可能なので、利用範囲を各自で決められて使い易いです。

特徴

  • リリース管理者が居なくても誰でもリリース作業を出来ます
  • 煩雑な作業から解放されます
  • リリースプロセスでの漏れを無くせます
  • リリースに必要な作業を分担出来ます

提供しているツール群

fastlaneが公式に用意している主なアクション(コマンドラインツール)は以下の通りです。 後ほど詳しく述べますが、カスタムアクションを作ることも可能です。

  • deliver
  • snapshot
  • frameit
  • PEM
  • sigh
  • produce
  • cert
  • codes

deliver

deliverより引用

スクリーンショット、メタデータ、IPA、アプリをApp Storeへアップロード出来るアクションです。

snapshot

snapshotより引用

UI Automationを利用して、スクリーンショットをとれるアクションです。 Xcode7からの新機能である、UI Testing自体は既に対応済みのようです。

frameit

frameitより引用

デバイス画像にスクリーンショットを埋め込んだ画像を生成出来るアクションです。

PEM

PEMより引用

プッシュ通知の証明書を生成・更新出来るアクションです。

sigh

sighより引用

プロビジョニングファイルの生成・更新・修復出来るアクションです。

produce

produceより引用

新しいアプリをiTunes ConnectやDev Portal上で作成出来るアクションです。

cert

certより引用

証明書の生成・管理出来るアクションです。

codes

codesより引用

プロモコードを生成出来るアクションです。

レーンの概念

fastlaneはリリースフローの主な作業(テスト、アプリ配信、アプリ申請など)をそれぞれのレーンとみなして、必要なフローごとにレーンを作成することになります。 レーンの中には必要なアクションを組み合わせて使用します。 例えばアプリ配信というレーンでは、cocoapods, xctool, deliver, slackなどのアクションが必要になるでしょう。 アクション結果の情報は共有されるようになっているので、スクリーンショットやipaファイルがどこに保存されているかなどは、特に気にする必要ありません。

外部サービスとの連携

fastlaneは多くの外部サービスと連携しています。 例えば、Travis CI, CircleCI, CocoaPods, Crashlytics, Slack, DeployGate, SHENZHENなど、リリースフローで良く使うサービスと簡単に連携出来ます。 現状でfastlaneに用意されていなくても、独自にアクションを作成して外部サービスと連携させることも可能です。

設定ファイル

Fastfileという設定ファイルにレーンの定義を記述すると、下記のようにコマンドラインで実行出来るようになります。

fastlaneのインストール方法はこちらをご覧ください。

$ fastlane appstore
lane :appstore do
  increment_build_number
  cocoapods
  xctool
  snapshot
  sigh
  deliver
  frameit
  sh "./customScript.sh"

  slack
end

レーンの実行前・後の処理や、エラーハンドリングも可能です。

before_all do |lane|
  increment_build_number
  cocoapods
end
after_all do |lane|
  clean_build_artifacts
  commit_version_bump
  add_git_tag
end
error do |lane, exception|
  reset_git_repo
  slack({
    message: "An error occured"
  })
end

こちらWikipediaProduct Huntなどでの使用例があるので、参考にご覧ください

Spaceshipについて

現状ではiTunes Connectをスクレイピングして解析しているが、今後はSpaceshipという非公式APIを提供しているツールを利用するそうです。 これによって、以前より実行速度が大幅に向上するようです。

Q&A

  • fastlaneはどうやってAPIなどを解析していますか?

    Charlesというソフトウェアを使っているそうです。 弊社でも開発時にAPIのレスポンスを確認・変更したい時に使用している便利なプロキシツールです。

  • fastlane for Androidのリリース予定はありますか?

    こちらのIssueで対応中とのことです。 優先度はそれほど高くないと仰っていたので、必要な方はfastlaneに貢献するチャンスだと思います。

  • 現在の開発内容の優先度はどうやって決めていますか?

    自身で良く使う内容であったり、フリーランスとして依頼された内容を優先しているようです。 それ以外の内容は放置という訳では無く、改善点があればPull RequestやIssueも大歓迎だそうです。

  • iTunes ConnectのAPIはどれくらいの頻度で変更されますか?

    基本的には年に一回で、WWDC後に変わることが多いようです。 古いAPIは古いXcodeのためにまだ使われているようなので、ある程度サポート期間は長いようです。

参加者からのLT

当日は多くのLTがありましたが、ここではその中から2つ取り上げます

Why only use the defaults actions?

@gin0606さんより、fastlaneでのカスタムアクションの作り方についての発表です。

下記のコマンドで簡単に作成出来るようです。

$ fastlane new_action

アクションに対して必要な環境変数などを、引数として渡せるようにも作れるようです。 外部サービスで新しいものが登場して環境が変わったとしても、カスタムアクションを容易に作れて対応可能なので、嬉しいポイントです。

弊社でもfastlane内で独自の作業をやっているところがあるので、後日試してみようと思います。

How we use fastlane at Wantedly

@hedjirogさんより、Wantedlyで実際のfastlane活用方法についての発表です。

実際のFastlaneファイルから抜粋したコードを使って発表されていたので、フローの流れを理解しやすかったです。

主な使用用途は下記の通りのようです。

  • アプリのベータ配信
  • アプリ申請
  • スクリーンショット

弊社では、まだアプリ申請はfastlaneでは行っていないので、今後の導入について非常に参考になりました。

おまけ

弊社でのfastlaneの利用について

弊社では最近fastlaneを導入しました。 主には下記の2点で使用しています。

  • テスト実行
  • DeployGateでアプリ配信

現状ではiOS 6までサポートしていて対応OSが多いこともあって、ユニットテストをOSごとに実行しています。 また、1つのプロジェクトから日本向けとアメリカ向けのアプリを別々に生成しているので、DeployGateでのアプリ配信もターゲットごとに切り分けて行っています。

今後はアプリ申請もfastlaneを使ってみたいと思っています。

通訳について

以前にRealm Tech Talkで通訳のお手伝いをしたこともあって、今回のミートアップでもお手伝いさせて頂きました。

通訳で参加すると、発表やQ&Aも含めた全ての会話に参加することになるので、fastlaneについて短期間でかなり詳しくなれたと思います。 事前準備として、参考記事を読んでみたりツールを実際に試してみたりした効果もあると思いますが。

発表者として参加する時とは違った点で勉強になるので、また機会があればやってみたいなと思いました。

まとめ

全体的にfastlaneは非常に便利なツールだと思いました。 iTunes Connectの非公式APIを使用していて不安を感じるかもしれませんが、deploy以外でもアプリのベータ配信やスクリーンショットの保存などだけでも使う価値はあると思いました。

fastlaneは新しい機能への対応スピードも早いですし、カスタムアクションでの拡張も容易に可能です。 また、どのリリースフローで使用するかは自分で設定可能なので、ツールとして使いやすいなと思いました。

fastlaneを使って快適で安全なリリースフローを運用しましょう。