【2025年最新】CircleCI完全ガイド|初心者から上級者まで使える設定例と効率化テクニック
CircleCIは、現代のソフトウェア開発に欠かせないCI/CDプラットフォームです。この記事では、CircleCIの基本から高度な活用方法まで、実践的な設定例とともに詳しく解説します。
CircleCIとは?なぜ選ばれるのか
CircleCIは、継続的インテグレーション(CI)と継続的デプロイメント(CD)を提供するクラウドベースのプラットフォームです。GitHubやBitbucketと連携し、コードの変更を自動的にテスト・ビルド・デプロイできます。
CircleCIの主な特徴
- 高速な実行速度:並列実行によるビルド時間短縮
- 柔軟な設定:YAML形式による直感的な設定
- 豊富なOrbs:再利用可能な設定パッケージ
- スケーラビリティ:プロジェクト規模に応じた拡張性
- 無料プラン:月6,000分まで無料利用可能
他のCI/CDツールとの比較
| 機能 | CircleCI | GitHub Actions | Jenkins |
|---|---|---|---|
| 設定の簡単さ | ★★★★★ | ★★★★☆ | ★★☆☆☆ |
| 実行速度 | ★★★★★ | ★★★★☆ | ★★★☆☆ |
| 料金 | 従量課金 | 従量課金 | 無料 |
| 拡張性 | ★★★★☆ | ★★★★★ | ★★★★★ |
CircleCIの基本設定
1. プロジェクトのセットアップ
CircleCIを使い始めるには、プロジェクトルートに.circleci/config.ymlファイルを作成します。
# .circleci/config.yml - 基本設定
version: 2.1
jobs:
build:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run:
name: Install Dependencies
command: npm install
- run:
name: Run Tests
command: npm test
workflows:
build_and_test:
jobs:
- build
2. Node.jsプロジェクトの設定例
version: 2.1
executors:
node-executor:
docker:
- image: cimg/node:18.17
working_directory: ~/project
jobs:
test:
executor: node-executor
steps:
- checkout
- restore_cache:
keys:
- v1-deps-{{ checksum "package-lock.json" }}
- run: npm ci
- save_cache:
key: v1-deps-{{ checksum "package-lock.json" }}
paths:
- node_modules
- run: npm test
workflows:
main:
jobs:
- test
3. Python プロジェクトの設定例
version: 2.1
jobs:
test-python:
docker:
- image: cimg/python:3.9
steps:
- checkout
- run:
name: Install Dependencies
command: |
python -m venv venv
. venv/bin/activate
pip install -r requirements.txt
- run:
name: Run Tests
command: |
. venv/bin/activate
pytest
workflows:
python-workflow:
jobs:
- test-python
Orbsを使った効率化
4. Node.js Orbの活用
version: 2.1
orbs:
node: circleci/node@5.0.3
workflows:
test-and-build:
jobs:
- node/test:
test-results-path: test-results
- node/run:
npm-run: build
requires:
- node/test
5. Docker Orbの活用
version: 2.1
orbs:
docker: circleci/docker@2.2.0
workflows:
build-and-deploy:
jobs:
- docker/build:
image: myapp
tag: latest
- docker/push:
image: myapp
tag: latest
requires:
- docker/build
6. AWS Orbの活用
version: 2.1
orbs:
aws-s3: circleci/aws-s3@3.0.0
jobs:
deploy:
docker:
- image: cimg/python:3.9
steps:
- checkout
- aws-s3/sync:
from: dist/
to: 's3://my-static-site'
workflows:
deploy-workflow:
jobs:
- deploy:
filters:
branches:
only: main
高度な設定パターン
7. 並列実行による高速化
version: 2.1
jobs:
test:
docker:
- image: cimg/node:18.17
parallelism: 4
steps:
- checkout
- run: npm ci
- run:
name: Run Tests in Parallel
command: |
TESTFILES=$(circleci tests glob "test/**/*.js" | circleci tests split --split-by=timings)
npm test $TESTFILES
workflows:
parallel-test:
jobs:
- test
8. マトリックス実行
version: 2.1
jobs:
test:
parameters:
node-version:
type: string
docker:
- image: cimg/node:<< parameters.node-version >>
steps:
- checkout
- run: npm ci
- run: npm test
workflows:
matrix-test:
jobs:
- test:
matrix:
parameters:
node-version: ["16.20", "18.17", "20.5"]
9. 条件付き実行
version: 2.1
jobs:
frontend-test:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run:
name: Check if frontend changed
command: |
git diff --name-only HEAD~1 | grep "^frontend/" || circleci step halt
- run: cd frontend && npm test
workflows:
conditional:
jobs:
- frontend-test
デプロイメント設定
10. ステージング・本番環境への段階的デプロイ
version: 2.1
jobs:
deploy-staging:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run: npm run deploy:staging
deploy-production:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run: npm run deploy:production
workflows:
deploy-workflow:
jobs:
- deploy-staging:
filters:
branches:
only: develop
- hold-for-approval:
type: approval
requires:
- deploy-staging
- deploy-production:
requires:
- hold-for-approval
filters:
branches:
only: main
11. Docker イメージのビルドとプッシュ
version: 2.1
jobs:
build-and-push:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 20.10.14
- run:
name: Build Docker Image
command: |
docker build -t myapp:$CIRCLE_SHA1 .
echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin
docker push myapp:$CIRCLE_SHA1
workflows:
docker-workflow:
jobs:
- build-and-push
テスト効率化のテクニック
12. テスト結果の保存と表示
version: 2.1
jobs:
test:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run: npm ci
- run:
name: Run Tests with JUnit Reporter
command: npm test -- --reporter=xunit --outputFile=test-results/junit.xml
- store_test_results:
path: test-results
- store_artifacts:
path: test-results
13. カバレッジレポートの生成
version: 2.1
jobs:
coverage:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run: npm ci
- run:
name: Generate Coverage Report
command: npm run test:coverage
- store_artifacts:
path: coverage
- run:
name: Upload to Codecov
command: |
curl -Os https://uploader.codecov.io/latest/linux/codecov
chmod +x codecov
./codecov
セキュリティとベストプラクティス
14. 環境変数とシークレット管理
version: 2.1
jobs:
secure-deploy:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run:
name: Deploy with Secrets
command: |
echo "API_KEY=$API_KEY" > .env
echo "DB_PASSWORD=$DB_PASSWORD" >> .env
npm run deploy
15. ワークスペースを使ったジョブ間データ共有
version: 2.1
jobs:
build:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run: npm run build
- persist_to_workspace:
root: .
paths:
- dist/
deploy:
docker:
- image: cimg/node:18.17
steps:
- attach_workspace:
at: .
- run: npm run deploy
workflows:
build-and-deploy:
jobs:
- build
- deploy:
requires:
- build
パフォーマンス最適化
16. キャッシュ戦略の最適化
version: 2.1
jobs:
optimized-build:
docker:
- image: cimg/node:18.17
steps:
- checkout
- restore_cache:
keys:
- v2-deps-{{ checksum "package-lock.json" }}
- v2-deps-
- run: npm ci
- save_cache:
key: v2-deps-{{ checksum "package-lock.json" }}
paths:
- node_modules
- ~/.npm
- restore_cache:
keys:
- v1-build-{{ .Environment.CIRCLE_SHA1 }}
- run: npm run build
- save_cache:
key: v1-build-{{ .Environment.CIRCLE_SHA1 }}
paths:
- dist/
17. リソース使用量の最適化
version: 2.1
jobs:
resource-optimized:
resource_class: large # CPUとメモリを増強
docker:
- image: cimg/node:18.17
steps:
- checkout
- run: npm ci
- run: npm run build:production
モニタリングと通知
18. Slack通知の設定
version: 2.1
orbs:
slack: circleci/slack@4.10.1
jobs:
notify-build:
docker:
- image: cimg/base:stable
steps:
- slack/notify:
event: fail
template: basic_fail_1
- slack/notify:
event: pass
template: success_tagged_deploy_1
workflows:
build-with-notification:
jobs:
- notify-build
19. メトリクス収集
version: 2.1
jobs:
collect-metrics:
docker:
- image: cimg/node:18.17
steps:
- checkout
- run:
name: Collect Build Metrics
command: |
echo "Build started at: $(date)" > metrics.txt
npm run build
echo "Build completed at: $(date)" >> metrics.txt
- store_artifacts:
path: metrics.txt
トラブルシューティング
よくある問題と解決策
問題1: ビルドが遅い
# 解決策: 並列実行とキャッシュを活用
jobs:
fast-build:
parallelism: 4
docker:
- image: cimg/node:18.17
steps:
- checkout
- restore_cache:
keys:
- deps-{{ checksum "package-lock.json" }}
- run: npm ci
- save_cache:
key: deps-{{ checksum "package-lock.json" }}
paths: [node_modules]
問題2: メモリ不足エラー
# 解決策: リソースクラスを変更
jobs:
memory-intensive:
resource_class: xlarge # メモリを増加
docker:
- image: cimg/node:18.17
問題3: Docker権限エラー
# 解決策: setup_remote_dockerを使用
jobs:
docker-build:
machine:
image: ubuntu-2004:202201-02
steps:
- checkout
- run: docker build -t myapp .
料金最適化
効率的なクレジット使用
version: 2.1
# 小さなジョブには軽量なリソースを使用
jobs:
lightweight-test:
resource_class: small
docker:
- image: cimg/node:18.17
# 重いジョブのみ高性能リソースを使用
heavy-build:
resource_class: large
docker:
- image: cimg/node:18.17
実行時間の最適化
# ビルド時間測定スクリプト
import time
import subprocess
def measure_build_time():
start = time.time()
subprocess.run(['npm', 'run', 'build'])
end = time.time()
print(f"Build time: {end - start:.2f} seconds")
未来に向けた発展
Machine Learning Orbsの活用
version: 2.1
orbs:
python: circleci/python@2.0.3
jobs:
ml-pipeline:
executor: python/default
steps:
- checkout
- python/install-packages:
pkg-manager: pip
- run:
name: Train Model
command: python train_model.py
- store_artifacts:
path: model.pkl
Infrastructure as Codeとの連携
version: 2.1
orbs:
terraform: circleci/terraform@3.2.0
workflows:
infrastructure:
jobs:
- terraform/plan:
path: ./terraform
- terraform/apply:
path: ./terraform
requires:
- terraform/plan
まとめ:CircleCIで開発効率を最大化
CircleCIは、その柔軟性と高性能により、現代の開発チームにとって不可欠なツールです。効果的な活用のポイントは以下の通りです:
すぐに始められる基本設定
- シンプルな設定ファイルから始める
- Orbsを活用して設定を簡素化
- 並列実行でビルド時間を短縮
- 適切なキャッシュ戦略でリソース効率化
継続的な改善プロセス
- パフォーマンス測定による最適化
- 新機能とOrbsの積極的活用
- セキュリティベストプラクティスの実践
- コスト効率の継続的監視
成功のための実践ポイント
- 段階的な機能導入
- チーム全体でのベストプラクティス共有
- 定期的な設定の見直しと最適化
- 適切なリソース選択による費用対効果の最大化
CircleCIを効果的に活用することで、開発チームの生産性向上と高品質なソフトウェアの継続的なデリバリーが実現できます。まずは基本的な設定から始めて、プロジェクトの成長に合わせて高度な機能を段階的に導入していくことをおすすめします。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座

