Introduction
アプリケーションやシステムを開発する際には、開発作業そのものだけではなく、ソースの統合作業やリリース作業なども重要な要素です。機能追加やバグ改修などが頻繁に発生する場合、その都度手作業でソースの統合やテストを行うと、納品期限に間にあわない場合もあります。またリリース作業にミスが発生すれば、アプリケーションが起動しないなどの問題が起きてしまうでしょう。
このような作業ミスや遅れなどを防ぎ、顧客環境にスムーズにリリースするために必要なのが「CI/CD」です。CI/CDとは、ソースの統合や本番環境への適用など、一連の作業を自動化する開発手法です。
この記事では、CI/CDについて、導入するメリットや代表的なツールなどを解説します。
目次
CI/CDとは?
ソフトウェアやアプリケーションなどを開発する際には、開発作業そのものだけでなく、開発環境を適切に管理することも重要です。具体的には、ソースの統合や顧客が利用する本番環境への提供などをスムーズに行う必要があります。CI/CDとは、このような一連の作業の自動化のことです。
ここでは、CI/CDとは何かを詳しく解説します。
一定の品質を保ちつつ、自動ですばやく本番環境に展開できるようにする開発手法
CI/CDとは「Continuous Integration/Continuous Delivery」の略で、それぞれ「継続的インテグレーション」「継続的デリバリー」と訳されます。ソースの統合や本番環境への適用など、一連の作業を自動化する開発手法のことです。
情報処理推進機構(IPA)の『アジャイルプロジェクト実践ガイドブック』によると、以下のように記載されています。
CI/CD
CI/CDとは、「Continuous Integration/Continuous Delivery」の略であり、日本語では継続的インテグレーション/継続的デリバリーと呼ばれている。CI/CDでは、開発したプロダクトを共通リポジトリに登録し、プロダクトを顧客が利用可能な状態へとリリースすることを指す。この一連のプロセスが簡潔になることは、プロダクトが価値を生み出すことに繫がる。
なお、CI/CD を実践するために必要な作業ステップを自動化したものを、「CI/CDパイプライン」と呼びます。
また、CI/CDの導入効果を上げるためには、CI/CDプロセスの中にテストの自動化を組み込むことも重要です。自動テストを組み込むことで開発途中のバグをすぐに見つけることができ、開発作業の効率化が大幅に進むでしょう。ただし、自動テストを作成するためには、ノウハウが必要になることにも注意が必要です。
▼あわせて読みたい▼
>>テスト自動化とは?メリットや導入の流れ・向いているテストを解説のページへ
関連サービスについて
CI(継続的インテグレーション)とは
CIとは、開発時の自動化のプロセスのことです。
複数のエンジニアがバラバラにソースコードをコーディングする場合や、一部のソースに変更が加わった場合などには、コードを統合(インテグレーション)する必要があります。そのあと、統合されたコードをテストして、プログラムに問題がないかを検証します。このとき、統合されたコードのテストを行う作業を自動化するプロセスが、CIです。
ソースコードの変更が定期的に行われる場合は当然ながら、コードの統合、テスト内容の見直しも定期的に行う必要があります。テストの自動化とCIの導入を行って一連の作業が自動化されていれば、プログラムの不具合をいちはやく特定して、修復することが可能です。
CD(継続的デリバリー、継続的デプロイ)とは
CDとは、利用者に対して、継続的に開発したアプリケーションなどを提供することです。具体的には、自動テストを行ったあと、ソースコードを本番環境にいつでもデプロイできる状態にします。
また、継続的デプロイと呼ばれるプロセスもあります。これは、変更後のソースコードの一括反映、自動テスト、本番環境へのリリースまでを自動化するプロセスです。継続的デリバリーとの違いは、本番環境へのリリースまでを自動的に行うかどうかです。
CDにより、本番環境へのリリースまでの作業が自動化されれば、ソースの変更から顧客への提供までをスムーズに行えます。
CI/CDが必要とされている背景
アジャイル開発との関係性
アジャイル開発とは、重要な部分から開発を行って、テストとリリースを繰り返していく開発手法のことです。ユーザーからの要望を柔軟にとり入れながら、サービスをすばやく提供できるというメリットがあります。
開発、統合、テストを繰り返すアジャイル開発を進めるためには、開発したものを統合する作業を自動化するCIのプロセスが欠かせません。毎日の最新の状態でテストをしたいので、統合の作業をCIにより自動化すれば、作業品質が向上し、作業の効率化にもつながります。さらに、CIプロセスにテストの自動化も組み込むことで、バグをすばやく見つけられるというメリット得られます。ただし、テストの自動化を行うためには知識や経験、ノウハウが必要です。
このように、アジャイル開発を効率よく進めるためには、CIの導入とテストの自動化が必要であることがわかります。
アジャイル開発についてはこちらもご覧ください
>>アジャイル開発とは?概要や進め方、ウォーターフォール型開発との違いやスクラムについて解説のページへ
関連サービスについて
DevOpsとの関連性
DevOps(デブオプス)とは、「開発(Development)」と「運用(Operations)」という用語を組み合わせてつくられた言葉です。
従来は、アプリケーションなどを開発する開発部門と、顧客に提供して運用する運用部門は別々に仕事をするのが一般的でした。しかし、開発部門と運用部門の連携がとりにくい、互いの考え方が対立する場合もあるなど、問題が発生することもあります。
そこで、両部門が連携をとりながら柔軟に対応し、迅速に開発からリリースまでを行う「DevOps」という考え方が生まれました。DevOpsを実現する手段として、テスト、リリースなどの一連の作業を自動化するCDは、非常に重要です。
DevOpsについてはこちらもご覧ください。
>>DevOpsとは?アジャイル開発との違い、導入するメリット・デメリットについて解説のページへ
CI/CDを活用するメリット
ここでは、CI/CDを活用することで、どのようなメリットを得られるのかを具体的に解説します。
品質向上につながる
CI/CDを活用しない場合には、ソースの統合やリリース作業などを手作業で行う必要があり、確認ミスや設定ミス、手順漏れなどが発生する可能性が高くなります。CI/CDを活用すれば、ソースの統合からリリースまでが自動化されるため、顧客環境へ提供するまでの作業品質が向上します。
リリースの速度・頻度が向上する
統合作業やリリース作業などを手作業で行うよりも、CI/CDを導入して一連の作業を自動化した方が、リリース速度が大幅に向上します。自動化することで、作業品質を落とさずに、作業の速度をあげられるのも大きなメリットです。
また、作業品質を落とさずリリース速度をあげられるため、ソース修正や機能追加などを頻繁に行うことも可能です。
開発者の負担が軽減される場合もある
統合作業やリリース作業を自動化することで、開発者の負担が大幅に軽減される場合もあります。ただし、自動テストを組み込む場合には負担が増えることもあるため、注意が必要です。
手作業での統合作業や確認作業、リリース作業が不要になるため、開発作業や開発プロセス改善のための検討などに時間を割くことが可能です。本来の開発作業にリソースを割り当てられるようになり、開発者の負担が軽減されるでしょう。
バグの検出・修正がしやすくなる
CI/CDのプロセスに自動化されたテストを組み込むことも可能です。これにより、バグの検出が容易になり、はやい段階でバグ修正に着手できるようになります。開発工程が進んでからバグが見つかると手戻りが大きくなりますが、はやい段階で対処できることにより、開発者への負担が大幅に軽減されます。
CI/CDパイプラインの構築に必要なもの
CI/CDパイプラインを構築するためには、以下のようなツールが必要です。
・コードリポジトリ/成果物リポジトリ
コードや成果物のバージョン管理などを行うために必要です。複数のエンジニアが開発に参加する場合などはとくに、バージョン管理を厳密に行う必要があります。
・CIツール
コードを変更したあとには、ビルド、テストを行います。ビルドとは、ソースコードをコンパイルして必要なライブラリなどを準備し、動作できる環境を組み立てることを指します。
これらの作業を行うツールに、コードを連携させるのがCIツールです。
・構成管理ツール
動作環境などの自動化、管理を行います。
・ビルドツール
ビルド処理を自動化するツールです。
・テストツール
自動化されたテストツールを組み込むことで、機能テストなどを効率よく行います。
代表的なCI/CDツール
代表的なCI/CDツールには、どのようなものがあるのかをご紹介します。
Jenkins
国内の開発者にも利用している人が多い、オープンソースのCIツールです。1,600以上の豊富なプラグインが存在し、導入が容易なのも大きなメリットです。
Azure Pipelines
AzureのCI/CDツールで、「Azure DevOps」というDevOpsを実現するために必要なツールがそろっているサービス群に含まれています。普段からAzureを使用している場合には、導入しやすいでしょう。
AWS CodePipeline
AWSのCI/CDツールです。AWS CodeCommit、Amazon S3、AWS CodeDeployなどのAWSサービスと統合されており、AWSをすでに使っている場合には導入しやすいでしょう。
GitLab CI/CD
オープンソースのCIツールで、CI/CDの機能以外にも、プロジェクト計画、ソースコード管理などの機能も含まれています。そのため、ソースコード管理、課題管理、コードの統合、CI/CDまでの作業サイクル全体を管理することが可能です。
また、マルチプラットフォームに対応、SaaSでもオンプレミス環境でも利用可能などのメリットもあります。
GitHub Actions
GitHubが提供するCIツールで、ビルド、テスト、デプロイなどのワークフローを作成して実行できます。GitHubからワークフローの自動化ができる、主要なOSに対応している、さまざまな言語に対応しているなどのメリットがあります。
CircleCI
世界中に多くの利用者がいるCIツールです。クラウド、オンプレミスのどちらでも利用でき、GitHub、Bitbucketなどとも連携可能です。日本語のドキュメント、チュートリアルもあり、企業向けサポートも受けられるため、日本企業にとって使いやすいツールといえるでしょう。
Bitrise
iOS、Android、Flutter、React Nativeなどによる、モバイルアプリ開発向けのCI/CDツールです。充実したモバイルアプリ開発環境を構築できる、初期設定が比較的容易、ワークフローをGUIで設定可能などのメリットがあります。
まとめ
この記事では、CI/CDについて、導入するメリットや代表的なツールなどについて解説しました。
CI/CDは開発作業において、統合作業や顧客が利用する本番環境への提供などを自動化する開発手法です。CI/CDを導入することで、品質向上やリリース速度の向上、開発者の負担軽減などのメリットが得られるでしょう。しかし、CI/CDを導入するためには、自社の開発環境にあわせたツールの導入や環境構築が必要です。
開発効率や品質の改善にお悩みの場合には、SHIFTにお任せください。お客様の開発ノウハウ不足や、人材不足に関するお悩みを解決いたします。
継続的なプロダクト開発に伴走する、SHIFTのアジャイル開発支援
「作業品質を落とさず開発効率をあげたいが、どうすればよいのか…」「アジャイル開発の手法をとり入れたいが、ノウハウや対応できる人材がいない」「テストからリリースまでの作業を自動化したい」などの悩みを抱えている企業様は多いでしょう。
アジャイル開発を導入して、すばやく開発スパンを繰り返せる体制が整えば、ユーザーからの要望にすばやくこたえられようになります。そのため、従来の開発作業のやり方を変えて、アジャイル開発に移行したいという開発現場も多いかもしれません。
しかし、これまでの開発手法とは異なるアジャイル開発を導入することは非常に困難です。アジャイル開発を進められるノウハウをもつ人材や、開発、テスト、リリースまでの作業を頻繁に行える体制、開発環境を用意する必要があるためです。さらに、アジャイル開発を実現するための手段としてCI/CD環境を構築し、自動テストを作成する必要もあります。
しかし、開発手法を変更してCI/CD環境の構築や自動テストの作成などを行うためには、アジャイル開発や環境構築に関する経験と知識が豊富な人材が必要になるでしょう。
そこで、SHIFTのアジャイル開発支援(SHIFT 1LINE)をご利用いただければ、アジャイル開発導入に関する課題を解決いたします。お客様のアジャイル開発体制の構築やプロジェクト推進のために、短期的な人材確保や長期的な人材育成など、すべての局面で強力に支援します。
監修
永井 敏隆
大手IT会社にて、17年間ソフトウェア製品の開発に従事し、ソフトウェアエンジニアリングを深耕。SE支援部門に移り、システム開発の標準化を担当し、IPAのITスペシャリスト委員として活動。また100を超えるお客様の現場の支援を通して、品質向上活動の様々な側面を経験。その後、人材育成に従事し、4年に渡り開発者を技術とマインドの両面から指導。2019年、ヒンシツ大学の講師としてSHIFTに参画。
担当講座
・コンポーネントテスト講座
・テスト自動化実践講座
・DevOpsテスト入門講座
・テスト戦略講座
・設計品質ワークショップ
など多数
――――――――――
ヒンシツ大学とは、ソフトウェアの品質保証サービスを主力事業とする株式会社SHIFTが展開する教育専門機関です。
SHIFTが事業運営において培ったノウハウを言語化・体系化し、講座として提供しており、品質に対する意識の向上、さらには実践的な方法論の習得など、講座を通して、お客様の品質課題の解決を支援しています。
https://service.shiftinc.jp/softwaretest/hinshitsu-univ/
https://www.hinshitsu-univ.jp/
――――――――――