アプリケーション開発の場面において、コーディングからビルド、テストからリリースを経て本番環境へとデプロイするまでの流れは一般的に行われています。一連のプロセスを自動化しつつコードの品質を保つCI/CDについて、メリットや各種ツールを交えて紹介します。
CI/CDとは何かわかりやすく解説
CI/CDとはCIとCDという2つの単語を組み合わせたものです。CIはContinuous Integration(継続的インテグレーション)、CDはContinuous Delivery(継続的デリバリー)の略です。CI/CDについて知る前に、まずCIとCDの意味をそれぞれ見ていきましょう。
CI:Continuous Integration(継続的インテグレーション)とは
CI(継続的インテグレーション)とは、開発者がコードを書いた(または修正した)後、自動でビルドからテストまでを行うプロセスのことを指します。一連の作業が自動化されることにより、開発者の手間を削減することができます。更にテストを行って失敗した場合は通知してくれるので、コードの品質を保つことができます。
CD:Continuous Delivery(継続的デリバリー)とは
CD(継続的デリバリー)とは、ビルドからテストのプロセスに続く、実稼働環境にリリースできる状態まで自動的に持っていくプロセスのことを指します。このプロセスの後、開発者が即座に成果物をデプロイすることができます。そのため、リリースまでのスピードが向上し、頻繁にサービスを更新できるようになります。
CIとCDの違いとは?なぜセットなのか
以上のように、CIとCDでは対応する範囲が異なります。CIはビルドとテストまでの開発側のプロセスを、CDはその先のリリースの範囲をカバーしています。そのため、CIとCDを組み合わせたCI/CDを用いると、ビルドからテスト、リリースに至るまでを自動化することができます。つまり開発者がコードを修正したバージョンをCI/CDパイプラインに投げることで、自動でテストされた高品質のコードを本番環境へデプロイ状態にまで持っていくことが可能になるのです。
その他の「CD」、Continuous Deployment(継続的デプロイ)とは
上述のCD(継続的デリバリー)に加え、同じく「CD」と表わされる継続的デプロイ(Continuous Deployment)というものがあります。継続的デプロイは継続的デリバリーで必要だった承認のプロセスを省いたものです。継続的デリバリーではテストされた成果物を人間が承認するステップがあります。承認はボタンをワンクリックするだけではありますが、人間が介在するので完全な自動化とは言えません。一方で継続的デプロイは承認のプロセスを省き、テストさえ合格していればそのまま本番環境へデプロイされる、というものです。本番環境へのリリースの速さは格段に上がりますが、一方で承認を省くのでリリースする成果物にバグが無いかは十分注意する必要があります。
CI/CDを導入するメリット
ここからは、CI/CDを導入するメリットを、「開発工数の削減」「修正対応の効率化」「品質の向上」の3点に整理して紹介します。
開発工数の削減になる
CI/CDを導入する最大のメリットとして、プロセスの自動化によって工数が削減されることが挙げられます。開発者が手動で行っていた作業を自動化することにより、開発者としてもデプロイまでのプロセスを考える必要がなく、ストレスフリーにデプロイができます。例えばテストが自動化されることでエラーのチェック工数が削減でき、ビルドが自動化されることで必要なパッケージを用意する工数が削減できます。
修正対応などの効率化
次に考えられるメリットは、修正対応のプロセスの効率化があります。本番環境で何らかのバグを発見した場合でも、コードを修正して本番環境へリリースするまでの期間を短縮化できます。バグを修正したコードにミスがあった場合でも自動テストでエラーが検出されるため、即座に修正対応を行うことができます。
コードの品質の向上
CI/CDの導入によってテストが自動化されることで、開発者はテストを手動で行う手間を省くことができ、反復的にテストが行えるようになります。そのため日々コードの品質を保ちながら開発ができるため、結果的にコードの品質がさらに向上します。自動テストでバグを発見することもあるので、バグの早期発見にもつながり、対応に余裕が生まれます。
CI/CDパイプラインに必要なツール
CI/CDの導入には専用のツールを使う方法が一般的です。ここからはCI/CDを導入するための各種ツールを紹介していきます。
コードリポジトリ/成果物リポジトリ
まずはコードを管理するツールです。有名なところではGitHubが挙げられます。GitHubにはCI/CDを構築するためのGitHub Actionsがあり、有名なCI/CDツールであるCircleCIと連携がとりやすいなどのメリットがあります。他にはクラウドサービスとして有名なAzureのGitリポジトリサービスであるAzure Reposがあります。Azure環境のみで開発を行う場合や、他のAzureサービスと組み合わせて使う場合は、Azure Reposがおすすめです。
CIツール
CIツールにもいくつかサービスはあります。有名なのはJenkinsやCircleCIが挙げられます。例えばCircleCIはSaaSなので開発や運用にかかるコストを下げることができます。一方、JenkinsはWeb-UIを使って細かい設定を行った上でCI/CDを実装することができます。
構成管理ツール
構成管理ツールとは、サーバーの設定や管理を自動で行ってくれるツールのことです。有名なものとしてAnsibleやChefが挙げられます。従来のSIerはWordやExcelにサーバーの設定情報を書いて運用手順書として管理するケースが多かったですが、構成管理ツールを使うことで文書から脱却し、サーバーの設定をコードで管理できるようになります。そのため、誰でも同じ環境を再現できるようになり、属人化の排除や工数の削減が実現できます。
ビルドツール
ビルドツールとは、その名の通りビルドを自動化するためのツールです。例えばAntはJavaプログラムをビルドしてJARファイルを生成するツールです。また、MavenというビルドツールはAntと同様にJavaプログラムをビルドするツールですが、Antよりすっきりしたスクリプトが書けるようになっています。
テストデータ準備ツール
CI/CDを使用することでテストを自動化できますが、テストデータを別途用意する必要があります。ただ、テストデータを手動で用意するのは手間がかかるため、テストデータ準備ツールを使うと便利です。例えばGeneratedata.comでは名前や住所などの種類と、CSVやJSONといった出力データのフォーマットを選択することで、簡単にテストデータが生成できます。
Azure Pipelinesでビルド・デプロイを自動化
Azure Pipelinesは、CI/CDパイプラインを構築するサービスです。Azure Pipelineを使用することにより、コードの修正をリポジトリへコミットして自動でテスト、ビルド、デプロイまで行う環境を構築することができます。これまで説明したツールの機能を全て兼ね備えているサービスといえます。
まとめ
この記事ではCI/CDについて、概要やメリット、各種ツールを紹介してきました。開発を効率化して工数を削減し、品質を向上するために、CI/CDは多くの現場で導入されているプロセスです。導入を検討している方はぜひご検討ください。