目次
- CI/CDとは
- CI/CDのメリット
- CI/CDのベストプラクティス
- CI/CDの成果を検討する方法
- CI/CDパイプラインとは?
- CI/CDツールの選び方
- 多くの企業がGitLabのCI/CDを選ぶ理由とは?
- 結論
CI/CDは、高品質のアプリケーション・システム開発をよりスピーディに行うだけでなく、エラー削減やコストカットにも効果的です。しかしながら日本ではまだまだ知名度が低く、利用している企業は一握りというのが現状です。
本記事では、CI/CDとは何かについてわかりやすく解説するとともに、CI/CDのメリットやベストプラクティスについて紹介します。
CI/CDとは
CI/CDは、継続的インテグレーション(Continuous Integration)と継続的デリバリー(Continuous Delivery)の略称です。それぞれについて詳しく説明します。
CI(継続的インテグレーション)
CIとは、開発者がコードを修正しそれをリポジトリにプッシュした際に、自動的にビルドやテストを実行するプロセスや仕組みのことです。CIによって継続的にテストを行うことで、コードの品質を高く保つことができます。
CD(継続的デリバリー)
CDは、CIによる統合や一体化をさらに拡張したもので、より高度にかつ自動的にシステムに変更が反映されるように設計された環境や概念を指します。
CI/CDの考え方
CI/CDは、分割されているツールやプラットフォームを統合し、1つの変更が自動的に他ツールに反映されるように環境を組むことであり、アプリケーション開発の効率化を図ることです。ツールやプラットフォームを指すこともあれば、手法や概念として用いられることもあります。
近年は著しい変化を伴う環境の中での開発が求められており、開発中に急に変更が生じることも多々あります。従来のウォーターフォール型の開発手法では急な変化に対応できず、常に変更とテストを繰り返しながら開発を進めていくアジャイル開発が主流となっています。
CI/CDは、ビルド、テスト、デプロイ、インフラストラクチャのプロビジョニングなどを一体化し、これまで手動で実施していた介入のほとんどを自動化します。アジャイル開発や近年注目が集まるDevOpsとマッチしており、開発環境の改善を図りたい企業に積極的に採用されています。
今後、よりスピーディで高品質の開発を進めていきたいのであれば、CI/CD環境や考え方を積極的に取り入れていく必要があるでしょう。
CI/CDのメリット
CI/CDのメリットは以下の通りです。
- 制作物の品質が高まる
- 開発スピードが向上する
- ツール間のズレを予防できる
- デベロッパーが開発に集中できる
制作物の品質が高まる
CI/CDを利用することで、ソフトウェアやアプリなどの品質が高まります。
従来であれば、最新のバージョンを適用するのに数時間もしくは数日かかるため、アップデートやツール追加などが容易に行えない状況がありました。
一方CI/CDでは、最新のコードやテクノロジー適用が容易です。開発環境を常に最新に保つことができるため、最先端・高品質の制作物が期待できます。
開発スピードが向上する
CI/CDはツール間で連携されており、入力情報が他ツールに自動的に適用されるため、作業量が必然的に少なくなります。これにより、開発スピードが格段に高まるとともに、急な変化にも対応しやすくなります。
環境の差異による問題を予防できる
複数の開発環境を利用する場合、環境ごとの仕様が原因でエラーが生じたり、セキュリティに問題が発生したりすることがありました。CI/CDでは、各ツールが自動的に連携されているため、環境の際による問題が予防でき、それによるエラーやセキュリティ問題が減少します。エラーが少なくなれば人的コストを大幅にカットできるため、予算削減にもつながります。
デベロッパーが開発に集中できる
デベロッパーの仕事は「開発」です。しかしながら、実際にはエラーやバグの修正に追われ、開発に専念しづらい状況が発生しています。
CI/CDではエラーが発生しにくいため、これまでエラー対応にあてていた時間を開発に注げるようになります。デベロッパーのエンゲージメントが向上し、長期にわたって貢献してくれる土台が作られます。
CI/CDのベストプラクティス
新しくCI/CDを導入する場合には、これから紹介するベストプラクティスを実施することで、効果をより高められます。
コードの品質を管理する
CI/CDは、ビルド、テスト、デプロイまで、同じコードを用いて開発を進めていきます。そのため、初期でコードの間違いがあった場合には、それが後半まで影響を与えます。CI/CDでは、通常の開発以上に、コードの適切な利用が重要です。
デベロッパー間で認識の違いが生じないように、コートレポジトリを適切に作成・管理してください。また、定期的にコードレビューを行うとともに、コードの変更を行う際にはレポジトリの書き換えも必ず行うようにしてください。
初期は微調整を頻繁に行う
CI/CDは、一度組織にフィットすると、開発スピード向上やエラー削減に大きく貢献します。しかしながら、新規に導入したCI/CDをいきなり組織にフィットさせることは稀です。多くの企業が、実践とフィードバックを繰り返しながら、自社に最適化させていくプロセスを経験しています。
そのため、CI/CDを取り入れる際には、デベロッパーからの声を丁寧に拾い上げる仕組みを作り上げることが重要です。何に困っているのか、どの部分がうまく機能していないのかを確認しながら、必要に応じてCI/CDを微調整していくことで、自社に真にマッチしたCI/CDへと改良されていきます。
適切なセキュリティ対策を行う
CI/CDは、ビルド、テスト、デプロイが1つの環境で行える一方で、情報が外部に漏れた場合には、制作物すべてに影響を及ぼす可能性があります。そのため、セキュリティ対策はより強固に行う必要があります。
ログイン情報を不特定多数に共有しないようにするとともに、ログイン時の認証を強化する、ツールは最小限に抑える、問題発生時のリスクマネジメントを決めておくなど、セキュリティ対策には力を入れるようにしてください。
設定ファイルを再利用する
CI/CDでは、設定ファイルに記述されたコードを繰り返し利用することで、開発時間の短縮とエラーやバグの削減を可能にしています。しかしながら、デベロッパーの人数が増えると情報共有が上手くいかず、設定ファイルの情報を用いずに開発を進めてしまう場合があるようです。これでは、CI/CDのメリットを最大限に活かせません。
組織として、設定ファイルをどのように活用すべきかを明確化するとともに、見やすい場所に設置しておく、定期的に情報共有するなど、対策を図るようにしてください。
気づいたエラーを放置しない
CI/CDは、コードを複数箇所に自動的に反映させることで、高速化とエラー減を実現しています。しかしながら、もし初期に利用したコードにエラーがあった場合、それがその他の箇所にも影響を及ぼします。エラーに気づいたら、すぐに修正を図るようにしてください。
デプロイごとに本番前環境をクリーンアップする
環境の実行期間が長くなるほど、適用されたすべての構成変更と更新を追跡することが難しくなります。CI/CDでは、デプロイごとに本番前環境をクリーンアップすることで、以前のデータが悪さするのを防げます。不要なファイルやデータ、一時ファイル、ログなどを毎回削除するようにしてください。
CI/CDの成果を検討する方法
CI/CDを導入した場合には、以下の項目を用いて、成果を適切に検討するようにしてください。
サイクルタイム
サイクルタイムは、1つの作業の工程開始から完了までにかかる時間です。コードの書き始めからアプリ完成までの時間を計測し、CI/CD導入の前後で比較します。ただし、CI/CDに変更して初回のアプリ開発は当然時間がかかるため、ある程度慣れてきたころのサイクルタイムを用いて比較するようにしてください。
作業時間
デベロッパーが何にどのぐらいの時間を費やしているのかを記録、分析します。CI/CDがうまく機能し始めると、問題の処理やツール間の調整にかかる時間が減り、メインとなる開発にかけられる時間が増えます。もしその傾向があるのならば、CI/CDのメリットをうまく享受できていると考えてよいでしょう。
エラー率
アプリケーション開発においてエラー発生は避けられません。しかしながら、CI/CD導入前後でエラー率がどの程度変わったのかを追跡することには大きな意味があります。もしCI/CD導入後にもエラーが大量に発生している、もしくはエラー修正にかかる作業時間が削減されていない場合、CI/CDがうまく機能していない可能性があるため、見直しが必要です。
インフラコスト
CI/CD導入にかかる費用を適切に把握するとともに、パフォーマンスとコストを見比べ、導入が適切であったかどうかを検討します。CI/CDは様々なメリットがある反面、当然のことながらインフラストラクチャ構築費用がかかります。開発スピードやエラー率、人件費などを見比べながら、CI/CD導入がコスト面からみて妥当かどうかを検討してください。
チームの声
実際に作業を行うデベロッパーの声も大切な評価基準です。ツールが使いやすいか、実際にエラーが少なくなったと感じるか、デベロッパー同士の連携に問題ないかなどを質問することで、CI/CDが開発者目線から見てどうかを把握できます。
CI/CDパイプラインとは?
パイプラインは特定のものをつなぐパイプです。例えば、AとBという別のものがある場合、パイプラインがない場合にはそれぞれが独立して機能します。一方、AとBがパイプで結ばれている場合、AとBがそれぞれ干渉しあい、影響し合うことで様々なメリット・デメリットを生み出します。
CI/CDでは、様々なステージや環境、ツールなどをパイプラインで結ぶことで自動化を図り、作業の効率化やエラーの削減、アップデートの容易化などを図ります。例えば、通常であればそれぞれ独立している「ビルド」「テスト」「デプロイ」の各ステージをパイプラインで結び付けることで、特定の変更が他のステージにおいても自動的に反映されます。CI/CDパイプラインは、CI/CDが効果を発揮する上での核となる考え方や構造です。
このパイプラインが正しく機能しているプラットフォームやツールを利用することで、CI/CDのメリットを最大限に享受できます。
一方で、CI/CDパイプラインがうまく機能しない場合、CI/CDの恩恵を受けられないばかりか、エラーが増えたり、余計に時間がかかったりする場合があります。そのため、CI/CDツールの選定は慎重に行う必要があります。
CI/CDツールの選び方
CI/CDを導入する目的は、開発サイクル全体にわたって包括的なフィードバックを提供しながら、正確で信頼性の高い製品を迅速に生成することです。そのため、正確性、信頼性、速度の面で優れたCI/CDツールを探す必要があります。
また、CI/CDツールの導入は、デベロッパーにとって大きな変化になるのに加え、インフラコストも発生します。そのため、環境をいきなり変えてしまうのではなく、まずは無料トライアルがあるCI/CDツールを利用し、使用感を確認するようにしてください。
GitLabでは、優れた性能のCI/CDパイプラインを提供しています。無料トライアルも受け付けているため、お気軽にお問い合わせください。
多くの企業がGitLabのCI/CDを選ぶ理由とは?
多くのCI/CDツールは、CIとCDを別々のツールで管理し、それを結びつけることでCI/CDを実現しています。一方、GitLabは長年のDevOpsプラットフォームの提供経験をもとに、ビルドーテストーデプロイが一体となったCI/CDツールの提供を行っています。
GitLabツールであれば、他社のツールとの結合を一切考慮することなく、すべて1つのツール内で完結できます。
結論
CI/CDは、近年重要性が高まっているアプリケーション開発のスピーディ化を実現するために非常に重要です。日本ではまだまだ導入企業が少ないものの、世界ではスタンダードになりつつあります。もし世界水準での開発環境を整えたければ、CI/CDツールの導入を少しでも早く検討するとよいでしょう。
監修:大井 雄介 @yoi_gl (GitLab合同会社 ソリューションアーキテクト本部 本部長)