マーケットが複雑に変化が早くなっている中で、より早く製品の開発をしていくことが求められています。そのような中でよく話題に上がるのがCI/CDです。アジャイル開発を行っているチームではすでに導入されているところが多いかと思いますが、CI/CDとはなんなのかを今回改めて見てみましょう。
目次
1. CI/CDとは
CIとCDそれぞれの言葉がもつ意味から見ていきましょう。
CI=Continuous Integration:継続的インテグレーション
CD=Continuous Delivery(Deployment) :継続的デリバリー(デプロイ)
ソフトウェアやwebアプリを作るときには、エンジニアがコードを書きテストを行い本番環境へ反映(デプロイ)させる必要があります。
CI、継続的インテグレーションではエンジニアがコードを反映させるまでのビルドやテストを自動化することを指し、CD、継続的デリバリーではCIによってテストが完了したコードを本番環境向けにビルドしてマージしたりデプロイしたりすることを指します。
ビルド、テスト、デプロイまでを自動化することで、品質を犠牲にせずに継続的に製品をデリバリーすることをCI/CDといいます。
継続的にというのは小さな単位でデプロイをし続けるということです。特に複数人が作業する必要のあるようなプロダクトでは開発が複雑になり、テスト工程が雑になってしまったり、コードが重複を起こしたりといったことが発生することがあり、継続的に安定した製品をリリースし続けることが難しくなってしまう場合が多々あります。しかし、CI/CDを取り入れることで改善していけるようになります。
2. CI/CDがなぜ注目されているの?
CI/CDが注目されるようになった理由として、近年の開発においてはアジャイル開発が主流となってきていることがあげられます。
大規模開発で行われるウォーターフォール型の開発では、最初に要件定義や設計、プロジェクトの期間を決めて仕様書通りに開発を行い、最後に結合テスト、リリースとなります。
一方アジャイル開発では、開発を小さい単位に区切り1週間や2週間のスプリントに区切ってリリースをしていきます。そのためリズムのある開発が必要となる上、ウォーターフォールよりもより早い開発スピードで機能をリリースしていく必要があります。
リリースを頻繁に行うということは、リリース前に毎回テストをしたりといったコストが掛かるということでもあります。スピード重視にするとどうしても品質が落ちてしまうことがあり、結局手戻りが発生することにもつながります。
開発スピードをテストやビルドを自動化することで、早い開発スピードを維持しながらも品質を保つというのがCI/CDが注目される理由の一つです。
また、今まで属人化していた部分が自動化されることでチームとしても動きやすくなるというメリットもあります。
3. CI/CDを取り入れるメリットは?
では、CI/CDを取り入れるメリットはどのようなものがあるのでしょうか?CI/CDの環境を作成すること自体に工数がかかることもあり導入に迷うこともあると思いますが、下記のメリットと構築の工数を比較して考えてみましょう。
3-1. チームでの協業が増え混乱を防げる
複数人で開発を行う場合、基本的にはマスターと呼ばれるブランチから開発用のブランチを切り、各々が開発した後にまたマスターブランチへ統合する作業が行われます。
このとき人数が多ければ多いほど、統合する作業が頻繁でないほど、格差業者間でコードに差分が出てしまい統合作業に時間がかかるというデメリットがあります。
CI/CDを導入している場合、CIプラクティスに従いチームは少なくとも1日に一度、もしくは複数回の統合作業を行うことが推奨されます。こうすることで、各人のコードの差分が大きくなることが少なくなり、また統合時のエラーも検知して迅速に直せるようになるので結果的に統合作業の時間も短縮することができます。
3-2. 品質を保ったままリリースのサイクルを早めることができる
上述したように、アジャイル開発では小さな機能を定期的にリリースしていくことが求められます。
CI/CDのうち、CDはContinuous DeliveryとDeploymentで分けられます。Deliveryの場合は本番反映前に実際に人がマニュアルで確認してからリリースをすることを表すことが多く、Deploymentの場合は本番反映まですべて自動化することを指すようです。
本番反映までのステップのうちのビルド、テストを自動化し、安定した品質が保てるようになれば自ずとリリースのサイクルも早くすることができます。
CI/CD環境ではテストを自動化するためのテストコードが書かれます。テストコードを先に書いてから実装をするチームも多くテスト駆動開発と言われますが、実際にそうした挙動をイメージしながら実装をし、テストコードを使ってテストをすることで手戻りが少なく、かつテスト工数も減らすことができます。
3-3. 問題を早期に発見できる
CI/CD環境を整えることで、問題のあるコードがデプロイされることを防ぐことができます。テストをクリアしているか、インデントは揃っているか、メソッドは正しく記述されているかなどを自動で確認できるようにすることで、開発者は開発が終わればコードをプッシュして確認結果を待ち、問題があれば早期に修正、なければそのままマージということになります。
もしも大きな開発をして大量のコードを一気に、自動テストなどもなくプッシュした場合、不具合が出たときにデバッグに時間を要します。細かい単位でプッシュし、かつ自動テストを走らせるということは、問題を早期に見つけやすくするということにもなり、手戻りや開発の遅れを防ぐことができます。
4. どうやってCI/CDを導入する?
CI/CDを取り入れる際には、すでに提供されているツールを使って環境を構築していくことが一般的です。では、どのようなCI/CDツールが主流なのでしょうか?
4-1. CircleCI
CircleCIは、SaaS型のCI/CDツールです。SaaS型のため、自前でサーバーを用意して構築する必要がなく、Web上で設定するだけで使えるようになるので非常に便利なサービスとなっています。
オンプレ版もあるので自社サーバーへのインストールも可能となっています。
4-2. Jenkins
CI/CDツールの中でもっとも有名と言っても過言でないのがJenkinsです。Javaが動く環境であれば使える汎用性が高いツールとなっており、コミット、ビルド、テスト、リリースまで自動化対応しており、またプラグインも多く柔軟性のあるツールです。
自前のサーバーを準備してインストールする必要があるという点ではCircleCIよりも導入ハードルが若干高いかもしれませんが、多くの現場で導入されています。
5. まとめ
アジャイル開発が主流となってきた現在、CI/CDを取り入れることで安定した品質で製品をリリースしていくことができるようになるという大きなメリットがあります。まだ導入していないチームはぜひ検討してみてくださいね。
アジャイル方式で開発をするならバイタリフィのオフショア開発で
バイタリフィでは、ベトナムでのオフショア開発にのサービスを提供しております。12年以上に及ぶベトナムでのオフショア開発経験を活かした高品質・低価格な開発体制です。
開発チーム内には世界コンペにて、約3000チーム中世界10位以内に入ったプロフェッショナル集団も在籍しています。無料でご相談頂けますので、オフショア開発に興味がある方は、ぜひ一度お気軽にお問合せいただけましたら幸いです。
「オフショア開発3分で丸わかりBOOK」が必要な場合は、問い合わせ欄にご記載ください。