AIを使った開発では、30秒あれば多くのことができます。それなのに、最新の変更に対するCIのフィードバックを何分も待つのは、まるで永遠のように感じられます。
Chunkサイドカーは、CIと同じLinux環境に対してテストスイート全体を実行し、エージェント型ループの内部で直接、高速なフィードバックを得られるように設計されています。従来のCIパイプラインでは、基本的なlintエラーや失敗したユニットテストを検出するのに5分から10分かかることがあります。大きな理由の一つが環境の起動です。リモートマシンをプロビジョニングし、依存関係をインストールし、実際にテストを実行できる状態にするまでに時間がかかるのです。スナップショットを使えば、この作業を一度だけ行い、その結果をキャッシュできます。
スナップショットは、セットアップ後のサイドカー環境をそのまま固定し、CircleCIのクラウドに保存します。サイドカーはもともとフルCIパイプラインより高速に起動しますが、スナップショットを使うとその時間をさらに半分以下に短縮できます。以降の起動はすべて、ゼロからではなく、このキャッシュされた状態から始まります。
このチュートリアルでは、サイドカーを作成してスナップショットを取得し、そのスナップショットから起動し、組織全体で共有する方法を紹介します。これにより、初日から誰もが同じ高速な設定済み環境を利用できるようになります。
チュートリアル動画をご覧いただくか、以下のステップバイステップガイドに沿って進めてください。
サイドカーを使い始めたばかりですか?5分で最初のマイクロビルドを実行するもあわせてご覧ください。
前提条件
- CircleCIアカウントと個人用APIトークン。トークンはCircleCIアプリの「User Settings → Personal API Tokens」から作成できます。
- Chunk CLIをインストールするためのHomebrew。
- CircleCIの組織ID(Organization Settings → Overview)。
- GitHubリポジトリ。サンプルアプリを使って進めることもできます。
Chunkサイドカーのスナップショットでより高速なフィードバックを得る
サイドカーのセットアップはシンプルです。サイドカーを作成し、Chunkにランタイムと依存関係をインストールさせ、一度テストスイートを実行してすべてが正しく動作することを確認します。その状態をスナップショットすれば完了です。
プロジェクトをセットアップする
以下では、サイドカーをセットアップする2つの方法を紹介します。ひとつは、Claude Codeエージェントにセットアップの大部分を任せるエージェント優先のフロー、もうひとつは、Chunkサイドカーが内部でどのように動作するかを示す手動フローです。
この例で使用するデモリポジトリをダウンロードし、npmでインストールします。
git clone https://github.com/CircleCI-Public/circleci-demo-javascript-react-app
cd circleci-demo-javascript-react-app
npm install
エージェントによる自動セットアップ
Chunk CLIをインストールし、プロジェクトを初期化します。
brew install CircleCI-Public/circleci/chunk
CircleCIの個人用アクセストークンを使ってChunk CLIを認証します。次のコマンドを実行すると、トークンの入力を求められます。
chunk auth set circleci
これでChunkを初期化する準備が整いました。
chunk init
chunk initはリポジトリを読み込んでスタックを検出し、.chunk/config.jsonを書き出します。
ChunkにはCircleCIの組織IDも指定する必要があります。chunk initを実行した後に行ってください。先に設定すると上書きされてしまいます。
chunk config set orgID <your-org-id>
次に、プロジェクトでClaude Codeを開き、/chunk-sidecarスキルを実行します。
claude
/chunk-sidecar
あとはこのスキルが処理を引き継ぎます。サイドカーを作成し、ランタイムと依存関係をインストールし、検証のためにテストスイートを実行し、その結果をスナップショットします。完了すると、環境がスナップショットとして保存され、プロジェクトにコミットされ、いつでも起動できる状態になります。
これでChunk CLIがインストールされ、サイドカーがセットアップ・検証され、環境のコピーとしてスナップショットも取得できました。あとは使うだけです。
数秒でスナップショットから起動する
環境が保存されているため、新しいサイドカーではインストールをスキップできます。起動からテストスイートが正常に完了するまでの全体の時間を、次のコマンドで計測できます。
# WARM start → ~25s
time ( chunk sidecar create --org-id <your-org-id> \
--image <your-snapshot-id> && chunk validate test --remote )
スナップショットの復元は、261MBの依存関係を再インストールなしで復元するため、通常の起動よりも数秒長くかかります。新しいサイドカーからテストが正常に完了するまで、スナップショットを使った場合は約25.8秒でした。
比較のために、スナップショットを使わずにサイドカーをゼロから起動する場合の時間も見てみましょう。
# COLD start → ~59s
time ( chunk sidecar create --org-id <your-org-id> && \
chunk sidecar setup && chunk validate test --remote )
ゼロから起動した場合は約59.7秒かかりました。スナップショットを使うと、およそ2.3倍高速です。どちらの方法でも同じsyncとJestの起動コストは発生しますが、スナップショットがなくすのはインストールの部分です。
チームと共有する
スナップショットはCircleCIのクラウド上に、組織単位で保存されます。ホストするイメージファイルも、構築するレジストリも必要ありません。スナップショットを共有するということは、1つの文字列を共有することと同じです。もっともシンプルな共有方法は、そのIDをプロジェクトの設定にコミットすることです。
chunk config set validation.sidecarImage <your-snapshot-id>
✓ Set validation.sidecarImage to <your-snapshot-id>
IDがリポジトリにコミットされていれば、同じ組織のチームメイトはプロジェクトをクローンし、chunk sidecar create --image <snapshot-id>を実行するだけで、インストールなしに数秒であなたが構築したのと同じ検証済み環境にたどり着けます。新しく入社したメンバーも、初日のセットアップをまるごとスキップできます。
スナップショットはAIエージェントにも使えます。validation.sidecarImageはchunk validateが起動するイメージなので、エージェントの自動チェックもこのスナップショットから開始されます。すべてのエージェントが、あなたが設定済みの環境で自分の作業を検証できるようになります。
イメージも永久に固定されているわけではありません。新しいパッケージの追加やランタイムのバージョンアップなど、重要な依存関係の変更があった場合は、再インストールして再度スナップショットを取得し、validation.sidecarImageを新しいIDに向け直せます。日常的なコードの変更はsyncでまかなえるため、新しいスナップショットは不要です。
手動でのサイドカースナップショットのセットアップ(任意)
サイドカーのスナップショットを手動でセットアップしたい場合は、以下の手順に従ってください。すでにエージェントに上記のセットアップを任せた場合は、このセクションはスキップして構いません。
CLIをインストールします。
brew install CircleCI-Public/circleci/chunk
リポジトリ内でchunk initを実行すると、プロジェクトを読み込んで設定ファイルを書き出します。
chunk init
Detected repository: CircleCI-Public/circleci-demo-javascript-react-app
Detected package manager: npm
Detected command: test (npm test)
✓ Wrote .chunk/config.json
✓ Wrote .claude/settings.json
✓ Project initialized
Chunkはnpmとjestのスタックを検出し、npm testを検証コマンドとして登録します。
ゼロから手動でサイドカーを作成する
まず、サイドカーを作成し、何がインストールされた状態かを確認します。
chunk sidecar create --org-id <org-id> # REPLACE <org-id> with your actual CircleCI organization ID
chunk validate --remote --cmd "cat /etc/os-release | head -1; node --version"
✓ Created sidecar (d07eb7ca…)
PRETTY_NAME="Ubuntu 24.04.4 LTS"
sh: 1: node: not found
ここからはChunkが処理を引き継ぎます。chunk sidecar setupはプロジェクトを読み込み、ランタイムと依存関係をインストールして、準備の整った環境を返します。
chunk sidecar setup
Running setup step "system": curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs …
✓ Step "system" complete
Running setup step "install": npm install
added 1672 packages, and audited 1673 packages in 40s
✓ Step "install" complete
Setup complete. Verify the sidecar is working correctly, then snapshot it:
chunk sidecar snapshot create --name <snapshot-name>
setupでは、Chunkが2つのステップで作業を行います。まず、プロジェクトのCircleCI設定で指定されたNodeのバージョンをインストールするsystemステップ、次に.chunk/config.jsonに基づいて依存関係のインストールを実行するinstallステップです。
約1,673個のパッケージのインストールには、コールドキャッシュの状態で約40秒かかりました。サイドカーはCIと同じLinux環境で動作するため、ここでパスしたテストはCI上でもパスします。
環境を手動でスナップショットとして保存する
依存関係のインストールが完了し、テストが通ったら、環境全体をキャプチャできます。
chunk sidecar snapshot create --name node-react-snapshot
✓ Created snapshot <your-snapshot-id>
✓ Deleted sidecar <your-sidecar-id>
スナップショットは、その環境を1つのアーティファクトに変えます。つまり、必要な依存関係がすべてインストールされたサイドカーの状態を固定したイメージであり、次回の起動はすでに完了している作業からスタートできます。
知っておくべき点が2つあります。まず、snapshot createはイメージの保存が完了すると、元となったサイドカーを削除します。そのため、以降はスナップショットIDが操作の起点になります。
次に、スナップショットは組織内で参照可能な状態になるため、認証情報をイメージに埋め込むことは絶対に避けてください。認証情報は実行時に注入するようにしてください。
インナー開発ループを高速化する
このデモでは、インストールをスキップすることで34秒のセットアップ時間を節約できました。依存関係が非常に多い本番プロジェクトでは、この差は数分単位に広がります。それをすべての開発者、すべてのブランチ、すべてのセッションに掛け合わせると、毎週何時間ものエンジニアリング時間を取り戻せることになります。
Chunkサイドカーのスナップショットを使えば、そのセットアップコストは最初に設定した人が一度だけ支払えばよく、それ以降は発生しません。
開発ループを加速する準備はできましたか? Chunkサイドカーは、無料プランを含むすべてのCircleCIプランで今すぐご利用いただけます。CircleCIアカウントにサインアップし、Chunk CLIをインストールして、残しておく価値のある環境をスナップショットしましょう。