원클릭으로
init-project
プロジェクトを Bun + Hono(バックエンド)+ Vite + React(フロントエンド)+ Biome でスキャフォールドする初期化スキル。テンプレートを clone した直後の初回セットアップ時に、ユーザーが明示的に実行する。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
プロジェクトを Bun + Hono(バックエンド)+ Vite + React(フロントエンド)+ Biome でスキャフォールドする初期化スキル。テンプレートを clone した直後の初回セットアップ時に、ユーザーが明示的に実行する。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Issue、ADR、設計メモ、実装計画、PR diff、指定 path に対し、書かれていない前提、producer / consumer の未接続、実運用だけで露出する failure path をコードと設定の証拠付きで探索する review-only スキル。実装前、設計レビュー、PR 前に未知や blocker を確認するときに使う。
新機能をヒアリング → 仕様化 → Issue 作成 → 5 役割並列実装の順で進める機能開発オーケストレーションスキル。「○○を作って」「○○機能を追加して」など新機能・機能拡張の実装依頼を受けたら、直接実装を始めずに必ず最初に使う。
docs/architecture/harness.md の invariant を機械的に検証するスキル。引数なしで `--staged --fail-on=error` (PR 直前用)、`full` で全件スキャン、`why <RULE_ID>` で invariant の意図を harness.md から引いて表示。コミット直前・Stop hook・PR 作成前ゲート・invariant 違反の調査に使う。
PR の主目的から外れた発見・改善・技術的負債を「フォローアップ」として記録、列挙、解消管理するスキル。スコープクリープを防ぎ、scope 外の課題を別 PR で確実に処理する仕組み。引数なしで起動すると未処理一覧、`add <title>` で追加、`resolve <id> <pr-url>` で解消記録、`list-pr-body` で PR 本文に貼る markdown を出力。作業中に scope 外の改善点・技術的負債・バグを見つけたら必ず使う。
.claude 配下のスキル・フック・設定をサプライチェーン成果物として監査するスキル。harness のスキル invariant (frontmatter 検証 / 隠し指示検出 / 危険実行パターン) の全件スキャンと、機械検査で拾えない「宣言と実態の乖離」のレビューチェックリストを実行する。スキルの新規追加・更新時、サードパーティスキルの導入前、定期監査に使う。
| name | init-project |
| description | プロジェクトを Bun + Hono(バックエンド)+ Vite + React(フロントエンド)+ Biome でスキャフォールドする初期化スキル。テンプレートを clone した直後の初回セットアップ時に、ユーザーが明示的に実行する。 |
| allowed-tools | Read, Write, AskUserQuestion, Bash(bun install --ignore-scripts:*), Bash(nr:*) |
| disable-model-invocation | true |
このスキルはプロジェクトの初期化を行う。以下の手順を順番に実行すること。
biome.json を共有)bun testtest スクリプトは必ず終了するコマンドを使うこと。
ウォッチモードで起動するコマンドは CI やエージェントをブロックする。
| NG(ウォッチモード) | OK(終了する) |
|---|---|
vitest | vitest run |
vitest watch | vitest run |
jest --watch | jest --watchAll=false |
ウォッチ用途は別スクリプトとして切り出す。
{
"test": "bun test",
"test:watch": "bun test --watch"
}
このテンプレートでは bun test を標準として使用する。vitest を採用する場合は必ず vitest run を test スクリプトに使うこと。
まずユーザーに以下を確認する。
{
"name": "backend",
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "bun run --watch src/index.ts",
"start": "bun run src/index.ts",
"build": "bun build src/index.ts --outdir dist --target bun",
"test": "bun test",
"test:watch": "bun test --watch",
"test:coverage": "bun test --coverage",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"hono": "^4.0.0"
},
"devDependencies": {
"@types/bun": "latest",
"typescript": "^5.4.0"
}
}
ルートの tsconfig.base.json (strict + noUncheckedIndexedAccess + verbatimModuleSyntax 等の共有設定) を必ず extends する。各 package で重複した strict 設定を書かない。
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"types": ["bun-types"]
},
"include": ["src/**/*.ts"]
}
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.json({ status: 'ok' }));
export default app;
import { describe, expect, it } from 'bun:test';
import app from './index';
describe('アプリケーション', () => {
describe('GET /', () => {
it('ステータス ok を返すべき', async () => {
const res = await app.request('/');
expect(res.status).toBe(200);
expect(await res.json()).toEqual({ status: 'ok' });
});
});
});
package.json の scripts に以下を追加する。
"test:api": "hurl --test tests/api/*.hurl"
GET http://localhost:3000/
HTTP 200
[Asserts]
jsonpath "$.status" == "ok"
Hurl のインストール方法(README に追記する)。
# macOS
brew install hurl
# Linux
cargo install hurl
{
"name": "frontend",
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc --noEmit && vite build",
"preview": "vite preview",
"test": "bun test",
"test:watch": "bun test --watch",
"test:coverage": "bun test --coverage",
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"react": "^18.3.0",
"react-dom": "^18.3.0"
},
"devDependencies": {
"@playwright/test": "^1.44.0",
"@types/react": "^18.3.0",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.0",
"typescript": "^5.4.0",
"vite": "^5.3.0"
}
}
import { defineConfig } from '@playwright/test';
export default defineConfig({
testDir: './e2e',
use: {
baseURL: 'http://localhost:5173',
},
webServer: {
command: 'bun run dev',
url: 'http://localhost:5173',
reuseExistingServer: !process.env.CI,
},
});
import { expect, test } from '@playwright/test';
test.describe('トップページ', () => {
test('ページが表示されるべき', async ({ page }) => {
await page.goto('/');
await expect(page).toHaveTitle(/App/);
});
});
ルートの tsconfig.base.json を extends する。
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"jsx": "react-jsx"
},
"include": ["src"]
}
import react from '@vitejs/plugin-react';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [react()],
server: { port: 5173 },
});
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="<DESCRIPTION>" />
<link rel="canonical" href="<PUBLIC_URL>" />
<meta property="og:title" content="<SERVICE_NAME>" />
<meta property="og:description" content="<DESCRIPTION>" />
<meta property="og:url" content="<PUBLIC_URL>" />
<meta property="og:image" content="<OG_IMAGE_URL>" />
<meta name="twitter:card" content="summary_large_image" />
<title><SERVICE_NAME></title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
<PUBLIC_URL>、<SERVICE_NAME>、<DESCRIPTION>、<OG_IMAGE_URL> は
手順 1 で確認した実値に置換する。プレースホルダーのままファイルを作成しない。
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
const root = document.getElementById('root');
if (!root) throw new Error('root element not found');
createRoot(root).render(
<StrictMode>
<div>Hello</div>
</StrictMode>
);
上記の内容で各ファイルを Write ツールで作成する。ファイル名が .keep の場合は上書きしない。
ルートで lifecycle script を無効にして依存をインストールする。
bun install --ignore-scripts
nr test # 全ワークスペースのユニットテストが通ること
nr typecheck # 型エラーがないこと
nr test:e2e # フロントエンドの E2E テストが通ること(packages/frontend)
nr test:api # バックエンドの API テストが通ること(packages/backend、hurl が必要)
nr check:pre-release # 公開品質 invariant が通ること
作成したファイル一覧と次のステップ(機能追加、DB 設定など)を簡潔に報告する。