こんにちは!日々のデプロイ作業、お疲れ様です。
「ステージング環境にはすぐ反映させたいけれど、本番環境へのデプロイは慎重に行いたい。でも、手動でファイルをアップロードしたり、複雑なコマンドを叩くのはもうミスのもとだし疲れた……」
そんな悩みを抱えていませんか?
今回は、モダンな開発現場の必須スキルである「CircleCIを使った複数環境への自動デプロイ」について、初心者の方にもすんなり理解できるように、優しく、かつ本質的な部分までしっかりと解説していきます。
これをマスターすれば、あなたのチームの開発スピードは劇的に上がり、デプロイ前の「あの緊張感やヒヤリとする瞬間」から解放されますよ。ぜひ最後までついてきてくださいね!
—
1. CircleCIってなに?(ツールの役割と基本思想)
そもそも CircleCI とは、一言で言うと「あなたの代わりにコードのテストやビルド、デプロイを24時間いつでも正確に実行してくれるロボット執事」のようなものです。
開発の流れを思い出してください。
1. コードを書く
2. GitHubなどのリポジトリにプッシュする
3. テストをする
4. サーバーにデプロイする
この「3と4」の作業、人間がやると「あ、テストし忘れた」「本番環境の接続先を間違えた!」というヒューマンエラーが必ず起きます。CircleCIは、GitHubにコードがプッシュされた瞬間を察知し、あらかじめプログラミングされた手順書(これをワークフローと呼びます)に従って、自動でテストからデプロイまでを完璧にこなしてくれます。
—
2. 最初の第一歩:CircleCIの基礎セットアップ
まずは、CircleCIをあなたのプロジェクトで動かせるように準備しましょう。難しい手順はいりません。
① GitHubと連携する
1. [CircleCIの公式サイト](https://circleci.com/)にアクセスし、GitHubアカウントでサインアップ(ログイン)します。
2. 「Create Project」ボタンを押し、デプロイを自動化したいリポジトリを選択します。
② プロジェクトに設定ファイルを作る
CircleCIは、プロジェクトのルートディレクトリ(一番上の階層)にある `.circleci/config.yml` という設定ファイルを見て動きます。
まずは、ここから始めましょう。プロジェクトフォルダの中に `.circleci` というフォルダを作り、その中に `config.yml` というファイルを作成してください。
—
3. 精度高い「Hello World」的な動作確認
いきなり複雑なデプロイを書く前に、まずはCircleCIが正しく動くかどうかの「挨拶代わり(Hello World)」のパイプラインを作ってみましょう。
`.circleci/config.yml` に以下のコードを書いてみてください。
version: 2.1 # CircleCIのバージョン指定
ジョブ(実行する作業の単位)を定義する場所
jobs:
say-hello:
docker:
- image: cimg/base:2023.03 # 動かすための基本的な環境(コンテナ)を指定
steps:
- checkout # GitHubからコードをダウンロードする
- run:
name: 挨拶をするテスト
command: echo “こんにちは!CircleCIの自動化の世界へようこそ!”
ワークフロー(どの順番で、いつジョブを実行するか)を定義する場所
workflows:
hello-workflow:
jobs:
- say-hello
これを保存して、GitHubにプッシュ(`git push`)してみてください。
CircleCIのダッシュボードを覗いてみると……緑色のマークで「Success」と表示され、ログを開くと「こんにちは!CircleCIの自動化の世界へようこそ!」と出力されているはずです。
おめでとうございます!これであなたのプロジェクトは、立派にCI/CD(継続的インテグレーション・継続的デリバリー)の第一歩を踏み出しました!
—
4. 本題:ステージング・本番環境の切り分け術
さて、ここからが本番です。「stagingブランチにプッシュされたらステージング環境へ」「mainブランチ(またはリリース用タグ)にプッシュされたら本番環境へ」というように、状況に応じてデプロイ先を自動で切り替える仕組みを作ります。
ここで鍵になるのが、CircleCIの「Filters(フィルター)」という強力な機能です。
構成案:環境ごとのデプロイフロー
- ステージング環境(AWS S3やFirebase Hostingなどを想定)
- トリガー: `develop` ブランチへのマージ
- 動作: 自動テストをクリアした後、ステージング用サーバーへデプロイ
- 本番環境
- トリガー: `main` ブランチへのマージ(または `v` といったリリース用タグ)
- 動作: 自動テストをクリアした後、本番用サーバーへ慎重にデプロイ
実践!高度な config.yml の書き方
以下の設定ファイルを参考に、あなたのプロジェクトに合わせて書き換えてみてください。
version: 2.1
再利用可能なパーツ(環境変数の代わりや共通処理)を定義できますが、今回はシンプルにいきます
jobs:
# 1. テストを行う共通ジョブ
test:
docker:
- image: cimg/node:18.16.0 # 例としてNode.js環境を使用
steps:
- checkout
- run:
name: 依存関係のインストール
command: npm install
- run:
name: 自動テストの実行
command: npm test
# 2. ステージング環境へのデプロイジョブ
deploy-to-staging:
docker:
- image: cimg/node:18.16.0
steps:
- checkout
- run:
name: ステージング環境へデプロイ
command: |
echo “staging環境へのデプロイ処理を実行中…”
# 例: firebase deploy –token $FIREBASE_TOKEN_STAGING などのコマンドが入ります
echo “デプロイ完了!”
# 3. 本番環境へのデプロイジョブ
deploy-to-production:
docker:
- image: cimg/node:18.16.0
steps:
- checkout
- run:
name: 本番環境へデプロイ
command: |
echo “【警告】本番環境へのデプロイを実行します!”
# 例: aws s3 sync ./dist s3://my-production-bucket などのコマンドが入ります
echo “本番デプロイ完了!お疲れ様でした!”
ワークフローで「いつ、どのジョブを動かすか」を分岐させる
workflows:
version: 2.1
deploy-pipeline:
jobs:
- test:
# テストはすべてのブランチのプッシュで走らせるのが鉄則です
filters:
branches:
only:
- develop
- main
- deploy-to-staging:
requires:
- test # テストが成功した時だけ実行
filters:
branches:
only: develop # developブランチの時だけ発動!
- deploy-to-production:
requires:
- test # テストが成功した時だけ実行
filters:
branches:
only: main # mainブランチの時だけ発動!
この設定のポイント解説
1. `requires: – test` の魔法
デプロイの前に必ず `test` ジョブを挟んでいます。これにより、「バグを含んだコードがうっかりステージングや本番にデプロイされてしまう事故」を100%防ぐことができます。
2. `filters.branches.only` による完全な住み分け
- `develop` ブランチにコードが入ると、自動的に `deploy-to-staging` が動きます。
- `main` ブランチにコードが入ると、自動的に `deploy-to-production` が動きます。
人間がブランチを意識して手動でデプロイ先を選ぶ必要はもうありません。Gitの操作だけで、CircleCIが勝手に判断してくれます。
—
5. 安全な運用のためのプロの知見(裏技と注意点)
ここで、現場で役立つちょっとしたアドバイスを授けておきます。
- パスワードやトークンは絶対にコードに書かない!
AWSのアクセスキーやFirebaseのトークンなどを、`config.yml`に直接書いてはいけません。CircleCIのプロジェクト設定画面にある 「Environment Variables(環境変数)」 に登録し、シェル変数(`$AWS_ACCESS_KEY_ID` など)として安全に呼び出しましょう。
- 本番デプロイには「承認ステップ(Approval)」を挟むのもアリ
CircleCIには、`type: approval` という機能をワークフローに組み込むことで、「本番デプロイの直前で、人間のボタンポチによる承認を待たせる」という安全装置が作れます。「自動化したいけれど、本番を押す瞬間だけは自分の目で確認したい!」という場合は、ぜひ調べて導入してみてください。
—
まとめ
いかがでしたでしょうか?
CircleCIを使った複数環境への自動デプロイは、一見難しそうに見えますが、基本の仕組み(ジョブ、ワークフロー、フィルター)を理解してしまえば、驚くほどシンプルに構築できます。
これをマスターすれば、毎日のデプロイ作業にかかっていた時間とストレスがごっそり削ぎ落とされ、本来の「新しいコードを書く楽しさ」に集中できるようになりますよ。
あなたの開発ライフが、もっと快適でエキサイティングなものになりますように!