モノレポの基本構造と Antigravity の課題
典型的なモノレポ構造
Nx・Turborepo を使ったモノレポは、以下のような構造を持つことが多いです。
my-monorepo/
├── apps/
│ ├── web/ # Next.js フロントエンド
│ ├── mobile/ # React Native アプリ
│ └── api/ # Node.js バックエンド
├── packages/
│ ├── ui/ # 共有 UI コンポーネント
│ ├── utils/ # 共通ユーティリティ
│ ├── types/ # 共有型定義
│ └── config/ # 共有設定(ESLint, TypeScript等)
├── nx.json # Nx 設定(または turbo.json)
├── package.json
└── AGENTS.md # ルートレベルの Antigravity 設定
Antigravity がモノレポで陥りやすい問題
問題1: コンテキスト汚染
Antigravity はデフォルトでワークスペース全体のコードをコンテキストとして取り込もうとします。apps/web を編集しているときに apps/api の型や関数が提案されることがあります。
問題2: インポートパスの混乱
モノレポでは @my-org/ui、@my-org/utils のようなパッケージ名でインポートしますが、Antigravity がパス解決ルールを理解していないと、相対インポートやインポートパスの間違いを提案します。
問題3: ビルド依存関係の無視
packages/types を変更したとき、それに依存する apps/web と apps/api を同時に更新する必要がありますが、コンテキストが不十分だと Antigravity はこの依存関係を認識できません。
Step 1: ルート AGENTS.md の設計
AGENTS.md はモノレポの「設計図」を Antigravity に伝える最重要ファイルです。ルートに1つ配置し、プロジェクト全体の構造・規約・禁止事項を記述します。
# AGENTS.md(ルートレベル)
## プロジェクト構造
このリポジトリは Turborepo を使ったモノレポです。
- apps/web: Next.js 16 App Router フロントエンド(ポート 3000)
- apps/mobile: React Native 0.76 + Expo 52
- apps/api: Hono + Cloudflare Workers バックエンド
- packages/ui: shadcn/ui ベースの共有コンポーネントライブラリ
- packages/types: 全アプリ共通の TypeScript 型定義
- packages/utils: 共通ユーティリティ関数
## パッケージ名の解決ルール
インポートは常にパッケージ名を使うこと(相対パスは禁止)。
- UI コンポーネント: @my-org/ui
- 型: @my-org/types
- ユーティリティ: @my-org/utils
## TypeScript 設定
各 tsconfig.json は packages/config/tsconfig.base.json を継承している。
strict: true。any 型の使用は禁止。
## コーディング規約
- React コンポーネント: 関数コンポーネント + hooks のみ(class component 禁止)
- 状態管理: Zustand(Redux 禁止)
- API クライアント: packages/utils の createApiClient を使うこと
- エラーハンドリング: Result 型(packages/utils/result.ts)を使用
## 変更時の注意事項
packages/types を変更するときは、依存する apps/ のコードも同時に更新すること。
packages/ui のコンポーネント API を変更するときは必ずマイグレーションガイドを作成すること。
## 禁止事項
- console.log の本番コードへの混入(logger.ts を使う)
- any 型の使用
- packages/ 直下への直接ファイル作成(必ず適切なパッケージ内に配置)
ポイント: ルート AGENTS.md は「地図」に徹します。詳細なルールは後述するパッケージ別 AGENTS.md に委ねることで、情報の肥大化を防ぎます。
Step 2: パッケージ別 AGENTS.md の設計
各 app・package に固有の AGENTS.md を配置することで、AI がそのパッケージのコンテキストで最適な提案を行えるようになります。
# apps/web/AGENTS.md
## このアプリについて
Next.js 16 App Router を使った E コマースフロントエンド。
## ルーティング構造
- app/(auth)/: 認証関連ページ(ログイン・登録・パスワードリセット)
- app/(shop)/: ショップページ(商品一覧・詳細・カート・購入)
- app/admin/: 管理画面(認証が必要・admin ロールのみ)
## データフェッチ戦略
- Server Components でデータを取得すること(useEffect でのクライアントフェッチは禁止)
- キャッシュ: next/cache の unstable_cache を使用
- ミューテーション: Server Actions を使うこと(API Routes は禁止)
## スタイリング
- Tailwind CSS v4
- コンポーネントは packages/ui から import
- ページ固有スタイルは page.tsx の同階層に page.css として配置
## 画像・アセット
- next/image を必ず使うこと(img タグ禁止)
- 外部画像ドメインは next.config.ts の images.remotePatterns に追加
# packages/ui/AGENTS.md
## このパッケージについて
shadcn/ui をベースにした共有コンポーネントライブラリ。
React 19 + TypeScript strict mode。
## コンポーネント作成規則
1. ファイル名: kebab-case.tsx(例: button.tsx, user-card.tsx)
2. コンポーネント名: PascalCase
3. Props の型定義: interface ComponentNameProps として同ファイル内に定義
4. Storybook のストーリーを同時に作成すること(button.stories.tsx)
5. アクセシビリティ: WAI-ARIA 属性を適切に付与すること
## API の安定性
このパッケージのエクスポートは全アプリが依存している。
破壊的変更が発生する場合は:
1. 新しい API を追加(旧 API は deprecated マークを付けて残す)
2. MIGRATION.md を更新
3. バージョンを major bump する
## エクスポート
src/index.ts からのみエクスポートすること。
個別ファイルへの直接インポートは禁止。
Step 3: Antigravity でクロスパッケージリファクタリングを実行する
モノレポ開発の真価は、複数パッケージを横断した変更を安全に行える点にあります。Antigravity を正しく設定すれば、この作業を大幅に効率化できます。
実践例: 共有型の変更
packages/types/src/user.ts に新しいフィールドを追加する例を考えます。
// packages/types/src/user.ts(変更前)
export interface User {
id: string
email: string
name: string
createdAt: Date
}
Antigravity に次のように依頼します。
User 型に `role: 'admin' | 'member' | 'guest'` フィールドを追加してください。
packages/types/src/user.ts を更新した後、
このフィールドを使用している apps/ および packages/ 内の全ファイルを特定し、
必要な更新を提案してください。
Antigravity は AGENTS.md の内容を踏まえて、依存グラフを辿りながら影響箇所を列挙します。ただし、最終的な変更適用は必ず自分でレビューしてから行うことを推奨します。
// packages/types/src/user.ts(変更後)
export interface User {
id: string
email: string
name: string
role: 'admin' | 'member' | 'guest' // 追加
createdAt: Date
}
// apps/api/src/auth/user.service.ts(Antigravity が提案する変更)
// role フィールドのデフォルト値を設定
const newUser: User = {
id: crypto.randomUUID(),
email,
name,
role: 'member', // 追加
createdAt: new Date(),
}
実践例: UI コンポーネントの API 変更
packages/ui の Button コンポーネントに loading プロパティを追加するとき、Antigravity を使った安全な移行手順を示します。
// packages/ui/src/button.tsx(変更後)
export interface ButtonProps {
children: React.ReactNode
variant?: 'primary' | 'secondary' | 'ghost'
size?: 'sm' | 'md' | 'lg'
loading?: boolean // 新規追加
loadingText?: string // 新規追加(省略時は children を表示)
onClick?: () => void
disabled?: boolean
type?: 'button' | 'submit' | 'reset'
}
export function Button({
children,
variant = 'primary',
size = 'md',
loading = false,
loadingText,
onClick,
disabled,
type = 'button',
}: ButtonProps) {
return (
<button
type={type}
className={buttonVariants({ variant, size })}
onClick={onClick}
disabled={disabled || loading}
aria-busy={loading}
>
{loading ? (
<>
<span className="animate-spin mr-2">⟳</span>
{loadingText ?? children}
</>
) : (
children
)}
</button>
)
}
この変更は後方互換があるため(loading はオプションで省略可能)、既存コードは変更不要です。Antigravity に確認させます。
packages/ui/src/button.tsx に loading プロパティを追加しました。
この変更が apps/ の既存コードを破壊していないか確認し、
もし問題があれば修正案を提示してください。
Step 4: Turborepo / Nx のビルドパイプラインを AI で最適化する
turbo.json の最適化
Turborepo のビルドパイプラインは turbo.json で定義します。Antigravity は現在の設定を分析し、最適化案を提案できます。
// turbo.json(最適化前)
{
"$schema": "https://turbo.build/schema.json",
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "dist/**"]
},
"test": {
"dependsOn": ["build"]
},
"lint": {}
}
}
// turbo.json(Antigravity による最適化後)
{
"$schema": "https://turbo.build/schema.json",
"ui": "tui",
"tasks": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "dist/**", ".turbo/**"],
"env": ["NODE_ENV", "NEXT_PUBLIC_API_URL"],
"passThroughEnv": ["VERCEL_GIT_COMMIT_SHA"]
},
"test": {
"dependsOn": ["^build"],
"outputs": ["coverage/**"],
"cache": true
},
"test:unit": {
"dependsOn": [],
"outputs": ["coverage/unit/**"],
"cache": true
},
"test:e2e": {
"dependsOn": ["build"],
"cache": false
},
"lint": {
"dependsOn": [],
"outputs": [],
"cache": true
},
"type-check": {
"dependsOn": ["^type-check"],
"outputs": [],
"cache": true
},
"dev": {
"cache": false,
"persistent": true
}
}
}
主な改善点:
env フィールドの追加により環境変数の変化でキャッシュが適切に無効化されます
test:unit と test:e2e を分離し、ユニットテストのみを独立実行できるようにしました
type-check を独立タスクとして追加し、ビルドと分離して実行できるようにしました
dev は persistent: true にしてウォッチモードを正しく扱います
GitHub Actions での Turborepo Remote Cache 活用
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2 # turbo prune で差分検出するために必要
- uses: actions/setup-node@v4
with:
node-version: 22
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Type check
run: npx turbo run type-check
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- name: Lint
run: npx turbo run lint
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- name: Unit tests
run: npx turbo run test:unit
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
- name: Build
run: npx turbo run build
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
Antigravity に「現在の CI が遅い原因を特定して、Turborepo のリモートキャッシュを活用した最適化案を提示してほしい」と依頼することで、プロジェクト固有のボトルネックを特定させることができます。
Step 5: Nx 環境での Antigravity 活用
Turborepo に加え、Nx も人気の高いモノレポツールです。Nx では依存グラフの視覚化・コードジェネレーター・タスク並列実行などの高度な機能が利用できます。
nx.json の最適化
// nx.json
{
"$schema": "./node_modules/nx/schemas/nx-schema.json",
"targetDefaults": {
"build": {
"dependsOn": ["^build"],
"inputs": ["production", "^production"],
"cache": true
},
"test": {
"inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"],
"cache": true
},
"lint": {
"inputs": [
"default",
"{workspaceRoot}/.eslintrc.json",
"{workspaceRoot}/.eslintignore"
],
"cache": true
}
},
"namedInputs": {
"default": ["{projectRoot}/**/*", "sharedGlobals"],
"production": [
"default",
"!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
"!{projectRoot}/tsconfig.spec.json",
"!{projectRoot}/.eslintrc.json"
],
"sharedGlobals": ["{workspaceRoot}/babel.config.json"]
},
"plugins": [
{
"plugin": "@nx/next/plugin",
"options": {
"buildTargetName": "build",
"devTargetName": "dev",
"startTargetName": "start"
}
}
]
}
Nx Generator を Antigravity で活用する
Nx の強力な機能の一つが「ジェネレーター」(コードジェネレーター)です。Antigravity と組み合わせることで、カスタムジェネレーターの作成・使用が格段に効率化されます。
# 新しいライブラリを作成するとき
$ npx nx generate @nx/react:library feature-auth \
--directory=libs/feature-auth \
--importPath=@my-org/feature-auth \
--bundler=vite \
--unitTestRunner=vitest
このコマンドの実行後、Antigravity に「生成されたファイルの構成を確認して、プロジェクトの規約に合わせてカスタマイズすべき箇所を指摘してほしい」と依頼することで、ボイラープレートコードを素早くプロジェクト固有の形に整えることができます。
Step 6: チームでの AGENTS.md 運用戦略
変更管理のワークフロー
AGENTS.md はコードと同様に PR レビューの対象とすることを推奨します。以下のルールをチームで共有しましょう。
# .github/CODEOWNERS
# AGENTS.md の変更は必ずテックリードがレビュー
AGENTS.md @team/tech-lead
apps/web/AGENTS.md @team/frontend-lead
apps/api/AGENTS.md @team/backend-lead
packages/*/AGENTS.md @team/platform
# .github/workflows/agents-md-check.yml
name: Check AGENTS.md
on:
pull_request:
paths:
- '**/AGENTS.md'
jobs:
notify:
runs-on: ubuntu-latest
steps:
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '⚠️ AGENTS.md が変更されています。チーム全員への周知と、変更内容が AI の挙動に与える影響を確認してください。'
})
パッケージ別 AGENTS.md のテンプレート化
新しいパッケージを追加するたびに AGENTS.md を作成するのは手間です。Antigravity を使って、プロジェクト固有の AGENTS.md テンプレートを自動生成するプロセスを構築しましょう。
# packages/scripts/create-package-agents-md.ts
import { readFileSync, writeFileSync } from 'fs'
import { resolve } from 'path'
const packageDir = process.argv[2]
const packageJson = JSON.parse(
readFileSync(resolve(packageDir, 'package.json'), 'utf-8')
)
const template = `# ${packageJson.name}/AGENTS.md
## このパッケージについて
${packageJson.description ?? '(説明を追加してください)'}
## 主な責務
- (このパッケージが担う機能・役割を記述)
## API
- エクスポートは src/index.ts からのみ
- 型の変更は後方互換を保つこと
## 依存関係
- 内部依存: (使用している @my-org/* パッケージを列挙)
- 外部依存: (主要な外部 npm パッケージを列挙)
## 変更時の注意事項
- (このパッケージを変更するときの注意点を記述)
`
writeFileSync(resolve(packageDir, 'AGENTS.md'), template)
console.log(`✅ ${packageDir}/AGENTS.md を作成しました`)
Step 7: 大規模リファクタリングの実践
段階的なリファクタリング戦略
モノレポで大規模なリファクタリング(例:状態管理ライブラリの移行、API クライアントの刷新)を行うとき、Antigravity と以下のプロセスで進めることを推奨します。
Phase 1: 影響範囲の分析
現在のコードベース全体を分析して、以下を洗い出してください:
1. Redux を使用しているファイルの一覧
2. Redux のアクション・セレクターの使用頻度ランキング
3. Zustand への移行で特に注意が必要なパターン
4. 移行の優先順位(影響が小さいものから大きいものへの順番)
Phase 2: 移行計画の策定
Antigravity が出力した影響範囲をもとに、移行計画を立てます。
# 移行計画テンプレート(Antigravity に生成させる)
## Redux → Zustand 移行計画
### Phase 1(1週目): 共有ユーティリティの準備
- packages/utils に Zustand のファクトリ関数を追加
- 既存の Redux Store の型定義を Zustand 互換に変換
### Phase 2(2〜3週目): apps/web の移行
- 影響範囲が小さいページから順に移行
- 各 PR でテストを必ず通過させること
### Phase 3(4週目): apps/mobile の移行
- web の移行パターンを踏襲する
- React Native 固有の考慮点を反映
### 完了基準
- 全テストがパス
- Redux 関連のパッケージが package.json から削除されている
- bundle size が同等以下
Step 8: パフォーマンス最適化とコスト管理
Antigravity のコンテキストウィンドウを節約する
大規模なモノレポでは、Antigravity のコンテキストウィンドウが枯渇しやすくなります。以下の実践により、コンテキストを効率的に使えます。
不要ファイルを .gitignore と同様に除外する
# .antigravityignore(プロジェクトルートに配置)
node_modules/
.next/
dist/
coverage/
.turbo/
*.log
*.lock
*.snap
__generated__/
.storybook/public/
大きなファイルを分割する
Antigravity はファイルサイズが大きいほどコンテキストを消費します。1つのファイルが500行を超える場合は、責務に従って分割することを推奨します。
Antigravity に依頼するプロンプト例:
「apps/api/src/routes/shop.ts が 800 行を超えています。
責務ごとに分割するリファクタリング案を提示してください。
既存の export は変更しないようにしてください。」
Step 12: Antigravity × モノレポでのコードレビュー自動化
PR テンプレートと Antigravity の連携
チーム開発では、PR の品質を一定水準に保つ点が肝心です。Antigravity とプロジェクト固有の PR テンプレートを組み合わせることで、レビュー前の自己チェックを自動化できます。
# .github/PULL_REQUEST_TEMPLATE.md
## 変更内容
<!-- 何をなぜ変えたか(Antigravity に記入を手伝ってもらう) -->
## 影響範囲チェック(Antigravity に確認させること)
- [ ] packages/types を変更した → 影響パッケージを全て更新済み
- [ ] packages/ui の API を変更した → MIGRATION.md 更新済み
- [ ] 新しい環境変数を追加した → turbo.json の env フィールドに追加済み
- [ ] 外部依存を追加した → 全パッケージで同一バージョンを使用
- [ ] DB スキーマを変更した → マイグレーションファイル作成済み
## テスト
- [ ] ユニットテストを追加・更新した
- [ ] 影響範囲の手動確認を行った
- [ ] CI が通ることを確認した
このテンプレートを使って、Antigravity に「この PR のチェックリストを埋めてほしい」と依頼することで、自動的に変更内容の確認と文書化が行えます。
Affected パッケージの特定と選択的 CI 実行
大規模モノレポでは、変更されていないパッケージのテストを毎回実行することは時間とコストの無駄になります。Nx・Turborepo のキャッシュ機能と Antigravity を組み合わせて、賢い CI を構築しましょう。
# 変更影響を受けるパッケージのみテストする(Turborepo)
npx turbo run test --filter=...[HEAD^1]
# 変更影響を受けるパッケージのみビルドする(Nx)
npx nx affected --target=build --base=origin/main
Antigravity に次のプロンプトで CI 最適化を依頼できます。
現在の .github/workflows/ci.yml を確認して、
Turborepo の --filter フラグを使った選択的 CI 実行に最適化してください。
PR 時は変更のあったパッケージとその依存物のみテスト・ビルドし、
main ブランチへの push 時は全パッケージを実行するようにしてください。
コードオーナーシップの明確化
CODEOWNERS ファイルと AGENTS.md を連動させることで、どのチームメンバーがどのパッケージを所有しているかを AI も把握できます。
# .github/CODEOWNERS
# グローバル
* @team/platform
# アプリ
apps/web/** @team/frontend
apps/mobile/** @team/mobile
apps/api/** @team/backend
# 共有パッケージ(全チームのレビューが必要)
packages/types/** @team/frontend @team/backend @team/mobile
packages/ui/** @team/frontend @team/design
packages/utils/** @team/platform
AGENTS.md にこの情報を補足として記述しておくと、Antigravity が「この変更は誰にレビューしてもらうべきか」まで提案できます。
Step 9: インクリメンタルな導入戦略
既存のモノレポに後付けで Antigravity を最適化する
すでに稼働中のモノレポに対して、本記事の内容を段階的に適用する手順を紹介します。一度に全部やろうとするのではなく、効果が高い順に取り組むことで、最小限のコストで最大の恩恵を得られます。
Week 1: ルート AGENTS.md の作成(最優先)
まず、ルートに AGENTS.md が存在しない場合は作成します。Antigravity に次のように依頼するのが効率的です。
このリポジトリの package.json、tsconfig.json、turbo.json(または nx.json)、
および主要なソースファイルを分析して、
このプロジェクトのアーキテクチャ・使用技術・主要な規約を把握してください。
その上で、Antigravity がこのプロジェクトを最もよく理解できる AGENTS.md の初稿を生成してください。
自動生成された内容をレビューし、プロジェクト固有の知識(チームの暗黙のルール・禁止事項・歴史的経緯)を手動で追記します。
Week 2: .antigravityignore の設定
不要なファイルを除外してコンテキストの質を高めます。最初は保守的に設定し、必要に応じて調整します。
Week 3〜4: パッケージ別 AGENTS.md の追加
最も活発に開発しているパッケージから順に AGENTS.md を追加します。全パッケージに一度に対応しようとせず、現在のスプリントで触れているパッケージを優先します。
Month 2: ビルドパイプラインの最適化
turbo.json / nx.json の設定を Antigravity に分析させ、キャッシュ戦略・タスク並列化を改善します。CI のフィードバック速度が向上することで、開発リズムが改善されます。
Step 10: 実際のプロジェクトでの活用パターン集
パターン 1: 共有フックの作成
apps/web と apps/mobile の両方で使える共有 React フックを packages/utils に追加するとき。
packages/utils に useDebounce フックを追加してください。
以下の要件を満たすこと:
- TypeScript strict mode に対応
- React 19 の Concurrent Mode と互換性がある
- delay は ms 単位の number(デフォルト 300)
- 型パラメーターで value の型を指定できる
- packages/utils/src/hooks/use-debounce.ts に配置
- packages/utils/src/index.ts からエクスポート
- Vitest のユニットテストを同時に作成
パターン 2: マルチアプリの E2E テスト設定
apps/web と apps/api を同時に起動する E2E テスト環境の設定。
Playwright を使って apps/web と apps/api の両方を起動する
E2E テスト環境を設定してください。
turbo.json に test:e2e タスクを追加し、
apps/e2e ディレクトリを作成してください。
基本的な認証フロー(ログイン・ログアウト)のテストケースも作成してください。
パターン 3: 依存関係の可視化とアップデート
現在のモノレポの依存関係を分析して、以下を報告してください:
1. 複数パッケージで異なるバージョンが使われているライブラリ
2. セキュリティアップデートが必要なパッケージ(npm audit の結果を参照)
3. deprecated になったパッケージ
4. 統一すべきバージョンと、その影響範囲
その後、最も影響の少ないものから順に更新する計画を立ててください。
パターン 4: コンポーネントの移行
apps/web 直下に置いていたコンポーネントを packages/ui に移動します。
apps/web/src/components/Button.tsx を packages/ui に移行してください。
- packages/ui の AGENTS.md の規約(ファイル名・エクスポート方法)に従うこと
- apps/web 内の既存の import を新しいパスに更新すること
- Storybook のストーリーも作成すること
- 移行後、apps/web でのテストが通ることを確認してください
モノレポでのファイル変更管理については、Antigravity の Diff View 完全活用ガイドも合わせてご覧ください。複数ファイルへの変更を一括で確認・管理する際に役立ちます。
大規模なリファクタリング全般については、Antigravity Editor View で大規模リファクタリングを完遂する上級テクニックで詳細な戦略を解説しています。
コンテキスト制御の観点では、Antigravity Editor のコンテキスト制御完全ガイドも参考になります。@メンションや Knowledge Items を活用して AI の精度を高める方法を学べます。
Step 11: よくあるエラーと対処法
エラー 1: 「パッケージが見つからない」という型エラーが消えない
原因として、TypeScript の paths 設定が各パッケージの tsconfig.json に正しく継承されていないことが多いです。
// packages/config/tsconfig.base.json
{
"compilerOptions": {
"paths": {
"@my-org/ui": ["../../packages/ui/src/index.ts"],
"@my-org/types": ["../../packages/types/src/index.ts"],
"@my-org/utils": ["../../packages/utils/src/index.ts"]
}
}
}
各アプリの tsconfig.json でこのベース設定を継承しているか確認してください。
// apps/web/tsconfig.json
{
"extends": "../../packages/config/tsconfig.base.json",
"compilerOptions": {
// アプリ固有の設定のみここに記述
"baseUrl": "."
}
}
エラー 2: Turborepo のキャッシュが意図せず使われてしまう
環境変数を turbo.json の env フィールドに登録していないと、環境変数が変わってもキャッシュが使い回されることがあります。
// turbo.json
{
"tasks": {
"build": {
"env": [
"NODE_ENV",
"NEXT_PUBLIC_API_URL",
"DATABASE_URL" // 追加が必要だった環境変数
]
}
}
}
Antigravity に「現在の turbo.json に登録すべき環境変数が漏れていないか確認してほしい」と依頼するとよいでしょう。
エラー 3: Nx の依存グラフが正しく認識されない
nx.json で implicitDependencies が設定されていない場合、Nx が依存関係を正しく把握できないことがあります。
// apps/web/project.json
{
"name": "web",
"implicitDependencies": ["ui", "types", "utils"],
"targets": {
"build": { ... }
}
}
まとめ
モノレポでの Antigravity 活用は、適切な設定なしでは「噛み合わない AI エディタ」に感じるかもしれませんが、本記事で紹介した AGENTS.md 設計・コンテキスト最適化・クロスパッケージ戦略を実践することで、真の生産性向上が実現できます。
重要なポイントを振り返ります。
- ルート AGENTS.md でプロジェクト全体の「地図」を作成し、AI にアーキテクチャを理解させる
- パッケージ別 AGENTS.md で詳細な規約を記述し、作業単位でのコンテキスト精度を高める
- クロスパッケージ変更は Antigravity に影響範囲の分析を依頼してから段階的に実施する
- turbo.json / nx.json の最適化も Antigravity に任せることで、ビルド速度と CI コストを改善できる
- AGENTS.md の変更管理を PR レビューに組み込み、チーム全体で AI への情報を最新に保つ
- インクリメンタルな導入を心がけ、効果の高い変更から順に適用することで、既存開発フローへの影響を最小化できる
モノレポ開発の複雑さは、正しく設定された Antigravity によって「複数の脳」が同時に働く開発体験へと変わります。最初は小さな一歩——ルート AGENTS.md の作成だけでも——から始めてみてください。その効果を感じてから次のステップへ進むことで、無理なくモノレポ × AI エディタの恩恵を積み重ねていけます。
モノレポを含むチーム設計とシステム設計の関係を深く理解できる一冊です。
モノレポ設計や Antigravity の実践的な活用方法についてさらに深く