GoのYAMLライブラリ事情

長年デファクトだった gopkg.in/yamlgo-yaml/yaml、作者Gustavo Niemeyer氏、7k stars超)が2025年4月1日にアーカイブされ、read-only化した。作者本人は「2010年から10年以上メンテしてきたが、個人・職業両面で自由時間が限られてきた。小規模グループへの引き継ぎは不可能で、悪用・不安定化のリスクがある」と説明している。

これを受けて乗り換え先が2系統に分かれた。

goccy/go-yaml

  • 2019年登場の後発ライブラリ(作者 @goccy 氏の個人プロジェクト)
  • libyaml移植ではなく、YAML仕様ベースでGoからスクラッチ実装
  • Goらしいインターフェース
  • YAML Test Suite網羅率が高い(gopkg.in/yaml.v3比+60ケース、88% vs 73%、2024年12月時点)
  • comment/anchorを保持したreversibleな変換、YAML Path、リッチなエラー表示が特徴

go.yaml.in(YAML公式org継承フォーク)

  • go-yaml/yaml作者Niemeyer氏との協議の末、YAML公式チームが正式にフォーク・継承
  • 主要ダウンストリームプロジェクトの代表者を含むメンテナーチームを編成
  • import pathは go.yaml.in/yaml/v4
  • v1〜v3は凍結・セキュリティ修正のみとし、gopkg.in/yaml.vXからの移行を容易にする設計。新機能はすべてv4で開発
  • v4ではMarshal/Unmarshalに代わりLoad/Dumpという命名を採用(PyYAML等他言語との一貫性を意識)
  • Kubernetes(2025-06-26付けで正式採用)・Prometheusが既に移行済み

現状の使い分けの目安

  • 公式後継への安定した移行を求めるなら go.yaml.in/yaml/v4。Kubernetesという最大級の実績があり、gopkg.in/yaml.v3からの移行コストが低い
  • 仕様準拠度・エラーメッセージの質・新機能を重視するなら goccy/go-yaml。個人プロジェクトゆえのメンテナンス継続性は留保点だが、Kubernetes公式採用でエコシステム全体の不安はやや緩和された
  • 新規プロジェクトで理由なくgopkg.in/yaml.v2/v3を使い続けるのは避けたほうがよい(アーカイブ済みで更新されない)

考えたこと

songmuさんの記事をきっかけに調べた。songmuさんは記事内で「引き続きgoccy/go-yamlを使い、推していく」と結論づけていた。個人的にも、公式org継承版が出た今もgoccyが仕様準拠度やエラーメッセージの質で優位という点は引き続き注目に値すると感じた。

songmuさんのブログ記事:

https://songmu.jp/riji/entry/2025-06-26-go-yaml.html

#golang #yaml

出典

作成日時: 2026-08-15 06:50 / 更新日時: 2026-08-15 06:50