CI/CDとはなにか

作成日:2022/11/09

お役立ちコラム

CI/CDとはなにか

DevOps やアジャイル開発において重要な技術としてCI/CDがあります。
CIは「継続的インテグレーション」、CDは「継続的デリバリー (またはデプロイ) 」の略です。
それぞれ別のものを指しますが、関連が強いのでCI/CDと一緒にして呼ばれます。
今回はCI/CDについて解説していきます。

CIとは

CI (継続的インテグレーション) は、開発したソースコードをコンパイルして利用可能なソフトウエアを生成する一連の流れを自動化し、効率化する仕組みです。
一連の流れをワークフローと呼んだり、パイプラインと呼んだりします。
単にソースコードのコンパイルだけですと、これまでもビルドと呼ばれる作業として存在しました。
Makefile に従って行うmakeコマンドや、Java のビルドツールである Apache Maven などが存在します。
これらのツールを手動で実行してもソフトウエアを生成できますし、頻繁に更新されないのであればそれで十分です。
では、なぜ自動化したCIが必要なのでしょうか。

ソフトウェアの製造からQA、納品までを自動化

CIの必要性

CIはソースコードをビルドし、ソフトウエアを生成する仕組みです。
この作業を自動化するのは、何度もビルドを繰り返す必要があるからです。
ソースコードを日々修正しますので、その修正に従って自動的にCIを実行するようになっていれば、開発者はソースコードの修正だけに集中できます。

以前紹介したGit を使うことで、何人もの開発者が集まったチームで開発できますし、現在の大規模なシステムではチーム開発を行うのが主流です。
チーム開発であればなおさら、ビルド作業に精通していない開発者がいることが想定されます。
そこでCIの担当メンバーを別途用意して、チームが開発したソースコードをCIできるようにする必要があります。

CIを拡張する

CIは単にソースコードのビルドだけでなく、さまざまな処理を加えて拡張していくことができます。
例えば、テストツールを実行してビルドの対象となるソースコードが規約に適合したか、何か問題を含んでいないかをチェックできます。

CIの処理は条件分岐なども行えます。
例えばテストが通っていない場合にはビルドしないなど、処理の実行許可を求める簡単なワークフローも実現できます。
何ができるかはCIツールに依存します。

また、処理の結果を Slack などのチャットツールに通知したり、Redmine のようなチケット管理ツールと連動もできたりします。
開発プロセスのルーティンを自動化して、より効率良く開発を進められるようにするのもCIの役割といえます。

CIの設定をのぞいてみる

CIの設定は、手動作業であれば手順書を書くようなイメージで作業手順を定義したファイルを作成して行います。
以下は代表的なCIツールである CircleCI のチュートリアルから引用したものです。

---
version: 2.1
jobs:
 build:
  docker:
    - image: alpine:3.15
     auth:
      username: mydockerhub-user
      password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
  steps:
    - run:
     name: The First Step
     command: |
      echo 'Hello World!'
      echo 'This is the delivery pipeline'

この設定のポイントは、以下の3つです。

  • buildという1つのジョブが定義されている (2~3行目)
  • Dockerイメージを使って処理を行う (4行目~8行目)
  • echoコマンドを2回実行する (12行目~14行目)

実際のワークフローは複数のジョブで構成することがほとんどです。
この様な定義を複数書き連ねて構成します。
CIツールは実行用のコンテナを動かして、そこで各種コマンドを自動的に実行していくケースがほとんどです。
ここではDockerコンテナを使うように定義します。
echoコマンドはサンプル的に定義されているだけですので、実際にはテストツールやビルドツールの実行を定義します。

CDとは

CIを実行することで実行可能なソフトウエアが生成されますが、そのソフトウエアを実行可能な状態にする作業の自動化がCDです。
CDはリリースの処理まで自動化するイメージです。
CDの処理で主に想定されているのが、Webアプリケーションを実行できるようにするデプロイです。
WebアプリケーションであればOSやミドルウエアと組み合わせて、Webブラウザーなどからアクセスすれば動く状態です。

CIとCDの連携

CDは多くの場合、CIを実行した後に続けて行われます。
CIツールが異なるCDツールを呼び出すか、CIツール自体がCDの機能を持っています。
ツールがデプロイ先となるクラウドなどのAPIを呼び出してデプロイします。
このようにして、ソースコードからビルド、そしてデプロイまですべてを自動化できる開発環境がすでに整っていますので、徐々にCI/CDを行うことが開発者にとって当たり前になりつつあります。

コンテナによるデリバリー

Webアプリケーションにはさまざまなデプロイ形態がありますが、最近増えているのがコンテナによるアプリケーションの実行です。
コンテナのイメージにはあらかじめさまざまなファイルを含めておくことができます。
OSのファイルだけでなく、アプリケーション実行のためのミドルウエアや、アプリケーションそのものも最初から含めておくことができます。
コンテナイメージをどこまで作り込むかはアプリケーションの作りや運用の仕方に左右されますので、状況に応じた環境構築が求められます。

まとめ

CI/CDはソースコードの記述から、実際に利用可能までの開発プロセス全体を自動化する取り組みです。
使用した言語やミドルウエア、実行環境、開発をしたアプリケーションの運用方法まで含めて、どのようなCI/CDを実現するのか変わってきます。
まずは Git などのソースコードからビルドの自動化あたりから、じっくりと取り組むことをお勧めします。

執筆者

宮原 徹(みやはら とおる)
1972年、神奈川県生まれ。
中央大学 法学部 法律学科卒。日本オラクルでLinux版Oracleのマーケティングに従事後、2001年に株式会社びぎねっとを設立し、Linuxをはじめとするオープンソースの普及活動を積極的に行い、IPA「2008年度 OSS貢献者賞」を受賞。
2006年に日本仮想化技術株式会社を設立し、仮想化技術に関する情報発信とコンサルティングを行っている。
現在は主にエンタープライズ分野における DevOps について調査・研究を行っており、成果はブログや勉強会などでも発信している。

お問い合わせ

お気軽にお問い合わせください

ページの先頭に戻る