1. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
Bitbucket を活用したコードレビュー改善事例
2016/09/27
ウルシステムズ株式会社
伊藤 昂祐
2. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 1
自己紹介
いとう こうすけ
伊藤 昂祐
kosuke.ito@ulsystems.co.jp
?ウルシステムズ株式会社
https://www.ulsystems.co.jp/
?インターネット広告事業会社の開発支援中
?社内では、アジャイル推進活動中
?認定スクラムマスタ
?スノボとスープカレーを愛する
3. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 2
アジェンダ
1. プロジェクト紹介とインターネット広告の進歩について
2. Bitbucket を活用したコードレビュー改善事例
4. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 3
プロジェクト紹介とインターネット広告の
進歩について
5. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 4
プロジェクト紹介
?クライアント
– ソネット?メディア?ネットワークス株式会社様
?主な事業内容
– DSP事業
?Logicad を提供
?RTBを活用した広告配信最適化
?機械学習?人工知能を活用したDMPによる広告配信精度の向上
?プロジェクト支援概要
– DSP/RTBシステム開発支援
– 使用しているAtlassian製品は Confluence, Jira, Bitbucket
6. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 5
いろいろなインターネット広告
バナー広告
検索連動型
広告
アプリ広告
動画広告
ネイティブ広告
7. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 6
インターネット広告の進歩
Webサイト運営者 広告主
? 商品を世の中に広めたい
? 多くの見込み客に広告を出
したい
? 自社メディア(Webサイト)
で収益をあげたい
広告業界における双方の欲求
8. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 7
インターネット広告の進歩
純広告
AD
広告代理店
Webサイト運営者
広告主
? 広告主が期間?Webサイトを選び、広告を掲載する
9. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 8
インターネット広告の進歩
アドネットワーク
広告代理店 広告主
? 多数のWebサイト上で広告配信する仕組み
? Webサイトの特性に合わせたターゲティングも可能
AD
AD
Webサイト運営者
AD
Webサイト運営者
Webサイト運営者
アドネットワーク
10. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 9
インターネット広告の進歩
アドエクスチェンジ
広告代理店 広告主
? アドネットワーク同士で広告枠を融通する
AD
Webサイト運営者
アドネットワーク
AD
AD
AD
アドエクスチェンジ
アドネットワーク
11. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 10
インターネット広告の進歩
SSP?DSP?RTB
広告代理店 広告主
? SSP(Supply Side Platform) – 広告枠の価値を最大化
? DSP(Demand Side Platform) – 広告主の利益を最大化
? RTB(Real Time Bidding) – リアルタイムで広告の競争入札する仕組み
AD
Webサイト運営者
アドネットワークAD
AD
AD
AD
AD
アドエクスチェンジ
DSPSSP
RTB
12. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 11
RTBの流れ
AD
ID=XYZ SSP事業者
DSP3
DSP2
DSP1
WebサイトA
WebサイトA に、XYZさんが来ました。
誰か広告を出したい方いませんか?
1円
2円
3円
WIN
PVから広告表示まで 0.1秒(100ミリ秒)で広告オークショ
ンが行われる
13. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 12
インターネット広告の進歩
DMP
広告代理店 広告主
AD
Webサイト運営者
アドネットワークAD
AD
AD
AD
AD
アドエクスチェンジ
DSPSSP
RTB
? データマネジメントプラットフォーム
? オーディエンスデータを蓄積?分析して広告配信に活用
DMP
14. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 13
DSP/RTB事業のシステム開発を行うにあたって
?業界は急速に進歩していて、新機能を素早く開発することが
求められている
?広告配信は24時間365日行われているため、可用性が高く高
品質なシステムが求められている
?RTB入札の性能要求が厳しく、継続的な性能改善が求められ
る
15. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 14
Bitbucket を活用した
コードレビュー改善事例
16. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 15
コードレビューの目的は、ただコードの誤りを修正
するだけではありません。重要なのは、チーム全員
に同じ知識を共有させること、またコーディングに
おいて全員が守るべきガイドラインを確立すること
です。コードレビューを成功させるために最も有効
な方法は、レビューを楽しいものにすることです。
by Mattias Karlsson 「プログラマが知るべき97のこと」より
17. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 16
プロジェクトの前提
?背景
– SVN から Git へ移行を行い、その後の運用についての話です
?リポジトリ管理
– Bitbucket(Git) を使用
?チーム
– チームは 5±2人で運用
– チームの Git 経験者はゼロに近い状態
– リリース周期は 1週間~1ヶ月
– アジャイルなチームを目指したフラットな組織
18. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 17
ブランチ戦略
?要求
– プロダクトの安定稼動が出来ること
– 新規機能の開発を活発に行えること
– バグ発生時にバージョンを容易に戻せること
– 機能開発中にバグ修正を差し込めること
※ A Successful Git Branching Model より
http://nvie.com/posts/a-successful-git-
branching-model/
?git-flow の採用
– 相反する要求を満たすブランチの運用
– メジャーリリース?マイナーリリースが混在する
プロダクトに有効
– Github Flow や GitLab Flow と比較すると多少
複雑で慣れるまで時間がかかる
19. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 18
SouceTree とは
?https://ja.atlassian.com/software/sourcetree
?Atlassian 社が提供
?Gitクライアントツール
?コマンドライン不要。GUIでリポジトリの運用可能
20. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 19
SouceTree の運用
リポジトリ操作がボタンひとつで簡単に出来る
コミットツリーの参照が可能
「Git Flow」ボタンにより、git-flow
に従った操作を行うよう助ける
21. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 20
SouceTree を使って良かったこと
? コマンドを使用することなく Gitリポジトリの
操作が容易に出来る
? 開発スピードを落とすことなく、git-flow の
導入と学習を進めることが出来る
22. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 21
リポジトリ管理
?https://bitbucket.org/
?Atlassian 社が提供
?Gitリポジトリ管理ツール
23. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 22
当初のコードレビューのやり方
プルリクエ
ストの作成
開発者
対面レビュー
プルリクエス
トのマージ
承認
レビュワー
修正が必要か
コードの修正
必要
不要
開発者
説明
指摘
24. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 23
プルリクエストの作成
タイトル
説明
レビュアー
タイトル?説明の入力?依頼するレ
ビュアーの選択を行いプルリクエスト
を作成する
25. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 24
プルリクエストの作成
説明
レビュアー
タイトル
? プルリクエスト駆動の開発でコードレビュー
が必須に
26. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 25
コードレビューの実施
?インラインディスカッション
– インラインコメント?メンションを使用した
コミュニケーション
– マークアップシンタックス
コードの近くにフィードバックを書
くことで、レビュー効率アップ
横並び差分表示も可能
27. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 26
コードレビューに関する情報の表示
?JIRAの課題ワークフローにレビュー中のステータスを追加
タスクかんばんの列に「レビュー中」を
追加。レビューステータスを可視化
開発ブランチの状態をひとまとめ
に表示。すぐに状況の認識が可能
28. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 27
プルリクエストのマージ
?マージ方法
マージ条件の設定
承認者の人数?タスクの解決?ビルドの成功
を条件に設定することが出来る。
→開発者の独断で判断でマージすることを防
止する。
ブランチパーミッション
特定のブランチに対して、削除?変更を防
ぐ設定を行うことが出来る。
→ git flow で開発者に許可されていない操
作を事前に防止する。
29. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 28
Bitbucket(Git)の開発作業に慣れてきたころ、
コードレビューにいくつかの問題が???
30. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 29
こんなコードレビューはイヤだ
?何を確認すれば良いかわからない
?クソコードが大量発生する
?なかなかレビューされない
?レビューのコストが高すぎる
?コードの誤りを指摘するだけになっている
31. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 30
?タイトル?説明の記載をルール化する
プルリクエストの改善
1. 対面レビューは必要か
? 要 or 不要を記載
? 重要度やコードの複雑度によって開発者が判断
? 直接説明したほうが、はやいものも要と判断
2. 緊急度
? 高中低 or レビュー期限をブランチ特性から記載
3. 対応内容
? プルリクエストの単位を小さくする
? プルリクエストの目的を明確にする
? レビューの観点を明確にする
? 関連リンクを記載
説明
1. WIP(Work In Progress)の活用
2. RFC(Request For Comment)の活用
タイトル
32. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 31
コードレビューの改善
?対面レビューは必要なものだけに限定して行う
?その代わりにインラインディスカッションの質を上げる
– 誤りの指摘を書くだけではなく、気づきや質問も記載するよう啓蒙
– 意見募集の書き込み
– 新しい実装方法を提案と「いいね!」の使用
– 修正?調査が必要なコメントにはタスクの作成
33. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 32
改善による変化
?何を確認すれば良いかわからない
→プルリクエストの説明改善でレビューポイントが明確に
?クソコードが大量発生する
→WIP?RFC でリスクを事前につぶせるように
?なかなかレビューされない
→プルリクエストを小さくすることでレビューが容易に
?レビューのコストが高すぎる
→必要最低限の対面レビューをすることコスト削減
?コードの誤りを指摘するだけになっている
→気付きや質問を書き込むことで徐々に議論が活発に
→議論の中から、知識の共有や新しいアイデアが出るように
34. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 33
現在のコードレビューのやり方
プルリクエ
ストの作成
対面レビュー
が必要か
開発者
対面レビュー
机上レビュー
プルリクエス
トのマージ
承認
レビュワー
修正が必要か
コードの修正
必要
必要
不要
不要
開発者
チーム全体で双方向的
コミュニケーション
重要なものに限定して、
対面レビュー
レビューに必要な情報を明確に
して、円滑なレビュー実施へ
35. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 34
プラグイン連携
?Slack notifications plugin
– Bitbucket のイベントを Slack に通知する
?Webhook to Jenkins for Bitbucket
– Bitbucket のイベントを Jenkins に通知する
ビルド?デプロイ?
自動テストの実行
イベントの通知結果通知
36. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 35
Slack への通知
? 応答性の向上
? チームが知るべき情報の通知
– 障害Alert
– チームの予定
– ビルドデプロイ?自動テストの結果
– タスクのイベントを通知
37. ULS
Copyright ? 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 36
ありがとうございました