こんにちは!日々のCI/CDパイプラインの構築やメンテナンス、本当にお疲れ様です。
「毎回似たようなYAMLをコピペしている気がする…」
「セキュリティスキャンやSlack通知の設定、どのプロジェクトでも同じなのに毎回書いてるな…」
そんなモヤモヤを感じたことはありませんか?もし心当たりがあるなら、今日があなたの開発ライフスタイルを変える記念すべき日です。
今回は、CircleCIの真骨頂であり、コード量を劇的に削減しながらパイプラインの品質を底上げする魔法の機能「Orbs(オーブ)」を完全マスターしていきましょう。
これを使いこなせるようになると、何百行もあった設定ファイルがスッキリと片付くだけでなく、チーム全体のCI/CD標準化が一瞬で完了します。優しく、かつ現場で即役立つノウハウをたっぷりとお伝えしますね。
—
1. CircleCI Orbs(オーブ)とは何か?
一言で言うと、Orbsとは「再利用可能なCI/CD設定のパッケージ」です。
通常、CircleCIの設定ファイル(`.circleci/config.yml`)には、ジョブ(jobs)、コマンド(commands)、Executor(実行環境)などを詳細に記述する必要があります。しかし、これらをゼロから毎回書くのは车の再発明(車輪の再発明)ですし、何よりメンテナンスが悪夢になります。
そこで登場するのがOrbsです。公式やサードパーティ(AWS、Docker、Slack、Snykなど)が提供する、あるいは自社内で共有する「あらかじめパッケージ化された設定の塊」を、1行で自分のパイプラインに召喚(インポート)できるのです。
Orbsを使うと何が嬉しいのか?
1. 圧倒的なコード量の削減:数十行のボイラープレートコードが、たった1行に凝縮されます。
2. メンテナンス性の向上:共通処理のバージョンを上げるだけで、全プロジェクトの挙動を安全にアップデートできます。
3. 車輪の再発明の防止:AWSへのデプロイや脆弱性スキャンなど、誰もが書く定番処理を車輪の再発明をせずに安全に導入できます。
—
2. 既存のOrbsを探してみよう
世の中には、すでに数千もの素晴らしいOrbsが存在します。まずは「どこでどうやって探すのか」を知りましょう。
公式の検索ポータルである [CircleCI Orb Registry](https://circleci.com/developer/orbs) にアクセスしてください。ここには、公式(CircleCI certified)からパートナー企業(AWS, GCP, GitHub等)、そしてコミュニティ製まで、あらゆるOrbが揃っています。
よく使う定番Orbsの例
- `circleci/node`: Node.jsのインストールやキャッシュ管理を爆速で行う
- `circleci/aws-s3`: AWS S3へのファイルのアップロード・同期
- `circleci/slack`: ビルドの成功・失敗をSlackへ通知する
—
3. 基本の「Hello World」:既存のOrbを使ってみる
まずは、既存のOrbを使って、どれだけ簡単にコード量が減るかを体感してみましょう。ここでは、Node.jsのプロジェクトで依存関係をインストールしてテストを実行する設定を書いてみます。
従来の「Orbなし」の絶望的な世界
Orbを使わない場合、Node.jsのセットアップやキャッシュ戦略だけでもこれだけの記述が必要です(一部省略していますが長くなります)。
version: 2.1
jobs:
build:
docker:
- image: cimg/node:18.16.0
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum “package-json.lock” }}
- v1-dependencies-
- run: npm install
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum “package-json.lock” }}
- run: npm test
Orbを使った「天国のように美しい」世界
これを `circleci/node` Orbを使って書き換えてみましょう。
version: 2.1
1. 外部のOrbを召喚する(バージョンも指定可能)
orbs:
node: circleci/node@5.1.0
jobs:
build:
docker:
- image: cimg/node:18.16.0
steps:
- checkout
# 2. Orbが用意してくれた「魔法のコマンド」を呼び出すだけで完了!
- node/install-packages:
pkg-manager: npm
- run:
name: テストの実行
command: npm test
workflows:
sample-workflow:
jobs:
- build
見てください!あの面倒なキャッシュのキー設定やリストアのロジックが消え去り、`node/install-packages` という直感的な1行に置き換わりました。これぞ、コード量を劇的に減らすオルブの力です。
—
4. 独自のOrbを作成してチームで共有する(極限の自動化)
「既存のOrbは便利だけど、うちの会社のデプロイ手順や独自テストツールにも対応させたいな…」
そう思ったあなたへ。ここからが本番、「オリジナルのOrbの作り方」です。
社内で共通化したい処理(例えば、独自のセキュリティチェック、社内Artifactサーバーへのプッシュ、定型化されたSlack通知など)をOrbとして切り出してみましょう。
手順1: ローカルでOrbの雛形を検証する
CircleCIのCLIツールを使うと、Orbの開発が劇的に楽になります。まだインストールしていない場合は、以下のコマンドで導入しておきましょう(Macの場合)。
brew install circleci
手順2: オーブの設定ファイルを書く(`orb.yml`)
社内共通の「挨拶とビルド前の準備」を行うカスタムコマンドを持ったOrbを作ってみましょう。
version: 2.1
description: >
社内標準のビルド前処理と通知をカプセル化する、我がチームのためのカスタムOrb。
オーブ内で提供するコマンドの定義
commands:
setup-and-greet:
description: “環境を整えてチームへの挨拶メッセージを出力する”
parameters:
env_name:
type: string
default: “staging”
description: “デプロイ先の環境名”
steps:
- run:
name: 共通環境変数の読み込みと挨拶
command: |
echo “==========================================”
echo ” [INFO] << parameters.env_name >> 環境のビルドを開始します”
echo ” [INFO] Node.js Version: $(node -v)”
echo “==========================================”
- run:
name: セキュリティ前提チェックのダミー実行
command: echo “Checking company security policies…”
オーブ内で提供する再利用可能なジョブ(必要に応じて)
jobs:
standard-check:
description: “全プロジェクト共通の静的解析ジョブ”
docker:
- image: cimg/base:stable
steps:
- checkout
- run: echo “Running company-wide linter…”
手順3: 開発用Orbとしてパブリッシュ(登録)する
CircleCIでは、Orbをプライベート(あるいはパブリッシュ)に管理するために、CircleCIの「ネームスペース(Namespace)」を使用します。
1. まだならネームスペースを登録:`circleci namespace create <あなたの組織名> github
2. オーブを作成:`circleci orb create <あなたの組織名>/
3. バージョンをパブリッシュ:
circleci orb publish orb.yml <あなたの組織名>/
これで、あなたのチーム専用のOrbがクラウド上に誕生しました!
—
5. 自作のOrbを実際のプロジェクトで使ってみる
先ほど作った自作Orbを、別プロジェクトの `.circleci/config.yml` から呼び出してみましょう。
version: 2.1
自作したOrbをインポート(開発中の場合は開発用バージョン @dev:first 等も指定可能)
orbs:
my-company: <あなたの組織名>/
jobs:
deploy-staging:
docker:
- image: cimg/node:18.16.0
steps:
- checkout
# 自作Orb内のコマンドを呼び出す
- my-company/setup-and-greet:
env_name: “staging”
- run:
name: 本番ビルド
command: npm run build
workflows:
company-pipeline:
jobs:
- deploy-staging
これだけで、複数のリポジトリに散らばっていた「お決まりの初期化処理」を一箇所(Orb側)で集中管理できるようになります。もし処理を変更したくなったら、Orb側を修正して新しいバージョンをリリースするだけ。全リポジトリのコードを書き換える必要はもうありません!
—
まとめ:今日から始めるOrb生活
今回は、CircleCIのOrbsの基礎から、既存のものの探し方、そしてチームの生産性を爆上げする「自作Orbの作り方」までを一気に駆け抜けました。
- 「毎回同じYAMLを書いているな」と思ったら、まずはOrb Registryで探す。
- チーム特有の定型処理は、`orb.yml`に切り出して自作Orbとしてプライベートに共有する。
これをマスターすれば、あなたの書くCI/CD設定コードは驚くほどスリムになり、変更に強く、美しく生まれ変わります。毎日のパイプライン構築・メンテ作業が、きっと劇的に楽になりますよ。
ぜひ、次のプロジェクトのYAMLファイルを開いて、まずは `orbs:` の一行を追加することから始めてみてくださいね。あなたのDevOpsライフがより快適になることを応援しています!