Go の TOML パーサ選定(BurntSushi/toml)

一言まとめ

Go 標準ライブラリに TOML パーサは無い。`github.com/BurntSushi/toml` は TOML 仕様の共著者が書いた事実上の標準で、`toml.DecodeFile` だけで足り、推移的依存が無い。pelletier/go-toml v2 は API が広く依存も多い。手書きは TOML v1.0 の複雑さ(日時型・インラインテーブル・ドット付きキー)に見合わない。

作成 · 更新 · #go#toml#config
目次 4 sections
  1. 01 選定
  2. 02 採らなかった選択肢
  3. 03 関連
  4. 04 更新履歴

調査時点: 2026-04。公開 OSS の mask-pipe(github.com/c12o-dev/mask-pipe)が設定ファイルの読み込みに最初の外部依存を足したときの ADR から。

TOML(Tom’s Obvious, Minimal Language)は、人が読み書きしやすい設定ファイル用のデータ形式。キーと値、セクション、コメントが書ける。

選定#

github.com/BurntSushi/toml(v1.x)。

観点内容
位置づけGo の TOML パーサの事実上の標準。TOML 仕様の共著者が作者
APItoml.DecodeFile だけで足りる最小 API。推移的依存なし
仕様準拠TOML v1.0 に完全準拠
保守v1 API が安定しており、活発に保守されている
コスト外部依存が 1 つ増え、バイナリサイズが約 200KB 増える。pure Go で syscall を持たないので、セキュリティ修正の追従リスクは低い

採らなかった選択肢#

  • pelletier/go-toml v2: 性能はよいが API 面が広く、推移的依存が多い。単純な設定ファイルでは利点が出ない。
  • 自前パーサ: TOML v1.0 は見た目より複雑(日時型、インラインテーブル、ドット付きキー)。労力とバグに見合わない。
  • JSON / YAML に変える: 人が編集する設定ファイルにはコメントが書けて読みやすい TOML のほうが合う。

関連#

更新履歴#

  • 2026-04-17: 初版(mask-pipe ADR-0005)
  • 2026-10-17: Wiki へ移植、概念ページとして再構成。冒頭に定義を追加

同じトピック — CLI