SlideShare a Scribd company logo
1 of 15
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を用意しましょう
 ステップの全てを一気にやらず簡単なところから着手しましょう
⁃ まずはアプリのビルドからはじめるのが良いです

More Related Content

What's hot

バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築Toshiyuki Hirata
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるToshiyuki Hirata
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情Toshiyuki Hirata
 
iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境Toshiyuki Hirata
 
スマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることKazuaki KURIU
 
iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -Toshiyuki Hirata
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Shunsuke Maeda
 
iOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるiOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるShunsuke Maeda
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
 
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスマスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスToshiyuki Hirata
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercariVishal Banthia
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割Toshiyuki Hirata
 
iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介Shunsuke Maeda
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -Toshiyuki Hirata
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストToshiyuki Hirata
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションmirer
 
OpenSTFを ECSに乗せてみた話
OpenSTFを ECSに乗せてみた話OpenSTFを ECSに乗せてみた話
OpenSTFを ECSに乗せてみた話司 知花
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告Masaki Nakagawa
 
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineerKazuaki Matsuo
 

What's hot (20)

バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築
 
Xcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえる
 
2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情
 
iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境
 
スマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていること
 
iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -
 
DroidKaigi_devicefarm
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarm
 
Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
 
iOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進めるiOSにおけるコードレビューを一歩先へ進める
iOSにおけるコードレビューを一歩先へ進める
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスマスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
 
Android e2e testing at mercari
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercari
 
DeNAにおけるSWETの役割
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割
 
iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
STFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テストSTFとAppiumをもちいたAndroidアプリの自動テスト
STFとAppiumをもちいたAndroidアプリの自動テスト
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
 
OpenSTFを ECSに乗せてみた話
OpenSTFを ECSに乗せてみた話OpenSTFを ECSに乗せてみた話
OpenSTFを ECSに乗せてみた話
 
5minQues - SWET近況報告
5minQues - SWET近況報告5minQues - SWET近況報告
5minQues - SWET近況報告
 
20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer20151021 cookpad talk_test_engineer
20151021 cookpad talk_test_engineer
 

Viewers also liked

戦車乗りもmBaaSでメール送信できるかもしれない件
戦車乗りもmBaaSでメール送信できるかもしれない件戦車乗りもmBaaSでメール送信できるかもしれない件
戦車乗りもmBaaSでメール送信できるかもしれない件Wataru Sato
 
mBaaSの基本的な扱い方の事始め(parse.comとNCMBの使い方比べ)
mBaaSの基本的な扱い方の事始め(parse.comとNCMBの使い方比べ)mBaaSの基本的な扱い方の事始め(parse.comとNCMBの使い方比べ)
mBaaSの基本的な扱い方の事始め(parse.comとNCMBの使い方比べ)Fumiya Sakai
 
Google vrからはじめるdaydreamへの道
Google vrからはじめるdaydreamへの道Google vrからはじめるdaydreamへの道
Google vrからはじめるdaydreamへの道shimada tatsuya
 
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)Fumiya Sakai
 
Tech Talk #5 : Apply CI tools in iOS development - Trương Minh Khôi
Tech Talk #5 : Apply	CI tools in iOS	development - Trương Minh KhôiTech Talk #5 : Apply	CI tools in iOS	development - Trương Minh Khôi
Tech Talk #5 : Apply CI tools in iOS development - Trương Minh KhôiNexus FrontierTech
 
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしようCa shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしようKenji Tanaka
 
バ、バカな...!ハッカソンの中で成長しているだと...!?
バ、バカな...!ハッカソンの中で成長しているだと...!?バ、バカな...!ハッカソンの中で成長しているだと...!?
バ、バカな...!ハッカソンの中で成長しているだと...!?Kenji Tanaka
 
WWDC 2016 Personal Recollection
WWDC 2016 Personal RecollectionWWDC 2016 Personal Recollection
WWDC 2016 Personal RecollectionMasayuki Iwai
 
Amazon Route53へのドメイン移管
Amazon Route53へのドメイン移管Amazon Route53へのドメイン移管
Amazon Route53へのドメイン移管Jin k
 
Unowned / Weak References with Closure
Unowned / Weak References with ClosureUnowned / Weak References with Closure
Unowned / Weak References with ClosureNaruki Chigira
 
GitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうGitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうNobuhiro Ueda
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略Hiroshi Maekawa
 
Msa読書会#3前半
Msa読書会#3前半Msa読書会#3前半
Msa読書会#3前半健仁 天沼
 
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法Kenji Tanaka
 
Build an iOS app with ConcourseCI
Build an iOS app with ConcourseCIBuild an iOS app with ConcourseCI
Build an iOS app with ConcourseCI健仁 天沼
 
GitLab CI の布教 for iOS
GitLab CI の布教 for iOSGitLab CI の布教 for iOS
GitLab CI の布教 for iOSIkada Kaori
 
はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCIYosuke Mizutani
 
Circle ciで結果をslackに通知してみる
Circle ciで結果をslackに通知してみるCircle ciで結果をslackに通知してみる
Circle ciで結果をslackに通知してみるynakahira
 

Viewers also liked (20)

戦車乗りもmBaaSでメール送信できるかもしれない件
戦車乗りもmBaaSでメール送信できるかもしれない件戦車乗りもmBaaSでメール送信できるかもしれない件
戦車乗りもmBaaSでメール送信できるかもしれない件
 
活用、CivicTechでNCMB!
活用、CivicTechでNCMB!活用、CivicTechでNCMB!
活用、CivicTechでNCMB!
 
mBaaSの基本的な扱い方の事始め(parse.comとNCMBの使い方比べ)
mBaaSの基本的な扱い方の事始め(parse.comとNCMBの使い方比べ)mBaaSの基本的な扱い方の事始め(parse.comとNCMBの使い方比べ)
mBaaSの基本的な扱い方の事始め(parse.comとNCMBの使い方比べ)
 
Google vrからはじめるdaydreamへの道
Google vrからはじめるdaydreamへの道Google vrからはじめるdaydreamへの道
Google vrからはじめるdaydreamへの道
 
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
ContainerViewとStoryboardとSwift3.0の交響曲(シンフォニー)
 
Tech Talk #5 : Apply CI tools in iOS development - Trương Minh Khôi
Tech Talk #5 : Apply	CI tools in iOS	development - Trương Minh KhôiTech Talk #5 : Apply	CI tools in iOS	development - Trương Minh Khôi
Tech Talk #5 : Apply CI tools in iOS development - Trương Minh Khôi
 
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしようCa shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
Ca shape layerの塗りつぶしルールでちょっとリッチな描画をしよう
 
バ、バカな...!ハッカソンの中で成長しているだと...!?
バ、バカな...!ハッカソンの中で成長しているだと...!?バ、バカな...!ハッカソンの中で成長しているだと...!?
バ、バカな...!ハッカソンの中で成長しているだと...!?
 
WWDC 2016 Personal Recollection
WWDC 2016 Personal RecollectionWWDC 2016 Personal Recollection
WWDC 2016 Personal Recollection
 
AWS CLI Conference 2016
AWS CLI Conference 2016AWS CLI Conference 2016
AWS CLI Conference 2016
 
Amazon Route53へのドメイン移管
Amazon Route53へのドメイン移管Amazon Route53へのドメイン移管
Amazon Route53へのドメイン移管
 
Unowned / Weak References with Closure
Unowned / Weak References with ClosureUnowned / Weak References with Closure
Unowned / Weak References with Closure
 
GitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろうGitHub + Circle CI で幸せになろう
GitHub + Circle CI で幸せになろう
 
ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略ポストJenkins時代のCI戦略
ポストJenkins時代のCI戦略
 
Msa読書会#3前半
Msa読書会#3前半Msa読書会#3前半
Msa読書会#3前半
 
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
 
Build an iOS app with ConcourseCI
Build an iOS app with ConcourseCIBuild an iOS app with ConcourseCI
Build an iOS app with ConcourseCI
 
GitLab CI の布教 for iOS
GitLab CI の布教 for iOSGitLab CI の布教 for iOS
GitLab CI の布教 for iOS
 
はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCI
 
Circle ciで結果をslackに通知してみる
Circle ciで結果をslackに通知してみるCircle ciで結果をslackに通知してみる
Circle ciで結果をslackに通知してみる
 

Similar to fastlane x iOSアプリのCI

Open STF Plugin 作ってみた
Open STF Plugin 作ってみたOpen STF Plugin 作ってみた
Open STF Plugin 作ってみたjustice_sm
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~Yuki Ando
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestMasaki Nakagawa
 
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1近藤 繁延
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーションYuta Matsumura
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Makoto Haruyama
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage PlatformMasaki Nakagawa
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
Developer summit continuous deliveryとjenkins
Developer summit   continuous deliveryとjenkinsDeveloper summit   continuous deliveryとjenkins
Developer summit continuous deliveryとjenkinsKohsuke Kawaguchi
 
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...Shinichiro Arai
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化Issei Hiraoka
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストAtsuhiro Kubo
 
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonightAmazon Web Services Japan
 
AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AzareaCluster
 
数千人が利用する楽天Redmineの過去と未来 - The past and future of Rakuten Redmine that is the...
数千人が利用する楽天Redmineの過去と未来 - The past and future of  Rakuten Redmine that is the...数千人が利用する楽天Redmineの過去と未来 - The past and future of  Rakuten Redmine that is the...
数千人が利用する楽天Redmineの過去と未来 - The past and future of Rakuten Redmine that is the...Dai FUJIHARA
 
数千人が利用する楽天Redmineの過去と未来
数千人が利用する楽天Redmineの過去と未来数千人が利用する楽天Redmineの過去と未来
数千人が利用する楽天Redmineの過去と未来Rakuten Group, Inc.
 

Similar to fastlane x iOSアプリのCI (20)

Open STF Plugin 作ってみた
Open STF Plugin 作ってみたOpen STF Plugin 作ってみた
Open STF Plugin 作ってみた
 
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
CODT2020 ビジネスプラットフォームを支えるCI/CDパイプライン ~エンタープライズのDevOpsを加速させる運用改善Tips~
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in Test
 
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
AITCシニア技術者勉強会 「今さら聞けないWebサイト開発」 vol1
 
.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション.NET アプリを改善して実践する継続的インテグレーション
.NET アプリを改善して実践する継続的インテグレーション
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform
 
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
快適・簡単・安心なアプリE2Eテストの実行環境 #stac2017
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
Developer summit continuous deliveryとjenkins
Developer summit   continuous deliveryとjenkinsDeveloper summit   continuous deliveryとjenkins
Developer summit continuous deliveryとjenkins
 
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
Cloud Days Tokyo 2015 "オンプレミス環境のクラウド化と運用を楽にする OpenStack ソリューション ~ハイブリッド・クラウドを...
 
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
Redmine Applied for Large Scale
Redmine Applied  for Large ScaleRedmine Applied  for Large Scale
Redmine Applied for Large Scale
 
Eclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテストEclipse PDT + MakeGoodによるPHPコードのテスト
Eclipse PDT + MakeGoodによるPHPコードのテスト
 
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
 
AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)AZAREA-Clusterセミナー(クラウドEXPO2013春)
AZAREA-Clusterセミナー(クラウドEXPO2013春)
 
数千人が利用する楽天Redmineの過去と未来 - The past and future of Rakuten Redmine that is the...
数千人が利用する楽天Redmineの過去と未来 - The past and future of  Rakuten Redmine that is the...数千人が利用する楽天Redmineの過去と未来 - The past and future of  Rakuten Redmine that is the...
数千人が利用する楽天Redmineの過去と未来 - The past and future of Rakuten Redmine that is the...
 
数千人が利用する楽天Redmineの過去と未来
数千人が利用する楽天Redmineの過去と未来数千人が利用する楽天Redmineの過去と未来
数千人が利用する楽天Redmineの過去と未来
 
【Alfresco勉強会】インストール手順書(windows azure)
【Alfresco勉強会】インストール手順書(windows azure)【Alfresco勉強会】インストール手順書(windows azure)
【Alfresco勉強会】インストール手順書(windows azure)
 

More from Toshiyuki Hirata

iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測Toshiyuki Hirata
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測Toshiyuki Hirata
 
iOSにおける自動テストの並列化
iOSにおける自動テストの並列化iOSにおける自動テストの並列化
iOSにおける自動テストの並列化Toshiyuki Hirata
 
UIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるUIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるToshiyuki Hirata
 
UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法Toshiyuki Hirata
 
我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有Toshiyuki Hirata
 
レビューのコストを削減するための施策
レビューのコストを削減するための施策レビューのコストを削減するための施策
レビューのコストを削減するための施策Toshiyuki Hirata
 

More from Toshiyuki Hirata (7)

iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
 
iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測iOSにおけるパフォーマンス計測
iOSにおけるパフォーマンス計測
 
iOSにおける自動テストの並列化
iOSにおける自動テストの並列化iOSにおける自動テストの並列化
iOSにおける自動テストの並列化
 
UIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめるUIテスト(Espresso)の高速化をさらにすすめる
UIテスト(Espresso)の高速化をさらにすすめる
 
UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法UIテストの実行時間を短縮させる方法
UIテストの実行時間を短縮させる方法
 
我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有我が家のLINEを中心とした情報共有
我が家のLINEを中心とした情報共有
 
レビューのコストを削減するための施策
レビューのコストを削減するための施策レビューのコストを削減するための施策
レビューのコストを削減するための施策
 

fastlane x iOSアプリのCI

  • 1. Copyright © DeNA Co.,Ltd. All Rights Reserved. AKIBA.swift 第6回 2016/10/25(Tue) 平田敏之@DeNA fastlane x iOSアプリのCI
  • 2. 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/
  • 3. Copyright © DeNA Co.,Ltd. All Rights Reserved. 今日の発表の流れ  iOS x CI  CIでおこなうステップ  実際のCI環境の設定 ⁃ Jenkins ⁃ CircleCI
  • 4. Copyright © DeNA Co.,Ltd. All Rights Reserved. iOS x CI (1/2)  CI(継続的インテグレーション) ⁃ CD(継続的デリバリー)というのもありますが、まずはCI  CI(継続的インテグレーション)のメリット ⁃ (ある程度の)品質の維持 • 何をおこなっているかに依存し変わる ⁃ 構成管理されたマシンによるビルド • 各バージョンが整っている(はず) ⁃ 作業コストの削減 • 手元で行っている作業を任せられる ⁃ 作業の形式知化 • 手元で行っていた作業をCLIでおこなうことによる形式知化 ⁃ 分析・改善のための情報の取得 • ビルド時間の推移など
  • 5. Copyright © DeNA Co.,Ltd. All Rights Reserved. iOS x CI (2/2)  CIを得るために必要なこと ⁃ 上司の許可 • CIにはどうしてもコストがかかります.. ⁃ クラウド、オンプレのどちらにするかの判断 • プロジェクトの規模、やりたいことを踏まえて判断 ⁃ CLI上での操作 • CI上で動作させるには必要 ⁃ ★今回のメインはコチラ  CIがあることにより得られるもの ⁃ 安心感 ⁃ ファンの音がガンガンしない自マシン ⁃ CI環境の介護 • クラウド、オンプレで介護の差はある(介護0は厳しい)
  • 6. Copyright © DeNA Co.,Ltd. All Rights Reserved. CIでおこなうステップ(例)  アプリのビルド  アプリのテスト  静的解析(swiftLint)  アプリのdeploy(DeployGate / Crashlytics)  iTunesConnectへのupload  AppStoreのデータ更新  Slackに結果通知
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. Copyright © DeNA Co.,Ltd. All Rights Reserved. Jenkinsの設定の例(1/2)  ビルドパラメータ ⁃ 対象となるbranchの設定  ソースコード管理 ⁃ Repository URLの指定 ⁃ Branch Specifierの指定 ソースコード管理の例 ビルドパラメータ
  • 12. Copyright © DeNA Co.,Ltd. All Rights Reserved. Jenkinsの設定の例(2/2) ビルドの例 ビルド後の処理の例  ビルド手順の追加 ⁃ シェルの実行  ビルド後の処理の追加 ⁃ Junitテスト結果の集計 ⁃ 成果物を保存
  • 13. Copyright © DeNA Co.,Ltd. All Rights Reserved. Jenkinsの例 – 実行結果
  • 14. 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〜)
  • 15. Copyright © DeNA Co.,Ltd. All Rights Reserved. まとめ  fastlaneを便利に使ってCIを用意しましょう  ステップの全てを一気にやらず簡単なところから着手しましょう ⁃ まずはアプリのビルドからはじめるのが良いです