CI/CDパイプラインの基本

CI/CD パイプラインとは、ソフトウェア開発を自動化するうえでの一番の土台です。”パイプライン” という用語は、コンピューターサイエンスの分野ではさまざまな意味で使われます。しかし、CircleCI や DevOps 業界でこの言葉が使われる場合、継続的インテグレーション (CI) にかかわる多様な動作とプロセスを意味することがほとんどです。

CI は、デプロイするコードの品質を確保しながら、開発スピードを向上させるソフトウェア開発戦略です。CI ツールを使った開発では、コードを継続的に少しずつ (ときには 1 日数回) コミットし、ビルドとテストを自動的に実行してから共有リポジトリにマージします。モダンなソフトウェアデリバリーパイプラインなら、ビジネスニーズに応じたアプリケーションのビルドからテスト、デプロイまでのすべてを行えます。

クリックすると、CI/CD の基本解説動画が再生されます。

CI/CD パイプラインとは?

CI/CD パイプラインは、プロジェクトで作業をトリガーする際に実行する一連のプロセスの集まりです。パイプラインはジョブを管理するワークフローで構成され、これらすべてをプロジェクトの設定ファイルで定義します。


CircleCIは、世界3万以上もの企業が使用するCI/CDツールです。CircleCIを利用すればCI/CD環境の維持管理負担の削減や自動テストの開発体験の向上、SSHでのデバッグ、デグレチェックや実行苦の排除などといったメリットが多く存在します。また、オンプレとクラウド両方に合わせたプランや無料でビルドが実現するプランも豊富に提供しています。今すぐあなたも CircleCI で開発向上を実現してみませんか?

今すぐ無料で開発を向上


継続的インテグレーション (CI) と継続的デプロイメント (CD) の違い

継続的インテグレーションは、ソフトウェアのビルドとテストを自動化する手法です。継続的デプロイメントはこの自動化の延長線上にあり、コードがコミットの度にテストスイートに合格しなければ、ソフトウェアがデプロイされません。特に大きな成果を収めている開発チームでは、高い頻度でソフトウェアをデプロイしています。詳しくは、「継続的インテグレーション (CI) と継続的デプロイメント (CD)」をご覧ください。

CI/CD パイプラインのコンポーネント

前述のとおり、継続的インテグレーションは、ソフトウェアのビルドとテストを自動化する手法です。継続的デプロイメントはこの自動化の延長線上にあり、コードのコミットが毎回テストスイートに合格しなければ、ソフトウェアはデプロイされません。

特に大きな成果を収めている開発チームでは、高い頻度でソフトウェアをデプロイしています。CI/CD のベストプラクティスに従ってコードのビルド、テスト、デプロイを行えば、自然と高品質なソフトウェアを効率よく提供できるのです。

ビルドステージ

ビルドステージでは、複数の開発チームが、共有リポジトリにあるコードに対してそれぞれのマシンで作業を行います。このプロセスは一見簡単そうですが、実は複雑になりがちです。バージョン管理をはじめ、開発環境と本番環境のちょっとした違い、ツール、コードの品質などで問題が発生するからです。パイプラインにビルドプロセスを組み込む利点は、開発者のコントリビューションを自動化できること、そしてソフトウェアの品質と環境の標準化ツールを整備できることです。

テストステージ

ビルドステージが終わったらすぐデプロイステージ、という開発チームは非常に多いものです。しかし、それではいけません。CI/CD の恩恵を一番受けられるのは、テストステージであるからです。テストは複雑で反復的なプロセスですが、CI/CD パイプラインを使えば自動化できます。

テストにはいくつかの種類がありますが、いずれも自動化した継続的インテグレーション パイプラインに組み込めます。たとえば、統合テストに単体テストを組み合わせて、テストカバレッジをできる限り広げると良いでしょう。また、テストでソフトウェアのパフォーマンスに関する重要なデータを突き止め、すぐさまコードに統合することもできます。テストを行えば、バグの数をどんどん減らして高品質なソフトウェアを実現できるのです。

デプロイステージ

デプロイステージでは、本番環境や他の環境へのソフトウェアのリリースを自動化します。パイプラインの設定を通じて、コードのデプロイのスケジュール実行、全ユーザーや一部ユーザーを対象としたロールアウト、さらには問題発生時の自動ロールバックも行えます。このステージでは、ユーザーにソフトウェアアップデートを提供するための最適な戦略を決めましょう。戦略はすべて、CI/CD パイプラインの一部として自動化できます。

CI パイプラインを設定する

設定ファイルこそ、継続的インテグレーションの DNA です。CI パイプラインは、設定ファイルにおける最上位のオーケストレーションです。

CI ワークフロー

ワークフローでは、ジョブの実行とトラブルシューティングを分離することで、失敗したジョブをリアルタイムに確認できます。1 つのワークフローでジョブが失敗した場合、そのジョブだけを単独で再実行可能です。ワークフロー全体をやり直す必要はありません。

CircleCI UI でのワークフローの図

CI ジョブ

ジョブは、一塊として実行するステップをまとめたものです。これに対し、ワークフローは、ジョブのセットと実行順序を定義する一連のルールです。

CircleCI UI でのジョブの図

設定ステップ

ジョブ内のステップでは、キー値ペアの形式でリストを設定します。キーにはステップの種類を指定し、値には設定マップか文字列を指定します。ステップの実行時に実行するコマンドは、文字列値として指定できます。

CircleCI UI でのステップの図

CircleCI の CI/CD 機能

CircleCI のパイプラインでコードをビルドする際に使える機能としては、リソースクラス、テストの並列分割、CircleCI Orb、マトリックスジョブ、環境変数/コンテキスト、承認機能などがあります。

  • リソースクラス: CircleCI にはリソースクラスが多数用意されており、ジョブごとに CPU リソースと RAM リソースを最適化できます。

  • テストの並列分割: 独立した複数のコンテナでテストを分割し並列実行することで、時間を節約できます。

  • CircleCI Orb: CircleCI Orb は、何度も利用する構成内容を 1 行のコードにまとめた、YAML 構成の再利用可能パッケージです。

  • マトリックスジョブ: マトリックスジョブでは、パラメーター化したジョブを、引数を変えながら複数回実行できます。

  • パラメーター: パラメーターとしてパイプライン変数環境変数コンテキスト が用意されています。これらを使うことで、データの保存と再利用やシークレットの保護を実現できます。

  • 承認: ワークフロー内の特定のジョブが手動で承認されるまで、その実行を中断するよう設定できます。リポジトリへのプッシュアクセス権を持つユーザーであればだれでも、ジョブを承認してワークフローを続行できます。

継続的インテグレーションが初めての場合、パイプラインの仕組みと機能を理解すると、CI の真価をつかみやすくなるでしょう。詳しくは、CircleCI の各種資料をご覧ください。また、CircleCI を試してみたいという方は、CircleCI ドキュメントを参考にしてください。

CI/CDおすすめガイド