SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【デブサミ2020】セッションレポート (AD)

3000万件のワークフローから分析! 開発パフォーマンスを向上させるには?【デブサミ2020】

【13-C-2】CircleCIの3000 万件のワークフローから得られたDevOpsに関する知見

  • X ポスト
  • このエントリーをはてなブックマークに追加

 DevOpsの普及に伴い、継続的インテグレーション(CI)および継続的デリバリー(CD)に取り組む企業が増えてきた。CI/CDを実践することで、ソフトウェアの信頼性向上やリリース期間の短縮が期待できる。とはいえ、たとえ同じCI/CDツールを使ったとしても、組織によって開発のパフォーマンスには大きな差が生じるものだ。CI/CDで最大限の成果を上げるためには何が必要なのか。優れたパフォーマンスを発揮している開発チームの共通点とは何なのか。世界最大規模のクラウドCI/CDサービスを展開するCircleCIでは、同プラットフォーム上で実行された、3000万件のワークフローのデータを分析。その結果から得られた知見を、同社のSolutions Engineerである車井 登氏が紹介した。

  • X ポスト
  • このエントリーをはてなブックマークに追加
CircleCI Solutions Engineer 車井 登氏
CircleCI Solutions Engineer 車井 登氏

4つのメトリクスでCircleCI上の膨大なワークフローを分析

 CI/CDツールを使う動機として多いのは、「自動化したい」「コストを削減したい」「開発スピードを上げたい」といったところだろう。ほかにも、ソフトウェアの品質やセキュリティの強化などが考えられる。

 「これらはすべて、『最高のチームづくりをしたい』ということに収束するのではないか」と、車井氏は冒頭で述べた。

 では、最高のチーム、優れたパフォーマンスを発揮できるチームとはどのようなものか。それをデータに基づいて分析するために、CircleCIでは膨大なワークフローの調査を実施した。対象となったのは、CircleCIのクラウドプラットフォーム上で2019年6月1日~8月30日の3カ月間に確認された3000万件強のワークフローデータ。これらは、4万以上のOrganization(組織・企業)と、15万以上のプロジェクトから取得されたものだ。なお、CircleCIの「ワークフロー」とは、複数のジョブ(ビルド、テスト、デプロイなど)を組み合わせて構築するCI/CDパイプラインの全体を指す。

 3000万件のワークフローから具体的にどのようなデータを抽出したのかについて車井氏は、「DORA(DevOps Research and Assessment)が公表した『2019 Accelerate State of DevOps Report』(以下、State of DevOps Report)で示されている4つのメトリクスをベースにした」と説明。

 それらは「スループット」と「安定性」の2つに大きく分かれ、前者は「変更のリードタイム」と「デプロイ頻度」、後者は「平均修復時間(MTTR)」と「失敗の頻度」といったメトリクスで構成されている。

 ただし、CircleCIはあくまでもCI/CDツールであり、State of DevOps Reportで示されているこれらのメトリクスをそのまま適用するのは難しいという。実際には、それぞれ次のようなCircleCI上で取得可能なメトリクスを採用し、分析を行っている。

CircleCIが実際に使ったメトリクスは右側の4つ
CircleCIが実際に使ったメトリクスは右側の4つ

ワークフローデータの分析結果と得られた知見

 各メトリクスの分析結果と、それに基づく考察は次のとおり。

ワークフローの動作時間(変更のリードタイム)

 全体の中央値は3分27秒。ちなみに、90パーセンタイル(速い順で全体の90/100の位置にあたるデータ)の値は28分で、ほとんどのワークフローが30分以内に終わっていることがわかった。

 ワークフローの動作時間はプロジェクトの中身に依存するため、何分以内がよいとは一概には言えないが、「CircleCIの経験上、最適なワークフローは数分から数十分」とのこと。また、ワークフローの価値はデプロイをすばやく実行するということだけではなく、「開発者に適切なフィードバックが速やかに行われることが重要」と車井氏は強調した。

ワークフローが開始される頻度(デプロイ頻度)

 中央値(50パーセンタイル)は、Organizationレベルで1日に6回。プロジェクトレベルでは1日3回、その中でデフォルトブランチ(マスターブランチ)に関しては、1日1回という結果となった。また、最大頻度に近い95パーセンタイル(少ない順で全体の95/100の値)のCircleCIユーザーでは、1日あたりOrganizationレベルで250回、プロジェクトレベルで74回、デフォルトブランチに限っても39回ものワークフローを実行していることも判明した。

95パーセンタイルではデフォルトブランチのみでも39回と、かなりの高頻度
95パーセンタイルではデフォルトブランチのみでも39回と、かなりの高頻度

 高頻度のデプロイが注目されるようになったのは、10年ほど前からだ。DevOpsの原点として知られる、Flickrの2009年のプレゼンテーション「10+ Deploys per Day Dev and Ops Cooperation at Flickr」では、その名のとおり1日に10回以上デプロイを行うことが紹介されて話題となった。さらに、2012年にはAWSがre:Inventの基調講演で、Amazon.comにおける「平均11秒に1回のデプロイ」「最大で1時間に1079回のデプロイ」を発表。以来、数多くのプロジェクトが高頻度のデプロイに挑戦しているが、車井氏によれば、今日でも1日10回以上のデプロイを実践しているプロジェクトはそう多くはないそうだ。

 今回の分析に用いるメトリクスのベースとなったState of DevOps Reportでも、「1日数回のデプロイ」を「非常に優れたチーム(Elite)」として分類している。そのレベルであれば、平均的なCircleCIユーザー(中央値)もクリアしていることになるが、「デプロイ回数自体は、必ずしも優れた開発チームかどうかを示す指標にはならない」と車井氏は指摘する。

 「最終的なデプロイ回数は、組織の事情を反映したものになる。それよりも、必要なときにいつでもデプロイできる状態を維持することを意識するべきだ。一方、ワークフローの頻度は、Organizationやプロジェクトがコードを結合する頻度を示すものでもあり、細かく修正してテストを繰り返すことで、品質を高めていくという意味で、開発チームのパフォーマンスを表す指標になり得る」

 車井氏は併せて、フィーチャーフラグを使ってリリースとデプロイを切り離し、コントロールすることもリリースの安全性を高めるうえで有効であり、ワークフローを設計する際にはフィーチャーフラグの使用も検討することを推奨した。

レッドビルドがグリーンビルドになるのに要する時間(平均修復時間)

 レッドビルドとは、CircleCI上でワークフローが失敗で終わった状態のことだ。それが同じブランチでグリーン(成功)ビルドに変わるまでに要する時間を、平均修復時間として集計・分析した。

 すべてのブランチを対象とした集計結果は、中央値が17.5時間。これはおそらく、「1日の終わりに失敗を検知して、翌日に修正する」パターンが多いためと考えられる。また、デフォルトブランチに絞った集計では、中央値が1時間以下となった。State of DevOps Reportによると、Eliteは「1時間以内に修復」とされており、CircleCIの平均的ユーザーも、デフォルトブランチについてはそのレベルをクリアしている。これはそう簡単に実現できるものではないと車井氏は言う。

 「少なくともユーザーから報告を受けて初めて対応開始するようでは、1時間以内の修復は難しい。これを実現するには、プロアクティブな対応と高度な自動化が必須。これから取り組む方は、まず1時間以内の修復を目指すところから始めて、そのためには何が必要なのか、何を変えなければいけないのかを考えていく必要がある」

デフォルトブランチの平均修復時間は平均的なCircleCIユーザーで1時間以下
デフォルトブランチの平均修復時間は平均的なCircleCIユーザーで1時間以下

ワークフローの失敗率(失敗の頻度)

 分析の結果、CircleCI上にある3000万件のワークフローのうち27%が失敗で終わっていることがわかった。これはすべてのブランチを対象とした数値であり、ブランチ別で見るとトピックブランチの失敗率は31%、デフォルトブランチの失敗率は18%となっている。トピックブランチの失敗が多くを占めているが、「トピックブランチでの失敗については恐れるべきではない」と車井氏は指摘する。

 これは、むしろGitFlowなどのプラクティスが有効に働いているということ。ここでの失敗は問題ないので、積極的に結合して早めにテストしていくほうが望ましいという。

 デフォルトブランチの失敗率18%についても、State of DevOps Reportで報告されているEliteの失敗率が0~15%であり、少し足りないものの近いレベルにはあるようだ。

 もう1つ特筆すべき分析結果として、50%のプロジェクトがCI/CDパイプラインの設定を変更しても、ビルドに失敗していないことがわかった。

 「おそらく設定ファイルを使い回しているか、あるいは設定ファイルをパッケージングしてシェアできるCircleCIの『Orbs』という機能を使っているためと思われる。Orbsを利用して検証済みの設定を取り組むことにより、新しいパイプラインに変わっても失敗せずにグリーンビルドできるようになる。今後はこのように、テストやデプロイを単に自動化するだけでなく、CI/CDパイプラインのベストプラクティスをいかに早く取り込んでいくかが、より重要になってくるのではないか」

State of DevOps Reportの「Elite」と平均的なCircleCIユーザーを比較
State of DevOps Reportの「Elite」と平均的なCircleCIユーザーを比較

 なお、今回のワークフローデータの調査・分析では、CircleCIの実行環境(Dockerコンテナ、Linux VM、macOSなど)や言語の差異などは考慮されていないが、次はより細分化した分析の必要性も感じているという。

 最後に車井氏は、「例えばPHPで書かれたプロジェクトの平均失敗率は7%と、全体平均と比べて非常に少ない結果が出ている。これだけの差異があるのは、明らかに何らかの原因があるはず。また、ブランチの種類や数の違いによる影響などについてもさらに細かく見ていきたい」と、今後もより詳細な分析を進めていく意向を示し、セッションを結んだ。

お問い合わせ

 CircleCI

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/12004 2020/03/05 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング