チームの開発生産性や開発プロセスの進化が分かる4指標
チームと、チームが開発するソフトウェアの進化や成熟について、統計データから見ていこう。ソフトウェアデリバリーに関する主要な指標は4つあり、(1)ワークフロー実行回数、(2)ワークフロー実行時間、(3)平均リカバリ所要時間、(4)ワークフロー成功率、となる。CircleCIでは、これらの指標を組織ごとに比較したり、時系列で推移を見たりすることで、エンジニアリングチームの開発生産性や開発プロセスの進化や向上を評価する上で有用だと考えている。指標ごとに、グローバルのCircleCIユーザーの平均値とCircleCIが考える目標値を見ていこう。
(1)ワークフロー実行回数(スループット)
ワークフローの実行回数から日ごとのスループットが分かる。グローバルCircleCIユーザーの平均値は1.43回/日。国別で見ると、アメリカが1.67回/日、ドイツが1.2回/日、日本が1.0回/日。
従来は「プルリクエスト数」としていたが、ライブラリのセキュリティスキャンなど、ソースコードのプッシュがない時でも実行すべきワークフローがあるため、ワークフロー実行回数としている。エンジニアチームの目線なら、ソースコードがどれだけ追加、変更、コミットされているか、脆弱性スキャンなどが適切に実行されているかなどが分かる。時系列で見ると、ソフトウェアの成熟に伴いスループットは自然に増加する。しかし平均リカバリ時間も合わせて増加しているなら、チームメンバーは修正で「燃え尽きて」しまうので注意が必要だ。
(2)ワークフロー実行時間
一連の自動化されたワークフローを実行するのにかかった時間となる。グローバルCircleCIユーザーの平均値は3.7分。CircleCIが考える目標値は10分以内だ。
バグが混入してしまうのはソースコードの追加や変更時となる。そのためコミット後(ワークフロー実行開始後)、できるだけ早くバグ修正に取りかかることができれば、まだ記憶に新しいのでバグ修正にかかる時間も短くできるだろう。もし他の人が修正するなら、コミットに関わる変更箇所が局所的であれば問題の切り分け時間を短くできる。
舟木氏は「実行時間の中でも短縮しやすいビルドやテスト時間を短縮して、時間を生み出すことが重要です。この実行時間の短縮はアプリやサービスの利用者目線から見れば、品質や信頼性の向上にどれだけ取り組んでいるのかにつながります。これを適切な長さ(10分以内)にすることは競合に追いつき、引き離す力の源泉になります」と説明する。
実行時間を短くするにはインフラ的に縦に伸ばす(スペックを上げる)か、横に伸ばす(並列化する)かの方法がある。前者は実行環境のスペックを上げる。CircleCIではFreeプランなら月に3万クレジット利用可能となる。実行環境のクラスごとにvCPUやメモリの割り当てが異なり、かかるクレジットも変わる。Smallクラスなら3万クレジットは100時間分に相当する。適切なクラスを選ぶことでコストパフォーマンス高く実行できる。
後者は並列化だ。例えばテストが25個で、並列度1なら25個のテストが順に実行されるので全てのテストの合計時間が実行時間となる。一方、並列度25なら、25個のテストを同時実行するため、最も時間がかかるテストが実行時間となる。そのため並列処理するなら、できるだけ合計時間が同じくらいになるように振り分けたい。CircleCIには(初回で過去の実行時間が不明な場合を除き)過去の実行時間を参考にして、実行時間が均等になるように実行環境を割り当てる機能があるので活用したい。
またCircleCIでは「テスト インサイト」というダッシュボードがあり、テスト結果を可視化できる。ワークフローやジョブ別の内訳、遅いテストのワースト10、失敗するテストワースト10、成功と失敗が不安定なテスト、テスト実行時のCPU/メモリ推移などが分かる。これもテストを効率的に実行するためのリソース割り当ての参考となりそうだ。
他にも自動化に役立つツールがある。CircleCIでは「Orbs」と呼ばれる部品化の仕組みがある。CircleCIはもちろん、パートナー企業、サードベンダーの部品が利用可能となっている。効率化、セキュリティ、品質など、さまざまなものがある。例えばHashiCorpのTerraformでデプロイ環境をIaC、JFrogでアーティファクト管理、Slack通知など。
(3)平均リカバリ所用時間(MTTR:Mean Time To Recovery)
CircleCIでは、ビルド、テスト、リリース、デプロイなどの自動化作業が失敗してから成功するまでの時間となる。グローバルCircleCIユーザーの平均値は73.6分。CircleCIが考える目標値は1時間以内だ。
エンジニアチーム目線では「成功」となるまでの時間で、修正や変更を加えることで成功する場合もあれば、失敗してしまった修正や変更を元に戻すことで成功させる場合もある。ソースコードを修正する方法やフィーチャーフラグを活用するといい。またアプリケーションやサービスの利用者目線では使いたい時にちゃんと使えるか、サービス停止時間やそのタイミングはどの程度かの目安になる。
(4)ワークフロー成功率
メインブランチに実行されるワークフローの成功率は、グローバルCircleCIユーザーの平均値は77%。CircleCIが考える目標値は90%以上。
舟木氏は「作業ブランチでの開発作業時にワークフローの成功率が低いことは悪いことではありません。作業ブランチからメインブランチにマージする時に問題を持ち込まないことが重要です」と念を押す。
CircleCIの情報をフォローするならTwitter、YouTube、connpassをチェック
他にも調査結果から興味深いものをピックアップしてみよう。まずはCircleCIで実行されたワークフローにおける使用言語だ(あくまでもCircleCIで実行されたワークフローに限定されていると念頭においておいたほうがいい)。
上位を見ると、年々TypeScriptの順位が上昇し、2021年にはJavaScriptを追い抜きトップに躍り出た。他は大きな変動はないものの、Terraformで使われるHCL(HashiCorp Configuration Language)もじわじわと上昇傾向にあり、2021年にはトップ10内の9位に入った。またSalesforceの機能拡張で使われるApexも着実に上昇している。
近年ではあらゆる業種や企業でCircleCIの導入が広がってきている。舟木氏は2021年末のアドベントカレンダーのまとめを出した。IT業界では年末にアドベントカレンダーでいろんな知見が公表されている。そのなかでCircleCIオフィシャルではなく、他の言語やプラットフォーム、企業のアドベントカレンダーでもCircleCIについての実践的な記事も多くあったという。
最後に舟木氏は「最新の情報ならTwitter(@CircleCIJapan)をフォローしてください。CircleCIについて学びたいなら、YouTubeのCircleCIチャンネルには日本語プレイリストもあるので参考にしてください。イベント、セミナー、勉強会の情報ならconnpassのCircleCIグループをご覧ください。そろそろリアルイベントも増やして行こうと思います」と呼びかけた。