📝

技術基礎固め - CI/CD

に公開

この記事について

はじめに、この記事は自身の学習用 + 超初心者がCI/CDの内容を理解するのに役立ったら良いなという目的のものです。

CI/CDの概要

CI/CDとは、Continuous Integration / Continuous Delivery(Deployment) の略で、
日本語では、継続的インティグレーション / 継続的デリバリー(デプロイメント) と呼ばれています。

これは、コード変更の結果をマージするところから、ソフトウェアのリリースまでを自動化してくれる仕組みです。
各工程を順番に実行するため、その自動化された工程のことをCI/CDパイプラインと呼ぶこともあります。

CI/CDって何で必要?

CI/CDパイプラインを構築すると、以下のようなメリットがあります。

  • 実装・修正の取り込み・リリース速度が上がる
  • 手作業によるヒューマンエラーを回避できる
  • エラーが早めに検出できる

手作業を自動化することによる恩恵がメインですが、楽になる以外にも良いことがあるよというのが大事な観点です。

CI/CDって何するの?

CIでやること

主要ブランチ(main・masterなど)に変更が取り込まれる際に、ビルド・テスト・マージまでを実行します。

CIによって、変更が取り込まれる際にビルドエラーを起こさないかどうか、テストがパスするかどうか、他の変更とコンフリクトを起こしていないか等が確認できます。
バグを迅速に解消する、コンフリクトに早期に気づいて対応する等、日々の開発効率を上げてくれる大事な要素です。

CDでやること

主要ブランチのソースコードを取り込んで、ビルド・テストを行った後にテスト環境・ステージング環境・本番環境などにデプロイ、リリースまでを実行します。

工程が多くて手動だとうんざりしそうになる作業も、自動化すれば待っているだけでリリースまで完了させることができます。

また、CDには継続的デリバリーと継続的デプロイメントの2つの意味が含まれていますが、これらは以下のように異なります。(文脈によっては少し違う解釈もある)

  • 継続的デリバリー : デプロイ・リリースを手動で行う(承認制)
  • 継続的デプロイメント : デプロイ・リリースを自動で行う

CI/CDツールってどんなのがある?

GitHub Actions

特徴

GitHubで使用できる、CI/CDサービスです。
Pull Requestに対してビルドやテストが実行でき、マージされたら運用環境にデプロイしたりもできます。
また、CI/CD以外にも便利なワークフローを実行できる魅力もあります。(Issue作ったら自動でラベル付与する等)
ワークフローはYAMLで定義します。

プラン・コスト

プラン 成果物ストレージ 月毎の使用可能枠
Free(個人) 500MB 2000分
Pro(個人) 1GB 3000分
Free(組織) 500MB 2000分
Team 2GB 3000分
Enterprise Cloud 50GB 50000分

月毎の使用可能枠を超えた場合、従量課金制になります。
こちらの使用料金は、どのランナー(各ジョブの実行環境)を使用しているかによって変動します。

ランナー(OS) コア数 1分あたりの料金(米ドル)
Linux 2 $0.008
Windows 2 $0.016
macOS 3もしくは4(M1・Intel) $0.08

より詳細な情報はリファレンスをご覧ください。

GitLab CI/CD

特徴

GitLabで使用できる、CI/CDサービスです。
GitHub Actionsとほとんど同じように使用できます。
SaaSでもオンプレミスでも使用することができ、オンプレミス版の場合はランナーを実行するインフラ代が、主なCI/CDのコストになってきます。

プラン・コスト

プラン 成果物ストレージ 月毎の使用可能枠
Free 10GB 400分
Plemium 10GB 10000分
Ultimate 10GB 50000分

それぞれ、成果物ストレージと月毎の使用可能枠は課金によって上限を増やせます。

項目 料金 上がり幅
成果物ストレージ $5 10GB
月毎の使用可能枠 $10 1000分

Jenkins

特徴

オープンソースCI/CDツールです。
LinuxやMac、Windowsマシン上で動作します。
ジョブというステップを定義し、ジョブを連結させて一つのCI/CDパイプラインを作成します。

プラン・コスト

オープンソースなのでJenkinsの利用自体は無料です。
ただし、Jenkinsを動作させるためのサーバーコストは負担する必要があるので、プロジェクトの規模感を踏まえたコスト判断が必要になります。

CircleCI

特徴

SaaS型のCI/CDサービスです。
オンプレミスでしか利用できないJenkinsに対して、クラウドでCI/CDサービスを提供することに力を入れており、クラウドのCI/CDサービスとしての実力・実績があります。(一応オンプレミスでも使用できます)
クラウド上のコンテナかVMを選択し、実行環境として扱います。
GitHubかBitBucketの利用が前提・必須です。

プラン・コスト

プラン 成果物ストレージ 月毎の使用可能枠
Free 2GB 30000クレジット
Performance 2GB 30000クレジット (使い切り後、25000クレジット毎に$15)
Scale 200GB カスタム

実行環境によって1分あたりに使用するクレジット数が変わるので、実際に何分程度実行できるかは詳細な実行時間あたりのクレジット表を参照すると良いです。

例. (x86)Docler Medium : 2CPU, 4GB RAM の場合は、10クレジット/分なので、無料枠では3000分の実行時間は確保できる

Bitrise

特徴

モバイルアプリに特化したCI/CDサービスです。
iOS・Android・Swift・React Nativeなど、主要なプラットフォームのアプリに対応しています。
モバイルアプリ特化のため、テスト用ビルドパッケージの配布、ストアへのアプリ登録なども可能です。

プラン・コスト

プラン 成果物ストレージ 月毎の使用可能枠
Hobby 小容量(数値記載なし) 300クレジット
Starter 2GB 選択したティアによって変動
Pro 100GB 250〜1000ビルド
Enterprise カスタム 1500ビルド以上

Bitriseの料金体系とどの程度のサービスが提供されるかは、ぶっちゃけ公式サイトからまとめるのは至難の技だと感じました。めちゃくちゃ分かりにくいです。
大事なことは、自分たちが使用する量に見合ったプラン・ティアを選択することです。

Codemagic

特徴

モバイルの中でも、Flutterに特化したCI/CDサービスです。
Flutter特化とはいえ、ネイティブアプリでもビルドはできます。
こちらもBitrise同様、アプリのストア配布などが可能です。

Codemagicは他のCI/CDツールとの比較を自サイト内で行っているようです。
やはりBitriseへのライバル意識が強いのか、比較に気合が入っている様子が伺えます。

プラン・コスト

プラン 成果物ストレージ 月毎の使用可能枠
Free 3GB 500分
Enterprise 10GB 無制限
Pay as you go(従量課金制) 10GB 無制限(macOS M2なら$0.095/分)
Fixed Price(固定価格制) カスタム 無制限

その他

上記以外にも、たくさんのCI/CDプラットフォームがこの世にはあります。
どれを選択するかは、プロジェクトの規模に合うかやどれだけコストをかけられるか、CI/CDにかける熱い情熱などと天秤にかけて決定するのが良いです。

などなど。

感想

CI/CDとは、エンジニアをめんどくさい作業から解放してくれるものだけでなく、その過程で発生する可能性があるヒューマンエラーの解消など、良い面もある役にたつ概念だと感じました。
また、CI/CDサービスは星の数ほどあるように感じられ、どれかを選択するのは大変だなと思いました。
結局、用途(個人なのか企業なのか)やかけられるコスト(一般社会人なのか大金持ちなのか)にはよるが、よく使用されているものを選ぶことが多そうだなとも思います。

改めて調べると、良い面が見つかって楽しかったです。

参考にした情報

https://www.redhat.com/ja/topics/devops/what-is-ci-cd
https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/strategy-cicd-litmus/understanding-cicd.html
https://about.gitlab.com/ja-jp/topics/ci-cd/#ci-cd-explained
https://qiita.com/shinkai_/items/13e76a5641d9ec9a41d2

Discussion