GitHub + GAS + Google SheetsによるFourKeys計測自動化OSSのご紹介
概要
COSOJIプロダクト開発部VPoEの佐藤です。
COSOJI プロダクト開発部では生産性の可視化/向上のため、FourKeysの自動計測を行なっています。
今回はその仕組みをOSS化したのでご紹介します。
類似ツール
FourKeys計測のための代表的なツールとしては、dora-team/fourkeysに代表されるOSSやSaaSサービスがあります。
これらにはそれぞれ長所短所があり、短所としてはdora-team/fourkeysはカスタマイズはできるが中身をしっかり理解する必要があったり、SaaSツールはサービス利用料がかかるなどの点があるかと思います。
今回OSSとして公開しているcosoji/github-gas-four-keysは無料かつ、より簡単にカスタマイズできるものを目指しています。
cosoji/github-gas-four-keysのご紹介
https://github.com/cosoji-jp/github-gas-four-keys ではGitHubとGoogle SheetsをGoogle Apps Scriptで連携することでFourKeysを自動計測する仕組みを構築できます。
基本的には、このGoogle SheetsとGoogle Apps Scriptの2ファイルを編集することでカスタマイズすることができます。
計測ロジックについて
FourKeys値の計測は、以下のようにプルリクエスト(以降,PRと表記)のデータを元に行なっています。
指標 | 集計方法 |
---|---|
デプロイの頻度 | PRのマージ頻度 |
変更のリードタイム | PRヘッドブランチの初コミット日時からがマージされるまでの平均時間 |
変更障害率 | (障害対応あるいは巻き戻しのPR数) / (障害対応あるいは巻き戻し以外のPR数) |
修復時間 | 障害対応のPRヘッドブランチの初コミット日時からマージされるまでの平均時間 |
以下のようなイメージです。
実際に運用するにあたっては、障害発生/対応時のブランチ名に命名規則を設定する必要があります。
本OSSのデフォルト設定では、以下のようになっています。
- 名前に
hotfix
を含むブランチは障害対応として扱われ、変更障害率/修復時間の計測に用いられる。 - 名前に
revert
を含むブランチは障害発生として扱われ、変更障害率の計測に用いられる。
計測サンプル
弊社のデータで計測した結果、以下のような出力となりました。
直近では大きめのリファクタ作業を行なっており、その結果リードタイムが大きく伸びているのが、数値的にみて取れています。また変更障害率や平均修復時間が少し前まで0なのは、FourKeys運用を始めてから正しく計測できるようにブランチ命名規則を改定したためです。
PRデータ
PRデータは全てGoogle Sheets上に保存されるようになっています。
このデータを元に上記計測値を数式で計算しています。そのためSheet上の数式を修正することで容易に計測方法のカスタマイズすることができます。また元データ自体をカスタマイズしたい場合は、Google Apps Scriptの関数をカスタマイズすることで修正することができます。
COSOJIプロダクト開発チームにおけるFourKeys運用について
COSOJIプロダクト開発チームでは開発生産性のモニタリングのためにも使っています。
FourKeysは巷でよく言われている開発生産性の3階層※1のレベル1にあたり、エンジニアにとって取り組みやすいものと言われています。
そのためCOSOJIプロダクト開発チームでこの改善に取り組んでおり、開発スプリント毎のレトロスペクティブの際にチームで確認しています。FourKeys結果を元に各スプリントの傾向を確認し「なんとなく時間がかかった」のような感覚値ではなく実績値に基づいて振り返りを行なっており、以前に比べて明確に改善に取り組めるようになっています。
また本OSSは個人毎にFourKeysを計測できる作りになっていますが個人の評価に使うことはしないようにしています。これはサインアップ/アサインされるユーザーストーリーによって必要なリードタイムが変わってきたり、指標のハッキング(コミット履歴をいじるなど)などができ、個人の評価指標としては望ましくないからです。
最後に
COSOJIではOSSプロジェクトを推奨しており、今回はGitHub + GAS + Google Sheetsを使ったFourKeysの自動計測の取り組みについてOSS化しました。
今後は、開発生産性の3階層のレベル2の指標をモニタリングするため、KPI/NSMなども整理し自動計測できるようにしていく予定です。その取り組みもOSS化できる部分があれば公開していきたいと思います。
※1 @hirokidaichi様の記事より引用させて頂きました.
開発生産性について議論する前に知っておきたいこと(https://qiita.com/hirokidaichi/items/53f0865398829bdebef1)
Discussion