본문으로 건너뛰기

실전 가이드

AI 보조

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/commands

2단계: 플러그인 매니페스트 생성

.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-plugin

Claude Code에서 명령어를 실행합니다:

/my-first-plugin:hello

5단계: 명령어 인자 추가

명령어는 사용자가 입력한 인자를 받을 수 있습니다. 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.md

skills/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.sh

MCP 서버 추가

플러그인이 외부 시스템에 연결해야 하는 경우, .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"
  }
}

배포 절차

  1. GitHub 저장소를 생성합니다

  2. 코드를 푸시합니다:

    git init
    git add .
    git commit -m "Initial release"
    git push origin main
  3. 사용자가 여러분의 Marketplace를 추가합니다:

    /plugin marketplace add your-username/your-repo
  4. 사용자가 플러그인을 설치합니다:

    /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 updateMarketplace 캐시 업데이트
/plugin marketplace remove <name>Marketplace 제거

모범 사례

개발 모범 사례

  1. Skills는 하나에 집중하기: 각 Skill은 하나의 일을 잘 수행하도록 하고, 모든 것을 다 담으려 하지 마세요
  2. 명확한 설명 작성하기: Claude가 컴포넌트를 언제 사용해야 하는지 이해할 수 있도록 하세요
  3. 팀 내에서 먼저 테스트하기: 커뮤니티에 배포하기 전에 팀 내부에서 먼저 검증하세요
  4. 버전 변경 사항 기록하기: CHANGELOG.md에 각 버전의 변경 내용을 기록하세요

디렉토리 구조 모범 사례

  • commands/, agents/, skills/는 플러그인 루트 디렉토리에 배치합니다
  • .claude-plugin/ 디렉토리에는 plugin.json만 배치합니다
  • 플러그인 내 파일을 참조할 때는 ${CLAUDE_PLUGIN_ROOT}를 사용합니다
  • ../를 사용하여 플러그인 외부의 파일에 접근하지 마세요

Hooks 모범 사례

  1. 스크립트에 실행 권한 부여: chmod +x script.sh
  2. shebang으로 인터프리터 선언: #!/bin/bash
  3. ${CLAUDE_PLUGIN_ROOT} 변수를 사용하여 경로 정확성 확보
  4. 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으로 마이그레이션할 수 있습니다:

  1. Plugin 구조 생성:

    mkdir my-plugin/.claude-plugin
  2. plugin.json 생성:

    {
      "name": "my-plugin",
      "description": "从现有配置迁移的插件",
      "version": "1.0.0"
    }
  3. 기존 파일 복사:

    cp -r .claude/commands my-plugin/
    cp -r .claude/agents my-plugin/
    cp -r .claude/skills my-plugin/
  4. Hooks 마이그레이션: .claude/settings.json에서 hooks 설정을 hooks/hooks.json으로 복사합니다

  5. 테스트:

    claude --plugin-dir ./my-plugin

학습 리소스

공식 문서

리소스링크설명
Plugins Referencecode.claude.com/docs플러그인 레퍼런스 문서
Create Pluginscode.claude.com/docs플러그인 생성 가이드
Best PracticesAnthropic Engineering공식 모범 사례
Agent Skills 표준agentskills.io오픈 표준 사양

공식 저장소

리소스링크설명
anthropics/skillsGitHub공식 Skills 저장소
anthropics/claude-plugins-officialGitHub공식 플러그인 카탈로그
Docker MCP Toolkit공식 사이트200개 이상의 프리빌트 MCP

커뮤니티 리소스

리소스링크설명
claude-plugins.dev공식 사이트커뮤니티 레지스트리 및 CLI
awesome-claude-pluginsGitHub243개 플러그인 컬렉션
awesome-claude-codeGitHub모범 사례 모음
wshobson/agentsGitHub99개 에이전트 + 15개 오케스트레이터
jeremylongshore 튜토리얼GitHub수백 개 플러그인 + Jupyter 튜토리얼

추천 읽을거리

전망

Plugin 메커니즘으로 Claude Code의 확장 능력이 비약적으로 향상되었습니다. 커뮤니티의 발전과 함께 다음과 같은 변화를 기대할 수 있습니다:

  • 더 풍부한 플러그인 생태계: 다양한 개발 시나리오와 워크플로를 포괄
  • 엔터프라이즈급 기능: 더 완성도 높은 권한 관리 및 감사 기능
  • 크로스 플랫폼 호환성: Skills 오픈 표준이 이미 여러 벤더에 채택되고 있습니다

지금이야말로 시작하기에 최적의 시기입니다. 간단한 명령어부터 시작하여 점차 Skills와 Hooks를 추가하고, 궁극적으로 완전한 워크플로 솔루션을 구축해 보세요.

Plugin에 포함할 수 있는 Subagent 컴포넌트에 대해 자세히 알고 싶다면, 《Claude Code Subagent란 무엇인가》를 참조하세요.

댓글

목차

실전 가이드 | Yu의 사이버 데스크