SHOEISHA iD

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

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

Developers Summit 2022 Summer レポート(AD)

ソフトウェアデリバリーで重要な4指標をCircleCIの統計値から読み解く【デブサミ2022夏】

【A-5】自動化と多重化と高速化:日本の私たちがチーム開発する際に必要なこと

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

 CircleCIプリンシパル デベロッパー アドボケイト 舟木将彦氏は日本、アメリカ、ドイツのIT企業で働いた経験があり、開発におけるそれぞれの企業の進め方の違いを感じとってきた。今回はチーム開発の実状に関する調査結果をもとに、チーム開発のトレンドの変化などを解説していただいた。

  • このエントリーをはてなブックマークに追加
CircleCI合同会社 マーケティング部・Principal Developer Advocate / CircleCIユーザーコミュニティ 舟木将彦氏
CircleCI合同会社 マーケティング部・Principal Developer Advocate / CircleCIユーザーコミュニティ 舟木将彦氏

CircleCIが毎年発表している「ソフトウェアデリバリーに関する現状調査」

 個人の開発効率を高めるにはどうしたらいいだろうか。あくまで個人に限るのであれば、実行速度が速いPCで、可能ならモニターは広い画面のものを複数設置し、机や椅子は疲れないように自分の体格に合うものを用意して、さらに快適に過ごせるように温度や湿度を調整し、雑音が少ない環境であると望ましい。

 一方でチームが継続的にデリバリーする力を向上させていくにはどうしたらいいだろうか。1人が筋トレを極めて重いダンベルを持ち上げられるようにするのと、チームで重たい御神輿を担げるようにするのでは、アプローチが異なる。

 舟木氏は「べき論ではなく、データから方向性を探ります」と切り出した。開発の実態についての調査はいろいろある。例えばPuppet社は2014年以来、毎年「DevOpsの現状に関するレポート(State of DevOps Report)」を発表している。基本的にはヒアリングが元となる調査だ。2014〜2017年のレポートをまとめて翻訳したものは「LeanとDevOpsの科学」として出版されている。また2020年と2021年のレポートの日本語版はCircleCIから入手できる。

 一方、CircleCIは2019年以来、毎年「ソフトウェアデリバリーに関する現状調査(State of Software Delivery Report)」を発表している。こちらは実データが元となっている。現在2022年版が最新版で、英語版は公開済み。日本語版は近日中に公開予定だ。本稿では(日本語版は未公開となる)最新版の調査結果をかいつまんで紹介する。

 CircleCIは世界最大規模のクラウドCI/CD(継続的インテグレーション/継続的デプロイ)サービスを提供している企業だ。2万2000以上の組織、100万人以上の開発者が利用しており、毎月7億以上のジョブが実行されている。今回紹介する調査結果はこのCircleCI利用における統計データを元にしている。

 日々あらゆる課題をデジタルで解決するようになり、アプリケーション開発ですべきことは増え続けている。一方で人材には限界があるため、可能な限り自動化を進めていく必要がある。

 さて開発プロセスにおいて、CircleCIを用いて自動化できるのはどの部分か。開発サイクルにはプラン、コード、ビルド、テスト、リリース、デプロイ、運用、監視といったプロセスがある。何を作り誰に届けるかと考えるプランやコーディングそのものは人間の頭で考える必要があり、また運用開始後の非正常系(障害時)の解決も人間が関わる必要がある。そのため、自動化できるのはビルドからデプロイまでだ。

CircleCIを使って自動化できるのはどこか?
CircleCIを使って自動化できるのはどこか?

 CI(継続的インテグレーション)のビルド、テスト、リリース、およびCD(継続的デプロイ)のデプロイでは、手順書があるならCircleCIが読みこめる形式で記述すれば自動実行できる。舟木氏は「(自動化できれば)担当者が不在かどうかといった状況が進行のストッパーにならないので“継続的”なのです」と説明する。

 なおCircleCIでは自動化の流れを「ワークフロー」と呼んでいる。CircleCIは世界中で利用されており、ワークフローの実行回数で見ると、グローバルではアメリカ、イギリス、日本、ドイツ、カナダと続き、アジア・太平洋地域では日本、オーストラリア、シンガポール、香港、ニュージーランドと続く。また曜日別で見てみると、土日や祝日でワークフロー実行数が顕著に落ちる。祝日は国ごとに違うので世界で実行数を比べると、祝日を迎えた国だけ実行数が減るのが見えて興味深い。

チームの開発生産性や開発プロセスの進化が分かる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で実行されたワークフローでの使用言語
CircleCIで実行されたワークフローでの使用言語

 近年ではあらゆる業種や企業でCircleCIの導入が広がってきている。舟木氏は2021年末のアドベントカレンダーのまとめを出した。IT業界では年末にアドベントカレンダーでいろんな知見が公表されている。そのなかでCircleCIオフィシャルではなく、他の言語やプラットフォーム、企業のアドベントカレンダーでもCircleCIについての実践的な記事も多くあったという。

 最後に舟木氏は「最新の情報ならTwitter(@CircleCIJapan)をフォローしてください。CircleCIについて学びたいなら、YouTubeのCircleCIチャンネルには日本語プレイリストもあるので参考にしてください。イベント、セミナー、勉強会の情報ならconnpassのCircleCIグループをご覧ください。そろそろリアルイベントも増やして行こうと思います」と呼びかけた。

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

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

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

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

この記事をシェア

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

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング