「CI/CD」導入のメリットとデメリット
2022/09/09
「CI/CD」という言葉をご存じでしょうか?
短期間でスプリントを繰り返し、仕様と変更を加えてブラッシュアップさせていく「アジャイル型開発手法」の浸透、進化によりCI/CDへの需要が高まっています。
特にWebサイトやWebアプリ、モバイルアプリでの開発では積極的に採用されています。今後は、より効率的に高品質なプロダクトを提供することが求められるため、ますますCI/CDの導入が進められると予想されます。
フリーランスエンジニアの選考面談では「CI/CDについて説明できますか?」といった質問も頻繁にされるほど注目されている手法です。
今回は、CI/CDの特徴やメリットとデメリットについてもわかりやすくお話しします。開発に関わるエンジニアはぜひ参考にしてみてください。
CI/CDとは
CI/CDとは、「Continuous Integration(継続的インティグレーション)/Continuous Delivery(継続的デリバリー・継続的デプロイ)」のことを指します。
システムの変更に対して継続的に自動的にテストをかけ、高品質なプロダクトにすることを目指すものです。一つずつ見ていきましょう。
CI:継続的インティグレーション
システム開発におけるビルドやテストを自動化し、継続的に行うアプローチのことを指します。
「インティグレーション=統合」、つまり開発に伴う各種作業やテストといった一連の作業を自動化させることで、継続的かつ迅速にバグが無いかを確認でき、プロダクトの質を高めることができます。
多くの開発現場では、複数の開発者が同時並行で開発するため、それぞれのブランチに分岐したものをマージさせる作業が必要になります。そして、単体テストと各ブランチを合わせた統合テスト、それぞれを実行してシステムが問題なく動くかどうかを検証していくという工程は必須です。
CIを導入すると、誰かがコードを変更するたびに自動的にテストが行われるため、バグをすばやく発見し、すぐに修復することができます。手戻りが最小限に抑えられるため、効率的に進められます。
CD:継続的デリバリー
CIによってテストされたコードのマージやビルドの作成を自動的に行い、本番環境にデプロイし、ユーザーがシステムを使える状態に整えるプロセスです。
「デリバリー=届ける」ことなので、システムの価値をユーザーに届ける、配信する、公開する、といった意味合いになります。CIの自動化システムをインフラ領域まで拡張したものともいえるでしょう。
単体テスト・統合テストの自動化に続き、CDはコードのリポジトリへのリリースを自動的に行います。これによってすばやく本番環境にデプロイできるため、依頼者にすぐにプロダクトを提供できます。
CD:継続的デプロイ
本番環境にデプロイが行える環境を整える「継続的デリバリー」の延長として、「継続的デプロイ」は本番環境に自動的にリリースまで行います。
リリースまでの工程を自動化することで、リリース後に問題が発生しても柔軟に対応することができ、ユーザーのフィードバックに対しても迅速に対応できます。
特に需要の変化が激しいSNSやモバイルアプリにおいては、どんどんリリースして本番環境でフィードバックを得て改善していく方が効率的といえます。継続的デプロイを使うことで、リリースから修正のサイクルを早めてユーザーが求める価値を提供できるようになります。
CI/CD導入のメリットデメリット
CI/CD導入のメリット
テストとビルド環境の構築、リリースをCI/CDで自動化することで、コストと手間を削減させながら品質を向上できるという大きなメリットがあります。
頻繁にテストを行うことでレビュー期間の短縮に
CIのテストをクリアした質の高いコードをチームメンバーで共有することで、コードレビューの時間を短縮することができます。
また、ステータスバッジを活用すれば、品質の見える化が進み、チーム内でも意欲的に開発を進められます。
統合テストを頻繁に行うことでメンバー間での誤差を防げる
開発者が複数人いる場合、人数が多かったり統合テストを頻繁に行っていなかったりするとエンジニア間でコードに差が出てしまい、統合に時間がかかってしまうことがあります。
CI/CDを導入していれば、少なくとも1日に1回以上統合作業を行うことが推奨されるため、エンジニアごとの差分も少なくなり、統合作業の時間そのものも短縮させられます。
ビルド~デプロイまでの期間を短縮し、コスト・手間の削減も叶う
CI/CDサービスの中には、GitHubなどと連携して、開発者が変更を加えるたび「コードにエラーがないか」「既存の機能を破壊していないか」を自動でテストし早期にバグを検出してくれるものもあります。
もし頻繁にテストを行わず、リリース直前にバグを発見した場合、開発期間のうち誰がいつ書いたコードのどこが問題なのかを特定することは難しくなります。また、開発完了後にバグが発見された場合、対応するためにあらたに開発者を採用する必要も生じます。
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ツールには、オンプレミス型とクラウド型があります。
オンプレミス型「Jenkins」
「CloudBees社」によって開発・提供される「Jenkins」。Windows、macOS、CentOSなどのLinuxのほかに、Docker用にもダウンロードが可能で、Javaが動く環境であれば使える汎用性が高いオープンソースです。
コミット、ビルド、テスト、リリースの自動化に対応しており、2021年1月の時点で1,500以上ものプラグインが用意されているため、機能の拡張にも柔軟に対応します。
オンプレミス型のため、自前のサーバーを準備してインストールする必要はありますが、国内の利用者が多いため、使い方や最新情報に関する情報収集がしやすい点もメリットです。
クラウド型「CircleCI」
「CircleCI社」によって開発・提供されるSaaS型のCI/CDサービスです。オンプレミス型のJenkinsと同様の機能を提供します。
SaaS型のため、自前でサーバーを構築する必要がなく、Web上での設定で比較的容易に使えるメリットがあります。
ジョブの実行が高速で、ビルドのスピードを最適化できるといった特徴をもち、オンプレ版もあるため自社のサーバーにインストールすることも可能です。
リポジトリツール
ソースコードの変更や成果物を管理するリポジトリツールには、「GitHub」や「Git」などがあります。
GitHub
Gitホスティングサイトの中で最も有名なGitHubは、使用経験のあるエンジニアが多く、バージョン管理には欠かせないツールとして認識されています。
GitHub Actionsという組み込みCIが導入されたことにより、より高度な自動化が実現したことも高評価の理由です。
Git
Gitの特徴は、メンバーのソースコードの変更を自分のPCに取り込める、履歴管理が可能、タグ付けができるといった点で、チーム開発の現場において重宝されています。
こちらも世界的にシェアが高く、複数のエンジニアで複数のプロジェクトを同時に開発する現場に適しています。
ビルドツール
ソースコードを自動的にビルドさせるツールは「Gradle」が代表的です。
Gradle
Javaプラットフォームで動く動的プログラミング言語なので、Javaの使用経験がある方なら低い学習コストで扱えるツールです。
XMLを用いた設定ファイルではなく、Groovyスクリプトを用いたビルドスクリプトのため、比較的初心者でも扱いやすい特徴があります。
テストツール
単体テストや結合テストの他にも、様々なテストが行われます。その中でも重要な役割を担う機能テストと負荷テスト、それぞれのおすすめツールを紹介します。
UFT One
国内で20年以上実績がある機能テストツールです。GUI操作でテストを作成でき、ノンコーディングで回帰テストを自動化させることが可能です。
変更や修正が繰り返される現場では欠かせない回帰テストですが、単調な作業の繰り返しになりがちなので、自動化させたいところ。UFT Oneを活用すれば、品質を保ったままテスト工数を削減でき、リソースを有効活用できます。
LoadRunner Professional
アクセス集中による不具合やレスポンスの悪化を避けるために、負荷テストは必須です。
LoadRunner Professionalは、Web、モバイル、データベース、Oracle、SAPといった幅広いアプリケーション環境のパフォーマンステストと負荷テストに対応しています。
事前準備とデータ集計の工数を抑えて負荷テストを実施できるのも特徴的です。
テストデータ準備ツール
仮想化ソフトウェア上で動作するツールとしては「DELPHIX」があります。
DELPHIX
開発環境は、本番環境のデータベースがあることが重要です。DELPHIXは、瞬時に本番環境の仮想コピーを作成し、データベース環境、アプリケーション、ファイルの複製が可能になるため、テストサイクルを効率化させることができます。
また、動作が容易なためデータベースに関しての知見が少なくても複製が行えることもメリットです。
構成管理ツール
設計・開発・運用・保守それぞれのフェーズを通じて構成の変更・修正といったワークフローやプロジェクトの管理を行うツールには、「Ansible」や「Chef」があります。
Ansible
Red Hatが提供する世界的にメジャーなツールで、小規模な開発でも手軽に導入できます。Windows、Linux問わず自由度が高く利用できることや、承認機能が追加されたことによりチーム間で確認しやすく作業フローをコントロールできる点が評価されています。
Chef
Chefはオープンソースの構成管理ツールです。こちらも各種OSに対応しており、コストを抑えてインフラ環境を設定ファイル化、コード化させることができます。
認知度が高く、利用者が多いことやドキュメントが豊富といった特徴があります。
CI/CD導入にあたって
「自動化するテストが少ないからCI/CDを導入する必要はないかも…」と思う開発担当の方もいるかもしれませんが、テストが無くてもできるだけ初期状態からの導入をおすすめします。
例えば建築では、ある程度建物ができた後に基礎部分を変更することは難しいですよね。それと同様に、プロジェクトが進んでいる途中でのCI/CD導入は難易度が上がります。
一度にCIもCDも導入するのは大変なので、まずはCIの導入から始めましょう。初期の導入工数は多いですが、長期的にみると効率的に開発フローを進めることができます。
<CI/CD導入の順序>
1. 共有リポジトリ環境の整備
2. CI環境の整備
3. テストコードの自動化への環境整備
4. テストコードを書く
5. リリースやデプロイのコードを書く
6. CD環境の整備
CI/CDサービスの中には、導入にあたって必要なツール一式をセットにした「スターターキット」もあります。まずは手軽に導入したい、自分で環境を整えるほど工数をかけられないという方は活用してみてください。
まとめ
今回は、CI/CDの特徴や導入のメリット・デメリットについて説明してきました。今後ますますアジャイル型開発が浸透するにつれ、開発を効率的に進めるために自動化ツールの活用は不可欠です。
ただ、CI/CD導入にあたってはそれなりの知識が必要になるため、独学でツールについて学んでみてもいいでしょう。開発ツールも、上で紹介した2つ以外にもたくさん種類があります。
それぞれの特徴をとらえ、適したツールを提案できるようになるといいですね。この記事が少しでも参考になれば幸いです。
・フリーランスだけど安定して働いていきたい
・年収アップするためにはどうしたらいいのだろう
気になることは、どんな些細なことでも
お気軽にご相談ください。
IT業界において経験豊富な弊社キャリアサポーターが、1対1でお話をさせていただきます。フリーランスの皆様のスキル、過去のご経験を元に今後のキャリアプランを一緒に築いていくためのご提案させていただきます。
今後のキャリアや、技術面において不安な事もお気軽にご相談下さい。
60秒で登録完了!