CI/CDはじめの一歩 CIツール編

    CI/CDはじめの一歩 CIツール編

     

    目次

      はじめに

      アジアクエスト クラウドインテグレーション部の田中雄也です。
      この記事では、CI/CDを知るための一歩として、CIツールについて触れていきます。

       

      記事の目的(または狙い)

      • 今後、CI/CDに触れてみたい方のきっかけづくり
      • CIツールの情報収集をする方向けの参考情報

      そもそもCI/CDとは

      「Continuous Integration」・「Continuous Delivery」の略称で、日本語に訳すと「継続的インテグレーション・継続的デリバリー」といった意味になります。

      ソフトウェアのリリーススピードの向上を目的とした開発手法で、 ソフトウェアをリリースさせた段階で満足するのではなく、リリース後においても継続的なアップデートの提供をすることで、絶えず変化するビジネス環境に適応したソフトウェアの提供を目指すための手法です。

      コードの変更が行われる都度のテストやデプロイを自動化することで、ソフトウェアのリリーススピードの向上を通して、市場が求めるアプリケーションを維持し、競争力を保ち続けることが目的となっています。現在ではソフトウェアだけでなく、クラウドインフラにもこの仕組みが応用されるなど幅広い開発現場で用いられる手法となっています。

       

      具体的にCIとは

      CI/CDの概要には触れましたが、そのなかでも、具体的にCIとはどんな役割を担っているのでしょうか?

      CIは、開発者が継続的にコードをメインブランチにプッシュするプロセスであり、プッシュされたコードは自動ビルドプロセスを経て、様々な自動テストによって検証されます。これにより、コードの品質を保証し、バグの早期発見と迅速な修正を可能にしています。
      また、この仕組みは、ソフトウェアを小さなサイクルで開発するという点で、ソフトウェア開発手法の一種であるアジャイル開発と密接に関係しています。

      ちなみにCDはCIを拡張した概念で、CIの一連のプロセスを経て開発・修正されたコードを運用環境にデプロイ直前、またデプロイまでを自動化するプロセスとなります。

      そんなCIとCDが組み合わさったCI/CDが導入されることで、開発の現場にはどういった影響が出るのでしょうか?
      以下で見ていきましょう。

       

      CI/CDの導入前・導入後

      ここからは、CI/CDの導入前・導入後のそれぞれのケースを比較していきます。

      • CI/CDが導入されていない場合
        • コードのビルド、テストを人の手で行う必要があるため、その部分がボトルネックとなりペースを上げることができない場合がある
        • ビルドを人の手で行う都合上ある程度コードがまとまった段階でビルドを行うことになる
      • CI/CDが導入された場合
        • ビルドやテストをコンピュータが自動的に行ってくれるため、コードを記述するエンジニア以外に手を動かす人がいなくなることから迅速なビルド、テストを行うことができる
        • ビルドを自動化することで、小さなサイクルで開発が進むことによって早期的なバグの発見、対処が可能になる
          • この点から、アジャイル開発に適しているといえます

      上記のような違いから開発現場にCI/CDが導入されることによって、ソフトウェアのリリーススピードを向上させることに繋がるのです。

      CIツールとは

      その名の通り、CI(継続的インテグレーション)のためのツールであり、コードの修正をこまめに反映しつつ、CIの特徴であるコードのビルドやテストの自動化を通したバグの早期発見をすることで開発品質を保証しながら、ソフトウェアのリリーススピードの向上に寄与してくれるものです。
      ツールによって、クラウド環境で使えるものかオンプレミス環境で使えるものかが変わってきたり、拡張性や連携機能に差異があるので、その時の状況に応じて適したツールを選択することが必要です。

       

      CIツールの体系

      CIツールの体系は、各ツールが開発された背景から大きく分けて3つに大別できます。
      以下の画像にその分類と代表的なサービスを配置してみました。

      202402_firststeps_to_CICD_ci_tool_01独立系:左の黒枠 クラウド系:右上の青枠 VCS系:右下の青枠

       

      独立系

      特定のプラットフォームを背景に持たない独立系のCIツール。プラットフォームによる制約を受けない分、拡張性が高い。無料で利用できたり、無料利用枠が用意されているものが多い。

      • 代表的なサービス
        • Jenkins
          • オンプレミス型であるため、サーバー上に環境を構築する必要があるものの、オープンソースのCIツールとして多くの方に利用されています。その特性から豊富なプラグインを持ち、様々なケースで利用できます。基本的に無料で利用可能。
        • CircleCI
          • Jenkinsと同等の機能を提供しつつSaaS型であるためアカウント登録するだけで利用できます。コンテナベースのツールであり、やりとりにAPIを使用するためインターネットが必須。基本的にはクラウド利用となるが、特定のケースにおいてはオンプレミスで利用することができたり、多くのサービスやツールとの連携が可能なため、幅広いケースで利用可能。
        • Travis CI
          • SaaS型のCI/CDサービスであり、最低限の設定だけで手軽にサービス利用ができます。ほかのサービスと比べてもGitHubとの連携が強化されており、あらかじめ設定したGitHubリポジトリを自動でビルドやテストできたり、対象がGitHubのオープンソースのリポジトリである場合に、無料で利用可能。

      一例として、CircleCIを利用した場合の処理の流れを画像として貼っておきます。

      202402_firststeps_to_CICD_ci_tool_02

      クラウド系CIツール

      クラウドサービスを背景にもつCIツール。クラウド利用を前提としているためクラウドとの親和性が高い。基本的に従量課金制となるため、その他のCIツールと比べて比較的コストが高くなりやすい。

      • 代表的なサービス
        • Azure DevOps
          • クラウドサービスAzure上でCI/CDを行うためのサービス群の総称。Azure自体がMicrosoftのサービスであるため、Microsoft系との連携に強くMicrosoft系やWindows系との連携を考える必要がある場合におすすめ。
          • サービス群のなかにはGitリポジトリホストのためのAzure ReposやCI/CDをサポートするためのAzure Pipelinesなどが含まれる。
        • AWS CodePipeLine
          • クラウドサービスAWS上でCI/CDを行うためのサービス群の総称。分割されたサービスは以下の通りそれぞれ役割を持っている。他のサービスと連携可能でありつつも、AWSサービスへの親和性が高く全てのアプリケーションをAWSで管理することも可能。ワークフローが視覚化され、GUIで操作できる部分が多いため、簡単に操作ができる。
            • CodeCommit:ソースコードなどの管理ツール
            • CodeBuild:ビルド、テスト
            • CodeDeploy:デプロイ
        • Cloud Build
          • GCP(Google Cloud PlatForm)上のサービスでGCP上でその他の環境構築をしている場合に連携をすることが容易。デフォルトでDockerコンテナをサポートしているため、コンテナとの親和性が高く、拡張性にも優れる。

      ここでは、一例として、AWS CodePipeLineを利用した場合の処理の流れを画像として貼っておきます。

      202402_firststeps_to_CICD_ci_tool_03

      VCS系CIツール

      VCS(Gitなどのバージョン管理システム)を背景に持つCIツール。バージョン管理システムと統合されてリポジトリと密接に連携して動作する。

      • 代表的なサービス
        • GitLab CI/CD
          • GitLab CI/CDはGitLabの統合開発環境に統合されており、コミットやマージリクエストをトリガーとした自動化プロセスを容易に設定できます。コードの変更をリアルタイムでビルド、テストし、それを迅速にデプロイできます。
          • また、無料枠が月あたり400分あるため、ある程度は無料で利用可能です。
        • GitHub Actions
          • GitHubから直接コードをビルド、テスト、デプロイでき、コードレビュー、ブランチ管理などができます。GitHubのすべてのイベントに対応し、ワークフロー単位で管理可能で、対象がパブリックリポジトリである場合無料で利用できるかつ、無料枠が月あたり2000分あるため、ほぼ無料で利用可能です。
          • 対応するプログラミング言語が非常に多く、その点でいうと大半のニーズを満たすことができるといえます。
        • Bitbucket Pipelines
          • Bitbucket PipelinesはBitbucket Cloudに組み込まれたCI/CDツールです。ビルドやテスト、デプロイを定義するためのYAMLという比較的簡単な形式のファイルをリポジトリにセットすることで、ファイル内のコードに基づいてビルドやテスト、デプロイを簡単に自動化できます。
          • 無料枠が月あたり50分あるため、多少の用途であれば無料で利用可能です。

      ここでは、一例として、GitHub Actionsを利用した場合の処理の流れを画像として貼っておきます。

      202402_firststeps_to_CICD_ci_tool_04

      このように、各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