Slide 1

Slide 1 text

CONFIDENTIAL ©NAVITIME JAPAN Sonar for Bitbucketを 試してみた ~全チームのコード品質をあげるために~ 株式会社ナビタイムジャパン 佐藤 裕也

Slide 2

Slide 2 text

CONFIDENTIAL ©NAVITIME JAPAN 佐藤 裕也 ツール導入 / 運用 / サポート グロースハック アジャイル推進

Slide 3

Slide 3 text

CONFIDENTIAL ©NAVITIME JAPAN こんなことありませんか?

Slide 4

Slide 4 text

CONFIDENTIAL ©NAVITIME JAPAN こんなことありませんか? レビューでの指摘が大変 ex)コード重複、nullチェック 1か月後…. 静的解析ツールを導入してみたけど 使わなくなった

Slide 5

Slide 5 text

CONFIDENTIAL ©NAVITIME JAPAN こんなことありませんか? レビューでの指摘が大変 ex)コード重複、nullチェック 1か月後…. 静的解析ツールを導入してみたけど 使わなくなった Sonar for Bitbucket が 解決してくれます

Slide 6

Slide 6 text

CONFIDENTIAL ©NAVITIME JAPAN アジェンダ • Sonar for Bitbucketとは? • 何故導入しようと考えたのか? • 試してみる • システム構成 • (超えていない)3つの壁 • パイロットでやってみて • まとめ

Slide 7

Slide 7 text

Sonar for Bitbucketとは

Slide 8

Slide 8 text

CONFIDENTIAL ©NAVITIME JAPAN Sonar とは 静的解析ツールです。 コード品質の可視化やバグを誘発しそうなコードの指摘等を行ってくれます。

Slide 9

Slide 9 text

CONFIDENTIAL ©NAVITIME JAPAN Sonar とは 静的解析ツールです。 コード品質の可視化やバグを誘発しそうなコードの指摘等を行ってくれます。 バグ/障害の防止 リファクタリング目標の数値化 エンジニアのモチベーション向上

Slide 10

Slide 10 text

CONFIDENTIAL ©NAVITIME JAPAN Sonar for Bitbucket とは Sonarの結果をBitbucketに表示させるプラグインです。

Slide 11

Slide 11 text

何故導入しようとしたのか

Slide 12

Slide 12 text

CONFIDENTIAL ©NAVITIME JAPAN 導入理由その1 全社的に品質を上げたい リファクタ したいな でも効果が みえにくいな… また ヒアリハット!! レビュー多い…

Slide 13

Slide 13 text

CONFIDENTIAL ©NAVITIME JAPAN 導入理由その1 Sonar をみんなに使ってもらえば解決できそうだが….

Slide 14

Slide 14 text

CONFIDENTIAL ©NAVITIME JAPAN 導入理由その2 Sonarを導入しても廃れる懸念が... 1か月後….

Slide 15

Slide 15 text

CONFIDENTIAL ©NAVITIME JAPAN 導入理由その2 こんなものがあれば….

Slide 16

Slide 16 text

CONFIDENTIAL ©NAVITIME JAPAN 導入理由 そう、Sonar for Bitbucketです

Slide 17

Slide 17 text

試してみる

Slide 18

Slide 18 text

CONFIDENTIAL ©NAVITIME JAPAN 簡易システム構成 ①フック ②実行 ③解析結果 Bamboo等、 よく使うCIツールでOK 自前で用意 Sonar for Bitbcuket公式サイト 推奨のプラグイン

Slide 19

Slide 19 text

CONFIDENTIAL ©NAVITIME JAPAN 3つの壁 Jenkinsにパラメータが渡らない クローンURLを冗長化できない SonarとBitbucketの権限を同期できない

Slide 20

Slide 20 text

CONFIDENTIAL ©NAVITIME JAPAN 3つの壁 Jenkinsにパラメータが渡らない クローンURLを冗長化できない SonarとBitbucketの権限を同期できない

Slide 21

Slide 21 text

CONFIDENTIAL ©NAVITIME JAPAN Jenkinsにパラメータが渡らない ①フック ②実行 ③解析結果

Slide 22

Slide 22 text

CONFIDENTIAL ©NAVITIME JAPAN Jenkinsにパラメータが渡らない Sonar 実行ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC

Slide 23

Slide 23 text

CONFIDENTIAL ©NAVITIME JAPAN Jenkinsにパラメータが渡らない Sonar 実行ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC ・プロジェクトキー ・リポジトリキー ・ブランチ名

Slide 24

Slide 24 text

CONFIDENTIAL ©NAVITIME JAPAN Jenkinsにパラメータが渡らない Sonar 実行ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC ・プロジェクトキー ・リポジトリキー ・ブランチ名

Slide 25

Slide 25 text

CONFIDENTIAL ©NAVITIME JAPAN Jenkinsにパラメータが渡らない Sonar 実行ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC Sonar 実行ジョブ Sonar 実行ジョブ

Slide 26

Slide 26 text

CONFIDENTIAL ©NAVITIME JAPAN 3つの壁 Jenkinsにパラメータが渡らない クローンURLを冗長化できない SonarとBitbucketの権限を同期できない

Slide 27

Slide 27 text

CONFIDENTIAL ©NAVITIME JAPAN クローンURLを冗長化できない ①フック ②実行 ③解析結果

Slide 28

Slide 28 text

CONFIDENTIAL ©NAVITIME JAPAN クローンURLを冗長化できない ①フック ②実行 ③解析結果 ①’取得 厳密には…

Slide 29

Slide 29 text

CONFIDENTIAL ©NAVITIME JAPAN ①’取得 クローンURLを冗長化できない ①フック ②実行 ③解析結果 厳密には…

Slide 30

Slide 30 text

CONFIDENTIAL ©NAVITIME JAPAN Jenkinsにパラメータが渡らない Sonar 実行ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC ①’取得 ①’取得 ①’取得

Slide 31

Slide 31 text

CONFIDENTIAL ©NAVITIME JAPAN Jenkinsにパラメータが渡らない Sonar 実行ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC ①’取得 ①’取得 ①’取得 ①フック ②実行

Slide 32

Slide 32 text

CONFIDENTIAL ©NAVITIME JAPAN ①’取得 ①’取得 ①’取得 Jenkinsにパラメータが渡らない Sonar 実行ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC

Slide 33

Slide 33 text

CONFIDENTIAL ©NAVITIME JAPAN クローンURLを冗長化できない Sonar 実行ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC Sonar 実行ジョブ Sonar 実行ジョブ ①’取得 ①’取得 ①’取得

Slide 34

Slide 34 text

CONFIDENTIAL ©NAVITIME JAPAN 3つの壁 今お話しした2つの壁、昨日乗り越えました!

Slide 35

Slide 35 text

CONFIDENTIAL ©NAVITIME JAPAN 昨日乗り越えた壁 ①フック ②実行 ③解析結果

Slide 36

Slide 36 text

CONFIDENTIAL ©NAVITIME JAPAN 昨日乗り越えた壁 ②実行 ③解析結果 ①フック

Slide 37

Slide 37 text

CONFIDENTIAL ©NAVITIME JAPAN 昨日乗り越えた壁 Sonar 実行 ジョブ リポジトリA リポジトリB リポジトリC リポジトリA リポジトリB リポジトリC ・プロジェクトキー ・リポジトリキー ・ブランチ名 自作 スクリプト payloadを解析 デフォルトの 機能でフック

Slide 38

Slide 38 text

CONFIDENTIAL ©NAVITIME JAPAN 3つの壁 Jenkinsにパラメータが渡らない クローンURLを冗長化できない SonarとBitbucketの権限を同期できない

Slide 39

Slide 39 text

CONFIDENTIAL ©NAVITIME JAPAN SonarとBitbucketの権限を同期できない

Slide 40

Slide 40 text

CONFIDENTIAL ©NAVITIME JAPAN SonarとBitbucketの権限を同期できない read read

Slide 41

Slide 41 text

CONFIDENTIAL ©NAVITIME JAPAN SonarとBitbucketの権限を同期できない read read

Slide 42

Slide 42 text

CONFIDENTIAL ©NAVITIME JAPAN SonarとBitbucketの権限を同期できない read read まずは閲覧制限のないリポジトリのみ

Slide 43

Slide 43 text

CONFIDENTIAL ©NAVITIME JAPAN 壁を乗り越えて...

Slide 44

Slide 44 text

CONFIDENTIAL ©NAVITIME JAPAN 解析サマリの表示

Slide 45

Slide 45 text

CONFIDENTIAL ©NAVITIME JAPAN プルリクの解析(Sonarのdeveloper editionが必用)

Slide 46

Slide 46 text

パイロットでやってみて

Slide 47

Slide 47 text

CONFIDENTIAL ©NAVITIME JAPAN パイロットでやってみて 早く本格導入して欲しいという声がちらほら Sonarの活用方法をまとめる必要あり →何か表示されているで終わってしまう

Slide 48

Slide 48 text

CONFIDENTIAL ©NAVITIME JAPAN まとめ • Sonar for Bitbucketではコード品質をBitbucket上に可視化できる • コード品質を可視化できると工数削減やモチベーションアップなど様々 なメリットがある • 乗り越えるべき壁はまだある • 運用の簡略化(jenkinsへのパラメータ渡し、クローンURLの冗長化) • Sonar活用方法の展開

Slide 49

Slide 49 text

CONFIDENTIAL ©NAVITIME JAPAN ありがとうございました!