DX(デジタルトランスフォーメーション)を推進するアプリケーションのアジャイル開発、それを実現する手段として「DevOps」が普及してきました。
※DevOps:開発担当と運用担当が連携・協力して、フレキシブルかつスピーディーにソフトウェアを開発するための手法
そして、そのためのツールとして、CI/CD(継続的インテグレーション/継続的デリバリー)が近年注目を集めています。
本記事ではCI/CDおよびCI/CDを実現するツールの紹介および、それぞれのメリット・デメリットについて解説します。
目次
CI/CDとは
CI(継続的インテグレーション)/CD(継続的デリバリー)とは、アプリケーション開発のステージに自動化を取り入れて、顧客にアプリケーションを提供する頻度を高める手法です。
まずは、CI/CDをそれぞれ詳しく解説します。
CI(継続的インテグレーション)
CIとは、個々に稼働しているエンジニアのソースコードを継続的に統合(インテグレーション)し、それが正常に動作することを確認するために検証する取り組みのことを表します。
この継続的インテグレーションが正しく機能すると、アプリケーションへのコード変更が行われるたびにビルドやテストが自動的に実行され、共通リポジトリに統合されます。例えば、featureブランチからdevelopブランチへ資源がマージされるタイミングでLintやUTを実行し、共通リポジトリをクリーンな状態に保つことができます。
なお、CIを用いない場合は、基本的に手作業で実施する必要があります。
CD(継続的デリバリー)
CDとは、ユーザーに継続的にアプリケーションを提供することを指します。具体的には、検証環境や本番環境にアプリケーションを載せることで、開発者がいつでもアプリケーションの動作確認を行なったり、顧客が新たなアプリケーションを利用できるようにすることです。
CDでは、検証済みコードのリポジトリへのリリースを自動化し、コード変更のマージから本番環境に対応するためのビルドのデリバリーまで、すべての段階でテストとコードリリースを自動化してくれます。これにより、運用チームは本番環境にアプリケーションをすぐにデプロイできるのです。
主なCI/CDツール
このように、開発において非常に有用性の高いCI/CDですが、具体的にはどのようなツールがあるのでしょうか。以下に主要なCI/CDツールを紹介します。
- 主なCI/CDツール
-
- GitHub Actions
- Bitbucket Pipelines
- AWS CodePipeline
- Jenkins
- CircleCI
いずれもビルド、テスト、デプロイなど主な機能は備わっていますが、細かい部分で特徴が異なったり料金体系にも違いがあるため、プロジェクトにあったツールを選ぶようにしましょう。
以下で、それぞれの特徴を説明します。
GitHub Actions
「GitHub Actions」は、GitHubが提供しているCI/CDツールです。GitHub上のイベントをトリガーにして実行することができるため、GitHub内からソフトウェア開発ワークフローを自動化するのに適しています。
「GitHub Actions」の主なメリットとデメリットは以下の通りです。
- GitHub Actionsのメリット
-
- GitHub環境ならすぐに使える(他社のCIサービスと別途契約する必要がない)
- ディレクトリ単位でCIをキックできる
- 「特定のディレクトリ以下が変更された場合のみCIをキックする」などの設定が可能
- GitHub Actionsのデメリット
-
- デプロイの手動承認がない
Bitbucket Pipelines
「Bitbucket Pipelines」は、Bitbucketが提供しているCICDツールです。Bitbucketと連動したサービスのため、Bitbucketユーザーは連携不要ですぐに利用することが可能です。
「Bitbucket Pipelines」の主なメリットとデメリットは以下の通りです。
- Bitbucket Pipelinesのメリット
-
- BitBucket環境ならすぐに使える(他社のCIサービスと別途契約する必要がない)
- Bitbucket Pipelinesのデメリット
-
- AWS CodeDeployとの相性が悪い(S3にコードを上げる必要がある)
AWS CodePipeline
「AWS CodePipelin」は、AWSが提供するCI/CDツールです。「CodeCommit」「CodeBuild」「CodeDeploy」「CodePipeline」の4つのサービスを組み合わせ流ことで、CI/CDを実現しています。
- CodeCommit:AWSのGitホスティングサービス
- CodeBuild:自動テストやビルドを実行してくれるサービス(S3やCodeCommit、Githubなどからソースコードを取得し、ビルドやテストを実行する)
- CodeDeploy:デプロイを実行するサービス(CodeBuildでビルドした資源をEC2やLambda、オンプレミス環境などにデプロイする)
- CodePipeline:CI/CDを管理するサービス(CodeBuildからCodeDeployの連携などを行う)
「AWS CodePipeline」の主なメリットとデメリットは以下の通りです。
- AWS CodePipelineのメリット
-
- 他のAWSサービスとの連携が容易
- AWS上で完結できるためセキュリティが強固になる
- AWS CodePipelineのデメリット
-
- 複数のツールを組み合わせるためコストがかかり、利用が複雑
- CodeCommitがメインのホスティングサービスに向いていない(GithubやBitbucketと比べると機能が弱い)
CircleCI
引用:CircleCI 公式
「CircleCI」は、Saas型のCI/CDツールです。クラウド上のコンテナを実行環境として使用し、Github、Bitbucket、gitLabとの連携が可能です。
「CircleCI」の主なメリットとデメリットは以下の通りです。
- CircleCIのメリット
-
- Github、Bitbucket、gitLabと簡単に連携できる
- 公式のライブラリが多数用意されている
- 利用企業が多いため情報が多い
- CircleCIのデメリット
-
- Saas型のため、他のサービスよりも自由度が低い
- PRをトリガーにすると、Pullでのビルドができない(デフォルトブランチおよびタグのみPullで起動する)
Jenkins
引用:Jenkins 公式
「Jenkins」は、サーバーにインストールして利用するタイプのCI/CDツールです。
「Jenkins」の主なメリットとデメリットは以下の通りです。
- Jenkinsのメリット
-
- かなり細かい設定が可能
- プラグインの種類が豊富
- Jenkinsのデメリット
-
- 自分でホスティングする必要がある
- メンテナンスも自分で行う必要があるため、定期的にメンテナンスをしないと動作しなくなる可能性が高い
各サービスの比較
それでは、こここまで紹介した5つのサービスを料金や性能とあわせて比較してみましょう。
GitHub Actions | Bitbucket Pipelines | AWS CodePipeline | CircleCI | Jenkins | |
---|---|---|---|---|---|
ビルド時間の無料枠 | Free:2000分/月、Pro:3000分/月 | 無料ユーザー:50分/月、スタンダード:2500分/月、プレミアム:3000分/月 | 100分/月(CodeBuild) | 6000分/月 | 無料 |
課金 | 最安(Linux)で0.008ドル/分 | 10ドル/1000分 | 最安インスタンスで0.0034ドル/分 | 最安インスタンスで15ドル/5000分 | 無料 |
導入・運用の難易度 | ○:yamlファイルをリポジトリに容易するだけで導入可能 | ○:yamlファイルをリポジトリに容易するだけで導入可能 | △:最大4つのサービスを組み合わせる必要があり少々複雑 | ◎:SSO認証でGithubやBitbucketとすぐに連携ができる。ライブラリも多数用意されているのでAWSなどとの連携も楽。 | ×:自分でサーバーにインストールし、すべて自分で設定する必要がある |
まとめ
今回は、CI/CDについて解説しました。
基本的には、どのツールを選んでもCI/CDツールとしてやりたいことは実現できるというのが、私の所感です。
ただし、細かい部分でメリット・デメリットがあるため、どのようなCI/CDワークフローを組むかによって、ツールを見極める必要があります。プロジェクトとして利用しているリポジトリホスティングサービスやビルド時間の無料枠を比較して、選んでみるといいでしょう。