用語の定義や専門家の解説だけでは、具体的に思い描くのが難しい用語の一つに「CI/CD」があります。この記事では何が重要で、ソフトウェア開発などになぜ必要か、実務経験の無い方にもわかりやすく説明しています。実際の作業や手法は高度ですが、目指している考え方には価値があり、多くの分野に応用可能なノウハウと考えます。
目次
CI/CD の概要
ソフトウェア開発などの業務をより正確に、より効率良く進めるための手法であり考え方です。2つの用語に共通する「C」はContinuousの頭文字で、「継続的に」何かを進めていくことです。CI/CDでは、作業 → テスト → 公開の流れを「自動化」する意味で使われています。作業量が少ないうちは手作業でできていたことでも、激増すると対応ができないため、この「自動化」は重要になってきました。
インターネット上で利用可能なサービスの分野でも、ソフトウェア開発業務をいかに迅速に(agile -アジャイル)できるかが重要になってきました。激増した一連の業務を滞りなく進め、利用者の要望をかなえ、不具合を更新し続けることができる技法だからです。
CI
CIとは「Continuous Integration」の略で、「継続的インテグレーション」と訳されています。「インテグレーション」には「統合」の意味があります。ソフトウェア開発の場合、「統合」の対象は一連の作業(各種作業やテストなど)です。これでソフトウェアの動作を「継続的」に確認でき、より正確により迅速に開発を進めることが可能になります。
CD
一方CD とは「Continuous Delivery」の略で、「継続的デリバリー」と訳されています。一般的に「デリバリー」とは何かを届けることですが、この場合は「配信」や「公開」の意味で使われています。「配信」するものは、開発テスト中のソフトウェア自体です。
なお「Delivery」と同じ頭文字で「Deployment」という用語も、「Continuous Deployment」(継続的デプロイメント)として使われています。一般的に「デプロイメント」とは「配置」することですが、この場合は何らかのサービスを利用者が使える状態にすることです。
セットで使われるのはなぜ?
作業から継続的インテグレーション(CI)および継続的デリバリー(CD)までを、自動化により効率良く迅速で、継続的に実施できるからです。これで利用者の要望に応え、不具合の改善により早く対応可能になります。
開発手法の進展とCI/CDの果たす役割
CI/CDをより理解するために、開発手法の比較とCI/CDが果たす役割についてこの章で整理しています。
開発手法の比較
従来からある「ウォーターフォール開発」と、現在主流の「アジャイル開発」とを比較してみましょう
ウォーターフォール(waterfall) 開発 | アジャイル(agile) 開発 | |
---|---|---|
言葉の本来の意味 | 水が上から下に落ちていく様子 | 迅速に対応する様子 |
開発の場合の意味 | 作業の工程を上流から下流に、順番に実施する | 優先度の高いものから短い時間で区切り、その流れを繰り返す |
一般的なメリット | ・工程で進捗を把握できる ・目標が明確になり、一貫して作業ができる | ・動作確認や不具合発見ができるまで早い ・柔軟性が高い(変更の要求に対応しやすい) |
一般的なデメリット | ・動作確認できるまで時間がかかる ・変更の要求に対応に時間がかかる | ・スケジュール管理がしにくい ・手法の学習があらたに必要 |
向いている作業の例 | 一般的なWebサイトの制作 | 独自のWebサービスを最初から開発する |
アジャイル開発でCI/CDが果たす役割
一般的に巨大な開発ほど複雑で、構成されているプログラムの数が膨大です。そのため個々のプログラムをインテグレーション(統合)してから、実際に稼働するか確認するのは非効率です。問題が発生した場合に、原因の発見は非常に難しいからです。そこでCI/CDの考え方を導入し、プログラムや機能などで小分けにし、自動化する仕組みを整えます。まさにアジャイル(迅速)な考え方と言えるでしょう。
導入するツールや準備する環境など具体的な事例は、次章で解説していきます。
CI/CDを実施する主な方法とポイント
この章では代表的な方法をいくつかご紹介します。多数公開されているため、機能や日本語の情報量が多いものより検討してみてはいかがでしょうか。
Jenkinsを使ったCI/CD環境づくり
【公式サイト】
https://www.jenkins.io/
CI/CDの代名詞とも言える「Jenkins(ジェンキンス)」を利用すれば、基本的な環境が整います。オープンソースとしてWindows、macOS、CentOSなどのLinuxのほかに、Docker用にもダウンロードが可能です。1,500以上のプラグイン(2021年1月下旬現在)が用意されているため、機能の拡張もできます。
例えば開発プラットフォーム「GitHub」と連携する場合には、Jenkinsのプラグインページより該当のものをインストールすれば、比較的容易に導入可能です。
Dockerの基本については、以下のページにて解説しています。
【入門】Dockerとは?概要やメリット、インストール方法をわかりやすく解説
Dockerは従来の仮想化にかわって、様々な開発環境で使われている技術です。非常に扱いやすく利便性の高い技術であることから、Dockerの利用は今後も広がっていくでしょう。 この記事ではDockerとは何かといった基本からメリット、インストール方法、基本的なコマンドまで解説しています。Dockerをこれから使い始めようと検討している方は、この記事を参考にして下さい。 Dockerとは?をわかりやす…
実施のポイント
開発規模に適した環境づくり
一般的に何かを変更するときには、やり方を習得していなければなりません。習得にはコスト(時間・費用)がかかります。CI/CDの場合では、例えば以下の発生が考えられます。
(1)ウォーターフォール開発よりアジャイル開発に移行するための変更作業
(2)CI/CDの仕組みを、業務に適切に取り入れていく人員の育成
このようにCI/CDを順調に導入し維持していくためには、十分な検討が必要になると考えます。
CI/CDを取り入れた開発について(まとめ)
この記事ではCI/CDの概要、導入の理由や利点など、基本的な考え方をわかりやすく解説しました。組織内でCI/CD エンジニアを中心に、開発業務を滞りなく推進できる体制づくりが理想と考えます。
コンテナ管理をこれから始めたいお客様に最適な、RancherでKubernetesを簡単に管理できるコンテナサービスと、サーバースペック 95パターン+ディスク容量 10パターンから選択できるクラウドサーバーを提供する国産クラウドプラットフォームです。