CI/CDパイプラインとは?
CI/CDパイプラインは、2つの要素で構成される。
- CI(継続的インテグレーション)
- CD(継続的デリバリー)
それぞれ詳しく説明すると、以下のような感じ。
CI(継続的インテグレーション)
継続的インテグレーションは、コードを変更した際のビルド⇨テストの流れを自動化する仕組みのこと。
また、CIを導入していれば、コードを短期間中に複数回マージすることで、エラーを引き起こすコードの判別がしやすくなる。
CD(継続的デリバリー)
継続的デリバリーは、継続的インテグレーションを拡張したもので、コードを変更した際に、自動で本番環境へリリースを行えるように準備する仕組み。
同じ略称「CD:継続的デプロイ」は、ビルドやテスト後のプログラムを自動で本番環境へ導入させること。
CI/CDパイプラインの流れ
Ci/CDパイプラインは、以下のような流れを自動化したもの。
- 解析
- ビルド
- テスト
- デプロイ
簡単に言えば、コードを変更してGitHubなどへpushしたら、自動でビルドやテストをし、デプロイまで済ませる仕組み。
なぜCI/CDパイプラインが必要なのか?
CI/CDパイプラインの必要性を理解するには、以下の要素について知る必要がある。
- アジャイル
- DevOps
それぞれの詳細を以下にまとめた。
アジャイルとは?
アジャイルは、システムを小さく区切って、細かく開発とテストを繰り返していく考え方。
一度開発の方針を決めたら後戻りすることがない、「ウォーターフォール型」の開発の欠点を補うため生まれたのがアジャイル。
「プロジェクトを進めていく中で、方向性が変わったりするのは仕方ないから、それに柔軟に対応できるようにしようねってのがアジャイルの考え方」
DevOpsとは?
開発と運用が協力しあい、柔軟かつ迅速にプロジェクトを成長させるという考え方で、以下のような取り組みを行う。
- 作業の自動化
- リスクの軽減
- 開発と運用の連携
- その他(モニタリング、ログングなど)
上記の「作業の自動化」と「リスクの軽減」を行うのに、CI/CDパイプラインが必要となる。
作業の自動化
例えば、コードを変更してリリースする場合、自動化を行うことで人為的ミスや作業時間の短縮を行える。
リスクの軽減
細かい変更でも頻回にコードをテスト&リリースすることで、エラーの修正やロールバックがしやすくなる。
1回の変更量が少ないので、どこが悪かったのか原因を見つけやすくなる。
CI/CDパイプライン用のツール
CI/CDパイプラインを構築する際の選択肢。
- CircleCI
- CodeBuild
- Jenkins
- Travis CI
- GitHub Actions
- その他
それぞれの特徴を以下にまとめる。
CircleCI
SaaS型サービスのデファクトスタンダード。
よく使用されていることもあり、情報量がおおく学習コストも低めである。
CodeBuild
AWSのCIサービス。
単体ではCIサービスのみだが、CodePipelineなどを併用すれば、CI/CDパイプラインを構築できる。
AWSを使用するなら、連携しやすいので選択肢に入る。
Jenkins
オンプレミス型のデファクトスタンダード。
オンプレミス型であり、自分で構築や管理を行なっていく必要があるので、運用コストが高くなる。
ただし、セキュリティ管理やマシンの性能などの選択肢の幅が広く、自由度は高い。
Travis CI
オープンソースプロジェクトで無料で利用できる、SaaS型のCIサービス。
オープンソースとは、ソースが公開されたプロジェクトのことで、AndroidやWordPressなどが存在する。
自分の場合は、オープンソースプロジェクトを扱わないので、選択肢から外れる。
GitHub Actions
GitHubのCI/CDサービス。
Qiitaで検索してみると意外と記事数がおおく、情報を得やすい。
最終的に自分が選択したツール
自分は、以下のポイントを重要視しCircleCIを選択した。
- シェア率が高い。
- 学習コストが低め。
就職した際に、職場で使われていそうなツールを選びたいので、シェア率は重要視した。
残念ながら、CIツールの実際のシェア率は分からなかったのだが、JenkinsやCircleCIはかなり使われているらしい。
しかし、Jenkinsは自分でデプロイサーバーを立てたり、運用管理する必要があるので候補から外した。
GitHub Actionsも情報量が多く、かなり使われてそうな感じがしたが、今回は歴史の深いCircleCIの方を選択。