Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

CI/CDのエキスパートが解説:CI/CDとは何か? なぜ今、必要とされるのか?

エンジニアのためのCI/CD再入門 第1回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2018/09/26 14:00

 最近、CI/CDという単語を見ることが増えてきました。Google、Microsoft、Oracleなどの大きなIT企業が自社のCI/CDツールを発表したり、CI/CDのスタートアップの買収などの話が過去一年にいくつもありました。読者のみなさまも導入はしていなくても、CI/CDについてなんとなく知っている方も多いのではないでしょうか? 実際CI/CDに対する需要は急速に高まっています。その裏には自動化の重要性の高まりやアジャイル開発の浸透・進化があります。2回の連載でこの流れについて見ていきましょう。

目次

はじめに

 本連載では、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とは「Continous Integration/Contiious Delivery」の略で、日本語では継続的インティグレーション/継続的デリバリーといいます。CI/CDは1つの技術を指すものでなく、ソフトウェアの変更を常にテストして自動で本番環境にリリース可能な状態にしておく、ソフトウェア開発の手法を意味します。CI/CDを取り入れると、バグを素早く発見したり、変更を自動でリリースしたりできるようになります。

 CI/CDには大きく分けてオンプレミス型とクラウド型があり、オンプレミス型としてはJenkins、クラウド型としてはTravis CIやCircleCIなどが有名です。オンプレミス型は一般的に拡張性が高い一方、自分たちで構築・運用する管理コストが発生します。クラウド型は拡張性が低いですが、サーバーなどを自前で用意する必要がなく、すぐに使い始めることができるのが大きな魅力です。

オンプレミス型
クラウド型

 以下はオンプレミス型とクラウド型のメリットとデメリットの対比です。どちらを選ぶかはチーム次第ですが、よほど大規模な組織でCI/CDを専任で運用できるチームがない限り、筆者はインフラの管理コストがかからないクラウド型をおすすめします。

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を使うとテスト自動化することで品質を高めるだけではなく、その後のリリース作業も自動化することで、よりアジャイルな開発ができるようになります。

basic_flow

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 金 洋国(CircleCI Japan)(キム ヒロクニ)

    CircleCIで2.0などのプロダクト開発に携わった後、CircleCI Japanを立ち上げてからはTech Leadとして技術全般を担当。趣味は電動キックボードで日本で普及するように様々な活動をしています。

バックナンバー

連載:エンジニアのためのCI/CD再入門
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5