-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.sh
More file actions
358 lines (314 loc) · 12.2 KB
/
setup.sh
File metadata and controls
358 lines (314 loc) · 12.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
#!/bin/bash
# =============================================================================
# Claude Code Review セットアップスクリプト
# 案件ごとの言語・フレームワークに合わせた CLAUDE.md を生成します
# 使い方: bash setup.sh
# =============================================================================
set -e
CLAUDE_MD="CLAUDE.md"
CODING_STANDARDS="CODING_STANDARDS.md"
BOLD="\033[1m"
CYAN="\033[36m"
GREEN="\033[32m"
YELLOW="\033[33m"
RESET="\033[0m"
# --------------------------------------------------
# CODING_STANDARDS.md からセクションを抽出する関数
# 「## セクション名」から次の「---」までを取得
# --------------------------------------------------
extract_section() {
local file="$1"
local section_name="$2"
if [ ! -f "$file" ]; then
return
fi
awk -v section="## ${section_name}" '
$0 == section { found=1 }
found && /^---$/ { exit }
found { print }
' "$file"
}
echo ""
echo -e "${BOLD}${CYAN}========================================${RESET}"
echo -e "${BOLD}${CYAN} Claude Code Review セットアップ${RESET}"
echo -e "${BOLD}${CYAN}========================================${RESET}"
echo ""
# --------------------------------------------------
# 1. プロジェクト基本情報
# --------------------------------------------------
echo -e "${BOLD}【1/5】プロジェクト基本情報${RESET}"
echo ""
read -p "プロジェクト名: " PROJECT_NAME
read -p "プロジェクトの説明(任意): " PROJECT_DESC
# --------------------------------------------------
# 2. 言語選択(複数可)
# --------------------------------------------------
echo ""
echo -e "${BOLD}【2/5】使用言語を選択してください(複数選択可)${RESET}"
echo ""
echo " 1) TypeScript / JavaScript"
echo " 2) Python"
echo " 3) Go"
echo " 4) Ruby"
echo " 5) Java / Kotlin"
echo " 6) PHP"
echo " 7) Swift"
echo " 8) その他"
echo ""
read -p "番号をスペース区切りで入力(例: 1 2): " LANG_INPUT
# 選択されたセクション名を追跡
SELECTED_SECTIONS=()
CUSTOM_LANG_RULES=""
for num in $LANG_INPUT; do
case $num in
1) SELECTED_SECTIONS+=("TypeScript / JavaScript" "HTML / CSS(フロントエンド共通)") ;;
2) SELECTED_SECTIONS+=("Python") ;;
3) SELECTED_SECTIONS+=("Go") ;;
4) SELECTED_SECTIONS+=("Ruby / Ruby on Rails") ;;
5) SELECTED_SECTIONS+=("Java / Kotlin") ;;
6) SELECTED_SECTIONS+=("PHP / CakePHP") ;;
7) SELECTED_SECTIONS+=("Swift") ;;
8)
echo ""
read -p "言語名を入力: " CUSTOM_LANG
read -p "そのルールを記述(任意、Enterでスキップ): " CUSTOM_RULE
CUSTOM_LANG_RULES="${CUSTOM_LANG_RULES}
### ${CUSTOM_LANG}
${CUSTOM_RULE}
"
;;
esac
done
# --------------------------------------------------
# 3. フレームワーク選択(複数可)
# --------------------------------------------------
echo ""
echo -e "${BOLD}【3/5】使用フレームワークを選択してください(複数選択可)${RESET}"
echo ""
echo " 1) React / Next.js"
echo " 2) Vue.js / Nuxt.js"
echo " 3) Django / FastAPI"
echo " 4) Ruby on Rails"
echo " 5) Laravel"
echo " 6) Spring Boot"
echo " 7) Express / NestJS"
echo " 8) CakePHP"
echo " 9) なし / その他"
echo ""
read -p "番号をスペース区切りで入力(例: 1 8): " FW_INPUT
CUSTOM_FW_RULES=""
for num in $FW_INPUT; do
case $num in
1) SELECTED_SECTIONS+=("React / Next.js") ;;
2) SELECTED_SECTIONS+=("Vue.js / Nuxt.js") ;;
3) SELECTED_SECTIONS+=("Django / FastAPI") ;;
4)
# Ruby on Railsは「Ruby / Ruby on Rails」セクションに含まれる
local_found=false
for s in "${SELECTED_SECTIONS[@]}"; do
if [ "$s" = "Ruby / Ruby on Rails" ]; then
local_found=true
break
fi
done
if [ "$local_found" = false ]; then
SELECTED_SECTIONS+=("Ruby / Ruby on Rails")
fi
;;
5) SELECTED_SECTIONS+=("Laravel") ;;
6) SELECTED_SECTIONS+=("Spring Boot") ;;
7) SELECTED_SECTIONS+=("Express / NestJS") ;;
8)
# CakePHPは「PHP / CakePHP」セクションに含まれる
local_found=false
for s in "${SELECTED_SECTIONS[@]}"; do
if [ "$s" = "PHP / CakePHP" ]; then
local_found=true
break
fi
done
if [ "$local_found" = false ]; then
SELECTED_SECTIONS+=("PHP / CakePHP")
fi
;;
9)
echo ""
read -p "フレームワーク名を入力(なしの場合はEnter): " CUSTOM_FW
if [ -n "$CUSTOM_FW" ]; then
read -p "そのルールを記述(任意、Enterでスキップ): " CUSTOM_FW_RULE
CUSTOM_FW_RULES="${CUSTOM_FW_RULES}
### ${CUSTOM_FW}
${CUSTOM_FW_RULE}
"
fi
;;
esac
done
# --------------------------------------------------
# 4. SEOチェックを含めるか
# --------------------------------------------------
echo ""
echo -e "${BOLD}【4/5】SEOチェック基準をレビューに含めますか?${RESET}"
echo ""
echo " 1) 含める(HTMLに関する項目のみ・コードで検証可能な項目)"
echo " 2) 含めない"
echo ""
read -p "番号を入力: " SEO_INPUT
SEO_RULES=""
if [ "$SEO_INPUT" = "1" ]; then
SEO_RULES="enabled"
# SEO有効時、HTML/CSSセクションも含める
local_found=false
for s in "${SELECTED_SECTIONS[@]}"; do
if [ "$s" = "HTML / CSS(フロントエンド共通)" ]; then
local_found=true
break
fi
done
if [ "$local_found" = false ]; then
SELECTED_SECTIONS+=("HTML / CSS(フロントエンド共通)")
fi
fi
# --------------------------------------------------
# 5. チーム独自ルール
# --------------------------------------------------
echo ""
echo -e "${BOLD}【5/5】チーム独自ルール(任意)${RESET}"
echo ""
read -p "独自ルールがあれば入力(Enterでスキップ): " CUSTOM_RULES
# --------------------------------------------------
# CODING_STANDARDS.md からセクションを抽出
# --------------------------------------------------
EXTRACTED_STANDARDS=""
if [ -f "$CODING_STANDARDS" ]; then
# 全言語共通は常に含める
COMMON_SECTION=$(extract_section "$CODING_STANDARDS" "全言語共通")
if [ -n "$COMMON_SECTION" ]; then
EXTRACTED_STANDARDS="${COMMON_SECTION}
---
"
fi
# 重複を除去してセクションを抽出
SEEN_SECTIONS=()
for section in "${SELECTED_SECTIONS[@]}"; do
# 既に抽出済みかチェック
already_seen=false
for seen in "${SEEN_SECTIONS[@]}"; do
if [ "$seen" = "$section" ]; then
already_seen=true
break
fi
done
if [ "$already_seen" = true ]; then
continue
fi
SEEN_SECTIONS+=("$section")
SECTION_CONTENT=$(extract_section "$CODING_STANDARDS" "$section")
if [ -n "$SECTION_CONTENT" ]; then
EXTRACTED_STANDARDS="${EXTRACTED_STANDARDS}
${SECTION_CONTENT}
---
"
fi
done
else
echo ""
echo -e "${YELLOW} ⚠️ CODING_STANDARDS.md が見つかりません。コード規約はスキップされます。${RESET}"
fi
# --------------------------------------------------
# CLAUDE.md 生成
# --------------------------------------------------
echo ""
echo -e "${YELLOW}CLAUDE.md を生成しています...${RESET}"
cat > "$CLAUDE_MD" << MARKDOWN
# Claude への指示書
# currentDate
Today's date is $(date +%Y-%m-%d).
## プロジェクト概要
- **プロジェクト名**: ${PROJECT_NAME}
$([ -n "$PROJECT_DESC" ] && echo "- **説明**: ${PROJECT_DESC}")
---
## Code Review Guidelines(コードレビューの指針)
### 共通チェック観点
- **可読性**: 変数名・関数名は分かりやすいか、コメントは適切か
- **パフォーマンス**: 無駄なループや非効率な処理はないか
- **セキュリティ**: SQLインジェクション・XSS・認証バイパスのリスクはないか
- **エラーハンドリング**: 例外・エラーが適切に処理されているか
- **テスト**: 新機能にテストが書かれているか
### 重要度の表記
- 🔴 **Critical** — バグやセキュリティ脆弱性など、必ず修正が必要な問題
- 🟡 **Warning** — 修正を推奨する問題(パフォーマンス・保守性など)
- 🔵 **Suggestion** — より良くなる提案(任意対応でOK)
### 出力フォーマット
- 問題箇所はファイル名と行番号を明記すること
- 良かった点も必ず1〜2点コメントすること
- 問題がなければ \`✅ LGTM\` と一言添えること
---
$([ -n "$EXTRACTED_STANDARDS" ] && echo "
## コード規約
${EXTRACTED_STANDARDS}")
$([ -n "$CUSTOM_LANG_RULES" ] && echo "
## カスタム言語ルール
${CUSTOM_LANG_RULES}
---")
$([ -n "$CUSTOM_FW_RULES" ] && echo "
## カスタムフレームワークルール
${CUSTOM_FW_RULES}
---")
$([ -n "$CUSTOM_RULES" ] && echo "
## チーム独自ルール
${CUSTOM_RULES}
---")
$([ "$SEO_RULES" = "enabled" ] && cat << 'SEOBLOCK'
## SEO チェックガイドライン
HTMLファイルが変更されているPRでは、以下のSEOチェック項目を確認してください。
コードで検証できる項目のみを対象とし、キーワード選定など運用面の判断は含みません。
### title / meta 関連(No.11〜17)
- `<title>` にSEOキーワードが含まれているか(全角30文字程度を目安)
- `<title>` にキーワードが過剰に詰め込まれていないか(スパム判定リスク)
- `<title>` はページごとに固有の内容になっているか
- `<title>` にテキスト以外(画像など)が指定されていないか
- `<meta name="description">` が設定されており、120文字前後に収まっているか
- `<meta name="description">` にSEOキーワードが含まれているか
- `<meta name="description">` はページごとに固有の内容になっているか
### 見出し・構造(No.18〜21)
- `h1`〜`h6` が正しい階層構造になっているか(h1→h2→h3の順を守る)
- `h` 要素にテキスト以外(画像のみなど)が使われていないか(alt属性があれば許容)
- `h1` が1ページに1つだけか
- `h1` はページごとに固有の内容になっているか
### 画像・リンク(No.23〜24)
- `<img>` に `alt` 属性が設定されているか(空altは装飾画像として許容)
- `<a>` のアンカーテキストが「こちら」「詳しくは」などの非説明的なテキストになっていないか
### 構造化・正規化(No.25〜28、38)
- パンくずリストに構造化マークアップ(JSON-LD / microdata)が設定されているか
- `canonical` タグが設定されているか
- ページネーションがある場合、`rel="prev"` / `rel="next"` が設定されているか
- 隠しテキスト・隠しリンク(背景色と同色テキストなど)がないか
### 技術面(No.33〜34、41〜43)
- SSL(https)対応になっているか(`http://` のハードコードがないか)
- `robots.txt` でGooglebotをブロックする設定になっていないか
- viewport メタタグが設定されており、モバイルフレンドリー対応されているか
- 構造化データ(JSON-LD)が実装されているか(対象ページの場合)
- URLが変更・削除されている場合、301リダイレクト設定が含まれているか
- リダイレクトチェーンが5回を超えていないか
### SEOレビューの出力フォーマット
問題がある場合は通常のコードレビューと同じ重要度表記で記載すること。
- 🔴 Critical: canonical未設定、h1が複数など
- 🟡 Warning: alt属性の欠落、title文字数超過など
- 🔵 Suggestion: 構造化データの追加推奨など
SEOBLOCK
)
MARKDOWN
echo ""
echo -e "${GREEN}${BOLD}✅ CLAUDE.md を生成しました!${RESET}"
echo ""
echo -e "${BOLD}次のステップ:${RESET}"
echo " 1. CLAUDE.md の内容を確認・必要に応じて編集"
echo " 2. GitHub Secretsに以下を登録:"
echo " - CLAUDE_CODE_OAUTH_TOKEN(またはANTHROPIC_API_KEY)"
echo " - USER_PAT"
echo " - CHATWORK_API_TOKEN"
echo " - CHATWORK_ROOM_ID"
echo " 3. Claude GitHub App のインストール:"
echo " https://github.com/apps/claude"
echo ""