iOSにおけるコードレビューを一歩先へ進める

Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
俺コン Vol.1 / Day. 1
2017/10/02 (Mon)
前⽥隼輔
SWETグループ
DeNA Co., Ltd.
iOSにおけるコードレビュー
を⼀歩先へ進める
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
n前⽥隼輔
• @duck8823
• 所属
• DeNA SWETグループ テスト基盤チーム
⾃⼰紹介
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
Dangerを利⽤したレビュー(前)チェック
• GitHub Bot を簡単に作るツール
• PRを静的チェック
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
Dangerを利⽤したレビュー(前)チェック
https://www.slideshare.net/ShunsukeMaeda/dangerpull-
request?qid=4757fbc8-16c0-4f07-ae16-
6f0eb90ec7b2&v=&b=&from_search=1
https://www.slideshare.net/ShunsukeMaeda/pull-request-
76210799?qid=2a587e94-f5f8-4b79-aebd-
0b32b4b6f028&v=&b=&from_search=1
• Dangerの紹介
• PR時のチェックルール
の紹介
• GitHubを⽤いて画⾯
差分を視覚化
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
Dangerでチェックしているルール
• タイトルが WIP になっていないか
• 変更があったディレクトリに応じて CIジョブ が実⾏されているか
(コミットステータスのチェック)
• プロダクトコードの変更 => ビルド / テスト
• テストコードの変更 => テスト
• リソースファイルの変更 => 画⾯のキャプチャ
• チケットのURLが貼られているか
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
リソースの変更 => 画⾯のキャプチャ
• リソースファイルの変更で
画像取得ジョブ
• 画像はジョブ実⾏時に
⾃動プッシュ
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
Dangerでチェックしているルール
• タイトルが WIP になっていないか
• 変更があったディレクトリに応じて CIジョブ が実⾏されているか
(コミットステータスのチェック)
• プロダクトコードの変更 => ビルド / テスト
• テストコードの変更 => テスト
• リソースファイルの変更 => 画⾯のキャプチャ
• チケットのURLが貼られているか
さらに掘り下げる
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
どのコミットステータスをみるのか
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
とあるPull Request... (実際の画⾯とは異なります)
• プロダクトコードの変更 commit 1
• テストコードの変更 commit 2
ビルドしてテストして
• レビューしてええで
• README更新 commit 3
• レビューお願い
• ビルドとテストやってから⾔って
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
• プロダクトコードの変更 commit 1
• テストコードの変更 commit 2
ビルドしてテストして
• レビューしてええで
• README更新 commit 3
• レビューお願い
• ビルドとテストやってから⾔って
ビルド
テスト
とあるPull Request... (実際の画⾯とは異なります)
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
• プロダクトコードの変更 commit 1
• テストコードの変更 commit 2
レビューお願い
• レビューしてええで
• README更新 commit 3
• レビューお願い
• ビルドとテストやってから⾔って
ビルド
テスト
とあるPull Request... (実際の画⾯とは異なります)
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
• プロダクトコードの変更 commit 1
• テストコードの変更 commit 2
レビューお願い
• レビューしてええで
• README更新 commit 3
• レビューお願い
• ビルドとテストやってから⾔って
ビルド
テスト
とあるPull Request... (実際の画⾯とは異なります)
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
• プロダクトコードの変更 commit 1
• テストコードの変更 commit 2
レビューお願い
• レビューしてええで
• README更新 commit 3
• レビューお願い
• ビルドとテストしてから⾔って
ビルド
テスト
とあるPull Request... (実際の画⾯とは異なります)
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
• プロダクトコードの変更 commit 1
• テストコードの変更 commit 2
レビューお願い
• レビューしてええで
• README更新 commit 3
• レビューお願い
• ビルドとテストしてから⾔って
ビルド
テスト
直前のコミットステータス
しかみない
無駄にCIを回す
とあるPull Request... (実際の画⾯とは異なります)
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
過去の成功からの差分を⾒る
• プロダクトコードの変更 commit 1
• テストコードの変更 commit 2
レビューお願い
• レビューしてええで
• README更新 commit 3
• レビューお願い
• レビューしてええで
ビルド
テスト
HEAD - 前回成功間
でソースに変更が
あるかチェック
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
DangerfileでGitHub API
• github.api でOctokitインスタンス取得
• GitHub API v3に対応した Rubyクライアント
• トークンでログイン済み
• Auto Paginate は true になっている
• ステータス取得メソッドなど
• Octokit経由で Pull Request の操作も可能( やりすぎは注意 )
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
Dangerプラグインを作成するときの注意
• Dangerプラグインの引数なしメソッドは
danger local または danger pr でコールされる
• Pull Request をクローズ / オープンする
引数なしメソッドを作ると...
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
Dangerでチェックしているルール
• タイトルが WIP になっていないか
• 変更があったディレクトリに応じて CIジョブ が実⾏されているか
(コミットステータスのチェック)
• プロダクトコードの変更 => ビルド / テスト
• テストコードの変更 => テスト
• リソースファイルの変更 => 画⾯のキャプチャ
• チケットのURLが貼られているか
さらに掘り下げる
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
ディレクトリ構造 ≠ プロジェクト構造
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
ディレクトリ構造 ≠ プロジェクト構造
• プロジェクト( .xcodeproj ) への追加( コミット )漏れ
• プロジェクトターゲットが複数ディレクトリにまたがる場合
判断しづらい
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
ディレクトリ構造 ≠ プロジェクト構造
• プロジェクト( .xcodeproj ) への追加( コミット )漏れ
• プロジェクトターゲットが複数ディレクトリにまたがる場合
判断しづらい
プロジェクト構造から判断する
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
Dangerfileで プロジェクトのファイルを⾒る
• DangerfileではGemが使える
=> xcodeproj https://rubygems.org/gems/xcodeproj
• 特定のターゲットのファイル⼀覧を取得できる
https://github.com/CocoaPods/Xcodeproj
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
Dangerでのチェック
• 指定ディレクトリ以下にファイルが追加・削除された際に .xcodeproj
も更新されているかどうか
• 変更があったディレクトリプロジェクトターゲットに応じて CIジョブ
が実⾏されているか
Copyright	©	DeNA Co.,Ltd.	All	Rights	Reserved.
まとめ
• 最新のコミットだけでなくPR全体で判断する
• ディレクトリではなくプロジェクト構造をみる
• Dangerfile は Ruby DSL
• 便利なライブラリはどんどん使おう( Octokit / xcodeproj )
1 of 24

Recommended

Dangerでpull requestレビューの指摘事項を減らす by
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
4.6K views25 slides
バージョンアップ対応を軽減するサービス:マスティフ by
バージョンアップ対応を軽減するサービス:マスティフバージョンアップ対応を軽減するサービス:マスティフ
バージョンアップ対応を軽減するサービス:マスティフToshiyuki Hirata
1.9K views15 slides
iOSで利用できるデバイスファームのメリット・デメリットの紹介 by
iOSで利用できるデバイスファームのメリット・デメリットの紹介iOSで利用できるデバイスファームのメリット・デメリットの紹介
iOSで利用できるデバイスファームのメリット・デメリットの紹介Shunsuke Maeda
4.8K views16 slides
2017年のiOSアプリ開発におけるCI事情 by
2017年のiOSアプリ開発におけるCI事情2017年のiOSアプリ開発におけるCI事情
2017年のiOSアプリ開発におけるCI事情Toshiyuki Hirata
6.9K views20 slides
DroidKaigi_devicefarm by
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarmShunsuke Maeda
6.2K views87 slides
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス by
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスマスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービス
マスティフ (for Xcode beta) - バージョンアップ対応を軽減するためのサービスToshiyuki Hirata
1.5K views12 slides

More Related Content

What's hot

Pull request時の画面差分取得の自動化 by
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化Shunsuke Maeda
6.3K views22 slides
Bluepillを使ったiOS自動テストの並列化 by
Bluepillを使ったiOS自動テストの並列化Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化Toshiyuki Hirata
1.7K views9 slides
iOSアプリの自動テストをはじめよう by
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめようToshiyuki Hirata
17.5K views21 slides
DeNAにおけるSWETの役割 by
DeNAにおけるSWETの役割DeNAにおけるSWETの役割
DeNAにおけるSWETの役割Toshiyuki Hirata
6.7K views18 slides
Android e2e testing at mercari by
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercariVishal Banthia
4.6K views35 slides
スマホアプリディレクターが考えていること by
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていることKazuaki KURIU
2.1K views24 slides

What's hot(20)

Pull request時の画面差分取得の自動化 by Shunsuke Maeda
Pull request時の画面差分取得の自動化Pull request時の画面差分取得の自動化
Pull request時の画面差分取得の自動化
Shunsuke Maeda6.3K views
Bluepillを使ったiOS自動テストの並列化 by Toshiyuki Hirata
Bluepillを使ったiOS自動テストの並列化Bluepillを使ったiOS自動テストの並列化
Bluepillを使ったiOS自動テストの並列化
Toshiyuki Hirata1.7K views
iOSアプリの自動テストをはじめよう by Toshiyuki Hirata
iOSアプリの自動テストをはじめようiOSアプリの自動テストをはじめよう
iOSアプリの自動テストをはじめよう
Toshiyuki Hirata17.5K views
Android e2e testing at mercari by Vishal Banthia
Android e2e testing at mercariAndroid e2e testing at mercari
Android e2e testing at mercari
Vishal Banthia4.6K views
スマホアプリディレクターが考えていること by Kazuaki KURIU
スマホアプリディレクターが考えていることスマホアプリディレクターが考えていること
スマホアプリディレクターが考えていること
Kazuaki KURIU2.1K views
Xcodeの管理を楽に - Jenkins編 - by Toshiyuki Hirata
Xcodeの管理を楽に - Jenkins編 -Xcodeの管理を楽に - Jenkins編 -
Xcodeの管理を楽に - Jenkins編 -
Toshiyuki Hirata3.2K views
UIテストの実行時間の短縮の方法 by Toshiyuki Hirata
UIテストの実行時間の短縮の方法UIテストの実行時間の短縮の方法
UIテストの実行時間の短縮の方法
Toshiyuki Hirata4.7K views
iOSアプリ開発のCI環境 - Jenkins編 - by Toshiyuki Hirata
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -
Toshiyuki Hirata3.1K views
iOSアプリにおけるリリースフローとCI環境 by Toshiyuki Hirata
iOSアプリにおけるリリースフローとCI環境iOSアプリにおけるリリースフローとCI環境
iOSアプリにおけるリリースフローとCI環境
Toshiyuki Hirata4.1K views
バージョンアップの対応を軽減するためのサービスの構築 by Toshiyuki Hirata
バージョンアップの対応を軽減するためのサービスの構築バージョンアップの対応を軽減するためのサービスの構築
バージョンアップの対応を軽減するためのサービスの構築
Toshiyuki Hirata6.1K views
Xcode10での テスト周りの進化をふりかえる by Toshiyuki Hirata
Xcode10での テスト周りの進化をふりかえるXcode10での テスト周りの進化をふりかえる
Xcode10での テスト周りの進化をふりかえる
Toshiyuki Hirata1.8K views
fastlane snapshotの並列実行についてまとめてみた by Toshiyuki Hirata
fastlane snapshotの並列実行についてまとめてみたfastlane snapshotの並列実行についてまとめてみた
fastlane snapshotの並列実行についてまとめてみた
Toshiyuki Hirata2.6K views
Androidアプリ開発のテスト環境 by Toshiyuki Hirata
Androidアプリ開発のテスト環境Androidアプリ開発のテスト環境
Androidアプリ開発のテスト環境
Toshiyuki Hirata3K views
OpenSTFを ECSに乗せてみた話 by 司 知花
OpenSTFを ECSに乗せてみた話OpenSTFを ECSに乗せてみた話
OpenSTFを ECSに乗せてみた話
司 知花2.3K views
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜 by gree_tech
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
CEDEC2015_スマホゲーム開発を支えろ!〜汗と涙のQAエンジニアリング〜
gree_tech8.6K views
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 - by Toshiyuki Hirata
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
Toshiyuki Hirata5K views
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック by Kouhei Sutou
SEゼミ2015 - OSS Hack 4 Beginners - フィードバックSEゼミ2015 - OSS Hack 4 Beginners - フィードバック
SEゼミ2015 - OSS Hack 4 Beginners - フィードバック
Kouhei Sutou726 views
長寿なゲーム事業におけるアプリビルドの効率化 by gree_tech
長寿なゲーム事業におけるアプリビルドの効率化長寿なゲーム事業におけるアプリビルドの効率化
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech347 views

Similar to iOSにおけるコードレビューを一歩先へ進める

MakeGoodで快適なテスト駆動開発を by
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
1.2K views28 slides
2014-04-22 Ques #4 Automation Testing of Mobage Platform by
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
6.6K views64 slides
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築 by
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築CROOZ, inc.
50.1K views54 slides
Rails on GKEで運用するWebアプリケーションの紹介 by
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Makoto Haruyama
4.2K views44 slides
ドリコムJenkins勉強会資料 by
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料Go Sueyoshi (a.k.a sue445)
8.4K views28 slides
Voicepic@FukuiMASeminar by
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
1.4K views33 slides

Similar to iOSにおけるコードレビューを一歩先へ進める(20)

MakeGoodで快適なテスト駆動開発を by Atsuhiro Kubo
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
Atsuhiro Kubo1.2K views
2014-04-22 Ques #4 Automation Testing of Mobage Platform by Masaki Nakagawa
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
Masaki Nakagawa6.6K views
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築 by CROOZ, inc.
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
CROOZ, inc.50.1K views
Rails on GKEで運用するWebアプリケーションの紹介 by Makoto Haruyama
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
Makoto Haruyama4.2K views
GitHub Actions で CI/CD by Issei Hiraoka
GitHub Actions で CI/CDGitHub Actions で CI/CD
GitHub Actions で CI/CD
Issei Hiraoka252 views
Jenkins+Gitによる検証済みマージ(30分版) by Kohsuke Kawaguchi
Jenkins+Gitによる検証済みマージ(30分版)Jenkins+Gitによる検証済みマージ(30分版)
Jenkins+Gitによる検証済みマージ(30分版)
Git & GitHub & kintone でウルトラハッピー! by ymmt
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
ymmt 35.4K views
devsami kansai 2012 #c2 by Yushi_Takagi
devsami kansai 2012 #c2devsami kansai 2012 #c2
devsami kansai 2012 #c2
Yushi_Takagi996 views
Robotium を使った UI テスト by 健一 辰濱
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト
健一 辰濱1K views
Gitと出会って人生変わった テックヒルズ2013-03-22 by Shota Umeda
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda5.6K views
GitHubの機能を活用したGitHub Flowによる開発の進め方 by Takeshi Mikami
GitHubの機能を活用したGitHub Flowによる開発の進め方GitHubの機能を活用したGitHub Flowによる開発の進め方
GitHubの機能を活用したGitHub Flowによる開発の進め方
Takeshi Mikami5.4K views
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ by Takeshi Mikami
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウCircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
Takeshi Mikami862 views
技術選択とアーキテクトの役割 by Toru Yamaguchi
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi42K views
Developer summit continuous deliveryとjenkins by Kohsuke Kawaguchi
Developer summit   continuous deliveryとjenkinsDeveloper summit   continuous deliveryとjenkins
Developer summit continuous deliveryとjenkins
Kohsuke Kawaguchi3.6K views
RustでWebSocketな自社APIを使う by Satoshi Yoshikawa
RustでWebSocketな自社APIを使うRustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
Satoshi Yoshikawa1.2K views
20170209 ios/android app_build/test pipeline by Masashi Kurita
20170209 ios/android app_build/test pipeline20170209 ios/android app_build/test pipeline
20170209 ios/android app_build/test pipeline
Masashi Kurita2.1K views

iOSにおけるコードレビューを一歩先へ進める