取り組みの背景:なぜAgentKit 2.0が受託開発の「ゲームチェンジャー」なのか
受託開発の請け負い会社やフリーランスプログラマーにとって、生産性=年収 です。
月50万円の案件を完納するのに通常40営業時間かかるなら、時給換算は12,500円。しかし同じ40時間かかる案件を、Antigravity AgentKit 2.0を使えば 13営業時間 で完納できます。残り27時間で他案件を並行受注でき、月収が3倍に跳ね上がります。
AgentKit 2.0の基本:マルチエージェント設計の考え方
AgentKit 2.0の最大の強みは、複数のエージェントを役割分担させ、オーケストレーション(指揮)できる 点です。
従来の「ChatGPT 1つでコード生成」ではなく、以下のように役割を分けます:
- 要件定義エージェント — クライアントのヒアリング結果から仕様書を自動生成
- 実装エージェント — フロントエンド・バックエンド・DB設計を並行処理
- テストエージェント — ユニットテスト・統合テスト・E2Eテストを自動生成
- レビューエージェント — コードの品質・セキュリティ・パフォーマンスをチェック
- デプロイエージェント — CloudflareやVercel、AWSへの自動デプロイを実行
各エージェントは独立したコンテキストウィンドウを持つため、「前のエージェントの失敗に引きずられない」という利点があります。1つのチャットで全員が議論するのではなく、並行処理 できるのです。
案件受注からキックオフまでのワークフロー
受託案件を受け取ったら、まず以下のステップを踏みます。
- Step 1: クライアントとの初期ヒアリング — 予算・納期・技術スタック・既存システムの有無を確認
- Step 2: タスク分解 — 大きな案件を「機能単位」と「技術層別」に細分化(tasks.mdを作成)
- Step 3: エージェント割り当て — tasks.mdに基づいて、どのエージェントが何を担当するか決定
- Step 4: agents.mdの初期化 — 各エージェントのロール・得意分野・制約条件を定義
- Step 5: キックオフミーティング — Antigravity上でエージェント間の協力ルールを確認
tasks.md の例(月50万円のWebアプリ案件)
# Project: クリニック予約管理システム v1.0
## 機能要件
- [Admin] 患者情報管理(登録・更新・削除)
- [Frontend] 予約カレンダーUI(日時選択→確定フロー)
- [Backend] 予約確保API(同時アクセス時の競合制御)
- [Admin] メール送信(予約確認・キャンセル時)
## 技術スタック
- Frontend: Next.js 16 + TypeScript + TailwindCSS
- Backend: Node.js + Hono + PostgreSQL
- Hosting: Cloudflare Workers + Vercel
- DB: Supabase
- Auth: Supabase RLS
## 納期
- Phase 1(基本機能): 10営業日
- Phase 2(追加機能): 5営業日
- 本番デプロイ: 2営業日
## リスク & 制約
- 既存顧客管理DB(SQLServer 2019)との連携が必要
- クライアントシステムの保守性重視(単体テスト>エレガント性)
agents.md の設計:役割別エージェント構成の雛形
AgentKit 2.0では、プロジェクト直下に agents.md を配置し、各エージェントを宣言します。以下は実際の案件で使ったテンプレートです。
# Project Agents
## 1. Requirement Agent(要件定義エージェント)
**Role**: クライアント要件をシステム設計に翻訳
**Responsibility**:
- Figmaデザインから画面フロー・UI仕様を抽出
- ビジネスロジック(予約ルール・キャンセル規則など)を明文化
- APIエンドポイント仕様書を自動生成
**Constraints**:
- クライアント提供資料(メール・仕様書・Figma)のみ入力源とする
- 自分で意思決定しない(不明点はImplementation Agentに質問)
**Tools**:
- File reading (Figma JSON export)
- Markdown editing (仕様書生成)
- API specification (OpenAPI format)
---
## 2. Frontend Agent(フロントエンド実装エージェント)
**Role**: Next.js + TailwindCSS でUI構築
**Responsibility**:
- 予約カレンダーコンポーネント(React hooks + Zustand)
- フォーム検証・エラーハンドリング
- 医療機関向けアクセシビリティ対応(WCAG 2.1 AA)
- E2Eテスト(Playwright)
**Constraints**:
- TailwindCSS のみ使用(UI frameworks 禁止)
- コンポーネント単位の分割(最大100行)
- 仕様外の技術判断をしない(Backend Agent と協調)
**Files**:
- src/components/
- src/pages/
- e2e/
---
## 3. Backend Agent(バックエンド実装エージェント)
**Role**: Node.js + Hono API 開発
**Responsibility**:
- 予約確保・キャンセルAPI(トランザクション保証)
- メール送信キューイング(Firebase Cloud Tasks or Bull)
- SQLServer レガシーDB との ETL(毎日夜間)
- Rate limiting & 認証(Supabase JWT)
**Constraints**:
- PostgreSQL (Supabase) を Single Source of Truth とする
- トランザクション必須(テスト時は自動ロールバック)
- ログ出力は日本語NG(英語で統一、ローカライズは client-side)
**Files**:
- src/api/
- src/db/
- tests/unit/
---
## 4. QA Agent(テスト・品質保証エージェント)
**Role**: 自動テスト生成 & 品質監視
**Responsibility**:
- ユニットテスト (Jest) → Coverage 80% 以上
- 統合テスト (Supertest) → API エンドポイント
- E2Eテスト (Playwright) → ユーザーフロー
- セキュリティ監査 → OWASPトップ10チェック
**Constraints**:
- テスト実行時間は 5分以下を目安
- Mocking はデータベース層のみ
- テストコードも本体と同じ品質基準
**Files**:
- tests/
---
## 5. Deployment Agent(デプロイメントエージェント)
**Role**: 本番環境へのリリース & モニタリング
**Responsibility**:
- Vercel への自動デプロイ (Next.js)
- Cloudflare Workers へのデプロイ (API)
- 環境変数・シークレット管理
- GitHub Actions CI/CD パイプライン構築
- デプロイ後のヘルスチェック
**Constraints**:
- 本番リリースは必ず dry-run を先行実行
- ロールバック手順を docs/ROLLBACK.md に記載
- デプロイ時間は 3分以下
---
## Agent Handoff Rules(エージェント間の引き継ぎルール)
1. **Requirement → Frontend/Backend**: 仕様書(Markdown + OpenAPI)でハンドオフ
2. **Frontend → QA**: PR を作成し、QA が自動テスト実装
3. **Backend → QA**: テストスイート実行、Coverage レポート確認
4. **QA → Deployment**: テスト全パス後に Deployment Agent へ通知
5. **Deployment → Client**: デプロイ完了通知 + 動作確認チェックリスト送付
---
## Success Metrics
- コード生成エラー率: < 5%
- テストカバレッジ: 80% 以上
- デプロイ失敗率: 0%
- 納期遵守率: 100%このagents.mdを案件開始時に作成することで、各エージェントの「何をするのか」「何をしてはいけないのか」が明確になります。
実装フェーズのエージェント分業
いよいよ実装フェーズです。Antigravityの Planning Mode と Fast Mode を組み合わせます。
Planning Mode での全体設計(1営業日)
- Requirement Agent が仕様書を確定
- Frontend Agent が コンポーネント設計書を作成(UI ツリー + props インターフェース)
- Backend Agent が ERD(Entity Relationship Diagram)と API スキーマを定義
- 3者が合意に達するまで調整
この段階では コード生成は最小限 です。設計ドキュメント(Markdown + Mermaid図)に時間を使います。
Fast Mode での並行実装(5営業日)
設計がロックされたら、以下を並行処理:
- Frontend Agent: コンポーネント実装 → ローカルテスト
- Backend Agent: APIエンドポイント実装 → curl でテスト
- QA Agent: テスト作成(実装に並行して)
各エージェントの出力は src/ や tests/ フォルダに自動保存され、Git でバージョン管理されます。
コード例:並行実装時の役割分担
// Frontend Agent: src/components/AppointmentCalendar.tsx
import { useState } from 'react'
import { supabase } from '@/lib/supabase'
export const AppointmentCalendar = () => {
const [selectedDate, setSelectedDate] = useState<Date | null>(null)
const [selectedTime, setSelectedTime] = useState<string | null>(null)
const handleConfirm = async () => {
if (!selectedDate || !selectedTime) return
const { data, error } = await supabase
.from('appointments')
.insert([
{
patient_id: 'YOUR_PATIENT_ID',
appointment_date: selectedDate.toISOString(),
appointment_time: selectedTime,
},
])
if (error) console.error('Booking failed:', error)
else console.log('Booking confirmed:', data)
}
return (
<div className="space-y-4">
{/* Calendar picker UI */}
<button onClick={handleConfirm}>予約を確定する</button>
</div>
)
}// Backend Agent: src/api/appointments.ts
import { Hono } from 'hono'
import { postgres } from '@/db'
const app = new Hono()
app.post('/appointments', async (c) => {
const body = await c.req.json()
const { patient_id, appointment_date, appointment_time } = body
// Transaction: check availability + insert
const client = await postgres.connect()
try {
await client.query('BEGIN')
const existing = await client.query(
'SELECT * FROM appointments WHERE appointment_date = $1 AND appointment_time = $2 AND status = $3',
[appointment_date, appointment_time, 'confirmed']
)
if (existing.rows.length > 0) {
await client.query('ROLLBACK')
return c.json({ error: 'Time slot unavailable' }, 409)
}
await client.query(
'INSERT INTO appointments (patient_id, appointment_date, appointment_time, status) VALUES ($1, $2, $3, $4)',
[patient_id, appointment_date, appointment_time, 'confirmed']
)
await client.query('COMMIT')
return c.json({ success: true })
} catch (err) {
await client.query('ROLLBACK')
return c.json({ error: 'Database error' }, 500)
}
})
export default app// QA Agent: tests/unit/appointments.test.ts
import { describe, it, expect, beforeEach } from 'vitest'
import { supabase } from '@/lib/supabase'
describe('Appointments API', () => {
beforeEach(async () => {
// Clear test data
await supabase.from('appointments').delete().neq('id', -1)
})
it('should confirm appointment when slot is available', async () => {
const response = await fetch('/api/appointments', {
method: 'POST',
body: JSON.stringify({
patient_id: 'test-patient-1',
appointment_date: '2026-04-10',
appointment_time: '14:00',
}),
})
expect(response.status).toBe(200)
const data = await response.json()
expect(data.success).toBe(true)
})
it('should reject booking when slot is taken', async () => {
// Insert existing appointment
await supabase.from('appointments').insert([
{
patient_id: 'test-patient-2',
appointment_date: '2026-04-10',
appointment_time: '14:00',
status: 'confirmed',
},
])
const response = await fetch('/api/appointments', {
method: 'POST',
body: JSON.stringify({
patient_id: 'test-patient-3',
appointment_date: '2026-04-10',
appointment_time: '14:00',
}),
})
expect(response.status).toBe(409)
})
})複数のエージェントが同時に異なるファイルを生成しているので、マージコンフリクトを最小化 するため、ファイルの役割分担を明確にしておく点が肝心です。
テスト・品質保証フェーズ
QA Agent の役割は、単に「テストを書く」ことではなく、信頼性の保証 です。
テスト自動生成
コードが実装される度に、QA Agent が即座に以下を生成:
- ユニットテスト(入力→出力の検証)
- 統合テスト(API→DB→メール送信までの流れ)
- E2Eテスト(ブラウザでのユーザー操作再現)
カバレッジ管理
npm test -- --coverageCoverage が 80% を下回った場合、自動的に不足分のテストコードを生成するよう QA Agent に指示します。
セキュリティ監査
QA Agent が OWASP Top 10 をチェック:
- SQL インジェクション(Parameterized queries 使用確認)
- XSS(ユーザー入力のサニタイズ確認)
- CSRF(トークン生成確認)
- 認証・認可(Supabase RLS ポリシー確認)
デプロイ・納品フェーズ
全テストが パス したら、Deployment Agent が本番環境へのリリースを実行します。
自動デプロイパイプライン
# .github/workflows/deploy.yml
name: Deploy to Production
on:
workflow_dispatch: # 手動トリガーのみ(自動デプロイ禁止)
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test
- run: npm run test:e2e
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to Vercel
env:
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
run: npx vercel deploy --prod --token $VERCEL_TOKEN
- name: Deploy API to Cloudflare
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: npm run deploy:workers
notify:
needs: deploy
runs-on: ubuntu-latest
steps:
- name: Send Slack notification
run: |
curl -X POST ${{ secrets.SLACK_WEBHOOK }} \
-d '{"text":"✅ Production deployment successful"}'デプロイ後チェック
- Vercel Analytics で ページロード時間を確認(3秒以下)
- Sentry で エラーレート を確認(0%)
- Cloudflare Logpush で API エラーを確認
クライアントコミュニケーションの効率化
受託開発では、進捗報告が生命線 です。Antigravity を使うことで、これまで手作業だった報告を自動化できます。
自動進捗レポート生成
毎日夕方 18:00 に Antigravity が Git の commit ログを解析し、以下を自動生成:
# 本日の進捗レポート(2026-04-02)
## 完了したタスク
- [x] 患者情報管理画面 UI 実装(3コンポーネント)
- [x] 予約 API エンドポイント実装(POST /appointments)
- [x] ユニットテスト追加(カバレッジ +8%)
## 進行中のタスク
- [ ] 予約キャンセル API(明日完了予定)
- [ ] メール送信機能(テスト中)
## ブロッキングイシュー
なし
## 次営業日の予定
- バックエンド実装完了
- 統合テスト開始このレポートを Slack や Google Chat に自動投稿することで、クライアントは 毎日最新の状況を把握 でき、信頼感が生まれます。
修正依頼の高速処理
クライアントから「予約画面の色を青から緑に変えてほしい」といった修正依頼が来たら:
- 修正内容を Slack で送信
- Antigravity が該当コンポーネント(
src/components/AppointmentCalendar.tsx)を特定 - Frontend Agent が色定義を自動更新
- QA Agent が既存テストの互換性を確認
- Deployment Agent が Vercel Preview へ自動デプロイ
- クライアントが確認 URL を受け取る
所要時間:10〜15分 (従来は 1時間以上)
単価・月収の最大化
Antigravity を使った受託開発の最大の魅力は、時間単価の劇的な向上 です。
時間単価の計算例
従来のフリーランス(ChatGPT のみ)
- 月50万円の案件 × 40時間 = 時給 12,500円
Antigravity を使った場合
- 月50万円の案件 × 13時間 = 時給 38,500円 (3倍以上)
時間が浮く理由:
- 設計フェーズ:50% 削減(Requirement Agent が自動化)
- コード生成:60% 削減(4 Agents が並行処理)
- テスト作成:70% 削減(QA Agent が自動化)
- デプロイ:90% 削減(Deployment Agent が自動化)
並行案件管理の上限
Antigravity を使うと、1人で月間3〜4本の案件を並行処理できます。
- 小案件(30万円以下):2週間で完納 → 月3本
- 中案件(50万円):20営業日で完納 → 月2本
- 大案件(100万円以上):6週間 → 並行は1本のみ
月収 = 単価 × 処理本数なので:
- 月30万円 × 3本 = 月90万円
- 月50万円 × 2本 = 月100万円
従来の「月50万円 × 1本 = 月50万円」と比べて、収入が2倍 になります。
値上げ交渉のタイミング
Antigravity で生産性を3倍にしても、クライアントは「高速納品」の理由を知りません。ここが重要です。
値上げ時の説明フレーズ
Antigravity という AI IDE を導入し、設計・実装・テスト・デプロイを最新の自動化技術で行っています。その結果、品質を維持しながら納期を短縮できるようになりましました。業界標準の時給単価(¥15,000–25,000)に合わせて、本案件は ¥18,000/時間 での請負になります。
このように説明すれば、クライアントも「技術投資の成果」として納得しやすいです。
失敗パターンと学び
実際の案件で起きた失敗事例を紹介します。
失敗 1: エージェントへの過信
初回の案件で起きた問題
新人ライセンスを持つ Backend Agent に「SQLServer レガシーDB との連携」を丸投げしたところ、エージェントが正規化されていない古い テーブル構造を無視し、非効率なクエリを生成してしまいましました。
学んだこと
- Requirement Agent が 制約条件を明文化 しておく必要がある
- 特に「レガシーシステムとの互換性」は明示的に agents.md に記述する
- エージェント は指示の粒度に強く依存する
失敗 2: コンテキスト肥大化
4週目に起きた問題
実装が進むにつれ、各エージェントのコンテキスト(入力としての仕様・ライブラリドキュメント・既実装コード)が膨大になり、エージェントが「何を今実装すべきか」を見失うようになりましました。
学んだこと
- 大型案件は Sprint 単位(1週間ごと)で分割する
- Sprint ごとに tasks.md を更新し、エージェントの視点を「今週のゴール」に限定する
- 過去の Sprint は
/archive/に移動して、コンテキストノイズを減らす
失敗 3: クライアント期待値管理
納品1週間前に起きた問題
クライアントが「予約が自動で メール確認 される機能」があると思い込んでいて、実装されていない機能として指摘されましました。
学んだこと
- 仕様書は Figma・要件定義書とは別に、クライアントが 署名を入れるチェックリスト を用意する
- 「このチェックリストにない機能は、追加開発(別料金)です」と明確化する
まとめ
Antigravity AgentKit 2.0 を使った受託開発ワークフローは、単なる効率化ではなく、ビジネスモデルの転換 です。
- 従来: 1本の案件に時間をかけ、単価 ¥50万 × 月1本 = 月収 ¥50万
- 新時代: 複数案件を並行処理し、単価 ¥50万 × 月3本 = 月収 ¥150万
本記事で紹介した agents.md の雛形・tasks.md の分割方法・デプロイパイプラインは、全てコピペで使えるテンプレートです。
あなたの next 案件から、ぜひこのワークフローを試してみてください。納期短縮と月収向上の両立が実現します。
参考書籍
詳しく学びたい方は以下の書籍をお勧めします: