これは Livesense Advent Calendar 2022 DAY 23の記事です。
株式会社リブセンス アルバイト事業部エンジニアの村山です。
個人的に興味があり、チームの状態を測るための取り組みを少しずつ始めています。 その内容をブログにまとめてみました。 最後まで読んでもらえたら嬉しいです。
きっかけ
元々、チームの活動を測る良い方法は無いだろうか、という漠然とした疑問を持っていたのですが 当時の上司から「LeanとDevOpsの科学」という本を教えていただきました。
第二章「開発組織のパフォーマンスを計測」では、チームのパフォーマンスを測定するための効果的で信頼に足る基準は何か、について議論されています。 パフォーマンスを可視化することは組織の状態を把握し、改善に繋げるために重要な取り組みです。 ですが、古のソフトウェア業界で使われていた書いたコードの行数のような指標は、成果よりも出力に焦点を当てていたり、個人などローカルレベルでの測定の焦点を当てており、パフォーマンスを正しく測るには難点がありました。
本書では、そういった過去を踏まえて以下の四つの指標が信頼に足る基準として紹介されていました。
- デリバリのリードタイム(顧客のリクエストを受けてからそれが満たされるまでの所要時間)
- デプロイの頻度(本番稼働サーバーへの変更を加えた頻度)
- サービス復旧の所要時間(インシデントが発生してから復旧にかかった時間)
- 変更失敗率(本番環境での稼働に失敗したケースの発生率)
まずは、この中でも比較的簡単に実現できそうなデプロイの頻度の可視化から着手してみました。
実際にやってみる
マッハバイトではDatadogが監視や分析のツールとして広く使われています。 チームメンバーも気軽に使える状態にあるため、データを蓄積して表示するのはDatadogに任せようと思いました。
肝心のデプロイ毎のカウントの送信なのですが、ちょうどよさそうなGitHub Actionsがあったためこちらを使うことにしました。
試験的に一部のリポジトリに以下のGitHub Actionsを仕込みました。 ほぼ、サンプルのまんまですね。
name: tag push counter on: push: tags: - '*' jobs: Explore-GitHub-Actions: runs-on: ubuntu-latest steps: - name: send to datadog uses: masci/datadog@v1 with: api-key: ${{ secrets.DATADOG_API_KEY }} metrics: | - type: "count" name: "experimental.tag_push.count" value: 1.0 host: ${{ github.repository_owner }} tags: - "project:${{ github.repository }}"
正確な値を測るのでしたら、デプロイが走るタイミングでメトリクスが送信される必要があるのですが、現在のマッハバイトのデプロイフローではリリース後に前回リリースとの差分タグを作ります。
なのでリリース発生 = タグ作成という感覚で問題ないと考え、タグのpush毎にキックされるようにしています。 これでMetricsが送信されるようになったので、あとはDashboardに表示することで簡単にデプロイカウンターが作れました。
まとめ
DatadogとGitHub Actionsを用いてシンプルなデプロイカウンターを実現してみました。
デプロイ頻度を可視化することでバッチサイズ(一度に進めている作業のサイズ)が見えてきます。 バッチサイズが肥大化していると、燃え尽き症候群を招いたり、レビューの効果が下がったりとデメリットが生じる可能性があり、未然にこれらのデメリットを防げるかもしれません。
チームの状態が可視化されていることで、自分達の問題点の分析につながることを期待したいです。 そのためにも、これから先も様々な指標を追加していきたいと思います。
最後まで読んでいただきありがとうございました。