劇的ビフォーアフター
コードレビュー
効率化
コードレビュー・ビフォー
» FaceToFaceが基本。開発者のローカルにしかないソースコードを
WinMergeなどのDiffViewerを用いて説明する
⋄ 時間、場所の制約が発生する
⋄ 議事録を適宜手動で取る必要がある(エクセルに)
コードレビュー・アフター
» PRによるレビュー
⋄ レビュアーが自分のスケジュールに合わせて ブラウザ上でレビューできる 効率化!
⋄ ブランチはPush済みなので、
開発者は次の開発を進められる 効率化!!
⋄
PRがそのまま議事録となる 効率化!!!
ちょっとまって!
会社の風土に合わせる必要があった
» 弊社ではコードレビュー議事録の中に重要度の項目がある
(致命欠陥、重欠陥、軽欠陥、その他(改善要望等))
⋄ PJの品質見える化、の観点では重要
» PRでは単にコメントとなり、それがわからない
どうやって解決した?
» 求められたゴールはPR毎に
以下のようなデータを得られること
⋄ 重欠陥XX件、軽欠陥XX件、、、
» せっかく効率化のために導入したGitHub、 レビュアーの負担は極力減らしたい
» GitHubAPIを活用する
⋄ GitHubは機能の殆どをWebAPIとして提供している
解決策
» リポジトリを指定し、期間、ラベルに関連するPRのコメントを 集計、CSV出力するWebアプリ(Angular + TypeScript)
» GitHubPagesの機能を使って公開
⋄ GitHubPages...GitHub上のファイルを静的なWebPageとし て公開できる機能
定型文を必ずレビュー後に入力
GitHubAPIを使って取得し、集計する
ん?コメントいれるの忘れそう?
» 社内標準ツールGoogleChromeの拡張機能を自作 PRのレビュー欄にデフォルトで入力される
⋄ jQueryでDOMに定型文を流し込む
PR ベースでの品質の見える化を達成!
» デイリーでPJの品質確認可能
(ソースコードレビューによる不具合の前倒し摘出)
» 社内ルールにGitHubを溶け込ませることに成功した
⋄ 次はGraphQL APIへ対応したい
CSV
各種ツールとの
連携によるマージ効率化
各種ツールとの連携・ビフォアー
» 課題管理、静的解析ツール、CIツール、の連携が特になされて いなかった
» 課題管理と結ばれていないから、なぜその修正が入ったか、
背景がわからない
» マージするまでテストやビルドの結果がわからない
マージコスト増
各種ツールとの連携・アフター
デプロイ自動化 が次の課題
● 課題管理
● 静的解析
● CI
● チャット
● リポジトリ管理
マージ時にコミットメッセージ に対応するチケットNo入力
Redmineに自動でリンク
チケットに関連するコミットがすぐに分かる
PRと連動し、自動テスト、静的解析を実施。マージ前の品質を 確保でき、レビュアーの負担が軽減
⋄ 大量のマージに耐えられる開発体制
静的解析結果はPR上に表示
開発者はすぐに気づいて修正できる
NGステータスの場合、
マージできない
チーム風土の変化
チーム風土の変化
コードレビューの変化
コードレビューの殺伐さが消えた
» 静的解析、自動テスト、各種ツールの活用、により
ストレスからの解放(効率化)と精神的安定を手に入れた
» コードレビューにも変化が起きた
コードレビューの殺伐さが消えた
» 良いコードには称賛を。気軽にイイネしあえる関係
» サンプルコードの提示、アドバイスも
⋄ ソースコードへのアクセスが容易
⋄ Markdownドキュメントの可読性の高さ
コードレビューの意識改革
» レビュアー VSレビューイ、から、
解決しなければならない課題 VS チーム全員
という意識の変化が生まれた
» 良い雰囲気は良いコードを生む
VS
チーム 課題
チーム風土の変化
提案活動活発化
GitHub を運用して出てきた課題
» PRベースのコードレビューは便利だが、気づかぬうちに溜 まっていってしまう、ということも
» レビュー漏れ(レビューしないとマージできないので、最終的 に漏れることはないが、スケジュールに影響を与える)が発 生
若手エンジニアが自発的に課題解決
» レビュアー抽出・一覧化ツールを開発
⋄ GitHubのおかげで参考ソースへのアクセスが容易
⋄ PRでのやりとりでモチベーションアップ
チーム風土の変化
改善活動活発化
早朝プチリファクタマラソン
» 自動テスト、静的解析でのチェック機構により、小規模な改 善がやりやすくなった
» そこでチームで早朝プチリファクタリングマラソン、を実施した
⋄ 静的解析指摘、不足している自動テストの拡充、
など技術負債をコツコツ返済していくのが大目的
» コーディングにかける時間は毎朝の15分
» 出来たらその日のうちにPR、レビュアーはその日のうちにレビューする。
貯めない
» 改修量は50step以内
» レビュアーは改修内容にのみ集中する
» 1stepでも改修できれば良い、という気持ちで
効果
» 静的解析指摘の修正、不足テストの追加によりデイリーで内 部品質が改善
» 新規メンバーの教育にも効果あり
プロジェクトへの効果
技術課題の解決が加速
» GitHubは自由に試せる、すぐに共有できる場
» プロジェクト中に発生する様々な技術課題に対して、
プロト実装、レビュー、本番導入、
という流れができあがった
提案・プロト作成 議論・設計レビュー コードレビュー・マージ
» チームのスキルアップにもつながった
4. まとめ
今日お話したこと
当初の想定通りの効果
» ブランチのマージコスト低下 クリア!
» コードレビュー文化の繁栄 クリア!!
» CIツール、課題管理ツールなどとの連携 クリア!!!
つまり、まとめると?
GitHubEnterprise を導入して得られた効果
» 組織全体での開発効率が向上した
⋄ 導入前後で生産性は約4倍に
» ソフトウエアの内部品質が向上した
⋄ 導入前後で市場問い合わせ件数は約1/2に
⋄ システムテスト以降での不具合密度は約1/5に
» 使えることがメリットではない、
使えないことがデメリットなんだと実感しています