アジアクエスト クラウドインテグレーション部の田中雄也です。
この記事では、CI/CDを知るための一歩として、CIツールについて触れていきます。
「Continuous Integration」・「Continuous Delivery」の略称で、日本語に訳すと「継続的インテグレーション・継続的デリバリー」といった意味になります。
ソフトウェアのリリーススピードの向上を目的とした開発手法で、 ソフトウェアをリリースさせた段階で満足するのではなく、リリース後においても継続的なアップデートの提供をすることで、絶えず変化するビジネス環境に適応したソフトウェアの提供を目指すための手法です。
コードの変更が行われる都度のテストやデプロイを自動化することで、ソフトウェアのリリーススピードの向上を通して、市場が求めるアプリケーションを維持し、競争力を保ち続けることが目的となっています。現在ではソフトウェアだけでなく、クラウドインフラにもこの仕組みが応用されるなど幅広い開発現場で用いられる手法となっています。
CI/CDの概要には触れましたが、そのなかでも、具体的にCIとはどんな役割を担っているのでしょうか?
CIは、開発者が継続的にコードをメインブランチにプッシュするプロセスであり、プッシュされたコードは自動ビルドプロセスを経て、様々な自動テストによって検証されます。これにより、コードの品質を保証し、バグの早期発見と迅速な修正を可能にしています。
また、この仕組みは、ソフトウェアを小さなサイクルで開発するという点で、ソフトウェア開発手法の一種であるアジャイル開発と密接に関係しています。
ちなみにCDはCIを拡張した概念で、CIの一連のプロセスを経て開発・修正されたコードを運用環境にデプロイ直前、またデプロイまでを自動化するプロセスとなります。
そんなCIとCDが組み合わさったCI/CDが導入されることで、開発の現場にはどういった影響が出るのでしょうか?
以下で見ていきましょう。
ここからは、CI/CDの導入前・導入後のそれぞれのケースを比較していきます。
上記のような違いから開発現場にCI/CDが導入されることによって、ソフトウェアのリリーススピードを向上させることに繋がるのです。
その名の通り、CI(継続的インテグレーション)のためのツールであり、コードの修正をこまめに反映しつつ、CIの特徴であるコードのビルドやテストの自動化を通したバグの早期発見をすることで開発品質を保証しながら、ソフトウェアのリリーススピードの向上に寄与してくれるものです。
ツールによって、クラウド環境で使えるものかオンプレミス環境で使えるものかが変わってきたり、拡張性や連携機能に差異があるので、その時の状況に応じて適したツールを選択することが必要です。
CIツールの体系は、各ツールが開発された背景から大きく分けて3つに大別できます。
以下の画像にその分類と代表的なサービスを配置してみました。
特定のプラットフォームを背景に持たない独立系のCIツール。プラットフォームによる制約を受けない分、拡張性が高い。無料で利用できたり、無料利用枠が用意されているものが多い。
一例として、CircleCIを利用した場合の処理の流れを画像として貼っておきます。
クラウドサービスを背景にもつCIツール。クラウド利用を前提としているためクラウドとの親和性が高い。基本的に従量課金制となるため、その他のCIツールと比べて比較的コストが高くなりやすい。
ここでは、一例として、AWS CodePipeLineを利用した場合の処理の流れを画像として貼っておきます。
VCS(Gitなどのバージョン管理システム)を背景に持つCIツール。バージョン管理システムと統合されてリポジトリと密接に連携して動作する。
ここでは、一例として、GitHub Actionsを利用した場合の処理の流れを画像として貼っておきます。
このように、各CIツールはそれぞれのサービスが生まれた背景によって、注力している部分が異なってきます。また、これらのCIツールは動作ごとによって組み合わせて利用するといった運用方法をすることも可能です。
ご自身の置かれている環境によって、選択するCIツールはその都度変わりますし、開発が小規模な場合やリソースが限られている場合には、そもそもCIツールを導入しない方が都合の良い場面もあるかもしれません。
特定のツールだけをむやみに使い続けるのではなく、環境にあったCIツールの利用を念頭においた上で、ツールの検討をして頂ければと思います。
というわけで、この記事では「CI/CDはじめの一歩 CIツール編」として、CI/CDとCIツールについて触れさせていただきました。
CI/CDとは、継続的インテグレーション・継続的デリバリーを指す言葉でソフトウェアのリリーススピードの向上を目的として、コードの変更が行われる都度のテストやデプロイを自動化する開発手法。現在では、ソフトウェアだけでなくクラウドインフラを含めた幅広い開発現場で用いられるもの。
そのなかでCIとは、コードの自動ビルドと自動テストの役割を担っているもの。そしてCIツールとは、そんなCIを実現するために用いるツールであることがご理解頂けたでしょうか?
この記事が皆様のCI/CDやCIツールに踏み出す一歩として寄与することを願っています。
最後までお読みいただき、ありがとうございました。
また、この記事は
以前に投稿したCI/CDはじめの一歩シリーズの一部となっています。
以前の記事をご覧になりたい方は下記のリンクより参照できますので、よければご覧ください。
CI/CDはじめの一歩 ソースコード管理(Git)編
参考記事
継続的インテグレーション (CI) とは? | circleci
CI(継続的インテグレーション)とは? | CloudBees