CI/CDパイプラインとは?品質とスピードのバランスを実現するベストプラクティス
目次
はじめに
競争の激しい市場において、企業は生き残るために速く変化する必要があり、品質とスピードのバランスを実現する必要があります。スピードが速すぎると品質が犠牲になり、品質を重視しすぎると革新的な製品を生み出すスピードが遅くなってしまうからです。
このような課題から、DevOpsのようなアプローチは、開発プロセスに自動化を取り入れることで時間を節約し、このバランスを実現ために考案されました。CI/CDパイプラインを正しく実行すれば、バグが減り、開発とイノベーションのための時間が増えるでしょう。CI/CDパイプラインを採用した企業の38%が、翌年に少なくとも10%の成長を達成しています。
本コラムでは、CI/CDパイプラインを最大限に活用するために、この方法の大きなメリットと、どのようにCI/CDパイプラインを活かせるかについて解説します。
CI/CD(継続的インテグレーション/継続的デリバリー)とは?
CI/CDは、アプリの開発プロセスに自動化を取り入れることで、より迅速に顧客にアプリを提供する手段です。継続的インテグレーション、継続的デリバリー、継続的デプロイの3つがCI/CDに関連する主要な原則であります。CI/CDは、開発チームと運用チームが新しいコードを統合する際に直面する課題を解決できます。
CI(Continuous Integration:継続的インテグレーション)
「継続的インテグレーション」とは、ソフトウェア開発パイプラインの初期段階において、コードとテストを行うフェーズです。ソフトウェアの新しいコード変更は、CIを成功させることで定期的に構築、テスト、共通リポジトリへのマージが行われます。これは、同時に開発中のソフトウェアとの衝突(コンフリクト)問題に対する解決策です。
複数の開発者が同時に同じコードベースで作業し、コードリポジトリに頻繁にコミットします。プロジェクト工程のある時期には、構築の頻度が毎日、あるいは1日に複数回になることもあります。このように適切な頻度で行うことで、リスクの低い実験が可能になります。
コード構築が最初のテストに通過し、より詳細なテストに移行できるようになったら、CIは終了となります。
CD(Continuous Delivery:継続的デリバリー)
継続的デリバリーとは、通常、開発者がアプリケーションに加えた変更を自動的にバグチェックしてリポジトリに公開し、そこから運用チームが本番環境にデプロイすることを指します。これは、開発チームとビジネスチーム間の可視性とコミュニケーションの欠如という問題に対する解決策です。継続的デリバリーの目標は、新しいコードをできるだけ簡単にリリースできるようになることです。
ビルドを高度なテストに通すために、CDは機能テスト、ユーザー受容性テスト、設定テスト、負荷テストなどのツールや自動化を使用しています。これらのテストは、ビルドが要件を満たし、本番環境で使用できるかを確認するものです。小規模なイテレーションにより、テスト中に発見された問題は迅速に検出・解決され、従来のソフトウェア開発手法と比較して時間とコストの節約につながります。
CD(Continuous Deployment:継続的デプロイ)
継続的デプロイとは、開発者が行った変更を自動的にリポジトリから本番環境にリリースし、顧客がそれを利用できるようにすることです。運用チームがソフトウェアのデリバリーを妨げる手動プロセスに負担をかけるという問題を解決します。パイプラインの次の段階を自動化することで、継続的デリバリーの利点を拡張します。
一方、継続的デリバリーでは、通常、検証済みの構築を手動デプロイメントやその他の人間の承認に備えるだけです。
CI/CDパイプラインとは?
従来のソフトウェア開発工程は、基本的にこのような形になっています。
- 要件定義
- 基本・詳細設計
- 開発
- テスト
- リリース・保守
1960年代に機能的なビジネスシステムの大規模開発のために展開されたソフトウェア開発工程は、60年以上業界の標準となっています。このやり方は効果的で信頼性が高いのですが、当時の技術に合わせて発明されたため、今日では時代遅れになりつつあります。当時は、処理能力やデータ転送速度が現在に比べて極めて限られていたため、統合には膨大な時間と労力がかかり、導入はオンサイトで行われ、テストには何時間もかけて手作業でエラーがないことを確認する必要がありました。
今日、より高度な技術と接続性の向上により、製品を開発し、顧客に直接デプロイプロセスを自動化することと、品質とスピードを飛躍的に向上させることができます。それがCI/CDパイプラインの目的であり、高い品質を維持しながらスピードを上げることなのです。
統合を異なる開発者のコードを統合するプロセスと定義するならば、継続的インテグレーションは、開発チームが新しいコードを共通のリポジトリにリリースできる一連のプラクティスを構築します。
CI/CDは、統合、テスト段階からデリバリー、デプロイまで、ソフトウェアの開発工程に渡って継続的な自動化と監視を実現します。これらの相互接続されたプロセスは、一般に「CI/CDパイプライン」と呼ばれ、アジャイル手法で協働する開発チームと運用チームによってサポートされます。
CI/CD パイプラインはどのように機能するのか?
まず、高品質なソフトウェアを効率的に提供するためには、CI/CDのベストプラクティスを用いてコードを構築し、テストし、デプロイすることが必要です。
ソース
パイプラインの実行は、通常、ソースコードリポジトリによって開始されます。コードが変更されると、CI/CDツールは通知を受け取り、関連するパイプラインを実行します。その他によくあるトリガーとしては、ユーザーによって自動的にスケジュールされたり起動されたりするワークフローや、他のパイプラインの成果などがあります。
構築
コードの生成と集合は、いずれもこのフェーズの継続的インテグレーションプロセスの一部であります。共有リポジトリには、多くの開発チームによって書かれたコードが格納されています。構築プロセスには、開発者の貢献を自動化し、ソフトウェアの品質や環境を標準化するためのツールを提供します。
テスト
CI/CDの大きなメリットは、テスト段階で最も現れます。テストは時間のかかる反復的な作業であるが、CI/CDパイプラインによって自動化できます。
テストには様々な種類がありますが、いずれも自動化された継続的インテグレーション・パイプラインで利用できます。また、テストはプログラムのパフォーマンスに関する重要な情報を提供し、それを即座にコードに反映させることができます。
デリバリー
承認されたコードベースは本番環境に送られる段階です。この段階は、継続的デプロイメントでは自動化され、継続的デリバリーでは開発者の許可を得てから行われます。
デプロイ
最後に、修正を実装し、完成した製品を本番稼動させます。継続的デリバリーでは、製品やコードがリポジトリに送られ、人の承認を経て本番環境またはデプロイメントに移行されます。このステップは、継続的デプロイメントでは自動化されていることを行います。
機械は人間よりはるかに速く計算できるため、自動化はスピードと結び付けられます。うまく設計されたCI/CDパイプラインから得られる最大のメリットは、開発のスピードアップと納期の短縮です。たとえば、すべての開発者が24時間に一度、コードを Git リポジトリに統合する必要があるような設定を構築したとします。チームはより小さな単位で納品するため、コードのレビューやプロセスの初期段階でのバグの発見がより容易になります。
このパイプラインによって開発時間が短縮され、チームはバグを発見するためのレビューに費やすリソースを削減できます。このように節約されたリソースは、さらなる開発に投資できます。デプロイとリリースに関しては、手動でプロジェクトを本番環境にアップロードする代わりに、パイプラインによってすべてが自動的に処理されます。プロジェクトが意図したとおりに動作していることを確認するため、ユニットテストが実行されます。
CI/CD パイプラインはどのように機能するのか?
機械は人間よりはるかに速く計算できるため、自動化はスピードと結び付けられます。うまく設計されたCI/CDパイプラインから得られる最大のメリットは、開発のスピードアップと納期の短縮です。たとえば、すべての開発者が24時間に一度、コードを Git リポジトリに統合する必要があるような設定を構築したとします。チームはより小さな単位で納品するため、コードのレビューやプロセスの初期段階でのバグの発見がより容易になります。
ここで、プロジェクトマネージャーがコードの一つ一つをレビューする代わりに、AI(人工知能)が自動的にエラーを特定してくれると想像してみてください。このパイプラインによって開発時間が短縮され、チームはバグを発見するためのレビューに費やすリソースを削減できます。このように節約されたリソースは、さらなる開発に投資できます。デプロイとリリースに関しては、手動でプロジェクトを本番環境にアップロードする代わりに、パイプラインによってすべてが自動的に処理されます。プロジェクトが意図したとおりに動作していることを確認するため、ユニットテストが実行されます。
CI/CDパイプラインのメリット
CI/CDパイプラインのメリットはたくさんありますが、紹介したいのは主に5点です。
効率的なソフトウェア開発
テストは、イテレーション(ステップ)が少ないほど容易で効率的です。イテレーションを重ねるごとにコードの範囲もテストの範囲も狭くなるため、問題の発見と修復が容易になります。また、追加した機能の実用性やユーザー受容性をより迅速に評価し、有用性の低い機能は簡単に変更し、開発時間が失われる前に放棄することもできます。
品質とスピード
従来のソフトウェア開発手法では、完成までに数ヶ月から数年かかることもあり、定義された仕様や要件は、変化するユーザーの要求や期待にうまく対応できないことがあります。うまく機能するCI/CD戦略は、デプロイを加速させ、エンドユーザーにとっての各リリースの価値を高める効果的な方法です。チームが継続的にコミュニケーションを取り、自動化された方法を採用することで、デプロイ工程を短縮します。
リリースタイミングの改善
製品の発売を成功させるために最も重要な要素の1つは、リリースのタイミングです。タイムリーな展開は、顧客エンゲージメントの増加、利益の獲得、価格設定のサポート、そして企業の市場目標の達成に役立ちます。適切なタイミングで発売されれば、製品のROI(投資対効果)はかなり上昇します。
ソフトウェアの保守向上
従来のソフトウェア開発では、問題の解決に数週間から数ヶ月かかることがありましたが、CI/CDパイプラインの継続的なフローでは、より早く、より確実にバグに対処し、修復することが容易になります。時間の経過とともに、製品はより安定し、信頼できるものとなっています。
透明性の向上
CI/CDパイプラインの設定により、新規ビルドの全過程、テスト結果、および新規開発の問題点を調べられます。この透明性により、開発者は構築のどの変更が問題を引き起こしたかを確認し、将来的にそれを防ぐことができます。
CI/CDパイプライン採用の障害となるものとは?
CI/CDパイプラインの導入は増加傾向にありますが、いくつかの課題もあります。1つの課題は、完全に自動化されたCI/CDパイプラインの構築には、特定のスキルセットが必要であることです。そのうちのいくつかは、どのソフトウェア開発者でも学ぶことができますが、チームにDevOpsエンジニアがいることは不可欠です。
DevOpsエンジニアを見つけるのは難しくないですが、彼らを雇うにはそれなりの費用がかかります。実際、DevOpsエンジニアはソフトウェア業界で最も高給な役割の1つです。もしDevOpsエンジニアを雇うことができなければ、一般の開発者はCI/CDパイプラインの仕様に対応するために特別にトレーニングする必要があり、これもコスト高がかかります。
DevOpsのトレーニング・雇用コストに加え、次のハードルとなるのが新技術への投資です。CI/CDパイプラインは、時間的にもリソース的にも大きな先行投資が必要です。CI/CDパイプラインは非常に急な学習曲線が必要なことでも知られており、この学習曲線は経験豊富な専門家を雇用することで解決できますが、プロジェクトの途中、特に期限の厳しいプロジェクトの途中でCI/CDパイプラインを導入しないようにしましょう。
もう一つは、レガシーシステムは、主にクラウドコンピューティングでサポートされているCI/CD構造をほとんどサポートしていないことです。そのため、CI/CDパイプラインを採用するためには、現在のシステムを見直し、必要なアップグレードを行う必要があります。
最後になりますが、CI/CDパイプラインの導入には、規律と品質に対する強い要件が必要です。もしチームが統合の締め切りを守らなかったり、ユニットテストで見つかった問題を修正しなかったりしたら、CI/CDの試みは無駄な努力に終わってしまうでしょう。
CI/CDパイプラインのためのツール
IBM社によると、Jenkinsは最も広く使われているオープンソースのCI/CDツールです。JenkinsはJavaベースの継続的インテグレーションサーバーで、CI/CDのプロセスやレポーティングを自動化するためのものです。Travis CIとCircleCIは、他の2つのオープンソースの統合技術です。
GitHubやAWS CodeCommitなどの統合開発環境(IDE)は、ソフトウェアパッケージの作成、保守、トラッキングにおいて開発者を支援し、GitLabなどのプラットフォームは、IDEを他のツールとともに大きなプラットフォームの一部として提供することを目的としています。
クラウド環境のチームでは、プログラムのパッケージングとデリバリーにDockerなどのコンテナ、組織化のために、Kubernetesを採用しています。KubernetesはCI/CDパイプラインのために特別に設計されたものではありませんが、その多くで使用されています。
CI/CDパイプライン構築のためのベストプラクティス
CI/CDパイプラインを最大限に活用するために、企業やその開発チームは様々な戦略を用いることがあります。CI/CDの推奨プラクティスは、企業がCI/CDからさらに価値を引き出すのに役立ちます。
成功を定義する
コード開発のスピードアップやエラー・リワーク率の低減など、望ましい結果を理解し、それを追跡するための指標を設定します。KPIをパイプライン導入前のパフォーマンスと比較し、パイプラインの進捗に合わせ、KPIに目を向けます。これにより、パイプラインの価値を確認し、時間の経過とともに問題を特定し、CI/CDパイプラインの改善と拡張のための戦略に投資することが容易になります。
小さく始める
CI/CDが進化し、開発者が新しいツールや手法を試すための時間を確保します。企業では、CIパイプラインから始めて、その後にCDを追加することもあります。小規模なフィラープロジェクトは、大規模なパイプラインを改善するために使用できる新しいツールやプロセスを実験するのに適しています。
常に全く同じ環境を使用する
CI/CDパイプラインは、あるパイプラインの実行によって、次のパイプラインの環境が変わってしまっては信頼できないです。すべてのワークフローは、同じ、分離された綺麗な環境で開始する必要があります。
プロセスを記録する
ドキュメント化は、開発プロセスの重要な側面でありながら、見落とされがちで過小評価されがちなものです。資料は、すべてのものがどのように関連し、設定されているかを示し、すべての開発者とビジネスユーザーのためにプロセスとツールを説明します。また、問題のトラブルシューティングを支援できます。また、ドキュメンテーションは、責任者がオペレーションを監査できるように、組織のコンプライアンスとセキュリティを支援することに使われます。
高速で基本的なテストを最初に実行する
大規模なテストは、実行時間を短縮するために並列化するのが一般的です。セキュリティスキャンやユニットテストのような迅速で基礎的なテストを最初に実行し、次に統合テストやAPIテスト、そして最終的にはUIテストを通過した場合のみ実行し、様々なフェーズを持つパイプラインをセットアップすることが望ましいです。
まとめ
優れたCI/CDパイプラインは、円滑なソフトウェア開発プロセスの部分をできるだけ多く含むべきです。CI/CDの1つのフェーズが、パイプライン全体に大きな影響を与えるのです。
パイプラインからの詳細なインプットを受けたチームは、開発プロセスを最適化するための最適化および強化の決定を行い、その結果、最終製品を微調整できます。
CI/CDパイプラインは、ソフトウェア開発およびDevOpsチームが導入できるベストプラクティスの1つであり、コード変更をより頻繁に、より確実に提供できるようにします。
CMC Japanについて
ベトナム第2位のICT企業である当社、CMCグループは、ベトナム政府主導の新型コロナウイルス対策に準拠し、ハノイおよび、ダナン・ホーチミン市の3拠点で、オフショア開発を継続して提供しています。
中長期的なリソース計画や開発コストの最適化をご検討の企業様は、お問い合わせフォームよりご連絡ください。
当社は日本のお客様に「止まらない、持続可能な開発」をベトナムオフショア開発で支援しています。
【動画】【2022年版】2分でわかる!オフショア開発とは?
本セミナーは、ベトナムオフショア開発を実際に活用している企業様から、実際のデリバリーノウハウやリアルな成果についてお伝えしています。
CI/CD構築も、当社にお任せください!
ベトナムオフショア開発入門書資料ダウンロード
資料は下記のフォームを送信して頂くと完了画面またはメールにてダウン口一ドできます