foundruu 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/assets/templates/ai/_common/company/coding-standard.md +35 -0
- package/assets/templates/ai/_common/company/git-workflow.md +40 -0
- package/assets/templates/ai/_common/company/review-policy.md +30 -0
- package/assets/templates/ai/_common/company/security.md +25 -0
- package/assets/templates/ai/_common/project/architecture.md.hbs +29 -0
- package/assets/templates/ai/_common/project/conventions.md +24 -0
- package/assets/templates/ai/_common/project/overview.md.hbs +37 -0
- package/assets/templates/ai/_common/project/testing.md +32 -0
- package/assets/templates/ai/claude/CLAUDE.md.hbs +65 -0
- package/assets/templates/ai/codex/CODEX.md.hbs +60 -0
- package/assets/templates/base/.env.example +4 -0
- package/assets/templates/base/README.md.hbs +73 -0
- package/assets/templates/features/discord/.env.example.patch +3 -0
- package/assets/templates/features/discord/package.json.patch +5 -0
- package/assets/templates/features/docker/Dockerfile.hbs +38 -0
- package/assets/templates/features/docker/docker-compose.yml.hbs +11 -0
- package/assets/templates/features/eslint/eslint.config.js +14 -0
- package/assets/templates/features/eslint/package.json.patch +11 -0
- package/assets/templates/features/github-actions/.github/workflows/ci.yml.hbs +51 -0
- package/assets/templates/features/lark/.env.example.patch +3 -0
- package/assets/templates/features/lark/package.json.patch +5 -0
- package/assets/templates/features/line-bot/.env.example.patch +2 -0
- package/assets/templates/features/line-bot/package.json.patch +5 -0
- package/assets/templates/features/prettier/.prettierignore +3 -0
- package/assets/templates/features/prettier/.prettierrc +7 -0
- package/assets/templates/features/prettier/package.json.patch +9 -0
- package/assets/templates/features/react/index.html.hbs +12 -0
- package/assets/templates/features/react/package.json.patch +17 -0
- package/assets/templates/features/react/src/web/App.tsx.hbs +8 -0
- package/assets/templates/features/react/src/web/main.tsx +9 -0
- package/assets/templates/features/react/vite.config.ts +6 -0
- package/assets/templates/features/react-laravel/package.json.patch +19 -0
- package/assets/templates/features/react-laravel/resources/js/app.jsx.hbs +17 -0
- package/assets/templates/features/react-laravel/vite.config.js +13 -0
- package/assets/templates/features/vitest/package.json.patch +10 -0
- package/assets/templates/features/vitest/tests/index.test.ts.hbs +7 -0
- package/assets/templates/features/vitest/vitest.config.ts +11 -0
- package/assets/templates/languages/laravel/.env.example.patch +12 -0
- package/assets/templates/languages/laravel/composer.json.hbs +41 -0
- package/assets/templates/languages/laravel/docs/SETUP.md.hbs +24 -0
- package/assets/templates/languages/typescript/package.json.patch +20 -0
- package/assets/templates/languages/typescript/src/index.ts.hbs +1 -0
- package/assets/templates/languages/typescript/tsconfig.json +17 -0
- package/assets/workflow/.ai/prompts/session-workflow.md +72 -0
- package/assets/workflow/.ai/templates/session/design.md +21 -0
- package/assets/workflow/.ai/templates/session/questions.md +34 -0
- package/assets/workflow/.ai/templates/session/requirements.md +25 -0
- package/assets/workflow/.ai/templates/session/summary.md +21 -0
- package/assets/workflow/.ai/templates/session/tasks.md +13 -0
- package/assets/workflow/.ai/templates/session/test.md +15 -0
- package/assets/workflow/.ai/workflows/bugfix.md +19 -0
- package/assets/workflow/.ai/workflows/development.md +27 -0
- package/assets/workflow/.ai/workflows/feature.md +20 -0
- package/assets/workflow/.ai/workflows/review.md +19 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +89 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.js +64 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.js +94 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/session.d.ts +8 -0
- package/dist/commands/session.js +96 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/update.d.ts +13 -0
- package/dist/commands/update.js +64 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/workflow.d.ts +7 -0
- package/dist/commands/workflow.js +64 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/core/assets.d.ts +8 -0
- package/dist/core/assets.js +29 -0
- package/dist/core/assets.js.map +1 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.js +31 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/copier.d.ts +25 -0
- package/dist/core/copier.js +103 -0
- package/dist/core/copier.js.map +1 -0
- package/dist/core/fetcher.d.ts +10 -0
- package/dist/core/fetcher.js +56 -0
- package/dist/core/fetcher.js.map +1 -0
- package/dist/core/logger.d.ts +7 -0
- package/dist/core/logger.js +15 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/sync.d.ts +26 -0
- package/dist/core/sync.js +69 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/doctor/checks.d.ts +5 -0
- package/dist/doctor/checks.js +97 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/deep.d.ts +39 -0
- package/dist/doctor/deep.js +144 -0
- package/dist/doctor/deep.js.map +1 -0
- package/dist/doctor/rc.d.ts +13 -0
- package/dist/doctor/rc.js +31 -0
- package/dist/doctor/rc.js.map +1 -0
- package/dist/doctor/runner.d.ts +3 -0
- package/dist/doctor/runner.js +39 -0
- package/dist/doctor/runner.js.map +1 -0
- package/dist/doctor/types.d.ts +32 -0
- package/dist/doctor/types.js +3 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/registry/templates.d.ts +18 -0
- package/dist/registry/templates.js +45 -0
- package/dist/registry/templates.js.map +1 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ruu5LP
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# FoundRuu CLI
|
|
2
|
+
|
|
3
|
+
AI開発を標準化するためのプラットフォーム **FoundRuu** の CLI です。
|
|
4
|
+
プロジェクトごとに異なるルール・開発フロー・ドキュメント不足によるAI品質のばらつきを解消し、
|
|
5
|
+
人とAIが同じルール・同じ品質で開発できる環境を提供します。
|
|
6
|
+
|
|
7
|
+
`Ruu5LP/dev-init-templates`(テンプレート)・`Ruu5LP/dev-workflow`(Workflow)・`Ruu5LP/DevDoctor`(診断)の3リポジトリを統合しています。
|
|
8
|
+
|
|
9
|
+
## インストール
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install
|
|
13
|
+
npm run build
|
|
14
|
+
npm link # foundruu コマンドとして使えるようにする
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## コマンド
|
|
18
|
+
|
|
19
|
+
| コマンド | 説明 |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `foundruu init [--template <id>] [--name <name>]` | テンプレート + Workflow + Rules + Doctor設定を一括導入 |
|
|
22
|
+
| `foundruu workflow install` | Workflow / Prompt / Rules(`.ai/`)のみを既存リポジトリへ導入 |
|
|
23
|
+
| `foundruu doctor [--json]` | リポジトリがAI開発可能な状態か診断(fail ありで exit 1) |
|
|
24
|
+
| `foundruu doctor --deep [--since <ref>]` | docs/ と git 差分から AI開発プロセス品質をスコア診断 |
|
|
25
|
+
| `foundruu update [--force]` | Workflow / Prompt / Rules を最新へ更新 |
|
|
26
|
+
| `foundruu session start <name>` / `session list` | AI開発セッションの作成 / 一覧 |
|
|
27
|
+
| `foundruu templates` | 利用可能なテンプレート一覧 |
|
|
28
|
+
| `foundruu --help` / `--version` | ヘルプ / バージョン |
|
|
29
|
+
|
|
30
|
+
## 利用フロー
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# ① 新しいリポジトリにAI開発環境を構築
|
|
34
|
+
mkdir my-app && cd my-app && git init
|
|
35
|
+
foundruu init --template typescript --name my-app
|
|
36
|
+
|
|
37
|
+
# ② 既存リポジトリには Workflow だけ導入
|
|
38
|
+
foundruu workflow install
|
|
39
|
+
|
|
40
|
+
# ③ セッションを作成し、AIエージェントに .ai/ を読ませて開発
|
|
41
|
+
foundruu session start add-login-api
|
|
42
|
+
|
|
43
|
+
# ④ いつでも健全性チェック
|
|
44
|
+
foundruu doctor
|
|
45
|
+
|
|
46
|
+
# ⑤ Workflow を最新へ
|
|
47
|
+
foundruu update
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## init で導入されるもの
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
.ai/
|
|
54
|
+
prompts/session-workflow.md # 要件ゲート付き開発フロー
|
|
55
|
+
workflows/ # development / feature / bugfix / review
|
|
56
|
+
templates/session/ # requirements / design / tasks / test / summary 等
|
|
57
|
+
docs/ai/ # 会社共通ルール + プロジェクトルール
|
|
58
|
+
CLAUDE.md / CODEX.md # AIエージェント向けエントリポイント
|
|
59
|
+
+ テンプレート本体(src/, tsconfig, ESLint, Prettier, Vitest, Docker, GitHub Actions, .env.example ...)
|
|
60
|
+
+ foundruu.json # FoundRuu 管理情報(update のバージョン基準)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Doctor のチェック項目
|
|
64
|
+
|
|
65
|
+
README / LICENSE / .gitignore / .env.example / package.json・composer.json /
|
|
66
|
+
Docker / GitHub Actions / AI Rules / Workflow / Prompt / foundruu.json
|
|
67
|
+
|
|
68
|
+
チェックは [src/doctor/checks.ts](src/doctor/checks.ts) に宣言的に定義されており、1エントリ追加するだけで拡張できます。
|
|
69
|
+
`--json` 出力と exit code により GitHub Actions からも利用できます。
|
|
70
|
+
|
|
71
|
+
プロジェクトルートの `.foundruurc` でカスタマイズできます:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"doctor": {
|
|
76
|
+
"disable": ["docker"],
|
|
77
|
+
"severity": { "license": "error" }
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
`foundruu doctor --deep` は DevDoctor 由来の品質診断で、docs/(および最新の `.ai/sessions/`)の
|
|
83
|
+
要件・設計・テスト・AI指示ドキュメントをスコア化し、不足観点と改善案を提示します。
|
|
84
|
+
|
|
85
|
+
## GitHub Actions として使う
|
|
86
|
+
|
|
87
|
+
他リポジトリの PR チェックとして doctor を実行できます:
|
|
88
|
+
|
|
89
|
+
```yaml
|
|
90
|
+
jobs:
|
|
91
|
+
doctor:
|
|
92
|
+
runs-on: ubuntu-latest
|
|
93
|
+
steps:
|
|
94
|
+
- uses: actions/checkout@v4
|
|
95
|
+
- uses: Ruu5LP/RuunFoundry@main
|
|
96
|
+
with:
|
|
97
|
+
fail-on: error # error / warning / never
|
|
98
|
+
deep: 'true' # --deep のスコア診断も実行
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
結果はジョブサマリに表形式で出力されます。
|
|
102
|
+
|
|
103
|
+
## 開発
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npm run dev -- doctor # ts-node で実行
|
|
107
|
+
npm test # vitest
|
|
108
|
+
npm run typecheck
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## ドキュメント
|
|
112
|
+
|
|
113
|
+
- [docs/investigation.md](docs/investigation.md) — 3リポジトリの調査結果
|
|
114
|
+
- [docs/architecture.md](docs/architecture.md) — 全体アーキテクチャ・設計判断
|
|
115
|
+
- [docs/roadmap.md](docs/roadmap.md) — MVP以降のロードマップ
|
|
116
|
+
|
|
117
|
+
## ライセンス
|
|
118
|
+
|
|
119
|
+
MIT
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# コーディング規約
|
|
2
|
+
|
|
3
|
+
## 基本方針
|
|
4
|
+
|
|
5
|
+
- 読みやすさを最優先にする
|
|
6
|
+
- 一貫性を保つ(既存のスタイルに合わせる)
|
|
7
|
+
- 不要なコメントは書かない(コードで意図を伝える)
|
|
8
|
+
- マジックナンバーは定数として定義する
|
|
9
|
+
|
|
10
|
+
## 命名規則
|
|
11
|
+
|
|
12
|
+
### TypeScript / JavaScript
|
|
13
|
+
- 変数・関数: `camelCase`
|
|
14
|
+
- クラス・型・インターフェース: `PascalCase`
|
|
15
|
+
- 定数: `UPPER_SNAKE_CASE`
|
|
16
|
+
- ファイル名: `kebab-case.ts`
|
|
17
|
+
|
|
18
|
+
### Python
|
|
19
|
+
- 変数・関数: `snake_case`
|
|
20
|
+
- クラス: `PascalCase`
|
|
21
|
+
- 定数: `UPPER_SNAKE_CASE`
|
|
22
|
+
- ファイル名: `snake_case.py`
|
|
23
|
+
|
|
24
|
+
## エラーハンドリング
|
|
25
|
+
|
|
26
|
+
- エラーは適切な型で throw/raise する
|
|
27
|
+
- エラーメッセージは英語で記述する
|
|
28
|
+
- 握り潰しは絶対に禁止(空の catch は NG)
|
|
29
|
+
|
|
30
|
+
## セキュリティ
|
|
31
|
+
|
|
32
|
+
- シークレットは必ず環境変数で管理する
|
|
33
|
+
- `.env` をコミットしない(`.env.example` のみ)
|
|
34
|
+
- SQL インジェクション・XSS に注意する
|
|
35
|
+
- 詳細は [security.md](./security.md) を参照
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Git ワークフロー
|
|
2
|
+
|
|
3
|
+
## ブランチ戦略
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
main ← 本番リリース済み
|
|
7
|
+
develop ← 開発統合
|
|
8
|
+
feature/* ← 機能開発
|
|
9
|
+
fix/* ← バグ修正
|
|
10
|
+
chore/* ← 依存更新・設定変更
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## コミットメッセージ規約(Conventional Commits)
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
<type>(<scope>): <subject>
|
|
17
|
+
|
|
18
|
+
type:
|
|
19
|
+
feat 新機能
|
|
20
|
+
fix バグ修正
|
|
21
|
+
docs ドキュメントのみ
|
|
22
|
+
style フォーマット(動作変更なし)
|
|
23
|
+
refactor リファクタリング
|
|
24
|
+
test テスト追加・修正
|
|
25
|
+
chore ビルド・補助ツール変更
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
例:
|
|
29
|
+
```
|
|
30
|
+
feat(auth): add JWT refresh token support
|
|
31
|
+
fix(api): handle null response from external API
|
|
32
|
+
docs(readme): update setup instructions
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## PR ルール
|
|
36
|
+
|
|
37
|
+
- 1 PR = 1 つの目的に絞る
|
|
38
|
+
- レビュー前に自己レビューを行う
|
|
39
|
+
- CI が通っていることを確認してからレビュー依頼する
|
|
40
|
+
- マージは Squash merge を使用する
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# レビューポリシー
|
|
2
|
+
|
|
3
|
+
## レビュー観点
|
|
4
|
+
|
|
5
|
+
### Must(必ず確認)
|
|
6
|
+
- セキュリティ上の問題がないか
|
|
7
|
+
- テストが網羅されているか
|
|
8
|
+
- エラーハンドリングが適切か
|
|
9
|
+
- 仕様を満たしているか
|
|
10
|
+
|
|
11
|
+
### Should(できる限り確認)
|
|
12
|
+
- パフォーマンス上の懸念がないか
|
|
13
|
+
- 可読性・保守性が十分か
|
|
14
|
+
- 命名が適切か
|
|
15
|
+
|
|
16
|
+
### Nice to have(余裕があれば)
|
|
17
|
+
- より良い実装方法の提案
|
|
18
|
+
- 将来的な拡張性の考慮
|
|
19
|
+
|
|
20
|
+
## レビューコメントの書き方
|
|
21
|
+
|
|
22
|
+
- 問題点だけでなく改善案も添える
|
|
23
|
+
- 個人を攻撃しない(コードを指摘する)
|
|
24
|
+
- `nit:` プレフィックスで軽微な指摘を明示する
|
|
25
|
+
|
|
26
|
+
## 承認基準
|
|
27
|
+
|
|
28
|
+
- Must 項目を全てクリアしていること
|
|
29
|
+
- CI(lint / test / typecheck)が通過していること
|
|
30
|
+
- 1名以上の Approve があること
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# セキュリティガイドライン
|
|
2
|
+
|
|
3
|
+
## シークレット管理
|
|
4
|
+
|
|
5
|
+
- APIキー・パスワードは必ず環境変数で管理する
|
|
6
|
+
- `.env` は `.gitignore` に追加し、絶対にコミットしない
|
|
7
|
+
- `.env.example` にキー名のみ記載(値は空にする)
|
|
8
|
+
- シークレットを誤ってコミットした場合は即座にローテーションする
|
|
9
|
+
|
|
10
|
+
## 入力値の検証
|
|
11
|
+
|
|
12
|
+
- 外部からの入力は必ずバリデーションする
|
|
13
|
+
- SQL クエリはプレースホルダーを使用する(直接埋め込み禁止)
|
|
14
|
+
- HTML を出力する場合は必ずエスケープする
|
|
15
|
+
|
|
16
|
+
## 依存関係
|
|
17
|
+
|
|
18
|
+
- `npm audit` / `pip-audit` を定期実行する
|
|
19
|
+
- 既知の脆弱性がある依存を放置しない
|
|
20
|
+
|
|
21
|
+
## API セキュリティ
|
|
22
|
+
|
|
23
|
+
- 認証が必要なエンドポイントは必ず認証を実装する
|
|
24
|
+
- レートリミットを設ける
|
|
25
|
+
- CORS 設定を適切に行う(`*` は本番 NG)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# アーキテクチャ
|
|
2
|
+
|
|
3
|
+
## 概要
|
|
4
|
+
|
|
5
|
+
(アーキテクチャの概要をここに記載してください)
|
|
6
|
+
|
|
7
|
+
## コンポーネント構成
|
|
8
|
+
|
|
9
|
+
(図や説明をここに記載してください)
|
|
10
|
+
|
|
11
|
+
## データフロー
|
|
12
|
+
|
|
13
|
+
(データの流れをここに記載してください)
|
|
14
|
+
|
|
15
|
+
## 外部依存
|
|
16
|
+
|
|
17
|
+
{{#if (hasFeature "discord")}}
|
|
18
|
+
- **Discord API** — ボット機能
|
|
19
|
+
{{/if}}
|
|
20
|
+
{{#if (hasFeature "line-bot")}}
|
|
21
|
+
- **LINE Messaging API** — チャットボット機能
|
|
22
|
+
{{/if}}
|
|
23
|
+
{{#if (hasFeature "lark")}}
|
|
24
|
+
- **Lark API** — ビジネスチャット連携
|
|
25
|
+
{{/if}}
|
|
26
|
+
|
|
27
|
+
## 設計上の決定事項
|
|
28
|
+
|
|
29
|
+
(重要な設計上の決定とその理由をここに記載してください)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# プロジェクト規約
|
|
2
|
+
|
|
3
|
+
## ファイル構成規約
|
|
4
|
+
|
|
5
|
+
- `src/` 以下にソースコードを配置する
|
|
6
|
+
- `tests/` 以下にテストコードを配置する(対象ファイルと同じ階層構造)
|
|
7
|
+
- `docs/` 以下にドキュメントを配置する
|
|
8
|
+
|
|
9
|
+
## インポート規約
|
|
10
|
+
|
|
11
|
+
- 相対パスより絶対パスを優先する(エイリアス設定済みの場合)
|
|
12
|
+
- 型のみのインポートは `import type` を使用する
|
|
13
|
+
|
|
14
|
+
## 関数設計
|
|
15
|
+
|
|
16
|
+
- 1関数 = 1責務を守る
|
|
17
|
+
- 引数は 3つ以下を目安にする(超える場合はオブジェクト化)
|
|
18
|
+
- 副作用のある関数と純粋な関数を分離する
|
|
19
|
+
|
|
20
|
+
## コミットのタイミング
|
|
21
|
+
|
|
22
|
+
- 動作確認済みの単位でコミットする
|
|
23
|
+
- 途中状態(コンパイルエラーあり等)でコミットしない
|
|
24
|
+
- lint / typecheck が通ってからコミットする
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# プロジェクト概要
|
|
2
|
+
|
|
3
|
+
## {{projectName}}
|
|
4
|
+
|
|
5
|
+
{{#if description}}
|
|
6
|
+
{{description}}
|
|
7
|
+
{{else}}
|
|
8
|
+
(プロジェクトの概要をここに記載してください)
|
|
9
|
+
{{/if}}
|
|
10
|
+
|
|
11
|
+
## 技術スタック
|
|
12
|
+
|
|
13
|
+
- **言語:** {{languageLabel}}
|
|
14
|
+
{{#if aiProviderLabels.length}}
|
|
15
|
+
- **AI ツール:** {{#each aiProviderLabels}}{{this}}{{#unless @last}}, {{/unless}}{{/each}}
|
|
16
|
+
{{/if}}
|
|
17
|
+
|
|
18
|
+
## 機能一覧
|
|
19
|
+
|
|
20
|
+
{{#each featureLabels}}
|
|
21
|
+
- {{this}}
|
|
22
|
+
{{/each}}
|
|
23
|
+
|
|
24
|
+
## ディレクトリ構成
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
{{projectName}}/
|
|
28
|
+
├── src/ # ソースコード
|
|
29
|
+
├── tests/ # テストコード
|
|
30
|
+
├── docs/ # ドキュメント
|
|
31
|
+
├── .ai/ # AI ルール
|
|
32
|
+
│ ├── company/ # 社内共通ルール
|
|
33
|
+
│ ├── project/ # プロジェクト固有ルール
|
|
34
|
+
{{#if (hasAi "claude")}}│ ├── claude/ # Claude Code ルール
|
|
35
|
+
{{/if}}{{#if (hasAi "codex")}}│ └── codex/ # Codex ルール
|
|
36
|
+
{{/if}}└── README.md
|
|
37
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# テスト方針
|
|
2
|
+
|
|
3
|
+
## テストの種類
|
|
4
|
+
|
|
5
|
+
- **Unit Test** — 単一の関数・クラスをテストする
|
|
6
|
+
- **Integration Test** — 複数コンポーネントの連携をテストする
|
|
7
|
+
|
|
8
|
+
## テスト命名規則
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
describe('対象の名前', () => {
|
|
12
|
+
it('〜すること', () => { ... })
|
|
13
|
+
it('〜の場合に〜すること', () => { ... })
|
|
14
|
+
})
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## テストカバレッジ目標
|
|
18
|
+
|
|
19
|
+
- 新規コード: 80% 以上
|
|
20
|
+
- ビジネスロジック: 100% を目指す
|
|
21
|
+
|
|
22
|
+
## テストを書かなくてよいもの
|
|
23
|
+
|
|
24
|
+
- UI コンポーネントの見た目
|
|
25
|
+
- 設定ファイル
|
|
26
|
+
- 型定義のみのファイル
|
|
27
|
+
|
|
28
|
+
## テストの禁止事項
|
|
29
|
+
|
|
30
|
+
- 実際の API・DB を叩くテストをデフォルトで実行しない(CI が壊れる)
|
|
31
|
+
- テスト間で状態を共有しない(各テストは独立させる)
|
|
32
|
+
- `console.log` をテストコードに残さない
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
このファイルは Claude Code がプロジェクトを理解するためのガイドです。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## プロジェクト概要
|
|
8
|
+
|
|
9
|
+
**プロジェクト名:** {{projectName}}
|
|
10
|
+
{{#if description}}**概要:** {{description}}{{/if}}
|
|
11
|
+
|
|
12
|
+
- **言語:** {{languageLabel}}
|
|
13
|
+
- **AI ツール:** {{#each aiProviderLabels}}{{this}}{{#unless @last}}, {{/unless}}{{/each}}
|
|
14
|
+
|
|
15
|
+
### 機能一覧
|
|
16
|
+
{{#each featureLabels}}
|
|
17
|
+
- {{this}}
|
|
18
|
+
{{/each}}
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 必ず最初に読むファイル
|
|
23
|
+
|
|
24
|
+
作業開始前に以下を読んでください:
|
|
25
|
+
|
|
26
|
+
1. [コーディング規約](../company/coding-standard.md)
|
|
27
|
+
2. [Git ワークフロー](../company/git-workflow.md)
|
|
28
|
+
3. [レビューポリシー](../company/review-policy.md)
|
|
29
|
+
4. [セキュリティガイドライン](../company/security.md)
|
|
30
|
+
5. [プロジェクト概要](../project/overview.md)
|
|
31
|
+
6. [アーキテクチャ](../project/architecture.md)
|
|
32
|
+
7. [プロジェクト規約](../project/conventions.md)
|
|
33
|
+
8. [テスト方針](../project/testing.md)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 作業ルール
|
|
38
|
+
|
|
39
|
+
### 実装前
|
|
40
|
+
- 実装前に設計・方針を簡潔に書いてから着手すること
|
|
41
|
+
- 大きな変更はユーザーに確認してから実施すること
|
|
42
|
+
|
|
43
|
+
### 実装中
|
|
44
|
+
- 小さい単位で実装・確認を繰り返すこと
|
|
45
|
+
- テストを壊さないこと
|
|
46
|
+
|
|
47
|
+
### 実装後(必須チェックリスト)
|
|
48
|
+
{{#if (hasFeature "eslint")}}
|
|
49
|
+
- [ ] `npm run lint` を実行してエラーがないこと
|
|
50
|
+
{{/if}}
|
|
51
|
+
{{#if (hasFeature "vitest")}}
|
|
52
|
+
- [ ] `npm test` を実行して全テストが通ること
|
|
53
|
+
{{/if}}
|
|
54
|
+
- [ ] `npm run typecheck` を実行してエラーがないこと
|
|
55
|
+
- [ ] `README.md` を最新状態に更新すること
|
|
56
|
+
- [ ] `docs/` 以下のドキュメントを必要に応じて更新すること
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Claude Code 固有ルール
|
|
61
|
+
|
|
62
|
+
- ファイルを読む前に「何を確認するか」を宣言すること
|
|
63
|
+
- 複数ファイルの変更時は影響範囲を事前にリストアップすること
|
|
64
|
+
- 不明点はコードを推測せず、ユーザーに質問すること
|
|
65
|
+
- セキュリティに関わる変更は必ずユーザーの確認を取ること
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# CODEX.md
|
|
2
|
+
|
|
3
|
+
このファイルは Codex がプロジェクトを理解するためのガイドです。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## プロジェクト概要
|
|
8
|
+
|
|
9
|
+
**プロジェクト名:** {{projectName}}
|
|
10
|
+
{{#if description}}**概要:** {{description}}{{/if}}
|
|
11
|
+
|
|
12
|
+
- **言語:** {{languageLabel}}
|
|
13
|
+
- **AI ツール:** {{#each aiProviderLabels}}{{this}}{{#unless @last}}, {{/unless}}{{/each}}
|
|
14
|
+
|
|
15
|
+
### 機能一覧
|
|
16
|
+
{{#each featureLabels}}
|
|
17
|
+
- {{this}}
|
|
18
|
+
{{/each}}
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 共通ルールの参照
|
|
23
|
+
|
|
24
|
+
以下のドキュメントに従って作業してください:
|
|
25
|
+
|
|
26
|
+
- [コーディング規約](../company/coding-standard.md)
|
|
27
|
+
- [Git ワークフロー](../company/git-workflow.md)
|
|
28
|
+
- [セキュリティガイドライン](../company/security.md)
|
|
29
|
+
- [プロジェクト概要](../project/overview.md)
|
|
30
|
+
- [プロジェクト規約](../project/conventions.md)
|
|
31
|
+
- [テスト方針](../project/testing.md)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 作業ルール
|
|
36
|
+
|
|
37
|
+
### 変更単位
|
|
38
|
+
- 小さい変更単位で作業すること(1 PR = 1 目的)
|
|
39
|
+
- 大規模な変更(アーキテクチャ変更・大量ファイル変更)は事前にユーザーに確認すること
|
|
40
|
+
|
|
41
|
+
### テスト
|
|
42
|
+
- テストを壊さないこと
|
|
43
|
+
- 新規機能には必ずテストを追加すること
|
|
44
|
+
|
|
45
|
+
### 実装後チェック(必須)
|
|
46
|
+
{{#if (hasFeature "eslint")}}
|
|
47
|
+
- `npm run lint` でエラーがないこと
|
|
48
|
+
{{/if}}
|
|
49
|
+
{{#if (hasFeature "vitest")}}
|
|
50
|
+
- `npm test` で全テストが通ること
|
|
51
|
+
{{/if}}
|
|
52
|
+
- `npm run typecheck` でエラーがないこと
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Codex 固有ルール
|
|
57
|
+
|
|
58
|
+
- コードの意図が不明な場合は推測せず、コメントや構造から判断すること
|
|
59
|
+
- 既存のコードスタイルに合わせること(独自スタイルを導入しない)
|
|
60
|
+
- リファクタリングとバグ修正を同一 PR に混在させないこと
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# {{projectName}}
|
|
2
|
+
|
|
3
|
+
{{#if description}}
|
|
4
|
+
{{description}}
|
|
5
|
+
{{/if}}
|
|
6
|
+
|
|
7
|
+
## Tech Stack
|
|
8
|
+
|
|
9
|
+
- **Language:** {{languageLabel}}
|
|
10
|
+
{{#if aiProviderLabels.length}}
|
|
11
|
+
- **AI:** {{#each aiProviderLabels}}{{this}}{{#unless @last}}, {{/unless}}{{/each}}
|
|
12
|
+
{{/if}}
|
|
13
|
+
|
|
14
|
+
## Features
|
|
15
|
+
|
|
16
|
+
{{#each featureLabels}}
|
|
17
|
+
- {{this}}
|
|
18
|
+
{{/each}}
|
|
19
|
+
|
|
20
|
+
## Getting Started
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Install dependencies
|
|
24
|
+
npm install
|
|
25
|
+
|
|
26
|
+
# Run development server
|
|
27
|
+
npm run dev
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
{{#if (hasFeature "docker")}}
|
|
31
|
+
## Docker
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
docker-compose up -d
|
|
35
|
+
```
|
|
36
|
+
{{/if}}
|
|
37
|
+
|
|
38
|
+
{{#if (hasFeature "vitest")}}
|
|
39
|
+
## Testing
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm test
|
|
43
|
+
npm run test:coverage
|
|
44
|
+
```
|
|
45
|
+
{{/if}}
|
|
46
|
+
|
|
47
|
+
{{#if (hasFeature "eslint")}}
|
|
48
|
+
## Linting
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm run lint
|
|
52
|
+
```
|
|
53
|
+
{{/if}}
|
|
54
|
+
|
|
55
|
+
## AI Documentation
|
|
56
|
+
|
|
57
|
+
AI-specific rules and guidelines are located in `.ai/`:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
.ai/
|
|
61
|
+
├── company/ # Company-wide coding standards
|
|
62
|
+
├── project/ # Project-specific conventions
|
|
63
|
+
{{#if (hasAi "claude")}}
|
|
64
|
+
├── claude/ # Claude Code rules → CLAUDE.md (symlink at root)
|
|
65
|
+
{{/if}}
|
|
66
|
+
{{#if (hasAi "codex")}}
|
|
67
|
+
└── codex/ # Codex rules → CODEX.md (symlink at root)
|
|
68
|
+
{{/if}}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## License
|
|
72
|
+
|
|
73
|
+
MIT © {{year}}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{{#eq language "typescript"}}
|
|
2
|
+
FROM node:20-alpine AS builder
|
|
3
|
+
WORKDIR /app
|
|
4
|
+
COPY package*.json ./
|
|
5
|
+
RUN npm ci
|
|
6
|
+
COPY . .
|
|
7
|
+
RUN npm run build
|
|
8
|
+
|
|
9
|
+
FROM node:20-alpine
|
|
10
|
+
WORKDIR /app
|
|
11
|
+
COPY package*.json ./
|
|
12
|
+
RUN npm ci --omit=dev
|
|
13
|
+
COPY --from=builder /app/dist ./dist
|
|
14
|
+
EXPOSE 3000
|
|
15
|
+
CMD ["node", "dist/index.js"]
|
|
16
|
+
{{/eq}}
|
|
17
|
+
|
|
18
|
+
{{#eq language "python"}}
|
|
19
|
+
FROM python:3.12-slim
|
|
20
|
+
WORKDIR /app
|
|
21
|
+
COPY requirements.txt .
|
|
22
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
23
|
+
COPY . .
|
|
24
|
+
EXPOSE 8000
|
|
25
|
+
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
|
26
|
+
{{/eq}}
|
|
27
|
+
|
|
28
|
+
{{#eq language "laravel"}}
|
|
29
|
+
FROM php:8.3-fpm-alpine
|
|
30
|
+
WORKDIR /var/www
|
|
31
|
+
RUN apk add --no-cache nginx
|
|
32
|
+
COPY composer.json composer.lock ./
|
|
33
|
+
RUN composer install --no-dev --optimize-autoloader
|
|
34
|
+
COPY . .
|
|
35
|
+
RUN php artisan config:cache && php artisan route:cache
|
|
36
|
+
EXPOSE 80
|
|
37
|
+
CMD ["php-fpm"]
|
|
38
|
+
{{/eq}}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import eslint from '@eslint/js'
|
|
3
|
+
import tseslint from 'typescript-eslint'
|
|
4
|
+
|
|
5
|
+
export default tseslint.config(
|
|
6
|
+
eslint.configs.recommended,
|
|
7
|
+
...tseslint.configs.recommended,
|
|
8
|
+
{
|
|
9
|
+
rules: {
|
|
10
|
+
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
|
|
11
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
)
|