ニュースNov 4, 202611 分 READ

CircleCI Functions 登場:コーディングエージェント向けの再利用可能な CI ステップ

Kevin Adoboe

プロダクトマネージャー

CircleCI Functions のベータ版の提供を開始しました。 再利用可能なテスト済みのステップを使って、開発者とコーディングエージェントがより速く、より確実に CI パイプラインをセットアップできるようになります。

Functions は CircleCI Orb の次の進化形です。プログラミング言語のインストール、AWS 認証情報の設定、Docker のセットアップといった一般的な CI タスクを、すぐに使えるプログラムとして提供します。エージェントはこれらを検出して設定し、パイプラインを実行する前に検証できます。

社内テストでは、Functions を使うことでコーディングエージェントが動作する CI パイプラインを最大 2 倍の速さでセットアップでき、トークン使用量も約 40% 削減できました。

ベータ版はすべての CircleCI プランで無料でご利用いただけ、CircleCI が作成した 10 個の Functions が含まれています。既存の Orb はこれまでどおり動作し、移行の必要はありません。

生成する設定を減らし、より信頼性の高いパイプラインを

コーディングエージェントは数秒で CI 設定を生成できますが、すでに確立された解決策がある問題に対しても独自のコードを書いてしまうことがよくあります。Node のインストール、AWS での認証、Docker 環境の準備といった一般的なセットアップステップのために、プロジェクトごとに新しいスクリプトを作成・保守する必要はないはずです。

Orb は長年にわたり、開発者が一般的な CI セットアップステップを書き直さずに済むよう支援してきました。しかし Orb は、主に人が手作業で設定を書くことを前提に設計されています。Orb のコマンドは通常シェルスクリプトを実行するため、エージェントはパイプラインを実行するまで、セットアップステップが機能するかどうかを判断できないことがよくあります。私たちのテストでは、Functions がない場合、エージェントは約半数のケースで利用可能な Orb を使わずに独自のセットアップスクリプトを生成していました。

Functions は、エージェントにより良い出発点を提供します。各 Function は、明確に定義された入力を持つビルド済みのテスト済みコードで、一般的な CI タスクを処理します。エージェントは CircleCI CLI とその組み込み MCP サーバーを通じて適切な Function を見つけて設定に組み込み、変更をプッシュする前にエラーを検出できます。開発者にとっては、レビュー、デバッグ、保守が必要なカスタムコードが減ります。

Node プロジェクトでの Claude Code セッション。プロンプトでは、CircleCI CLI の CircleCI Functions を使って CircleCI をセットアップし、設定を検証するよう指示しています。Claude Code は github.com/circleci-functions/setup-node@v0.4.0 で setup-node を宣言し、22 行の .circleci/config.yml を作成します。この設定には cimg/base:current 上の test ジョブが 1 つあり、コードをチェックアウトし、node-version-file を package.json に設定して setup-node を実行し、npm test を実行します。最後に、circleci config validate で設定が有効であることを報告しています。

エージェントはカスタムのセットアップスクリプトを生成する代わりに、既存の Function を使って有効な設定を作成します。その結果、開発者がレビューする変更は、より小さく理解しやすいものになります。

CircleCI Functions の仕組み

Functions は CircleCI の設定に自然に組み込めます。functions: ブロックで Function を宣言し、任意のジョブから名前で呼び出します。

以下は、setup-node を使って Node をインストールし、テストスイートを実行するパイプラインの例です。

version: 2.1

functions:
  setup-node: github.com/circleci-functions/setup-node@v0.4.0

jobs:
  test:
    docker:
      - image: cimg/base:current
    steps:
      - checkout
      - setup-node:
          with:
            node-version: "22"
      - run: npm test

workflows:
  main:
    jobs:
      - test

functions ブロックで Function のバージョンを固定し、ジョブでは目的の Node.js バージョンを指定して setup-node を呼び出します。インストール用のスクリプトを別途用意する必要はありません。

一般的にシェルスクリプトを実行する従来の Orb コマンドとは異なり、Functions は Linux、macOS、Windows 向けにビルドおよびテストされたコンパイル済みプログラムを実行します。CircleCI は、各ジョブのオペレーティングシステムとアーキテクチャに合ったバイナリをダウンロードします。

Functions は、日々の CI 作業にも実用的な改善をもたらします。

  • パイプラインの実行前に設定エラーを検出できます。 Function の入力が無効な場合は、問題箇所を特定し、受け付けられる入力を一覧表示する具体的なエラーが表示されます。
  • プラットフォームをまたいで一貫した動作が得られます。 Functions は、サポート対象の各オペレーティングシステム向けにビルドおよびテストされています。
  • 障害の診断にかかる時間を短縮できます。 シェルスクリプトのエラーを開発者が読み解く必要はなく、わかりやすいエラーが何が問題だったのかを示します。
  • コンパイル後の設定を小さく保てます。 Functions では、大きな Orb 設定ブロックが展開されることはありません。私たちのテストでは、Node のセットアップステップのコンパイル後の設定が、同等の Orb コマンドと比べて約 7 分の 1 になりました。

すべての Function は、厳密に指定された変更不可能なバージョンを使用します。@latest や @v1 のようなエイリアスは使えないため、公開済みのバージョンが予期せず変わることはありません。新しいバージョンを採用する準備ができたら、circleci function update を実行してください。

手作業で設定を書く開発者も、CircleCI 言語サーバー (LSP) を活用できます。LSP は、Function のオートコンプリート、入力候補の表示、新しいバージョンが利用可能になったときの通知に対応しています。

ステップに組み込まれた依存関係のキャッシュ

setup-node や setup-go などの言語セットアップ用の Functions は、ダウンロードしたものをステップ自体の中でキャッシュします。一部の Orb では restore_cache と save_cache のステップを自分で別途配置する必要があり、ジョブが正常に完了しなかった場合はキャッシュが破棄されるため、原因がはっきりしないままビルドが遅くなることがあります。

Functions は、既存の CircleCI キャッシュストレージを使用します。これは save_cache と restore_cache で使われているのと同じストレージで、保存と復元のステップを別途用意する必要はありません。ジョブが失敗した場合や、タイムアウトまたはキャンセルされた場合でも、キャッシュは保持されます。

キャッシュはデフォルトで有効です。ステップでキャッシュを無効にするには、cache を false に設定します。

- setup-node:
    with:
      node-version: "22"
      cache: false

キャッシュを有効にしたままにしておくと、2 回目以降の実行では Node.js を再ダウンロードせず、キャッシュから復元します。

コーディングエージェントが CI を正しく設定するためのツール

各 Function には、型、必須パラメーター、デフォルト値、有効な値など、入力に関する機械可読な定義が含まれています。これらの定義は Function のコードから直接生成されるため、常に実際の動作と一致します。

エージェントは CircleCI CLI とその組み込み MCP サーバーを通じて、Function のカタログにアクセスできます。開発者もターミナルで同じコマンドを使用できます。

# Browse available functions
circleci function list

# Inspect a function and its inputs
circleci function get setup-node

# Add a function to your configuration
circleci function add setup-node

get コマンドは、受け付けられる入力とその型、デフォルト値、説明を表示します。エージェントと開発者は、Function を正しく設定するために必要な情報を得られます。

circleci function get setup-node のターミナル出力。github.com/circleci-functions/setup-node と、Node.js と必要に応じてプロジェクトの依存関係をインストールし、それぞれのダウンロードをキャッシュするという説明、バージョン v0.4.0、引数の表が表示されています。表には node-version (string)、node-version-file (string)、mirror (string、デフォルトは https://nodejs.org/dist)、mirror-token (string)、cache (bool、デフォルトは true) が、それぞれの説明とともに記載されています。

add コマンドは、バージョンを固定した Function の宣言を .circleci/config.yml に書き込みます。エージェントはジョブを設定したら、プッシュする前に作業内容を確認できます。

circleci config validate

エージェントがサポートされていない引数 (この例ではスペルミスのある node-verison) を使った場合、検証によって問題が特定され、受け付けられる入力が一覧表示されます。エージェントは、パイプラインを実行する前に設定を修正できます。

circleci config validate のターミナル出力。1 回目の実行は、node-verison が setup-node の引数ではないため失敗し、エラーには有効な引数として cache、mirror、mirror-token、node-version、node-version-file が表示されています。sed コマンドでスペルを修正した後の 2 回目の実行では、設定ファイルが有効であることが報告されています。

エージェントは、パイプラインの実行中に設定ミスに気付くのではなく、プッシュする前に修正できます。開発者は、生成されたセットアップスクリプトをデバッグすることなく、レビューして承認できる設定を受け取れます。

Orb を置き換えるのではなく、Orb を発展させる Functions

Orb は引き続き CircleCI の重要な要素です。Orb はコマンド、ジョブ、Executor をパッケージ化できるのに対し、Functions はジョブ内でタスクを実行する再利用可能なコマンドに特化しています。

同じパイプラインで Functions と Orb を併用できます。移行の必要はなく、Orb の非推奨化も予定されていません。CircleCI は今後も両方の開発を続けていきます。

エージェントが、正常に動作している Orb を自動的に Functions に置き換えることはありません。既存のパイプラインでステップを追加または更新する際に Functions を使うようエージェントに指示することもできますが、ベータ期間中は新しいプロジェクトから始めることをお勧めします。

ベータ版で利用できる 10 個の Functions

最初のリリースには、言語、開発環境、ツールのセットアップといった一般的な用途をカバーする、CircleCI がメンテナンスする 10 個の Functions が含まれています。

Function 用途
setup-node Node.js をセットアップ
setup-python Python をセットアップ
setup-go Go をセットアップ
setup-ruby Ruby をセットアップ
setup-java Java をセットアップ
setup-dotnet .NET をセットアップ
setup-aws AWS ツールを設定
setup-docker Docker をセットアップ
setup-browser-tools ブラウザーテストツールをインストール
setup-github-cli GitHub CLI をセットアップ

現在提供している Functions は、対応する Orb のすべての機能をまだカバーしていません。ベータ版へのフィードバックを集めながら、対応範囲の拡大を優先的に進めていきます。

エージェントによる検出と設定には、CircleCI CLI バージョン 1.8.0 以降が必要です。

Functions の今後の開発にご協力ください

Functions をベータ版としてリリースしたのは、実際の開発ワークフローでどのように機能するかを把握するためです。特に、Orb にはあって Functions にはまだない機能、エージェントが適切な Functions をどの程度確実に見つけて使えるか、チームでの導入の妨げになりうる要因について、ご意見をお待ちしています。

フィードバックは Functions ベータ版フィードバックスレッドでお寄せください。

また、次のような機能の追加にも取り組んでいます。

  • カスタム Functions: 組織内で Functions を作成・共有できるようにします。
  • ステップの出力: ステップ間で構造化された結果を受け渡せるようにします。
  • ローカル実行: 開発マシン上で Functions を実行できるようにします。
  • カタログの拡充: CircleCI がメンテナンスする Orb の機能を、さらに Functions に取り込みます。

皆さまからのフィードバックは、次にリリースする機能の優先順位付けに役立てさせていただきます。

CircleCI Functions を今すぐお試しください

まずは CircleCI CLI をインストールしてください。

Claude Code の場合は、CLI の組み込み MCP サーバーに接続します。

claude mcp add -s user circleci -- circleci mcp start

Cursor、VS Code、Claude Desktop の場合は、次のコマンドを使用します。

circleci mcp cursor enable

cursor の部分は、お使いの環境に合わせて vscode または claude に置き換えてください。

接続したら、Functions を使って新しいプロジェクトに CircleCI をセットアップするようエージェントに依頼してください。エージェントが適切なステップを見つけてパイプラインを設定し、プッシュする前に設定を検証します。

導入方法の詳細は、CircleCI Functions のドキュメントをご覧ください。

CircleCI を初めてご利用になる場合は、無料アカウントを作成して、次のプロジェクトで Functions をお試しください。

よくある質問

Orb から Functions に移行する必要はありますか?

いいえ。Orb は引き続きサポートされており、移行の必要も非推奨化の予定もありません。同じ設定内で Functions と Orb を併用できます。

Function と Orb の違いは何ですか?

Orb は、コマンド、ジョブ、Executor を含む再利用可能な CI 設定をパッケージ化したものです。Functions は、明確に定義された入力を持つコンパイル済みのテスト済みプログラムとして再利用可能なコマンドを提供し、パイプラインを実行する前に検証できます。

CircleCI Functions の料金はいくらですか?

Functions はベータ期間中は無料で、すべての CircleCI プランでご利用いただけます。

ベータ版ではどの Functions を利用できますか?

CircleCI が作成した次の 10 個の Functions を利用できます:setup-go、setup-node、setup-python、setup-ruby、setup-java、setup-dotnet、setup-aws、setup-docker、setup-browser-tools、setup-github-cli。最新のカタログを確認するには、circleci function list を実行してください。

独自の Functions を作成できますか?

現時点ではできません。ベータ版には、CircleCI がメンテナンスする Functions が含まれています。組織内で Functions を作成・共有する機能は、今後のリリースで提供予定です。

コーディングエージェントはどのように Functions を見つけて使用するのですか?

エージェントは CircleCI CLI とその組み込み MCP サーバーを通じて Functions を検出し、サポートされている入力を確認して、パイプラインを実行する前に設定を検証できます。