# 在 Claude Code 裡玩轉 GitHub Spec Kit:一場規格驅動開發的探索之旅 前幾天在 GitHub 上閒逛,看到一個有趣的專案叫 Spec Kit。標題寫著「Spec-Driven Development」,規格驅動開發?這概念聽起來挺新鮮的。我一直覺得寫程式就像蓋房子,先畫設計圖再動工總比邊蓋邊改來得靠譜。既然 GitHub 官方都推出這個工具了,那肯定有它的道理,不如就來試試看吧。 剛好我最近都在用 Claude Code 這個 AI 助手寫程式,想說直接在這個環境裡安裝應該挺方便的。結果呢,過程倒是遇到了一些小插曲,不過最後還是順利搞定了。這篇文章就來分享一下這段探索之旅,順便聊聊我對這種開發方式的一些想法。  ## Spec Kit 到底是什麼東西? 說實話,剛看到「規格驅動開發」這個詞的時候,我還真不太確定它跟 TDD(測試驅動開發)或 BDD(行為驅動開發)有什麼不一樣。後來查了一下資料才發現,原來 GitHub 推出這個工具是想解決一個很實際的問題:AI 寫程式雖然快,但常常會「理解偏差」。 你有沒有過這種經驗?跟 AI 說「幫我做個登入功能」,結果它給你寫了一堆程式碼,但跟你想的不太一樣。可能你想要的是 OAuth 登入,它卻給你做了傳統的帳號密碼。或者你想要簡單一點的介面,它卻搞得很複雜。這就是所謂的「vibe coding」問題,憑感覺寫程式,結果常常不如預期。 Spec Kit 的想法很簡單:在 AI 開始寫程式之前,先把需求講清楚。就像蓋房子一定要先有設計圖一樣,你不會跟建築師說「蓋個漂亮的房子」就讓他開始動工吧?你得先說清楚要幾個房間、什麼風格、預算多少,對吧? 根據 GitHub 官方部落格的說法,這個工具支援各種 AI 編碼助手,包括 GitHub Copilot、Claude Code、Gemini CLI 等等。它會引導你經過幾個階段: 1. **Constitution(建立原則)** - 確立專案的核心理念和限制 2. **Specification(詳細規格)** - 把需求寫清楚,越詳細越好 3. **Plan(技術規劃)** - 決定用什麼技術、怎麼實作 4. **Tasks(任務分解)** - 把大工程拆成小任務 5. **Implementation(開始實作)** - AI 才真正開始寫程式 這個流程聽起來挺嚴謹的,但實際上會不會太繁瑣呢?這得等我真的用過才知道。 ## 開始安裝:先裝個 uv Spec Kit 的安裝需要用到一個叫 `uv` 的工具。欸,這又是什麼東西?原來這是 Astral 公司開發的 Python 套件管理工具,用 Rust 寫的,號稱速度超快。 以前用 Python 的人都知道,`pip` 安裝套件有時候慢得要命,特別是依賴關係複雜的時候。`uv` 就是要來解決這個問題的。根據他們官方的說法,速度可以快 10 到 100 倍。聽起來有點誇張,但既然 Spec Kit 選用它,應該是真的有兩把刷子。 安裝 `uv` 很簡單,就一行指令: ```bash curl -LsSf https://astral.sh/uv/install.sh | sh ``` 執行之後,幾秒鐘就裝好了。終端機顯示: ``` installing to /Users/oliver/.local/bin uv uvx everything's installed! ``` 看到 `everything's installed!` 的時候還挺開心的,第一步很順利嘛。不過後面有個警告說 `uv` 和 `uvx` 被 PATH 裡的其他指令覆蓋了。我猜是因為之前就裝過,所以暫時先不管它,反正能用就好。 ## 安裝 Spec Kit:第一次踢到鐵板 有了 `uv` 之後,就可以開始裝 Spec Kit 了。根據官方文件,有兩種安裝方式: 1. 持久安裝:用 `uv tool install` 裝在系統裡,之後隨時可以用 2. 一次性使用:用 `uvx` 執行,用完就消失 我想說既然要認真試試看,那就裝個持久版本吧: ```bash uv tool install specify-cli --from git+https://github.com/github/spec-kit.git ``` 這次安裝過程稍微久一點,畢竟要從 GitHub 下載原始碼然後編譯。看著終端機跑了一堆訊息: ``` Resolved 20 packages in 483ms Building specify-cli @ git+https://github.com/github/spec-kit.git Built specify-cli... Installed 20 packages in 11ms ``` 看到這裡我想說,11 毫秒安裝 20 個套件?這速度也太扯了吧。難怪人家說 `uv` 快。 裝好之後,當然要來初始化一個專案試試看。我打了這個指令: ```bash specify init blog-project ``` 結果呢,終端機跳出了一個選單,要我選擇要用哪個 AI 助手。畫面顯示了各種選項:copilot、claude、gemini、cursor 等等。看起來是要我用方向鍵選擇,然後按 Enter 確認。 問題來了。 在 Claude Code 這個環境裡,互動式選單根本沒辦法用。終端機直接噴了一大堆錯誤訊息: ``` error: (19, 'Operation not supported by device') ``` 啊,原來是這樣。Claude Code 是個 AI 助手環境,不是真正的互動式終端機。它可以執行指令、看結果,但沒辦法用鍵盤上下鍵選東西。這種限制以前也遇過,只是沒想到在這裡又碰上了。 ## 解決問題:查文件找答案 遇到問題怎麼辦?當然是看 help 啊。我執行了: ```bash specify init --help ``` 這次終端機乖乖地顯示了完整的使用說明。我仔細看了一下參數列表,果然找到解決方案: ``` --ai TEXT AI assistant to use: claude, gemini, copilot, cursor... ``` 原來可以直接用 `--ai` 參數指定要用哪個助手,不用經過互動式選單。這就好辦了! 我重新執行指令,這次加上參數: ```bash specify init blog-project --ai claude ``` 這次終端機顯示了一個漂亮的進度畫面,而且還有 ASCII 藝術字: ``` ███████╗██████╗ ███████╗ ██████╗██╗███████╗██╗ ██╗ ██╔════╝██╔══██╗██╔════╝██╔════╝██║██╔════╝╚██╗ ██╔╝ ███████╗██████╔╝█████╗ ██║ ██║█████╗ ╚████╔╝ ╚════██║██╔═══╝ ██╔══╝ ██║ ██║██╔══╝ ╚██╔╝ ███████║██║ ███████╗╚██████╗██║██║ ██║ ╚══════╝╚═╝ ╚══════╝ ╚═════╝╚═╝╚═╝ ╚═╝ GitHub Spec Kit - Spec-Driven Development Toolkit ``` 看到這個我就知道成功了。後面接著顯示初始化的各個步驟: ``` Initialize Specify Project ├── ● Check required tools (ok) ├── ● Select AI assistant (claude) ├── ● Fetch latest release (release v0.0.58) ├── ● Download template ├── ● Extract template ├── ● Ensure scripts executable ├── ● Initialize git repository └── ● Finalize (project ready) Project ready. ``` 每一步都打勾通過,最後顯示 `Project ready.`,這感覺真好。就像玩遊戲解完一個任務一樣,有種成就感。  ## 探索功能:斜線命令系統 安裝完成後,Spec Kit 給了一堆說明。最引人注目的是它提供的斜線命令系統。這讓我想到遊戲裡的快捷指令,打個 `/help` 就能看到所有可用功能,很直覺。 核心工作流程有五個命令: 1. **`/speckit.constitution`** - 建立專案的核心原則 2. **`/speckit.specify`** - 撰寫詳細規格 3. **`/speckit.plan`** - 規劃技術架構 4. **`/speckit.tasks`** - 產生任務清單 5. **`/speckit.implement`** - 開始實作 除了這些核心命令,還有一些選用的增強功能: - **`/speckit.clarify`** - 在規劃前先釐清模糊的需求 - **`/speckit.analyze`** - 檢查各個文件之間的一致性 - **`/speckit.checklist`** - 產生品質檢查清單 這個設計挺聰明的。核心流程很清楚,但如果你想要更嚴謹一點,可以加上那些選用功能。就像寫文章一樣,基本的起承轉合一定要有,但要不要加個引言、加個註解,就看你的需求了。 不過 Spec Kit 也很貼心地提醒了一件事:`.claude/` 資料夾可能會存放一些敏感資訊,像是認證 token 之類的,建議加到 `.gitignore` 裡面。這個提醒很重要,不然一不小心把私密資料推上 GitHub 就糗大了。 ## 實際感受:這種開發方式適合誰? 裝完 Spec Kit 之後,我還沒真正用它做過完整的專案,但從這個安裝過程和文件說明來看,我覺得這個工具有幾個有趣的地方。 首先,它強迫你在寫程式之前先想清楚。這聽起來很理所當然,但實際上有多少人(包括我自己)是邊寫邊想的?特別是用 AI 寫程式的時候,很容易就陷入「試試看這樣寫會不會 work」的循環。Spec Kit 的流程讓你慢下來,先把需求講清楚。 其次,它提供了一個結構化的思考框架。Constitution、Specification、Plan、Tasks 這幾個階段,其實就是在幫你釐清:「我為什麼要做這個?」「我要做什麼?」「我要怎麼做?」「具體步驟是什麼?」這種思考方式不只適用於寫程式,做任何專案都能用。 不過說實話,我也有點擔心它會不會太繁瑣。如果只是寫個小工具、做個簡單的功能,需要經過這麼多步驟嗎?可能對於大型專案、需要多人協作的情況,這種嚴謹的流程才真正發揮價值。 還有一個有趣的觀察:在 Claude Code 這種 AI 助手環境裡使用 Spec Kit,某種程度上是「AI 幫你用 AI」。你用 Claude 執行 Spec Kit 的指令,然後 Spec Kit 又引導 Claude 按照規格寫程式。這種雙層 AI 協作的方式還挺新鮮的,不知道實際用起來會是什麼感覺。 ## 一些技術細節的補充 在安裝過程中,我也學到了一些有趣的技術知識。 **關於 uv 這個工具**:它不只是快而已。根據 Astral 官方的說法,uv 的野心是成為「Python 的 Cargo」(Cargo 是 Rust 的套件管理工具,公認做得很好)。它不只能裝套件,還能管理 Python 版本、建立虛擬環境、發布套件,基本上想成為 Python 開發的一站式解決方案。 **關於互動式命令行的限制**:這次遇到的問題其實滿有啟發性的。很多命令行工具都會用互動式選單,看起來很友善,但在某些環境下(像是 CI/CD、Docker 容器、或者像 Claude Code 這種 AI 助手)就會碰壁。好的工具應該同時提供互動式和非互動式兩種使用方式,Spec Kit 就做到了這點。 **關於斜線命令**:這個概念其實不算新,Discord、Slack 這些工具早就在用了。但把它應用到開發工作流程上,讓 AI 助手能夠理解和執行這些結構化的命令,這個想法很聰明。它把複雜的操作包裝成簡單的指令,降低了使用門檻。 ## 接下來想試試看的 雖然目前只是把 Spec Kit 裝起來,還沒真正用它做過完整專案,但我已經有一些想法想要實驗: 1. 用它來重構一個現有的小專案,看看「補寫規格」的過程是什麼感覺 2. 試試看那些選用的增強功能,像是 `clarify` 和 `analyze`,看看它們能不能真的提升品質 3. 比較一下用 Spec Kit 和不用 Spec Kit,開發同樣功能的時間和品質差異 有機會的話,再來寫一篇實戰經驗分享。 ## 寫在最後 這次安裝 Spec Kit 的過程,讓我對「規格驅動開發」這個概念有了初步的認識。雖然過程中遇到了互動式選單的小問題,但也因此學到了一些東西。 回想起來,這個經驗讓我想到一句話:「工具只是工具,重要的是思考方式。」Spec Kit 提供了一個結構化的框架,但它不能代替你思考。你還是得自己想清楚要做什麼、為什麼做、怎麼做。它只是幫你把這些思考過程記錄下來,讓 AI 能更準確地理解你的意圖。 如果你也在用 AI 寫程式,也常常遇到「寫出來的跟想的不一樣」的問題,或許可以試試看 Spec Kit。它可能不是萬靈丹,但至少提供了一個值得嘗試的方向。 記得,如果你也是用 Claude Code 或類似的 AI 助手環境,遇到互動式選單的時候,先看看有沒有參數可以用。這個小技巧可以省下不少時間。 祝你探索愉快。 --- **參考資源** - [GitHub Spec Kit 官方 Repository](https://github.com/github/spec-kit) - [GitHub 官方部落格:Spec-driven development with AI](https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/) - [uv 官方文件](https://docs.astral.sh/uv/) - [Astral 關於 uv 的介紹文章](https://astral.sh/blog/uv)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up