技术深度分析报告

ADR-Tools

架构决策记录的命令行工具——
让重要的技术决策,像代码一样被版本管理。

github.com/npryce/adr-tools MIT Bash CLI

经典之作 · 源自 Michael Nygard 2011 年 ADR 文章 · ADR 实践的奠基工具

← 返回汇总
项目速览

一句话定义

给技术决策建一本账。

Bash
纯 shell 实现
.md
输出格式
0
运行时依赖
2011
理念诞生

轻量 CLI,把架构决策记录成 Markdown,随项目版本管理。

为什么存在

技术决策为什么丢失

核心理念

什么是架构决策记录

一份短文本,记录一个决策的来龙去脉。

ADR (Architecture Decision Record) 由 Michael Nygard 在 2011 年提出。它不是冗长文档,而是与代码同生命周期的短记录,纳入版本管理,随项目演进。

背景 Context

面临什么问题,约束是什么。

决策 Decision

选了什么方案,考虑过哪些备选。

后果 Consequences

带来什么影响,后续要注意什么。

长什么样

一条 ADR 的样子

doc/adr/0009-use-rust-for-performance.md

# 9. 使用 Rust 实现性能关键功能
Date
2026-07-07
Status
Accepted · Supersedes ADR 0007
Context
热点路径 Python 性能不足,需更低延迟。
Decision
用 Rust 重写热点模块,通过 FFI 集成。曾考虑 Go,但延迟更优。
Consequences
构建复杂度上升,需 Rust 工程师;性能提升 5x。
工具能力

CLI 工作流

# 1. 初始化 ADR 目录(自建首条记录)
adr init doc/architecture/decisions

# 2. 新建一条决策,自动编号 + 打开编辑器
adr new "Implement as Unix shell scripts"

# 3. 新决策取代旧决策(如取代 ADR 9)
adr new -s 9 "Use Rust for performance-critical functionality"
# ↑ 自动更新 ADR 9 状态为 Superseded,并互链

# 4. 查看帮助
adr help

生成的 Markdown 存于 doc/adr/,编号自增,支持决策间引用关系。

设计哲学

为什么是 Bash + Markdown

零依赖

纯 Bash,任何 Unix 系统开箱即用,无需 runtime。

纯文本

Markdown 输出,git 友好,diff 清晰,可全文检索。

与代码同源

ADR 存项目仓库内,决策与代码同步演进。

关系可追溯

支持 supersede / link,决策演化链清晰。

决策的生命周期

决策不是静态的

Proposed Accepted Deprecated Superseded

每条 ADR 有明确状态。新决策取代旧决策时,工具自动更新双方状态并建立链接,形成决策演化图谱

适用场景

适合谁用

理性看待

需要知道的

生态演进

ADR-Tools 的孩子们

作为奠基项目,它启发了大量多语言移植与增强工具。

BashTypeScriptPythonJava
项目语言特点
adr-tools(本作)原始经典
log4brains带 Web 预览,跨平台
adr-viewer可视化浏览 ADR
adr-jJVM 生态移植
潜力评估

未来空间

架构决策记录领域的奠基之作,价值稳定但不追求增长。它更像一种工程文化载体——工具可以换代(已有更现代的替代品),但 ADR 作为一种实践会长期存在。对个人,掌握 ADR 思维比用哪个工具更重要;对团队,引入 ADR 文化是提升决策质量的高杠杆动作。


上一个
12-Factor Agents
下一个
AgentMemory
1 / 12