DevOpsチームは、製品拡大とリリースのスピードが増す中、頻繁な問題に対応しなければなりません。QA環境を最適な状態に保つにはどうすればよいでしょうか。継続的インテグレーションやアジャイル開発において、テスト体制が十分に機能しているかが問われます。
後者の問いに対する答えは、多くの企業や従来のQA手法の観点からすると、十分でない可能性があります。自動化や機械学習だけではなく、探索的テストも依然として重要ですが、事業拡大と効果的なテスト運用の中で両者の組み合わせと最適化が求められます。
近年、CIは急速に普及し、ほぼすべてのアプリソフト企業で採用されています。開発者はJenkinsなどのCIサーバーに頼り、GoogleのKubernetes向けなど、オープンソースのCIツールも存在してパイプラインの自動化を実現しています。
継続的インテグレーションは、ソフトウェア開発においてコードを中央リポジトリに定期的(できれば一日に何度も)に統合する方法を指します。この仕組みにより、自動ビルドと自動テストで各統合の安定性が確認されます。自動テストは厳密にはCIの一部ではありませんが、一般的に実施されています。頻繁な統合により、問題を早期に発見し原因を特定しやすくなるのが大きな利点です。
多くの変更が比較的小さいため、バグの原因となった変更を追跡するのは容易です。近年、ソフトウェア開発ではCIが標準となっており、いくつかの基本原則に基づいて運用されています。ソースコードの管理、自動ビルド、テストなどがその例です。
最適な実装により、いつでもアプリを展開でき、変更があれば速やかに本番環境へ反映されます。この仕組みにより、チームは迅速に動きながらも自動チェックで高品質を維持できます。CIはバグを完全にはなくしませんが、発見と修正を容易にする点が大きなメリットです。
CIは以下の原則に基づいて行われます。
CIがなければ、エンジニアリンググループは分断され、コミュニケーションが不足しがちです。これにより管理コストの増加、コードリリースの遅れ、失敗率の上昇が生じます。新たな変更の取り込みが困難になるため、リリース予定の見積もりも立てにくくなります。
継続的インテグレーションは、開発者だけでなく企業全体の透明性向上にも寄与します。この仕組みにより、チームが計画を効果的に実行するための資源が整い、全体の計画も円滑に進みます。
適切に実施されれば、CIは品質を損なうことなく予定通りのリリースを実現するための多くの目的をサポートします。複数の開発者がひとつのリポジトリに貢献するチームでは、CIは欠かせません。
以下に、CIが重要で有益な要素をいくつか挙げます。
ソフトウェアの全コードは、全開発者が各自のコンピューターでチェックアウトできる中央リポジトリに保存されます。変更に納得すれば、更新後のコードをリポジトリにプッシュします。その後、自動CIサーバーがビルドを行い、ユニットテストや統合テストでコードが正しく動作しているか確認します。ビルドが失敗した場合、どこでエラーが発生したかが報告され、チームが速やかに対処できるようになります。
このCIプロセスは毎日繰り返されるため、新コードが常にビルドされテストされます。DevOpsチームは、更新したソフトウェアを手動でリリースするか、システムによる自動デプロイでさらに効率化するかを選択できます。
エンジニアがコードの不具合箇所を遡る手間が省けるため、DevOpsチームは多くの時間と労力を節約できます。また、継続的なプロセスにより、古いコードでの作業や、締め切りに追われた急速なアップデートのリスクも減少します。
CIを活用すれば、開発者はコンテナや仮想マシン上でテストとビルドを並行して実施し、時間のかかる作業を自動化できます。その結果、システムが背景で動作している間に他の業務に専念でき、ビルド合格後にのみ変更が統合されるため、メインコードが壊れるリスクも低減されます。
CIはリリースプロセスの効率化や生産性向上など、開発全体に多大な影響を与えます。以下にそのメリットとデメリットを簡単にまとめます。
コードの更新を頻繁に行い自動テストを継続することで、バグの発生が抑えられます。変更差分が小さいため、問題の原因特定が容易になり、結果的にQAがより効率的かつ効果的になります。
大量のコードを一度にリリースするストレスが軽減され、無数の潜在的な問題に悩まされることがなくなります。各開発者は、頻繁かつ小規模な変更のコミットで、自身の修正点と発生する問題をしっかり把握できます。
問題の迅速な解決により、実用的なアプリの開発とリリースに割ける時間が増加します。主要な関係者は既存機能のアップデートや改善を定期的に受け取ることができ、CIの導入により貴社はより柔軟に対応できます。
CIによりチームの効率が向上し、定期的なアップデートの計画が立てやすくなります。コードのコミットや問題の負担が軽減されることで、より迅速なソフトウェア開発が可能となり、テスト時間も短縮されます。これにより、QAよりも新機能の開発にリソースを振り向けやすくなります。
この手法により、テストだけでなくビルドやパイプライン管理にもCIソリューションの活用が奨励されます。結果として、コードや製品の品質が向上し、チームの柔軟性も増します。
CIでは、データベースや業務プロセスの変更など、ユーザーからは見えない部分で多くの変更が行われます。機能名の変更、メニューバーの再構成、長年続いた手順の変更など、UXに影響を与える変更は必ずしも歓迎されません。UXの変化は速やかに伝え、可能であれば画面上でのヘルプを提供する必要があります。
段階的な開発により、ヘルプデスクスタッフとエンドユーザー双方に今後の変更を周知できます。CIと継続的デリバリーを重視する環境では、サポートチームがユーザーからの問い合わせや苦情に迅速に対応する準備が求められます。ヘルプデスクを継続的インテグレーションのパイプラインに組み込み、リリース前にスタッフからのフィードバックを得る工夫が必要です。
CIや継続的デプロイが標準となっているマイクロサービス環境では、1つの変更が複数のサービスに大きく影響する場合があります。ある変更が1つのサービスを改善しても、別のサービス群に悪影響を及ぼす可能性があります。オーケストレーションと構成管理により、1つのマイクロサービスへの変更が他に波及しないように調整され、万一の際には対処しやすくなります。
CI/CDの変更は、実装先プラットフォームにも影響します。即時の監視と報告により、問題を迅速に把握し修正できます。不具合が発生した場合、問題が拡大しヘルプデスクに問い合わせが殺到する前に直ちに把握する必要があります。
十分なテストが行われないと、CI導入時のリソースやパフォーマンスへの影響が顕在化するまで気づかない恐れがあります。レシピやマニフェストを活用してワークロードの準備・配置を可能な限り自動化する必要があります。オーケストレーション技術は、ITプラットフォームの継続的な監視と、自動的な対策(コンピュートやメモリの追加、処理の制御、マイクロサービスやアプリの再配置、起動・停止、または手動介入のフラグ付け)を支援します。
自動リリースパイプラインには常にこの3つの段階が含まれます。ソフトウェアが最初から最終段階へ進む過程は、これら3つのプロセスの共同の責任です。
CI と継続的デプロイ、そして継続的デリバリー
Continuous Integration | Continuous Deployment | Continuous Delivery |
---|---|---|
Continuous Integration (CI) is a software development strategy that is used in DevOps. This practice allows developers to integrate their code changes into a common repository so that automated builds and tests can be executed on the code. | Continuous Delivery (CI) is a practice within DevOps that refers to the process of developing, testing, and delivering enhancements to the software code. The fact that the code is always in a state that may be deployed is the component of the CD that is considered to be the most essential. | Continuous Deployment, abbreviated as "CD," is the final stage in the pipeline, and it refers to the process of automatically releasing any changes made by developers from the repository to the production environment. |
継続的インテグレーションの利点と、プラットフォームエンジニアリングチームにもたらす恩恵を理解することは重要です。同時に、統合テスト、テストスイート、主要な指標、依存関係、チュートリアルなどの適切なベストプラクティスを学ぶことも大切です。以下に、その一部を詳しく見ていきます。
自動テストを組み込んだCIパイプラインが整ったら、テスト範囲の拡大と改善が不可欠です。継続的インテグレーションのコードが正しく機能しているか、テストで確認する時期となります。
テスト駆動開発(TDD)の一環として、実装前にテストケースが作成されます。TDDでは、開発者とプロダクトマネージャーが必要事項や仕様について話し合い、その内容を基にコードのチェックリストが作られます。
テストとビルドの自動化は大幅な時間節約になります。現在、自動ビルド環境は開発プロセスの標準的な一部です。JavaのAnt、UnixのMake、GitHub、Docker Hubなどを利用して環境を構築できます。ソースを実行可能なシステムに変換する作業は複雑なため、可能な限り自動化することが望ましいです。
プログラマーがメインリポジトリに新たなコードを追加する際、プルリクエストを送信します。これにより、同僚に新しい変更が反映可能であることが通知され、あらかじめ決められた承認手続きが自動的に実行されます。さらに、手動のコードレビューも行われ、コードの品質と有用性がより正確に評価されます。
コードレビューとプルリクエストは、エンジニア間の知見共有を促進します。
CIパイプラインの実行速度は常に最適化する必要があります。高速なパイプラインにより、プロジェクトのフィードバックサイクルが早まり、開発者は容易に更新を提出し新たなアイデアを試すことができます。その結果、欠陥の修正も発見直後に迅速に実施されます。
パイプラインの処理速度向上は、競合に対する優位性獲得と、顧客へのより良い体験提供に直結します。
継続的インテグレーションツールは、コードの統合、ビルド、テストを効率化するソフトウェアです。他のDevOpsツールと同様、コードのコミットによって起動され、バージョン管理システムやコードリポジトリと連携します。
Bitbucket Pipelinesは、Atlassianが開発したCIソリューションで、Bitbucketのクラウド版バージョン管理プラットフォームに組み込まれています。プロジェクトが既にBitbucket上にホストされている場合、Bitbucket Pipelinesを使ったCIの導入は簡単な次のステップとなります。パイプラインはコードとして扱われ、定義の共有やビルドの開始が迅速に行えます。また、継続的デリバリーも利用可能で、プロジェクトを本番環境へ展開することもできます。
CircleCIは、Githubとシームレスに連携するCIツールです。多様なVCS、コンテナ、デリバリー手法に対応できるため非常に柔軟で、ローカルでもクラウドでも実行可能です。
最新のCIツールの一つであるGitlabは、包括的なDevOps環境を提供します。Githubの更なる向上を目指して誕生し、先進的なUIとコンテナサポートを備えています。
バージョン管理システム(VCS)はCIの基盤です。CI対象のコードベースにVCSがない場合は、まず導入してください。その後、ホスティングプラットフォームを選びます。現代の多くのVCSホストはCIをサポートしており、Bitbucket、Github、Gitlabが代表的です。
バージョン管理の導入後、承認ステージを組み込みます。自動統合テストは非常に重要であり、自動テストには追加コストがかかるものの、開発者はテストコードやテストケースの作成を行います。CIはエンジニアリングのみならず、マーケティング、セールス、プロダクトチームにも役立ちます。
継続的インテグレーションを貴社に合った形で活用するには、環境やチームに合わせて柔軟かつ現実的に進める必要があります。CIが初めての場合は、経験豊富なチームの意見を参考にするのも有用です。
最新情報を購読