ソフトウェア開発において、エンジニアチームのパフォーマンスはさまざまな要因に左右されます。とくにCIに時間がかかると感じている場合は、オブザーバービリティの概念を取り入れるとチームの生産性を飛躍的に向上させられるかもしれません。
本記事では、「Developer eXperience Day 2024」(主催:日本CTO協会)にて「ソフトウェアチームのパフォーマンスを向上させる鍵: パイプラインのオブザーバービリティ」をテーマにおこなわれたセッションの内容をお届けします。
このセッションではDatadog Japan合同会社の萩野 たいじさんが、CI/CDワークフローの問題を発見するために役立つ方法をお話ししてくださいました。

萩野 たいじさん
元美容師で元音楽家。ソフトウェアエンジニアへ転身後、有限会社アキュレートシステムを起業。その後DevRelの道へシフトし、IBMやOutSystemsなどの外資系企業にてDeveloper Advocateとして活躍し現職へ至る。筑波大学/名城大学非常勤講師。Microsoft MVP。「Practical Node-RED Programming」を始め著書多数。
目次
シフトレフトについて
シフトレフトという言葉について、再定義をしておきます。シフトレフトは、企画・要件定義・設計・実装・テスト・リリースというシステム開発の流れの中で、早い段階でセキュリティ対策を組み込んでいく考え方です。従来のセキュリティ対策は、開発の後段階が多かったかと思います。それをより左側の、上流工程で対策を講じるという意味でシフトレフトという言葉を使っています。

一般的なDevOpsのマントラにあるように、自分ですべてを構築して、自分でそれを実行する。これは現代のエンジニアリングチームで、徐々に広まってきている文化だと思います。
一方で、「私はコードを書きたいだけなんです」「自分の仕事をさせてほしい」「コーディングに集中させてほしい」「テストを考えてプルリクしてマージすれば、また次の機能をどんどん開発していける」と考えている人も多いかと思います。

開発者がこのサイクル全体をフルカバーしようとすると、どうしてもOpsの部分にも足を踏み入れなければならなくなります。オンコールで待機してアラートに対応するのも、仕事の一部です。ただそのような仕事は疲れますし、あまり楽しいものではありません。
本番稼動中の不具合などを直すのは、かなりコストがかかります。最近は案件ベースの仕事からは離れていますが、私も以前は運用保守のプロジェクトでPMをしていた時期がありました。当時は毎晩枕元に携帯電話を置いて、夜中に電話が鳴ったらすぐに駆けつけなければなりませんでした。オブザーバービリティのツールは、そういった場面でのサポートもできます。
Datadogのプラットフォーム
Datadogは、企業がインフラやアプリの可観測性やセキュリティを向上するために支援する、監視・分析のプラットフォームです。重要なのが、シェアードサービスとAI/MLを活用した、統合的な1プラットフォームであるという点です。

インフラ監視、APM、リアルユーザーモニタリング、ログ、セキュリティと、本番環境だけではなく、構築中のコードの監視も含めて幅広く対応しています。
またDatadogのプラットフォームと組み合わせて、画面共有をしながらターミナルのウィンドウ操作を共有できるCoScreenや、AWSやAzureのアーキテクチャ図を自動で生成できるCloudcraftなども提供しています。
ソフトウェアの開発ライフサイクル
最近は、ソフトウェアの開発ライフサイクルに「Sec」というセキュリティの概念が入って、DevSecOpsといわれています。

コードを書きビルドをして、テストして、変更がデプロイされて、本番環境にリリースされる。このサイクルの中で、誰かがアプリケーションやサービスを運用して監視する必要があります。
Datadogは、インフラやアプリケーションが決められた基準に従って稼働し続けているかどうかの確認に役立つ、オブザーバービリティのツールです。
開発やCIプロセスにオブザーバービリティの概念を持ち込んで、より生産性を上げていく。これを支援する考え方がシフトレフトです。プリプロダクションの段階でなにが起きているのかを知るために、プロダクション側で持っている可観測性を活用する考え方です。
シフトレフトが必要な理由
なぜシフトレフトをしなければいけないのか。まず、CIには時間がかかります。アプリケーションを開発して、ビルドが終わるまでに30分や1、2時間待ったといった経験がある方もいるでしょう。
この場合、ビルドのどこかに問題があって止まっている可能性が高いです。ビルドに問題があって通らなかった場合、かかる時間が2倍、3倍、あるいはそれ以上になってしまいます。
この場合、どれだけ早く問題を発見して修正するかがポイントになります。ただCI/CDのシステムを所有していない場合、1人ですべてに対応するのは非常に難易度が高いでしょう。

次に、テストの失敗についてです。
複雑な分散システムにおいて、統合テストの一つで失敗したとしましょう。どのようにデバッグを始めますか。
特定のエラーメッセージを探すために、ログのチェックから始めるかもしれません。ログを見て、APIやデータベースに問題がありそうだとわかったら、きちんとアクセスできているのか、設定は正しくできているのかを確認していく流れになるでしょう。直近でコードの変更や修正があった場合は、それが失敗の原因かもしれません。その場合はGitHubのリポジトリをチェックして、その変更が問題かどうかを確認し、差し戻すこともあるでしょう。
テストに失敗するとこうした作業が必要となりますが、すべてを実行しようと思うと相当な時間がかかります。
最後は、すべてが遅く感じるという話です。時間がたつにつれて、CIがどんどん遅くなっているように感じたことがある方もいるでしょう。
テストは時間がかかるものです。本来ならコードを書いていられるはずの時間なのに、ただ座って待っていなければならないこともあります。
だから実行中のテストにおいて、どこで失敗しているのかを理解できるようにするのが重要なのです。デリバリーのパイプラインを可視化することで、なにがボトルネックになっているのか、改善のためにはなにができるのか、ツールを通して知ることができます。そして本番環境に影響が出る前に、パフォーマンスのリグレッションを発見できます。
シフトレフト=コントロールしやすくする
シフトレフトするということは、コントロールしやすくするということです。
今までは、本番環境の履歴のみが可視化されていました。シフトレフトしていくと、CIパイプラインとテストの理解にも役立ちます。
CI/CDは、単体だとブラックボックスのようなものです。ただ、CIに関する課題には注意を払っておかないと、時間とともにその課題はどんどん大きくなって悪化していきます。
まずCIが遅いと、次の処理も遅れてしまいます。CIのパイプラインは、できるだけ早く変更をマージできるように、高速かつ信頼できるものでなければなりません。パイプラインがいつも遅かったり、何度も失敗したりするとどうなるか。原因を早く見つけて修正して、変更してデプロイするまでにかかる時間が、2倍、3倍と長くなってしまいます。
またジョブの失敗要因が自分でコントロールできる範囲なら、すぐに修正できる場合もあるでしょう。しかしCI/CDでパイプラインを所有しているのが自分でない場合は、コントロールできないかもしれません。その場合は、ほかのチームの誰かに調査を依頼する必要があります。

次に、テストの失敗です。CIで実行されるテストはデバッグが非常に難しく、面倒になってしまうケースもあります。
統合テストのデバッグは難易度が非常に高いです。マイクロサービスやクラウドネイティブになると、なおさらです。こういった作業には何時間もかかってしまうことがあります。とくに、なんの脈絡もないエンティティをテストに呼び出しているケースなどがあると、見つけるのが本当に大変です。
最後に、フレーキーテストの話です。
たとえば同じコミットに対して、パスしたり失敗したりしてしまうケースがあります。こうしたテストの結果は、非常にやっかいです。リトライするために全体が再度実行されるのを待つことになります。その上で、きちんとパスする場合もあれば、失敗する場合もある。パスできなければ、何度もリトライしなければなりません。失敗した場合は、どうすれば原因を突き止められるのかが非常に難しいです。またどうすれば修正できるのか、修正できる人は誰なのかを探すのも大変です。
迅速かつ実用的なフィードバック
CIが原因で作業のペースを落としたり、日々の業務に加えて余計な問題を引き起こされたりするのは望ましくありません。
CIの本来のメリットは、自分自身もしくはチームに対して迅速かつ実用的なフィードバックを与えられることです。ここでオブザーバービリティがあれば、CIが本来の役割を果たせます。

DatadogでCIを可視化すれば、次の点を向上させられます。
まずは、パイプラインの可視性です。CIを1つのプラットフォームで可視化できるので、システム内のレバレッジポイントを測定して、パフォーマンスを向上させられます。カスタムダッシュボードを使えば、スライス&ダイスでパイプラインのデータ分析も可能です。
もう1つは、テストの可視性です。さきほどもお話しした、フレーキーテストの管理ができるようになります。またすべてのテストをエンドツーエンドで可視化し、長期的なテストパフォーマンスの追跡も可能となります。
こうしてCI環境を詳細に可視化して、CI/CDでワークフローを合理化できます。
最後に
まとめです。ビフォーはCIが遅くて失敗する。フレーキーテストによるビルドの失敗やリトライの繰り返し、非常に遅いフィードバックサイクルなどに起因しています。

それに対してアフターは、オブザーバービリティをCIにうまく活用して、迅速で信頼性の高いアプリケーションリリースを可能にしています。高速で安定したCIパイプラインと統合テストの容易なデバッグ、CIにおける無駄な時間の削減が実現できます。
オブザーバービリティツールのプラットフォームを、CI/CDにうまく適応させて、より迅速で信頼性の高いアプリケーションのリリースを目指しましょう。

取材後記
本セッションでは、CI/CDワークフローの問題を発見するために役立つ方法についてご紹介いただきました。
なるべく早く不具合対応をしたいにもかかわらず、CIにかかる時間に悩まされているエンジニアの方は多いでしょう。
今回ご紹介いただいたオブザーバービリティツールやシフトレフトの概念を参考にすることで、CIの速度改善、ひいてはチームの生産性向上や品質改善につながればと思います。
(取材/文:谷口智香)
