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 )

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