claude-nagger 1.0.1__tar.gz
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.
- claude_nagger-1.0.1/LICENSE +21 -0
- claude_nagger-1.0.1/PKG-INFO +328 -0
- claude_nagger-1.0.1/README.md +294 -0
- claude_nagger-1.0.1/pyproject.toml +65 -0
- claude_nagger-1.0.1/setup.cfg +4 -0
- claude_nagger-1.0.1/src/application/__init__.py +6 -0
- claude_nagger-1.0.1/src/application/cli.py +55 -0
- claude_nagger-1.0.1/src/application/install_hooks.py +349 -0
- claude_nagger-1.0.1/src/claude_nagger.egg-info/PKG-INFO +328 -0
- claude_nagger-1.0.1/src/claude_nagger.egg-info/SOURCES.txt +50 -0
- claude_nagger-1.0.1/src/claude_nagger.egg-info/dependency_links.txt +1 -0
- claude_nagger-1.0.1/src/claude_nagger.egg-info/entry_points.txt +2 -0
- claude_nagger-1.0.1/src/claude_nagger.egg-info/requires.txt +12 -0
- claude_nagger-1.0.1/src/claude_nagger.egg-info/top_level.txt +4 -0
- claude_nagger-1.0.1/src/domain/__init__.py +1 -0
- claude_nagger-1.0.1/src/domain/entities/__init__.py +3 -0
- claude_nagger-1.0.1/src/domain/hooks/__init__.py +12 -0
- claude_nagger-1.0.1/src/domain/hooks/base_hook.py +530 -0
- claude_nagger-1.0.1/src/domain/hooks/implementation_design_hook.py +494 -0
- claude_nagger-1.0.1/src/domain/hooks/session_startup_hook.py +297 -0
- claude_nagger-1.0.1/src/domain/services/__init__.py +13 -0
- claude_nagger-1.0.1/src/domain/services/base_convention_matcher.py +22 -0
- claude_nagger-1.0.1/src/domain/services/command_convention_matcher.py +218 -0
- claude_nagger-1.0.1/src/domain/services/file_convention_matcher.py +215 -0
- claude_nagger-1.0.1/src/domain/services/hook_manager.py +319 -0
- claude_nagger-1.0.1/src/infrastructure/__init__.py +1 -0
- claude_nagger-1.0.1/src/infrastructure/config/__init__.py +5 -0
- claude_nagger-1.0.1/src/infrastructure/config/config_manager.py +376 -0
- claude_nagger-1.0.1/src/infrastructure/hooks/__init__.py +5 -0
- claude_nagger-1.0.1/src/infrastructure/hooks/hook_executor.py +256 -0
- claude_nagger-1.0.1/src/infrastructure/notifiers/__init__.py +5 -0
- claude_nagger-1.0.1/src/infrastructure/notifiers/discord_notifier.py +234 -0
- claude_nagger-1.0.1/src/shared/__init__.py +1 -0
- claude_nagger-1.0.1/src/shared/base/__init__.py +5 -0
- claude_nagger-1.0.1/src/shared/base/base_cli.py +64 -0
- claude_nagger-1.0.1/src/shared/utils/__init__.py +5 -0
- claude_nagger-1.0.1/src/shared/utils/session_manager.py +217 -0
- claude_nagger-1.0.1/tests/test_base_cli.py +170 -0
- claude_nagger-1.0.1/tests/test_base_hook.py +545 -0
- claude_nagger-1.0.1/tests/test_cli.py +148 -0
- claude_nagger-1.0.1/tests/test_command_convention_matcher.py +444 -0
- claude_nagger-1.0.1/tests/test_config_manager.py +1079 -0
- claude_nagger-1.0.1/tests/test_discord_notifier.py +316 -0
- claude_nagger-1.0.1/tests/test_file_convention_matcher.py +158 -0
- claude_nagger-1.0.1/tests/test_hook_executor.py +465 -0
- claude_nagger-1.0.1/tests/test_hook_manager.py +428 -0
- claude_nagger-1.0.1/tests/test_hook_schema_validation.py +588 -0
- claude_nagger-1.0.1/tests/test_implementation_design_hook.py +650 -0
- claude_nagger-1.0.1/tests/test_install_hooks.py +624 -0
- claude_nagger-1.0.1/tests/test_sanitizer.py +146 -0
- claude_nagger-1.0.1/tests/test_session_manager.py +331 -0
- claude_nagger-1.0.1/tests/test_session_startup_hook.py +425 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 HollySizzle
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: claude-nagger
|
|
3
|
+
Version: 1.0.1
|
|
4
|
+
Summary: Claude Code統合ツールシステム - フック・規約管理CLI
|
|
5
|
+
Author: HollySizzle
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/HollySizzle/claude-nagger
|
|
8
|
+
Project-URL: Repository, https://github.com/HollySizzle/claude-nagger
|
|
9
|
+
Keywords: claude,claude-code,hooks,conventions
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
License-File: LICENSE
|
|
22
|
+
Requires-Dist: questionary>=2.0.0
|
|
23
|
+
Requires-Dist: pytz>=2023.3
|
|
24
|
+
Requires-Dist: json5>=0.9.14
|
|
25
|
+
Requires-Dist: pyyaml>=6.0
|
|
26
|
+
Requires-Dist: typing-extensions>=4.8.0
|
|
27
|
+
Requires-Dist: rich>=13.0.0
|
|
28
|
+
Requires-Dist: aiohttp>=3.8.0
|
|
29
|
+
Requires-Dist: wcmatch>=10.0
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
32
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
33
|
+
Dynamic: license-file
|
|
34
|
+
|
|
35
|
+
# claude-nagger
|
|
36
|
+
|
|
37
|
+
[](https://www.python.org/downloads/)
|
|
38
|
+
[](https://opensource.org/licenses/MIT)
|
|
39
|
+
[](https://pypi.org/project/claude-nagger/)
|
|
40
|
+
|
|
41
|
+
Claude Codeに「必要な時だけ」規約を読ませるフックツール
|
|
42
|
+
|
|
43
|
+
## 解決する問題
|
|
44
|
+
|
|
45
|
+
Claude Codeで中〜大規模プロジェクトを扱う際、以下の問題が発生します:
|
|
46
|
+
|
|
47
|
+
| 問題 | 説明 |
|
|
48
|
+
|------|------|
|
|
49
|
+
| **コンテキスト肥大化** | 全規約をCLAUDE.mdに書くとトークン消費が膨大 |
|
|
50
|
+
| **規約の忘却** | コンテキスト圧縮(compacting)により規約が「忘れられる」 |
|
|
51
|
+
| **無関係な情報** | モデル編集時にCSS規約は不要、逆も然り |
|
|
52
|
+
|
|
53
|
+
## 解決策
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
EditツールでCSS編集 → CSS規約のみ注入
|
|
57
|
+
Editツールでモデル編集 → モデル規約のみ注入
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
CLAUDE.mdでは実現できない「PreToolUseフックによる条件付き規約注入」を提供します。
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## クイックスタート
|
|
65
|
+
|
|
66
|
+
### 1. インストール
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# uvx(推奨・インストール不要で実行)
|
|
70
|
+
uvx claude-nagger install-hooks
|
|
71
|
+
|
|
72
|
+
# または pip
|
|
73
|
+
pip install claude-nagger
|
|
74
|
+
claude-nagger install-hooks
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 2. 動作確認
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# dry-runで生成内容を確認
|
|
81
|
+
claude-nagger install-hooks --dry-run
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 3. 設定カスタマイズ
|
|
85
|
+
|
|
86
|
+
生成された `.claude-nagger/` 内のYAMLファイルを編集して、プロジェクト固有の規約を設定します。
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 生成されるファイル構造
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
your-project/
|
|
94
|
+
├── .claude-nagger/
|
|
95
|
+
│ ├── config.yaml # メイン設定(セッション管理等)
|
|
96
|
+
│ ├── file_conventions.yaml # ファイル編集時の規約
|
|
97
|
+
│ └── command_conventions.yaml # コマンド実行時の規約
|
|
98
|
+
└── .claude/
|
|
99
|
+
└── settings.json # ← claude-naggerが自動設定
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 設定ファイル詳細
|
|
105
|
+
|
|
106
|
+
### config.yaml(メイン設定)
|
|
107
|
+
|
|
108
|
+
セッション開始時のメッセージやコンテキスト管理を設定します。
|
|
109
|
+
|
|
110
|
+
```yaml
|
|
111
|
+
# セッション開始時設定
|
|
112
|
+
session_startup:
|
|
113
|
+
enabled: true
|
|
114
|
+
messages:
|
|
115
|
+
first_time:
|
|
116
|
+
title: "プロジェクトセットアップ"
|
|
117
|
+
main_text: |
|
|
118
|
+
プロジェクトの規約を確認してください
|
|
119
|
+
severity: "block" # block: 確認必須, warn: 警告のみ
|
|
120
|
+
|
|
121
|
+
# コンテキスト管理設定(トークン数に応じたリマインダー)
|
|
122
|
+
context_management:
|
|
123
|
+
reminder_thresholds:
|
|
124
|
+
light_warning: 30000 # 軽い警告
|
|
125
|
+
medium_warning: 60000 # 中程度の警告
|
|
126
|
+
critical_warning: 100000 # 重要な警告
|
|
127
|
+
|
|
128
|
+
# デバッグ設定
|
|
129
|
+
debug:
|
|
130
|
+
enable_logging: false
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### file_conventions.yaml(ファイル編集規約)
|
|
134
|
+
|
|
135
|
+
特定のファイルパターンに対して適用される規約を定義します。
|
|
136
|
+
|
|
137
|
+
```yaml
|
|
138
|
+
rules:
|
|
139
|
+
# CSS編集時の規約
|
|
140
|
+
- name: "CSS編集規約"
|
|
141
|
+
patterns:
|
|
142
|
+
- "**/*.css"
|
|
143
|
+
- "**/*.scss"
|
|
144
|
+
severity: "warn"
|
|
145
|
+
token_threshold: 30000
|
|
146
|
+
message: |
|
|
147
|
+
## CSS規約
|
|
148
|
+
- BEM命名規則を使用
|
|
149
|
+
- !important は禁止
|
|
150
|
+
- ネストは3階層まで
|
|
151
|
+
|
|
152
|
+
# モデル編集時の規約
|
|
153
|
+
- name: "モデル編集規約"
|
|
154
|
+
patterns:
|
|
155
|
+
- "**/models/**/*.py"
|
|
156
|
+
- "**/entities/**/*.py"
|
|
157
|
+
severity: "block"
|
|
158
|
+
token_threshold: 35000
|
|
159
|
+
message: |
|
|
160
|
+
## モデル規約
|
|
161
|
+
- フィールド名はsnake_case
|
|
162
|
+
- 必ずdocstringを記載
|
|
163
|
+
- バリデーションを実装
|
|
164
|
+
|
|
165
|
+
# View層編集時の規約
|
|
166
|
+
- name: "View層編集規約"
|
|
167
|
+
patterns:
|
|
168
|
+
- "**/views/**/*.erb"
|
|
169
|
+
- "**/templates/**/*.html"
|
|
170
|
+
severity: "warn"
|
|
171
|
+
message: |
|
|
172
|
+
## View規約
|
|
173
|
+
- XSS対策を徹底
|
|
174
|
+
- ロジックはヘルパーに委譲
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### command_conventions.yaml(コマンド実行規約)
|
|
178
|
+
|
|
179
|
+
危険なコマンドや確認が必要なコマンドに対して適用される規約を定義します。
|
|
180
|
+
|
|
181
|
+
```yaml
|
|
182
|
+
rules:
|
|
183
|
+
# Git操作規約
|
|
184
|
+
- name: "Git操作規約"
|
|
185
|
+
patterns:
|
|
186
|
+
- "git push*"
|
|
187
|
+
- "git commit*"
|
|
188
|
+
severity: "warn"
|
|
189
|
+
token_threshold: 25000
|
|
190
|
+
message: |
|
|
191
|
+
## Git規約
|
|
192
|
+
- コミットメッセージは日本語で記載
|
|
193
|
+
- プッシュ前にテストを実行
|
|
194
|
+
|
|
195
|
+
# 本番環境操作規約
|
|
196
|
+
- name: "本番環境操作規約"
|
|
197
|
+
patterns:
|
|
198
|
+
- "*production*"
|
|
199
|
+
- "*deploy*"
|
|
200
|
+
severity: "block"
|
|
201
|
+
message: |
|
|
202
|
+
## 本番環境操作
|
|
203
|
+
- 必ず承認を得てから実行
|
|
204
|
+
- バックアップを確認
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## ユースケース例
|
|
210
|
+
|
|
211
|
+
### Rails プロジェクト
|
|
212
|
+
|
|
213
|
+
```yaml
|
|
214
|
+
# file_conventions.yaml
|
|
215
|
+
rules:
|
|
216
|
+
- name: "コントローラ規約"
|
|
217
|
+
patterns: ["**/controllers/**/*.rb"]
|
|
218
|
+
message: |
|
|
219
|
+
- before_actionでの認証確認
|
|
220
|
+
- Strong Parametersの使用必須
|
|
221
|
+
|
|
222
|
+
- name: "マイグレーション規約"
|
|
223
|
+
patterns: ["**/migrate/*.rb"]
|
|
224
|
+
severity: "block"
|
|
225
|
+
message: |
|
|
226
|
+
- 必ずロールバック可能にする
|
|
227
|
+
- 大量データ更新時はバッチ処理
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### React プロジェクト
|
|
231
|
+
|
|
232
|
+
```yaml
|
|
233
|
+
# file_conventions.yaml
|
|
234
|
+
rules:
|
|
235
|
+
- name: "コンポーネント規約"
|
|
236
|
+
patterns: ["**/components/**/*.tsx"]
|
|
237
|
+
message: |
|
|
238
|
+
- Propsの型定義必須
|
|
239
|
+
- useCallbackでメモ化検討
|
|
240
|
+
|
|
241
|
+
- name: "フック規約"
|
|
242
|
+
patterns: ["**/hooks/**/*.ts"]
|
|
243
|
+
message: |
|
|
244
|
+
- カスタムフックは use* で命名
|
|
245
|
+
- 依存配列を正確に記述
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Python プロジェクト
|
|
249
|
+
|
|
250
|
+
```yaml
|
|
251
|
+
# file_conventions.yaml
|
|
252
|
+
rules:
|
|
253
|
+
- name: "API規約"
|
|
254
|
+
patterns: ["**/api/**/*.py", "**/routes/**/*.py"]
|
|
255
|
+
message: |
|
|
256
|
+
- 入力バリデーション必須
|
|
257
|
+
- エラーハンドリングを実装
|
|
258
|
+
|
|
259
|
+
- name: "テスト規約"
|
|
260
|
+
patterns: ["**/tests/**/*.py"]
|
|
261
|
+
message: |
|
|
262
|
+
- Arrange-Act-Assertパターン
|
|
263
|
+
- モックは最小限に
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## 動作原理
|
|
269
|
+
|
|
270
|
+
```
|
|
271
|
+
┌─────────────────────────────────────────────────────────┐
|
|
272
|
+
│ Claude Code │
|
|
273
|
+
│ │
|
|
274
|
+
│ ユーザー: "このCSSを修正して" │
|
|
275
|
+
│ ↓ │
|
|
276
|
+
│ Claude: Edit ツール呼び出し (*.css) │
|
|
277
|
+
│ ↓ │
|
|
278
|
+
│ ┌─────────────────────────────────────┐ │
|
|
279
|
+
│ │ PreToolUse Hook (claude-nagger) │ │
|
|
280
|
+
│ │ │ │
|
|
281
|
+
│ │ 1. パターン照合: "**/*.css" ✓ │ │
|
|
282
|
+
│ │ 2. 対応する規約を読み込み │ │
|
|
283
|
+
│ │ 3. 規約をコンテキストに注入 │ │
|
|
284
|
+
│ └─────────────────────────────────────┘ │
|
|
285
|
+
│ ↓ │
|
|
286
|
+
│ Claude: 規約を参照しながらCSS編集 │
|
|
287
|
+
└─────────────────────────────────────────────────────────┘
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## コマンド一覧
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
# フックのインストール(.claude/settings.jsonに設定追加)
|
|
296
|
+
claude-nagger install-hooks
|
|
297
|
+
|
|
298
|
+
# dry-run(実際には変更しない)
|
|
299
|
+
claude-nagger install-hooks --dry-run
|
|
300
|
+
|
|
301
|
+
# 強制上書き(既存ファイルも再生成)
|
|
302
|
+
claude-nagger install-hooks --force
|
|
303
|
+
|
|
304
|
+
# バージョン表示
|
|
305
|
+
claude-nagger --version
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## なぜCLAUDE.mdだけでは不十分か
|
|
311
|
+
|
|
312
|
+
| アプローチ | コンテキスト消費 | 規約遵守率 | 柔軟性 |
|
|
313
|
+
|-----------|-----------------|-----------|--------|
|
|
314
|
+
| 全規約をCLAUDE.mdに記載 | 高 (常時) | 低 (忘却) | 低 |
|
|
315
|
+
| claude-nagger | 低 (必要時のみ) | 高 | 高 |
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## 要件
|
|
320
|
+
|
|
321
|
+
- Python 3.10以上
|
|
322
|
+
- Claude Code CLI
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## ライセンス
|
|
327
|
+
|
|
328
|
+
MIT License - 詳細は [LICENSE](LICENSE) を参照
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# claude-nagger
|
|
2
|
+
|
|
3
|
+
[](https://www.python.org/downloads/)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://pypi.org/project/claude-nagger/)
|
|
6
|
+
|
|
7
|
+
Claude Codeに「必要な時だけ」規約を読ませるフックツール
|
|
8
|
+
|
|
9
|
+
## 解決する問題
|
|
10
|
+
|
|
11
|
+
Claude Codeで中〜大規模プロジェクトを扱う際、以下の問題が発生します:
|
|
12
|
+
|
|
13
|
+
| 問題 | 説明 |
|
|
14
|
+
|------|------|
|
|
15
|
+
| **コンテキスト肥大化** | 全規約をCLAUDE.mdに書くとトークン消費が膨大 |
|
|
16
|
+
| **規約の忘却** | コンテキスト圧縮(compacting)により規約が「忘れられる」 |
|
|
17
|
+
| **無関係な情報** | モデル編集時にCSS規約は不要、逆も然り |
|
|
18
|
+
|
|
19
|
+
## 解決策
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
EditツールでCSS編集 → CSS規約のみ注入
|
|
23
|
+
Editツールでモデル編集 → モデル規約のみ注入
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
CLAUDE.mdでは実現できない「PreToolUseフックによる条件付き規約注入」を提供します。
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## クイックスタート
|
|
31
|
+
|
|
32
|
+
### 1. インストール
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# uvx(推奨・インストール不要で実行)
|
|
36
|
+
uvx claude-nagger install-hooks
|
|
37
|
+
|
|
38
|
+
# または pip
|
|
39
|
+
pip install claude-nagger
|
|
40
|
+
claude-nagger install-hooks
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 2. 動作確認
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# dry-runで生成内容を確認
|
|
47
|
+
claude-nagger install-hooks --dry-run
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 3. 設定カスタマイズ
|
|
51
|
+
|
|
52
|
+
生成された `.claude-nagger/` 内のYAMLファイルを編集して、プロジェクト固有の規約を設定します。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 生成されるファイル構造
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
your-project/
|
|
60
|
+
├── .claude-nagger/
|
|
61
|
+
│ ├── config.yaml # メイン設定(セッション管理等)
|
|
62
|
+
│ ├── file_conventions.yaml # ファイル編集時の規約
|
|
63
|
+
│ └── command_conventions.yaml # コマンド実行時の規約
|
|
64
|
+
└── .claude/
|
|
65
|
+
└── settings.json # ← claude-naggerが自動設定
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 設定ファイル詳細
|
|
71
|
+
|
|
72
|
+
### config.yaml(メイン設定)
|
|
73
|
+
|
|
74
|
+
セッション開始時のメッセージやコンテキスト管理を設定します。
|
|
75
|
+
|
|
76
|
+
```yaml
|
|
77
|
+
# セッション開始時設定
|
|
78
|
+
session_startup:
|
|
79
|
+
enabled: true
|
|
80
|
+
messages:
|
|
81
|
+
first_time:
|
|
82
|
+
title: "プロジェクトセットアップ"
|
|
83
|
+
main_text: |
|
|
84
|
+
プロジェクトの規約を確認してください
|
|
85
|
+
severity: "block" # block: 確認必須, warn: 警告のみ
|
|
86
|
+
|
|
87
|
+
# コンテキスト管理設定(トークン数に応じたリマインダー)
|
|
88
|
+
context_management:
|
|
89
|
+
reminder_thresholds:
|
|
90
|
+
light_warning: 30000 # 軽い警告
|
|
91
|
+
medium_warning: 60000 # 中程度の警告
|
|
92
|
+
critical_warning: 100000 # 重要な警告
|
|
93
|
+
|
|
94
|
+
# デバッグ設定
|
|
95
|
+
debug:
|
|
96
|
+
enable_logging: false
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### file_conventions.yaml(ファイル編集規約)
|
|
100
|
+
|
|
101
|
+
特定のファイルパターンに対して適用される規約を定義します。
|
|
102
|
+
|
|
103
|
+
```yaml
|
|
104
|
+
rules:
|
|
105
|
+
# CSS編集時の規約
|
|
106
|
+
- name: "CSS編集規約"
|
|
107
|
+
patterns:
|
|
108
|
+
- "**/*.css"
|
|
109
|
+
- "**/*.scss"
|
|
110
|
+
severity: "warn"
|
|
111
|
+
token_threshold: 30000
|
|
112
|
+
message: |
|
|
113
|
+
## CSS規約
|
|
114
|
+
- BEM命名規則を使用
|
|
115
|
+
- !important は禁止
|
|
116
|
+
- ネストは3階層まで
|
|
117
|
+
|
|
118
|
+
# モデル編集時の規約
|
|
119
|
+
- name: "モデル編集規約"
|
|
120
|
+
patterns:
|
|
121
|
+
- "**/models/**/*.py"
|
|
122
|
+
- "**/entities/**/*.py"
|
|
123
|
+
severity: "block"
|
|
124
|
+
token_threshold: 35000
|
|
125
|
+
message: |
|
|
126
|
+
## モデル規約
|
|
127
|
+
- フィールド名はsnake_case
|
|
128
|
+
- 必ずdocstringを記載
|
|
129
|
+
- バリデーションを実装
|
|
130
|
+
|
|
131
|
+
# View層編集時の規約
|
|
132
|
+
- name: "View層編集規約"
|
|
133
|
+
patterns:
|
|
134
|
+
- "**/views/**/*.erb"
|
|
135
|
+
- "**/templates/**/*.html"
|
|
136
|
+
severity: "warn"
|
|
137
|
+
message: |
|
|
138
|
+
## View規約
|
|
139
|
+
- XSS対策を徹底
|
|
140
|
+
- ロジックはヘルパーに委譲
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### command_conventions.yaml(コマンド実行規約)
|
|
144
|
+
|
|
145
|
+
危険なコマンドや確認が必要なコマンドに対して適用される規約を定義します。
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
rules:
|
|
149
|
+
# Git操作規約
|
|
150
|
+
- name: "Git操作規約"
|
|
151
|
+
patterns:
|
|
152
|
+
- "git push*"
|
|
153
|
+
- "git commit*"
|
|
154
|
+
severity: "warn"
|
|
155
|
+
token_threshold: 25000
|
|
156
|
+
message: |
|
|
157
|
+
## Git規約
|
|
158
|
+
- コミットメッセージは日本語で記載
|
|
159
|
+
- プッシュ前にテストを実行
|
|
160
|
+
|
|
161
|
+
# 本番環境操作規約
|
|
162
|
+
- name: "本番環境操作規約"
|
|
163
|
+
patterns:
|
|
164
|
+
- "*production*"
|
|
165
|
+
- "*deploy*"
|
|
166
|
+
severity: "block"
|
|
167
|
+
message: |
|
|
168
|
+
## 本番環境操作
|
|
169
|
+
- 必ず承認を得てから実行
|
|
170
|
+
- バックアップを確認
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## ユースケース例
|
|
176
|
+
|
|
177
|
+
### Rails プロジェクト
|
|
178
|
+
|
|
179
|
+
```yaml
|
|
180
|
+
# file_conventions.yaml
|
|
181
|
+
rules:
|
|
182
|
+
- name: "コントローラ規約"
|
|
183
|
+
patterns: ["**/controllers/**/*.rb"]
|
|
184
|
+
message: |
|
|
185
|
+
- before_actionでの認証確認
|
|
186
|
+
- Strong Parametersの使用必須
|
|
187
|
+
|
|
188
|
+
- name: "マイグレーション規約"
|
|
189
|
+
patterns: ["**/migrate/*.rb"]
|
|
190
|
+
severity: "block"
|
|
191
|
+
message: |
|
|
192
|
+
- 必ずロールバック可能にする
|
|
193
|
+
- 大量データ更新時はバッチ処理
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### React プロジェクト
|
|
197
|
+
|
|
198
|
+
```yaml
|
|
199
|
+
# file_conventions.yaml
|
|
200
|
+
rules:
|
|
201
|
+
- name: "コンポーネント規約"
|
|
202
|
+
patterns: ["**/components/**/*.tsx"]
|
|
203
|
+
message: |
|
|
204
|
+
- Propsの型定義必須
|
|
205
|
+
- useCallbackでメモ化検討
|
|
206
|
+
|
|
207
|
+
- name: "フック規約"
|
|
208
|
+
patterns: ["**/hooks/**/*.ts"]
|
|
209
|
+
message: |
|
|
210
|
+
- カスタムフックは use* で命名
|
|
211
|
+
- 依存配列を正確に記述
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Python プロジェクト
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
# file_conventions.yaml
|
|
218
|
+
rules:
|
|
219
|
+
- name: "API規約"
|
|
220
|
+
patterns: ["**/api/**/*.py", "**/routes/**/*.py"]
|
|
221
|
+
message: |
|
|
222
|
+
- 入力バリデーション必須
|
|
223
|
+
- エラーハンドリングを実装
|
|
224
|
+
|
|
225
|
+
- name: "テスト規約"
|
|
226
|
+
patterns: ["**/tests/**/*.py"]
|
|
227
|
+
message: |
|
|
228
|
+
- Arrange-Act-Assertパターン
|
|
229
|
+
- モックは最小限に
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## 動作原理
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
┌─────────────────────────────────────────────────────────┐
|
|
238
|
+
│ Claude Code │
|
|
239
|
+
│ │
|
|
240
|
+
│ ユーザー: "このCSSを修正して" │
|
|
241
|
+
│ ↓ │
|
|
242
|
+
│ Claude: Edit ツール呼び出し (*.css) │
|
|
243
|
+
│ ↓ │
|
|
244
|
+
│ ┌─────────────────────────────────────┐ │
|
|
245
|
+
│ │ PreToolUse Hook (claude-nagger) │ │
|
|
246
|
+
│ │ │ │
|
|
247
|
+
│ │ 1. パターン照合: "**/*.css" ✓ │ │
|
|
248
|
+
│ │ 2. 対応する規約を読み込み │ │
|
|
249
|
+
│ │ 3. 規約をコンテキストに注入 │ │
|
|
250
|
+
│ └─────────────────────────────────────┘ │
|
|
251
|
+
│ ↓ │
|
|
252
|
+
│ Claude: 規約を参照しながらCSS編集 │
|
|
253
|
+
└─────────────────────────────────────────────────────────┘
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## コマンド一覧
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# フックのインストール(.claude/settings.jsonに設定追加)
|
|
262
|
+
claude-nagger install-hooks
|
|
263
|
+
|
|
264
|
+
# dry-run(実際には変更しない)
|
|
265
|
+
claude-nagger install-hooks --dry-run
|
|
266
|
+
|
|
267
|
+
# 強制上書き(既存ファイルも再生成)
|
|
268
|
+
claude-nagger install-hooks --force
|
|
269
|
+
|
|
270
|
+
# バージョン表示
|
|
271
|
+
claude-nagger --version
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## なぜCLAUDE.mdだけでは不十分か
|
|
277
|
+
|
|
278
|
+
| アプローチ | コンテキスト消費 | 規約遵守率 | 柔軟性 |
|
|
279
|
+
|-----------|-----------------|-----------|--------|
|
|
280
|
+
| 全規約をCLAUDE.mdに記載 | 高 (常時) | 低 (忘却) | 低 |
|
|
281
|
+
| claude-nagger | 低 (必要時のみ) | 高 | 高 |
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## 要件
|
|
286
|
+
|
|
287
|
+
- Python 3.10以上
|
|
288
|
+
- Claude Code CLI
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## ライセンス
|
|
293
|
+
|
|
294
|
+
MIT License - 詳細は [LICENSE](LICENSE) を参照
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "claude-nagger"
|
|
7
|
+
version = "1.0.1"
|
|
8
|
+
description = "Claude Code統合ツールシステム - フック・規約管理CLI"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "HollySizzle"}
|
|
14
|
+
]
|
|
15
|
+
keywords = ["claude", "claude-code", "hooks", "conventions"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
"Intended Audience :: Developers",
|
|
20
|
+
"License :: OSI Approved :: MIT License",
|
|
21
|
+
"Programming Language :: Python :: 3",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
"Programming Language :: Python :: 3.13",
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
dependencies = [
|
|
29
|
+
"questionary>=2.0.0",
|
|
30
|
+
"pytz>=2023.3",
|
|
31
|
+
"json5>=0.9.14",
|
|
32
|
+
"pyyaml>=6.0",
|
|
33
|
+
"typing-extensions>=4.8.0",
|
|
34
|
+
"rich>=13.0.0",
|
|
35
|
+
"aiohttp>=3.8.0",
|
|
36
|
+
"wcmatch>=10.0",
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
[project.optional-dependencies]
|
|
40
|
+
dev = [
|
|
41
|
+
"pytest>=7.0.0",
|
|
42
|
+
"pytest-cov>=4.0.0",
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
[project.scripts]
|
|
46
|
+
claude-nagger = "application.cli:main"
|
|
47
|
+
|
|
48
|
+
[project.urls]
|
|
49
|
+
Homepage = "https://github.com/HollySizzle/claude-nagger"
|
|
50
|
+
Repository = "https://github.com/HollySizzle/claude-nagger"
|
|
51
|
+
|
|
52
|
+
[tool.setuptools.packages.find]
|
|
53
|
+
where = ["src"]
|
|
54
|
+
include = ["application*", "domain*", "infrastructure*", "shared*"]
|
|
55
|
+
|
|
56
|
+
[tool.setuptools.package-dir]
|
|
57
|
+
"" = "src"
|
|
58
|
+
|
|
59
|
+
[tool.pytest.ini_options]
|
|
60
|
+
testpaths = ["tests"]
|
|
61
|
+
python_files = ["test_*.py"]
|
|
62
|
+
python_functions = ["test_*"]
|
|
63
|
+
addopts = "-v --tb=short"
|
|
64
|
+
asyncio_mode = "auto"
|
|
65
|
+
asyncio_default_fixture_loop_scope = "function"
|