はじめに
本連載では、CI/CDを始めて学ぶ方にも、すでに知っている方にも、できるだけ新しいことを発見してもらえるように心かげました。
連載の1回目は主にCI/CDの概要と導入のメリットから始めて、CI/CDで加速する最新のアジャイル開発手法を解説します。前半は入門者向けの内容ですが、後半は一歩踏み込んだソフトウェア開発でのCI/CDの役割についてです。
連載の2回目はCI/CDサービスの代表の一つである「CircleCI」を使って実際にCI/CDの設定方法や具体的な機能について解説します。プロジェクトの登録などの導入から始めて、実際の開発現場で役立つ機能やプラクティスを紹介します。
CI/CDを最大限に活用できたとき、あなたのチームは今より数段上のソフトウェア開発が行えるようになります。この連載でそのお手伝いができれば幸いです。
対象読者
- CI/CDについて学びたい方
- プロダクトの品質を向上させたい方
- 最新のアジャイル開発を学びたい方
- CircleCIについて知りたい方
必要な環境/知識
- GitHubのアカウント
- ソフトウェアのテストについての一般的知識
- アジャイル開発についての一般知識
筆者について
元CircleCIの開発者で、現在はCircleCI初の海外支社であるCircleCI Japanでさまざまな活動を行っています。
CI/CDとは
CI/CDとは「Continuous Integration/Continuous Delivery」の略で、日本語では継続的インティグレーション/継続的デリバリーといいます。CI/CDは1つの技術を指すものでなく、ソフトウェアの変更を常にテストして自動で本番環境にリリース可能な状態にしておく、ソフトウェア開発の手法を意味します。CI/CDを取り入れると、バグを素早く発見したり、変更を自動でリリースしたりできるようになります。
CI/CDには大きく分けてオンプレミス型とクラウド型があり、オンプレミス型としてはJenkins、クラウド型としてはTravis CIやCircleCIなどが有名です。オンプレミス型は一般的に拡張性が高い一方、自分たちで構築・運用する管理コストが発生します。クラウド型は拡張性が低いですが、サーバーなどを自前で用意する必要がなく、すぐに使い始めることができるのが大きな魅力です。
オンプレミス型
- Jenkins
- Concourse CI
- Drone (クラウド版もあり)
クラウド型
以下はオンプレミス型とクラウド型のメリットとデメリットの対比です。どちらを選ぶかはチーム次第ですが、よほど大規模な組織でCI/CDを専任で運用できるチームがない限り、筆者はインフラの管理コストがかからないクラウド型をおすすめします。
オンプレミス型 | クラウド型 | |
---|---|---|
メリット |
|
|
デメリット |
|
|
なぜ今CI/CDか?
CI/CDが近年重要視されるようになってきた理由として、2つの大きな流れがあるように思います。1つ目は自動化テストの重要性の高まり、2つ目はアジャイル開発のプラクティスの浸透と進化です。
あらゆる作業がどんどんコンピューターで行われるようになっている今日では、ソフトウェアを使ってない企業や組織はほぼないと言ってよいでしょう。これだけソフトウェアが普及していくと、当然品質に対する要求も高くなり、今まで手動でテストしていた分野でも積極的に自動化テストを取り入れるようになってきます。
顕著な例として挙げられるのが、フロントエンドのコードのテストではないでしょうか? WebページがHTMLと少量のJavaScriptで書かれていた時代は、フロントエンドのテストを書くことは稀でした。しかし、Reactなどの高度で複雑なフレームワークが登場したり、ビジネスロジックをフロントエンドにも持たせることが多くなるにつれて、フロントエンドのテストを書くことは必須となりました。
CI/CDを使うと、コードの変更が発生するたびに自動でテストが行われるので、テストの実行忘れや、環境依存のテストを失くすことでの品質を向上させることができます。
テストの自動化について
ちなみに、テストの自動化と言っても、CI/CDサービスやツールが自動でテストを作成してくれるわけではありません。あくまで、実行するテストは自分たちで書く必要があり、CI/CDは主にそれらを任意のタイミングで自動で実行してくれるだけです。
アジャイル開発の浸透と進化もCI/CDの普及を推し進めています。アジャイル開発とは小さな変更をインクリメンタルに加えていくことで、プロダクトを少しずつ開発していく手法です。この手法が実際の開発現場で有効なことが分かり、今ではより多くのチームがアジャイル開発をするようになりました。
アジャイル開発で重要なことはスピードです。より小さな粒度の変更をいかに早くテスト/リリースしてフィードバックを得るかがアジャイル開発の成功の鍵となりますが、CI/CDを使うことでこれらを実現することができます。
そして、近年アジャイル開発そのものも進化しています。もっとも目覚ましい分野として、より抽象化されたアプリケーションの運用環境の登場があると思います。DockerやKubernetesのコンテナ技術とAWSやGCPなどのクラウド技術が進歩したおかげで、本番環境にコードをデプロイすることは驚くほど簡単になりました。テストをパスした変更を常にリリースして、バグがあればロールバックを行う。こうゆう作業はもちろん手動でもできますが、CI/CDで自動化することでより効率的にできるようになります。
まとめると、CI/CDを使うとテスト自動化することで品質を高めるだけではなく、その後のリリース作業も自動化することで、よりアジャイルな開発ができるようになります。