コンテンツにスキップ
NexusArchitect Docs
日本語
Esc
移動開く⌘Jプレビュー
このページの内容

implement-backlog

サブエージェント(役割ごとの小さなAI)を難しさに応じて使い分けながら、実装を進めるスキルの説明

このスキルは、全体の中でもいちばん複雑です。ここではサブエージェント(Claude Codeが作業を分担させる、役割ごとの小さなAI)を使います。さらに、作業の難しさに応じて使うAIモデル(haiku/sonnet/opus)を切り分ける、モデル階層化という工夫が特徴のスキルです。

コマンドと主なオプション

/architect:implement-backlog [item] [--epic=<id>] [--build-context] [--review-epic[=<id>]] [--out=<path>] [--confirm-versions|--no-confirm-versions] [--refresh-versions] [--dry-run] [--auto] [--lang=en|ja]
オプション 意味
item 実装対象。I1.2.3#<iid>・URLで指定する。省略時はstatus::doingのアイテムを拾い、確認を求める
--epic 対象Epicを絞り込む
--build-context shared-contextパックを作り直す
--review-epic[=<id>] Epic全体を見直すロールアップレビューを実行する
--out コードの書き出し先(source_root)を明示する
--confirm-versions / --no-confirm-versions 依存ライブラリのバージョンをユーザーに確認するかどうか
--refresh-versions 記録済みのバージョン判断(work/version-decisions.json)を捨てて再調査する
--dry-run コードを書かず、何を実装するかだけ報告する
--auto 途中の確認を省略する
--lang コメントやレポートの出力言語

処理の流れ

Step 1(shared-contextパック構築)だけは初回のみ実行され、Step 2以降はIssueがなくなるまでループします。 ノードの色は担当するモデルを示します(色の意味は下の「モデル割り当てのルール」を参照)。 色が付いていないノードは、サブエージェントに任せず、このスキル自体(sonnet)が処理します。

Step 0: manifestとプラットフォームの解決

backlog-manifest.jsonというファイルを読み込みます。そして、Issueを管理する場所がGitLabかGitHubか、どちらのプラットフォームを使うかを決めます。

Step 1: shared-contextパックの構築(初回のみ)

最初の1回だけ行う作業です。sonnetのサブエージェントサブエージェント役割ごとに切り出して動かす小さなAI。親は結果だけを受け取ります。用語集で見るを複数同時に動かして、Shared-Contextパック(後の作業で共通して使う、あらかじめまとめておく情報)を作ります。

Step 2: Issue選択(ユーザーに確認)

次に取りかかるIssueを選びます。すでに作業中のもの(status::doing)があれば、それを優先します。なければ、まだ着手していないもの(status::todo)から確認します。着手する前に、選んだIssueでよいかユーザーに確認します。

Step 3: コンシステンシーダイジェスト収集

haikuのサブエージェントを使って、コードを読むだけの調査を行います。この調査結果を「コンシステンシーダイジェスト」と呼び、実装の前に必要な情報をまとめたものです。ファイルの書き換えは行いません。

Step 4: ブランチ作成 + ミニプラン策定

feature/<issue-id>-<slug>という名前で、作業用のブランチ(コードの履歴を枝分かれさせたもの)を作ります。そのうえで、opusのサブエージェントが、実装の小さな計画(ミニプラン)を立てます。

Step 5: 実装

sonnetサブエージェントが、意味のあるまとまり(コヒーレントな単位)ごとに、実際のコードを複数同時に実装していきます。

Step 5b: ドキュメント生成

/architect:generate-docsを実行して、今回の変更に合わせてREADMEやdocs/を更新します。更新分はコードと同じブランチにコミットされるので、同じPR/MRでまとめてレビューされます。ドキュメントに書かれた内容とコードのずれ(ドリフト)が見つかった場合は、その場で書き換えずにIssueへfindingとして追記します。

Step 5c: 品質ゲート(8段階)

/architect:verify-implementation --gateを実行します。ビルド、ユニット/契約/統合テスト、SAST(ソースコードを静的に解析して脆弱性を探す検査)、依存ライブラリの脆弱性スキャン、APIセキュリティレビュー、設計との一致確認を、8段階で順に通します。

各段階の合否は「コマンドが実際に走って成功したか」で決まります。「たぶん大丈夫」は合格になりません。実行しなかった段階も、理由(not-applicable / not-configured / skipped-by-user)つきで必ず記録されます。**1つでもFAILがあると、Step 6には進みません。**ブロッカーはStep 5の実装担当に差し戻され、ゲートを再実行します。人間がレビューを頼まれるのは、このゲートを通過したコードだけです。

Step 6: Epic整合性チェック

opusサブエージェントが、今回の実装がEpicEpic複数のIssueをまとめる、いちばん大きな作業単位。用語集で見る全体の目的とずれていないかを判定します。この結果は、--review-epicというコマンドで複数のIssueをまとめて確認するとき(ロールアップ)に使われます。

Step 7: 進捗記録

haikuサブエージェントが、これまでの進み具合を伝えるコメントの下書きを作ります。

Step 8: 次のアイテムへ

Step 2(Issue選択)に戻り、次のIssueに取りかかります。

モデル割り当てのルール

「できる中でいちばん安いモデルを使う」という方針です。上の図の色は、この表のモデルに対応しています。

作業 モデル 図の色 理由
コンテキスト収集(Explore)、進捗コメントの下書き作成 haiku ファイルを読んで要約するだけの、単純な作業だから
shared-contextパック生成、コード実装、ドキュメント生成 sonnet 決まった構造に沿って文書やコードを組み立てる作業だから
ミニプラン策定、Epic整合性判定、Epicロールアップ opus Epic全体の目的や決まりごとと合っているか、深く判断する必要があるから

ブランチ名の共有契約

feature/<issue-id>-<slug>という名前のルールは、implement-backlogが最初にブランチを作るときに使います。 そのあとreview-issuemerge-issueという別のスキルが、同じ名前のブランチを見つけてレビューやマージを 行います。つまりこの命名ルールは、スキル同士が暗黙のうちに守っている共通の決まりごとです。

Output Locationの検証

コードを書き出す場所(source_root)が、Gitの管理対象外になっていないかを、書き込む前に必ず確認します。

そのために使うのがgit check-ignore -q <path>というコマンドです。これは、指定したパスが.gitignoreの対象 (Gitが追跡しないファイル・フォルダ)になっていないかを調べるコマンドです。コマンドの実行結果(終了コード、 exit code)が1であれば、「管理対象外にはなっていない」、つまり安全に書き込めるという意味です。

generated/というディレクトリ(フォルダ)は、自動生成される出力専用の場所で、多くのプロジェクトで .gitignoreの対象になっています。ここには書き込みません。

git check-ignore -q backend
echo "check-ignore exit: $?"   # 1なら、Gitの管理対象外になっていない=書き込んでも安全

依存バージョンの決定

ライブラリのバージョン番号を、AIが記憶(学習した知識)から思い込みで書いてしまうと、実際には存在しない バージョンや、すでに古くなったバージョンを指定してしまう事故が起こります。これを防ぐために、 @rules/dependency-versions.mdというルールファイルには「バージョン番号を記憶から書くな、必ずレジストリ (パッケージの配布元)で調べよ」と定められています。

実際の例として、Maven Central(Javaのライブラリを配布しているサイト)からmaven-metadata.xmlという ファイルをcurlコマンドで直接取得し、最新のバージョンを確認した例があります。このとき、Spring Bootの 4.1.0は「まだパッチ(細かい修正版)が出ていない、リリースされたばかりのマイナーバージョン」だったため、 あえてより枯れた(実績があり安定している)4.0.7を選びました。この判断の理由はwork/version-decisions.json というファイルに記録されています。

このページは役に立ちましたか?