Copyright © DeNA Co.,Ltd. All Rights Reserved.
AKIBA.swift 第6回
2016/10/25(Tue)
平田敏之@DeNA
fastlane x iOSアプリのCI
Copyright © DeNA Co.,Ltd. All Rights Reserved.
自己紹介
 平田 敏之@DeNA
⁃ 経歴
• GWの開発 → ホムペサービスの開発、iOSアプリの開発 → SWET
⁃ SWET(Software Engineer in Test)
• 事業サポートチーム / テスト基盤チーム
• ミッション
⁃ DeNAサービス全般の品質向上
⁃ DeNAエンジニアの開発生産性向上
⁃ 私がやっていること(の一部)
• クライアントアプリ周りのテスト戦略、自動テストの開発
• CI/CD環境整備
• テスト基盤環境の開発
• iOS Test Night 主催
⁃ http://testnight.connpass.com/event/41323/
Copyright © DeNA Co.,Ltd. All Rights Reserved.
今日の発表の流れ
 iOS x CI
 CIでおこなうステップ
 実際のCI環境の設定
⁃ Jenkins
⁃ CircleCI
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS x CI (1/2)
 CI(継続的インテグレーション)
⁃ CD(継続的デリバリー)というのもありますが、まずはCI
 CI(継続的インテグレーション)のメリット
⁃ (ある程度の)品質の維持
• 何をおこなっているかに依存し変わる
⁃ 構成管理されたマシンによるビルド
• 各バージョンが整っている(はず)
⁃ 作業コストの削減
• 手元で行っている作業を任せられる
⁃ 作業の形式知化
• 手元で行っていた作業をCLIでおこなうことによる形式知化
⁃ 分析・改善のための情報の取得
• ビルド時間の推移など
Copyright © DeNA Co.,Ltd. All Rights Reserved.
iOS x CI (2/2)
 CIを得るために必要なこと
⁃ 上司の許可
• CIにはどうしてもコストがかかります..
⁃ クラウド、オンプレのどちらにするかの判断
• プロジェクトの規模、やりたいことを踏まえて判断
⁃ CLI上での操作
• CI上で動作させるには必要
⁃ ★今回のメインはコチラ
 CIがあることにより得られるもの
⁃ 安心感
⁃ ファンの音がガンガンしない自マシン
⁃ CI環境の介護
• クラウド、オンプレで介護の差はある(介護0は厳しい)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CIでおこなうステップ(例)
 アプリのビルド
 アプリのテスト
 静的解析(swiftLint)
 アプリのdeploy(DeployGate / Crashlytics)
 iTunesConnectへのupload
 AppStoreのデータ更新
 Slackに結果通知
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CIでおこなうステップ x fastlane無
fastlaneを使わずにCIにのせようとすると
 アプリのビルド(例)
⁃ xcodebuild –project xxxx.xcodeproj –target xxxxx –sdk
iphonesimulator –configuration Debug build
 アプリのテスト(例)
⁃ xcodebuild –project xxxx.xcodeproj –scheme xxxxx –sdk
iphonesimulator –destination ’platform=iOS Simulartor,
name=iPhone 6s’ test
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CIでおこなうステップ x fastlane
 アプリのビルド
⁃ gym
 アプリのテスト
⁃ scan
 静的解析(swiftLint)
⁃ swiftlint
 アプリのdeploy(DeployGate / Crashlytics)
⁃ deploygate
⁃ crashlytics
 iTunesConnectへのupload / AppStoreのデータ更新
⁃ deliver
 Slackに結果通知
⁃ slack
See: https://github.com/fastlane/fastlane/tree/master/fastlane/lib/fastlane/actions
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CIでおこなうステップ x fastlane – 1st step
 ★アプリのビルド
⁃ gym
 アプリのテスト
⁃ scan
 静的解析(swiftLint)
⁃ swiftlint
 アプリのdeploy(DeployGate / Crashlytics)
⁃ deploygate
⁃ crashlytics
 iTunesConnectへのupload / AppStoreのデータ更新
⁃ deliver
 ★Slackに結果通知
⁃ slack
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Fastfileの用意
fastlane_version "1.105.3”
default_platform :ios
platform :ios do
before_all do
ENV[“SLACK_URL”] || = https://hooks.slack.com/..
cocoapods
end
desc ”build ipa file”
lane :build do
increment_build_number
gym(
workspace: “fastlane-sample.xcworkspace",
scheme: ”fastlane-sample",
configuration: ”Release",
clean: true,
use_legacy_build_api: true,
output_name: ”fastlane-sample.ipa",
)
end
error do |lane, exception|
slack(
message: exception.message,
success: false
)
end
end
fastlane/Fastfileの例
 コマンド
⁃ アプリのビルド
• bundle exec fastlane build
 失敗したらslackにpostされる
構成の例
- fastlane/Fastfile
- Gemfile
- Gemfile.lock
- Podfile
- Podfile.lock
- fastlane-sample.xcodeproj
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Jenkinsの設定の例(1/2)
 ビルドパラメータ
⁃ 対象となるbranchの設定
 ソースコード管理
⁃ Repository URLの指定
⁃ Branch Specifierの指定
ソースコード管理の例
ビルドパラメータ
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Jenkinsの設定の例(2/2)
ビルドの例
ビルド後の処理の例
 ビルド手順の追加
⁃ シェルの実行
 ビルド後の処理の追加
⁃ Junitテスト結果の集計
⁃ 成果物を保存
Copyright © DeNA Co.,Ltd. All Rights Reserved.
Jenkinsの例 – 実行結果
Copyright © DeNA Co.,Ltd. All Rights Reserved.
CircleCIの例
machine:
xcode:
version: 7.3.1
environment:
XCODE_SCHEME: fastlane-sample
XCODE_WORKSPACE: fastlane-sample.xcworkspace
GYM_CODE_SIGNING_IDENTITY: “iPhone Distribution: XXXX XXXX(YYYY)”
dependencies:
test:
override:
- bundle exec fastlane build
post:
- cp fastlane/report.xml $CIRCLE_TEST_REPORTS
circle.ymlの例
※iOSアプリでの利用は有料です($39/month〜)
Copyright © DeNA Co.,Ltd. All Rights Reserved.
まとめ
 fastlaneを便利に使ってCIを用意しましょう
 ステップの全てを一気にやらず簡単なところから着手しましょう
⁃ まずはアプリのビルドからはじめるのが良いです

fastlane x iOSアプリのCI

  • 1.
    Copyright © DeNACo.,Ltd. All Rights Reserved. AKIBA.swift 第6回 2016/10/25(Tue) 平田敏之@DeNA fastlane x iOSアプリのCI
  • 2.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 自己紹介  平田 敏之@DeNA ⁃ 経歴 • GWの開発 → ホムペサービスの開発、iOSアプリの開発 → SWET ⁃ SWET(Software Engineer in Test) • 事業サポートチーム / テスト基盤チーム • ミッション ⁃ DeNAサービス全般の品質向上 ⁃ DeNAエンジニアの開発生産性向上 ⁃ 私がやっていること(の一部) • クライアントアプリ周りのテスト戦略、自動テストの開発 • CI/CD環境整備 • テスト基盤環境の開発 • iOS Test Night 主催 ⁃ http://testnight.connpass.com/event/41323/
  • 3.
    Copyright © DeNACo.,Ltd. All Rights Reserved. 今日の発表の流れ  iOS x CI  CIでおこなうステップ  実際のCI環境の設定 ⁃ Jenkins ⁃ CircleCI
  • 4.
    Copyright © DeNACo.,Ltd. All Rights Reserved. iOS x CI (1/2)  CI(継続的インテグレーション) ⁃ CD(継続的デリバリー)というのもありますが、まずはCI  CI(継続的インテグレーション)のメリット ⁃ (ある程度の)品質の維持 • 何をおこなっているかに依存し変わる ⁃ 構成管理されたマシンによるビルド • 各バージョンが整っている(はず) ⁃ 作業コストの削減 • 手元で行っている作業を任せられる ⁃ 作業の形式知化 • 手元で行っていた作業をCLIでおこなうことによる形式知化 ⁃ 分析・改善のための情報の取得 • ビルド時間の推移など
  • 5.
    Copyright © DeNACo.,Ltd. All Rights Reserved. iOS x CI (2/2)  CIを得るために必要なこと ⁃ 上司の許可 • CIにはどうしてもコストがかかります.. ⁃ クラウド、オンプレのどちらにするかの判断 • プロジェクトの規模、やりたいことを踏まえて判断 ⁃ CLI上での操作 • CI上で動作させるには必要 ⁃ ★今回のメインはコチラ  CIがあることにより得られるもの ⁃ 安心感 ⁃ ファンの音がガンガンしない自マシン ⁃ CI環境の介護 • クラウド、オンプレで介護の差はある(介護0は厳しい)
  • 6.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CIでおこなうステップ(例)  アプリのビルド  アプリのテスト  静的解析(swiftLint)  アプリのdeploy(DeployGate / Crashlytics)  iTunesConnectへのupload  AppStoreのデータ更新  Slackに結果通知
  • 7.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CIでおこなうステップ x fastlane無 fastlaneを使わずにCIにのせようとすると  アプリのビルド(例) ⁃ xcodebuild –project xxxx.xcodeproj –target xxxxx –sdk iphonesimulator –configuration Debug build  アプリのテスト(例) ⁃ xcodebuild –project xxxx.xcodeproj –scheme xxxxx –sdk iphonesimulator –destination ’platform=iOS Simulartor, name=iPhone 6s’ test
  • 8.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CIでおこなうステップ x fastlane  アプリのビルド ⁃ gym  アプリのテスト ⁃ scan  静的解析(swiftLint) ⁃ swiftlint  アプリのdeploy(DeployGate / Crashlytics) ⁃ deploygate ⁃ crashlytics  iTunesConnectへのupload / AppStoreのデータ更新 ⁃ deliver  Slackに結果通知 ⁃ slack See: https://github.com/fastlane/fastlane/tree/master/fastlane/lib/fastlane/actions
  • 9.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CIでおこなうステップ x fastlane – 1st step  ★アプリのビルド ⁃ gym  アプリのテスト ⁃ scan  静的解析(swiftLint) ⁃ swiftlint  アプリのdeploy(DeployGate / Crashlytics) ⁃ deploygate ⁃ crashlytics  iTunesConnectへのupload / AppStoreのデータ更新 ⁃ deliver  ★Slackに結果通知 ⁃ slack
  • 10.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Fastfileの用意 fastlane_version "1.105.3” default_platform :ios platform :ios do before_all do ENV[“SLACK_URL”] || = https://hooks.slack.com/.. cocoapods end desc ”build ipa file” lane :build do increment_build_number gym( workspace: “fastlane-sample.xcworkspace", scheme: ”fastlane-sample", configuration: ”Release", clean: true, use_legacy_build_api: true, output_name: ”fastlane-sample.ipa", ) end error do |lane, exception| slack( message: exception.message, success: false ) end end fastlane/Fastfileの例  コマンド ⁃ アプリのビルド • bundle exec fastlane build  失敗したらslackにpostされる 構成の例 - fastlane/Fastfile - Gemfile - Gemfile.lock - Podfile - Podfile.lock - fastlane-sample.xcodeproj
  • 11.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Jenkinsの設定の例(1/2)  ビルドパラメータ ⁃ 対象となるbranchの設定  ソースコード管理 ⁃ Repository URLの指定 ⁃ Branch Specifierの指定 ソースコード管理の例 ビルドパラメータ
  • 12.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Jenkinsの設定の例(2/2) ビルドの例 ビルド後の処理の例  ビルド手順の追加 ⁃ シェルの実行  ビルド後の処理の追加 ⁃ Junitテスト結果の集計 ⁃ 成果物を保存
  • 13.
    Copyright © DeNACo.,Ltd. All Rights Reserved. Jenkinsの例 – 実行結果
  • 14.
    Copyright © DeNACo.,Ltd. All Rights Reserved. CircleCIの例 machine: xcode: version: 7.3.1 environment: XCODE_SCHEME: fastlane-sample XCODE_WORKSPACE: fastlane-sample.xcworkspace GYM_CODE_SIGNING_IDENTITY: “iPhone Distribution: XXXX XXXX(YYYY)” dependencies: test: override: - bundle exec fastlane build post: - cp fastlane/report.xml $CIRCLE_TEST_REPORTS circle.ymlの例 ※iOSアプリでの利用は有料です($39/month〜)
  • 15.
    Copyright © DeNACo.,Ltd. All Rights Reserved. まとめ  fastlaneを便利に使ってCIを用意しましょう  ステップの全てを一気にやらず簡単なところから着手しましょう ⁃ まずはアプリのビルドからはじめるのが良いです