YAML 簡介與入門教學

在現代的開發流程中,我們經常需要與各種設定檔打交道。無論是 GitHub Actions 的工作流、Docker Compose 的容器編排,還是 Kubernetes 的資源定義,你都會看到 YAML 的身影。

YAML 已經成為處理複雜資料與設定的首選格式之一,其最核心的魅力在於它對人類非常友善。

什麼是 YAML?

YAML 是「YAML Ain't Markup Language」(YAML 不是標記語言)的遞迴縮寫。雖然它的名字裡說自己不是標記語言,但它確實被廣泛用來表達資料的結構性。

與傳統的 XML 或是 JSON 相比,YAML 的設計更加注重可讀性簡潔性。它使用「縮排」來表示資料層級,減少了大量的括號、標注與引號,讓設定檔看起來更像是清晰的大綱。

YAML 起初的含義是 "Yet Another Markup Language",但後來為了強調其以「資料」為核心而非傳統文件的標記,才改為現有的遞迴縮寫。

為什麼要使用 YAML?

YAML 如此受歡迎,主要有以下幾個優點:

  1. 極高的可讀性:即使是非技術人員,也能一眼看出資料的階層關係。
  2. 層級結構清晰:透過強制縮排,資料的父子關係一目了然。
  3. 語法精簡:不需要處理 JSON 的大括號 {} 或 XML 的標籤 <tag></tag>
  4. 強大的資料表達能力:支援進階的資料引用(錨點與別名)、多行字串處理等功能。
  5. 廣泛的軟體支援:現今主流的程式語言(如 Python, Go, Java, Node.js)都有成熟的函式庫來解析 YAML。

YAML 的常見用途

如果你是開發者或 DevOps 工程師,你幾乎無法避開 YAML:

  • 軟體設定檔:例如 Spring Boot (application.yml)、Ruby on Rails 的資料庫配置。
  • CI/CD 流水線:GitHub Actions (.github/workflows/*.yml)、GitLab CI。
  • 基礎設施即程式碼 (IaC):Kubernetes 的 Deployment 文件、Docker Compose (docker-compose.yml)。
  • 資料交換:雖然 JSON 在 API 交換中佔主導地位,但在需要人工頻繁編輯的資料場景下,YAML 是更好的選擇。

YAML 與 JSON 的關係

值得一提的是,YAML 1.2 是 JSON 的超集。這意味著任何有效的 JSON 檔案,理論上都是合法的 YAML 檔案。

# 這是 YAML 的寫法
server:
  port: 8080
  name: "My Server"

# 這是同樣意思的 JSON 寫法
{
  "server": {
    "port": 8080,
    "name": "My Server"
  }
}

可以看到,YAML 透過移除多餘的符號,大幅提升了視覺上的清爽度。