CircleCI前提知識

CircleCIについて解説するにあたり、いくつか前提となる知識が必要です。ここでは詳細については触れません。

GitやGitHubなどのGit関連の用語、Dockerについては理解しているものとして進めていきます。

またテスト・ビルド・デプロイの具体的な内容は、個々のプロジェクトによって異なります。

フレームワークやライブラリの公式ドキュメントやGitHubなどを確認して下さい。


CI(継続的インティグレーション)

CI(Continuous Integration)の略です。CIとはテストや静的コード解析などの作業を自動化し、継続的に実行する手法です。

開発者はソースコードをマージするだけで良く、ソフトウェア品質の維持・向上および開発作業の効率化が図れるのがメリットです。


CD(継続的デリバリー)

CD(Continuous Delivery)の略です。CDとは各環境へのデプロイ作業を自動化し、継続的に実行する手法です。

CDはCIを拡張した手法ともいわれます。

何故ならステージング環境や本番環境へのデプロイは、CIで自動化した作業の次に引き続き行われるようになっているからです。

またCD(Continuous deployment・継続的デプロイ)という用語も存在しますが、自動化範囲が異なるため注意しましょう。

継続的デプロイではデプロイが可能な状態にするまでを自動化し、実際にデプロイを行うか決定するのは開発者です。


Gitとホスティングサービス

素のGitはCLIからコマンド実行しソースコードをバージョン管理するシステムです。

SourceTreeやGitKrakenはGitをGUIツール上から実行できるようにしたもの、GitHubやBitbucketはWebサービスにしたものです。

これらのWebサービスはGitのホスティングサービスとも呼ばれます。

また素のGitで利用できる機能だけでなく、他のWebサービスとの連携やプロジェクト管理の機能も備えているのです。

クラウド型のCI/CDツールはこのWebサービスとしての側面を活かして、様々なサービスと連携し、バージョン管理やプロジェクト管理を行います。


CI/CDツールでできること

CircleCIなどのCI/CDツールはテスト・ビルド・デプロイなどの自動化を行うことができるツールです。


テスト(test)の自動化

近年のソフトウェア開発では、テストの自動化が重要な位置を占めるようになってきました。

ほぼ全てのフロントエンド・バックエンドのフレームワークは、コマンドから実行する自動テストの仕組みを標準装備しています。

プログラミング言語やフレームワークのバージョンアップは日進月歩で、自動テストがなければバージョンアップに追いつけなくなっています。

単体テスト(ユニットテスト)・静的コード解析・文法チェック・E2E(End to End)テストなど、コードに行う作業はみるみる増加しました

CI/CDツールを用いることで、これらの作業を自動化することができます。


ビルド(build)の自動化

動的テストやデプロイを自動化するために、対象のソースコードからビルドを行う必要があります。

ただし静的コード解析や文法チェックなどの静的テストは、プログラムを実行できる状態にする必要がないため、ビルドしなくても実行可能です。


デプロイ(deploy)の自動化

日本にもアジャイル開発が徐々に広まりつつあり、一頃昔のように人の手で随時デプロイを行うのは大変になってきました。

CI/CDツールではデプロイ用のスクリプトを設定しておくことで、Gitのホスティングサービス上のコードを自動デプロイすることができます。

ブランチのプッシュやマージを契機としてビルドスクリプトを実行し、成功したら対象のサーバーにデプロイを行います。


CircleCIでできること

クラウド型のCI/CDツールCircleCIでは以下のようなことができます。

  • VCS(バージョン管理システム)連携
  • テスト・ビルド・デプロイの自動化
  • 各種通知ツールとの連携

VCS(バージョン管理システム)連携

CircleCIはGitHub・BitbucketなどのGitホスティングサービスを利用します。

テスト・ビルド・デプロイ対象となるソースコードに対する変更が行われると、GitHubがCircleCIに通知を送るのです。

通知を受けたCircleCIは変更後のソースコードを取得し、あらかじめ設定された自動化スクリプトを実行します。


テスト・ビルド・デプロイの自動化

「CI/CDツールでできること」で触れた3つの自動化です。これがCircleCIのメインの機能となります。

VCS連携や各種通知ツールとの連携は、あくまでこれらの自動化の延長です。


各種通知ツールとの連携

Slackなどのチャット通知、メール通知、ブラウザのプッシュ通知などが利用できます。

これで時間がかかるテストの終了を確認しに行く必要はなくなり、他の開発作業に集中して取り組めるようになります。

またチャットツールでテスト結果やデプロイ状況をプロジェクトメンバーと共有し、常に最新の情報を周知するようにしておくと非常に便利です。


CircleCIの特徴

CircleCIには以下のような特徴があります。

  • SaaS型のCI/CDサービス
  • CI/CDに必要なリソース機能が充実


SaaS型のCI/CDサービス

CI/CDツールにはオンプレミス型とクラウド型の2種類が存在します。

オンプレミス型のCI/CDツールはJenkinsが有名です。またクラウド型にはTravis CIやAWS CodeBuildなどがあります。

CircleCIといえばSaaS(Software as a Service)型のクラウドサービスだと認識している方も少なくないのではないでしょうか。

実はCircleCIには「CircleCI Cloud」と「CircleCI Server」の2種類が提供されています。「CircleCI Cloud」がSaaS型のクラウドサービスです。

そして「CircleCI Server」はプライベートなサーバーで利用可能なオンプレミス型の製品です。

以降、この記事では「CircleCI Cloud」に的を絞って解説していきます。


CI/CDに必要なリソース機能が充実

CircleCIは様々なリソースを提供します。

仮想CPU数とメモリ容量が選択でき、多数のプログラミング言語やWebフレームワークにも対応しています。

またDockerを全面的にサポートしており、DockerfileからのイメージのビルドやDockerレイヤーキャッシュの利用ができます。

これによりDockerイメージを指定するだけで、Dockerコンテナ環境を利用することが可能です。

次の項でCircleCIの機能について見ていきましょう。


CircleCIの機能

CircleCIにはどのような機能があるのでしょうか。


利便性の高いダッシュボード

CircleCIのダッシュボードは視覚的に見やすく、機能的に様々な情報にアクセスしやすく構成されています。

Jobsからプロジェクトの一覧や最新のジョブの実行結果などが確認できるようになっているのです。

一覧や結果詳細のリンクからGitホスティングサービスの対象のコミットやコミッターが参照できます。

またInsightsからビルドステータスやパフォーマンスのグラフが表示できます。


Workflowによるジョブの制御

Workflowは複数のジョブを組み合わせて、順次実行・並列実行するための機能です。

JenkinsではPipeline、Travis CIではBuild Stagesという名称ですが、機能としては同じものです。

Workflowを使用すると時間のかかる処理を分割し、平行実行することで処理時間の短縮が見込めます。

またcronによるWorkflowの定期実行など、自動化の契機となるアクションの指定を行うこともできます。


ローカルCLIツール

CircleCI CLIをインストールすると、ローカルの開発環境でCircleCI設定ファイルのバリデーションやジョブの実行などを行うことができます。

これで実際にツールを動かして試行錯誤したり、リポジトリをコピーして動作確認を行う煩わしさがなくなります。

またビルド済みのCircleCI Dockerイメージを使用することも可能です。


GitHubとの連携:GitHub側

GitHubアカウントを持っていない方は事前に登録を行って下さい。

ここではGitHubリポジトリにプロジェクトを作成し、GitHubアカウントとCircleCIを紐付けるまでを確認します。


GitHubにリポジトリを作成する

ここではリポジトリ名を「circle-ci-practice」、可視性を「Private」で作成します。説明欄は任意で構いません。

またREADMEの初期化にチェックを入れておきましょう。フォームの入力が済んだら、「Create repository」ボタンを押して下さい。

新しいリポジトリが作成され、リポジトリの画面に遷移します。


CircleCIとGitHubアカウントの紐付け

CircleCIを利用するにはGitHubかBitbucketのアカウントが必要です。

ここではCircleCIのサインアップ画面からGitHubアカウントでログインを行い、OAuth認証で承認を行って下さい


GitHubとの連携:CircleCI側

CircleCIのダッシュボードが表示されているでしょうか。

ここではCircleCIにプロジェクトを作成し、簡単なスクリプトを動作させるまで行います。


CircleCIにプロジェクトを作成する

メニューの「Add Projects」をクリックして下さい。ProjectsページにGitHubのリポジトリが並んでいる筈です。

先程作成したリポジトリの「Set Up Project」ボタンをクリックします。

「Hello World」テンプレートを選択し、「Start Building」ボタンを押して下さい。


CircleCI設定ファイルを追加する

設定ファイルを手動で追加するか、自動で追加するかを聞かれます。ここでは「Add Config」ボタンを押して下さい。Pipelinesページに切り替わります。

Pipelineでは既に最初のWorkflowがwelcome/runというジョブを実行しています。問題がなければ数秒後には「SUCCESS」と表示されます。

これで連携は完了です。

GitHubを確認すると「circleci-project-setup」という名前のブランチに「.circleci/config.yml」ファイルが追加されています

またこのブランチを「master」ブランチにマージすると、同じようにジョブが実行されるようになります。


CircleCIを選ぶべきか

オープンソースから有料のWebサービスまで、CI/CDツールには実に多くの種類があり選択に苦慮されているのではないでしょうか。

CircleCIと共に候補に上がりやすいJenkinsとTravis CIと比較してみましょう。


Jenkins(ジェンキンス)との違い

まず料金面やコストについてです。

Jenkinsはオープンソースのため基本無料。一方CircleCIには無料枠がありますが、企業で本格的に導入するなら有料プランが必須です。

またJenkinsはオンプレミス型、CircleCIはクラウド型のため、運用や環境構築に必要なコストはCircleCIの方が低く抑えておけます

次に前提条件についてです。

CircleCIは様々なWebサービスとの連携が前提のツールです。各サービスやCircleCIに障害が発生すると、復旧まで待たなければなりません。

加えて必然的にオンライン環境での利用になるため、セキュリティ上オフライン環境での運用が必要なプロジェクトでは使用できません。

Jenkinsはオフライン環境で利用できる上、環境構築の前例や日本語の情報が豊富にあります。


Travis CI(トラビスシーアイ)との使い分け

Travis CIはGitHubの利用が前提です。他のGitのホスティングサービスとの連携は行なえません。

次に料金形態の区切り方が異なります。

publicリポジトリは全て無料、privateリポジトリは有料です。オープンソースのプロジェクトであればTravis CIに軍配が上がります。

CircleCIではリポジトリがpublicかprivateかではなく、AWSの無料枠のように利用上限が設定してあり、リソースの種類なども限定されます。


CI/CDツールの推移

CI/CDツールの基本的な機能はテスト・ビルド・デプロイの自動化です。最低限必要な前提知識とCI/CDツールの基本は既に説明しました。

そしてWebサービス毎に異なるのは、対応するGitホスティングサービスやCI/CDツールの型に由来する仕様の違い、細かいサービス内容です。

細かい金額や対応サービスの追加状況、処理速度に関わるスペックの変更などは特に変わりやすい部分です。

またGitHub自体も「GitHub Actions」というCI/CDツールを搭載するまでになりました。新しいCI/CDツールも登場していくでしょう。


CI/CDツールを追いかけて

CI/CDツールの動向を追いかけるには、IT系のニュースに積極的に耳を傾け、積極的に情報を獲得していかなければなりません。

各サービスのリリース情報の取得はもちろん、使い続けることが大事になります。

CircleCIはPrivateリポジトリで利用可能な無料枠もあり、個人的に利用を続けていく上で非常に使いやすいツールです。


toiroフリーランスは、SHIFTグループがプライムとして参画している独自案件をフリーランスエンジニア向けに紹介する唯一のプラットフォームサービスです。

エージェントによるサポートもありますので、ご利用を検討してみてはいかがでしょうか。