create-einja-app 0.3.0 → 0.3.2
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/README.md +1 -1
- package/dist/cli.js +32 -16
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/templates/default/.claude/hooks/einja/plan-mode-skill-loader.sh +23 -0
- package/templates/default/.claude/settings.json +15 -1
- package/templates/default/.env.personal.example +6 -2
- package/templates/default/.envrc +5 -0
- package/templates/default/.github/workflows/deploy-pr-preview.yml +23 -24
- package/templates/default/.github/workflows/deploy-stable-branches.yml +55 -49
- package/templates/default/.mcp.json +2 -12
- package/templates/default/.serena/project.yml +7 -0
- package/templates/default/CLAUDE.md +28 -4
- package/templates/default/README.md +2 -2
- package/templates/default/apps/admin/package.json +1 -1
- package/templates/default/apps/admin/tsconfig.json +2 -1
- package/templates/default/apps/web/package.json +1 -1
- package/templates/default/apps/web/tsconfig.json +2 -1
- package/templates/default/docs/plans/.gitkeep +0 -0
- package/templates/default/docs/plans/ancient-greeting-flamingo-agent-a87e67c.md +221 -0
- package/templates/default/docs/plans/ancient-greeting-flamingo-agent-ab73a1c.md +107 -0
- package/templates/default/docs/plans/ancient-greeting-flamingo.md +120 -0
- package/templates/default/docs/plans/bright-stargazing-dawn.md +87 -0
- package/templates/default/docs/plans/calm-stirring-bonbon.md +196 -0
- package/templates/default/docs/plans/calm-watching-widget.md +111 -0
- package/templates/default/docs/plans/cheerful-wiggling-ullman.md +164 -0
- package/templates/default/docs/plans/compiled-humming-cherny.md +94 -0
- package/templates/default/docs/plans/dapper-launching-lynx.md +81 -0
- package/templates/default/docs/plans/effervescent-munching-kite-agent-ac08baf.md +672 -0
- package/templates/default/docs/plans/effervescent-munching-kite-agent-aecc373.md +442 -0
- package/templates/default/docs/plans/effervescent-munching-kite.md +263 -0
- package/templates/default/docs/plans/fix-orphan-cleaner-review.md +25 -0
- package/templates/default/docs/plans/fix-sync-template-variables.md +162 -0
- package/templates/default/docs/plans/glimmering-giggling-sedgewick.md +126 -0
- package/templates/default/docs/plans/glittery-swimming-bachman.md +78 -0
- package/templates/default/docs/plans/happy-watching-toast.md +56 -0
- package/templates/default/docs/plans/harmonic-strolling-nebula.md +210 -0
- package/templates/default/docs/plans/import-alias-refactor.md +75 -0
- package/templates/default/docs/plans/lazy-percolating-sloth-agent-abda679.md +346 -0
- package/templates/default/docs/plans/lazy-percolating-sloth.md +151 -0
- package/templates/default/docs/plans/linked-greeting-llama-agent-a7a6e5b.md +345 -0
- package/templates/default/docs/plans/linked-greeting-llama.md +467 -0
- package/templates/default/docs/plans/lovely-bubbling-rose.md +80 -0
- package/templates/default/docs/plans/optimized-watching-sprout.md +149 -0
- package/templates/default/docs/plans/peaceful-beaming-toast-agent-a292da6.md +288 -0
- package/templates/default/docs/plans/peaceful-beaming-toast-agent-a819699.md +366 -0
- package/templates/default/docs/plans/peaceful-beaming-toast-agent-ac11de2.md +474 -0
- package/templates/default/docs/plans/peaceful-beaming-toast.md +345 -0
- package/templates/default/docs/plans/purrfect-spinning-hickey-agent-ae6194c.md +300 -0
- package/templates/default/docs/plans/purrfect-spinning-hickey-agent-ae6900e.md +444 -0
- package/templates/default/docs/plans/purrfect-spinning-hickey.md +361 -0
- package/templates/default/docs/plans/recursive-kindling-lemon-agent-a42199e.md +186 -0
- package/templates/default/docs/plans/recursive-kindling-lemon.md +36 -0
- package/templates/default/docs/plans/seed-migration-tests.md +47 -0
- package/templates/default/docs/plans/sprightly-leaping-manatee.md +224 -0
- package/templates/default/docs/plans/stateful-wishing-lerdorf.md +161 -0
- package/templates/default/docs/plans/streamed-purring-wreath.md +40 -0
- package/templates/default/docs/plans/synthetic-percolating-pearl.md +101 -0
- package/templates/default/docs/plans/todo-fix-sync-template-variables.md +21 -0
- package/templates/default/docs/plans/todo-phase4-marker-update.md +39 -0
- package/templates/default/docs/plans/todo-skill-creator-sync.md +23 -0
- package/templates/default/docs/plans/typed-snuggling-parnas-agent-a6f6391.md +476 -0
- package/templates/default/docs/plans/typed-snuggling-parnas-agent-adb678b.md +144 -0
- package/templates/default/docs/plans/typed-snuggling-parnas.md +84 -0
- package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a30aa4f.md +534 -0
- package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a57a278.md +508 -0
- package/templates/default/docs/plans/warm-hopping-lighthouse-agent-a90b809.md +421 -0
- package/templates/default/docs/plans/warm-hopping-lighthouse.md +199 -0
- package/templates/default/docs/verification-test.md +2 -0
- package/templates/default/gitignore +4 -0
- package/templates/default/package.json +2 -2
- package/templates/default/packages/admin-ui/package.json +1 -1
- package/templates/default/packages/server-core/tsconfig.json +6 -1
- package/templates/default/pnpm-lock.yaml +276 -57
- package/templates/default/scripts/ensure-serena.sh +75 -0
- package/templates/default/scripts/lib/worktree-config.ts +64 -0
- package/templates/default/scripts/stop-serena.sh +25 -0
- package/templates/default/scripts/worktree/dev.ts +2 -2
- /package/templates/default/scripts/{cli-template-update.ts → _cli-template-update.ts} +0 -0
- /package/templates/default/scripts/{template-update.ts → _template-update.ts} +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
# ガイドライン系Skill廃止 → docs一元管理
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
開発ガイドラインが `.claude/skills/` と `docs/einja/steering/` に分散している。
|
|
6
|
+
api-development, backend-architecture, frontend-development は既に docs に実体があり Skill は薄いラッパー。
|
|
7
|
+
coding-standards, component-design は Skill 内の `references/` に内容が埋め込まれている。
|
|
8
|
+
playwright-mcp は SKILL.md 自体が内容。
|
|
9
|
+
|
|
10
|
+
**目的**: `docs/einja/steering/` にガイドラインを一元管理し、6つの不要なSkillを廃止する。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Step 1: docsファイルの作成(内容移動)
|
|
15
|
+
|
|
16
|
+
### 1-1. `docs/einja/steering/development/coding-standards.md` 作成
|
|
17
|
+
|
|
18
|
+
SKILL.md の本文(基本原則、クイックリファレンス、ツール設定)+ references/ 4ファイルを1つに統合。
|
|
19
|
+
|
|
20
|
+
統合元:
|
|
21
|
+
- `.claude/skills/einja-coding-standards/SKILL.md` (行6-132)
|
|
22
|
+
- `.claude/skills/einja-coding-standards/references/typescript-rules.md`
|
|
23
|
+
- `.claude/skills/einja-coding-standards/references/naming-conventions.md`
|
|
24
|
+
- `.claude/skills/einja-coding-standards/references/prohibited-patterns.md`
|
|
25
|
+
- `.claude/skills/einja-coding-standards/references/import-conventions.md`
|
|
26
|
+
|
|
27
|
+
構成: SKILL.mdの概要・基本原則・クイックリファレンス → 各references を見出し付きセクションとして追加。
|
|
28
|
+
`@einja:managed` マーカーを付与。
|
|
29
|
+
|
|
30
|
+
### 1-2. `docs/einja/steering/development/component-design.md` 作成
|
|
31
|
+
|
|
32
|
+
SKILL.md の本文 + references/ 3ファイルを1つに統合。
|
|
33
|
+
|
|
34
|
+
統合元:
|
|
35
|
+
- `.claude/skills/einja-component-design/SKILL.md` (行6-109)
|
|
36
|
+
- `.claude/skills/einja-component-design/references/directory-structure.md`
|
|
37
|
+
- `.claude/skills/einja-component-design/references/props-patterns.md`
|
|
38
|
+
- `.claude/skills/einja-component-design/references/styling-guide.md`
|
|
39
|
+
|
|
40
|
+
構成: SKILL.mdの概要・基本原則・クイックリファレンス → 各references を見出し付きセクションとして追加。
|
|
41
|
+
`@einja:managed` マーカーを付与。
|
|
42
|
+
|
|
43
|
+
### 1-3. `docs/einja/steering/development/playwright-guidelines.md` 作成
|
|
44
|
+
|
|
45
|
+
統合元:
|
|
46
|
+
- `.claude/skills/einja-playwright-mcp/SKILL.md` (全54行)
|
|
47
|
+
|
|
48
|
+
`@einja:managed` マーカーを付与。
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Step 2: 参照元の更新
|
|
53
|
+
|
|
54
|
+
### 2-1. `.claude/agents/einja/task/task-executer.md`
|
|
55
|
+
|
|
56
|
+
**フロントマター**: skills から5つ削除
|
|
57
|
+
```yaml
|
|
58
|
+
skills:
|
|
59
|
+
- spec-context-loader
|
|
60
|
+
- general-context-loader
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**本文 行110-126**: 実装種別テーブル + 詳細規約パスを docs 直接参照に変更
|
|
64
|
+
```markdown
|
|
65
|
+
#### 1.3 実装種別に応じたドキュメント参照
|
|
66
|
+
|
|
67
|
+
実装種別に応じて、以下のドキュメントを参照すること:
|
|
68
|
+
|
|
69
|
+
| 実装種別 | 参照ドキュメント |
|
|
70
|
+
|---------|--------------|
|
|
71
|
+
| **API実装** | `docs/einja/steering/development/api-development.md` |
|
|
72
|
+
| **フロントエンド実装** | `docs/einja/steering/development/frontend-development.md` |
|
|
73
|
+
| **バックエンド実装** | `docs/einja/steering/development/backend-architecture.md` |
|
|
74
|
+
| **コード全般** | `docs/einja/steering/development/coding-standards.md` |
|
|
75
|
+
| **コンポーネント設計** | `docs/einja/steering/development/component-design.md` |
|
|
76
|
+
|
|
77
|
+
**詳細規約が必要な場合**(Readツールで上記ドキュメントの該当セクションを読み込み)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 2-2. `.claude/skills/einja-project-overview/SKILL.md`
|
|
81
|
+
|
|
82
|
+
行24-26 の関連Skillセクションを docs 参照に変更:
|
|
83
|
+
```markdown
|
|
84
|
+
## 関連ドキュメント
|
|
85
|
+
|
|
86
|
+
- `docs/einja/steering/development/coding-standards.md` - コーディング規約(インポートパス規約含む)
|
|
87
|
+
- [infra-maintenance](../einja-infra-maintenance/SKILL.md) - 開発環境セットアップ・サーバー管理
|
|
88
|
+
- `docs/einja/steering/development/component-design.md` - コンポーネント設計ガイドライン
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 2-3. `.claude/skills/einja-skill-creator/SKILL.md`
|
|
92
|
+
|
|
93
|
+
行420-421 の例示を更新:
|
|
94
|
+
- `einja-coding-standards` → docs参照パスに変更、または例示そのものを別のSkillに差し替え
|
|
95
|
+
|
|
96
|
+
### 2-4. `CLAUDE.md`
|
|
97
|
+
|
|
98
|
+
プロジェクト概要セクションの `einja-coding-standards` 参照を docs パスに変更:
|
|
99
|
+
```markdown
|
|
100
|
+
- `einja-project-overview` - 構成、技術スタック、頻出コマンド
|
|
101
|
+
- `docs/einja/steering/development/coding-standards.md` - コーディング規約、インポートパス規約
|
|
102
|
+
- `einja-infra-maintenance` - 開発環境セットアップ、サーバー管理
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 2-5. `README.md`
|
|
106
|
+
|
|
107
|
+
行411-412 のリンクを docs パスに変更:
|
|
108
|
+
```markdown
|
|
109
|
+
- [コーディング規約](./docs/einja/steering/development/coding-standards.md)
|
|
110
|
+
- [コンポーネント設計ガイドライン](./docs/einja/steering/development/component-design.md)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 2-6. `docs/einja/steering/README.md`
|
|
114
|
+
|
|
115
|
+
開発ガイドテーブルに3ファイルを追加:
|
|
116
|
+
```markdown
|
|
117
|
+
| [コーディング規約](development/coding-standards.md) | TypeScript/React命名規則、禁止パターン、インポート規約 | 全開発者 |
|
|
118
|
+
| [コンポーネント設計](development/component-design.md) | ディレクトリ構造、Props設計、スタイリング | フロントエンド開発者 |
|
|
119
|
+
| [Playwright動作確認](development/playwright-guidelines.md) | 一時ファイル管理、ブラウザ設定 | QA、開発者 |
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
フロントエンド開発者の必読セクションにも追加。
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Step 3: Skillディレクトリの削除
|
|
127
|
+
|
|
128
|
+
以下の6ディレクトリを削除:
|
|
129
|
+
- `.claude/skills/einja-api-development/`
|
|
130
|
+
- `.claude/skills/einja-backend-architecture/`
|
|
131
|
+
- `.claude/skills/einja-frontend-development/`
|
|
132
|
+
- `.claude/skills/einja-coding-standards/`
|
|
133
|
+
- `.claude/skills/einja-component-design/`
|
|
134
|
+
- `.claude/skills/einja-playwright-mcp/`
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Step 4: ビルドスクリプトの更新
|
|
139
|
+
|
|
140
|
+
### `packages/cli/scripts/copy-presets.mjs`
|
|
141
|
+
|
|
142
|
+
mappings 配列から以下の6エントリを削除(行61-89):
|
|
143
|
+
- einja-api-development (行61-65)
|
|
144
|
+
- einja-backend-architecture (行66-70)
|
|
145
|
+
- einja-coding-standards (行71-75)
|
|
146
|
+
- einja-component-design (行76-80)
|
|
147
|
+
- einja-frontend-development (行86-90)
|
|
148
|
+
|
|
149
|
+
※ einja-playwright-mcp はこのファイルに含まれていないので変更不要。
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Step 5: presets/default の同期確認
|
|
154
|
+
|
|
155
|
+
ビルドスクリプトでコピーされる `presets/default/` 配下の対応するディレクトリも削除:
|
|
156
|
+
- `packages/cli/presets/default/.claude/skills/einja-api-development/`
|
|
157
|
+
- `packages/cli/presets/default/.claude/skills/einja-backend-architecture/`
|
|
158
|
+
- `packages/cli/presets/default/.claude/skills/einja-frontend-development/`
|
|
159
|
+
- `packages/cli/presets/default/.claude/skills/einja-coding-standards/`
|
|
160
|
+
- `packages/cli/presets/default/.claude/skills/einja-component-design/`
|
|
161
|
+
|
|
162
|
+
※ これらは次回ビルド時に生成されなくなるが、既存のものは手動削除が必要。
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 検証
|
|
167
|
+
|
|
168
|
+
1. `pnpm --filter @einja/dev-cli build` でビルドが通ること
|
|
169
|
+
2. `pnpm prepush` (lint + typecheck + test) が通ること
|
|
170
|
+
3. 削除した Skill への参照が残っていないこと: `grep -r "einja-coding-standards\|einja-component-design\|einja-api-development\|einja-frontend-development\|einja-backend-architecture\|einja-playwright-mcp" .claude/ docs/ README.md CLAUDE.md packages/cli/scripts/`
|
|
171
|
+
4. 新しい docs ファイルが正しく配置されていること
|
|
172
|
+
5. `docs/einja/steering/README.md` のリンクが有効であること
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## 変更ファイルサマリー
|
|
177
|
+
|
|
178
|
+
| 操作 | ファイル |
|
|
179
|
+
|------|---------|
|
|
180
|
+
| **新規作成** | `docs/einja/steering/development/coding-standards.md` |
|
|
181
|
+
| **新規作成** | `docs/einja/steering/development/component-design.md` |
|
|
182
|
+
| **新規作成** | `docs/einja/steering/development/playwright-guidelines.md` |
|
|
183
|
+
| **編集** | `.claude/agents/einja/task/task-executer.md` |
|
|
184
|
+
| **編集** | `.claude/skills/einja-project-overview/SKILL.md` |
|
|
185
|
+
| **編集** | `.claude/skills/einja-skill-creator/SKILL.md` |
|
|
186
|
+
| **編集** | `CLAUDE.md` |
|
|
187
|
+
| **編集** | `README.md` |
|
|
188
|
+
| **編集** | `docs/einja/steering/README.md` |
|
|
189
|
+
| **編集** | `packages/cli/scripts/copy-presets.mjs` |
|
|
190
|
+
| **削除** | `.claude/skills/einja-api-development/` (1ファイル) |
|
|
191
|
+
| **削除** | `.claude/skills/einja-backend-architecture/` (1ファイル) |
|
|
192
|
+
| **削除** | `.claude/skills/einja-frontend-development/` (1ファイル) |
|
|
193
|
+
| **削除** | `.claude/skills/einja-coding-standards/` (5ファイル) |
|
|
194
|
+
| **削除** | `.claude/skills/einja-component-design/` (4ファイル) |
|
|
195
|
+
| **削除** | `.claude/skills/einja-playwright-mcp/` (1ファイル) |
|
|
196
|
+
| **削除** | `packages/cli/presets/default/.claude/skills/` 対応5ディレクトリ |
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# コミット・プッシュ計画
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
前回のセッションで実施された大規模なSkillリファクタリング(`reference/` → `references/` リネーム、新Skill追加、CLAUDE.mdスリム化、CLIパッケージ更新等)の変更が未コミットの状態で残っている。これらを適切な粒度でコミットし、プッシュする。
|
|
6
|
+
|
|
7
|
+
## 現状の問題点
|
|
8
|
+
|
|
9
|
+
### ステージングの不整合(要修正)
|
|
10
|
+
|
|
11
|
+
以下のファイルは staged では `reference/` → `references/` にリネーム済みだが、ディスク上で削除されている(シンボリックリンクだったファイル):
|
|
12
|
+
|
|
13
|
+
| ファイル | 状態 |
|
|
14
|
+
|---------|------|
|
|
15
|
+
| `einja-coding-standards/references/commit-rules.md` | ステージ済み(rename) → ディスク上削除 |
|
|
16
|
+
| `einja-coding-standards/references/review-guidelines.md` | 同上 |
|
|
17
|
+
| `einja-coding-standards/references/testing-strategy.md` | 同上 |
|
|
18
|
+
| `einja-component-design/references/frontend-development.md` | 同上 |
|
|
19
|
+
| `einja-component-design/references/testing-strategy.md` | 同上 |
|
|
20
|
+
| `einja-task-commit/references/commit-rules.md` | 同上(ディレクトリごと不在) |
|
|
21
|
+
| `einja-task-qa/references/acceptance-criteria-and-qa-guide.md` | 同上 |
|
|
22
|
+
|
|
23
|
+
→ これらの**削除もステージして**コミットに含める必要がある
|
|
24
|
+
|
|
25
|
+
### 未ステージの変更
|
|
26
|
+
|
|
27
|
+
| ファイル | 内容 |
|
|
28
|
+
|---------|------|
|
|
29
|
+
| `.claude/settings.json` | `plansDirectory: "docs/plans"` 追加 |
|
|
30
|
+
| `CLAUDE.md` | さらなるリファクタリング(役割定義の簡潔化、セクション再構成) |
|
|
31
|
+
|
|
32
|
+
## コミット分割計画
|
|
33
|
+
|
|
34
|
+
### コミット1: `refactor(skills): referenceディレクトリをreferencesにリネーム・不要シンボリックリンクを削除`
|
|
35
|
+
|
|
36
|
+
**対象ファイル:**
|
|
37
|
+
- `.claude/skills/einja-coding-standards/` - `reference/` → `references/` リネーム + SKILL.mdパス更新
|
|
38
|
+
- `.claude/skills/einja-component-design/` - 同上
|
|
39
|
+
- `.claude/skills/einja-task-commit/` - 同上
|
|
40
|
+
- `.claude/skills/einja-task-qa/` - 同上
|
|
41
|
+
- `.claude/skills/einja-task-spec-generator/` - 同上
|
|
42
|
+
- `.claude/skills/einja-task-spec-validator/` - 同上
|
|
43
|
+
- 削除済みシンボリックリンクファイル7件のステージング
|
|
44
|
+
- 削除済みSkill: `einja-api-development/reference/`, `einja-backend-architecture/reference/`, `einja-frontend-development/reference/`
|
|
45
|
+
- `.claude/agents/einja/task/task-executer.md` - パス参照更新
|
|
46
|
+
|
|
47
|
+
### コミット2: `feat(skills): einja-project-overview・einja-skill-creator Skill新規作成`
|
|
48
|
+
|
|
49
|
+
**対象ファイル:**
|
|
50
|
+
- `.claude/skills/einja-project-overview/SKILL.md` (新規)
|
|
51
|
+
- `.claude/skills/einja-skill-creator/SKILL.md` (新規)
|
|
52
|
+
- `.claude/skills/einja-skill-creator/scripts/init_skill.py` (新規)
|
|
53
|
+
- `.claude/skills/einja-skill-creator/scripts/package_skill.py` (新規)
|
|
54
|
+
- `.claude/skills/einja-skill-creator/scripts/quick_validate.py` (新規)
|
|
55
|
+
|
|
56
|
+
### コミット3: `feat(skills): import-conventions追加・infra-maintenance/task-qa Skill更新`
|
|
57
|
+
|
|
58
|
+
**対象ファイル:**
|
|
59
|
+
- `.claude/skills/einja-coding-standards/references/import-conventions.md` (新規)
|
|
60
|
+
- `.claude/skills/einja-infra-maintenance/SKILL.md` (更新)
|
|
61
|
+
- `.claude/skills/einja-task-qa/SKILL.md` (更新)
|
|
62
|
+
|
|
63
|
+
### コミット4: `refactor: CLAUDE.mdをスリム化しSkillへ内容を移行`
|
|
64
|
+
|
|
65
|
+
**対象ファイル:**
|
|
66
|
+
- `CLAUDE.md` (ステージ済み + 未ステージ変更をまとめて)
|
|
67
|
+
|
|
68
|
+
### コミット5: `feat(cli): references/ディレクトリ対応・syncフィルター更新`
|
|
69
|
+
|
|
70
|
+
**対象ファイル:**
|
|
71
|
+
- `packages/cli/scripts/copy-presets.mjs`
|
|
72
|
+
- `packages/cli/src/lib/preset-update/file-copier.ts`
|
|
73
|
+
- `packages/cli/src/lib/preset-update/file-copier.test.ts`
|
|
74
|
+
- `packages/cli/src/lib/sync/category-validator.ts`
|
|
75
|
+
- `packages/cli/src/lib/sync/category-validator.test.ts`
|
|
76
|
+
- `packages/cli/src/lib/sync/file-filter.ts`
|
|
77
|
+
- `packages/cli/src/lib/sync/file-filter.test.ts`
|
|
78
|
+
- `packages/cli/docs/SYMLINK_ARCHITECTURE.md`
|
|
79
|
+
- `packages/cli/README.md`
|
|
80
|
+
- `packages/cli/docs/BUILD.md`
|
|
81
|
+
|
|
82
|
+
### コミット6: `docs: 環境セットアップ・Neon CLIリファレンスの更新`
|
|
83
|
+
|
|
84
|
+
**対象ファイル:**
|
|
85
|
+
- `docs/einja/instructions/environment-setup.md`
|
|
86
|
+
- `docs/einja/instructions/local-server-environment-and-worktree.md`
|
|
87
|
+
- `docs/einja/instructions/neon-cli-reference.md`
|
|
88
|
+
|
|
89
|
+
### コミット7: `chore: create-einja-appテンプレート更新・BUILD.md追加`
|
|
90
|
+
|
|
91
|
+
**対象ファイル:**
|
|
92
|
+
- `packages/create-einja-app/.templateignore`
|
|
93
|
+
- `packages/create-einja-app/README.md`
|
|
94
|
+
- `packages/create-einja-app/docs/BUILD.md` (新規)
|
|
95
|
+
|
|
96
|
+
### コミット8: `chore: settings.jsonにplansDirectory追加`
|
|
97
|
+
|
|
98
|
+
**対象ファイル:**
|
|
99
|
+
- `.claude/settings.json`
|
|
100
|
+
|
|
101
|
+
## 実行手順
|
|
102
|
+
|
|
103
|
+
1. 現在のステージングを一旦全解除(`git restore --staged .`)
|
|
104
|
+
2. 各コミットごとにファイルを選択的にステージ → コミット
|
|
105
|
+
3. 全コミット完了後 `pnpm prepush` 実行
|
|
106
|
+
4. 成功後 `git push`
|
|
107
|
+
|
|
108
|
+
## 検証
|
|
109
|
+
|
|
110
|
+
- `pnpm prepush`(lint + typecheck + test)がパスすること
|
|
111
|
+
- `git log --oneline -8` でコミット分割が正しいこと
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# einja sync: 孤児ファイル検出・削除機能
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
`einja sync` はテンプレートからプロジェクトへファイルを同期するが、テンプレート側でファイルが削除されても利用者側のファイルはそのまま残る。`.einja-sync.json` に過去の同期記録があるため、「メタデータにあるがテンプレートにないファイル」=孤児として検出可能。
|
|
6
|
+
|
|
7
|
+
## 方針
|
|
8
|
+
|
|
9
|
+
- `sync` 実行時に常に孤児を検出・警告表示
|
|
10
|
+
- `--clean` フラグで実際に削除(確認プロンプト + バックアップ付き)
|
|
11
|
+
- 既存のUXパターン(dry-run, JSON出力, --yes, --no-backup)に完全準拠
|
|
12
|
+
|
|
13
|
+
## 変更対象ファイル
|
|
14
|
+
|
|
15
|
+
| ファイル | 変更内容 |
|
|
16
|
+
|---------|---------|
|
|
17
|
+
| `packages/cli/src/types/index.ts` | `SyncOptions` に `clean?: boolean` 追加 |
|
|
18
|
+
| `packages/cli/src/types/sync.ts` | `OrphanFile`, `OrphanReport` 型追加、`JsonOutput.summary` に `orphansDetected?`, `orphansDeleted?` 追加、`JsonOutput.orphans?` 追加 |
|
|
19
|
+
| `packages/cli/src/lib/sync/orphan-cleaner.ts` | **新規**: 孤児検出・レポート生成クラス |
|
|
20
|
+
| `packages/cli/src/lib/sync/metadata-manager.ts` | `removeFiles()` メソッド追加 |
|
|
21
|
+
| `packages/cli/src/commands/sync.ts` | 孤児検出→警告表示→`--clean`時の削除処理を統合 |
|
|
22
|
+
| `packages/cli/src/cli.ts` | `--clean` オプション追加 |
|
|
23
|
+
| `packages/cli/src/lib/sync/orphan-cleaner.test.ts` | **新規**: OrphanCleanerのユニットテスト |
|
|
24
|
+
| `packages/cli/src/lib/sync/metadata-manager.test.ts` | `removeFiles` テスト追加 |
|
|
25
|
+
|
|
26
|
+
## 実装ステップ
|
|
27
|
+
|
|
28
|
+
### Step 1: 型定義追加
|
|
29
|
+
|
|
30
|
+
**`types/index.ts`** — `SyncOptions` に追加:
|
|
31
|
+
```typescript
|
|
32
|
+
clean?: boolean;
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**`types/sync.ts`** — 型追加:
|
|
36
|
+
```typescript
|
|
37
|
+
export interface OrphanFile {
|
|
38
|
+
path: string;
|
|
39
|
+
category: string | null;
|
|
40
|
+
exists: boolean; // ディスク上に実在するか
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface OrphanReport {
|
|
44
|
+
hasOrphans: boolean;
|
|
45
|
+
orphans: OrphanFile[];
|
|
46
|
+
total: number;
|
|
47
|
+
existingCount: number; // ディスク上に実在する数
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
`JsonOutput.summary` に `orphansDetected?`, `orphansDeleted?` を追加。`JsonOutput` に `orphans?: OrphanFile[]` を追加。
|
|
52
|
+
|
|
53
|
+
### Step 2: OrphanCleaner クラス(新規)
|
|
54
|
+
|
|
55
|
+
**`lib/sync/orphan-cleaner.ts`** — 既存の `ConflictReporter` と同じ設計パターン:
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
export class OrphanCleaner {
|
|
59
|
+
constructor(private projectRoot: string, private fileFilter: FileFilter) {}
|
|
60
|
+
|
|
61
|
+
async detectOrphans(
|
|
62
|
+
metadata: SyncMetadata,
|
|
63
|
+
currentTemplateFiles: string[],
|
|
64
|
+
categories?: string[]
|
|
65
|
+
): Promise<OrphanFile[]>
|
|
66
|
+
// metadata.files のキー vs currentTemplateFiles を比較
|
|
67
|
+
// カテゴリフィルタ: fileFilter.getCategoryFromPath() で判定
|
|
68
|
+
// fs.pathExists でディスク実在チェック
|
|
69
|
+
|
|
70
|
+
createReport(orphans: OrphanFile[]): OrphanReport
|
|
71
|
+
|
|
72
|
+
formatReport(report: OrphanReport): string
|
|
73
|
+
// 例: " 🗑️ .claude/skills/einja-old/SKILL.md (存在)"
|
|
74
|
+
|
|
75
|
+
formatHelpMessage(): string
|
|
76
|
+
// "💡 削除するには --clean オプションを使用してください"
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Step 3: MetadataManager 拡張
|
|
81
|
+
|
|
82
|
+
**`lib/sync/metadata-manager.ts`** に追加:
|
|
83
|
+
```typescript
|
|
84
|
+
removeFiles(metadata: SyncMetadata, filePaths: string[]): SyncMetadata
|
|
85
|
+
// metadata.files から指定パスのエントリを削除して返す
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Step 4: CLI オプション追加
|
|
89
|
+
|
|
90
|
+
**`cli.ts`** の sync コマンドに追加:
|
|
91
|
+
```typescript
|
|
92
|
+
.option("--clean", "テンプレートから削除されたファイル(孤児)を削除")
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Step 5: sync.ts への統合
|
|
96
|
+
|
|
97
|
+
既存フローへの挿入位置:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
1. メタデータ読み込み
|
|
101
|
+
2. 同期対象スキャン (targets)
|
|
102
|
+
3. 差分計算
|
|
103
|
+
4. ★ 孤児検出(常に実行)
|
|
104
|
+
5. dry-run モード
|
|
105
|
+
- 既存の差分表示
|
|
106
|
+
- ★ 孤児レポート表示
|
|
107
|
+
6. 確認プロンプト
|
|
108
|
+
7. バックアップ作成
|
|
109
|
+
8. ファイルマージ処理
|
|
110
|
+
9. ★ 孤児削除処理(--clean 時のみ)
|
|
111
|
+
- 確認プロンプト(デフォルトNo、--yes でスキップ)
|
|
112
|
+
- バックアップ作成
|
|
113
|
+
- ファイル削除
|
|
114
|
+
- メタデータから削除
|
|
115
|
+
10. メタデータ保存
|
|
116
|
+
11. 結果出力
|
|
117
|
+
- ★ 孤児レポート(--clean 無しでも警告表示)
|
|
118
|
+
- ★ JSON出力に orphans フィールド追加
|
|
119
|
+
12. 依存関係チェック
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Step 6: テスト
|
|
123
|
+
|
|
124
|
+
**orphan-cleaner.test.ts(新規):**
|
|
125
|
+
- メタデータにあるがテンプレートにないファイルを検出
|
|
126
|
+
- カテゴリフィルタが正しく適用される
|
|
127
|
+
- ディスク実在チェックが正しい
|
|
128
|
+
- レポートフォーマットが正しい
|
|
129
|
+
|
|
130
|
+
**metadata-manager.test.ts(追加):**
|
|
131
|
+
- `removeFiles` で複数ファイルが正しく削除される
|
|
132
|
+
|
|
133
|
+
## UX例
|
|
134
|
+
|
|
135
|
+
### 通常 sync(孤児あり、--clean なし)
|
|
136
|
+
```
|
|
137
|
+
✅ 同期完了!
|
|
138
|
+
- 成功: 3ファイル
|
|
139
|
+
- スキップ: 12ファイル
|
|
140
|
+
|
|
141
|
+
⚠️ 孤児ファイルが検出されました:
|
|
142
|
+
🗑️ .claude/skills/einja-old/SKILL.md
|
|
143
|
+
🗑️ docs/einja/deprecated.md
|
|
144
|
+
|
|
145
|
+
💡 削除するには --clean オプションを使用してください
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### `--clean` 実行時
|
|
149
|
+
```
|
|
150
|
+
⚠️ 以下の孤児ファイルを削除します:
|
|
151
|
+
🗑️ .claude/skills/einja-old/SKILL.md
|
|
152
|
+
🗑️ docs/einja/deprecated.md
|
|
153
|
+
|
|
154
|
+
? 2ファイルを削除します。続行しますか? (y/N) y
|
|
155
|
+
|
|
156
|
+
- 孤児削除: 2ファイル
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## 検証方法
|
|
160
|
+
|
|
161
|
+
1. `pnpm -F @einja/dev-cli test` — 全テスト通過
|
|
162
|
+
2. `pnpm -F @einja/dev-cli typecheck` — 型チェック通過
|
|
163
|
+
3. `pnpm -F @einja/dev-cli lint` — lint通過
|
|
164
|
+
4. 手動テスト: `.einja-sync.json` に存在しないファイルエントリを追加 → `einja sync --dry-run` で孤児検出 → `einja sync --clean --yes` で削除確認
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Plan: project-privateセクションの簡素化
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
project-privateセクションの冗長な形式を簡素化する。現在の形式:
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<!-- @einja:project-private:start id="xxx" -->
|
|
11
|
+
## プロジェクト固有の設定
|
|
12
|
+
|
|
13
|
+
<!-- このセクションはプロジェクト固有の内容を追記する場所です -->
|
|
14
|
+
<!-- einja syncで上書きされません -->
|
|
15
|
+
<!-- @einja:project-private:end -->
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
新しい形式:
|
|
19
|
+
|
|
20
|
+
```markdown
|
|
21
|
+
<!-- @einja:project-private:start id="xxx" -->
|
|
22
|
+
<!-- プロジェクト固有の情報を記入 -->
|
|
23
|
+
<!-- @einja:project-private:end -->
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
変更点:
|
|
27
|
+
1. 直前の `---` 罫線を削除
|
|
28
|
+
2. `## プロジェクト固有の設定` 見出しを削除
|
|
29
|
+
3. 空行 + 2行コメントを1行コメントに統合
|
|
30
|
+
|
|
31
|
+
## 互換性
|
|
32
|
+
|
|
33
|
+
CLIの `marker-processor.ts` はstart/endタグのみでパースするため、中身のコメント変更は完全に互換。
|
|
34
|
+
|
|
35
|
+
## 対象ファイル
|
|
36
|
+
|
|
37
|
+
### 一括置換対象(63ファイル)
|
|
38
|
+
|
|
39
|
+
| カテゴリ | ファイル数 |
|
|
40
|
+
|---------|-----------|
|
|
41
|
+
| `.claude/agents/einja/` | 16 |
|
|
42
|
+
| `.claude/commands/einja/` | 7 |
|
|
43
|
+
| `.claude/skills/einja-*/SKILL.md` | 13 |
|
|
44
|
+
| `docs/einja/steering/` | 20 |
|
|
45
|
+
| `docs/einja/instructions/` | 7 |
|
|
46
|
+
|
|
47
|
+
### 対象外
|
|
48
|
+
|
|
49
|
+
| カテゴリ | 理由 |
|
|
50
|
+
|---------|------|
|
|
51
|
+
| `CLAUDE.md` | 修正済み |
|
|
52
|
+
| `docs/einja/memory/` | ファイル全体がproject-private、見出しは意味あるコンテンツ |
|
|
53
|
+
| `packages/cli/` | ソースコード・テスト(文字列リテラル・テストデータ) |
|
|
54
|
+
| `packages/create-einja-app/` | 同上 |
|
|
55
|
+
| `docs/plans/` | 過去のplan(参照用) |
|
|
56
|
+
| `.claude/skills/einja-skill-creator/scripts/init_skill.py` | 説明用コードブロック内(短い形式で既にOK) |
|
|
57
|
+
| `.claude/skills/einja-skill-creator/SKILL.md` | 説明用コードブロック + 自身のproject-private |
|
|
58
|
+
| `.claude/skills/einja-coding-standards/references/testing-strategy.md` | 確認が必要 |
|
|
59
|
+
|
|
60
|
+
## 実装手順
|
|
61
|
+
|
|
62
|
+
### Step 1: sedで一括置換
|
|
63
|
+
|
|
64
|
+
2つのパターンに対応:
|
|
65
|
+
|
|
66
|
+
**パターンA**: `---` + 空行 + `---` + 空行 + project-private(1ファイル: `frontend-implement.md`)
|
|
67
|
+
**パターンB**: `---` + 空行 + project-private(約62ファイル)
|
|
68
|
+
|
|
69
|
+
両パターンをカバーするPerl正規表現で一括処理:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# .claude/ と docs/einja/ 配下の .md ファイルを対象に、
|
|
73
|
+
# "---\n\n" (1つまたは2つ) + 冗長なproject-private を簡素な形式に置換
|
|
74
|
+
find .claude/agents .claude/commands .claude/skills docs/einja/steering docs/einja/instructions \
|
|
75
|
+
-name '*.md' -exec perl -0777 -pi -e '
|
|
76
|
+
s/\n---\n(\n---\n)?\n<!-- @einja:project-private:start id="([^"]+)" -->\n## プロジェクト固有の設定\n\n<!-- このセクションはプロジェクト固有の内容を追記する場所です -->\n<!-- einja syncで上書きされません -->\n<!-- @einja:project-private:end -->/\n<!-- \@einja:project-private:start id="$2" -->\n<!-- プロジェクト固有の情報を記入 -->\n<!-- \@einja:project-private:end -->/g' {} +
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Step 2: SKILL.md内のドキュメント例も更新
|
|
80
|
+
|
|
81
|
+
`einja-skill-creator/SKILL.md` 内の説明用コードブロック部分は手動で確認・更新。
|
|
82
|
+
|
|
83
|
+
### Step 3: 検証
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# 旧形式が残っていないことを確認
|
|
87
|
+
grep -r "## プロジェクト固有の設定" .claude/ docs/einja/steering/ docs/einja/instructions/ --include="*.md"
|
|
88
|
+
|
|
89
|
+
# 新形式の件数を確認(63ファイル程度)
|
|
90
|
+
grep -r "<!-- プロジェクト固有の情報を記入 -->" .claude/ docs/einja/ --include="*.md" | wc -l
|
|
91
|
+
|
|
92
|
+
# テスト実行(marker-processor関連)
|
|
93
|
+
cd packages/cli && pnpm test -- marker-processor
|
|
94
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# CLAUDE.md プロジェクト概要セクションの改善
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
CLAUDE.mdの「プロジェクト概要」セクションが、ファイルパス直接参照と頻出コマンドのハードコード記述になっている。Skill名ベースの参照に統一し、頻出コマンドの重複管理を解消する。
|
|
6
|
+
|
|
7
|
+
### 現状の問題点
|
|
8
|
+
|
|
9
|
+
1. **ファイルパス参照** → パス変更時に壊れる、Skill仕組みと不整合
|
|
10
|
+
2. **頻出コマンド** → CLAUDE.mdにハードコード。project-overviewにまとめれば一元管理できる
|
|
11
|
+
|
|
12
|
+
## 変更内容
|
|
13
|
+
|
|
14
|
+
### 1. CLAUDE.md「プロジェクト概要」セクション(L106-119)
|
|
15
|
+
|
|
16
|
+
**Before:**
|
|
17
|
+
```markdown
|
|
18
|
+
## プロジェクト概要
|
|
19
|
+
|
|
20
|
+
Turborepoモノレポ構成(pnpm workspaces)。詳細は以下を参照:
|
|
21
|
+
- `.claude/skills/einja-project-overview/SKILL.md` - 構成、技術スタック
|
|
22
|
+
- `.claude/skills/einja-coding-standards/SKILL.md` - コーディング規約、インポートパス規約
|
|
23
|
+
- `.claude/skills/einja-infra-maintenance/SKILL.md` - 開発環境セットアップ、サーバー管理
|
|
24
|
+
|
|
25
|
+
### 頻出コマンド
|
|
26
|
+
- `pnpm dev:bg` / `pnpm dev:stop` - 開発サーバー起動/停止
|
|
27
|
+
- `pnpm build` - プロダクションビルド
|
|
28
|
+
- `pnpm lint:fix && pnpm format:fix` - コード自動修正
|
|
29
|
+
- `pnpm typecheck` - 型チェック
|
|
30
|
+
- `pnpm test` - テスト実行
|
|
31
|
+
- `pnpm prepush` - プッシュ前チェック(lint + typecheck + test)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**After:**
|
|
35
|
+
```markdown
|
|
36
|
+
## プロジェクト概要
|
|
37
|
+
|
|
38
|
+
Turborepoモノレポ構成(pnpm workspaces)。詳細が必要な場合は以下のSkillを参照:
|
|
39
|
+
- `einja-project-overview` - 構成、技術スタック、頻出コマンド
|
|
40
|
+
- `einja-coding-standards` - コーディング規約、インポートパス規約
|
|
41
|
+
- `einja-infra-maintenance` - 開発環境セットアップ、サーバー管理
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
→ 頻出コマンドをCLAUDE.mdから削除し、project-overview Skillに移動
|
|
45
|
+
|
|
46
|
+
### 2. einja-project-overview SKILL.md に頻出コマンドを追加
|
|
47
|
+
|
|
48
|
+
**追加内容:**
|
|
49
|
+
```markdown
|
|
50
|
+
## 頻出コマンド
|
|
51
|
+
|
|
52
|
+
- `pnpm dev:bg` / `pnpm dev:stop` - 開発サーバー起動/停止
|
|
53
|
+
- `pnpm build` - プロダクションビルド
|
|
54
|
+
- `pnpm lint:fix && pnpm format:fix` - コード自動修正
|
|
55
|
+
- `pnpm typecheck` - 型チェック
|
|
56
|
+
- `pnpm test` - テスト実行
|
|
57
|
+
- `pnpm prepush` - プッシュ前チェック(lint + typecheck + test)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### トレードオフ
|
|
61
|
+
|
|
62
|
+
| 観点 | 現状(CLAUDE.md直書き) | 変更後(Skill参照) |
|
|
63
|
+
|------|----------------------|-------------------|
|
|
64
|
+
| 即座に参照可能か | 常にシステムプロンプトに含まれる | Skillロード時に参照可能 |
|
|
65
|
+
| 一元管理 | CLAUDE.mdとSkillで二重管理リスク | project-overviewが Single Source of Truth |
|
|
66
|
+
| CLAUDE.mdの簡潔さ | 14行占有 | 4行に短縮(-10行) |
|
|
67
|
+
|
|
68
|
+
頻出コマンドは実作業時にSkillをロードすれば十分。CLAUDE.mdはポインタに徹する方が設計上正しい。
|
|
69
|
+
|
|
70
|
+
## 対象ファイル
|
|
71
|
+
|
|
72
|
+
| ファイル | 変更内容 |
|
|
73
|
+
|---------|---------|
|
|
74
|
+
| `CLAUDE.md` (L106-119) | Skill名参照に変更、頻出コマンド削除 |
|
|
75
|
+
| `.claude/skills/einja-project-overview/SKILL.md` | 頻出コマンドセクション追加 |
|
|
76
|
+
|
|
77
|
+
## 検証
|
|
78
|
+
|
|
79
|
+
- `CLAUDE.md` でファイルパス参照が残っていないこと(Grepで確認)
|
|
80
|
+
- `einja-project-overview/SKILL.md` に頻出コマンドが含まれること
|
|
81
|
+
- `pnpm prepush` が通ること(CLAUDE.mdはlint対象外だが念のため)
|