Kayunangka/claude-skill

๐Ÿ” ast-grep์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ ๊ฒ€์ƒ‰ ๊ฐ•ํ™”: ์ฝ”๋“œ ๊ตฌ์กฐ์—์„œ ํŒจํ„ด์„ ์ฐพ์•„ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ๋ถ„์„์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

claude-skill๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ด ์Šคํ‚ฌ์€ ast-grep(ast-grep)์ด๋ผ๋Š” ๊ตฌ์กฐ์  ์ฝ”๋“œ ๊ฒ€์ƒ‰ ๋„๊ตฌ๋ฅผ Claude Code์— ํ†ตํ•ฉํ•˜์—ฌ, ๋‹จ์ˆœํ•œ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์ด ์•„๋‹Œ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST) ๊ธฐ๋ฐ˜์˜ ์ •ํ™•ํ•œ ํŒจํ„ด ๋งค์นญ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ํŠน์ • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํŒจํ„ด, ๋น„ํ‘œ์ค€ ์ฝ”๋“œ ๊ตฌ์กฐ, ๋˜๋Š” ์ž ์žฌ์  ๋ฒ„๊ทธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ast-grep์€ YAML ๊ธฐ๋ฐ˜์˜ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด, ํŒ€์˜ ์ฝ”๋”ฉ ํ‘œ์ค€ ์ค€์ˆ˜ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ๋‚˜ ๋ฆฌํŒฉํ† ๋ง ๋Œ€์ƒ ์‹๋ณ„์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šคํ‚ฌ์€ Claude Code ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•˜๋ฉฐ, JavaScript, TypeScript, Python, Rust ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๋Š” ast-grep์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ Claude์™€์˜ ์ž์—ฐ์–ด ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

์ง€์› ๋Œ€์ƒโœ“Claude Code~Codex CLI~Cursor
npx skills add Kayunangka/claude-skill

Installed? Explore more ์—ฐ๊ตฌ & ๋ฐ์ดํ„ฐ ๋ถ„์„ skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review ยท View all 6 โ†’

์ฆ๊ฒจ ์‚ฌ์šฉํ•˜๋Š” AI์—๊ฒŒ ๋ฌผ์–ด๋ณด๊ธฐ

์ด ์—์ด์ „ํŠธ ์Šคํ‚ฌ์ด ๋ฏธ๋ฆฌ ๋กœ๋“œ๋œ ์ƒˆ ์ฑ„ํŒ…์„ ์—ฝ๋‹ˆ๋‹ค.

๋ฌธ์„œ

claude-skill์€(๋Š”) ๋ฌด์—‡์„ ํ•˜๋‚˜์š”?

๐Ÿ” ast-grep์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ ๊ฒ€์ƒ‰ ๊ฐ•ํ™”: ์ฝ”๋“œ ๊ตฌ์กฐ์—์„œ ํŒจํ„ด์„ ์ฐพ์•„ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ๋ถ„์„์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์š”

์ด ์Šคํ‚ฌ์€ ast-grep์„ Claude Code์— ํ†ตํ•ฉํ•˜์—ฌ, ์ฝ”๋“œ์˜ ์ถ”์ƒ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ(AST)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๊ณ ๊ธ‰ ํŒจํ„ด ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๊ตฌ์กฐ์  ๊ฒ€์ƒ‰: ๋ณ€์ˆ˜๋ช…์ด๋‚˜ ์ฃผ์„์ด ์•„๋‹Œ ์ฝ”๋“œ์˜ ์‹ค์ œ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒจํ„ด ๊ฒ€์ƒ‰
  • ํŒจํ„ด ๋งค์นญ: ํŠน์ • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํŒจํ„ด, ๋น„ํ‘œ์ค€ ์ฝ”๋“œ ์Šคํƒ€์ผ, ๋ณด์•ˆ ์ทจ์•ฝ์  ์‹๋ณ„
  • YAML ๊ธฐ๋ฐ˜ ๊ทœ์น™: ์‚ฌ์šฉ์ž ์ •์˜ ๊ฒ€์ƒ‰ ๊ทœ์น™์„ YAML ํŒŒ์ผ๋กœ ์ •์˜ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์›: JavaScript, TypeScript, Python, Rust, Go ๋“ฑ ์ฃผ์š” ์–ธ์–ด ์ง€์›

์„ค์น˜

# ast-grep ์„ค์น˜ (์˜ˆ: npm์„ ํ†ตํ•ด)
npm install -g @ast-grep/cli
# ๋˜๋Š” cargo๋ฅผ ํ†ตํ•ด
cargo install ast-grep

์‚ฌ์šฉ๋ฒ•

๊ธฐ๋ณธ ๊ฒ€์ƒ‰

# ํŠน์ • ํŒจํ„ด ๊ฒ€์ƒ‰
sg --pattern 'try { $BODY } catch { $ERR }' --lang javascript

๊ทœ์น™ ํŒŒ์ผ ์‚ฌ์šฉ

.sgconfig.yaml ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ์ƒ์„ฑํ•˜๊ณ  ๊ทœ์น™ ์ •์˜:

rules:
  - id: no-console-log
    severity: warning
    message: ์ฝ˜์†” ๋กœ๊ทธ ์‚ฌ์šฉ ๊ธˆ์ง€
    pattern: console.log($ARG)

์˜ˆ์ œ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํŒจํ„ด์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

// ๊ฒ€์ƒ‰ ๋Œ€์ƒ: ๋ชจ๋“  try-catch ๋ธ”๋ก
sg --pattern 'try { $BODY } catch ($$$ERR) { console.error($$$MSG) }' --lang javascript

์ฐธ๊ณ 

๊ด€๋ จ ์Šคํ‚ฌ