Vibe Coder

程式碼品質與 Linting:用 Ruff 讓 AI 寫的程式碼更好讀

程式碼品質有三個層次:能跑、能讀、能改。AI 幫你做到「能跑」很容易,但命名清楚、格式一致才能讓你三個月後還看得懂。用 Ruff 做 Linting 和格式化,搭配清楚的命名原則與 pre-commit 自動把關,就能讓 AI 生成的程式碼維持在能長期維護的品質。
程式碼品質與 Linting:用 Ruff 讓 AI 寫的程式碼更好讀

程式碼品質與 Linting:用 Ruff 讓 AI 寫的程式碼更好讀

AI 生成的程式碼有時候命名很隨意、格式不一致,你需要能識別出來並且改正。這篇帶你用 Ruff 這套 Python 最快的 Linter,搭配清楚的命名原則和 pre-commit 自動把關,把「能跑」的程式碼變成「能讀、能改」的程式碼。

你將學到什麼

程式碼品質三層次

能跑、能讀、能改,AI 幫你做到第一層,剩下兩層要靠習慣。

Ruff 設定與指令

比 flake8 快一百倍的 Linter,一次設定存檔自動格式化。

命名原則

從模糊的 data、temp 到自我說明的 temperature,一張對照表看懂差在哪。

pre-commit 自動把關

設定一次,之後每次 commit 前自動跑 Ruff,不用手動記得檢查。

為什麼程式碼品質重要

程式碼品質有三個層次:

  1. 能跑(Functional):功能正確,最基本的要求。AI 幫你做到這層很容易。
  2. 能讀(Readable):命名清楚,結構整齊,邏輯流暢。這層讓你三個月後還能維護。
  3. 能改(Maintainable):模組化,低耦合,有測試。這層讓你加新功能不怕把舊的搞壞。
能跑 Functional功能正確,最基本的要求能讀 Readable命名清楚,結構整齊能改 Maintainable模組化,有測試
程式碼品質的三個層次,由下而上疊加:能跑、能讀、能改。

Ruff:Python 的最快 Linter

Ruff 是用 Rust 寫的 Python Linter,比 flake8 快一百倍,同時整合了格式化和 import 排序。

# pyproject.toml
[tool.ruff]
line-length = 88
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "I", "UP"]
# E: PEP8 風格  F: 未使用變數等  I: import 排序  UP: 升級語法

[tool.ruff.format]
quote-style = "double"
# 檢查問題
ruff check .

# 自動修正(大部分問題)
ruff check . --fix

# 格式化程式碼
ruff format .

# VS Code / Cursor:存檔自動 Ruff
# 安裝 Ruff 擴充套件,settings.json 加入:
"[python]": {"editor.defaultFormatter": "charliermarsh.ruff",
  "editor.formatOnSave": true}

命名原則:讓程式碼自我說明

情況不好的命名好的命名
變數x、temp、datatemperature、weather_data
函式do_thing、processget_weather_by_city
布林值flag、statusis_authenticated、has_error
常數n = 10MAX_RETRY_COUNT = 10
類別MyClassWeatherQueryService

Python 命名慣例(PEP 8):

類型慣例例子
變數、函式snake_caseuser_id、get_weather
類別PascalCaseWeatherService
常數UPPER_SNAKEAPI_BASE_URL
私有前綴底線_internal_cache

程式碼審查的重點

審查 AI 生的程式碼時,用這個順序檢查:

  1. 邏輯正確性:它做了你要它做的事嗎?邊界情況有沒有處理?
  2. 命名清楚:變數和函式名稱能自我說明嗎?
  3. 錯誤處理:API 呼叫失敗、空值、型別錯誤,有沒有適當的處理?
  4. 重複程式碼:同樣的邏輯出現了幾次?可以抽成函式嗎?
  5. 資安:有沒有 SQL Injection、敏感資料外洩等問題?

pre-commit:存檔自動品質把關

.pre-commit-config.yaml

repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.4.0
    hooks:
      - id: ruff
        args: [--fix]
      - id: ruff-format
pip install pre-commit
pre-commit install  # 之後每次 git commit 自動跑
先設定,再依賴自己記得不要指望自己每次都記得手動跑 Ruff。設定好 pre-commit 之後,品質把關就變成自動發生的事,不需要靠意志力維持。

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

為什麼要在意程式碼品質,能跑不就好了?
能跑只是最基本的要求。命名清楚、結構整齊的程式碼,三個月後回來看能在三秒內理解;命名混亂的,三分鐘都理解不了,這直接影響你之後能不能安心加新功能。
Ruff 跟其他 Linter 有什麼不同?
Ruff 是用 Rust 寫的 Python Linter,比 flake8 快一百倍,同時整合了格式化和 import 排序,一套工具做完以前要裝好幾個套件才能做的事。
審查 AI 生的程式碼要照什麼順序檢查?
建議依序檢查邏輯正確性、命名是否清楚、錯誤處理是否完整、有沒有重複程式碼,最後是資安相關問題,例如 SQL Injection 或敏感資料外洩。
pre-commit 會不會讓 commit 變麻煩?
設定一次之後幾乎無感:commit 前自動跑 Ruff,有能自動修正的問題會直接修好,你只需要再 add 一次就能繼續 commit,反而省下手動檢查的時間。