SpecKit 完整学习指南
目录
什么是 SpecKit
SpecKit 是由 GitHub 开源的规范驱动开发(Spec-Driven Development, SDD)工具包,它通过将”规范变为可执行”的方式,彻底改变了传统的软件开发流程。
核心理念
传统开发流程:需求 → 编码 → 测试 → 文档
SpecKit 开发流程:规范 → AI 执行 → 自动实现 → 持续演进
主要特点
- 规范即源码:规范不再是一次性的设计文档,而是项目的核心资产
- AI 原生:深度集成 14+ 种 AI 编码助手(Claude Code, GitHub Copilot, Cursor 等)
- 结构化开发:通过明确的阶段和命令,确保开发过程可控、可追溯
- 开源免费:MIT 许可证,GitHub 28K+ stars
核心概念
Spec-Driven Development (SDD)
规范驱动开发是一种以规范为中心的开发方法论,包含三个层次:
1. Spec-First(规范优先)
在开发之前编写详细的规范文档,用于指导 AI 辅助开发。
2. Spec-Anchored(规范锚定)
开发完成后保留规范,用于功能演进和维护。
3. Spec-as-Source(规范即源码)
规范成为唯一的源文件,人类只修改规范,AI 负责更新代码。
系统架构
整体架构图
架构层次说明
1. 开发者层
- 开发者通过 CLI 或 AI 助手与 SpecKit 交互
- AI 助手负责理解规范并生成代码
2. SpecKit 核心
- Specify CLI: 命令行工具,提供项目初始化和检查功能
- Slash Commands: 结构化命令集,控制开发流程各阶段
- 模板系统: 提供标准化的文档模板
3. 规范体系
五个核心制品(Artifacts),形成完整的规范链:
- Constitution → Specification → Plan → Tasks → Implementation
4. 输出产物
根据规范自动生成的代码、测试和文档
核心组件
组件关系图
1. 基础命令(CLI)
specify init <project-name>
初始化新项目,创建 .speckit/ 目录和配置文件。
功能:
- 创建项目骨架
- 配置 AI 助手集成
- 生成默认模板
示例:
specify init my-app
specify check
检查系统环境和依赖。
功能:
- 验证 AI 助手配置
- 检查必要工具安装
- 显示当前项目状态
2. 核心命令(Slash Commands)
/speckit.constitution
定义项目的不可协商规则和开发指南。
用途:
- 编码规范(代码风格、命名约定)
- 架构原则(DRY、SOLID 等)
- 安全要求
- 性能标准
- 测试策略
示例内容:
/speckit.specify
描述要构建的功能,关注”是什么”和”为什么”。
关键要素:
- 用户故事
- 功能需求
- 非功能需求
- 边界条件
- 验收标准
示例:
/speckit.clarify
通过系统化提问消除规范中的模糊性。
工作方式:
- AI 自动识别不明确的需求
- 提出具体的澄清问题
- 记录答案到 Clarifications 部分
示例交互:
AI: 关于"账户锁定"功能,请澄清:
1. 锁定持续时间是多久?
2. 锁定后是否发送通知邮件?
3. 管理员是否可以手动解锁账户?
Developer:
1. 锁定 30 分钟后自动解锁
2. 发送包含解锁链接的通知邮件
3. 管理员可通过后台解锁
AI: 已记录澄清内容到 specification.md
/speckit.plan
制定技术实现方案,选择技术栈和架构。
包含内容:
- 技术栈选型
- 系统架构设计
- 数据模型设计
- API 设计
- 第三方集成方案
示例:
/speckit.tasks
将计划分解为可执行的独立任务。
任务特征:
- 原子性:每个任务独立完成一个功能点
- 可测试:每个任务都有明确的验证标准
- 有序性:任务按依赖关系排序
- 并行标记:使用
[P]标记可并行执行的任务
示例:
/speckit.implement
执行所有任务,构建功能。
执行策略:
- 按照任务顺序逐个实现
- 在每个检查点验证测试通过
- 遵循 TDD(测试驱动开发)原则
工作流程:
- 读取
tasks.md - 按顺序执行每个任务
- 运行相关测试验证
- 记录实现进度
- 处理依赖关系
3. 辅助命令
/speckit.analyze
验证规范、计划和任务之间的一致性。
检查项:
- 规范中的需求是否都有对应任务
- 任务是否符合技术方案
- 是否存在冲突或遗漏
/speckit.checklist
生成质量验证清单。
清单内容:
- 功能完整性检查
- 代码质量标准
- 安全性检查
- 性能基准测试
- 文档完整性
工作流程
完整开发流程图
阶段详解
阶段 1:基础建设(Foundation)
目标:建立清晰、无歧义的项目基础
输出:
constitution.md- 项目原则specification.md- 功能规范clarifications.md- 需求澄清
阶段 2:技术设计(Design)
目标:制定详细的技术实现方案
输出:
plan.md- 完整技术方案
阶段 3:任务分解(Breakdown)
目标:将大型功能分解为可管理的小任务
输出:
tasks.md- 结构化任务列表
阶段 4:自动实现(Implementation)
目标:自动化代码生成和测试验证
输出:
- 源代码
- 测试代码
- 文档
迭代式开发流程
安装与配置
系统要求
- Python: 3.8+ (用于 Specify CLI)
- uv: Python 包管理器
- Git: 版本控制
- AI 助手: 以下任意一种
- Claude Code
- GitHub Copilot
- Cursor
- Windsurf
- Gemini CLI
- Qwen Code
- 其他支持自定义命令的 AI 编码助手
安装步骤
1. 安装 uv 包管理器
macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows:
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
2. 安装 SpecKit CLI
持久化安装(推荐):
uv tool install specify-cli --from git+https://github.com/github/spec-kit.git
一次性运行:
uvx --from git+https://github.com/github/spec-kit.git specify-cli init my-project
3. 验证安装
specify --version
specify check
项目初始化
创建新项目
# 初始化项目
specify init my-awesome-app
# 进入项目目录
cd my-awesome-app
# 查看生成的结构
tree .speckit
生成的目录结构:
my-awesome-app/
├── .speckit/
│ ├── commands/
│ │ ├── constitution.md
│ │ ├── specify.md
│ │ ├── clarify.md
│ │ ├── plan.md
│ │ ├── tasks.md
│ │ ├── implement.md
│ │ ├── analyze.md
│ │ └── checklist.md
│ ├── templates/
│ │ ├── constitution.template.md
│ │ ├── specification.template.md
│ │ ├── plan.template.md
│ │ └── tasks.template.md
│ └── config.yml
└── README.md
配置 AI 助手
Claude Code 配置
在 Claude Code 中,SpecKit 的命令会自动识别,无需额外配置。
GitHub Copilot 配置
确保安装了 GitHub Copilot Chat 扩展,命令会自动可用。
Cursor 配置
- 打开 Cursor 设置
- 启用自定义命令支持
- SpecKit 命令会自动加载
使用指南
快速开始示例
让我们通过一个完整的例子来演示 SpecKit 的使用。
场景:构建一个待办事项 API
Step 1: 初始化项目
specify init todo-api
cd todo-api
Step 2: 定义项目宪法
在 AI 助手中执行:
/speckit.constitution
AI 会引导你定义项目原则,示例输入:
我们要构建一个 RESTful 待办事项 API,请遵循以下原则:
- 使用 Node.js + TypeScript + Express
- 遵循 SOLID 原则和 Clean Architecture
- 所有 API 使用 OpenAPI 3.0 规范
- 单元测试覆盖率 > 80%
- 使用 JWT 进行身份验证
- 所有响应使用标准 JSON 格式
- 错误处理遵循 RFC 7807(Problem Details)
生成的 constitution.md:
Step 3: 编写功能规范
执行:
/speckit.specify
输入需求:
我需要实现待办事项的 CRUD 功能:
- 用户可以创建、查看、更新、删除待办事项
- 每个待办事项包含:标题、描述、状态(待办/完成)、创建时间、更新时间
- 用户只能操作自己的待办事项
- 支持按状态筛选
- 支持分页查询
生成的 specification.md:
Step 4: 澄清需求
执行:
/speckit.clarify
AI 会提出问题,示例:
AI: 我需要澄清以下细节:
1. 对于"标题最大 200 字符",是按字符计数还是字节?是否包含 emoji?
2. 删除待办事项是硬删除还是软删除(标记为已删除但保留数据)?
3. 分页查询时,如果请求的页码超出范围,应该返回什么?
4. 是否需要待办事项的搜索功能(按标题/描述搜索)?
5. JWT token 的过期时间是多久?
Developer 回答:
1. 按 Unicode 字符计数,支持 emoji
2. 硬删除,直接从数据库删除
3. 返回空数组,不报错
4. 暂时不需要,后续版本再加
5. Access token 1小时,Refresh token 7天
AI 会将澄清内容追加到 specification.md。
Step 5: 制定技术方案
执行:
/speckit.plan
生成的 `plan.md`:
Step 6: 分解任务
执行:
/speckit.tasks
生成的 `tasks.md`:
Step 7: 执行实现
执行:
/speckit.implement
AI 会按照任务顺序逐个实现,示例输出:
开始执行任务...
✓ Task 1.1: Initialize project structure [完成]
- 创建 package.json
- 配置 TypeScript
- 设置 ESLint 和 Prettier
✓ Task 1.2: Configure Prisma and database [完成]
- 创建 Prisma schema
- 配置数据库连接
✓ Task 1.3: Create database migration [完成]
- 生成初始迁移
- 应用迁移到数据库
✓ Task 2.1: Implement error handling middleware [完成]
- 创建错误中间件
- ✓ 5/5 单元测试通过
...
✓ Task 4.5: Create Todo routes [完成]
- 定义 API 路由
- ✓ 12/12 集成测试通过
✓ Task 5.1: Create Express application [完成]
- 配置 Express 应用
- 整合所有路由和中间件
🎉 所有任务已完成!
测试覆盖率: 85.3%
总测试数: 67
通过: 67
失败: 0
最佳实践
1. 规范编写最佳实践
✅ 好的规范
## User Story: Password Reset
**As a** registered user
**I want** to reset my password via email
**So that** I can regain access if I forget my password
**Acceptance Criteria**:
- [ ] User requests reset by providing email
- [ ] System sends reset link valid for 1 hour
- [ ] Link contains secure token (JWT with email claim)
- [ ] User can set new password (minimum 8 chars, 1 uppercase, 1 number)
- [ ] Old password immediately invalidated
- [ ] User receives confirmation email after reset
**Edge Cases**:
- Email not found → Show generic success message (security)
- Token expired → Show error with option to request new link
- Token already used → Show error`}
client:only="react"
/>
#### ❌ 差的规范
```markdown
## Password Reset
Users should be able to reset password somehow.
Send an email with a link.
问题:
- 缺少验收标准
- 没有明确的用户故事格式
- 未定义安全要求
- 没有边界条件
2. 任务分解最佳实践
✅ 好的任务
❌ 差的任务
### Task: Add password reset
Implement password reset functionality.
**Files**: Some service files
**Test**: Make sure it works
问题:
- 文件路径不明确
- 没有依赖关系
- 测试标准模糊
- 缺少详细步骤
3. 测试驱动开发(TDD)
推荐流程:
示例:
4. 持续演进策略
Spec-as-Source 工作流
优势:
- 规范始终是最新的
- 减少代码审查时间(关注规范而非实现细节)
- 更容易onboard新成员
- 规范可用于生成文档、测试等
5. 团队协作最佳实践
规范审查流程
审查重点:
- 规范清晰度(其他人能理解吗?)
- 任务完整性(有遗漏吗?)
- 测试覆盖率(关键路径都测了吗?)
- 向后兼容性(会破坏现有功能吗?)
6. 常见陷阱和解决方案
陷阱 1: 规范过于宽泛
❌ 差的规范:
"用户应该能够管理待办事项"
✅ 好的规范:
"用户可以创建、查看、更新、删除自己的待办事项。
每个待办事项包含标题(必填,最多200字符)、描述(可选,最多2000字符)、
状态(待办/完成)。用户只能看到和操作自己创建的待办事项。"
陷阱 2: 忽略边界条件
❌ 缺少边界条件:
"API 返回待办事项列表"
✅ 包含边界条件:
"API 返回待办事项列表,支持分页(默认20条/页,最多100条/页)。
如果请求页码超出范围,返回空数组。
如果用户没有待办事项,返回空数组而非404。"
陷阱 3: 任务粒度不当
❌ 任务太大:
"Task: 实现整个待办事项系统"
✅ 任务合理:
"Task 4.1: 创建 Todo Repository(数据访问层)"
"Task 4.2: 实现 Todo Service(业务逻辑层)"
"Task 4.3: 创建 Todo Controller(控制器层)"
陷阱 4: 过早优化
❌ 在规范阶段讨论实现细节:
"使用 Redis 缓存所有查询结果以提高性能"
✅ 在计划阶段决定技术方案:
Specification: "API 响应时间应 < 200ms"
Plan: "使用 Redis 缓存热点数据,TTL 5分钟"
实战案例
案例 1: 微服务架构项目
场景: 构建电商平台的订单服务
Constitution 片段
# Order Service Constitution
## Microservices Principles
- Service owns its database (no shared databases)
- Communicate via async messaging (RabbitMQ)
- API Gateway for external access
- Circuit breaker for fault tolerance
- Distributed tracing with OpenTelemetry
## Event-Driven Architecture
- Publish domain events to message broker
- Event sourcing for order state changes
- CQRS pattern for read/write separation
Specification 片段
## US-1: Place Order
**Acceptance Criteria**:
- [ ] Validate inventory via Product Service (sync HTTP)
- [ ] Reserve inventory via InventoryReserved event
- [ ] Calculate total via Pricing Service (sync HTTP)
- [ ] Process payment via Payment Service (async)
- [ ] Publish OrderPlaced event
- [ ] Implement saga pattern for distributed transaction
- [ ] Rollback on any step failure
Plan 片段
案例 2: 前端应用开发
场景: 使用 React + TypeScript 构建仪表板
Constitution 片段
Tasks 片段
案例 3: CLI 工具开发
场景: 构建代码生成器 CLI
Specification 片段
总结
SpecKit 的核心价值
适用场景
✅ 非常适合:
- 新功能开发
- API 服务构建
- 微服务架构
- 大型重构
- 团队协作项目
⚠️ 需要调整:
- 快速原型(可简化为 Spec-First)
- 紧急 bug 修复(先修复再补规范)
- 实验性项目(规范可以更轻量)
❌ 不太适合:
- 一次性脚本
- 简单配置修改
- 文档更新
学习路径建议
进一步学习资源
- 官方文档: speckit.org
- GitHub 仓库: github.com/github/spec-kit
- 示例项目: github.com/github/spec-kit/tree/main/examples
- 社区讨论: GitHub Discussions
- 视频教程: Microsoft Developer Blog
附录
A. 命令速查表
| 命令 | 用途 | 输出文件 |
|---|---|---|
specify init | 初始化项目 | .speckit/ 目录 |
specify check | 检查环境 | 终端输出 |
/speckit.constitution | 定义项目原则 | constitution.md |
/speckit.specify | 编写功能规范 | specification.md |
/speckit.clarify | 澄清需求 | 更新 specification.md |
/speckit.plan | 制定技术方案 | plan.md |
/speckit.tasks | 分解任务 | tasks.md |
/speckit.implement | 执行实现 | 源代码 + 测试 |
/speckit.analyze | 一致性检查 | 终端输出 |
/speckit.checklist | 质量清单 | checklist.md |
B. 常见问题
Q: SpecKit 是否支持非英语? A: 支持。规范文档可以使用任何语言,AI 助手会根据其训练数据理解。
Q: 是否必须使用所有命令? A: 不是。核心流程是 specify → plan → tasks → implement,其他命令可选。
Q: 如何处理遗留项目? A: 可以逐步引入。先为新功能编写规范,再逐渐覆盖现有代码。
Q: SpecKit 与传统 PRD 的区别? A: PRD 是一次性文档,SpecKit 的规范是可执行的、持续演进的源文件。
Q: 是否可以自定义命令?
A: 可以。修改 .speckit/commands/ 目录下的命令文件即可。
C. 工具对比
| 特性 | SpecKit | 传统开发 | 低代码平台 |
|---|---|---|---|
| 灵活性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 开发速度 | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| 代码质量 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 学习曲线 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
| AI 集成 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ |
| 可维护性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
版本: 1.0.0 最后更新: 2025-01-15 贡献者: SpecKit Community
本文档基于 SpecKit 官方文档和社区最佳实践编写,持续更新中。