技術基礎固め - 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サービスは星の数ほどあるように感じられ、どれかを選択するのは大変だなと思いました。
結局、用途(個人なのか企業なのか)やかけられるコスト(一般社会人なのか大金持ちなのか)にはよるが、よく使用されているものを選ぶことが多そうだなとも思います。
改めて調べると、良い面が見つかって楽しかったです。
参考にした情報
Discussion