取り組みの背景 — なぜ同じ Antigravity でも「精度に差」が出るのか
同じ Antigravity を使っていても、開発者によって出力品質に大きな差が生まれます。その差の大半は「コンテキストの質」に起因します。
Antigravity は、プロジェクトのコード・ドキュメント・設定ファイルを読み込んでコンテキストを形成します。しかし何も手を加えなければ、Antigravity が把握するのは「コードの表面的な構造」だけです。プロジェクトの背景・意図・制約・規約を明示的に伝えることで、提案の精度は劇的に向上します。
柱1:AGENTS.md — プロジェクトの「説明書」
AGENTS.md とは
AGENTS.md はプロジェクトルートに置く Markdown ファイルで、Antigravity がセッション開始時に自動で読み込む特別なファイルです。「このプロジェクトで AI に最初に伝えておきたいこと」を書く場所です。
基本構成テンプレート
# プロジェクト概要
## このプロジェクトについて
[プロジェクト名] は [目的] のための [技術スタック] アプリケーションです。
対象ユーザー:[ユーザー像]
規模:[DAU/MAU/チーム規模等]
## 技術スタック
- フロントエンド:Next.js 15 (App Router), TypeScript, Tailwind CSS
- バックエンド:Hono (Cloudflare Workers), Zod
- データベース:Supabase (PostgreSQL), Drizzle ORM
- 認証:Supabase Auth
- テスト:Vitest, Playwright
## ディレクトリ構成
src/
├── app/ # Next.js App Router のページ
├── components/ # 再利用可能な UI コンポーネント
│ ├── ui/ # 基本 UI (Button, Input 等)
│ └── features/ # 機能単位のコンポーネント
├── hooks/ # カスタムフック
├── lib/ # ユーティリティ・サービス層
└── types/ # TypeScript 型定義
## コーディング規約
- コンポーネント:PascalCase、1ファイル1コンポーネント
- フック:useXxx 命名、src/hooks/ に配置
- エラーハンドリング:src/lib/errors.ts の AppError クラスを使う
- API コール:src/lib/api.ts のラッパー関数を使う(直接 fetch しない)
- 状態管理:サーバー状態は TanStack Query、UI 状態は useState
## 禁止事項
- src/app/ 以外に直接 fetch を書かない
- console.log を本番コードに残さない
- any 型を使わない(やむを得ない場合はコメントで理由を書く)
## 現在の開発状況
- 完了:ユーザー認証、プロフィール表示、記事一覧
- 進行中:コメント機能(src/features/comments/)
- 未着手:通知機能、フォロー機能「伝えるべき情報」の優先順位
AGENTS.md に書く情報の優先順位は次の通りです。
**最優先(必ず書く)**として、使用技術のバージョン(Next.js 15 と 14 では App Router の動作が異なる)、プロジェクト固有のパターン(独自のエラーハンドリング・API ラッパー等)、禁止事項(チームで決めたアンチパターン)が挙げられます。
**推奨(書くと精度が上がる)**として、ディレクトリ構成と責務、主要な型定義の場所、テストの書き方の方針があります。
**任意(余裕があれば)**として、将来の拡張予定、パフォーマンス・セキュリティの要件、ビジネスドメインの用語集が挙げられます。
柱2:Knowledge Items — 繰り返し参照する情報の管理
Knowledge Items の概念
Knowledge Items は Antigravity の Manager Surface で管理できる「再利用可能なコンテキストブロック」です。AGENTS.md がプロジェクト全体の概要なら、Knowledge Items は「特定のトピックに関する詳細な参照情報」です。
// Knowledge Item の活用例:API 仕様書
// Item名: "API認証仕様"
// 内容:
/*
## 認証フロー
全 API リクエストには Authorization ヘッダーが必要。
形式: Authorization: Bearer {JWT_TOKEN}
### トークン取得
POST /api/auth/login
Body: { email: string, password: string }
Response: { accessToken: string, refreshToken: string, expiresIn: number }
### トークンリフレッシュ
POST /api/auth/refresh
Body: { refreshToken: string }
Response: { accessToken: string, expiresIn: number }
### エラーコード
401: トークン無効または期限切れ
403: 権限不足
*/
// この Knowledge Item を参照させるコマンド例:
// "@API認証仕様 を参照して、この API クライアントに認証を実装して"効果的な Knowledge Items の分類
Knowledge Items の構成例:
├── API仕様/
│ ├── 認証フロー # JWT・OAuth の詳細仕様
│ ├── エラーコード一覧 # 全エラーコードと対処法
│ └── レートリミット # 制限値とリトライ戦略
│
├── UIコンポーネント/
│ ├── デザインシステム # カラー・スペーシング・タイポグラフィ
│ ├── アニメーション規約 # transition・timing 統一ルール
│ └── アクセシビリティ # ARIA・キーボード操作の要件
│
├── データベース/
│ ├── スキーマ概要 # 主要テーブルとリレーション
│ ├── クエリパターン # よく使う Drizzle ORM のパターン
│ └── マイグレーション方針
│
└── ビジネスロジック/
├── 料金計算ロジック # 割引・税計算の仕様
└── 権限モデル # ロール・パーミッションの定義
柱3:プロジェクト構造でコンテキストを伝える
ファイル名・ディレクトリ名による暗示的なコンテキスト
Antigravity はファイル構造からも多くのコンテキストを読み取ります。命名規則を一貫させることで、指示なしでも適切な実装を行います。
// ✅ コンテキストが伝わる構造
src/
├── features/
│ ├── auth/
│ │ ├── components/ # 認証関連 UI
│ │ ├── hooks/ # 認証関連フック
│ │ ├── api.ts # 認証 API コール
│ │ └── types.ts # 認証関連型定義
│ └── comments/
│ ├── components/
│ ├── hooks/
│ ├── api.ts
│ └── types.ts
└── shared/
├── components/ui/ # 汎用 UI コンポーネント
└── lib/ # 汎用ユーティリティ
// この構造なら「コメント機能に認証が必要なフックを追加して」という指示で
// Antigravity は自動的に src/features/comments/hooks/ に配置しようとする
型定義ファイルの充実
型定義が充実しているプロジェクトでは、Antigravity の提案精度が高くなります。
// src/types/domain.ts — ドメイン型を一箇所に集約
export interface User {
id: string;
email: string;
displayName: string;
avatarUrl: string | null;
role: "admin" | "member" | "guest";
createdAt: Date;
updatedAt: Date;
}
export interface Article {
id: string;
title: string;
slug: string;
content: string;
authorId: string;
author?: User; // リレーション(オプショナル)
publishedAt: Date | null;
status: "draft" | "published" | "archived";
tags: string[];
}
export interface Comment {
id: string;
articleId: string;
authorId: string;
author?: User;
content: string;
createdAt: Date;
updatedAt: Date;
deletedAt: Date | null; // ソフトデリート
}
// ユーティリティ型
export type WithPagination<T> = {
items: T[];
total: number;
page: number;
perPage: number;
hasNext: boolean;
};チーム開発でのコンテキスト共有
AGENTS.md をチームで維持する
AGENTS.md は .gitignore に入れず、チームの共有ドキュメントとして管理します。
# チーム開発での AGENTS.md 更新ルール
## 更新するタイミング
- 新しいライブラリを追加したとき
- コーディング規約を変更したとき
- 新しいパターン(エラーハンドリング等)を確立したとき
- アーキテクチャの方針を変えたとき
## 更新方法
1. 変更を PR に含める(コード変更と一緒に)
2. PR レビュー時に AGENTS.md の変更も確認対象にする
## 効果測定
月1回、チームで「Antigravity の提案が意図通りだったか」を振り返り、
AGENTS.md に不足していた情報を追記する「プロジェクト固有パターン」の文書化
チームで決めたパターンを AGENTS.md に明記することで、新メンバーがすぐに Antigravity を使いこなせるようになります。
## よく使うパターン
### API エラーハンドリング
```typescript
// src/lib/api.ts の apiClient を使う
const { data, error } = await apiClient.get<User>(`/users/${id}`);
if (error) {
// AppError 型が返る
toast.error(error.userMessage);
return;
}
// data は型安全フォームバリデーション
React Hook Form + Zod を組み合わせる。 スキーマは src/lib/schemas/ に配置。
日付フォーマット
date-fns を使う。moment.js は使用禁止。 タイムゾーンは常に JST で表示。
---
## 実践:コンテキスト設計の改善ステップ
新しいプロジェクトにコンテキスト設計を導入する場合、段階的に改善します。
**Week 1(最低限)**: プロジェクト概要・技術スタック・ディレクトリ構成を AGENTS.md に書く。これだけで「間違ったライブラリを使う提案」が大幅に減ります。
**Week 2(中程度)**: コーディング規約・禁止事項・主要パターンを追加します。「レビューで毎回同じ指摘をしていること」を AGENTS.md に書くと効果的です。
**Week 3(本格運用)**: Knowledge Items を作成します。API 仕様・スキーマ・ビジネスロジックを Knowledge Items に整備すると、複雑な実装タスクの精度が向上します。
**Month 2 以降(継続改善)**: 「Antigravity の提案がずれていた」ケースをメモし、月1回 AGENTS.md を更新します。
---
## 個人開発者の視点から(実体験メモ)
## ここまでの要点
Antigravity のコンテキスト設計は「どれだけ正確に AI に伝えるか」の技術です。AGENTS.md・Knowledge Items・プロジェクト構造の3つを整えることで、Antigravity の提案はプロジェクト固有のパターンに沿った高精度なものになります。
特に重要なのは AGENTS.md の「禁止事項」セクションです。「やってほしくないこと」を明示することで、コードレビューで繰り返す同じ指摘が激減します。
関連記事としてAGENTS.md 活用ガイドや[AI パートナーとの日常開発ワークフロー](/articles/tips/ai-partner-daily-workflow)も参考にしてください。