AGENTS.mdテンプレート集:Next.js・Rails・FastAPI・Go・Astro のスタック別雛形
AGENTS.mdをNext.js / Rails / FastAPI / Go / Astroの5スタック向けに、コマンド・ディレクトリ構成・テスト方針・禁止事項・PRルールの型で各30〜45行にまとめました。構成とコマンドは各フレームワークの公式ドキュメントで2026年9月14日に確認したものだけを使っています。
AGENTS.md はスタックごとに「エージェントが踏みやすい落とし穴」が違います。Next.js なら予約ファイル名、Rails なら schema.rb の直編集、Go なら internal/ の境界。 この記事では、5つのスタックについて公式ドキュメントのプロジェクト構成から落とし穴を逆算し、コピペしてすぐ使える AGENTS.md を各30〜45行で用意しました。
「何を書くべきか」の一般論は AGENTS.md完全ガイド で書いています。ここでは具体物だけを並べます。
共通の型
- Commands — 正規のコマンドを先頭に。
npm run devのような scripts は中身(= next dev)も併記する - Layout — 公式の予約ディレクトリと「触ってはいけない生成物」だけ書く。コードを読めば分かる構造は書かない
- Testing — 「何を変えたらどのテストを回すか」の対応を書く
- Do not — パス単位・ファイル名単位で書く。「気をつける」は書かない
- PR rules — 完了報告に何を貼るか(コマンド出力、ルート一覧、スクリーンショット)を決める
5つのテンプレートは全部この5節で統一しています。エージェントが複数のリポジトリを渡り歩くとき、節の並びが同じだと「Commands はどこだ」と探す手間が減ります。
1. Next.js(App Router)
公式の「Project structure」で確認できる予約ファイル名(layout / page / loading / not-found / error / route / template / default)と、バージョン管理しないファイル(.env* と next-env.d.ts)を Do not に落とし込みます。現行の next CLI のコマンド表には dev / build / start / info / telemetry / typegen / upgrade / experimental-analyze があり、lint はありません。
# AGENTS.md — Next.js (App Router)
## Commands- dev: `npm run dev`(= next dev。HMR 付き。開発ビルドは .next/dev に出る)- build: `npm run build`(= next build。出力の Route 一覧で新規ルートが Static / Dynamic どちらか確認する)- start: `npm run start`(= next start。必ず build 後)- 型検査: `npx next typegen && npx tsc --noEmit`(ルート型を生成してから tsc)- lint: `npx eslint .`(設定は eslint.config.mjs。`next lint` は現行 CLI に無いので使わない)
## Layout- `app/` … App Router。フォルダ = URL セグメント。`page.tsx` か `route.ts` を置いた時点で公開ルートになる- `app/**/layout.tsx` … 共有 UI。`loading` `error` `not-found` `template` `default` は予約名- `app/**/_components/` `_lib/` … アンダースコア始まりはルーティング対象外(コロケーション用)- `(group)/` … URL に出ないグループ。`@slot/` はパラレルルート- `public/` … 静的ファイル。`src/` を使う構成では `app/` も `src/` 配下- `proxy.ts` … リクエストプロキシ。`instrumentation.ts` … 計測。どちらもルート直下
## Testing- 新しいルートを足したら `npm run build` を通し、出力の Route 一覧に載ることを確認する- テストランナーは package.json の `test` スクリプトに従う(未設定なら追加前に相談)- 型を触ったら `npx next typegen && npx tsc --noEmit` を通す
## Do not- `.env` `.env.local` `.env.production` `.env.development` `next-env.d.ts` をコミットしない- `app/` 配下に予約名と衝突する独自ファイルを作らない(`page.ts` を「ページ一覧ユーティリティ」に使うなど)- `next.config.js` の変更は理由を PR 本文に書く- `.next/` を手で触らない
## PR rules- 1 PR = 1 ルートまたは 1 機能。`next build` の Route 一覧の差分を PR に貼る- Server Component / Client Component の境界を変えたら PR 本文に明記する2. Ruby on Rails
Rails Guides の Getting Started にあるディレクトリ表と、Testing ガイドの bin/rails test 系コマンドをそのまま使います。Rails は生成物(db/schema.rb)を手で編集したくなる誘惑が強いので、Do not の1行目に置きます。
# AGENTS.md — Ruby on Rails
## Commands- server: `bin/rails server`- console: `bin/rails console`- generate: `bin/rails generate <model|controller|migration> ...`(生成物の diff を確認し、不要ファイルは削る)- migrate: `bin/rails db:migrate`(test 環境は `bin/rails db:migrate RAILS_ENV=test`)- test: `bin/rails test`(1ファイル: `bin/rails test test/models/article_test.rb`、行指定: `...:6`)- system test: `bin/rails test:system`。全部: `bin/rails test:all`- lint: `bin/rubocop`(設定は .rubocop.yml)- routes: `bin/rails routes`
## Layout- `app/` … controllers / models / views / helpers / mailers / jobs / assets- `config/` … routes.rb、database.yml、環境設定。`config.ru` は Rack 起動用- `db/` … スキーマとマイグレーション。`db/schema.rb` は migrate が生成する- `lib/` … アプリの拡張モジュール。`script/` … 一回きりのスクリプト- `test/` … models / controllers / integration / system / fixtures / helpers / mailers。共通設定は test/test_helper.rb- `storage/` … SQLite と Active Storage(Disk)。`tmp/` `log/` は生成物
## Testing- モデルを触ったら `test/models/`、コントローラなら `test/controllers/` を同じ PR で更新する- fixture を変えたら `bin/rails test test/models` で関連テストを全部回す- `bin/rubocop` が通らない差分は完了扱いにしない
## Do not- `db/schema.rb` を直接編集しない。マイグレーションを追加する- マージ済みのマイグレーションを書き換えない。新しいマイグレーションで直す- `config/master.key` `config/credentials/*.key` `.env` をコミットしない- `storage/` `tmp/` `log/` の中身をコミットしない- `Gemfile` への gem 追加は事前に相談する(`Gemfile.lock` の差分も PR に含める)
## PR rules- マイグレーションを含む PR は本文にロールバック手順を書く- `bin/rails test` と `bin/rubocop` の結果を PR 本文に貼る3. Python(FastAPI)
FastAPI の「Bigger Applications」で示される app/main.py + app/routers/ + app/dependencies.py + app/internal/ の構成と、Testing チュートリアルの TestClient(httpx が必要)を前提にします。公式は uv run fastapi dev / uv run pytest を使っているので、それに合わせています。
# AGENTS.md — FastAPI (Python)
## Commands- dev: `uv run fastapi dev`(エントリポイントは pyproject.toml の [tool.fastapi] entrypoint = "app.main:app"。直接指定は `uv run fastapi dev app/main.py`)- test: `uv run pytest`(TestClient は httpx が必要: `uv add httpx`)- 依存追加: `uv add <pkg>`(pip / poetry のプロジェクトは該当コマンドに読み替える)
## Layout- `app/__init__.py` … app をパッケージにする(消さない)- `app/main.py` … `FastAPI()` 本体。ルーターは `app.include_router(...)` で集約する- `app/dependencies.py` … 共有の Depends(トークン検証など)- `app/routers/<resource>.py` … `APIRouter(prefix=..., tags=[...])` を 1 リソース 1 ファイル- `app/internal/` … 管理系など外部公開しないルーター- テスト … 公式チュートリアルは `app/test_main.py`。本リポジトリでは `tests/` を正とする
## Testing- ルートを足したら `TestClient` のテストを同じ PR に含める (`from fastapi.testclient import TestClient`、関数は `def test_...`。`async def` にしない)- `uv run pytest` が緑でない差分は完了扱いにしない
## Do not- `app/main.py` にパスオペレーションを直書きしない。`routers/` に置いて include_router する- `prefix` / `tags` / `dependencies` を router 側と include_router 側の両方に書かない(二重付与)- `.env` `*.pem` `secrets/` をコミットしない- `uvicorn` を直接叩く起動手順を増やさない(`fastapi dev` に統一)
## PR rules- 新しいエンドポイントは `/docs`(OpenAPI)で確認した結果か curl 例を PR に貼る- レスポンスモデルを変えたら、破壊的変更かどうかを PR タイトル冒頭に書く4. Go
go.dev の「Organizing a Go module」にある cmd/ と internal/ の使い分けと、「How to Write Go Code」のコマンド(go build / go test / go install / go mod tidy)に沿います。よく見る pkg/ は公式レイアウトに無いので、Do not で「増やさない」と書いています。
# AGENTS.md — Go
## Commands- build: `go build ./...`- test: `go test ./...`(1パッケージ: `go test ./internal/auth/`)- tidy: `go mod tidy`(依存を触ったら必ず。go.sum の差分も PR に含める)- vet / format: `go vet ./...`、`gofmt -l .`(出力が空で完了)- install: `go install ./cmd/<prog>`。ローカル確認は `go build -o bin/<prog> ./cmd/<prog>`
## Layout- `go.mod` … モジュールパス(`module github.com/<org>/<name>`)。変えると import が全部壊れる- `cmd/<prog>/main.go` … 実行バイナリごとに 1 ディレクトリ。`package main` はここだけ- `internal/` … 外部から import できないパッケージ。サーバーのロジックは原則ここ- ルート直下の `*.go` … 公開パッケージ(ライブラリとして import させるものだけ)- `*_test.go` … テストは同じパッケージ内に置く(`func TestXxx(t *testing.T)`)
## Testing- 変更したパッケージの `go test` を回し、`go vet ./...` を通す- 新しい `cmd/` を足したら `go build ./...` が通ることを確認する
## Do not- `pkg/` を新設しない(公式レイアウトに無い。公開したいものはルート直下、隠すものは internal/)- `vendor/` を勝手に作らない(`go mod vendor` の採否はチームで決める)- `go.sum` を手で編集しない- `cmd/` 配下に共有ロジックを書かない(`internal/` に寄せる)
## PR rules- 公開 API(ルート直下のパッケージ)のシグネチャ変更は影響範囲を PR 本文に書く- `go test ./...` と `go vet ./...` の結果を PR に貼る5. Astro
Astro Docs の「Project Structure」は「Astro が予約しているのは src/pages/ だけ」と明記しています。裏を返せば src/pages/ に置いたものは全部ルートになるので、そこを Do not の中心にします。コマンドは CLI リファレンスの astro dev / build / preview / check / sync です。codeagent.jp 自身がこの型で運用しています。
# AGENTS.md — Astro
## Commands- dev: `npm run dev`(= astro dev)- build: `npm run build`(= astro build。dist/ に出力)- preview: `npm run preview`(= astro preview。build 後の dist/ を配信)- check: `npx astro check`(.astro の型検査。PR 前に必ず)- sync: `npx astro sync`(content collections の型を再生成。スキーマを触ったら実行)
## Layout- `src/pages/` … 唯一の予約ディレクトリ。ファイル = ルート。`*.ts` で GET を export すると静的エンドポイント(例: `llms.txt.ts` → /llms.txt)- `src/components/` `src/layouts/` … 再利用部品と共通枠- `src/content/` … content collections。スキーマは `src/content.config.ts`- `public/` … ビルドを通さずそのままコピーされる(robots.txt、_headers など)- `astro.config.mjs` … site / integrations。`site` を変えると sitemap と RSS の URL が変わる
## Testing- UI を触ったら `npm run dev` で該当ページを開いて目視してから完了にする- frontmatter を触ったら `npx astro check` で content schema のエラーが 0 か確認する
## Do not- `dist/` `.astro/` `node_modules/` をコミットしない- `src/pages/` に「ページのつもりではない」ファイルを置かない(全部ルートになる)- content collection のスキーマ変更は既存記事全件に影響する。`astro check` を通さずにマージしない- `public/_headers` はルールが結合される。既存ルールの上書きを期待しない
## PR rules- 記事追加は frontmatter(title / description / pubDate / category / tags)を埋めてから- ビルド警告(未解決 import、存在しないコンポーネント)を PR で潰すテンプレートを育てるときの3つの原則
- 公式に無い規約を持ち込まない。 Go の
pkg/、Rails のapp/services/のような「よく見るが公式ではない」構成は、採用するならチームで決めてから足します。テンプレートの段階では入れません。 - 足すのは「同じミスを2回したとき」。 先回りで書いたルールは守られたかどうか検証できません。実際に踏んだ落とし穴を1行ずつ足す方が密度が保てます。
- サイズを見張る。 Codex は既定で 32 KiB までしか読まず、Claude Code は 200 行以下を推奨しています。今回のテンプレートはどれも 45 行以内なので、倍になったら見直しの合図です。
Claude Code と併用するなら、CLAUDE.md の先頭に @AGENTS.md と書いて参照させます。3方式を Windows で実測した結果は AGENTS.mdとCLAUDE.mdの違いと同期方法 にまとめました。他ツール向けの変換は AI設定ファイル変換ツール で下書きを作れます。
まとめ
- 5テンプレートとも Commands / Layout / Testing / Do not / PR rules の5節で統一し、各30〜45行に収めた
- ディレクトリ名とコマンドは各フレームワークの公式ドキュメント(2026-09-14 確認)にあるものだけ。
next lintや Go のpkg/のような公式に無いものは入れていない - スタック固有の落とし穴(予約ファイル名、
schema.rb、go.sum、src/pages/)を Do not に落とし込むのが、テンプレートの一番の価値 - 足すのは同じミスを2回したとき。Codex の 32 KiB、Claude Code の 200 行がサイズの目安
関連記事
関連して読む
agents-md・claude-codeを続けて読む
· 参考リンク 4件AGENTS.mdとCLAUDE.mdの違いと同期方法:@インポート・リンク・生成スクリプト・モノレポ配置
CodexとClaude CodeがAGENTS.md・CLAUDE.mdをどの順で読むかを公式ドキュメントで確認し、3つの同期方式とモノレポ3階層での読み込みをWindowsで実測。2026年9月14日時点の挙動です。
claude-code・workflowを続けて読む
· 参考リンク 5件Claude Code Skills(SKILL.md)の作り方:配置・frontmatter・呼ばれ方と使い分け
Claude Code の Skills を SKILL.md 1枚で作る手順を、置き場所、公式 frontmatter、コマンド出力の埋め込み、自動で呼ばれる条件、CLAUDE.md や hooks との使い分けで整理。2.1.261 の claude -p で呼び出しを確認した出力付き(2026-09-14)。
この記事の情報・検証メモ
- agents-md
- claude-code
- codex
- workflow
- tips
- 公開日
- 情報確認
- 参考リンク
- 11件
- 更新性
- 長く使える
仕様・料金・提供範囲が変わりやすいテーマは、公開日・更新日・情報確認日を分けて管理します。 導入前には必ず記事末尾の一次情報と公式ドキュメントで最新状況を確認してください。
一次情報・参考リンク
- Next.js Docs: Project structure and organization https://nextjs.org/docs/app/getting-started/project-structure
- Next.js Docs: next CLI https://nextjs.org/docs/app/api-reference/cli/next
- Rails Guides: Getting Started (directory structure) https://guides.rubyonrails.org/getting_started.html
- Rails Guides: Testing Rails Applications https://guides.rubyonrails.org/testing.html
- FastAPI: Bigger Applications - Multiple Files https://fastapi.tiangolo.com/tutorial/bigger-applications/
- FastAPI: Testing https://fastapi.tiangolo.com/tutorial/testing/
- Go: Organizing a Go module https://go.dev/doc/modules/layout
- Go: How to Write Go Code https://go.dev/doc/code
- Astro Docs: Project Structure https://docs.astro.build/en/basics/project-structure/
- Astro Docs: CLI Commands https://docs.astro.build/en/reference/cli-reference/
- Codex Docs: AGENTS.md https://learn.chatgpt.com/docs/agent-configuration/agents-md