GitHub Spec Kitで複数のコーディングエージェントを使い分けたい

記事タイトルとURLをコピーする

はじめに

こんにちは、久保(賢)です。

本記事ではGitHub Spec Kit(以後Spec Kit) を使用して複数のコーディングエージェントを利用する方法2種類についてご紹介します。

Spec Kit とは

Spec Kit は、GitHub が提供している Spec Driven Development (SDD) をサポートするツールです。

GitHub - github/spec-kit: 💫 Toolkit to help you get started with Spec-Driven Development · GitHub

Spec Kit については弊社過去ブログもご参照ください。

blog.serverworks.co.jp

やりたいこと

現状私の環境では、開発作業を行う際に Claude Code, Codex, Kiro CLI を主に利用しています。

メインはClaude Codeを利用しつつも、一定の利用上限があったり(組織として)、場合によっては異なるLLMによるレビューを行いたいケースにおいて複数のコーディングエージェントを同じプロジェクトで使い分けたいケースがあります。

Spec Kitは執筆時点では基本的に1つのプロジェクトで利用するコーディングエージェントは1種類として統合することを想定しているように見受けられますが、工夫次第で複数のコーディングエージェントを同一プロジェクト内で利用することが可能です。

多少強引ですが同時併用しやすい方法1と、公式コマンドで切り替える方法2の2種類をご紹介します。

対象の環境

  • Spec Kitのバージョン: 0.8.2.dev0
    ※ mainブランチからインストールした開発版です。公開時点の最新stable releaseとは挙動が異なる可能性があります。
  • OS: Mac
  • Script Type: sh
  • 対象のコーディングエージェント:
    • Claude Code
    • Codex
    • Kiro CLI

Script Typeについて、本記事ではMac環境のため --script sh を指定しています。PowerShellを利用する場合は --script ps を指定します。

前提知識 Spec Kitの仕組み

基本

Spec KitはSDDをサポートするために、スラッシュコマンドやスキルによって各フェーズの処理を行うためのプロンプトを提供し、さらに各種処理を効率よく、かつ確実に行うためのスクリプトや仕様書のテンプレートファイルなどを配置します。

多くのエージェントでは /speckit.specify のようなスラッシュコマンドとして、Agent Skill対応のエージェントでは speckit-specify のような Agent Skill として提供されます。

最初に以下のようにinitサブコマンドで対象コーディングエージェント、スクリプト環境(shell/PowerShell)を指定してプロジェクトに統合することで、プロジェクト内にコーディングエージェントの種類に応じた必要ファイルが配置されます。

specify init --integration <コーディングエージェントの種類> --script <スクリプト環境> --here
--integrationは以前は--aiオプションでしたが、執筆時点では--integrationオプションに変更されています。このあたりは日進月歩どころか分進日歩という勢いなので、最新のドキュメントをご確認ください。

コーディングエージェントごとの違い

コーディングエージェント側の仕様に合わせて、Agent Skillsとして配置されたり、プロンプトのショートカットとして配置されたりします。
今回の対象では以下のとおりです。

  • Claude Code: Agent Skills(.claude/skills/)
  • Codex: Agent Skills(.agents/skills/)
  • Kiro CLI: Prompts(.kiro/prompts/)

方法1: 利用したいコーディングエージェントごとにinitする

設定方法

この方法は、利用したいコーディングエージェントの数だけ init コマンドを実行して、複数の統合を設定する方法です。
おそらく複数コーディングエージェントを利用している多くの方はこの方法で運用されているのではないかと思います。

公式に複数のコーディングエージェントを同一プロジェクト内で利用する方法としてサポートされているわけではないため、今後のアップデートで動作しなくなる可能性があります。あくまで執筆時点での方法としてご紹介します。
specify integration install <コーディングエージェントの種類> コマンドで複数の統合をインストールする方法もありますが、すでに統合が設定済みの場合エラーになります。これは Issue#2257 で議論されています。

シンプルに、以下のように利用したいコーディングエージェントの種類ごとに init コマンドを実行するだけです。

specify init --integration claude --script sh --here
specify init --integration codex --script sh --here
specify init --integration kiro-cli --script sh --here

プロジェクトフォルダは以下のようになります。(.gitは省略しています)

% tree -a -L 3 -I .git
.
├── .agents
│   └── skills
│       ├── speckit-analyze
│       ├── speckit-checklist
│       ├── speckit-clarify
│       ├── speckit-constitution
│       ├── speckit-implement
│       ├── speckit-plan
│       ├── speckit-specify
│       ├── speckit-tasks
│       └── speckit-taskstoissues
├── .claude
│   └── skills
│       ├── speckit-analyze
│       ├── speckit-checklist
│       ├── speckit-clarify
│       ├── speckit-constitution
│       ├── speckit-git-commit
│       ├── speckit-git-feature
│       ├── speckit-git-initialize
│       ├── speckit-git-remote
│       ├── speckit-git-validate
│       ├── speckit-implement
│       ├── speckit-plan
│       ├── speckit-specify
│       ├── speckit-tasks
│       └── speckit-taskstoissues
├── .kiro
│   └── prompts
│       ├── speckit.analyze.md
│       ├── speckit.checklist.md
│       ├── speckit.clarify.md
│       ├── speckit.constitution.md
│       ├── speckit.implement.md
│       ├── speckit.plan.md
│       ├── speckit.specify.md
│       ├── speckit.tasks.md
│       └── speckit.taskstoissues.md
├── .specify               # Spec Kitの共通ファイル群。複数initしても多くは変更なし
│   ├── extensions
│   │   ├── .registry
│   │   └── git
│   ├── extensions.yml
│   ├── init-options.json   # 最後にinitしたコーディングエージェントの種類が記録される。複数initしても最後のものに上書きされる
│   ├── integration.json    # 同上
│   ├── integrations
│   │   ├── claude.manifest.json
│   │   ├── codex.manifest.json
│   │   ├── kiro-cli.manifest.json
│   │   └── speckit.manifest.json  # インストールした日時のみ更新される
│   ├── memory
│   │   └── constitution.md
│   ├── scripts
│   │   └── bash
│   ├── templates
│   │   ├── checklist-template.md
│   │   ├── constitution-template.md
│   │   ├── plan-template.md
│   │   ├── spec-template.md
│   │   └── tasks-template.md
│   └── workflows
│       ├── speckit
│       └── workflow-registry.json
├── AGENTS.md   # Codex初期化時にプレースホルダのみで生成される
└── CLAUDE.md   # Claude Code初期化時にプレースホルダのみで生成される

利用イメージ

特に意識することはなく、それぞれのコーディングエージェントでSpec Kitを利用できます。
以前はClaude用には integrations/claude/scripts/update-context.sh といった固有のラッパースクリプトがあったのですが現在はそれも必要なくなり、コーディングエージェント間の環境差異は小さくなっているようです。

Claude Code

> /speckit-specify Issue#45を実装したい

Codex

> $speckit-specify Issue#45を実装したい

Kiro CLI

> '@speckit.specify Issue#45を実装したい'

※ Kiro CLIはプロンプトを埋め込む形のため、引数を認識させるためにシングルクォートで括る必要があります。

方法2: 利用したいコーディングエージェントごとにswitchする

specify integration switch <コーディングエージェントの種類> コマンドを利用して、利用したいコーディングエージェントの種類を切り替える方法です。

こちらは公式に用意されている切り替え方法ですが、複数エージェントを同時に有効化する方法ではありません。

この方法は、利用するコーディングエージェント用の統合をオンデマンドに切り替えて利用する方法であり、スイッチするとスイッチ前のコーディングエージェント用の統合は削除されます。
そのため、Spec Kit用のファイル群をGitHubリポジトリにコミットしてチームで共有している場合は採用しにくい方法かもしれません。

切り替え例

Claude Code用に初期化した環境です。

% tree -a -L 3 -I .git
.
├── .claude
│   └── skills
│       ├── speckit-analyze
│       ├── speckit-checklist
│       ├── speckit-clarify
│       ├── speckit-constitution
│       ├── speckit-git-commit
│       ├── speckit-git-feature
│       ├── speckit-git-initialize
│       ├── speckit-git-remote
│       ├── speckit-git-validate
│       ├── speckit-implement
│       ├── speckit-plan
│       ├── speckit-specify
│       ├── speckit-tasks
│       └── speckit-taskstoissues
├── .specify
│   ├── extensions
│   │   ├── .registry
│   │   └── git
│   ├── extensions.yml
│   ├── init-options.json
│   ├── integration.json
│   ├── integrations
│   │   ├── claude.manifest.json
│   │   └── speckit.manifest.json
│   ├── memory
│   │   └── constitution.md
│   ├── scripts
│   │   └── bash
│   ├── templates
│   │   ├── checklist-template.md
│   │   ├── constitution-template.md
│   │   ├── plan-template.md
│   │   ├── spec-template.md
│   │   └── tasks-template.md
│   └── workflows
│       ├── speckit
│       └── workflow-registry.json
└── CLAUDE.md

Codexに切り替えます。

% specify integration switch codex
Uninstalling current integration: claude
  Removed 9 file(s)9 shared infrastructure file(s) already exist and were not updated:
    .specify/scripts/bash/common.sh
    .specify/scripts/bash/setup-plan.sh
    .specify/scripts/bash/check-prerequisites.sh
    .specify/scripts/bash/create-new-feature.sh
    .specify/templates/constitution-template.md
    .specify/templates/checklist-template.md
    .specify/templates/tasks-template.md
    .specify/templates/spec-template.md
    .specify/templates/plan-template.md
To refresh shared infrastructure, run specify init --here --force or specify integration upgrade --force.
Installing integration: codex

✓ Switched to integration 'Codex CLI'

こうなりました。一部speckit-git-commitなどが残っていますが、CLAUDE.md.claude/skills/のファイルは削除され、Codex用のファイル(.agents/skills/, AGENTS.md)が新たに配置されていることがわかります。

% tree -a -L 3 -I .git
.
├── .agents
│   └── skills
│       ├── speckit-analyze
│       ├── speckit-checklist
│       ├── speckit-clarify
│       ├── speckit-constitution
│       ├── speckit-implement
│       ├── speckit-plan
│       ├── speckit-specify
│       ├── speckit-tasks
│       └── speckit-taskstoissues
├── .claude
│   └── skills
│       ├── speckit-git-commit
│       ├── speckit-git-feature
│       ├── speckit-git-initialize
│       ├── speckit-git-remote
│       └── speckit-git-validate
├── .specify
│   ├── extensions
│   │   ├── .registry
│   │   └── git
│   ├── extensions.yml
│   ├── init-options.json
│   ├── integration.json
│   ├── integrations
│   │   ├── codex.manifest.json
│   │   └── speckit.manifest.json
│   ├── memory
│   │   └── constitution.md
│   ├── scripts
│   │   └── bash
│   ├── templates
│   │   ├── checklist-template.md
│   │   ├── constitution-template.md
│   │   ├── plan-template.md
│   │   ├── spec-template.md
│   │   └── tasks-template.md
│   └── workflows
│       ├── speckit
│       └── workflow-registry.json
└── AGENTS.md

おわりに

Spec Kitで複数のコーディングエージェントを利用する方法2種類についてご紹介しました。 方法1で実践していますが今のところ特に問題はなく、複数のコーディングエージェントを同一プロジェクト内で利用できています。(あくまで対象の3種の場合の一例ですが)

最後に、2つの方法を簡単に比較します。

方法 特徴 向いているケース 注意点
方法1: 複数回 init 各エージェント向けファイルを同一プロジェクトに配置する 複数のエージェントを日常的に使い分けたい 公式に複数同時利用としてサポートされている方法ではない
方法2: integration switch 公式の切り替え機能を使う 一時的に別エージェントへ切り替えたい 切り替え前の統合ファイルが削除されるため、チーム共有リポジトリでは扱いに注意

Spec Kitは非常に速いペースでアップデートされているため、今後より公式に複数のコーディングエージェントを同一プロジェクト内で利用する方法が提供される可能性もあります。

今後のアップデートに期待しつつ、引き続き複数のコーディングエージェントを活用していきたいと思います。

参考

久保 賢二(執筆記事の一覧)

猫とAWSが好きです。