SlideShare a Scribd company logo
1 of 37
Download to read offline
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by
Bitbucket を活用したコードレビュー改善事例
2016/09/27
ウルシステムズ株式会社
伊藤 昂祐
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/
インターネット広告事業会社の開発支援中
社内では、アジャイル推進活動中
認定スクラムマスタ
スノボとスープカレーを愛する
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 2
アジェンダ
1. プロジェクト紹介とインターネット広告の進歩について
2. Bitbucket を活用したコードレビュー改善事例
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 3
プロジェクト紹介とインターネット広告の
進歩について
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
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 5
いろいろなインターネット広告
バナー広告
検索連動型
広告
アプリ広告
動画広告
ネイティブ広告
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 6
インターネット広告の進歩
Webサイト運営者 広告主
 商品を世の中に広めたい
 多くの見込み客に広告を出
したい
 自社メディア(Webサイト)
で収益をあげたい
広告業界における双方の欲求
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 7
インターネット広告の進歩
純広告
AD
広告代理店
Webサイト運営者
広告主
 広告主が期間・Webサイトを選び、広告を掲載する
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 8
インターネット広告の進歩
アドネットワーク
広告代理店 広告主
 多数のWebサイト上で広告配信する仕組み
 Webサイトの特性に合わせたターゲティングも可能
AD
AD
Webサイト運営者
AD
Webサイト運営者
Webサイト運営者
アドネットワーク
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 9
インターネット広告の進歩
アドエクスチェンジ
広告代理店 広告主
 アドネットワーク同士で広告枠を融通する
AD
Webサイト運営者
アドネットワーク
AD
AD
AD
アドエクスチェンジ
アドネットワーク
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
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ミリ秒)で広告オークショ
ンが行われる
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
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 13
DSP/RTB事業のシステム開発を行うにあたって
業界は急速に進歩していて、新機能を素早く開発することが
求められている
広告配信は24時間365日行われているため、可用性が高く高
品質なシステムが求められている
RTB入札の性能要求が厳しく、継続的な性能改善が求められ
る
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 14
Bitbucket を活用した
コードレビュー改善事例
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 15
コードレビューの目的は、ただコードの誤りを修正
するだけではありません。重要なのは、チーム全員
に同じ知識を共有させること、またコーディングに
おいて全員が守るべきガイドラインを確立すること
です。コードレビューを成功させるために最も有効
な方法は、レビューを楽しいものにすることです。
by Mattias Karlsson 「プログラマが知るべき97のこと」より
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 16
プロジェクトの前提
背景
– SVN から Git へ移行を行い、その後の運用についての話です
リポジトリ管理
– Bitbucket(Git) を使用
チーム
– チームは 5±2人で運用
– チームの Git 経験者はゼロに近い状態
– リリース周期は 1週間~1ヶ月
– アジャイルなチームを目指したフラットな組織
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 と比較すると多少
複雑で慣れるまで時間がかかる
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でリポジトリの運用可能
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 19
SouceTree の運用
リポジトリ操作がボタンひとつで簡単に出来る
コミットツリーの参照が可能
「Git Flow」ボタンにより、git-flow
に従った操作を行うよう助ける
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 20
SouceTree を使って良かったこと
 コマンドを使用することなく Gitリポジトリの
操作が容易に出来る
 開発スピードを落とすことなく、git-flow の
導入と学習を進めることが出来る
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 21
リポジトリ管理
https://bitbucket.org/
Atlassian 社が提供
Gitリポジトリ管理ツール
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 22
当初のコードレビューのやり方
プルリクエ
ストの作成
開発者
対面レビュー
プルリクエス
トのマージ
承認
レビュワー
修正が必要か
コードの修正
必要
不要
開発者
説明
指摘
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 23
プルリクエストの作成
タイトル
説明
レビュアー
タイトル・説明の入力・依頼するレ
ビュアーの選択を行いプルリクエスト
を作成する
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 24
プルリクエストの作成
説明
レビュアー
タイトル
 プルリクエスト駆動の開発でコードレビュー
が必須に
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 25
コードレビューの実施
インラインディスカッション
– インラインコメント・メンションを使用した
コミュニケーション
– マークアップシンタックス
コードの近くにフィードバックを書
くことで、レビュー効率アップ
横並び差分表示も可能
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 26
コードレビューに関する情報の表示
JIRAの課題ワークフローにレビュー中のステータスを追加
タスクかんばんの列に「レビュー中」を
追加。レビューステータスを可視化
開発ブランチの状態をひとまとめ
に表示。すぐに状況の認識が可能
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 27
プルリクエストのマージ
マージ方法
マージ条件の設定
承認者の人数・タスクの解決・ビルドの成功
を条件に設定することが出来る。
→開発者の独断で判断でマージすることを防
止する。
ブランチパーミッション
特定のブランチに対して、削除・変更を防
ぐ設定を行うことが出来る。
→ git flow で開発者に許可されていない操
作を事前に防止する。
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 28
Bitbucket(Git)の開発作業に慣れてきたころ、
コードレビューにいくつかの問題が・・・
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 29
こんなコードレビューはイヤだ
何を確認すれば良いかわからない
クソコードが大量発生する
なかなかレビューされない
レビューのコストが高すぎる
コードの誤りを指摘するだけになっている
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)の活用
タイトル
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 31
コードレビューの改善
対面レビューは必要なものだけに限定して行う
その代わりにインラインディスカッションの質を上げる
– 誤りの指摘を書くだけではなく、気づきや質問も記載するよう啓蒙
– 意見募集の書き込み
– 新しい実装方法を提案と「いいね!」の使用
– 修正・調査が必要なコメントにはタスクの作成
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 32
改善による変化
何を確認すれば良いかわからない
→プルリクエストの説明改善でレビューポイントが明確に
クソコードが大量発生する
→WIP・RFC でリスクを事前につぶせるように
なかなかレビューされない
→プルリクエストを小さくすることでレビューが容易に
レビューのコストが高すぎる
→必要最低限の対面レビューをすることコスト削減
コードの誤りを指摘するだけになっている
→気付きや質問を書き込むことで徐々に議論が活発に
→議論の中から、知識の共有や新しいアイデアが出るように
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 33
現在のコードレビューのやり方
プルリクエ
ストの作成
対面レビュー
が必要か
開発者
対面レビュー
机上レビュー
プルリクエス
トのマージ
承認
レビュワー
修正が必要か
コードの修正
必要
必要
不要
不要
開発者
チーム全体で双方向的
コミュニケーション
重要なものに限定して、
対面レビュー
レビューに必要な情報を明確に
して、円滑なレビュー実施へ
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 に通知する
ビルド・デプロイ・
自動テストの実行
イベントの通知結果通知
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 35
Slack への通知
 応答性の向上
 チームが知るべき情報の通知
– 障害Alert
– チームの予定
– ビルドデプロイ・自動テストの結果
– タスクのイベントを通知
ULS
Copyright © 2011-2016 UL Systems, Inc. All rights reserved.
Proprietary & Confidential Powered by 36
ありがとうございました

More Related Content

What's hot

async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計Kouji YAMADA
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~Daisuke Morishita
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)NTT DATA Technology & Innovation
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮Hibino Hisashi
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計Yoshinori Matsunobu
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 

What's hot (20)

async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 

Similar to Bitbucketを活用したコードレビュー改善事例

ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発政雄 金森
 
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発Takashi Watanabe
 
OSSではじめるオープン・スタンダードのクラウド @201304
OSSではじめるオープン・スタンダードのクラウド @201304OSSではじめるオープン・スタンダードのクラウド @201304
OSSではじめるオープン・スタンダードのクラウド @201304Shinichiro Arai
 
AWS における Microservices Architecture と DevOps を推進する組織と人とツール
AWS における Microservices Architecture と DevOps を推進する組織と人とツールAWS における Microservices Architecture と DevOps を推進する組織と人とツール
AWS における Microservices Architecture と DevOps を推進する組織と人とツールAmazon Web Services Japan
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨Amazon Web Services Japan
 
企業組織論としてのオープンイノベーション
企業組織論としてのオープンイノベーション企業組織論としてのオープンイノベーション
企業組織論としてのオープンイノベーションOsaka University
 
ERPのデータをフロントシステムでどう活かすか
ERPのデータをフロントシステムでどう活かすかERPのデータをフロントシステムでどう活かすか
ERPのデータをフロントシステムでどう活かすかRyuji Enoki
 
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹Insight Technology, Inc.
 
Cloud Native市場動向およびRancher Labsが提供するKubernetes Everywhere戦略について
Cloud Native市場動向およびRancher Labsが提供するKubernetes Everywhere戦略についてCloud Native市場動向およびRancher Labsが提供するKubernetes Everywhere戦略について
Cloud Native市場動向およびRancher Labsが提供するKubernetes Everywhere戦略についてJunji Nishihara
 
20161111 java one2016-feedback
20161111 java one2016-feedback20161111 java one2016-feedback
20161111 java one2016-feedbackTakashi Ito
 
DevOps時代到来!Engine YardのPaaSで変わるシステムの開発と運用のあり方
DevOps時代到来!Engine YardのPaaSで変わるシステムの開発と運用のあり方DevOps時代到来!Engine YardのPaaSで変わるシステムの開発と運用のあり方
DevOps時代到来!Engine YardのPaaSで変わるシステムの開発と運用のあり方Takahiro Imanaka
 
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」アトラシアン株式会社
 
【17-D-6】「ソフトウェアの収益増大のためのセキュリティソリューション」小池康幸氏
【17-D-6】「ソフトウェアの収益増大のためのセキュリティソリューション」小池康幸氏【17-D-6】「ソフトウェアの収益増大のためのセキュリティソリューション」小池康幸氏
【17-D-6】「ソフトウェアの収益増大のためのセキュリティソリューション」小池康幸氏Developers Summit
 
Okinawa Open Daysでの講演(OpenStackトレーニングなど)
Okinawa Open Daysでの講演(OpenStackトレーニングなど)Okinawa Open Daysでの講演(OpenStackトレーニングなど)
Okinawa Open Daysでの講演(OpenStackトレーニングなど)Satoshi Konno
 
20131212 morphlabs okinawa_presentation
20131212 morphlabs okinawa_presentation20131212 morphlabs okinawa_presentation
20131212 morphlabs okinawa_presentationsaktomshu
 
いまさら聞けない Amazon EC2
いまさら聞けない Amazon EC2いまさら聞けない Amazon EC2
いまさら聞けない Amazon EC2Yasuhiro Matsuo
 
AWS Well-Architected Security とベストプラクティス
AWS Well-Architected Security とベストプラクティスAWS Well-Architected Security とベストプラクティス
AWS Well-Architected Security とベストプラクティスAmazon Web Services Japan
 
Ossを使ったazureでのdev ops
Ossを使ったazureでのdev opsOssを使ったazureでのdev ops
Ossを使ったazureでのdev ops裕貴 荒井
 

Similar to Bitbucketを活用したコードレビュー改善事例 (20)

ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発ハイブリットクラウド環境におけるモダンアプリケーション開発
ハイブリットクラウド環境におけるモダンアプリケーション開発
 
Oss事例紹介資料20141111 明日の認証会議 掲載用
Oss事例紹介資料20141111 明日の認証会議 掲載用Oss事例紹介資料20141111 明日の認証会議 掲載用
Oss事例紹介資料20141111 明日の認証会議 掲載用
 
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
 
OSSではじめるオープン・スタンダードのクラウド @201304
OSSではじめるオープン・スタンダードのクラウド @201304OSSではじめるオープン・スタンダードのクラウド @201304
OSSではじめるオープン・スタンダードのクラウド @201304
 
AWS における Microservices Architecture と DevOps を推進する組織と人とツール
AWS における Microservices Architecture と DevOps を推進する組織と人とツールAWS における Microservices Architecture と DevOps を推進する組織と人とツール
AWS における Microservices Architecture と DevOps を推進する組織と人とツール
 
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
202202 AWS Black Belt Online Seminar AWS SaaS Boost で始めるSaaS開発⼊⾨
 
企業組織論としてのオープンイノベーション
企業組織論としてのオープンイノベーション企業組織論としてのオープンイノベーション
企業組織論としてのオープンイノベーション
 
ERPのデータをフロントシステムでどう活かすか
ERPのデータをフロントシステムでどう活かすかERPのデータをフロントシステムでどう活かすか
ERPのデータをフロントシステムでどう活かすか
 
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹
20180124_ソフトウェアテストを効率的に実施するためのデータの仮想化と自動化とは? by 株式会社インサイトテクノロジー 益秀樹
 
Cloud Native市場動向およびRancher Labsが提供するKubernetes Everywhere戦略について
Cloud Native市場動向およびRancher Labsが提供するKubernetes Everywhere戦略についてCloud Native市場動向およびRancher Labsが提供するKubernetes Everywhere戦略について
Cloud Native市場動向およびRancher Labsが提供するKubernetes Everywhere戦略について
 
20161111 java one2016-feedback
20161111 java one2016-feedback20161111 java one2016-feedback
20161111 java one2016-feedback
 
DevOps時代到来!Engine YardのPaaSで変わるシステムの開発と運用のあり方
DevOps時代到来!Engine YardのPaaSで変わるシステムの開発と運用のあり方DevOps時代到来!Engine YardのPaaSで変わるシステムの開発と運用のあり方
DevOps時代到来!Engine YardのPaaSで変わるシステムの開発と運用のあり方
 
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
2019年9月18日開催AWS Japan × Atlassianセミナー_セッション2「AmazonカルチャーとDevOps」
 
【17-D-6】「ソフトウェアの収益増大のためのセキュリティソリューション」小池康幸氏
【17-D-6】「ソフトウェアの収益増大のためのセキュリティソリューション」小池康幸氏【17-D-6】「ソフトウェアの収益増大のためのセキュリティソリューション」小池康幸氏
【17-D-6】「ソフトウェアの収益増大のためのセキュリティソリューション」小池康幸氏
 
20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes
 
Okinawa Open Daysでの講演(OpenStackトレーニングなど)
Okinawa Open Daysでの講演(OpenStackトレーニングなど)Okinawa Open Daysでの講演(OpenStackトレーニングなど)
Okinawa Open Daysでの講演(OpenStackトレーニングなど)
 
20131212 morphlabs okinawa_presentation
20131212 morphlabs okinawa_presentation20131212 morphlabs okinawa_presentation
20131212 morphlabs okinawa_presentation
 
いまさら聞けない Amazon EC2
いまさら聞けない Amazon EC2いまさら聞けない Amazon EC2
いまさら聞けない Amazon EC2
 
AWS Well-Architected Security とベストプラクティス
AWS Well-Architected Security とベストプラクティスAWS Well-Architected Security とベストプラクティス
AWS Well-Architected Security とベストプラクティス
 
Ossを使ったazureでのdev ops
Ossを使ったazureでのdev opsOssを使ったazureでのdev ops
Ossを使ったazureでのdev ops
 

Bitbucketを活用したコードレビュー改善事例

  • 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 ありがとうございました