실전 가이드
Claude Code 플러그인을 처음부터 만들기: 개발 워크플로, Marketplace 배포, 팀 협업 설정, 문제 해결까지 완벽 가이드
빠른 복습
이전 글에서 Plugin의 핵심 개념을 알아보았습니다. Plugin은 Claude Code의 워크플로를 패키징하고 배포하는 메커니즘으로, Commands, Skills, Agents, Hooks 등의 컴포넌트를 하나로 통합하여 팀 공유 및 커뮤니티 배포를 가능하게 합니다. 이번 글에서는 실전적인 관점에서 생성부터 배포까지의 전체 프로세스를 함께 진행하겠습니다.
첫 번째 Plugin 만들기
1단계: 디렉토리 구조 생성
mkdir my-first-plugin
mkdir my-first-plugin/.claude-plugin
mkdir my-first-plugin/commands2단계: 플러그인 매니페스트 생성
.claude-plugin/plugin.json에 플러그인의 메타데이터를 정의합니다:
{
"name": "my-first-plugin",
"description": "我的第一个 Claude Code 插件",
"version": "1.0.0",
"author": {
"name": "Your Name"
}
}3단계: 슬래시 명령어 추가
commands/ 디렉토리에 Markdown 파일을 생성합니다. 각 파일이 하나의 명령어에 해당합니다:
commands/hello.md:
---
description: 向用户发送友好的问候
---
# Hello 命令
请热情地问候用户,并询问今天可以帮助他们做什么。4단계: 플러그인 테스트
--plugin-dir 플래그를 사용하여 로컬 플러그인을 로드하고 테스트합니다:
claude --plugin-dir ./my-first-pluginClaude Code에서 명령어를 실행합니다:
/my-first-plugin:hello5단계: 명령어 인자 추가
명령어는 사용자가 입력한 인자를 받을 수 있습니다. hello.md를 업데이트합니다:
---
description: 向指定用户发送个性化问候
---
# Hello 命令
请热情地问候名为 "$ARGUMENTS" 的用户,并询问今天可以帮助他们做什么。
如果用户没有提供名字,就使用"朋友"作为称呼。인자를 포함하여 명령어를 테스트합니다:
/my-first-plugin:hello 小明지원되는 인자 플레이스홀더:
$ARGUMENTS- 모든 사용자 입력$1,$2,$3- 개별 인자
컴포넌트 추가하기
Skills 추가
skills/ 디렉토리를 생성합니다. 각 Skill은 SKILL.md 파일을 포함하는 폴더입니다:
my-first-plugin/
├── skills/
│ └── code-review/
│ └── SKILL.mdskills/code-review/SKILL.md:
---
name: code-review
description: 审查代码质量、安全性和可维护性
---
当审查代码时,请检查以下方面:
1. **代码组织**:结构是否清晰
2. **错误处理**:异常是否被妥善处理
3. **安全隐患**:是否存在安全漏洞
4. **测试覆盖**:关键逻辑是否有测试
输出格式:
- 严重问题(必须修复)
- 警告(建议修复)
- 建议(可以改进)Subagents 추가
agents/ 디렉토리를 생성합니다:
agents/code-reviewer.md:
---
name: code-reviewer
description: 专业的代码审查代理,用于代码质量检查
tools: Read, Grep, Glob, Bash
---
你是一位资深的代码审查专家。
当被调用时:
1. 运行 git diff 查看最近的更改
2. 分析修改的文件
3. 提供结构化的审查反馈
审查清单:
- 代码可读性和命名规范
- 错误处理和边界条件
- 安全漏洞(如注入、敏感信息泄露)
- 性能优化机会Hooks 추가
Hooks를 사용하면 특정 이벤트가 발생할 때 스크립트를 자동으로 실행할 수 있습니다. hooks/hooks.json을 생성합니다:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/scripts/format-code.sh"
}
]
}
]
}
}중요: ${CLAUDE_PLUGIN_ROOT} 환경 변수를 사용하여 플러그인 디렉토리 내의 파일을 참조하세요. 이렇게 하면 플러그인이 어디에 설치되더라도 경로가 올바르게 해석됩니다.
대응하는 스크립트 scripts/format-code.sh를 생성합니다:
#!/bin/bash
# 格式化代码
cd "$CLAUDE_PROJECT_DIR" && make format 2>/dev/null || true실행 권한을 부여하는 것을 잊지 마세요:
chmod +x scripts/format-code.shMCP 서버 추가
플러그인이 외부 시스템에 연결해야 하는 경우, .mcp.json을 생성합니다:
{
"mcpServers": {
"plugin-database": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": {
"DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"
}
}
}
}전체 Plugin 구조
모든 기능을 갖춘 Plugin은 다음과 같은 구조를 가집니다:
my-plugin/
├── .claude-plugin/
│ └── plugin.json # 插件清单
├── commands/
│ ├── review.md # 代码审查命令
│ ├── deploy.md # 部署命令
│ └── test.md # 测试命令
├── agents/
│ ├── code-reviewer.md # 代码审查代理
│ └── debugger.md # 调试代理
├── skills/
│ └── code-standards/
│ └── SKILL.md # 代码规范知识
├── hooks/
│ └── hooks.json # 事件钩子配置
├── scripts/
│ ├── format-code.sh # 格式化脚本
│ └── run-tests.sh # 测试脚本
├── .mcp.json # MCP 配置
├── LICENSE
├── README.md
└── CHANGELOG.md대응하는 plugin.json:
{
"name": "dev-toolkit",
"version": "1.0.0",
"description": "开发者工具箱:代码审查、测试、部署一站式解决方案",
"author": {
"name": "Your Team",
"email": "team@example.com"
},
"homepage": "https://github.com/you/dev-toolkit",
"repository": "https://github.com/you/dev-toolkit",
"license": "MIT",
"keywords": ["development", "code-review", "deployment"],
"commands": "./commands/",
"agents": "./agents/",
"skills": "./skills/",
"hooks": "./hooks/hooks.json",
"mcpServers": "./.mcp.json"
}Marketplace에 배포하기
Marketplace란
Marketplace는 Plugin의 배포 센터입니다. "플러그인 스토어"라고 생각하시면 됩니다. 사용자는 간단한 명령어 하나로 여러분이 배포한 플러그인을 설치할 수 있습니다.
Marketplace 설정 생성
GitHub 저장소에 .claude-plugin/marketplace.json을 생성합니다:
{
"name": "my-marketplace",
"owner": {
"name": "Your Name",
"email": "you@example.com"
},
"plugins": [
{
"name": "dev-toolkit",
"source": "./plugins/dev-toolkit",
"description": "开发者工具箱",
"version": "1.0.0"
},
{
"name": "doc-generator",
"source": {
"source": "github",
"repo": "you/doc-generator-plugin"
},
"description": "文档生成工具"
}
]
}플러그인 소스 유형
Marketplace는 여러 가지 소스 유형을 지원합니다:
상대 경로 (동일 저장소 내 플러그인):
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}GitHub 저장소:
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}임의의 Git 저장소:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git"
}
}배포 절차
-
GitHub 저장소를 생성합니다
-
코드를 푸시합니다:
git init git add . git commit -m "Initial release" git push origin main -
사용자가 여러분의 Marketplace를 추가합니다:
/plugin marketplace add your-username/your-repo -
사용자가 플러그인을 설치합니다:
/plugin install dev-toolkit@your-marketplace
Plugin 설치 및 관리
대화형 메뉴로
/plugin이 명령을 실행하면 플러그인을 탐색, 설치, 활성화, 비활성화할 수 있는 대화형 인터페이스가 열립니다.
명령줄로
Marketplace 추가:
/plugin marketplace add owner/repo # GitHub
/plugin marketplace add https://example.com/marketplace.json # URL
/plugin marketplace add ./local-marketplace # 本地플러그인 설치:
# 安装到用户范围(默认)
/plugin install formatter@my-marketplace
# 安装到项目范围(团队共享)
/plugin install formatter@my-marketplace --scope project
# 安装到本地范围(gitignored)
/plugin install formatter@my-marketplace --scope local기타 관리 명령어:
/plugin enable <plugin> # 启用插件
/plugin disable <plugin> # 禁用插件
/plugin uninstall <plugin> # 卸载插件
/plugin update <plugin> # 更新插件플러그인 검증
배포 전에 플러그인 설정이 올바른지 검증합니다:
claude plugin validate .또는 Claude Code 내에서:
/plugin validate .팀 협업 설정
프로젝트 내 플러그인 설정 공유
플러그인 설정을 버전 관리에 커밋하면 팀원이 자동으로 해당 설정을 사용할 수 있습니다:
.claude/settings.json:
{
"extraKnownMarketplaces": {
"company-tools": {
"source": {
"source": "github",
"repo": "your-org/claude-plugins"
}
}
},
"enabledPlugins": {
"code-formatter@company-tools": true,
"deployment-tools@company-tools": true
}
}팀원이 프로젝트를 클론하면 이 플러그인들이 자동으로 사용 가능해집니다.
엔터프라이즈 Marketplace 제한
엄격한 관리가 필요한 엔터프라이즈 환경에서는 managed settings에서 허용되는 Marketplace를 제한할 수 있습니다:
{
"strictKnownMarketplaces": [
{
"source": "github",
"repo": "company/approved-plugins"
}
]
}빈 배열 []로 설정하면 외부 플러그인을 완전히 차단할 수 있습니다.
CLI 명령어 레퍼런스
| 명령어 | 설명 |
|---|---|
/plugin | 대화형 관리 인터페이스 열기 |
/plugin install <name>@<marketplace> | 플러그인 설치 |
/plugin uninstall <name> | 플러그인 제거 |
/plugin enable <name> | 플러그인 활성화 |
/plugin disable <name> | 플러그인 비활성화 |
/plugin update <name> | 플러그인 업데이트 |
/plugin validate . | 현재 디렉토리의 플러그인 설정 검증 |
/plugin marketplace add <source> | Marketplace 추가 |
/plugin marketplace list | 추가된 Marketplace 목록 표시 |
/plugin marketplace update | Marketplace 캐시 업데이트 |
/plugin marketplace remove <name> | Marketplace 제거 |
모범 사례
개발 모범 사례
- Skills는 하나에 집중하기: 각 Skill은 하나의 일을 잘 수행하도록 하고, 모든 것을 다 담으려 하지 마세요
- 명확한 설명 작성하기: Claude가 컴포넌트를 언제 사용해야 하는지 이해할 수 있도록 하세요
- 팀 내에서 먼저 테스트하기: 커뮤니티에 배포하기 전에 팀 내부에서 먼저 검증하세요
- 버전 변경 사항 기록하기: CHANGELOG.md에 각 버전의 변경 내용을 기록하세요
디렉토리 구조 모범 사례
commands/,agents/,skills/는 플러그인 루트 디렉토리에 배치합니다.claude-plugin/디렉토리에는plugin.json만 배치합니다- 플러그인 내 파일을 참조할 때는
${CLAUDE_PLUGIN_ROOT}를 사용합니다 ../를 사용하여 플러그인 외부의 파일에 접근하지 마세요
Hooks 모범 사례
- 스크립트에 실행 권한 부여:
chmod +x script.sh - shebang으로 인터프리터 선언:
#!/bin/bash ${CLAUDE_PLUGIN_ROOT}변수를 사용하여 경로 정확성 확보- Hook에 통합하기 전에 스크립트를 단독으로 테스트
버전 관리 모범 사례
Semantic Versioning을 따릅니다:
- MAJOR (1.0.0 → 2.0.0): 호환성을 깨는 변경
- MINOR (1.0.0 → 1.1.0): 새 기능 추가 (하위 호환)
- PATCH (1.0.0 → 1.0.1): 버그 수정 (하위 호환)
자주 발생하는 문제 해결
| 문제 | 가능한 원인 | 해결 방법 |
|---|---|---|
| 플러그인이 로드되지 않음 | plugin.json 형식 오류 | claude plugin validate로 검증 |
| 명령어가 표시되지 않음 | 디렉토리 구조 오류 | commands/가 루트 디렉토리에 있고 .claude-plugin/ 내부가 아닌지 확인 |
| Hooks가 실행되지 않음 | 스크립트에 실행 권한 없음 | chmod +x script.sh 실행 |
| 경로를 찾을 수 없음 | 상대 경로 사용 | ${CLAUDE_PLUGIN_ROOT}로 변경 |
| MCP 서버 실패 | 환경 변수 미설정 | .mcp.json의 경로 설정 확인 |
기존 설정에서 마이그레이션
이미 .claude/ 디렉토리에 설정이 있는 경우, 다음 단계를 따라 Plugin으로 마이그레이션할 수 있습니다:
-
Plugin 구조 생성:
mkdir my-plugin/.claude-plugin -
plugin.json 생성:
{ "name": "my-plugin", "description": "从现有配置迁移的插件", "version": "1.0.0" } -
기존 파일 복사:
cp -r .claude/commands my-plugin/ cp -r .claude/agents my-plugin/ cp -r .claude/skills my-plugin/ -
Hooks 마이그레이션:
.claude/settings.json에서hooks설정을hooks/hooks.json으로 복사합니다 -
테스트:
claude --plugin-dir ./my-plugin
학습 리소스
공식 문서
| 리소스 | 링크 | 설명 |
|---|---|---|
| Plugins Reference | code.claude.com/docs | 플러그인 레퍼런스 문서 |
| Create Plugins | code.claude.com/docs | 플러그인 생성 가이드 |
| Best Practices | Anthropic Engineering | 공식 모범 사례 |
| Agent Skills 표준 | agentskills.io | 오픈 표준 사양 |
공식 저장소
| 리소스 | 링크 | 설명 |
|---|---|---|
| anthropics/skills | GitHub | 공식 Skills 저장소 |
| anthropics/claude-plugins-official | GitHub | 공식 플러그인 카탈로그 |
| Docker MCP Toolkit | 공식 사이트 | 200개 이상의 프리빌트 MCP |
커뮤니티 리소스
| 리소스 | 링크 | 설명 |
|---|---|---|
| claude-plugins.dev | 공식 사이트 | 커뮤니티 레지스트리 및 CLI |
| awesome-claude-plugins | GitHub | 243개 플러그인 컬렉션 |
| awesome-claude-code | GitHub | 모범 사례 모음 |
| wshobson/agents | GitHub | 99개 에이전트 + 15개 오케스트레이터 |
| jeremylongshore 튜토리얼 | GitHub | 수백 개 플러그인 + Jupyter 튜토리얼 |
추천 읽을거리
| 글 | 출처 |
|---|---|
| Understanding Claude Code: Skills vs Commands vs Subagents vs Plugins | Young Leaders Tech |
| Improving your coding workflow with Claude Code Plugins | Composio |
| Building My First Claude Code Plugin | Alexander Opalic |
전망
Plugin 메커니즘으로 Claude Code의 확장 능력이 비약적으로 향상되었습니다. 커뮤니티의 발전과 함께 다음과 같은 변화를 기대할 수 있습니다:
- 더 풍부한 플러그인 생태계: 다양한 개발 시나리오와 워크플로를 포괄
- 엔터프라이즈급 기능: 더 완성도 높은 권한 관리 및 감사 기능
- 크로스 플랫폼 호환성: Skills 오픈 표준이 이미 여러 벤더에 채택되고 있습니다
지금이야말로 시작하기에 최적의 시기입니다. 간단한 명령어부터 시작하여 점차 Skills와 Hooks를 추가하고, 궁극적으로 완전한 워크플로 솔루션을 구축해 보세요.
Plugin에 포함할 수 있는 Subagent 컴포넌트에 대해 자세히 알고 싶다면, 《Claude Code Subagent란 무엇인가》를 참조하세요.