いまさら聞けない「CI/CD」の意義――GitHubとGitHub ActionsでCI/CDを試してみよう:GMOペパボに学ぶ「CI/CD」活用術(1)(1/2 ページ)
GMOペパボにおけるCI/CD活用事例を紹介する本連載。第1回は組織でCI/CDを導入する目的と意義を整理し、GitHub/GitHub Actionsを利用してCI/CDを実践する方法を紹介します。
ITがビジネスの中心となる中で「CI/CD」(継続的インテグレーション/継続的デリバリー)というキーワードは広く浸透してきています。しかし、CI/CDを導入、活用しているかは企業や現場で差があるのではないでしょうか。
CI/CDを実践した際のパフォーマンスは、組織全体のパフォーマンスにも相関があることが知られています。本連載では、筆者らが所属するGMOペパボでどのようにCI/CDを取り入れて開発プロセスの効率化や組織全体のパフォーマンス向上を実現しているのかを3回にわたって紹介していきます。
第1回ではあらためてCI/CDの目的や意義を整理するとともに、簡単なアプリケーションを題材に、GitHub、GitHub Actionsを利用してCI/CDを実践します。
いまさら聞けない「CI/CD」とは
CI:Continuous Integration(継続的インテグレーション)
CI/CDの「CI」は「Continuous Integration(継続的インテグレーション)」を指します。インテグレーション(Integration)は「統合」と訳すことができますが、例えばソフトウェア開発なら、ソフトウェアのコードの統合を指します。
コードの統合は「メインブランチにコードをマージする」を意味しますが、コードをマージしてもソフトウェアが「ビルドできること」「意図した通りに動くこと」を検証する必要もあります。多くの現場では複数の開発者が同時並行で開発をしているため、複数のブランチのコードを最終的には統合する必要があります。
CIは上記のような開発環境におけるコードの統合を継続的に実現するための手法です。
CD:Continuous Delivery(継続的デリバリー)
CI/CDの「CD」は「Continuous Delivery(継続的デリバリー)」や「Continuous Deployment(継続的デプロイメント)」を指します。
デリバリーやデプロイメントは同じ意味として説明されたり、関連はあっても別の意味で使われたりしますが、本連載では「継続的デリバリー」で統一します。
デリバリー(Delivery)は「配送」や「引き渡す」と訳すことができますが、これは「(そのソフトウェアのユーザーにソフトウェアの)価値を届ける」と言い換えれば分かりやすいでしょう。
「価値を届ける」とは、ソフトウェア開発なら「メインブランチにコードがマージされ自動テストもパスし、いつでもリリース可能(利用可能)な状態にする」や「本番にデプロイし、ユーザーが新しい機能を使えるようにする」などを指します。
CDは上記のような「価値を届ける」ことを継続的に実現するための手法です。CIとCDは、手法としても重なることもあり、CIからCDへと連続したプロセスとして組み立てられます。そのためCI/CDとまとめられて語られることがほとんどです。
なぜCI/CDが重要なのか
CIとCDのどちらもそれぞれが担うプロセスを自動化や仕組みなどで継続的に実現する手法です。ではなぜ「コードの統合やデリバリーを継続的に実現すること」を効率化することが重要なのでしょうか?
それには、まずソフトウェアを中心とした現在のビジネス状況を整理する必要があります。まず、大体のビジネスにおいては以下のようなことが求められます。
- 市場における競争力を維持し続ける
- 市場の変化に追従し続ける
- そもそもニーズが明らかではない市場を探す
ソフトウェアを中心としたビジネスにおいては、ソフトウェア開発が上記のような要求を満たす手段となります。ソフトウェア開発で上記のような要求を満たすためには、一度の開発で終わることはなく、何度も「開発、統合、デリバリー」を繰り返して市場からのフィードバックを受け取りソフトウェアを改善し続ける必要があります。
「開発、統合、デリバリー」のサイクルを高頻度で回すことができれば、その分だけ市場からのフィードバックを基にソフトウェアを改善できます。結果としてビジネスにおける要求を実現できる可能性が高くなります。
この「開発、統合、デリバリー」のサイクルを高頻度に継続的に回すための仕組みとなるのがCI/CDです。このような理由からCI/CDは重要とされているのです。
書籍『LeanとDevOpsの科学[Accelerate] テクノロジーの戦略的活用が組織変革を加速する』によれば、継続的デリバリーの実践はソフトウェアデリバリーのパフォーマンス(「リードタイム」「デプロイの頻度」「平均修復時間」「変更失敗率」)向上を促し、さらには組織文化を含む組織全体のパフォーマンスと相関があることが示されています。
CI/CDを実践するための具体的なステップ
本項では、CI/CDを実践するためにどのように進めていけば良いかを紹介します。まず、ソフトウェア開発においては、CDを実践するためにCIが実践できていないといけません。これは開発プロセスの流れが「開発、統合、デリバリー」の順になっているためです。つまり、コードの統合が継続的に実践(CI)できていないと、そのコードの継続的なデリバリーやデプロイ(CD)は難しいといえます。
CIを実践するためには以下の3つがあれば可能です。
- コードを統合するための共有リポジトリ環境
- コードが正しく動くかを検証する実行可能なテストコード
- テストコードを自動実行できる環境(CI環境)
CDを実践するためには上記に加えて以下の2つがあれば可能です。
- コードのリリースやデプロイをする実行可能なコード
- リリースやデプロイをするコードを自動実行できる環境(CD環境)
上記のCI/CDの実践に必要なものを見ると、環境とは別にテストコードやリリースやデプロイをするコードが必要だと分かります。これらは、それぞれのソフトウェアに合わせて用意するしかありません。CI/CD環境はさまざまなものが登場し、ますます便利になっていますが、意外にもCI/CDの導入以前の部分が一番の関門といえるかもしれません。
筆者としては、CI/CDを以下のように進めることを推奨します。
- 共有リポジトリ環境の整備
- CI環境の整備
- 共有リポジトリにコードが登録されたら、自動でテストコードが実行されるようにする
- ソフトウェアのコードとテストコードを書く
- リリースやデプロイのコードを書く
- CD環境の整備
上記の順番を見て疑問に思う人もいるかもしれません。「テストコードを書く」より前に「CI環境の整備」があるためです。これは意外かもしれませんが、テストコードを実行するテスティングツールやテスティングフレームワークの多くはテストコードがゼロのときから実行できるのです。テストコードを書く前にCI環境を整備することで、最初に書くテストコードからCI環境の恩恵にあずかることができます。
Copyright © ITmedia, Inc. All Rights Reserved.