claudeos-core 2.3.2 → 2.4.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/CHANGELOG.md +736 -74
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.de.md +321 -883
- package/README.es.md +322 -883
- package/README.fr.md +322 -883
- package/README.hi.md +322 -883
- package/README.ja.md +322 -883
- package/README.ko.md +322 -882
- package/README.md +321 -883
- package/README.ru.md +322 -885
- package/README.vi.md +322 -883
- package/README.zh-CN.md +321 -881
- package/SECURITY.md +51 -0
- package/bin/commands/init.js +192 -37
- package/content-validator/index.js +97 -4
- package/health-checker/index.js +44 -10
- package/package.json +92 -90
- package/pass-json-validator/index.js +58 -7
- package/pass-prompts/templates/angular/pass3.md +15 -14
- package/pass-prompts/templates/common/claude-md-scaffold.md +81 -0
- package/pass-prompts/templates/common/pass3-footer.md +104 -0
- package/pass-prompts/templates/java-spring/pass3.md +19 -18
- package/pass-prompts/templates/kotlin-spring/pass3.md +23 -22
- package/pass-prompts/templates/node-express/pass3.md +18 -17
- package/pass-prompts/templates/node-fastify/pass3.md +11 -10
- package/pass-prompts/templates/node-nestjs/pass3.md +11 -10
- package/pass-prompts/templates/node-nextjs/pass3.md +18 -17
- package/pass-prompts/templates/node-vite/pass3.md +11 -10
- package/pass-prompts/templates/python-django/pass3.md +18 -17
- package/pass-prompts/templates/python-fastapi/pass3.md +18 -17
- package/pass-prompts/templates/python-flask/pass3.md +9 -8
- package/pass-prompts/templates/vue-nuxt/pass3.md +9 -8
- package/plan-installer/domain-grouper.js +45 -5
- package/plan-installer/index.js +11 -1
- package/plan-installer/scanners/scan-java.js +98 -2
- package/plan-installer/stack-detector.js +44 -0
package/README.ja.md
CHANGED
|
@@ -1,1015 +1,454 @@
|
|
|
1
1
|
# ClaudeOS-Core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/claudeos-core)
|
|
4
|
+
[](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
|
|
5
|
+
[](https://github.com/claudeos-core/claudeos-core/actions/workflows/test.yml)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://www.npmjs.com/package/claudeos-core)
|
|
9
|
+
|
|
10
|
+
**実際のソースコードから Claude Code 用ドキュメントを自動生成します。** プロジェクトを静的に解析したうえで 4-pass の Claude パイプラインを実行し、`.claude/rules/`、standards、skills、guides を生成する CLI ツールです。その結果、Claude Code は一般的なコンベンションではなく **あなたのプロジェクト固有のコンベンション** に従います。
|
|
4
11
|
|
|
5
12
|
```bash
|
|
6
13
|
npx claudeos-core init
|
|
7
14
|
```
|
|
8
15
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
[🇺🇸 English](./README.md) · [🇰🇷 한국어](./README.ko.md) · [🇨🇳 中文](./README.zh-CN.md) · [🇪🇸 Español](./README.es.md) · [🇻🇳 Tiếng Việt](./README.vi.md) · [🇮🇳 हिन्दी](./README.hi.md) · [🇷🇺 Русский](./README.ru.md) · [🇫🇷 Français](./README.fr.md) · [🇩🇪 Deutsch](./README.de.md)
|
|
16
|
+
[🇺🇸 English](README.md) · [🇰🇷 한국어](README.ko.md) · [🇨🇳 中文](README.zh-CN.md) · [🇪🇸 Español](README.es.md) · [🇻🇳 Tiếng Việt](README.vi.md) · [🇮🇳 हिन्दी](README.hi.md) · [🇷🇺 Русский](README.ru.md) · [🇫🇷 Français](README.fr.md) · [🇩🇪 Deutsch](README.de.md)
|
|
12
17
|
|
|
13
18
|
---
|
|
14
19
|
|
|
15
|
-
##
|
|
16
|
-
|
|
17
|
-
他のすべての Claude Code ツールはこう動作します:
|
|
18
|
-
|
|
19
|
-
> **人間がプロジェクトを説明 → LLM がドキュメントを生成**
|
|
20
|
-
|
|
21
|
-
ClaudeOS-Core はこう動作します:
|
|
22
|
-
|
|
23
|
-
> **コードがソースを分析 → コードがカスタムプロンプトを構築 → LLM がドキュメントを生成 → コードが出力を検証**
|
|
24
|
-
|
|
25
|
-
これは小さな違いではありません。なぜ重要なのか説明します:
|
|
26
|
-
|
|
27
|
-
### 核心的な問題:LLM は推測する。コードは推測しない。
|
|
20
|
+
## このツールは何ですか?
|
|
28
21
|
|
|
29
|
-
Claude
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
あなたは Claude Code を使っています。賢いツールですが、**あなたのプロジェクトのコンベンション** までは知りません:
|
|
23
|
+
- チームでは MyBatis を使っているのに、Claude は JPA のコードを生成する。
|
|
24
|
+
- ラッパーは `ApiResponse.ok()` なのに、Claude は `ResponseEntity.success()` と書く。
|
|
25
|
+
- パッケージは `controller/order/` なのに、Claude は `order/controller/` を作る。
|
|
32
26
|
|
|
33
|
-
|
|
27
|
+
そのため、生成されたファイルを修正することにかなりの時間を費やすことになります。
|
|
34
28
|
|
|
35
|
-
-
|
|
36
|
-
- ディレクトリ構造をスキャンしてファイル数付きのドメインリストを**確定**
|
|
37
|
-
- プロジェクト構造を Java 5 パターン、Kotlin CQRS/BFF、Next.js App Router/FSD のいずれかに**分類**
|
|
38
|
-
- Claude のコンテキストウィンドウに収まる最適サイズのグループにドメインを**分割**
|
|
39
|
-
- 確定された事実がすべて注入されたスタック固有のプロンプトを**組み立て**
|
|
29
|
+
**ClaudeOS-Core はこの問題を解決します。** 実際のソースコードをスキャンしてコンベンションを把握し、Claude Code が自動で読み込むディレクトリ `.claude/rules/` に完全なルールセットを書き込みます。次に *「order の CRUD を作って」* と頼めば、Claude は最初の試行であなたのコンベンションに従います。
|
|
40
30
|
|
|
41
|
-
Claude がプロンプトを受け取る時点で、推測の余地はありません。スタック確定。ドメイン確定。構造パターン確定。Claude の仕事は、これらの**確定された事実**に合ったドキュメントを生成することだけです。
|
|
42
|
-
|
|
43
|
-
### 結果
|
|
44
|
-
|
|
45
|
-
他のツールは「一般的に良い」ドキュメントを生成します。
|
|
46
|
-
ClaudeOS-Core は、プロジェクトが `ApiResponse.ok()`(`ResponseEntity.success()` ではない)を使っていること、MyBatis XML マッパーが `src/main/resources/mybatis/mappers/` にあること、パッケージ構造が `com.company.module.{domain}.controller` であることを知っているドキュメントを生成します — 実際のコードを読んだからです。
|
|
47
|
-
|
|
48
|
-
### Before & After
|
|
49
|
-
|
|
50
|
-
**ClaudeOS-Core なし** — Claude Code に注文 CRUD の作成を依頼すると:
|
|
51
31
|
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
❌ order/controller/ にファイルを配置(プロジェクトは controller/order/ 構造)
|
|
55
|
-
❌ 英語コメントを生成(チームは日本語コメント)
|
|
56
|
-
→ 生成ファイルごとに 20 分の修正
|
|
32
|
+
Before: あなた → Claude Code → 「概ね良い」コード → 手作業で修正
|
|
33
|
+
After: あなた → Claude Code → プロジェクトに一致するコード → そのまま使える
|
|
57
34
|
```
|
|
58
35
|
|
|
59
|
-
**ClaudeOS-Core あり** — `.claude/rules/` に確定されたパターンがすでに存在:
|
|
60
|
-
```
|
|
61
|
-
✅ MyBatis マッパー + XML を生成(build.gradle から検出)
|
|
62
|
-
✅ ApiResponse.ok() を使用(実際のソースから抽出)
|
|
63
|
-
✅ controller/order/ にファイルを配置(構造スキャンで Pattern A 確定)
|
|
64
|
-
✅ 日本語コメント(--lang ja 適用)
|
|
65
|
-
→ 生成コードがプロジェクト規約と即座に一致
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
この差は積み重なります。1 日 10 タスク × 20 分節約 = **1 日 3 時間以上**。
|
|
69
|
-
|
|
70
36
|
---
|
|
71
37
|
|
|
72
|
-
##
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
38
|
+
## 実際のプロジェクトでのデモ
|
|
39
|
+
|
|
40
|
+
[`spring-boot-realworld-example-app`](https://github.com/gothinkster/spring-boot-realworld-example-app) で実行 — Java 11 · Spring Boot 2.6 · MyBatis · SQLite · 187 source files. 結果: **75 generated files**、合計時間 **53 分**、すべての validator ✅。
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<img src="docs/assets/spring-boot-realworld-demo.gif" alt="ClaudeOS-Core init running on spring-boot-realworld-example-app — stack detection, 4-pass pipeline, validators, completion summary" width="769">
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<details>
|
|
47
|
+
<summary><strong>📺 ターミナル出力 (テキスト版、検索・コピー用)</strong></summary>
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
╔════════════════════════════════════════════════════╗
|
|
51
|
+
║ ClaudeOS-Core — Bootstrap (4-Pass) ║
|
|
52
|
+
╚════════════════════════════════════════════════════╝
|
|
53
|
+
Project root: spring-boot-realworld-example-app
|
|
54
|
+
Language: English (en)
|
|
55
|
+
|
|
56
|
+
[Phase 1] Detecting stack...
|
|
57
|
+
Language: java 11
|
|
58
|
+
Framework: spring-boot 2.6.3
|
|
59
|
+
Database: sqlite
|
|
60
|
+
ORM: mybatis
|
|
61
|
+
PackageMgr: gradle
|
|
62
|
+
|
|
63
|
+
[Phase 2] Scanning structure...
|
|
64
|
+
Backend: 2 domains
|
|
65
|
+
Total: 2 domains
|
|
66
|
+
Package: io.spring.infrastructure
|
|
67
|
+
|
|
68
|
+
[Phase 5] Active domains...
|
|
69
|
+
✅ 00.core ✅ 10.backend ⏭️ 20.frontend
|
|
70
|
+
✅ 30.security-db ✅ 40.infra
|
|
71
|
+
✅ 80.verification ✅ 90.optional
|
|
72
|
+
|
|
73
|
+
[4] Pass 1 — Deep analysis per domain group...
|
|
74
|
+
✅ pass1-1.json created (5m 34s)
|
|
75
|
+
[█████░░░░░░░░░░░░░░░] 25% (1/4)
|
|
76
|
+
|
|
77
|
+
[5] Pass 2 — Merging analysis results...
|
|
78
|
+
✅ pass2-merged.json created (4m 22s)
|
|
79
|
+
[██████████░░░░░░░░░░] 50% (2/4)
|
|
80
|
+
|
|
81
|
+
[6] Pass 3 — Generating all files...
|
|
82
|
+
🚀 Pass 3 split mode (3a → 3b → 3c → 3d-aux)
|
|
83
|
+
✅ 3a complete (2m 57s) — pass3a-facts.md (187-path allowlist)
|
|
84
|
+
✅ 3b complete (18m 49s) — CLAUDE.md + 19 standards + 20 rules
|
|
85
|
+
✅ 3c complete (12m 35s) — 13 skills + 9 guides
|
|
86
|
+
✅ 3d-aux complete (3m 18s) — database/ + mcp-guide/
|
|
87
|
+
🎉 Pass 3 split complete: 4/4 stages successful
|
|
88
|
+
[███████████████░░░░░] 75% (3/4)
|
|
89
|
+
|
|
90
|
+
[7] Pass 4 — Memory scaffolding...
|
|
91
|
+
📦 Pass 4 staged-rules: 6 rule files moved to .claude/rules/
|
|
92
|
+
✅ Pass 4 complete (5m)
|
|
93
|
+
📋 Gap-fill: all 12 expected files already present
|
|
94
|
+
[████████████████████] 100% (4/4)
|
|
95
|
+
|
|
96
|
+
╔═══════════════════════════════════════╗
|
|
97
|
+
║ ClaudeOS-Core — Health Checker ║
|
|
98
|
+
╚═══════════════════════════════════════╝
|
|
99
|
+
✅ plan-validator pass
|
|
100
|
+
✅ sync-checker pass
|
|
101
|
+
✅ content-validator pass
|
|
102
|
+
✅ pass-json-validator pass
|
|
103
|
+
✅ All systems operational
|
|
104
|
+
|
|
105
|
+
[Lint] ✅ CLAUDE.md structure valid (25 checks)
|
|
106
|
+
[Content] ✅ All content validation passed
|
|
107
|
+
Total: 0 advisories, 0 notes
|
|
108
|
+
|
|
109
|
+
╔════════════════════════════════════════════════════╗
|
|
110
|
+
║ ✅ ClaudeOS-Core — Complete ║
|
|
111
|
+
║ Files created: 75 ║
|
|
112
|
+
║ Domains analyzed: 1 group ║
|
|
113
|
+
║ L4 scaffolded: memory + rules ║
|
|
114
|
+
║ Output language: English ║
|
|
115
|
+
║ Total time: 53m 8s ║
|
|
116
|
+
╚════════════════════════════════════════════════════╝
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
</details>
|
|
120
|
+
|
|
121
|
+
<details>
|
|
122
|
+
<summary><strong>📄 生成された <code>CLAUDE.md</code> の抜粋 (実際の出力)</strong></summary>
|
|
123
|
+
|
|
124
|
+
```markdown
|
|
125
|
+
## 4. Core Architecture
|
|
126
|
+
|
|
127
|
+
### Core Patterns
|
|
128
|
+
|
|
129
|
+
- **Hexagonal ports & adapters**: domain ports live in `io.spring.core.{aggregate}`
|
|
130
|
+
and are implemented by `io.spring.infrastructure.repository.MyBatis{Aggregate}Repository`.
|
|
131
|
+
The domain layer has zero MyBatis imports.
|
|
132
|
+
- **CQRS-lite read/write split (same DB)**: write side goes through repository ports
|
|
133
|
+
+ entities; read side is a separate `readservice` package whose `@Mapper`
|
|
134
|
+
interfaces return `*Data` DTOs directly (no entity hydration).
|
|
135
|
+
- **No aggregator/orchestrator layer**: multi-source orchestration happens inside
|
|
136
|
+
application services (e.g., `ArticleQueryService`); there is no `*Aggregator`
|
|
137
|
+
class in the codebase.
|
|
138
|
+
- **Application-supplied UUIDs**: entity constructors assign their own UUID; PK is
|
|
139
|
+
passed via `#{user.id}` on INSERT. The global
|
|
140
|
+
`mybatis.configuration.use-generated-keys=true` flag is dead config
|
|
141
|
+
(auto-increment is unused).
|
|
142
|
+
- **JWT HS512 authentication**: `io.spring.infrastructure.service.DefaultJwtService`
|
|
143
|
+
is the sole token subject in/out; `io.spring.api.security.JwtTokenFilter`
|
|
144
|
+
extracts the token at the servlet layer.
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
注: 上記の主張はすべて実際のソースに基づいています — クラス名、パッケージパス、設定キー、dead-config フラグまで、すべて Claude がファイルを書く前に scanner が抽出したものです。
|
|
148
|
+
|
|
149
|
+
</details>
|
|
150
|
+
|
|
151
|
+
<details>
|
|
152
|
+
<summary><strong>🛡️ 自動ロードされる実際のルール (<code>.claude/rules/10.backend/03.data-access-rules.md</code>)</strong></summary>
|
|
153
|
+
|
|
154
|
+
````markdown
|
|
98
155
|
---
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
| スタック | 検出方法 | 分析深度 |
|
|
103
|
-
|---|---|---|
|
|
104
|
-
| **Java / Spring Boot** | `build.gradle`、`pom.xml`、5 パッケージパターン | 10 大分類、59 小項目 |
|
|
105
|
-
| **Kotlin / Spring Boot** | `build.gradle.kts`、kotlin plugin、`settings.gradle.kts`、CQRS/BFF 自動検出 | 12 大分類、95 小項目 |
|
|
106
|
-
| **Node.js / Express** | `package.json` | 9 大分類、57 小項目 |
|
|
107
|
-
| **Node.js / NestJS** | `package.json` (`@nestjs/core`) | 10 大分類、68 小項目 |
|
|
108
|
-
| **Next.js / React** | `package.json`、`next.config.*`、FSD サポート | 9 大分類、55 小項目 |
|
|
109
|
-
| **Vue / Nuxt** | `package.json`、`nuxt.config.*`、Composition API | 9 大分類、58 小項目 |
|
|
110
|
-
| **Python / Django** | `requirements.txt`、`pyproject.toml` | 10 大分類、55 小項目 |
|
|
111
|
-
| **Python / FastAPI** | `requirements.txt`、`pyproject.toml` | 10 大分類、58 小項目 |
|
|
112
|
-
| **Node.js / Fastify** | `package.json` | 10 大分類、62 小項目 |
|
|
113
|
-
| **Vite / React SPA** | `package.json`、`vite.config.*` | 9 大分類、55 小項目 |
|
|
114
|
-
| **Angular** | `package.json`、`angular.json` | 12 大分類、78 小項目 |
|
|
115
|
-
|
|
116
|
-
自動検出対象:言語とバージョン、フレームワークとバージョン(SPA フレームワークとしての Vite を含む)、ORM(MyBatis、JPA、Exposed、Prisma、TypeORM、SQLAlchemy など)、データベース(PostgreSQL、MySQL、Oracle、MongoDB、SQLite)、パッケージマネージャ(Gradle、Maven、npm、yarn、pnpm、pip、poetry)、アーキテクチャ(CQRS、BFF — モジュール名から)、マルチモジュール構造(settings.gradle から)、モノレポ(Turborepo、pnpm-workspace、Lerna、npm/yarn workspaces)、**`.env.example` ランタイム設定**(v2.2.0 — Vite・Next.js・Nuxt・Angular・Node・Python フレームワークの 16 以上の慣習的変数名から port/host/API-target を抽出)。
|
|
117
|
-
|
|
118
|
-
**何も指定する必要はありません。すべて自動的に検出されます。**
|
|
119
|
-
|
|
120
|
-
### `.env`-driven ランタイム設定(v2.2.0)
|
|
121
|
-
|
|
122
|
-
v2.2.0 では `lib/env-parser.js` が追加され、生成される `CLAUDE.md` がフレームワークのデフォルトではなく、プロジェクトが実際に宣言している内容を反映するようになりました。
|
|
123
|
-
|
|
124
|
-
- **検索順序**:`.env.example`(canonical、コミット対象)→ `.env.local.example` → `.env.sample` → `.env.template` → `.env` → `.env.local` → `.env.development`。`.example` バリアントが優先されるのは、それが「開発者中立な shape-of-truth」であり、特定コントリビュータのローカルオーバーライドではないためです。
|
|
125
|
-
- **認識されるポート変数名の慣例**:`VITE_PORT` / `VITE_DEV_PORT` / `VITE_DESKTOP_PORT` / `NEXT_PUBLIC_PORT` / `NUXT_PORT` / `NG_PORT` / `APP_PORT` / `SERVER_PORT` / `HTTP_PORT` / `DEV_PORT` / `FLASK_RUN_PORT` / `UVICORN_PORT` / `DJANGO_PORT` / 汎用 `PORT`。両方存在する場合はフレームワーク固有名が汎用 `PORT` より優先されます。
|
|
126
|
-
- **ホストと API ターゲット**:`VITE_DEV_HOST` / `VITE_API_TARGET` / `NEXT_PUBLIC_API_URL` / `NUXT_PUBLIC_API_BASE` / `BACKEND_URL` / `PROXY_TARGET` など。
|
|
127
|
-
- **優先順位**:Spring Boot の `application.yml` `server.port` が引き続き最優先(framework-native config)、次に `.env` 宣言のポート、最後の手段としてフレームワークのデフォルト(Vite 5173、Next.js 3000、Django 8000 など)。
|
|
128
|
-
- **機密変数の redaction**:`PASSWORD` / `SECRET` / `TOKEN` / `API_KEY` / `ACCESS_KEY` / `PRIVATE_KEY` / `CREDENTIAL` / `JWT_SECRET` / `CLIENT_SECRET` / `SESSION_SECRET` / `BEARER` / `SALT` パターンにマッチする変数の値は、下流のジェネレータに到達する前に `***REDACTED***` へ置換されます。`.env.example` に誤ってコミットされた機密情報に対する defense-in-depth です。`DATABASE_URL` は stack-detector の DB 識別における後方互換性のため、明示的にホワイトリスト登録されています。
|
|
129
|
-
|
|
130
|
-
### Java ドメイン検出(5 パターン、フォールバック付き)
|
|
131
|
-
|
|
132
|
-
| 優先度 | パターン | 構造 | 例 |
|
|
133
|
-
|---|---|---|---|
|
|
134
|
-
| A | レイヤー優先 | `controller/{domain}/` | `controller/user/UserController.java` |
|
|
135
|
-
| B | ドメイン優先 | `{domain}/controller/` | `user/controller/UserController.java` |
|
|
136
|
-
| D | モジュールプレフィックス | `{module}/{domain}/controller/` | `front/member/controller/MemberController.java` |
|
|
137
|
-
| E | DDD/ヘキサゴナル | `{domain}/adapter/in/web/` | `user/adapter/in/web/UserController.java` |
|
|
138
|
-
| C | フラット | `controller/*.java` | `controller/UserController.java` → クラス名から `user` を抽出 |
|
|
139
|
-
|
|
140
|
-
Controller を持たない Service 専用ドメインも、`service/`、`dao/`、`aggregator/`、`facade/`、`usecase/`、`orchestrator/`、`mapper/`、`repository/` ディレクトリを通じて検出されます。スキップ:`common`、`config`、`util`、`core`、`front`、`admin`、`v1`、`v2` など。
|
|
141
|
-
|
|
142
|
-
### Kotlin マルチモジュールドメイン検出
|
|
143
|
-
|
|
144
|
-
Gradle マルチモジュール構造の Kotlin プロジェクト(例:CQRS モノレポ)向け:
|
|
145
|
-
|
|
146
|
-
| ステップ | 動作 | 例 |
|
|
147
|
-
|---|---|---|
|
|
148
|
-
| 1 | `settings.gradle.kts` から `include()` をスキャン | 14 モジュールを検出 |
|
|
149
|
-
| 2 | モジュール名からタイプを検出 | `reservation-command-server` → type: `command` |
|
|
150
|
-
| 3 | モジュール名からドメインを抽出 | `reservation-command-server` → domain: `reservation` |
|
|
151
|
-
| 4 | モジュール間で同じドメインをグループ化 | `reservation-command-server` + `common-query-server` → 1 ドメイン |
|
|
152
|
-
| 5 | アーキテクチャ検出 | `command` + `query` モジュール存在 → CQRS |
|
|
153
|
-
|
|
154
|
-
対応モジュールタイプ:`command`、`query`、`bff`、`integration`、`standalone`、`library`。共有ライブラリ(`shared-lib`、`integration-lib`)は特殊ドメインとして検出されます。
|
|
155
|
-
|
|
156
|
-
### フロントエンドドメイン検出
|
|
157
|
-
|
|
158
|
-
- **App Router**:`app/{domain}/page.tsx`(Next.js)
|
|
159
|
-
- **Pages Router**:`pages/{domain}/index.tsx`
|
|
160
|
-
- **FSD (Feature-Sliced Design)**:`features/*/`、`widgets/*/`、`entities/*/`
|
|
161
|
-
- **RSC/Client 分離**:`client.tsx` パターンを検出、Server/Client コンポーネント分離を追跡
|
|
162
|
-
- **非標準ネストパス**:`src/*/` 配下のページ、コンポーネント、FSD レイヤーを検出(例:`src/admin/pages/dashboard/`、`src/admin/components/form/`、`src/admin/features/billing/`)
|
|
163
|
-
- **プラットフォーム/ティア分割検出 (v2.0.0)**:`src/{platform}/{subapp}/` レイアウトを認識 — `{platform}` はデバイス/ターゲットキーワード(`desktop`、`pc`、`web`、`mobile`、`mc`、`mo`、`sp`、`tablet`、`tab`、`pwa`、`tv`、`ctv`、`ott`、`watch`、`wear`)またはアクセスティアキーワード(`admin`、`cms`、`backoffice`、`back-office`、`portal`)を指定できます。`(platform, subapp)` ペアごとに `{platform}-{subapp}` という名前のドメインを 1 つ生成し、ドメインごとの routes/components/layouts/hooks のカウントを提供します。Angular、Next.js、React、Vue で同時に動作(マルチ拡張子 glob `{tsx,jsx,ts,js,vue}`)。subapp あたり 2 ファイル以上必要(1 ファイルのノイジーなドメインを回避)。
|
|
164
|
-
- **モノレポプラットフォーム分割 (v2.0.0)**:プラットフォームスキャンは `{apps,packages}/*/src/{platform}/{subapp}/`(`src/` を持つ Turborepo/pnpm workspace)および `{apps,packages}/{platform}/{subapp}/`(`src/` ラッパーなしの workspaces)にもマッチします。
|
|
165
|
-
- **Fallback E — routes ファイル (v2.0.0)**:主要スキャナ + Fallback A–D がすべて 0 を返した場合、`**/routes/*.{tsx,jsx,ts,js,vue}` を glob し、`routes` の親ディレクトリ名でグループ化。Next.js の `page.tsx` や FSD レイアウトにマッチしない React Router ファイルルーティングプロジェクト(CRA/Vite + `react-router`)を捕捉します。汎用的な親名(`src`、`app`、`pages`)はフィルタアウトされます。
|
|
166
|
-
- **Config フォールバック**:`package.json` になくても、設定ファイルから Next.js/Vite/Nuxt を検出(モノレポ対応)
|
|
167
|
-
- **Deep ディレクトリフォールバック**:React/CRA/Vite/Vue/RN プロジェクトで、`**/components/*/`、`**/views/*/`、`**/screens/*/`、`**/containers/*/`、`**/pages/*/`、`**/routes/*/`、`**/modules/*/`、`**/domains/*/` をどの深さでもスキャン
|
|
168
|
-
- **共有無視リスト (v2.0.0)**:すべてのスキャナが `BUILD_IGNORE_DIRS`(`node_modules`、`build`、`dist`、`out`、`.next`、`.nuxt`、`.svelte-kit`、`.angular`、`.turbo`、`.cache`、`.parcel-cache`、`coverage`、`storybook-static`、`.vercel`、`.netlify`)と `TEST_FILE_IGNORE`(spec/test/stories/e2e/cy + `__snapshots__`/`__tests__`)を共有し、ビルド成果物とテストフィクスチャがドメインごとのファイル数を膨張させないようにします。
|
|
169
|
-
|
|
170
|
-
### スキャナオーバーライド (v2.0.0)
|
|
171
|
-
|
|
172
|
-
プロジェクトルートにオプションの `.claudeos-scan.json` を配置すると、ツールキットを編集せずにスキャナのデフォルトを拡張できます。すべてのフィールドは**加算的** — ユーザーエントリはデフォルトを置き換えず、拡張します:
|
|
173
|
-
|
|
174
|
-
```json
|
|
175
|
-
{
|
|
176
|
-
"frontendScan": {
|
|
177
|
-
"platformKeywords": ["kiosk"],
|
|
178
|
-
"skipSubappNames": ["legacy"],
|
|
179
|
-
"minSubappFiles": 3
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
| フィールド | デフォルト | 用途 |
|
|
185
|
-
|---|---|---|
|
|
186
|
-
| `platformKeywords` | 上記の組み込みリスト | プラットフォームスキャン用の追加 `{platform}` キーワード(例:`kiosk`、`vr`、`embedded`) |
|
|
187
|
-
| `skipSubappNames` | 構造的ディレクトリのみ | プラットフォームスキャンのドメイン生成から除外する追加 subapp 名 |
|
|
188
|
-
| `minSubappFiles` | `2` | subapp がドメインになるために必要な最小ファイル数の上書き |
|
|
189
|
-
|
|
190
|
-
ファイル欠損または JSON 不正 → 静かにデフォルトにフォールバック(クラッシュなし)。典型的な用途:組み込みリストが曖昧すぎるとして除外する短縮形(`adm`、`bo`)を opt-in する、またはノイジーなモノレポで `minSubappFiles` を引き上げる。
|
|
191
|
-
|
|
156
|
+
paths:
|
|
157
|
+
- "**/*"
|
|
192
158
|
---
|
|
193
159
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
### 前提条件
|
|
160
|
+
# Data Access Rules
|
|
197
161
|
|
|
198
|
-
-
|
|
199
|
-
-
|
|
162
|
+
## XML-only SQL
|
|
163
|
+
- Every SQL statement lives in `src/main/resources/mapper/*.xml`.
|
|
164
|
+
NO `@Select` / `@Insert` / `@Update` / `@Delete` annotations on `@Mapper` methods.
|
|
165
|
+
- Each `@Mapper` interface has exactly one XML file at
|
|
166
|
+
`src/main/resources/mapper/{InterfaceName}.xml`.
|
|
167
|
+
- `<mapper namespace="...">` MUST be the fully qualified Java interface name.
|
|
168
|
+
The single existing exception is `TransferData.xml` (free-form `transfer.data`).
|
|
200
169
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
# オプション A:npx(推奨 — インストール不要)
|
|
207
|
-
npx claudeos-core init
|
|
170
|
+
## Dynamic SQL
|
|
171
|
+
- `<if>` predicates MUST guard both null and empty:
|
|
172
|
+
`<if test="X != null and X != ''">`. Empty-only is the existing HIGH-severity bug pattern.
|
|
173
|
+
- Prefer `LIMIT n OFFSET m` over MySQL-style `LIMIT m, n`.
|
|
208
174
|
|
|
209
|
-
|
|
210
|
-
npm install -g claudeos-core
|
|
211
|
-
claudeos-core init
|
|
175
|
+
## Examples
|
|
212
176
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
# Linux/macOS(Bash のみ)
|
|
224
|
-
bash claudeos-core-tools/bootstrap.sh
|
|
177
|
+
✅ Correct:
|
|
178
|
+
```xml
|
|
179
|
+
<update id="update">
|
|
180
|
+
UPDATE articles
|
|
181
|
+
<set>
|
|
182
|
+
<if test="article.title != null and article.title != ''">title = #{article.title},</if>
|
|
183
|
+
updated_at = #{article.updatedAt}
|
|
184
|
+
</set>
|
|
185
|
+
WHERE id = #{article.id}
|
|
186
|
+
</update>
|
|
225
187
|
```
|
|
226
188
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
```
|
|
232
|
-
╔══════════════════════════════════════════════════╗
|
|
233
|
-
║ Select generated document language (required) ║
|
|
234
|
-
╚══════════════════════════════════════════════════╝
|
|
235
|
-
|
|
236
|
-
生成されるファイル(CLAUDE.md、Standards、Rules、
|
|
237
|
-
Skills、Guides)は日本語で記述されます。
|
|
238
|
-
|
|
239
|
-
1. en — English
|
|
240
|
-
2. ko — 한국어 (Korean)
|
|
241
|
-
3. zh-CN — 简体中文 (Chinese Simplified)
|
|
242
|
-
❯ 4. ja — 日本語 (Japanese)
|
|
243
|
-
5. es — Español (Spanish)
|
|
244
|
-
6. vi — Tiếng Việt (Vietnamese)
|
|
245
|
-
7. hi — हिन्दी (Hindi)
|
|
246
|
-
8. ru — Русский (Russian)
|
|
247
|
-
9. fr — Français (French)
|
|
248
|
-
10. de — Deutsch (German)
|
|
249
|
-
|
|
250
|
-
↑↓ Move 1-0 Jump Enter Select ESC Cancel
|
|
189
|
+
❌ Incorrect:
|
|
190
|
+
```xml
|
|
191
|
+
<mapper namespace="article.mapper"> <!-- NO — namespace MUST be FQCN -->
|
|
251
192
|
```
|
|
193
|
+
````
|
|
252
194
|
|
|
253
|
-
|
|
195
|
+
`paths: ["**/*"]` の glob は、プロジェクト内のいずれかのファイルを編集すると Claude Code がこのルールを自動ロードすることを意味します。✅/❌ の例は、このコードベースの実際のコンベンションと既存のバグパターンから直接抽出されています。
|
|
254
196
|
|
|
255
|
-
|
|
256
|
-
npx claudeos-core init --lang ko # 한국어
|
|
257
|
-
npx claudeos-core init --lang ja # 日本語
|
|
258
|
-
npx claudeos-core init --lang en # English(デフォルト)
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
> **注意:** この設定は生成されるドキュメントファイルの言語のみを変更します。コード分析(Pass 1–2)は常に英語で実行され、生成結果(Pass 3)のみが選択した言語で記述されます。生成ファイル内のコード例は元のプログラミング言語構文のまま維持されます。
|
|
262
|
-
|
|
263
|
-
以上です。10 分(小規模プロジェクト)から 2 時間(60 ドメイン超のモノレポ)後、すべてのドキュメントが生成され、すぐに使用できます。CLI は各 Pass のパーセンテージ、経過時間、ETA 付きのプログレスバーを表示します。プロジェクトサイズごとの詳細な所要時間は [プロジェクトサイズによる自動スケーリング](#プロジェクトサイズによる自動スケーリング) を参照してください。
|
|
264
|
-
|
|
265
|
-
### 手動ステップバイステップインストール
|
|
266
|
-
|
|
267
|
-
各フェーズを完全に制御したい場合や、自動化パイプラインが任意のステップで失敗した場合、各ステージを手動で実行できます。ClaudeOS-Core の内部動作を理解するのにも役立ちます。
|
|
268
|
-
|
|
269
|
-
#### Step 1:クローンと依存関係のインストール
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
cd /your/project/root
|
|
273
|
-
|
|
274
|
-
git clone https://github.com/claudeos-core/claudeos-core.git claudeos-core-tools
|
|
275
|
-
cd claudeos-core-tools && npm install && cd ..
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
#### Step 2:ディレクトリ構造の作成
|
|
279
|
-
|
|
280
|
-
```bash
|
|
281
|
-
# Rules(v2.0.0:60.memory を追加)
|
|
282
|
-
mkdir -p .claude/rules/{00.core,10.backend,20.frontend,30.security-db,40.infra,50.sync,60.memory}
|
|
283
|
-
|
|
284
|
-
# Standards
|
|
285
|
-
mkdir -p claudeos-core/standard/{00.core,10.backend-api,20.frontend-ui,30.security-db,40.infra,50.verification,90.optional}
|
|
286
|
-
|
|
287
|
-
# Skills
|
|
288
|
-
mkdir -p claudeos-core/skills/{00.shared,10.backend-crud/scaffold-crud-feature,20.frontend-page/scaffold-page-feature,50.testing,90.experimental}
|
|
289
|
-
|
|
290
|
-
# Guide、Database、MCP、Generated、Memory(v2.0.0:memory を追加 / v2.1.0:plan を削除)
|
|
291
|
-
mkdir -p claudeos-core/guide/{01.onboarding,02.usage,03.troubleshooting,04.architecture}
|
|
292
|
-
mkdir -p claudeos-core/{database,mcp-guide,generated,memory}
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
> **v2.1.0 注意:** `claudeos-core/plan/` ディレクトリはもう作成されません。Master plan は Claude Code がランタイムで一度も読まない内部バックアップであり、それらを集約することが `Prompt is too long` 失敗の引き金になっていたため、生成は廃止されました。バックアップ/復元には `git` を使用してください。
|
|
296
|
-
|
|
297
|
-
#### Step 3:plan-installer の実行(プロジェクト分析)
|
|
298
|
-
|
|
299
|
-
プロジェクトをスキャンし、スタックを検出し、ドメインを見つけ、グループに分割し、プロンプトを生成します。
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
node claudeos-core-tools/plan-installer/index.js
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
**出力(`claudeos-core/generated/` 内):**
|
|
306
|
-
- `project-analysis.json` — 検出されたスタック、ドメイン、フロントエンド情報
|
|
307
|
-
- `domain-groups.json` — Pass 1 用ドメイングループ
|
|
308
|
-
- `pass1-backend-prompt.md` / `pass1-frontend-prompt.md` — 分析プロンプト
|
|
309
|
-
- `pass2-prompt.md` — マージプロンプト
|
|
310
|
-
- `pass3-prompt.md` — Phase 1 "Read Once, Extract Facts" ブロック(Rule A–E)が先頭に追加された Pass 3 プロンプトテンプレート。自動化パイプラインはランタイムで Pass 3 を複数ステージに分割し、このテンプレートが各ステージに供給されます。
|
|
311
|
-
- `pass3-context.json` — Pass 2 後に生成されるスリムなプロジェクト要約(< 5 KB)。Pass 3 プロンプトは完全な `pass2-merged.json` よりこちらを優先して参照します(v2.1.0)
|
|
312
|
-
- `pass4-prompt.md` — L4 メモリスキャフォールディングプロンプト(v2.0.0;`60.memory/` ルール書き込みにも同じ `staging-override.md` を使用)
|
|
313
|
-
|
|
314
|
-
これらのファイルを検査して、進める前に検出精度を確認できます。
|
|
315
|
-
|
|
316
|
-
#### Step 4:Pass 1 — 深層コード分析(ドメイングループごと)
|
|
317
|
-
|
|
318
|
-
各ドメイングループに対して Pass 1 を実行します。グループ数は `domain-groups.json` で確認してください。
|
|
319
|
-
|
|
320
|
-
```bash
|
|
321
|
-
# グループ数を確認
|
|
322
|
-
cat claudeos-core/generated/domain-groups.json | node -e "
|
|
323
|
-
const g = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
|
|
324
|
-
g.groups.forEach((g,i) => console.log('Group '+(i+1)+': ['+g.domains.join(', ')+'] ('+g.type+', ~'+g.estimatedFiles+' files)'));
|
|
325
|
-
"
|
|
326
|
-
|
|
327
|
-
# 各グループに対して Pass 1 を実行(ドメインとグループ番号を置き換え)
|
|
328
|
-
# 注:v1.6.1+ は perl の代わりに Node.js の String.replace() を使用 — perl は
|
|
329
|
-
# 不要になり、replacement-function セマンティクスにより、ドメイン名に現れる可能性のある
|
|
330
|
-
# $/&/$1 文字からの regex インジェクションを防止。
|
|
331
|
-
#
|
|
332
|
-
# Group 1:
|
|
333
|
-
DOMAIN_LIST="user, order, product" PASS_NUM=1 node -e "
|
|
334
|
-
const fs = require('fs');
|
|
335
|
-
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
336
|
-
const out = tpl
|
|
337
|
-
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
338
|
-
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
339
|
-
process.stdout.write(out);
|
|
340
|
-
" | claude -p --dangerously-skip-permissions
|
|
341
|
-
|
|
342
|
-
# Group 2(存在する場合):
|
|
343
|
-
DOMAIN_LIST="payment, system, delivery" PASS_NUM=2 node -e "
|
|
344
|
-
const fs = require('fs');
|
|
345
|
-
const tpl = fs.readFileSync('claudeos-core/generated/pass1-backend-prompt.md','utf-8');
|
|
346
|
-
const out = tpl
|
|
347
|
-
.replace(/\{\{DOMAIN_GROUP\}\}/g, () => process.env.DOMAIN_LIST)
|
|
348
|
-
.replace(/\{\{PASS_NUM\}\}/g, () => process.env.PASS_NUM);
|
|
349
|
-
process.stdout.write(out);
|
|
350
|
-
" | claude -p --dangerously-skip-permissions
|
|
351
|
-
|
|
352
|
-
# フロントエンドグループの場合、pass1-backend-prompt.md → pass1-frontend-prompt.md に置き換え
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
**確認:** `ls claudeos-core/generated/pass1-*.json` でグループごとに 1 つの JSON が表示されるはずです。
|
|
356
|
-
|
|
357
|
-
#### Step 5:Pass 2 — 分析結果のマージ
|
|
358
|
-
|
|
359
|
-
```bash
|
|
360
|
-
cat claudeos-core/generated/pass2-prompt.md \
|
|
361
|
-
| claude -p --dangerously-skip-permissions
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
**確認:** `claudeos-core/generated/pass2-merged.json` が存在し、最上位キーが 9 個以上あるはずです。
|
|
365
|
-
|
|
366
|
-
#### Step 6:Pass 3 — すべてのドキュメントを生成(複数ステージに分割)
|
|
367
|
-
|
|
368
|
-
**v2.1.0 注意:** Pass 3 は自動化パイプラインで**常に split モードで実行**されます。各ステージはフレッシュなコンテキストウィンドウを持つ独立した `claude -p` 呼び出しであるため、プロジェクトの規模にかかわらず出力累積によるオーバーフローは構造的に発生しません。`pass3-prompt.md` テンプレートはステージごとに `STAGE:` ディレクティブと共に組み立てられ、どのサブセットのファイルを出力するかを Claude に伝えます。手動モードでは、完全なテンプレートを投入して 1 回の呼び出しで Claude にすべて生成させるのが最もシンプルですが、これは小規模プロジェクト(≤5 ドメイン)でのみ信頼できます。それより大きいプロジェクトでは `npx claudeos-core init` を使用し、split ランナーにステージオーケストレーションを任せてください。
|
|
369
|
-
|
|
370
|
-
**単一呼び出しモード(小規模プロジェクト専用、≤5 ドメイン):**
|
|
371
|
-
|
|
372
|
-
```bash
|
|
373
|
-
cat claudeos-core/generated/pass3-prompt.md \
|
|
374
|
-
| claude -p --dangerously-skip-permissions
|
|
375
|
-
```
|
|
376
|
-
|
|
377
|
-
**ステージ別モード(すべての規模で推奨):**
|
|
378
|
-
|
|
379
|
-
自動化パイプラインは以下のステージを実行します。ステージ一覧:
|
|
197
|
+
</details>
|
|
380
198
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
| `3a` | `pass3a-facts.md`(5–10 KB の蒸留されたファクトシート) | `pass2-merged.json` を一度読み込み、以降のステージはこのファイルを参照 |
|
|
384
|
-
| `3b-core` | `CLAUDE.md`、共通 `standard/`、共通 `.claude/rules/` | プロジェクト横断ファイル;ドメイン固有の出力なし |
|
|
385
|
-
| `3b-1..N` | ドメイン固有の `standard/60.domains/*.md` + ドメインルール | ステージあたり ≤15 ドメインのバッチ(16 ドメイン以上で自動分割) |
|
|
386
|
-
| `3c-core` | `guide/`(9 ファイル)、`skills/00.shared/MANIFEST.md`、`skills/*/` オーケストレータ | 共有スキルとユーザー向けガイド全体 |
|
|
387
|
-
| `3c-1..N` | `skills/20.frontend-page/scaffold-page-feature/` 配下のドメインサブスキル | ステージあたり ≤15 ドメインのバッチ |
|
|
388
|
-
| `3d-aux` | `database/`、`mcp-guide/` | 固定サイズ、ドメイン数とは独立 |
|
|
389
|
-
|
|
390
|
-
1〜15 ドメインのプロジェクトでは 4 ステージ(`3a`、`3b-core`、`3c-core`、`3d-aux` — バッチ分割なし)に展開されます。16〜30 ドメインでは 8 ステージ(`3b` と `3c` がそれぞれ 2 バッチにサブ分割)に展開されます。完全な表は [プロジェクトサイズによる自動スケーリング](#プロジェクトサイズによる自動スケーリング) を参照してください。
|
|
391
|
-
|
|
392
|
-
**確認:** プロジェクトルートに `CLAUDE.md` が存在し、`claudeos-core/generated/pass3-complete.json` マーカーが書き込まれているはずです。split モードではこのマーカーに `mode: "split"` と、完了したすべてのステージを列挙する `groupsCompleted` 配列が含まれます — 部分マーカーのロジックはこれを使い、クラッシュ後に `3a` から再実行する(トークンコストが倍増する)のではなく、正しいステージから再開します。
|
|
393
|
-
|
|
394
|
-
> **ステージング注意:** Claude Code の sensitive-path ポリシーが `.claude/` への直接書き込みをブロックするため、Pass 3 はまず `claudeos-core/generated/.staged-rules/` にルールファイルを書き込みます。自動化パイプラインは各ステージ後に移動を自動的に処理します。ステージを手動で実行する場合、staged ツリーを自分で移動する必要があります:`mv claudeos-core/generated/.staged-rules/* .claude/rules/`(サブパスを保持)。
|
|
199
|
+
<details>
|
|
200
|
+
<summary><strong>🧠 自動生成された <code>decision-log.md</code> シード (実際の出力)</strong></summary>
|
|
395
201
|
|
|
396
|
-
|
|
202
|
+
```markdown
|
|
203
|
+
## 2026-04-26 — CQRS-lite read/write split inside the persistence layer
|
|
397
204
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
205
|
+
- **Context:** Writes go through `core.*Repository` port → `MyBatis*Repository`
|
|
206
|
+
adapter → `io.spring.infrastructure.mybatis.mapper.{Aggregate}Mapper`.
|
|
207
|
+
Reads bypass the domain port: application service →
|
|
208
|
+
`io.spring.infrastructure.mybatis.readservice.{Concept}ReadService` directly,
|
|
209
|
+
returning flat `*Data` DTOs from `io.spring.application.data.*`.
|
|
210
|
+
- **Options considered:** Single repository surface returning hydrated entities
|
|
211
|
+
for both reads and writes.
|
|
212
|
+
- **Decision:** Same database, two `@Mapper` packages — `mapper/` (write side,
|
|
213
|
+
operates on core entities) and `readservice/` (read side, returns `*Data` DTOs).
|
|
214
|
+
Read DTOs avoid entity hydration overhead.
|
|
215
|
+
- **Consequences:** Reads are NOT routed through the domain port — this is
|
|
216
|
+
intentional, not a bug. Application services may inject both a `*Repository`
|
|
217
|
+
(writes) and one or more `*ReadService` interfaces (reads) at the same time.
|
|
218
|
+
Do NOT add hydrate-then-map glue in the read path.
|
|
401
219
|
```
|
|
402
220
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
> **v2.1.0 gap-fill:** Pass 4 は `claudeos-core/skills/00.shared/MANIFEST.md` の存在も保証します。Pass 3c がこれを省略した場合(スキルが少ないプロジェクトで、スタックの `pass3.md` テンプレートは `MANIFEST.md` を生成ターゲットに挙げているものの REQUIRED としてマークしていないため起こり得ます)、gap-fill が最小限のスタブを作成し、`.claude/rules/50.sync/02.skills-sync.md`(v2.2.0 パス — sync ルール数が 3 個から 2 個に削減され、`03` が `02` になりました)の参照ターゲットが常に有効である状態を保ちます。冪等:ファイルがすでに実体のある内容(>20 文字)を持っている場合はスキップします。
|
|
221
|
+
Pass 4 は `pass2-merged.json` から抽出したアーキテクチャ上の決定事項で `decision-log.md` を seed します — そのため、その後のセッションでもコードベースが _このように見える_ という事実だけでなく、_なぜ_ そう見えるのかも記憶できます。
|
|
406
222
|
|
|
407
|
-
>
|
|
223
|
+
</details>
|
|
408
224
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
```bash
|
|
412
|
-
# メタデータを生成(他のチェック前に必須)
|
|
413
|
-
node claudeos-core-tools/manifest-generator/index.js
|
|
414
|
-
|
|
415
|
-
# すべてのチェックを実行
|
|
416
|
-
node claudeos-core-tools/health-checker/index.js
|
|
225
|
+
---
|
|
417
226
|
|
|
418
|
-
|
|
419
|
-
node claudeos-core-tools/plan-validator/index.js --check # Plan ↔ disk 整合性
|
|
420
|
-
node claudeos-core-tools/sync-checker/index.js # 未登録/孤児ファイル
|
|
421
|
-
node claudeos-core-tools/content-validator/index.js # ファイル品質チェック(memory/ セクション [9/9] を含む)
|
|
422
|
-
node claudeos-core-tools/pass-json-validator/index.js # Pass 1–4 JSON + 完了マーカーチェック
|
|
423
|
-
```
|
|
227
|
+
## Quick Start
|
|
424
228
|
|
|
425
|
-
|
|
229
|
+
**前提条件:** Node.js 18+、[Claude Code](https://docs.anthropic.com/en/docs/claude-code) がインストール済みかつ認証済み。
|
|
426
230
|
|
|
427
231
|
```bash
|
|
428
|
-
#
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
# CLAUDE.md を確認
|
|
432
|
-
head -30 CLAUDE.md
|
|
433
|
-
|
|
434
|
-
# standard ファイルを確認
|
|
435
|
-
cat claudeos-core/standard/00.core/01.project-overview.md | head -20
|
|
436
|
-
|
|
437
|
-
# rules を確認
|
|
438
|
-
ls .claude/rules/*/
|
|
439
|
-
```
|
|
232
|
+
# 1. プロジェクトのルートに移動
|
|
233
|
+
cd my-spring-boot-project
|
|
440
234
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
### 使い始める
|
|
444
|
-
|
|
445
|
-
```
|
|
446
|
-
# Claude Code で — 自然に依頼するだけ:
|
|
447
|
-
"order ドメインの CRUD を作成して"
|
|
448
|
-
"ユーザー認証 API を追加して"
|
|
449
|
-
"このコードをプロジェクトのパターンに合わせてリファクタリングして"
|
|
450
|
-
|
|
451
|
-
# Claude Code が生成された Standards、Rules、Skills を自動的に参照します。
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
---
|
|
455
|
-
|
|
456
|
-
## 仕組み — 4-Pass パイプライン
|
|
457
|
-
|
|
458
|
-
```
|
|
235
|
+
# 2. init を実行 (コードを解析し、Claude にルール作成を依頼します)
|
|
459
236
|
npx claudeos-core init
|
|
460
|
-
│
|
|
461
|
-
├── [1] npm install ← 依存関係(~10 秒)
|
|
462
|
-
├── [2] ディレクトリ構造 ← フォルダ作成(~1 秒)
|
|
463
|
-
├── [3] plan-installer (Node.js) ← プロジェクトスキャン(~5 秒)
|
|
464
|
-
│ ├── スタック自動検出(マルチスタック対応)
|
|
465
|
-
│ ├── ドメインリスト抽出(タグ付け:backend/frontend)
|
|
466
|
-
│ ├── ドメイングループに分割(タイプ別)
|
|
467
|
-
│ ├── pass3-context.json をビルド(スリム要約、v2.1.0)
|
|
468
|
-
│ └── スタック固有のプロンプトを選択(タイプ別)
|
|
469
|
-
│
|
|
470
|
-
├── [4] Pass 1 × N (claude -p) ← 深層コード分析(~2-8 分)
|
|
471
|
-
│ ├── ⚙️ バックエンドグループ → バックエンド固有プロンプト
|
|
472
|
-
│ └── 🎨 フロントエンドグループ → フロントエンド固有プロンプト
|
|
473
|
-
│
|
|
474
|
-
├── [5] Pass 2 × 1 (claude -p) ← 分析マージ(~1 分)
|
|
475
|
-
│ └── すべての Pass 1 結果を pass2-merged.json に統合
|
|
476
|
-
│
|
|
477
|
-
├── [6] Pass 3(split モード、v2.1.0) ← すべてを生成
|
|
478
|
-
│ │
|
|
479
|
-
│ ├── 3a × 1 (claude -p) ← ファクト抽出(~5-10 分)
|
|
480
|
-
│ │ └── pass2-merged.json を一度読んで → pass3a-facts.md
|
|
481
|
-
│ │
|
|
482
|
-
│ ├── 3b-core × 1 (claude -p) ← CLAUDE.md + 共通 standard/rules
|
|
483
|
-
│ ├── 3b-1..N × N (claude -p) ← ドメイン standard/rules(≤15 ドメイン/バッチ)
|
|
484
|
-
│ │
|
|
485
|
-
│ ├── 3c-core × 1 (claude -p) ← Guides + 共有 skills + MANIFEST.md
|
|
486
|
-
│ ├── 3c-1..N × N (claude -p) ← ドメインサブスキル(≤15 ドメイン/バッチ)
|
|
487
|
-
│ │
|
|
488
|
-
│ └── 3d-aux × 1 (claude -p) ← database/ + mcp-guide/ スタブ
|
|
489
|
-
│
|
|
490
|
-
├── [7] Pass 4 × 1 (claude -p) ← メモリスキャフォールディング(~30 秒-5 分)
|
|
491
|
-
│ ├── memory/ をシード(decision-log、failure-patterns、…)
|
|
492
|
-
│ ├── 60.memory/ ルールを生成
|
|
493
|
-
│ ├── CLAUDE.md に "Memory (L4)" セクションを追加
|
|
494
|
-
│ └── Gap-fill:skills/00.shared/MANIFEST.md の存在を保証(v2.1.0)
|
|
495
|
-
│
|
|
496
|
-
└── [8] 検証 ← health checker を自動実行
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### なぜ 4 Pass なのか?
|
|
500
|
-
|
|
501
|
-
**Pass 1** はソースコードを読む唯一の Pass です。ドメインごとに代表ファイルを選択し、55–95 分析カテゴリ(スタック別)全体でパターンを抽出します。大規模プロジェクトでは、Pass 1 はドメイングループごとに 1 回ずつ複数回実行されます。マルチスタックプロジェクト(例:Java backend + React frontend)では、backend と frontend のドメインは各スタックに合わせた**異なる分析プロンプト**を使用します。
|
|
502
|
-
|
|
503
|
-
**Pass 2** はすべての Pass 1 結果を統一された分析にマージします:共通パターン(100% 共有)、多数派パターン(50%+ 共有)、ドメイン固有パターン、重大度別のアンチパターン、横断的関心事(命名、セキュリティ、DB、テスト、ロギング、パフォーマンス)。backend と frontend の結果は一緒にマージされます。
|
|
504
|
-
|
|
505
|
-
**Pass 3**(split モード、v2.1.0)は統合された分析を受け取り、ファイルエコシステム全体(CLAUDE.md、rules、standards、skills、guides)を複数の順次 `claude -p` 呼び出しをまたいで生成します。ポイントは、出力累積によるオーバーフローが入力サイズから予測できない、という事実です:単一呼び出しの Pass 3 は 2 ドメインプロジェクトでは問題なく動作し、~5 ドメインで確実に失敗し、失敗境界は各ファイルの冗長度合いによって変動していました。Split モードはこれを構造的に回避します — 各ステージはフレッシュなコンテキストウィンドウで開始し、限定されたファイルサブセットを書き込みます。ステージをまたいだ整合性(単一呼び出しアプローチの主な利点)は `pass3a-facts.md` によって保持されます。これは 5–10 KB の蒸留されたファクトシートで、以降のすべてのステージが参照します。
|
|
506
|
-
|
|
507
|
-
Pass 3 プロンプトテンプレートには、出力量をさらに抑制する **Phase 1「Read Once, Extract Facts」ブロック**(5 つのルール)も含まれます:
|
|
508
237
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
- **Rule C** — ファクトテーブルを単一の真実の源として、ファイル間の整合性を強制。
|
|
512
|
-
- **Rule D** — 出力の簡潔さ:ファイル書き込みの合間は 1 行(`[WRITE]`/`[SKIP]`)のみ、ファクトテーブルの再掲やファイル内容のエコーをしない。
|
|
513
|
-
- **Rule E** — バッチ冪等チェック:ターゲットごとの `Read` 呼び出しの代わりに、PHASE 2 開始時に `Glob` を 1 回だけ実行。
|
|
514
|
-
|
|
515
|
-
**v2.2.0** では、Pass 3 は決定的な CLAUDE.md scaffold(`pass-prompts/templates/common/claude-md-scaffold.md`)をプロンプトにインラインで埋め込みます。これにより 8 つの最上位セクションのタイトルと順序が固定され、生成される `CLAUDE.md` がプロジェクト間で drift しなくなり、各セクションの内容はプロジェクトごとに適応できます。stack-detector の新しい `.env` パーサー(`lib/env-parser.js`)が `stack.envInfo` をプロンプトに供給し、port/host/API target 行が framework デフォルトではなくプロジェクトが実際に宣言した値と一致するようになります。
|
|
516
|
-
|
|
517
|
-
**Pass 4** は L4 メモリレイヤをスキャフォールディングします:永続的なチーム知識ファイル(decision-log、failure-patterns、compaction ポリシー、auto-rule-update)に加えて、これらのファイルをいつどのように読み書きするかを将来のセッションに指示する `60.memory/` ルール。メモリレイヤこそが、Claude Code がセッションごとに学びを再発見するのではなく、セッション間で蓄積することを可能にします。`--lang` が非英語の場合、フォールバック静的コンテンツは書き込み前に Claude を経由して翻訳されます。v2.1.0 では、Pass 3c が省略した場合に備えて `skills/00.shared/MANIFEST.md` の gap-fill が追加されました。
|
|
518
|
-
|
|
519
|
-
---
|
|
238
|
+
# 3. 完了。Claude Code を開いてコーディングを開始 — ルールは既にロード済みです。
|
|
239
|
+
```
|
|
520
240
|
|
|
521
|
-
|
|
241
|
+
`init` 完了後に **得られるもの**:
|
|
522
242
|
|
|
523
243
|
```
|
|
524
244
|
your-project/
|
|
525
|
-
│
|
|
526
|
-
├── CLAUDE.md ← Claude Code エントリーポイント(8セクション決定的構造、v2.2.0)
|
|
527
|
-
│
|
|
528
245
|
├── .claude/
|
|
529
|
-
│ └── rules/
|
|
530
|
-
│ ├── 00.core/
|
|
531
|
-
│ ├── 10.backend/
|
|
532
|
-
│ ├── 20.frontend/
|
|
533
|
-
│ ├── 30.security-db/
|
|
534
|
-
│ ├── 40.infra/
|
|
535
|
-
│ ├── 50.sync/
|
|
536
|
-
│
|
|
537
|
-
│
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
│
|
|
541
|
-
│ │ ├──
|
|
542
|
-
│ │ ├──
|
|
543
|
-
│ │ ├──
|
|
544
|
-
│ │ ├──
|
|
545
|
-
│ │ ├──
|
|
546
|
-
│ │ ├──
|
|
547
|
-
│ │ ├──
|
|
548
|
-
│ │
|
|
549
|
-
│
|
|
550
|
-
│
|
|
551
|
-
│
|
|
552
|
-
│
|
|
553
|
-
│
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
│ │ ├── 00.core/ ← 概要、アーキテクチャ、命名
|
|
559
|
-
│ │ ├── 10.backend-api/ ← API パターン(スタック固有)
|
|
560
|
-
│ │ ├── 20.frontend-ui/ ← フロントエンドパターン(検出時)
|
|
561
|
-
│ │ ├── 30.security-db/ ← セキュリティ、DB スキーマ、ユーティリティ
|
|
562
|
-
│ │ ├── 40.infra/ ← 設定、ロギング、CI/CD
|
|
563
|
-
│ │ ├── 50.verification/ ← ビルド検証、テスト
|
|
564
|
-
│ │ ├── 60.domains/ ← ドメイン別スタンダード(Pass 3b-N が書き込む、v2.1.0)
|
|
565
|
-
│ │ └── 90.optional/ ← オプション規約(スタック固有エクストラ)
|
|
566
|
-
│ ├── skills/ ← CRUD/ページスキャフォールディングスキル
|
|
567
|
-
│ │ └── 00.shared/MANIFEST.md ← 登録済みスキルの単一の真実の源
|
|
568
|
-
│ ├── guide/ ← オンボーディング、FAQ、トラブルシューティング(9 ファイル)
|
|
569
|
-
│ ├── database/ ← DB スキーマ、マイグレーションガイド
|
|
570
|
-
│ ├── mcp-guide/ ← MCP サーバ統合ガイド
|
|
571
|
-
│ └── memory/ ← L4:チーム知識(4 ファイル)— コミットする
|
|
572
|
-
│ ├── decision-log.md ← 設計決定の「なぜ」
|
|
573
|
-
│ ├── failure-patterns.md ← 再発エラー & 修正(自動スコアリング — `npx claudeos-core memory score`)
|
|
574
|
-
│ ├── compaction.md ← 4 ステージコンパクション戦略(`npx claudeos-core memory compact` で実行)
|
|
575
|
-
│ └── auto-rule-update.md ← ルール改善提案(`npx claudeos-core memory propose-rules`)
|
|
576
|
-
│
|
|
577
|
-
└── claudeos-core-tools/ ← このツールキット(変更しない)
|
|
578
|
-
```
|
|
579
|
-
|
|
580
|
-
すべての standard ファイルは ✅ 正しい例、❌ 間違った例、ルール要約テーブルを含みます — すべて汎用テンプレートではなく、実際のコードパターンから導出されます。
|
|
581
|
-
|
|
582
|
-
> **v2.1.0 注意:** `claudeos-core/plan/` はもう生成されません。Master plan は Claude Code がランタイムで消費しない内部バックアップで、それらを Pass 3 で集約することが出力累積オーバーフローの主要因でした。バックアップ/復元には `git` を使用してください。v2.0.x からアップグレードするプロジェクトは、既存の `claudeos-core/plan/` ディレクトリを安全に削除できます。
|
|
583
|
-
|
|
584
|
-
### Gitignore 推奨事項
|
|
585
|
-
|
|
586
|
-
**コミットする**(チーム知識 — 共有が目的):
|
|
587
|
-
- `CLAUDE.md` — Claude Code エントリーポイント
|
|
588
|
-
- `.claude/rules/**` — 自動ロードルール
|
|
589
|
-
- `claudeos-core/standard/**`、`skills/**`、`guide/**`、`database/**`、`mcp-guide/**`、`plan/**` — 生成されたドキュメント
|
|
590
|
-
- `claudeos-core/memory/**` — 決定履歴、失敗パターン、ルール提案
|
|
591
|
-
|
|
592
|
-
**コミットしない**(再生成可能なビルド成果物):
|
|
593
|
-
|
|
594
|
-
```gitignore
|
|
595
|
-
# ClaudeOS-Core — 生成された分析 & 翻訳キャッシュ
|
|
596
|
-
claudeos-core/generated/
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
`generated/` ディレクトリには分析 JSON(`pass1-*.json`、`pass2-merged.json`)、プロンプト(`pass1/2/3/4-prompt.md`)、Pass 完了マーカー(`pass3-complete.json`、`pass4-memory.json`)、翻訳キャッシュ(`.i18n-cache-<lang>.json`)、一時ステージングディレクトリ(`.staged-rules/`)が含まれます — すべて `npx claudeos-core init` を再実行することで再構築可能です。
|
|
246
|
+
│ └── rules/ ← Claude Code が自動ロード
|
|
247
|
+
│ ├── 00.core/ (共通ルール — 命名、アーキテクチャ)
|
|
248
|
+
│ ├── 10.backend/ (バックエンドスタックのルール、該当する場合)
|
|
249
|
+
│ ├── 20.frontend/ (フロントエンドスタックのルール、該当する場合)
|
|
250
|
+
│ ├── 30.security-db/ (セキュリティ & DB のコンベンション)
|
|
251
|
+
│ ├── 40.infra/ (env、ロギング、CI/CD)
|
|
252
|
+
│ ├── 50.sync/ (ドキュメント同期のリマインダ — rules only)
|
|
253
|
+
│ ├── 60.memory/ (memory rules — Pass 4、rules only)
|
|
254
|
+
│ ├── 70.domains/{type}/ (ドメイン別ルール、type = backend|frontend)
|
|
255
|
+
│ └── 80.verification/ (テスト戦略 + ビルド検証のリマインダ)
|
|
256
|
+
├── claudeos-core/
|
|
257
|
+
│ ├── standard/ ← 参照ドキュメント (カテゴリ構造をミラー)
|
|
258
|
+
│ │ ├── 00.core/ (プロジェクト概要、アーキテクチャ、命名)
|
|
259
|
+
│ │ ├── 10.backend/ (バックエンド reference — バックエンドスタック時)
|
|
260
|
+
│ │ ├── 20.frontend/ (フロントエンド reference — フロントエンドスタック時)
|
|
261
|
+
│ │ ├── 30.security-db/ (セキュリティ & DB の reference)
|
|
262
|
+
│ │ ├── 40.infra/ (env / ロギング / CI-CD の reference)
|
|
263
|
+
│ │ ├── 70.domains/{type}/ (ドメイン別 reference)
|
|
264
|
+
│ │ ├── 80.verification/ (ビルド / 起動 / テスト reference — standard only)
|
|
265
|
+
│ │ └── 90.optional/ (スタック固有の追加 — standard only)
|
|
266
|
+
│ ├── skills/ (Claude が適用可能な再利用パターン)
|
|
267
|
+
│ ├── guide/ (一般的なタスク用 how-to ガイド)
|
|
268
|
+
│ ├── database/ (スキーマ概要、マイグレーションガイド)
|
|
269
|
+
│ ├── mcp-guide/ (MCP 統合のメモ)
|
|
270
|
+
│ └── memory/ (decision log、failure patterns、compaction)
|
|
271
|
+
└── CLAUDE.md (Claude が最初に読むインデックス)
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
`rules/` と `standard/` で同じ番号 prefix を共有するカテゴリは、同一の概念領域を表します (例: `10.backend` rules ↔ `10.backend` standards)。Rules-only カテゴリ: `50.sync` (ドキュメント同期リマインダ)、`60.memory` (Pass 4 memory)。Standard-only カテゴリ: `90.optional` (強制力のないスタック固有の追加)。それ以外の prefix (`00`、`10`、`20`、`30`、`40`、`70`、`80`) は `rules/` と `standard/` の **両方** に存在します。これで Claude Code はあなたのプロジェクトを把握できます。
|
|
600
275
|
|
|
601
276
|
---
|
|
602
277
|
|
|
603
|
-
##
|
|
604
|
-
|
|
605
|
-
Pass 3 の split モードはステージ数をドメイン数に応じてスケールさせます。バッチのサブ分割は 16 ドメインから発動し、各ステージの出力を ~50 ファイル以下に抑えます。これは出力累積オーバーフローが始まる前の、`claude -p` にとって経験的に安全な範囲です。
|
|
278
|
+
## 誰のためのツールですか?
|
|
606
279
|
|
|
607
|
-
|
|
|
608
|
-
|
|
609
|
-
|
|
|
610
|
-
|
|
|
611
|
-
|
|
|
612
|
-
| 超大規模 | 31–45 | 10 | 13–14 | ~100–150 分 |
|
|
613
|
-
| 超超大規模 | 46–60 | 12 | 15–16 | ~150–200 分 |
|
|
614
|
-
| 超超超大規模 | 61+ | 14+ | 17+ | 200 分+ |
|
|
615
|
-
|
|
616
|
-
バッチ分割時のステージ数公式:`1 (3a) + 1 (3b-core) + N (3b-1..N) + 1 (3c-core) + N (3c-1..N) + 1 (3d-aux) = 2N + 4`(`N = ceil(totalDomains / 15)`)。
|
|
280
|
+
| あなたが... | このツールが助けるのは... |
|
|
281
|
+
|---|---|
|
|
282
|
+
| **Claude Code で新規プロジェクトを始めるソロ開発者** | 「Claude にコンベンションを教える」フェーズを丸ごとスキップ |
|
|
283
|
+
| **共有標準を維持するチームリード** | `.claude/rules/` を最新に保つ手間を自動化 |
|
|
284
|
+
| **既に Claude Code を使っているが生成コードの修正に疲れた人** | Claude が「概ね良い」パターンではなく、_あなたの_ パターンに従うようにする |
|
|
617
285
|
|
|
618
|
-
|
|
286
|
+
**適していないケース:** スキャン手順なしで初日から動く agents/skills/rules の one-size-fits-all なプリセットバンドルが欲しい場合 (どのツールがどこに合うかは [docs/comparison.md](docs/ja/comparison.md) を参照)、もしくはプロジェクトが [サポート対象スタック](#supported-stacks) に該当しない場合。
|
|
619
287
|
|
|
620
288
|
---
|
|
621
289
|
|
|
622
|
-
##
|
|
623
|
-
|
|
624
|
-
ClaudeOS-Core には生成後に自動的に実行される 5 つの組み込み検証ツールが含まれています:
|
|
625
|
-
|
|
626
|
-
```bash
|
|
627
|
-
# すべてのチェックを一度に実行(推奨)
|
|
628
|
-
npx claudeos-core health
|
|
290
|
+
## どのように動作しますか?
|
|
629
291
|
|
|
630
|
-
|
|
631
|
-
npx claudeos-core validate # Plan ↔ disk 比較
|
|
632
|
-
npx claudeos-core refresh # Disk → Plan 同期
|
|
633
|
-
npx claudeos-core restore # Plan → Disk リストア
|
|
292
|
+
ClaudeOS-Core は通常の Claude Code ワークフローを反転させます:
|
|
634
293
|
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
node claudeos-core-tools/plan-validator/index.js --check
|
|
639
|
-
node claudeos-core-tools/sync-checker/index.js
|
|
294
|
+
```
|
|
295
|
+
通常: 人がプロジェクトを説明 → Claude がスタックを推測 → Claude が docs を作成
|
|
296
|
+
このツール: コードがスタックを読む → コードが確定した事実を Claude に渡す → Claude が事実から docs を作成
|
|
640
297
|
```
|
|
641
298
|
|
|
642
|
-
|
|
643
|
-
|---|---|
|
|
644
|
-
| **manifest-generator** | メタデータ JSON を構築(`rule-manifest.json`、`sync-map.json`、`stale-report.json` を初期化);`memory/` を含む 7 ディレクトリをインデックス化(要約の `totalMemory`)。v2.1.0:master plan が廃止されたため `plan-manifest.json` は生成されなくなりました。 |
|
|
645
|
-
| **plan-validator** | 依然として `claudeos-core/plan/` を持つプロジェクト(レガシーアップグレードケース)向けに、master plan の `<file>` ブロックを disk と照合します。v2.1.0:`plan/` が存在しないか空の場合は `plan-sync-status.json` の出力をスキップします — `stale-report.json` はパスする no-op を引き続き記録します。 |
|
|
646
|
-
| **sync-checker** | 未登録ファイル(disk 上にあるが plan にない)と孤児エントリを検出 — 7 ディレクトリをカバー(v2.0.0 で `memory/` を追加)。`sync-map.json` にマッピングがない場合(v2.1.0 のデフォルト状態)でもクリーンに終了します。 |
|
|
647
|
-
| **content-validator** | 9 セクションの品質チェック — 空ファイル、✅/❌ 例の欠損、必須セクション、加えて L4 メモリスキャフォールドの整合性(decision-log 見出し日付、failure-pattern 必須フィールド、フェンス認識パース) |
|
|
648
|
-
| **pass-json-validator** | Pass 1–4 JSON 構造に加えて `pass3-complete.json`(split モード形状、v2.1.0)と `pass4-memory.json` 完了マーカーを検証 |
|
|
649
|
-
|
|
650
|
-
---
|
|
651
|
-
|
|
652
|
-
## Claude Code がドキュメントを使う仕組み
|
|
653
|
-
|
|
654
|
-
ClaudeOS-Core が生成するドキュメントは、Claude Code が実際に読み取るドキュメントです — その方法は以下のとおりです:
|
|
655
|
-
|
|
656
|
-
### Claude Code が自動的に読むファイル
|
|
299
|
+
ポイント: **Node.js scanner が先にソースコードを読み** (deterministic、AI なし)、その後 4-pass の Claude パイプラインが scanner で見つけた事実に制約された形でドキュメントを書きます。Claude はコードに実在しないパスやフレームワークをでっち上げることができません。
|
|
657
300
|
|
|
658
|
-
|
|
659
|
-
|---|---|---|
|
|
660
|
-
| `CLAUDE.md` | すべての会話開始時 | 常時 |
|
|
661
|
-
| `.claude/rules/00.core/*` | 任意のファイル編集時(`paths: ["**/*"]`) | 常時 |
|
|
662
|
-
| `.claude/rules/10.backend/*` | 任意のファイル編集時(`paths: ["**/*"]`) | 常時 |
|
|
663
|
-
| `.claude/rules/20.frontend/*` | フロントエンドファイル編集時(component/page/style パスにスコープ) | 条件付き |
|
|
664
|
-
| `.claude/rules/30.security-db/*` | 任意のファイル編集時(`paths: ["**/*"]`) | 常時 |
|
|
665
|
-
| `.claude/rules/40.infra/*` | config/infra ファイル編集時のみ(スコープ付き paths) | 条件付き |
|
|
666
|
-
| `.claude/rules/50.sync/*` | claudeos-core ファイル編集時のみ(スコープ付き paths) | 条件付き |
|
|
667
|
-
| `.claude/rules/60.memory/*` | `claudeos-core/memory/*` 編集時(memory パスにスコープ) — オンデマンドメモリレイヤを**どのように**読み書きするかを指示 | 条件付き(v2.0.0) |
|
|
301
|
+
アーキテクチャ全体は [docs/ja/architecture.md](docs/ja/architecture.md) を参照。
|
|
668
302
|
|
|
669
|
-
|
|
303
|
+
---
|
|
670
304
|
|
|
671
|
-
|
|
305
|
+
## Supported Stacks
|
|
672
306
|
|
|
673
|
-
|
|
674
|
-
- `claudeos-core/database/**` — DB スキーマ(クエリ、マッパー、マイグレーション用)
|
|
675
|
-
- `claudeos-core/memory/**`(v2.0.0)— L4 チーム知識レイヤ;**自動ロードされない**(すべての会話でノイジーになりすぎる)。代わりに、`60.memory/*` ルールが Claude にこれらのファイルを*いつ* Read するかを指示:セッション開始時(最近の `decision-log.md` + 重要度の高い `failure-patterns.md` をスキム)、決定を下すか再発エラーに遭遇したときにオンデマンドで追記。
|
|
307
|
+
12 種のスタック、プロジェクトファイルから自動検出:
|
|
676
308
|
|
|
677
|
-
|
|
309
|
+
**Backend:** Java/Spring Boot · Kotlin/Spring Boot · Node/Express · Node/Fastify · Node/NestJS · Python/Django · Python/FastAPI · Python/Flask
|
|
678
310
|
|
|
679
|
-
|
|
311
|
+
**Frontend:** Node/Next.js · Node/Vite · Angular · Vue/Nuxt
|
|
680
312
|
|
|
681
|
-
|
|
313
|
+
マルチスタックのプロジェクト (例: Spring Boot バックエンド + Next.js フロントエンド) もそのまま動作します。
|
|
682
314
|
|
|
683
|
-
|
|
684
|
-
|---|---|
|
|
685
|
-
| `claudeos-core/plan/` | レガシープロジェクト(v2.0.x 以前)の master plan バックアップ。v2.1.0 では生成されません。存在しても Claude Code は自動ロードしません — オンデマンド読み込みのみ。 |
|
|
686
|
-
| `claudeos-core/generated/` | ビルドメタデータ JSON、プロンプト、Pass マーカー、翻訳キャッシュ、`.staged-rules/`。コーディング用ではありません。 |
|
|
687
|
-
| `claudeos-core/guide/` | 人間向けオンボーディングガイド。 |
|
|
688
|
-
| `claudeos-core/mcp-guide/` | MCP サーバドキュメント。コーディング用ではありません。 |
|
|
689
|
-
| `claudeos-core/memory/`(自動ロード) | **自動ロード無効化**設計 — すべての会話でコンテキストが肥大化。代わりに `60.memory/*` ルール経由でオンデマンド読み込み(例:セッション開始時の `failure-patterns.md` スキャン)。常にコミットする。 |
|
|
315
|
+
検出ルールと各 scanner が抽出する内容は [docs/ja/stacks.md](docs/ja/stacks.md) を参照。
|
|
690
316
|
|
|
691
317
|
---
|
|
692
318
|
|
|
693
319
|
## 日常のワークフロー
|
|
694
320
|
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
```
|
|
698
|
-
# Claude Code を通常通り使用するだけ — スタンダードを自動的に参照します:
|
|
699
|
-
"order ドメインの CRUD を作成して"
|
|
700
|
-
"ユーザープロファイル更新 API を追加して"
|
|
701
|
-
"このコードをプロジェクトのパターンに合わせてリファクタリングして"
|
|
702
|
-
```
|
|
703
|
-
|
|
704
|
-
### スタンダードを手動編集した後
|
|
321
|
+
3 つのコマンドで使用量の約 95% をカバーします:
|
|
705
322
|
|
|
706
323
|
```bash
|
|
707
|
-
#
|
|
708
|
-
npx claudeos-core
|
|
709
|
-
|
|
710
|
-
# すべての整合性を確認
|
|
711
|
-
npx claudeos-core health
|
|
712
|
-
```
|
|
713
|
-
|
|
714
|
-
### ドキュメントが壊れたとき
|
|
324
|
+
# プロジェクトでの初回実行
|
|
325
|
+
npx claudeos-core init
|
|
715
326
|
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
# 生成ドキュメントを定期的にコミットしておけば、再生成せずに特定ファイルだけ
|
|
719
|
-
# ロールバックできます:
|
|
720
|
-
git checkout HEAD -- .claude/rules/ claudeos-core/
|
|
327
|
+
# standards や rules を手動編集した後
|
|
328
|
+
npx claudeos-core lint
|
|
721
329
|
|
|
722
|
-
#
|
|
723
|
-
npx claudeos-core
|
|
330
|
+
# ヘルスチェック (コミット前または CI で実行)
|
|
331
|
+
npx claudeos-core health
|
|
724
332
|
```
|
|
725
333
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
L4 メモリレイヤ(`claudeos-core/memory/`)はセッション間でチーム知識を蓄積します。3 つの CLI サブコマンドが健全性を維持します:
|
|
334
|
+
memory layer のメンテナンス用にもう 2 つ:
|
|
729
335
|
|
|
730
336
|
```bash
|
|
731
|
-
#
|
|
337
|
+
# failure-patterns ログのコンパクション (定期的に実行)
|
|
732
338
|
npx claudeos-core memory compact
|
|
733
|
-
# Stage 1:古いエントリを要約(>30 日、本文 → 一行)
|
|
734
|
-
# Stage 2:重複見出しをマージ(frequency 合算、最新の fix を保持)
|
|
735
|
-
# Stage 3:低重要度 + 古いものをドロップ(importance <3 AND lastSeen >60 日)
|
|
736
|
-
# Stage 4:ファイルあたり 400 行の上限を強制(最も古い低重要度から先にドロップ)
|
|
737
|
-
|
|
738
|
-
# Score:failure-patterns.md エントリを重要度で再ランク付け
|
|
739
|
-
npx claudeos-core memory score
|
|
740
|
-
# importance = round(frequency × 1.5 + recency × 5)、最大 10
|
|
741
|
-
# 複数の新しい失敗パターンを追加後に実行
|
|
742
339
|
|
|
743
|
-
#
|
|
340
|
+
# 頻発する failure pattern を提案ルールへ昇格
|
|
744
341
|
npx claudeos-core memory propose-rules
|
|
745
|
-
# frequency ≥ 3 の failure-patterns.md エントリを読み込み
|
|
746
|
-
# confidence を計算(重み付けエビデンスに sigmoid × アンカー倍率)
|
|
747
|
-
# memory/auto-rule-update.md に提案を書き込み(自動適用されない)
|
|
748
|
-
# Confidence ≥ 0.70 は真剣な検討に値する;受諾 → ルール編集 + 決定を記録
|
|
749
|
-
|
|
750
|
-
# v2.1.0:`memory --help` はサブコマンドのヘルプを表示するようになりました(以前はトップレベルが表示されていました)
|
|
751
|
-
npx claudeos-core memory --help
|
|
752
342
|
```
|
|
753
343
|
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
メモリに書くタイミング(Claude がオンデマンドで行いますが、手動編集も可能):
|
|
757
|
-
- **`decision-log.md`** — 競合するパターン間で選択するとき、ライブラリを選ぶとき、チーム規約を定義するとき、または何かを*やらない*と決めるときに新しいエントリを追記。追記のみ;履歴エントリは決して編集しない。
|
|
758
|
-
- **`failure-patterns.md`** — 再発エラーまたは自明でない根本原因の**2 回目の発生時**に追記。初回エラーはエントリ不要。
|
|
759
|
-
- `compaction.md` と `auto-rule-update.md` — 上記の CLI サブコマンドが生成/管理;手動編集しない。
|
|
760
|
-
|
|
761
|
-
### CI/CD 統合
|
|
762
|
-
|
|
763
|
-
```yaml
|
|
764
|
-
# GitHub Actions の例
|
|
765
|
-
- run: npx claudeos-core validate
|
|
766
|
-
# Exit code 1 で PR がブロックされる
|
|
767
|
-
|
|
768
|
-
# オプション:月次メモリハウスキーピング(別 cron ワークフロー)
|
|
769
|
-
- run: npx claudeos-core memory compact
|
|
770
|
-
- run: npx claudeos-core memory score
|
|
771
|
-
```
|
|
772
|
-
|
|
773
|
-
---
|
|
774
|
-
|
|
775
|
-
## 何が違うのか?
|
|
776
|
-
|
|
777
|
-
### 他の Claude Code ツールとの比較
|
|
778
|
-
|
|
779
|
-
| | ClaudeOS-Core | Everything Claude Code (50K+ ⭐) | Harness | specs-generator | Claude `/init` |
|
|
780
|
-
|---|---|---|---|---|---|
|
|
781
|
-
| **アプローチ** | コードが先に分析、次に LLM が生成 | 事前構築された設定プリセット | LLM がエージェントチームを設計 | LLM がスペックドキュメントを生成 | LLM が CLAUDE.md を書く |
|
|
782
|
-
| **ソースコードを読む** | ✅ 決定論的静的解析 | ❌ | ❌ | ❌ (LLM が読む) | ❌ (LLM が読む) |
|
|
783
|
-
| **スタック検出** | コードが確定(ORM、DB、ビルドツール、pkg manager) | N/A(スタック非依存) | LLM が推測 | LLM が推測 | LLM が推測 |
|
|
784
|
-
| **ドメイン検出** | コードが確定(Java 5 patterns、Kotlin CQRS、Next.js FSD) | N/A | LLM が推測 | N/A | N/A |
|
|
785
|
-
| **同じプロジェクト → 同じ結果** | ✅ 決定論的分析 | ✅(静的ファイル) | ❌(LLM は揺れる) | ❌(LLM は揺れる) | ❌(LLM は揺れる) |
|
|
786
|
-
| **大規模プロジェクトへの対応** | ドメイングループ分割(4 ドメイン / 40 ファイル / グループ) | N/A | 分割なし | 分割なし | コンテキストウィンドウ制限 |
|
|
787
|
-
| **出力** | CLAUDE.md + Rules + Standards + Skills + Guides + Plans(40-50+ ファイル) | Agents + Skills + Commands + Hooks | Agents + Skills | 6 スペックドキュメント | CLAUDE.md(1 ファイル) |
|
|
788
|
-
| **出力場所** | `.claude/rules/`(Claude Code が自動ロード) | `.claude/` 各種 | `.claude/agents/` + `.claude/skills/` | `.claude/steering/` + `specs/` | `CLAUDE.md` |
|
|
789
|
-
| **生成後検証** | ✅ 5 つの自動バリデータ | ❌ | ❌ | ❌ | ❌ |
|
|
790
|
-
| **多言語出力** | ✅ 10 言語 | ❌ | ❌ | ❌ | ❌ |
|
|
791
|
-
| **マルチスタック** | ✅ Backend + Frontend 同時 | ❌ スタック非依存 | ❌ | ❌ | 部分的 |
|
|
792
|
-
| **永続メモリレイヤ** | ✅ L4 — 決定ログ + 失敗パターン + 自動スコア付きルール提案(v2.0.0) | ❌ | ❌ | ❌ | ❌ |
|
|
793
|
-
| **エージェントオーケストレーション** | ❌ | ✅ 28 agents | ✅ 6 patterns | ❌ | ❌ |
|
|
794
|
-
|
|
795
|
-
### 一文にまとめた重要な違い
|
|
796
|
-
|
|
797
|
-
**他のツールは Claude に「一般的に良い指示」を与えます。ClaudeOS-Core は Claude に「あなたの実際のコードから抽出された指示」を与えます。**
|
|
798
|
-
|
|
799
|
-
だから Claude Code は MyBatis プロジェクトで JPA コードを生成しなくなり、
|
|
800
|
-
コードベースが `ok()` を使っているときに `success()` を使わなくなり、
|
|
801
|
-
プロジェクトが `controller/user/` を使うときに `user/controller/` ディレクトリを作成しなくなるのです。
|
|
802
|
-
|
|
803
|
-
### 競合ではなく補完
|
|
804
|
-
|
|
805
|
-
ClaudeOS-Core は**プロジェクト固有のルールとスタンダード**にフォーカスします。
|
|
806
|
-
他のツールは**エージェントオーケストレーションとワークフロー**にフォーカスします。
|
|
807
|
-
|
|
808
|
-
ClaudeOS-Core を使ってプロジェクトのルールを生成し、その上に ECC や Harness を乗せてエージェントチームとワークフロー自動化を構築できます。異なる問題を解決しています。
|
|
344
|
+
各コマンドの全オプションは [docs/ja/commands.md](docs/ja/commands.md) を参照。
|
|
809
345
|
|
|
810
346
|
---
|
|
811
347
|
|
|
812
|
-
##
|
|
813
|
-
|
|
814
|
-
**Q:ソースコードを変更しますか?**
|
|
815
|
-
いいえ。`CLAUDE.md`、`.claude/rules/`、`claudeos-core/` を作成するだけです。既存のコードは決して変更されません。
|
|
816
|
-
|
|
817
|
-
**Q:コストはどのくらいですか?**
|
|
818
|
-
4 つの Pass をまたいで `claude -p` を複数回呼び出します。v2.1.0 の split モードでは、Pass 3 だけでもプロジェクトサイズに応じて 4〜14+ ステージに展開されます([自動スケーリング](#プロジェクトサイズによる自動スケーリング) を参照)。典型的な小規模プロジェクト(1〜15 ドメイン)で合計 8〜9 回の `claude -p` 呼び出し;18 ドメインのプロジェクトで 11 回;60 ドメインのプロジェクトで 15〜17 回。各ステージはフレッシュなコンテキストウィンドウで実行されます — 呼び出しあたりのトークンコストは、どのステージも全体のファイルツリーを 1 つのコンテキストに保持する必要がないため、単一呼び出しの Pass 3 時代より実際は低くなっています。`--lang` が非英語の場合、静的フォールバックパスは翻訳のために追加の `claude -p` 呼び出しを数回行うことがあります;結果は `claudeos-core/generated/.i18n-cache-<lang>.json` にキャッシュされ、その後の実行で再利用されます。これは通常の Claude Code 使用量の範囲内です。
|
|
819
|
-
|
|
820
|
-
**Q:Pass 3 split モードとは何ですか?なぜ v2.1.0 で追加されたのですか?**
|
|
821
|
-
v2.1.0 より前の Pass 3 は、生成されたファイルツリー全体(`CLAUDE.md`、standards、rules、skills、guides — 通常 30〜60 ファイル)を 1 回のレスポンスで出力しなければならない単一の `claude -p` 呼び出しでした。小規模プロジェクトでは機能しましたが、~5 ドメインで確実に `Prompt is too long` の出力累積失敗にぶつかっていました。失敗は入力サイズから予測できず、生成される各ファイルの冗長度合いに依存し、同じプロジェクトでも断続的に発生しました。Split モードはこの問題を構造的に回避します:Pass 3 は順次ステージ(`3a` → `3b-core` → `3b-N` → `3c-core` → `3c-N` → `3d-aux`)に分割され、それぞれがフレッシュなコンテキストウィンドウを持つ独立した `claude -p` 呼び出しです。ステージをまたいだ整合性は `pass3a-facts.md` — 以降のすべてのステージが `pass2-merged.json` を再読み込みせずに参照する 5〜10 KB の蒸留されたファクトシート — によって保持されます。`pass3-complete.json` マーカーは `groupsCompleted` 配列を持ち、`3c-2` 実行中のクラッシュは `3a` からではなく `3c-2` から再開するため、トークンコストの倍増を避けられます。
|
|
822
|
-
**Q:生成されたファイルを Git にコミットすべきですか?**
|
|
823
|
-
はい、推奨します。チームが同じ Claude Code スタンダードを共有できます。`claudeos-core/generated/` を `.gitignore` に追加することを検討してください(分析 JSON は再生成可能)。
|
|
824
|
-
|
|
825
|
-
**Q:混合スタックプロジェクト(例:Java backend + React frontend)はどうですか?**
|
|
826
|
-
完全にサポートされています。ClaudeOS-Core は両方のスタックを自動検出し、ドメインを `backend` または `frontend` としてタグ付けし、それぞれにスタック固有の分析プロンプトを使用します。Pass 2 がすべてをマージし、Pass 3 は split ステージ群全体で backend と frontend の両方のスタンダードを生成します — backend ドメインはいくつかの 3b/3c バッチに、frontend ドメインは別のバッチに入り、すべてが同じ `pass3a-facts.md` を参照して整合性を保ちます。
|
|
827
|
-
|
|
828
|
-
**Q:Turborepo / pnpm workspaces / Lerna モノレポで動作しますか?**
|
|
829
|
-
はい。ClaudeOS-Core は `turbo.json`、`pnpm-workspace.yaml`、`lerna.json`、または `package.json#workspaces` を検出し、サブパッケージの `package.json` ファイルをスキャンして framework/ORM/DB 依存関係を自動検索します。ドメインスキャンは `apps/*/src/` と `packages/*/src/` パターンをカバーします。モノレポのルートから実行してください。
|
|
830
|
-
|
|
831
|
-
**Q:再実行すると何が起きますか?**
|
|
832
|
-
以前の Pass 1/2 結果が存在する場合、インタラクティブプロンプトが選択を提示します:**Continue**(停止した場所から再開)または **Fresh**(すべて削除して最初からやり直し)。`--force` でプロンプトをスキップして常に Fresh で開始します。v2.1.0 の split モードでは、Pass 3 の再開はステージ粒度で動作します — 実行が `3c-2` 中にクラッシュした場合、次の `init` は `3a` から再実行する(トークンコストが倍増する)のではなく `3c-2` から再開します。`pass3-complete.json` マーカーはこのロジックを駆動するため `mode: "split"` に加えて `groupsCompleted` 配列を記録します。
|
|
833
|
-
|
|
834
|
-
**Q:NestJS は独自のテンプレートを使用するか、それとも Express のものを使用しますか?**
|
|
835
|
-
NestJS は NestJS 固有の分析カテゴリを備えた専用の `node-nestjs` テンプレートを使用します:`@Module`、`@Injectable`、`@Controller` デコレータ、Guards、Pipes、Interceptors、DI コンテナ、CQRS パターン、`Test.createTestingModule`。Express プロジェクトは別の `node-express` テンプレートを使用します。
|
|
836
|
-
|
|
837
|
-
**Q:Vue / Nuxt プロジェクトは?**
|
|
838
|
-
Vue/Nuxt は Composition API、`<script setup>`、defineProps/defineEmits、Pinia ストア、`useFetch`/`useAsyncData`、Nitro サーバルート、`@nuxt/test-utils` をカバーする専用の `vue-nuxt` テンプレートを使用します。Next.js/React プロジェクトは `node-nextjs` テンプレートを使用します。
|
|
839
|
-
|
|
840
|
-
**Q:Kotlin をサポートしていますか?**
|
|
841
|
-
はい。ClaudeOS-Core は `build.gradle.kts` または `build.gradle` の kotlin plugin から Kotlin を自動検出します。Kotlin 固有の分析(data classes、sealed classes、coroutines、拡張関数、MockK など)を備えた専用の `kotlin-spring` テンプレートを使用します。
|
|
842
|
-
|
|
843
|
-
**Q:CQRS / BFF アーキテクチャは?**
|
|
844
|
-
Kotlin マルチモジュールプロジェクトで完全にサポートされています。ClaudeOS-Core は `settings.gradle.kts` を読み取り、モジュール名からモジュールタイプ(command、query、bff、integration)を検出し、Command/Query モジュール間で同じドメインをグループ化します。生成されるスタンダードには、command controllers と query controllers の別々のルール、BFF/Feign パターン、モジュール間通信規約が含まれます。
|
|
845
|
-
|
|
846
|
-
**Q:Gradle マルチモジュールモノレポは?**
|
|
847
|
-
ClaudeOS-Core はネスト深度に関係なくすべてのサブモジュール(`**/src/main/kotlin/**/*.kt`)をスキャンします。モジュールタイプは命名規約から推論されます(例:`reservation-command-server` → domain: `reservation`、type: `command`)。共有ライブラリ(`shared-lib`、`integration-lib`)も検出されます。
|
|
848
|
-
|
|
849
|
-
**Q:L4 メモリレイヤ(v2.0.0)とは?`claudeos-core/memory/` をコミットすべきですか?**
|
|
850
|
-
はい — `claudeos-core/memory/` を**常にコミット**してください。これは永続的なチーム知識です:`decision-log.md` はアーキテクチャ選択の*理由*を記録(追記のみ)、`failure-patterns.md` は再発エラーを重要度スコアとともに登録して将来のセッションで回避できるようにし、`compaction.md` は 4 ステージコンパクションポリシーを定義し、`auto-rule-update.md` は機械生成されたルール改善提案を収集します。ルール(パスごとに自動ロード)とは異なり、メモリファイルは**オンデマンド** — `60.memory/*` ルールがそう指示したときにのみ Claude が読みます(例:セッション開始時の重要度の高い失敗のスキャン)。これによりコンテキストコストを低く保ちながら、長期的な知識を保持します。
|
|
851
|
-
|
|
852
|
-
**Q:Pass 4 が失敗したらどうなりますか?**
|
|
853
|
-
自動化パイプライン(`npx claudeos-core init`)には静的フォールバックがあります:`claude -p` が失敗するか `pass4-prompt.md` が欠損している場合、`lib/memory-scaffold.js` を通じてメモリレイヤを直接スキャフォールディングします。`--lang` が非英語の場合、静的フォールバックは `claude` CLI 経由で**必ず**翻訳する必要があります — それも失敗すれば、実行は `InitError` で中止されます(静かな英語フォールバックはなし)。`claude` が認証されているときに再実行するか、`--lang en` を使用して翻訳をスキップしてください。翻訳結果は `claudeos-core/generated/.i18n-cache-<lang>.json` にキャッシュされ、その後の実行で再利用されます。
|
|
348
|
+
## 何が違うのか
|
|
854
349
|
|
|
855
|
-
|
|
856
|
-
上記の [メモリレイヤメンテナンス](#メモリレイヤメンテナンスv200) セクションを参照してください。要約:`compact` は 4 ステージポリシー(古いものを要約、重複をマージ、低重要度の古いものをドロップ、400 行上限を強制)を実行;`score` は `failure-patterns.md` を重要度(frequency × recency)で再ランク付け;`propose-rules` は再発する失敗から `auto-rule-update.md` への候補ルール追加を提示(自動適用されない — 手動で検討して受諾/拒否)。
|
|
350
|
+
ほとんどの Claude Code ドキュメント生成ツールは「説明」から始まります (人がツールに伝え、ツールが Claude に伝える)。ClaudeOS-Core は「実際のソースコード」から始まります (ツールが読み、確定した事実を Claude に伝え、Claude は確定した内容だけを書く)。
|
|
857
351
|
|
|
858
|
-
|
|
859
|
-
v2.0.0 で Pass 3 の silent-failure ガードが 3 つ追加されました(Guard 3 は 2 つの不完全出力のバリアントをカバー:`guide/` 向けの H2 と `standard/skills` 向けの H1)。Guard 1(「部分 staged-rules 移動」)と Guard 3(「不完全出力 — guide ファイル欠損/空または standard センチネル欠損 / skills 空」)は既存ルールに依存しませんが、Guard 2(「ゼロルール検出」)は依存します — Claude が `staging-override.md` ディレクティブを無視して `.claude/` に直接書き込もうとしたときに発動します(Claude Code の sensitive-path ポリシーがブロックする場所)。以前の実行からの古いルールが Guard 2 を false-negative にする可能性があるため — `--force`/`fresh` は `.claude/rules/` を消去してクリーンな検出を保証します。**ルールファイルへの手動編集は `--force`/`fresh` では失われます**;必要ならば事前にバックアップしてください。(v2.1.0 注意:Guard 3 H1 は master plan が生成されなくなったため `plan/` をもうチェックしません。)
|
|
352
|
+
具体的な 3 つの帰結:
|
|
860
353
|
|
|
861
|
-
**
|
|
862
|
-
|
|
354
|
+
1. **Deterministic stack detection.** 同じプロジェクト + 同じコード = 同じ出力。「今回は Claude のサイコロが違った」現象がない。
|
|
355
|
+
2. **No invented paths.** Pass 3 のプロンプトは許可されたソースパスをすべて明示的に列挙 — Claude は存在しないパスを引用できない。
|
|
356
|
+
3. **Multi-stack aware.** バックエンドとフロントエンドのドメインが同一実行内でそれぞれ異なる解析プロンプトを使用。
|
|
863
357
|
|
|
864
|
-
|
|
865
|
-
小規模プロジェクト(≤5 ドメイン)ならはい — [Step 6](#step-6pass-3--すべてのドキュメントを生成複数ステージに分割) の単一呼び出し手動手順は引き続き動作します。それより大きいプロジェクトでは `npx claudeos-core init` を使用すべきです。split ランナーこそが、フレッシュなコンテキストでのステージ単位実行をオーケストレーションし、16 ドメイン以上でのバッチサブ分割を処理し、正しい `pass3-complete.json` マーカー形状(`mode: "split"` + `groupsCompleted`)を書き込み、ステージ間の staged rules を移動するからです。このオーケストレーションを手で再現することは可能ですが、手間がかかります。ステージを手動で実行する理由がある場合(例:特定ステージのデバッグ)、適切な `STAGE:` ディレクティブで `pass3-prompt.md` をテンプレート化して直接 `claude -p` に投入できます — ただし、各ステージ後に `.staged-rules/` を移動し、マーカーを自分で更新することを忘れないでください。
|
|
866
|
-
|
|
867
|
-
**Q:私のプロジェクトは v2.0.x からのアップグレードで、既存の `claudeos-core/plan/` ディレクトリがあります。どうすれば良いですか?**
|
|
868
|
-
特に何もする必要はありません — v2.1.0 のツールは `plan/` が存在しないか空の場合それを無視し、`plan-validator` は後方互換性のために plan/ が入っているレガシープロジェクトを引き続き処理します。master plan バックアップが不要なら `claudeos-core/plan/` を安全に削除できます(いずれにせよ git 履歴の方がバックアップとして優れています)。`plan/` を残す場合、`npx claudeos-core init` を実行してもそれは更新されません — v2.1.0 では新しい内容は master plan に集約されません。検証ツールは両方のケースをクリーンに扱います。
|
|
358
|
+
他ツールとの scope 比較は [docs/ja/comparison.md](docs/ja/comparison.md) を参照。比較は **各ツールが何をするか** に関するもので、**どれが優れているか** ではありません — ほとんどは相補的です。
|
|
869
359
|
|
|
870
360
|
---
|
|
871
361
|
|
|
872
|
-
##
|
|
873
|
-
|
|
874
|
-
```
|
|
875
|
-
pass-prompts/templates/
|
|
876
|
-
├── common/ # 共有 header/footer + pass4 + staging-override + CLAUDE.md scaffold (v2.2.0)
|
|
877
|
-
│ ├── header.md # 役割 + 出力フォーマット指示(全 pass 共通)
|
|
878
|
-
│ ├── pass3-footer.md # Pass 3 完了後の health-check 指示 + 5 つの CRITICAL ガードレールブロック (v2.2.0)
|
|
879
|
-
│ ├── pass3-phase1.md # 「Read Once, Extract Facts」ブロック(Rule A-E)(v2.1.0)
|
|
880
|
-
│ ├── pass4.md # メモリスキャフォールディングプロンプト (v2.0.0)
|
|
881
|
-
│ ├── staging-override.md # .claude/rules/** の書き込みを .staged-rules/** にリダイレクト (v2.0.0)
|
|
882
|
-
│ ├── claude-md-scaffold.md # 決定論的 8 セクション CLAUDE.md テンプレート (v2.2.0)
|
|
883
|
-
│ └── lang-instructions.json # 言語別出力指示(10 言語)
|
|
884
|
-
├── java-spring/ # Java / Spring Boot
|
|
885
|
-
├── kotlin-spring/ # Kotlin / Spring Boot (CQRS, BFF, multi-module)
|
|
886
|
-
├── node-express/ # Node.js / Express
|
|
887
|
-
├── node-nestjs/ # Node.js / NestJS (Module, DI, Guard, Pipe, Interceptor)
|
|
888
|
-
├── node-fastify/ # Node.js / Fastify
|
|
889
|
-
├── node-nextjs/ # Next.js / React (App Router, RSC)
|
|
890
|
-
├── node-vite/ # Vite SPA (React, client-side routing, VITE_ env, Vitest)
|
|
891
|
-
├── vue-nuxt/ # Vue / Nuxt (Composition API, Pinia, Nitro)
|
|
892
|
-
├── angular/ # Angular
|
|
893
|
-
├── python-django/ # Python / Django (DRF)
|
|
894
|
-
├── python-fastapi/ # Python / FastAPI
|
|
895
|
-
└── python-flask/ # Python / Flask (Blueprint, app factory, Jinja2)
|
|
896
|
-
```
|
|
897
|
-
|
|
898
|
-
`plan-installer` がスタックを自動検出し、タイプ固有のプロンプトを組み立てます。NestJS、Vue/Nuxt、Vite SPA、Flask はそれぞれフレームワーク固有の分析カテゴリを備えた専用テンプレートを使用します(例:NestJS の `@Module`/`@Injectable`/Guards;Vue の `<script setup>`/Pinia/useFetch;Vite の client-side routing/`VITE_` env;Flask の Blueprint/`app.factory`/Flask-SQLAlchemy)。マルチスタックプロジェクトでは、`pass1-backend-prompt.md` と `pass1-frontend-prompt.md` が別々に生成され、`pass3-prompt.md` は両方のスタックの生成ターゲットを結合します。v2.1.0 では、Pass 3 テンプレートの先頭に `common/pass3-phase1.md`(Rule A–E を含む「Read Once, Extract Facts」ブロック)が追加された後、split モードのステージごとにスライスされます。Pass 4 はスタックに関係なく共有の `common/pass4.md` テンプレート(メモリスキャフォールディング)を使用します。
|
|
899
|
-
|
|
900
|
-
**v2.2.0 では**、Pass 3 プロンプトは phase1 ブロックとスタック固有本体の間に `common/claude-md-scaffold.md`(決定論的 8 セクション CLAUDE.md テンプレート)もインラインで埋め込みます — これによりセクション構造がプロジェクト間でずれることなく、内容はプロジェクトごとに適応します。テンプレートは **English-first** で記述され、`lang-instructions.json` からの言語注入が LLM に対して出力時にセクションタイトルと散文を対象出力言語に翻訳するよう指示します。
|
|
901
|
-
|
|
902
|
-
---
|
|
362
|
+
## 検証 (post-generation)
|
|
903
363
|
|
|
904
|
-
|
|
364
|
+
Claude が docs を書いた後、コードがそれを検証します。5 つの独立した validator:
|
|
905
365
|
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
- `
|
|
910
|
-
|
|
911
|
-
- `
|
|
912
|
-
- `
|
|
366
|
+
| Validator | 検査内容 | 実行元 |
|
|
367
|
+
|---|---|---|
|
|
368
|
+
| `claude-md-validator` | CLAUDE.md の構造的不変条件 (8 sections、language-invariant) | `claudeos-core lint` |
|
|
369
|
+
| `content-validator` | パスクレームが実在するか、manifest の整合性 | `health` (advisory) |
|
|
370
|
+
| `pass-json-validator` | Pass 1 / 2 / 3 / 4 の出力が well-formed JSON か | `health` (warn) |
|
|
371
|
+
| `plan-validator` | 保存された plan がディスクと一致するか | `health` (fail-on-error) |
|
|
372
|
+
| `sync-checker` | ディスク上のファイルが `sync-map.json` の登録と一致するか (orphaned/unregistered の検出) | `health` (fail-on-error) |
|
|
913
373
|
|
|
914
|
-
|
|
374
|
+
`health-checker` が 4 つのランタイム validator を 3 段階の severity (fail / warn / advisory) でオーケストレーションし、CI に適した exit code で終了します。`claude-md-validator` は構造的な drift が soft warning ではなく re-init のシグナルなので、`lint` コマンドで個別に実行されます。いつでも実行可能:
|
|
915
375
|
|
|
916
376
|
```bash
|
|
917
|
-
|
|
918
|
-
npx claudeos-core init
|
|
919
|
-
```
|
|
920
|
-
|
|
921
|
-
**検出されるもの:**
|
|
922
|
-
- `apps/web/package.json` からの依存関係(例:`next`、`react`)→ frontend スタック
|
|
923
|
-
- `apps/api/package.json` からの依存関係(例:`express`、`prisma`)→ backend スタック
|
|
924
|
-
- `packages/db/package.json` からの依存関係(例:`drizzle-orm`)→ ORM/DB
|
|
925
|
-
- `pnpm-workspace.yaml` からのカスタムワークスペースパス(例:`services/*`)
|
|
926
|
-
|
|
927
|
-
**ドメインスキャンもモノレポレイアウトをカバーします:**
|
|
928
|
-
- backend ドメイン向け `apps/api/src/modules/*/` と `apps/api/src/*/`
|
|
929
|
-
- frontend ドメイン向け `apps/web/app/*/`、`apps/web/src/app/*/`、`apps/web/pages/*/`
|
|
930
|
-
- 共有パッケージドメイン向け `packages/*/src/*/`
|
|
931
|
-
|
|
932
|
-
```
|
|
933
|
-
my-monorepo/ ← ここで実行:npx claudeos-core init
|
|
934
|
-
├── turbo.json ← Turborepo として自動検出
|
|
935
|
-
├── apps/
|
|
936
|
-
│ ├── web/ ← apps/web/package.json から Next.js を検出
|
|
937
|
-
│ │ ├── app/dashboard/ ← フロントエンドドメインを検出
|
|
938
|
-
│ │ └── package.json ← { "dependencies": { "next": "^14" } }
|
|
939
|
-
│ └── api/ ← apps/api/package.json から Express を検出
|
|
940
|
-
│ ├── src/modules/users/ ← バックエンドドメインを検出
|
|
941
|
-
│ └── package.json ← { "dependencies": { "express": "^4" } }
|
|
942
|
-
├── packages/
|
|
943
|
-
│ ├── db/ ← packages/db/package.json から Drizzle を検出
|
|
944
|
-
│ └── ui/
|
|
945
|
-
└── package.json ← { "workspaces": ["apps/*", "packages/*"] }
|
|
377
|
+
npx claudeos-core health
|
|
946
378
|
```
|
|
947
379
|
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
## トラブルシューティング
|
|
951
|
-
|
|
952
|
-
**"claude: command not found"** — Claude Code CLI がインストールされていないか、PATH にありません。[Claude Code ドキュメント](https://code.claude.com/docs/en/overview)を参照してください。
|
|
380
|
+
各 validator の検査項目は [docs/ja/verification.md](docs/ja/verification.md) を参照。
|
|
953
381
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
**"0 domains detected"** — プロジェクト構造が非標準かもしれません。スタック別の検出パターンは上記を参照してください。
|
|
957
|
-
|
|
958
|
-
**Kotlin プロジェクトで "0 domains detected"** — プロジェクトのルートに `build.gradle.kts`(または kotlin plugin を含む `build.gradle`)があり、ソースファイルが `**/src/main/kotlin/` 配下にあることを確認してください。マルチモジュールプロジェクトでは、`settings.gradle.kts` に `include()` ステートメントが含まれていることを確認してください。単一モジュールの Kotlin プロジェクト(`settings.gradle` なし)もサポートされています — ドメインは `src/main/kotlin/` 配下のパッケージ/クラス構造から抽出されます。
|
|
382
|
+
---
|
|
959
383
|
|
|
960
|
-
|
|
384
|
+
## Memory Layer (任意、長期プロジェクト向け)
|
|
961
385
|
|
|
962
|
-
|
|
386
|
+
v2.0 以降、ClaudeOS-Core は 4 つのファイルが入った `claudeos-core/memory/` フォルダを書き込みます:
|
|
963
387
|
|
|
964
|
-
|
|
388
|
+
- `decision-log.md` — append-only な「なぜ Y ではなく X を選んだのか」
|
|
389
|
+
- `failure-patterns.md` — frequency/importance スコア付きの繰り返し発生するエラー
|
|
390
|
+
- `compaction.md` — 時間とともに memory がどのように自動コンパクションされるか
|
|
391
|
+
- `auto-rule-update.md` — 新ルールに昇格すべきパターン
|
|
965
392
|
|
|
966
|
-
|
|
393
|
+
`npx claudeos-core memory propose-rules` を実行すると、Claude に最近の failure pattern を見せて新しいルールを提案させることができます。
|
|
967
394
|
|
|
968
|
-
|
|
395
|
+
memory モデルとライフサイクルは [docs/ja/memory-layer.md](docs/ja/memory-layer.md) を参照。
|
|
969
396
|
|
|
970
|
-
|
|
397
|
+
---
|
|
971
398
|
|
|
972
|
-
|
|
399
|
+
## FAQ
|
|
973
400
|
|
|
974
|
-
**
|
|
401
|
+
**Q: Claude API キーが必要ですか?**
|
|
402
|
+
A: 不要です。ClaudeOS-Core は既存の Claude Code インストールを利用します — マシン上の `claude -p` にプロンプトを流すだけです。追加のアカウントは不要です。
|
|
975
403
|
|
|
976
|
-
**
|
|
404
|
+
**Q: 既存の CLAUDE.md や `.claude/rules/` を上書きしますか?**
|
|
405
|
+
A: 新しいプロジェクトでの初回実行: 新規作成します。`--force` なしの再実行: 編集内容を保持 — 前回実行の pass marker が検出されると該当 pass はスキップされます。`--force` での再実行: すべてを wipe して再生成 (編集内容は失われます — それが `--force` の意味です)。詳しくは [docs/ja/safety.md](docs/ja/safety.md) を参照。
|
|
977
406
|
|
|
978
|
-
**
|
|
407
|
+
**Q: 自分のスタックがサポート対象外です。追加できますか?**
|
|
408
|
+
A: できます。新しいスタックには ~3 個のプロンプトテンプレートとドメイン scanner が必要です。8 ステップガイドは [CONTRIBUTING.md](CONTRIBUTING.md) を参照。
|
|
979
409
|
|
|
980
|
-
**
|
|
410
|
+
**Q: 日本語 (または別言語) で docs を生成するには?**
|
|
411
|
+
A: `npx claudeos-core init --lang ja`. 10 言語をサポート: en, ko, ja, zh-CN, es, vi, hi, ru, fr, de.
|
|
981
412
|
|
|
982
|
-
**
|
|
413
|
+
**Q: monorepo でも動作しますか?**
|
|
414
|
+
A: 動作します — Turborepo (`turbo.json`)、pnpm workspaces (`pnpm-workspace.yaml`)、Lerna (`lerna.json`)、npm/yarn workspaces (`package.json#workspaces`) は stack-detector が検出します。各 app が独自の解析を受けます。それ以外の monorepo レイアウト (例: NX) は明示的には検出されませんが、汎用的な `apps/*/` と `packages/*/` のパターンはスタック別 scanner が拾います。
|
|
983
415
|
|
|
984
|
-
**
|
|
416
|
+
**Q: Claude Code が同意できないルールを生成したら?**
|
|
417
|
+
A: 直接編集してください。その後 `npx claudeos-core lint` を実行して CLAUDE.md が構造的に有効なままか確認します。以後の `init` 実行 (`--force` なし) では編集内容が保持されます — resume メカニズムが marker のある pass をスキップするためです。
|
|
985
418
|
|
|
986
|
-
**
|
|
419
|
+
**Q: バグはどこに報告すれば?**
|
|
420
|
+
A: [GitHub Issues](https://github.com/claudeos-core/claudeos-core/issues). セキュリティ問題は [SECURITY.md](SECURITY.md) を参照。
|
|
987
421
|
|
|
988
|
-
|
|
422
|
+
---
|
|
989
423
|
|
|
990
|
-
|
|
424
|
+
## Documentation
|
|
991
425
|
|
|
992
|
-
|
|
426
|
+
| トピック | 読むもの |
|
|
427
|
+
|---|---|
|
|
428
|
+
| 4-pass パイプラインの仕組み (図解より深く) | [docs/ja/architecture.md](docs/ja/architecture.md) |
|
|
429
|
+
| アーキテクチャの視覚的ダイアグラム (Mermaid) | [docs/ja/diagrams.md](docs/ja/diagrams.md) |
|
|
430
|
+
| Stack 検出 — 各 scanner が見るもの | [docs/ja/stacks.md](docs/ja/stacks.md) |
|
|
431
|
+
| Memory layer — decision log と failure pattern | [docs/ja/memory-layer.md](docs/ja/memory-layer.md) |
|
|
432
|
+
| 5 つの validator の詳細 | [docs/ja/verification.md](docs/ja/verification.md) |
|
|
433
|
+
| すべての CLI コマンドとオプション | [docs/ja/commands.md](docs/ja/commands.md) |
|
|
434
|
+
| 手動インストール (`npx` なし) | [docs/ja/manual-installation.md](docs/ja/manual-installation.md) |
|
|
435
|
+
| Scanner override — `.claudeos-scan.json` | [docs/ja/advanced-config.md](docs/ja/advanced-config.md) |
|
|
436
|
+
| 安全性: re-init で保持されるもの | [docs/ja/safety.md](docs/ja/safety.md) |
|
|
437
|
+
| 類似ツールとの比較 (scope であり品質ではない) | [docs/ja/comparison.md](docs/ja/comparison.md) |
|
|
438
|
+
| エラーと復旧 | [docs/ja/troubleshooting.md](docs/ja/troubleshooting.md) |
|
|
993
439
|
|
|
994
440
|
---
|
|
995
441
|
|
|
996
|
-
##
|
|
442
|
+
## Contributing
|
|
997
443
|
|
|
998
|
-
|
|
444
|
+
コントリビューション歓迎です — スタック対応の追加、プロンプトの改善、バグ修正など。詳しくは [CONTRIBUTING.md](CONTRIBUTING.md) を参照。
|
|
999
445
|
|
|
1000
|
-
|
|
1001
|
-
- **IDE 統合** — VS Code 拡張機能、IntelliJ プラグイン
|
|
1002
|
-
- **CI/CD テンプレート** — GitLab CI、CircleCI、Jenkins の例(GitHub Actions はすでに付属 — `.github/workflows/test.yml` 参照)
|
|
1003
|
-
- **テストカバレッジ** — テストスイートの拡張(現在 30 のテストファイルで 602 テスト、スキャナ、スタック検出、ドメイングループ化、プランパーシング、プロンプト生成、CLI セレクタ、モノレポ検出、Vite SPA 検出、検証ツール、L4 メモリスキャフォールド、Pass 2 再開検証、Pass 3 Guards 1/2/3(H1 センチネル + H2 BOM-aware 空ファイル + strict stale-marker unlink)、Pass 3 split モードのバッチサブ分割、Pass 3 部分マーカー再開(v2.1.0)、Pass 4 マーカーコンテンツ検証 + stale-marker unlink strictness + scaffoldSkillsManifest gap-fill(v2.1.0)、翻訳 env-skip ガード + early fail-fast + CI ワークフロー、staged-rules 移動、言語対応翻訳フォールバック、master plan 廃止のリグレッションスイート(v2.1.0)、memory score/compact フォーマッティングのリグレッション(v2.1.0)、AI Work Rules テンプレート構造、`.env` パーサー port/host/API-target 抽出 + センシティブ変数 redaction (v2.2.0)をカバー)
|
|
446
|
+
行動規範とセキュリティポリシーは [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) と [SECURITY.md](SECURITY.md) を参照。
|
|
1004
447
|
|
|
1005
|
-
|
|
448
|
+
## License
|
|
1006
449
|
|
|
1007
|
-
|
|
450
|
+
[ISC](LICENSE) — 商用を含めあらゆる用途で自由に利用可能。
|
|
1008
451
|
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
**claudeos-core** によって作成 — [GitHub](https://github.com/claudeos-core) · [Email](mailto:claudeoscore@gmail.com)
|
|
1012
|
-
|
|
1013
|
-
## ライセンス
|
|
452
|
+
---
|
|
1014
453
|
|
|
1015
|
-
|
|
454
|
+
<sub>[@claudeos-core](https://github.com/claudeos-core) が手をかけて作成しました。時間を節約できたなら、GitHub の ⭐ がプロジェクトの可視性を保ちます。</sub>
|