はじめに
ソフトウェア開発では、開発した成果物を一度リリースして終了ではなく、リリース後も継続的に改善を繰り返し、ユーザーに価値のあるサービスを提供することで、ビジネスの価値を向上させることが重要です。
こうしたソフトウェアの継続的な改善を実現するためには、企画、開発、ビルド、テスト、デプロイ、モニタリングといった一連のソフトウェア開発ライフサイクル(Software Development Life Cycle、略してSDLC)において、人手による介在をできるだけ省く自動化を取り入れ、できるだけサービス停止時間を短く開発成果物を展開(デプロイ)し、安定してシステムを運用することが重要視されています。
そこで本記事では、SDLCの重要な自動化の要素である、CI/CDについてご紹介します。
CI/CDとは
CI/CDは、Continuous Integration/Continuous Delivery & Deploymentの略で、日本語では継続的インテグレーション/継続的デリバリー&デプロイと呼ばれます。CI/CDを一言で言えば、一定の品質を保証しながら、素早くアプリケーションをデプロイする自動化の手法です。
近年の開発現場では、アイデアを素早くサービスに落とし込み、繰り返し改善を行うアジャイルやスクラムといった開発プロセスを採用することが主流になりつつありますが、こうした開発プロセスとCI/CDは相性が良いことから、世界中のIT企業において積極的に導入が進められています。
このCI/CDの一連のステップを自動化したものをCI/CDパイプラインと呼びます。
一般的に、CI/CDパイプラインにはアプリケーションを構築するエンジニアとは異なるスキルセットが求められ、SRE(Site Reliability Engineer)やDevOpsエンジニア(Develop Operations Engineer)と呼ばれる職種のエンジニアがパイプラインの構築を担当する場合が多く、他にもネットワークやミドルウェア、セキュリティなど幅広い知識が要求されます。
CI/CDが広く導入されるなかで、SREやDevOpsエンジニアはエンジニア職のなかでも特に需要度の高いポジションの一つです。
続いて、CIおよびCD各々の具体的な説明とそのメリットについてご紹介します。
CI:継続的インテグレーション
開発には、通常Gitなどのソースコードを管理するツールを利用します。
CI:継続的インテグレーションは、このツールに開発者が修正を加えたソースコードをプッシュ(アップロード)した際に、それを検知し、静的解析や単体テストを実施し、問題なければビルド、結合テストや回帰テストを実行して、変更されたソースコードに不具合がないかを検証することを指します。
このソースコードの変更をトリガーにしてテストやビルドを自動で実行し、途中で問題が発生した場合には開発者に通知することで不具合が発生することを未然に防ぎ、ソフトウェアの品質を高めることを目的としています。
CD:継続的デリバリー
CD:継続的デリバリーは、CI:継続的インテグレーションを更に拡張したものです。
CIで実行されるビルドやテストが正常に完了した後、テスト環境やステージング環境へビルドされた成果物をデプロイし、より高度なテスト(E2Eテスト、負荷テスト、セキュリティテスト)などを行うことを指します。
一定の品質が確認された後に、プロダクション環境(本番環境)へのデプロイが可能となる状態までを保証することを目的としています。
CD:継続的デプロイ
継続的デプロイ(あるいはデプロイメント)は、継続的デリバリーの自動化をより拡張したものです。
ソースコード変更の検知から、ビルド、テストを実行し、各環境(テストやステージング)等へのデプロイとテスト、プロダクション環境へのデプロイまでを、一気通貫で人の手動による操作を介さず、完全に自動化する手法のことを指します。
CI/CDを用いることのメリット
CI/CDを用いることのメリットは、これまでに記載した通り、一定の品質を保証しつつ素早く各環境にアプリケーションをデプロイできることです。
品質を保証するには、テストをしっかりと定義する必要がありますが、CI/CDを導入することで、テストを正しく且つカバレッジ(網羅率)を高くしようという、開発者のテストに対する意識が上がり、結果的にプロダクトの品質の向上に繋がります。
また、デプロイに自動化の仕組みを取り入れることは、リリースの頻度の向上に大きく寄与します。このことは、方針変更やニーズの変化に機敏柔軟に対応できる体制に繋がり、現代の変化の激しいビジネス環境において、自社プロダクトの競争優位性を高めること繋がります。
更に、ビルドやテスト、デプロイのような工程を開発者が手動で行うことも可能ですが、CI/CDの仕組みを用いることにより、煩雑な手順を自動化することで属人化を防ぎ、また人為的なミスを防ぐこともメリットとして挙げられます。
導入にあたって
パイプラインを構築するにあたっては、一定の開発工数を要することや運用にかかるランニングコスト、エンジニアリソースの確保、数多くあるツールの中から自社に適した技術選定等々、様々な観点で検討が必要です。
アプリケーション開発が初期段階であれば、まずはCIの導入部分(静的解析や単体テストの自動実行)の構築から着手し、費用対効果などを確認しながら、パイプラインの拡張を目指すなど、プロジェクトの規模や予算、進捗に応じてゴールを明確化することが重要です。
↓SHIFT ASIAの導入事例
CI/CDツールの代表的なツール11選をご紹介
CI/CDツールは数多くあるため、自社のアプリケーションや環境に適したものを選択することが重要です。
ここでは、代表的なツール11選をご紹介します。
Jenkins
代表的なCI/CDツールです。MIT Licenseのオープンソースで、日本人である川口耕介さんにより開発されました。Apache TomcatなどのServlet上で動作します。
コミュニティが活発でプラグインが豊富にあるため、カスタマイズしやすい点が大きな特徴です。
参考サイト
Jenkins公式サイト
Jenkins日本語ドキュメント
Travis CI
MIT Licenseのオープンソースです。主にビルドや単体テストを実行するSaaS型のCIツールです。
チュートリアルが豊富にあり、セットアップも簡単なため、初学者に比較的優しいツールです。
参考サイト
Travis CI公式サイト
CircleCI
米IT企業のCircleCI社によって開発されているCI/CDツールです。
SaaSとしてサービスを提供されている点が特徴(オンプレミスやクラウドのサーバーにインストールして利用も可能)であり、採用企業も多く、情報も豊富です。
参考サイト
CircleCI公式サイト
Bitrise
モバイルアプリ(iOS, Android, Swift, React Native, Flutter)に特化した、CI/CDツールです。
GUIでタスクの設定、証明書の管理が容易など、使い勝手の良いサービスです。
参考サイト
Bitrise公式サイト
GitHub Actions
GitHub上での各種イベントをトリガーに実行できるので、GitHub内からのワークフローに適しています。
GitLab CI/CD
オープンソースですので、GitHubと異なりオンプレ環境での利用可能です。
BitBucket Pipelines
豪IT企業のアトラシアン社が開発する、バージョン管理ツールBitBucketのCI/CDツールです。
同社製品のJIRA(プロジェクト管理ツール)との連携が可能です。
参考サイト
BitBucket Pipelines紹介ページ
Heroku CI
PaaS(アプリケーションの実行するための環境を提供するサービス)のHeroku社が提供するCIツールです。
参考サイト
Heroku CI紹介ページ
その他、以下は、主要なIaaS(クラウド環境で様々なコンピューティングリソースを提供するサービス)である、Amazon社(AWS)、Google社(GCP)、Microsoft社(Azure)が提供するCI/CDツールです。
- AWS CodeBuild, CodePipeline
- GCP Cloud Build, Google Cloud Deploy
- Azure Pipelines
おわりに
今回の記事では、CI/CDについてご紹介しました。
近年、特にWeb領域では、アジャイル開発プロセスと組み合わせて、企画からリリースまで短期間且つリリース頻度の高いアプリケーションを開発する現場が多いことから、CI/CDの重要性は今後も継続するでしょう。
エンジニアでない方々にとっては、CI/CDは馴染みのないワードであり、技術的側面が大きいためイメージしづらい部分があるかと思いますが、ソフトウェアの品質を高く且つリリースをより素早く安定して行うための自動化の仕組みと考えていただければ良いかと思います。
お問い合わせContact
ご不明点やご相談などがありましたら、お気軽にお問い合わせください。