CircleCI(サークルシーアイ)はDevOps向けに設計された最新のCI/CDツールで、実装したプログラムを迅速に「テスト」「ビルド」および「デプロイ」までを一貫して自動化することができます。また、CircleCIはGithubとの連携が可能で、プログラムコード改修後は迅速に「テスト」「ビルド」「デプロイ」を行うことができます。
この記事では、
・CI/CDとは
・CircleCIとは
・CircleCIの環境構築
について、解説していきます。
CI/CDとは何か?
この項目では、CircleCIを知る上での前提知識、CI/CDツールでできることについて解説していきます。前提知識として、CircleCIはCI/CDツールということで、まずは「CI」「CD」「Git」について解説していきます。
CI:continuous Integration
「CI」はContinuous Integrationの略で、テストや実装したプログラムコードに欠陥がないか検証するといった静的コード解析などの作業を自動化し、継続的に実行する手法のことをいいます。(継続的インテグレーション)開発者はプログラムコードを所定の場所へマージするだけで良く、システムの品質担保や開発作業の効率化を図れることがメリットです。
CD:Continuous Delivery
「CD」はContinuous Deliveryの略で、各環境(開発、検証、本番などのサーバ環境)へのデプロイ作業を自動化し、継続的に実行する手法のことをいいます。(継続的デリバリー)「CI」を拡張した手法ともいわれ、検証環境や本番環境へのデプロイ作業は「CI」で自動化した作業の次に続けて行われます。
Git:Command Line Interface
「Git」はCLI(Command Line Interfaceの略)から所定のコマンドを実行し、プログラムコードをバージョン管理するツールです。SourceTreeやGitKrakenはGUIツール上から実行できるもので、GitHubやBitbucketはWebサービス(Gitホスティングサービス)上から実行できるものです。また「Git」は、他のWebサービスとの連携やプロジェクト管理といった機能を備えています。
クラウド型のCI/CDツールはGitのWebサービスの側面を活かして、様々なサービスとの連携やバージョン管理、プロジェクト管理を行うことができます。
CI/CDツールでできること
CI/CDツールは「テスト」「ビルド」「デプロイ」を自動化することができるツールです。
テスト
近年のシステム開発は、テストの自動化が重要な位置を占めており、現状ほとんどのフロントエンドやバックエンドのフレームワークには、自動テストをコマンドから実行する機能が標準で装備されています。
IT技術は日々進化しており、自動テストがなければプログラミング言語やフレームワークといったものがバージョンアップしたことによりシステムエラーが発生し、エラーを解消するために膨大な時間がかかってしまいます。
CI/CDツールを利用することでテスト作業を自動化することができますので、バージョンアップした際の不測の事態を回避することが可能です。
ビルド
動的テストやデプロイを自動化するために、対象のプログラムをビルドする必要があります。CI/CDツールを利用することでビルド作業を自動化することができます。
ただし静的コード解析や文法チェックなどの静的テストは、ビルド実行しなくてもプログラムを実行することは可能です。
デプロイ
近年、日本でもアジャイル開発が広まるようになり、ひと昔前に行っていたマンパワーで行う随時デプロイ作業が面倒になってきました。CI/CDツールを利用することでデプロイ用のスクリプトを設定し、Gitのホスティングサービス上でプログラムコードを自動デプロイすることができます。
CircleCIとは
この項目では、CircleCIでできること、CircleCIの特徴、CircleCIの機能、Jenkinsとの違い、CircleCIの導入事例について解説していきます。
CircleCIでできること
CircleCIはクラウド型のCI/CDツールであり、「VCS連携機能」「テスト・ビルド・デプロイの自動化機能」「各種通知ツールとの連携機能」を行うことができます。
VCS(バージョン管理システム)連携機能
CircleCIはGitHubやBitbucketなどのGitホスティングサービスが利用できます。
「テスト」「ビルド」「デプロイ」の対象となるプログラムコードに対して変更が行われると、GitHubやBitbucketなどのGitホスティングサービスがCircleCIに通知を送ります。通知を受けたCircleCIは変更後のプログラムコードを取得し、あらかじめ設定された自動化スクリプトが実行されます。
テスト・ビルド・デプロイの自動化機能
CircleCIのメイン機能となります。
先ほど解説した「VCS連携機能」と、このあと解説する「各種通知ツールとの連携機能」は、「テスト・ビルド・デプロイの自動化機能」の延長となります。
各種通知ツールとの連携
SlackやChatworkなどのチャット通知、メール通知、ブラウザのプッシュ通知などが利用できます。この機能がテスト終了に時間のかかったプログラムコードをお知らせしてくれることにより、開発者は他の作業に集中することができます。
またチャットツールを使って最新のテスト結果やデプロイ状況をプロジェクトメンバーへ共有するようなことを仕組化することで作業の効率化が図れます。
CircleCIの特徴
CircleCIには「SaaS型のCI/CDサービス」「CI/CDに必要なリソース機能が充実」といった特徴があります。
SaaS(Software as a Service)型のCI/CDサービス
CI/CDツールには「オンプレミス型」「クラウド型」の2種類があります。
CircleCIには「CircleCI Cloud」と「CircleCI Server」の2種類の製品が提供されており、「CircleCI Cloud」がSaaS型のクラウドサービス、「CircleCI Server」がオンプレミス型の製品となります。
CI/CDに必要なリソース機能が充実
CircleCIは様々なリソース機能を提供しています。例えば、仮想CPU数やメモリ容量を選択できたり、多数のプログラミング言語やWebフレームワークにも対応しています。
またDocker(コンテナ仮想化ツール)を全面的にサポートしていて、Dockerfileからのイメージ・ビルドやDockerレイヤーキャッシュの利用ができ、Dockerイメージを指定するだけでDockerコンテナ環境を利用することが可能です。
CircleCIの機能
CircleCIには「ダッシュボード機能」「ジョブ制御機能」「CLIツール機能」といった機能があります。
ダッシュボード機能
CircleCIのダッシュボード機能は画面が見やすく、ユーザビリティが高い機能となっています。
例えば、Jobsからプロジェクトの一覧や最新のジョブの実行結果などが確認できるようになっていて、一覧や結果詳細のリンクからGitホスティングサービスの対象のコミットやコミッターが参照できるようになっています。
またInsightsからビルドステータスやパフォーマンスのグラフを表示することができます。
ジョブ制御機能
Workflowを使って複数のジョブを組み合わせ、順次実行・並列実行などを行うことができます。例えば時間がかかるジョブを分割して、並行実行することで処理時間を短縮することができます。
また、cronを使ったジョブの定期実行など、自動化したいジョブの実行指定を行うことも可能です。
Jenkins(ジェンキンス)との違い
CircleCIを導入検討するにあたり、オンプレミス型のCI/CDツールで有名なJenkinsと「料金面」「コスト面」「前提条件」で比較してみます。
料金面について、Jenkinsはオープンソースのため基本無料で利用できます。一方、CircleCIは無料プランがありますが、本格的な導入を検討しているのであれば有料プランがオススメです。
次にコスト面について、Jenkinsはオンプレミス型に対してCircleCIはクラウド型があり、環境構築や運用に必要なコストはCircleCIの方が低く抑えることができます。
最後に前提条件について、CircleCIは様々なWebサービスとの連携が前提となり、連携しているサービスやCircleCIで障害が発生した場合に復旧まで利用ができなくなります。またクラウド型の場合はオンライン環境での利用となるため、セキュリティ上の関係でオフライン環境下のプロジェクトでは利用できません。一方、Jenkinsはオフライン環境で利用でき、環境構築のノウハウや日本語での情報が豊富にあります。
CircleCIの導入事例
CircleCIは海外企業や日本企業を含めて数千社の企業に導入されていて、「DeNA」や「LINE」「Paypay」といった有名企業やスタートアップ企業にも導入されています。
CircleCIを導入してみての感想としては、
・問い合わせのレスポンスが早い
・導入事例やノウハウがネット上に多く公開されているため、情報収集がしやすい
・Jenkinsに比べ利便性が高く、導入が容易にできる など
といったコメントが上げられています。
ほとんどの企業が当初Jenkinsを導入していて、その後、CircleCIへ移行しているようです。
CircleCIの環境構築
この項目では、CircleCIを使った開発フロー、GitHubとの連携方法、プロジェクトの追加方法、ローカル環境での確認方法、クラウド環境での確認方法について解説していきます。
CircleCIを使った開発フロー
CircleCIを使った開発フローを以下に記載します。
見てわかるように、GitHubやBitbucketなどのGitホスティングサービスと連携して「テスト」「ビルド」「デプロイ」を自動化します。
GitHubとの連携方法
GitHubアカウントを持っていない場合、事前にアカウント登録が必要です。
GitHubにログインした状態でCircleCIのサイトから以下画面キャプチャに沿って連携を行ってください。
プロジェクトの追加方法
GitHubとの連携ができたら、GitHubのプロジェクト(リポジトリ)をCircleCIに追加します。
ローカル環境での確認方法
Circle CLIのインストール
ローカル環境でジョブを実行するには「Circle CLI」を利用します。
「Circle CLI」はDockerのコンテナ上で実行されるため、ローカル環境にDockerをインストールしていない場合は事前にDockerのインストールが必要です。
以下のコマンドで「Circle CLI」をインストールします。
正常にインストールされると、以下のメッセージが表示されます。
以下のメッセージが表示された場合、コマンド「circleci update install」でアップデートを行います。
config.ymlの作成
ジョブを実行するためにアプリディレクトリに「.circleci」フォルダと、そのフォルダ配下に「config.yml」ファイルを作成する必要があります。
以下のコマンドを順に実行します。
コマンド「ls -al」で、状態を確認します。
「config.yml」の定義内容のサンプルは以下の通りです。
config.ymlのバリデーションチェック
コマンド「circleci config validate」を実行して、「config.yml」ファイル内の文法や設定に関するエラーがないかを確認します。
以下の画面キャプチャのメッセージが表示されると、エラーがない正しい文法や定義となります。
以下のメッセージが表示されるとエラーがある状態となりますので、エラー原因を確認し修正が必要です。
ジョブの実行
コマンド「circleci local execute」を実行し「Success!」と表示されると、ローカル環境でのジョブ実行は成功となります。
クラウド環境での確認方法
※「CircleCI Cloud」を導入した際の確認方法になります。
ローカル環境での確認が終わったら、GitHubへ変更したプログラムコードをPushします。
Push後は、CircleCIのサイトで自動実行が行われているかを確認します。
以下の画面キャプチャにある「Success」の部分が「Running」になっていると、「テスト」が自動実行が行われていることになります。
「Success」の部分が「Failed」になっているとエラーとなっているので、エラーの原因を確認し再実行が必要となります。
まとめ
この記事では、CircleCIを知る上でのCI/CDの概要から始まり、CircleCIの概要、CircleCIの環境構築について解説しました。
この記事を参考に今後のCircleCIの導入検討にお役立ていただけると幸いです。