CI/CDワークフローがテスト自動化にとって非常に重要である理由

もし、プロジェクトが変更されるたびに、自動モードでエラーや問題点がテストされているとしたらどうでしょう?そうなれば、ソフトウェア開発プロセスのクリエイティブな部分に集中できるようになるでしょうか?CI/CDワークフローを使えば、そのようなことが可能になります。ただし、適切に設定されたパイプラインを持ち、その中のすべてのプロセスが慎重に調整されている場合に限ります。CI/CDワークフローにわずかな不備があるだけで、テスト自動化はエラーの発生源となり、リリースごとに蓄積されていきます。

適切なCI/CDプロセスで、200倍の頻度でコードのデプロイを可能になります。

CIとは何ですか?

CIとは、継続的インテグレーションのことで、エンジニアが更新されたコードや新しいコードをリポジトリにプッシュし、スクリプトを使ってソフトウェアやアプリケーションの現行バージョンを構築する際に、自動的にテストを行うことができる手法です。このようなアプローチは、ソフトウェアの開発プロセスを容易にし、既に作成されたコードにエラーが発生する可能性を低減します。エンジニアは毎日、あるいは一日に数回、継続的に変更を加えるので、テスト手順の自動化は開発プロセスを大幅にスピードアップします。

CI Diagram.  Image credit: semaphore

CDとは?

CDとは、Continuous DeliveryとContinuous Deploymentの略です。これらの手法は、CIの段階で構築したソフトウェアやアプリケーションを継続的にデプロイするという点で非常によく似ています。両者の唯一の違いは、デプロイの方法です。

  • 継続的デリバリ - コードは自動的にリポジトリにリリースされますが、本番環境には手動でデプロイする必要があります。
  • 継続的デプロイメント - デプロイメントが自動化されているため、手動での作業は必要ありません。

CDs Diagram. Image credit: semaphore

CI/CDの仕組みとは?

CI/CDは、プロジェクトの開発プロセスを促進し、そのスピードを飛躍的に高めます。しかし、すべてのソフトウェア開発手法がCI/CDをうまく構築するのに適しているわけではないことに注意してください。あなたのプロジェクトでCI/CDを可能にするためには、以下の原則に沿ってプロセスを構成する必要があります。

  • 反復リリース

あなたのプロジェクトは、モジュール構造になっています。この場合、各コンポーネントは、必要に応じて何度も自律的にテストされ、問題を早期に発見して、次の開発段階に入る前に修正することができます。

  • テスト駆動型の開発

各モジュールは、自動化されたモードでテストできるように、デプロイ可能な状態でなければなりません。さらに、テストスーツは包括的でなければなりません。各モジュールでコーディングされたすべての機能をテストする手順が含まれていなければなりません。

  • 小規模なイテレーション

テストプロセスを円滑に進めるためには、ソフトウェアを小さなパーツに分けて開発することに注力する必要があります。開発中の機能が予想以上に時間を要する場合(例えば1日以上)、開発者は機能フラグを使ってテストプロセスをいくつかの段階に分けます。ほぼ完成されたプロダクトをテストして、他の問題を引き起こす多数の問題を管理するよりも、例えば機能のバグを1つずつ検出して修正する方が簡単だからです。

  • リリースをテストする環境

各モジュールがエンドユーザーの手に渡っても正しく動作することを確認するためには、本番環境に近い環境でテストする必要があります。プロダクトができあがったときにお客様が見るものを確認する必要があるのです。

  • オンデマンド・デプロイメント

どのモジュールも、オンデマンドでデプロイできなければなりません。どんなバージョンでも、どんな環境でも、どんな時でも、誰でもデプロイできなければなりません。このようなアプローチは、DevOpsによるテストと開発プロセスの両方のスピードアップに役立ちます。

CI/CDパイプラインの典型的なステージとは?

CI/CDパイプラインとは、プロダクトやアプリケーションの新しいバージョンを提供するために開発者が実行する、自動化された連続したステップのセットです。パイプラインには3つの典型的なステージがあります。

  • 継続的インテグレーション:開発者が作成したコードは、自動化されたスクリプトによってテストされ、問題がなければ、すでに存在するコードにマージされます。これらの連続したステップは、ビルド、テスト、マージと呼ばれています。
  • 継続的デリバリー:更新され、問題のないバージョンのプロダクトが自動的にリポジトリにリリースされます。
  • 継続的デプロイメント:プロダクト(現在の開発段階)が本番環境にデプロイされます。

CI/CDパイプラインを使用することは、通常、ソフトウェア開発プロセスに大きなメリットをもたらします。リリースの配信速度、コードの自動テスト、継続的な自動化と既存のコードへのシームレスな統合など、いくつかの利点を挙げることができます。例えば、Netflixは、統合、テスト手順、すぐに使えるプロダクトの提供を数時間以内に完了することができます。Netflixは、自動化を熟知したリーダーの1社です。

CI/CDがうまくいかないときは?

プロジェクトに適切なCI/CDパイプラインを設定することは、簡単なことではありません。現在のソフトウェア開発ライフサイクルをCI/CDに変更している企業では、その過程で発生する可能性のあるミスによって問題が発生することがあります。

  1. 間違ったプロセスを先に自動化する

CI/CDとDevOpsの連携を確立した経験がないため、開発者は間違ったプロセスを優先して自動化してしまいます。例えば、週に一度のコード変更のように、十分な頻度で繰り返されない継続的なステージにシナリオやプロセスを統合し始めます。あるいは、自動化を全く必要としないプロセスもあります。いずれにしても、この間違いは、CI/CDパイプラインの主な利点であるプロダクト開発のスピードを損なうことになります。

  1. デリバリーではなくデプロイメント

開発者は、製品を本番環境にデプロイしなければ、継続的なデプロイをしていないと考える場合があります。そのため、継続的デリバリの段階を省略して、継続的デプロイに進んでしまいます。このミスにより、エンドユーザーに準備の整っていないプロダクトが届けられることになります。

  1. 適切なメトリクスの欠落

スクラムチーム(3~9人の経験豊富なビジネスアナリスト、開発者、UXデザイナー、スクラムマスターなどで構成され、プロジェクトの変更を段階的に行うチーム)が作成したメトリクスは、長期的には必ずしも正しく、CI/CDに適したものではありません。DevOpsプロセスの経験がないエグゼクティブに提示されると、誤解を招き、効果的なCI/CDパイプラインを正しく確立することができなくなります。

  1. 協調性の欠如

DevOps、QA、スクラムマスター、およびプロジェクトに取り組むチームの他のメンバーの間で調整が行われないと、CI/CDのワークフローが混乱します。これは、CI/CDを使用したソフトウェア開発プロセスの自動化において、1人または複数の関係者が、必要なコラボレーションのレベルを明確に理解していない場合に起こります。

  1. 不必要なCI

開発者は、例えばコードの小さな変更のような小さなプロセスでさえも自動化し始めるケースがあります。このような継続的インテグレーションのアプローチは、企業のリソースを過度に使用し、時間とコストを浪費する原因となります。

このような失敗をしないためには、自分の環境で効率的なCI/CDをセットアップする準備をする必要があります。すべてが完璧に機能するまでには数ヶ月かかります。しかし、時間とお金を節約するために、必要な専門知識と豊富な経験を持つ専門家を提供してくれるプロのQA会社を雇うことができます。

効率的なCI/CDワークフローを設定するには?

Desnaでは、CI/CDを効果的にセットアップする方法を行っています。すべてのプロジェクトはユニークであり、特定のアプローチが必要かもしれませんが、ほとんどの場合、私たちのCI/CDワークフローは次のようになります。

  • プロジェクトの現行バージョンがリポジトリからビルドされています
  • 開発サーバーにデプロイされ、新しいコードがエラーなくコンパイル、ビルドされているかどうかをチェックします。
  • その後、新しくビルドされたプロジェクトはQAサーバーにデプロイされ、タスクに応じて自動テストまたは手動テスト(またはその両方)を使用して利用可能な機能をチェックします。プロジェクトの規模が大きい場合は、いくつかのサーバーに分散して、プロセスを高速化することができます。
  • デリバリーステージでは、ハッキング、侵入テスト、アクセシビリティテスト、パフォーマンステスト、セキュリティテストなど、さまざまなアプローチでプロジェクトをテストします。このステージでは、プロジェクトが本番環境にデプロイできるかどうかをチェックします。
  • すべてのテストに問題がなければ、プロジェクトは本番にデプロイされます。

このようなアプローチは、私たちが取り組むすべてのプロジェクトに適用されます。コードがリポジトリにプッシュされた瞬間から本番へのデプロイまで、すべての段階で何をすべきかを正確に把握しています。

CI/CDのワークフローを整理する準備はできましたか?

CI/CDはソフトウェア開発に多くのメリットをもたらします。この分野の専門知識に自信があるならば、必要に応じてCI/CDパイプラインを使用することを躊躇しないでください - それはあなたのビジネスを大きく向上させるでしょう。しかし、疑問がある場合には、専門家の助けを借りましょう。このような決断は、あなたの時間とお金を節約するだけでなく、あなたのビジネスが不必要でコストのかかるミスを犯さないようにします。

Desnaは多くプロジェクトを完了したプロのQAチームとパートナーシップを結んでいます。CI/CDを使ってプロジェクトの開発をスピードアップする方法を知っています。ご不明な点やサポートが必要な場合は、お気軽にお問い合わせください。

アプリ開発・QAの相談など、フォームから気軽にお問い合わせください。