create-einja-app 0.3.1 → 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,149 @@
|
|
|
1
|
+
# Plan: `@einja:seed` → `@einja:project-private` リネーム+機能拡張
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
einja CLIのsync機能で配布されるmdファイルに、利用者が「プロジェクト固有コンテンツ」を追記できる領域を明示的に提供したい。
|
|
6
|
+
|
|
7
|
+
**現状の問題:**
|
|
8
|
+
- `@einja:seed` はマーカー名が機能を表していない(「種」より「プロジェクト固有領域」が正しい)
|
|
9
|
+
- 一部ファイル(新規3ファイル等)にseedセクションがない
|
|
10
|
+
- `.claude/` 配下にマーカーがなく、利用者がどこに追記できるか不明
|
|
11
|
+
- seedのみ(managedなし)だと本文がunmanaged扱いになりテンプレート更新が反映されない
|
|
12
|
+
|
|
13
|
+
**解決策:**
|
|
14
|
+
1. `@einja:seed` → `@einja:project-private` に完全リネーム
|
|
15
|
+
2. 利用者リポジトリの旧マーカーはsync時に自動マイグレーション
|
|
16
|
+
3. managedなしファイルでも使えるよう挙動を拡張
|
|
17
|
+
4. `.claude/` 配下の全配布対象ファイルにproject-privateセクション追加
|
|
18
|
+
|
|
19
|
+
## 挙動
|
|
20
|
+
|
|
21
|
+
### managed + project-private(docs/einja/ 等)
|
|
22
|
+
従来のseedと同じ。マーカーベース処理内でローカル版を保持。
|
|
23
|
+
|
|
24
|
+
### project-privateのみ(managedなし。.claude/ 等)— 新規挙動
|
|
25
|
+
```
|
|
26
|
+
1. base版・テンプレート・ローカルの3つからproject-privateセクションを抽出
|
|
27
|
+
2. 残りの本文を3方向マージで処理(テンプレート更新が反映される)
|
|
28
|
+
3. ローカル版のproject-privateセクションをファイル末尾に再付加
|
|
29
|
+
4. ローカルにproject-privateがなければテンプレート版をseed(マーカーペアが存在すれば空でも「存在する」扱い)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 自動マイグレーション
|
|
33
|
+
sync時にローカルファイルで `@einja:seed` を検出したら、処理前に自動で `@einja:project-private` にリネーム。
|
|
34
|
+
|
|
35
|
+
## 変更対象ファイル
|
|
36
|
+
|
|
37
|
+
### Phase 1: sync engine リネーム+拡張
|
|
38
|
+
|
|
39
|
+
| ファイル | 変更内容 |
|
|
40
|
+
|---------|---------|
|
|
41
|
+
| `packages/cli/src/types/sync.ts` | `MarkerSectionType` の `"seed"` → `"project-private"`。`MarkerErrorType` の `"seed_without_id"` → `"project_private_without_id"`。`JsonPathsConfigSchema` の `seed` → `project-private`(キー名変更) |
|
|
42
|
+
| `packages/cli/src/lib/sync/marker-processor.ts` | 全パターンの `seed` → `project-private` 置換。`extractProjectPrivateSections(content)` / `reattachProjectPrivateSections(content, sections)` / `hasManagedMarkers(content)` メソッド追加。`migrateLegacySeedMarkers(content)` メソッド追加(自動マイグレーション用) |
|
|
43
|
+
| `packages/cli/src/lib/sync/seed-synchronizer.ts` → **`project-private-synchronizer.ts`** にリネーム | クラス名・メソッド名リネーム + managedなしファイル用の同期ロジック追加 |
|
|
44
|
+
| `packages/cli/src/lib/sync/json-processor.ts` | `isPathSeed()` → `isPathProjectPrivate()` 等、seed参照12箇所をリネーム |
|
|
45
|
+
| `packages/cli/src/commands/sync.ts` | import変更、`hasMarkers()` の `seed` → `project-private`、managedなしファイルの分岐追加、マイグレーション処理の呼び出し |
|
|
46
|
+
| `packages/cli/src/lib/sync/metadata-manager.ts` | `.einja-sync.json` のマイグレーション処理追加(`jsonPaths.seed` → `jsonPaths["project-private"]`) |
|
|
47
|
+
|
|
48
|
+
### Phase 2: テスト リネーム+追加
|
|
49
|
+
|
|
50
|
+
| ファイル | 変更内容 |
|
|
51
|
+
|---------|---------|
|
|
52
|
+
| `packages/cli/src/lib/sync/marker-processor.test.ts` | 全テストの `seed` → `project-private` + 抽出・再付加テスト追加 + マイグレーションテスト追加 |
|
|
53
|
+
| `packages/cli/src/lib/sync/integration.test.ts` | seed → project-private + managedなしファイルの統合テスト追加(下記シナリオ) |
|
|
54
|
+
| `packages/cli/src/lib/sync/metadata-manager.test.ts` | seed参照置換 + .einja-sync.jsonマイグレーションテスト |
|
|
55
|
+
| `packages/cli/src/lib/sync/conflict-reporter.test.ts` | seed参照があれば置換 |
|
|
56
|
+
| `packages/cli/src/lib/sync/json-processor.test.ts`(存在すれば) | seed参照置換 |
|
|
57
|
+
|
|
58
|
+
**統合テストシナリオ:**
|
|
59
|
+
- 初回sync: project-privateのみファイル → テンプレート全体がコピーされる
|
|
60
|
+
- 2回目sync: テンプレート本文変更 → 3方向マージで本文更新、project-private保持
|
|
61
|
+
- 2回目sync: ローカル本文も変更 → 3方向マージでコンフリクト検出、project-private保持
|
|
62
|
+
- project-private空セクションの処理(マーカーペアのみ → 存在扱い)
|
|
63
|
+
- 旧 `@einja:seed` マーカー → 自動マイグレーション → 正常処理
|
|
64
|
+
|
|
65
|
+
### Phase 3: create-einja-app対応
|
|
66
|
+
|
|
67
|
+
| ファイル | 変更内容 |
|
|
68
|
+
|---------|---------|
|
|
69
|
+
| `packages/create-einja-app/src/utils/merger.ts` | ローカル `MarkerSection` 型、`parseStartMarker()`、`parseEndMarker()` 含め `seed` → `project-private` 置換 + managedなしファイル対応 |
|
|
70
|
+
| `packages/create-einja-app/tests/unit/utils/merger.test.ts` | テスト置換+追加 |
|
|
71
|
+
|
|
72
|
+
### Phase 4: 配布対象ファイルのマーカー更新
|
|
73
|
+
|
|
74
|
+
#### 4-a: 既存26ファイルの `@einja:seed` → `@einja:project-private` 置換
|
|
75
|
+
|
|
76
|
+
`docs/einja/steering/`, `docs/einja/instructions/`, `docs/einja/memory/` 配下の全seedマーカー付きファイル
|
|
77
|
+
|
|
78
|
+
#### 4-b: seedセクション未設置の3ファイルに新規追加
|
|
79
|
+
|
|
80
|
+
| ファイル | ID |
|
|
81
|
+
|---------|-----|
|
|
82
|
+
| `docs/einja/steering/development/coding-standards.md` | `coding-standards-project` |
|
|
83
|
+
| `docs/einja/steering/development/component-design.md` | `component-design-project` |
|
|
84
|
+
| `docs/einja/steering/development/playwright-guidelines.md` | `playwright-guidelines-project` |
|
|
85
|
+
|
|
86
|
+
#### 4-c: .claude/skills/einja-*/(SKILL.mdのみ、11ファイル)
|
|
87
|
+
|
|
88
|
+
末尾にproject-privateセクション新規追加。ID: `{skill名}-project`
|
|
89
|
+
|
|
90
|
+
#### 4-d: .claude/agents/einja/(全17ファイル)
|
|
91
|
+
|
|
92
|
+
末尾にproject-privateセクション新規追加。ID: `{agent名}-project`
|
|
93
|
+
|
|
94
|
+
#### 4-e: .claude/commands/einja/(全7ファイル)
|
|
95
|
+
|
|
96
|
+
末尾にproject-privateセクション新規追加。ID: `{command名}-project`
|
|
97
|
+
|
|
98
|
+
#### 4-f: CLAUDE.md
|
|
99
|
+
|
|
100
|
+
`@einja:excluded` セクションの直前にproject-privateセクション追加(ID: `claude-md-project`)
|
|
101
|
+
|
|
102
|
+
#### 4-g: skill-creatorのドキュメント例示更新
|
|
103
|
+
|
|
104
|
+
`.claude/skills/einja-skill-creator/SKILL.md` と `scripts/init_skill.py` 内のseed例示をproject-privateに更新
|
|
105
|
+
|
|
106
|
+
#### 4-h: ドキュメント内のseed参照更新
|
|
107
|
+
|
|
108
|
+
| ファイル | 内容 |
|
|
109
|
+
|---------|------|
|
|
110
|
+
| `packages/cli/docs/MARKER_SPECIFICATION.md`(存在すれば) | seed → project-private |
|
|
111
|
+
| `packages/cli/README.md` | seed参照があれば更新 |
|
|
112
|
+
| `packages/create-einja-app/README.md` | seed参照があれば更新 |
|
|
113
|
+
| CHANGELOG内のseed参照 | 歴史的記録のため**据え置き** |
|
|
114
|
+
|
|
115
|
+
### Phase 5: ビルド+最終確認
|
|
116
|
+
|
|
117
|
+
1. `pnpm --filter @einja/dev-cli build` でpresets/defaultに反映
|
|
118
|
+
2. `pnpm prepush`(lint + typecheck + test)
|
|
119
|
+
3. `grep -r "@einja:seed" --include="*.ts" --include="*.md" --include="*.py" --include="*.json" --include="*.yml"` — seed残存なし確認(CHANGELOG除く)
|
|
120
|
+
|
|
121
|
+
## project-privateセクションの共通フォーマット
|
|
122
|
+
|
|
123
|
+
```markdown
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
<!-- @einja:project-private:start id="{ID}" -->
|
|
127
|
+
## プロジェクト固有の設定
|
|
128
|
+
|
|
129
|
+
<!-- このセクションはプロジェクト固有の内容を追記する場所です -->
|
|
130
|
+
<!-- einja syncで上書きされません -->
|
|
131
|
+
<!-- @einja:project-private:end -->
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## 除外対象(project-privateを追加しない)
|
|
135
|
+
|
|
136
|
+
| ファイル | 理由 |
|
|
137
|
+
|---------|------|
|
|
138
|
+
| `.claude/skills/einja-*/references/*.md` | リファレンス資料 |
|
|
139
|
+
| `.claude/skills/einja-*/templates/*.md` | テンプレート定義 |
|
|
140
|
+
| `docs/einja/example/**/*.md` | サンプル教材 |
|
|
141
|
+
| `docs/einja/templates/README.md` | テンプレートREADME |
|
|
142
|
+
|
|
143
|
+
## 検証方法
|
|
144
|
+
|
|
145
|
+
1. `pnpm --filter @einja/dev-cli test` — CLIの全テストパス
|
|
146
|
+
2. `pnpm --filter create-einja-app test` — create-einja-appの全テストパス
|
|
147
|
+
3. `pnpm prepush` — lint + typecheck + test パス
|
|
148
|
+
4. `grep -r "@einja:seed" --include="*.ts" --include="*.md" --include="*.py" --include="*.json" --include="*.yml"` — seed残存なし(CHANGELOG除く)
|
|
149
|
+
5. 統合テストシナリオ(Phase 2参照)
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# プリセットファイルのハードコード値調査レポート
|
|
2
|
+
|
|
3
|
+
## 調査目的
|
|
4
|
+
`einja init` で配布されるプリセットファイル群(`packages/cli/presets/default/`)に、テンプレートリポジトリ(einja-management-template)固有のハードコードされた値が含まれていないかを調査する。
|
|
5
|
+
|
|
6
|
+
## 調査対象ファイル
|
|
7
|
+
|
|
8
|
+
### 1. scripts/ 配下のファイル
|
|
9
|
+
|
|
10
|
+
#### ✅ scripts/init.sh
|
|
11
|
+
**問題なし** - 汎用的なスクリプト
|
|
12
|
+
- package.jsonから動的にNode/pnpmバージョンを取得
|
|
13
|
+
- 環境依存の値なし
|
|
14
|
+
|
|
15
|
+
#### ✅ scripts/env.ts
|
|
16
|
+
**問題なし** - 汎用的な環境変数ウィザード
|
|
17
|
+
- ファイルパスは相対パス(`process.cwd()`ベース)
|
|
18
|
+
- 環境変数名は一般的な命名(DATABASE_URL, AUTH_SECRET, GITHUB_TOKEN等)
|
|
19
|
+
|
|
20
|
+
#### ✅ scripts/env-show.ts
|
|
21
|
+
**問題なし** - 汎用的な表示スクリプト
|
|
22
|
+
- 環境設定は共通定義(ENVIRONMENTS配列)を使用
|
|
23
|
+
- 固有の値なし
|
|
24
|
+
|
|
25
|
+
#### ✅ scripts/env-rotate-secrets.ts
|
|
26
|
+
**問題なし** - 汎用的な秘密鍵ローテーションスクリプト
|
|
27
|
+
- 共通ライブラリ(env-common.ts)を使用
|
|
28
|
+
- 固有の値なし
|
|
29
|
+
|
|
30
|
+
#### ✅ scripts/setup-dev.ts
|
|
31
|
+
**問題なし** - 汎用的なセットアップスクリプト
|
|
32
|
+
- `process.cwd()`で現在ディレクトリを基準
|
|
33
|
+
- ポート番号等は環境変数や設定ファイルから動的取得(推測)
|
|
34
|
+
|
|
35
|
+
#### ⚠️ scripts/worktree/dev.ts
|
|
36
|
+
**潜在的な問題あり**
|
|
37
|
+
- **L14**: `import type { AppConfig, WorktreeConfig } from "../../packages/config/src/worktree-config.js";`
|
|
38
|
+
- **問題**: テンプレートリポジトリ固有のパッケージパス構造に依存
|
|
39
|
+
- **影響**: 他プロジェクトがこの構造を持たない場合、import失敗でエラー
|
|
40
|
+
- **L101**: `config = loadWorktreeConfig();`
|
|
41
|
+
- **問題**: worktree.config.jsonの存在を前提としている
|
|
42
|
+
- **影響**: 設定ファイル未作成時のエラーハンドリングが不明確
|
|
43
|
+
|
|
44
|
+
#### ✅ scripts/lib/env-common.ts
|
|
45
|
+
**問題なし** - 汎用的な共通ライブラリ
|
|
46
|
+
- 環境設定定義は標準的(local, develop, preview, production, ci)
|
|
47
|
+
- 固有の値なし
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
### 2. .envrc
|
|
52
|
+
**問題なし** - 汎用的なdirenv設定
|
|
53
|
+
- 相対パスのみ(`.env`, `.env.personal`)
|
|
54
|
+
- git worktree対応の汎用ロジック
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### 3. .mcp.json
|
|
59
|
+
**問題なし** - 汎用的なMCP設定
|
|
60
|
+
- MCPサーバー設定は汎用的
|
|
61
|
+
- `${GITHUB_TOKEN}` は環境変数参照(動的)
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### 4. CLAUDE.md.template
|
|
66
|
+
**問題なし** - テンプレート化済み
|
|
67
|
+
- `@einja:excluded:start` ~ `@einja:excluded:end` で囲まれた部分は配布時に除外される
|
|
68
|
+
- 変数プレースホルダーは未検出(要確認: テンプレート変換処理の詳細)
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### 5. preset.yaml
|
|
73
|
+
**問題なし** - プリセット定義
|
|
74
|
+
- 変数定義セクション(`variables:`)でユーザーカスタマイズ可能
|
|
75
|
+
- `PROJECT_NAME`, `INSTALL_COMMAND` 等のプレースホルダーを提供
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
### 6. .claude/settings.json
|
|
80
|
+
**問題なし** - 汎用的なClaude設定
|
|
81
|
+
- パーミッション設定は汎用的
|
|
82
|
+
- フック定義のパスは `$CLAUDE_PROJECT_DIR` を使用(動的)
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 追加調査結果
|
|
87
|
+
|
|
88
|
+
### grep検索結果
|
|
89
|
+
|
|
90
|
+
#### 1. テンプレートリポジトリ名の検出
|
|
91
|
+
```bash
|
|
92
|
+
grep -r "einja-management-template" packages/cli/presets/default/
|
|
93
|
+
```
|
|
94
|
+
**検出箇所**:
|
|
95
|
+
- `docs/einja/steering/README.md`:
|
|
96
|
+
```
|
|
97
|
+
詳細な仕様は [CLIのマーカー仕様書](https://github.com/einja-inc/einja-management-template/blob/main/packages/cli/docs/MARKER_SPECIFICATION.md) を参照してください。
|
|
98
|
+
```
|
|
99
|
+
- **問題**: ハードコードされたGitHubリポジトリURL
|
|
100
|
+
- **影響**: 外部リンクが切れる(他プロジェクトには無関係なリンク)
|
|
101
|
+
- **重要度**: 🟡 中(ドキュメントの参照リンクのみ)
|
|
102
|
+
|
|
103
|
+
#### 2. ハードコードされたポート番号の検出
|
|
104
|
+
```bash
|
|
105
|
+
grep -r "localhost:300[0-9]" packages/cli/presets/default/
|
|
106
|
+
```
|
|
107
|
+
**検出箇所** (多数):
|
|
108
|
+
|
|
109
|
+
| ファイル | 行内容 | 重要度 |
|
|
110
|
+
|---------|--------|--------|
|
|
111
|
+
| `.claude/agents/einja/specs/spec-qa-generator.md` | `http://localhost:3000/auth/login` | 🟡 中 |
|
|
112
|
+
| `docs/einja/instructions/environment-setup.md` | `NEXTAUTH_URL="http://localhost:3000"` | 🔴 高 |
|
|
113
|
+
| `docs/einja/example/specs/issues/issue999-example-task/qa-tests/README.md` | `http://localhost:3000` (複数箇所) | 🟢 低(例示) |
|
|
114
|
+
| `docs/einja/steering/acceptance-criteria-and-qa-guide.md` | `http://localhost:3000` (複数箇所) | 🟡 中 |
|
|
115
|
+
| `docs/einja/steering/development/testing-strategy.md` | `baseURL: 'http://localhost:3000'` | 🟡 中 |
|
|
116
|
+
|
|
117
|
+
**問題点**:
|
|
118
|
+
- テンプレート固有のポート番号(3000)がハードコード
|
|
119
|
+
- 実際のプロジェクトは異なるポート(例: 3001, 8080等)を使用する可能性
|
|
120
|
+
- Worktree環境では動的ポート割り当てが必要
|
|
121
|
+
|
|
122
|
+
#### 3. ハードコードされたリポジトリURLの検出
|
|
123
|
+
```bash
|
|
124
|
+
grep -r "github.com/einja-inc" packages/cli/presets/default/
|
|
125
|
+
```
|
|
126
|
+
**検出箇所**:
|
|
127
|
+
- `docs/einja/steering/README.md`: 同上(問題1と同じ)
|
|
128
|
+
|
|
129
|
+
#### 4. 開発者固有の絶対パスの検出
|
|
130
|
+
```bash
|
|
131
|
+
grep -r "/Users/kzp" packages/cli/presets/default/
|
|
132
|
+
```
|
|
133
|
+
**結果**: 検出なし ✅
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 修正が必要な箇所
|
|
138
|
+
|
|
139
|
+
### 🔴 高優先度1: docs/einja/instructions/environment-setup.md
|
|
140
|
+
|
|
141
|
+
#### 問題: ハードコードされたポート番号
|
|
142
|
+
```
|
|
143
|
+
NEXTAUTH_URL="http://localhost:3000"
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**修正案**:
|
|
147
|
+
- 変数プレースホルダーに置き換え:
|
|
148
|
+
```
|
|
149
|
+
NEXTAUTH_URL="http://localhost:${PORT:-3000}"
|
|
150
|
+
```
|
|
151
|
+
- またはドキュメント内で「ポート番号は環境に応じて変更してください」と注記
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
### 🔴 高優先度2: scripts/worktree/dev.ts
|
|
156
|
+
|
|
157
|
+
#### 問題1: packages/config へのハードコードされた依存
|
|
158
|
+
```typescript
|
|
159
|
+
import type { AppConfig, WorktreeConfig } from "../../packages/config/src/worktree-config.js";
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**修正案**:
|
|
163
|
+
- オプション1(推奨): 型定義をスクリプト内にインライン化
|
|
164
|
+
```typescript
|
|
165
|
+
interface AppConfig {
|
|
166
|
+
id: string;
|
|
167
|
+
portRangeStart: number;
|
|
168
|
+
rangeSize: number;
|
|
169
|
+
}
|
|
170
|
+
interface WorktreeConfig {
|
|
171
|
+
apps: AppConfig[];
|
|
172
|
+
postgres: { port: number; containerName: string };
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
- オプション2: worktree.config.json から型を動的に推論
|
|
176
|
+
- オプション3: 設定ファイルのパスを環境変数で指定可能にする
|
|
177
|
+
|
|
178
|
+
#### 問題2: loadWorktreeConfig() の依存
|
|
179
|
+
```typescript
|
|
180
|
+
import { loadWorktreeConfig } from "../../packages/config/src/worktree-config-loader.js";
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**修正案**:
|
|
184
|
+
- `loadWorktreeConfig()` の実装を `dev.ts` 内にインライン化
|
|
185
|
+
- または、設定ファイルが存在しない場合のデフォルト値を提供
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
### 🟡 中優先度: ドキュメント内のポート番号
|
|
190
|
+
|
|
191
|
+
#### 問題箇所
|
|
192
|
+
- `.claude/agents/einja/specs/spec-qa-generator.md`
|
|
193
|
+
- `docs/einja/steering/acceptance-criteria-and-qa-guide.md`
|
|
194
|
+
- `docs/einja/steering/development/testing-strategy.md`
|
|
195
|
+
|
|
196
|
+
**修正案**:
|
|
197
|
+
- 例示部分は `http://localhost:${PORT}` のように変数表記に変更
|
|
198
|
+
- または「例: localhost:3000(実際のポートは環境に応じて変更)」と注記を追加
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
### 🟡 中優先度: docs/einja/steering/README.md
|
|
203
|
+
|
|
204
|
+
#### 問題: 外部リンク
|
|
205
|
+
```
|
|
206
|
+
https://github.com/einja-inc/einja-management-template/blob/main/packages/cli/docs/MARKER_SPECIFICATION.md
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**修正案**:
|
|
210
|
+
- 相対パス参照に変更:
|
|
211
|
+
```
|
|
212
|
+
[CLIのマーカー仕様書](../../../packages/cli/docs/MARKER_SPECIFICATION.md)
|
|
213
|
+
```
|
|
214
|
+
- または汎用的なドキュメントリンクに変更
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 推奨アクション
|
|
219
|
+
|
|
220
|
+
### 優先度1: 環境依存値の変数化
|
|
221
|
+
1. **docs/einja/instructions/environment-setup.md**
|
|
222
|
+
- ポート番号を変数化(`${PORT:-3000}`)
|
|
223
|
+
- 環境変数設定ガイドを追記
|
|
224
|
+
|
|
225
|
+
### 優先度2: スクリプトの依存解消
|
|
226
|
+
2. **scripts/worktree/dev.ts**
|
|
227
|
+
- packages/config への依存を解消
|
|
228
|
+
- worktree.config.json のスキーマ定義をスクリプト内に含める
|
|
229
|
+
- 設定ファイル不在時のフォールバック処理を追加
|
|
230
|
+
|
|
231
|
+
### 優先度3: ドキュメントの汎用化
|
|
232
|
+
3. **ドキュメント全体**
|
|
233
|
+
- 例示のポート番号に「環境依存」の注記を追加
|
|
234
|
+
- 外部リンクを相対パス参照に変更
|
|
235
|
+
- テンプレート変換処理(CLAUDE.md.template → CLAUDE.md)の詳細調査
|
|
236
|
+
|
|
237
|
+
### 優先度4: 検証・ドキュメント化
|
|
238
|
+
4. **追加タスク**
|
|
239
|
+
- preset.yaml の変数置換ロジックの検証
|
|
240
|
+
- プリセットファイルのカスタマイズガイド作成
|
|
241
|
+
- einja init 時の変数入力プロンプトの設計
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 調査結果サマリー
|
|
246
|
+
|
|
247
|
+
### ✅ 問題なし(11ファイル)
|
|
248
|
+
- scripts/init.sh
|
|
249
|
+
- scripts/env.ts
|
|
250
|
+
- scripts/env-show.ts
|
|
251
|
+
- scripts/env-rotate-secrets.ts
|
|
252
|
+
- scripts/setup-dev.ts
|
|
253
|
+
- scripts/lib/env-common.ts
|
|
254
|
+
- .envrc
|
|
255
|
+
- .mcp.json
|
|
256
|
+
- CLAUDE.md.template
|
|
257
|
+
- preset.yaml
|
|
258
|
+
- .claude/settings.json
|
|
259
|
+
|
|
260
|
+
### ⚠️ 修正必要(5ファイル)
|
|
261
|
+
|
|
262
|
+
| ファイル | 問題 | 重要度 |
|
|
263
|
+
|---------|------|--------|
|
|
264
|
+
| scripts/worktree/dev.ts | packages/config への依存 | 🔴 高 |
|
|
265
|
+
| docs/einja/instructions/environment-setup.md | ポート番号ハードコード | 🔴 高 |
|
|
266
|
+
| docs/einja/steering/README.md | 外部リンク | 🟡 中 |
|
|
267
|
+
| .claude/agents/einja/specs/spec-qa-generator.md | ポート番号ハードコード | 🟡 中 |
|
|
268
|
+
| docs/einja/steering/acceptance-criteria-and-qa-guide.md | ポート番号ハードコード | 🟡 中 |
|
|
269
|
+
| docs/einja/steering/development/testing-strategy.md | ポート番号ハードコード | 🟡 中 |
|
|
270
|
+
|
|
271
|
+
### 🟢 例示のみ(修正推奨だが低優先度)
|
|
272
|
+
- docs/einja/example/specs/issues/issue999-example-task/qa-tests/README.md
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 次のステップ
|
|
277
|
+
|
|
278
|
+
1. **ユーザー確認**
|
|
279
|
+
- この調査結果をユーザーに報告
|
|
280
|
+
- 修正方針の承認を得る
|
|
281
|
+
|
|
282
|
+
2. **修正実施**
|
|
283
|
+
- 承認後、優先度順に修正タスクを実行
|
|
284
|
+
- コミット・プッシュ
|
|
285
|
+
|
|
286
|
+
3. **検証**
|
|
287
|
+
- einja init で新規プロジェクト作成テスト
|
|
288
|
+
- プリセット適用後の動作確認
|