在 Claude Code 裡玩轉 GitHub Spec Kit:一場規格驅動開發的探索之旅

在 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 很簡單,就一行指令:

curl -LsSf https://astral.sh/uv/install.sh | sh

執行之後,幾秒鐘就裝好了。終端機顯示:

installing to /Users/oliver/.local/bin
  uv
  uvx
everything's installed!

看到 everything's installed! 的時候還挺開心的,第一步很順利嘛。不過後面有個警告說 uvuvx 被 PATH 裡的其他指令覆蓋了。我猜是因為之前就裝過,所以暫時先不管它,反正能用就好。

安裝 Spec Kit:第一次踢到鐵板

有了 uv 之後,就可以開始裝 Spec Kit 了。根據官方文件,有兩種安裝方式:

  1. 持久安裝:用 uv tool install 裝在系統裡,之後隨時可以用
  2. 一次性使用:用 uvx 執行,用完就消失

我想說既然要認真試試看,那就裝個持久版本吧:

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 快。

裝好之後,當然要來初始化一個專案試試看。我打了這個指令:

specify init blog-project

結果呢,終端機跳出了一個選單,要我選擇要用哪個 AI 助手。畫面顯示了各種選項:copilot、claude、gemini、cursor 等等。看起來是要我用方向鍵選擇,然後按 Enter 確認。

問題來了。

在 Claude Code 這個環境裡,互動式選單根本沒辦法用。終端機直接噴了一大堆錯誤訊息:

error: (19, 'Operation not supported by device')

啊,原來是這樣。Claude Code 是個 AI 助手環境,不是真正的互動式終端機。它可以執行指令、看結果,但沒辦法用鍵盤上下鍵選東西。這種限制以前也遇過,只是沒想到在這裡又碰上了。

解決問題:查文件找答案

遇到問題怎麼辦?當然是看 help 啊。我執行了:

specify init --help

這次終端機乖乖地顯示了完整的使用說明。我仔細看了一下參數列表,果然找到解決方案:

--ai TEXT  AI assistant to use: claude, gemini, copilot, cursor...

原來可以直接用 --ai 參數指定要用哪個助手,不用經過互動式選單。這就好辦了!

我重新執行指令,這次加上參數:

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. 試試看那些選用的增強功能,像是 clarifyanalyze,看看它們能不能真的提升品質
  3. 比較一下用 Spec Kit 和不用 Spec Kit,開發同樣功能的時間和品質差異

有機會的話,再來寫一篇實戰經驗分享。

寫在最後

這次安裝 Spec Kit 的過程,讓我對「規格驅動開發」這個概念有了初步的認識。雖然過程中遇到了互動式選單的小問題,但也因此學到了一些東西。

回想起來,這個經驗讓我想到一句話:「工具只是工具,重要的是思考方式。」Spec Kit 提供了一個結構化的框架,但它不能代替你思考。你還是得自己想清楚要做什麼、為什麼做、怎麼做。它只是幫你把這些思考過程記錄下來,讓 AI 能更準確地理解你的意圖。

如果你也在用 AI 寫程式,也常常遇到「寫出來的跟想的不一樣」的問題,或許可以試試看 Spec Kit。它可能不是萬靈丹,但至少提供了一個值得嘗試的方向。

記得,如果你也是用 Claude Code 或類似的 AI 助手環境,遇到互動式選單的時候,先看看有沒有參數可以用。這個小技巧可以省下不少時間。

祝你探索愉快。


參考資源


本文最初發布於 HackMD @BASHCAT

留言

這個網誌中的熱門文章

Arduino 課本可能沒教的事(1)

SI4432 搭配Arduino

燒錄 Arduino mini Pro 燒錄