@aramassa/ai-rules 0.4.0 → 0.4.3
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/artifact/instructions/rules/workspace-management/nodejs.md +358 -0
- package/artifact/instructions/{python/workspace-management.md → rules/workspace-management/python.md} +12 -12
- package/artifact/instructions/rules/workspace-management/typescript.md +337 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +270 -202
- package/package.json +1 -1
- package/presets/monorepo/nodejs.yaml +14 -0
- package/presets/monorepo/typescript.yaml +25 -0
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: package-management
|
|
3
|
+
category: workspace
|
|
4
|
+
language: nodejs
|
|
5
|
+
applyTo: "**/package.json"
|
|
6
|
+
human-instruction: |-
|
|
7
|
+
## npm Workspaces の特性
|
|
8
|
+
|
|
9
|
+
npm workspaces は npm 7.0+ で利用可能な、単一リポジトリ内で複数のパッケージを管理する仕組みです。
|
|
10
|
+
|
|
11
|
+
特に注意すべき点:
|
|
12
|
+
- npm 7.0 以降が必須
|
|
13
|
+
- ワークスペース間の依存関係は自動的にシンボリックリンクされる
|
|
14
|
+
- `--workspace` フラグで特定のパッケージに対してコマンドを実行可能
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Node.js (npm) Workspace Management Rules
|
|
18
|
+
|
|
19
|
+
## 目次
|
|
20
|
+
|
|
21
|
+
- [Overview](#overview)
|
|
22
|
+
- [Workspace Configuration](#workspace-configuration)
|
|
23
|
+
- [Package Structure Rules](#package-structure-rules)
|
|
24
|
+
- [Package Management Commands](#package-management-commands)
|
|
25
|
+
- [Build and Development Workflow](#build-and-development-workflow)
|
|
26
|
+
- [Local CLI Execution](#local-cli-execution)
|
|
27
|
+
- [Package Distribution Check(必須)](#package-distribution-check必須)
|
|
28
|
+
- [Common Issues](#common-issues)
|
|
29
|
+
- [Best Practices](#best-practices)
|
|
30
|
+
- [Example Project Structure](#example-project-structure)
|
|
31
|
+
|
|
32
|
+
## Overview
|
|
33
|
+
|
|
34
|
+
このルールでは **npm のみ** を使用します(yarn/pnpm は使用禁止)。
|
|
35
|
+
|
|
36
|
+
npm workspaces(npm 7.0+)で単一リポジトリ内の複数パッケージを管理します。
|
|
37
|
+
|
|
38
|
+
## Workspace Configuration
|
|
39
|
+
|
|
40
|
+
ルートの `package.json`:
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"name": "my-monorepo",
|
|
45
|
+
"private": true,
|
|
46
|
+
"workspaces": ["packages/*"]
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Package Structure Rules
|
|
51
|
+
|
|
52
|
+
### 必須パッケージ
|
|
53
|
+
|
|
54
|
+
| パッケージ名 | 説明 | 依存関係ルール |
|
|
55
|
+
|:-----------|:-----|:-------------|
|
|
56
|
+
| `core` | プロジェクトの主機能 | `common` に依存可能 |
|
|
57
|
+
| `common` | 共有機能 | 他パッケージに依存不可 |
|
|
58
|
+
|
|
59
|
+
### オプションパッケージ
|
|
60
|
+
|
|
61
|
+
- `cli` - CLI(`core` に依存)
|
|
62
|
+
- `types` - 型定義(依存なし)
|
|
63
|
+
- `utils` - ユーティリティ(`common` に依存可能)
|
|
64
|
+
|
|
65
|
+
### 依存関係のルール
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
common (依存なし)
|
|
69
|
+
↑
|
|
70
|
+
core (common に依存可能)
|
|
71
|
+
↑
|
|
72
|
+
cli, その他 (core, common に依存可能)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**禁止**: `core` が `cli` などに依存、`common` が他の内部パッケージに依存
|
|
76
|
+
|
|
77
|
+
### テストのルール
|
|
78
|
+
|
|
79
|
+
**重要**: 各パッケージのテストは、そのパッケージ内で完結する必要があります。
|
|
80
|
+
|
|
81
|
+
- ✅ **許可される**: 自パッケージ内のコードのみをテスト
|
|
82
|
+
- ✅ **許可される**: 依存しているパッケージ(`common`、`core`)の公開APIを使用
|
|
83
|
+
- ❌ **禁止**: 他パッケージの内部実装に依存したテスト
|
|
84
|
+
- ❌ **禁止**: テストのために他パッケージのテストヘルパーをインポート
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# 各パッケージで独立してテスト実行可能
|
|
88
|
+
cd packages/common && npm test # common のテストのみ
|
|
89
|
+
cd packages/core && npm test # core のテストのみ
|
|
90
|
+
cd packages/cli && npm test # cli のテストのみ
|
|
91
|
+
|
|
92
|
+
# 全体テストも実行可能
|
|
93
|
+
npm test --workspaces
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**ベストプラクティス**:
|
|
97
|
+
- テストヘルパーやモックが必要な場合は、各パッケージ内に配置
|
|
98
|
+
- 共通のテストユーティリティが必要な場合は、`common` または専用の `test-utils` パッケージを作成
|
|
99
|
+
|
|
100
|
+
## Package Management Commands
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# インストール
|
|
104
|
+
npm install
|
|
105
|
+
|
|
106
|
+
# パッケージ追加
|
|
107
|
+
npm install <package> --workspace=packages/core
|
|
108
|
+
npm install <package> --workspaces # 全ワークスペース
|
|
109
|
+
|
|
110
|
+
# ワークスペース間依存
|
|
111
|
+
cd packages/core
|
|
112
|
+
npm install @scope/common
|
|
113
|
+
# → node_modules/@scope/common は packages/common へのシンボリックリンク
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Build and Development Workflow
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# ビルド(依存順に手動実行推奨)
|
|
120
|
+
cd packages/common && npm run build
|
|
121
|
+
cd ../core && npm run build
|
|
122
|
+
cd ../cli && npm run build
|
|
123
|
+
|
|
124
|
+
# または全体ビルド
|
|
125
|
+
npm run build --workspaces
|
|
126
|
+
|
|
127
|
+
# 開発時 watch
|
|
128
|
+
npm run dev --workspaces
|
|
129
|
+
npm run dev --workspace=packages/core
|
|
130
|
+
|
|
131
|
+
# テスト
|
|
132
|
+
npm test --workspaces
|
|
133
|
+
npm test --workspace=packages/core
|
|
134
|
+
npm test --workspaces --if-present # スクリプトがない場合スキップ
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Local CLI Execution
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# 1. ビルド実行(必須)
|
|
141
|
+
npm run build --workspaces
|
|
142
|
+
|
|
143
|
+
# 2. CLI 実行
|
|
144
|
+
node packages/cli/dist/index.js
|
|
145
|
+
npx @scope/cli # bin フィールドがある場合
|
|
146
|
+
|
|
147
|
+
# 開発時リンク
|
|
148
|
+
npm link --workspace=packages/cli
|
|
149
|
+
my-cli --version
|
|
150
|
+
npm unlink --workspace=packages/cli -g # 解除
|
|
151
|
+
|
|
152
|
+
# TypeScript 直接実行(開発時)
|
|
153
|
+
npx tsx packages/cli/src/index.ts
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Package Distribution Check(必須)
|
|
157
|
+
|
|
158
|
+
### コミット前・リリース前の確認
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
cd packages/core
|
|
162
|
+
npm pack --dry-run
|
|
163
|
+
|
|
164
|
+
# 出力例:
|
|
165
|
+
# npm notice 📦 @scope/core@1.0.0
|
|
166
|
+
# npm notice === Tarball Contents ===
|
|
167
|
+
# npm notice 1.2kB dist/index.js
|
|
168
|
+
# npm notice 256B package.json
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 除外設定
|
|
172
|
+
|
|
173
|
+
`package.json` の `files` フィールド(推奨):
|
|
174
|
+
|
|
175
|
+
```json
|
|
176
|
+
{
|
|
177
|
+
"files": ["dist", "README.md", "LICENSE"]
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
または `.npmignore`:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
src/
|
|
185
|
+
*.test.ts
|
|
186
|
+
*.spec.ts
|
|
187
|
+
tsconfig.json
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 確認タイミング
|
|
191
|
+
|
|
192
|
+
- ✅ 新機能追加時
|
|
193
|
+
- ✅ リファクタリング後
|
|
194
|
+
- ✅ コミット前(必須)
|
|
195
|
+
- ✅ リリース前(必須)
|
|
196
|
+
|
|
197
|
+
## Common Issues
|
|
198
|
+
|
|
199
|
+
### 型定義が認識されない
|
|
200
|
+
|
|
201
|
+
```json
|
|
202
|
+
// packages/core/tsconfig.json
|
|
203
|
+
{
|
|
204
|
+
"references": [{ "path": "../common" }]
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
npx tsc --build
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### ローカル変更が反映されない
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
npm run build --workspaces
|
|
216
|
+
# または watch モード
|
|
217
|
+
npm run dev --workspaces
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 循環依存エラー
|
|
221
|
+
|
|
222
|
+
```
|
|
223
|
+
ERROR: Circular dependency detected:
|
|
224
|
+
@scope/core -> @scope/cli -> @scope/core
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
解決策:
|
|
228
|
+
1. 依存関係ルールを確認
|
|
229
|
+
2. 共通機能を `common` に移動
|
|
230
|
+
|
|
231
|
+
### npm install が遅い
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
rm -rf node_modules packages/*/node_modules
|
|
235
|
+
npm install
|
|
236
|
+
# または CI 環境で
|
|
237
|
+
npm ci
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Best Practices
|
|
241
|
+
|
|
242
|
+
1. **ビルド前提**: CLI/スクリプト実行前に必ずビルド
|
|
243
|
+
2. **依存管理**: `core` → `common` の一方向を守る
|
|
244
|
+
3. **配布物確認**: `npm pack --dry-run` を徹底
|
|
245
|
+
4. **private 設定**: ルートの package.json に `"private": true"`
|
|
246
|
+
5. **TypeScript**: プロジェクト参照で型定義を共有
|
|
247
|
+
|
|
248
|
+
## Example Project Structure
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
my-monorepo/
|
|
252
|
+
├── package.json # workspaces 定義、private: true
|
|
253
|
+
├── package-lock.json
|
|
254
|
+
├── node_modules/
|
|
255
|
+
├── packages/
|
|
256
|
+
│ ├── common/
|
|
257
|
+
│ │ ├── package.json # @scope/common
|
|
258
|
+
│ │ ├── src/
|
|
259
|
+
│ │ └── dist/
|
|
260
|
+
│ ├── core/
|
|
261
|
+
│ │ ├── package.json # @scope/core
|
|
262
|
+
│ │ ├── src/
|
|
263
|
+
│ │ └── dist/
|
|
264
|
+
│ └── cli/
|
|
265
|
+
│ ├── package.json # @scope/cli
|
|
266
|
+
│ ├── src/
|
|
267
|
+
│ └── dist/
|
|
268
|
+
└── tsconfig.json
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### 除外確認のタイミング
|
|
272
|
+
|
|
273
|
+
- ✅ 新機能追加時
|
|
274
|
+
- ✅ リファクタリング後
|
|
275
|
+
- ✅ コミット前(必須)
|
|
276
|
+
- ✅ リリース前(必須)
|
|
277
|
+
|
|
278
|
+
## Common Issues and Solutions
|
|
279
|
+
|
|
280
|
+
### Issue: ワークスペース間の型定義が認識されない
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
# 解決方法: TypeScript のプロジェクト参照を設定
|
|
284
|
+
# packages/core/tsconfig.json
|
|
285
|
+
{
|
|
286
|
+
"references": [
|
|
287
|
+
{ "path": "../common" }
|
|
288
|
+
]
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
# ビルド時に --build フラグを使用
|
|
292
|
+
npx tsc --build
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Issue: ローカルパッケージの変更が反映されない
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
# 解決方法: ビルドを再実行
|
|
299
|
+
npm run build --workspaces
|
|
300
|
+
|
|
301
|
+
# または watch モードで開発
|
|
302
|
+
npm run dev --workspaces
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Issue: パッケージの循環依存
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
ERROR: Circular dependency detected:
|
|
309
|
+
@scope/core -> @scope/cli -> @scope/core
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
解決方法:
|
|
313
|
+
1. 依存関係ルールを確認(`core` は `cli` に依存してはいけない)
|
|
314
|
+
2. 共通機能を `common` に移動
|
|
315
|
+
3. アーキテクチャを見直し
|
|
316
|
+
|
|
317
|
+
### Issue: npm install が遅い
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
# node_modules をクリーンアップ
|
|
321
|
+
rm -rf node_modules packages/*/node_modules
|
|
322
|
+
npm install
|
|
323
|
+
|
|
324
|
+
# または npm ci を使用(CI環境推奨)
|
|
325
|
+
npm ci
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
## Best Practices
|
|
329
|
+
|
|
330
|
+
1. **ビルド前提の実行**: CLI やスクリプトを実行する前に必ずビルドを実行
|
|
331
|
+
2. **厳格な依存関係管理**: `core` → `common` の一方向依存を守る
|
|
332
|
+
3. **型定義の共有**: TypeScript プロジェクト参照を活用
|
|
333
|
+
4. **配布物の確認**: `npm pack --dry-run` でリリース前確認を徹底
|
|
334
|
+
5. **private フラグ**: ルートの package.json には `"private": true` を設定
|
|
335
|
+
6. **バージョン管理**: 各パッケージのバージョンを適切に管理
|
|
336
|
+
|
|
337
|
+
## Example Project Structure
|
|
338
|
+
|
|
339
|
+
```
|
|
340
|
+
my-monorepo/
|
|
341
|
+
├── package.json # ルート設定(workspaces 定義、private: true)
|
|
342
|
+
├── package-lock.json # ロックファイル
|
|
343
|
+
├── node_modules/ # すべてのパッケージの依存関係
|
|
344
|
+
├── packages/
|
|
345
|
+
│ ├── common/
|
|
346
|
+
│ │ ├── package.json # @scope/common
|
|
347
|
+
│ │ ├── src/
|
|
348
|
+
│ │ └── dist/ # ビルド成果物
|
|
349
|
+
│ ├── core/
|
|
350
|
+
│ │ ├── package.json # @scope/core(common に依存)
|
|
351
|
+
│ │ ├── src/
|
|
352
|
+
│ │ └── dist/
|
|
353
|
+
│ └── cli/
|
|
354
|
+
│ ├── package.json # @scope/cli(core, common に依存)
|
|
355
|
+
│ ├── src/
|
|
356
|
+
│ └── dist/
|
|
357
|
+
└── tsconfig.json # ルート TypeScript 設定
|
|
358
|
+
```
|
|
@@ -184,7 +184,7 @@ if ! command -v uv &> /dev/null; then
|
|
|
184
184
|
echo "📦 Installing uv..."
|
|
185
185
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
186
186
|
source $HOME/.cargo/env
|
|
187
|
-
|
|
187
|
+
|
|
188
188
|
# Verify installation
|
|
189
189
|
if ! command -v uv &> /dev/null; then
|
|
190
190
|
echo "❌ Failed to install uv. Please install manually."
|
|
@@ -547,21 +547,21 @@ jobs:
|
|
|
547
547
|
|
|
548
548
|
steps:
|
|
549
549
|
- uses: actions/checkout@v4
|
|
550
|
-
|
|
550
|
+
|
|
551
551
|
- name: Install uv
|
|
552
552
|
uses: astral-sh/setup-uv@v1
|
|
553
553
|
with:
|
|
554
554
|
version: "latest"
|
|
555
|
-
|
|
555
|
+
|
|
556
556
|
- name: Set up Python ${{ matrix.python-version }}
|
|
557
557
|
run: uv python install ${{ matrix.python-version }}
|
|
558
|
-
|
|
558
|
+
|
|
559
559
|
- name: Install dependencies
|
|
560
560
|
run: uv sync --dev
|
|
561
|
-
|
|
561
|
+
|
|
562
562
|
- name: Run quality checks
|
|
563
563
|
run: ./scripts/check-quality.sh
|
|
564
|
-
|
|
564
|
+
|
|
565
565
|
- name: Upload coverage reports
|
|
566
566
|
uses: codecov/codecov-action@v3
|
|
567
567
|
if: matrix.python-version == '3.11'
|
|
@@ -575,16 +575,16 @@ jobs:
|
|
|
575
575
|
```bash
|
|
576
576
|
# 1. 開発環境更新
|
|
577
577
|
uv sync --dev
|
|
578
|
-
|
|
578
|
+
|
|
579
579
|
# 2. 品質チェック
|
|
580
580
|
./scripts/check-quality.sh
|
|
581
|
-
|
|
581
|
+
|
|
582
582
|
# 3. 実装
|
|
583
583
|
# ... コード変更 ...
|
|
584
|
-
|
|
584
|
+
|
|
585
585
|
# 4. テスト実行
|
|
586
586
|
uv run pytest packages/target-package/tests/
|
|
587
|
-
|
|
587
|
+
|
|
588
588
|
# 5. 最終品質チェック
|
|
589
589
|
./scripts/check-quality.sh
|
|
590
590
|
```
|
|
@@ -649,7 +649,7 @@ uv run mypy packages/target-package/ --show-error-codes
|
|
|
649
649
|
```bash
|
|
650
650
|
# poetry.lock から requirements.txt 生成
|
|
651
651
|
poetry export --output requirements.txt
|
|
652
|
-
|
|
652
|
+
|
|
653
653
|
# UV での依存関係インストール
|
|
654
654
|
uv add $(cat requirements.txt | cut -d'=' -f1)
|
|
655
655
|
```
|
|
@@ -670,4 +670,4 @@ uv run mypy packages/target-package/ --show-error-codes
|
|
|
670
670
|
- [ ] 品質チェックがパス
|
|
671
671
|
- [ ] CI/CD パイプラインが動作
|
|
672
672
|
|
|
673
|
-
このガイドラインに従うことで、保守性が高く、開発効率の良い Python プロジェクトを UV workspace で管理できます。
|
|
673
|
+
このガイドラインに従うことで、保守性が高く、開発効率の良い Python プロジェクトを UV workspace で管理できます。
|