Go の TOML パーサ選定(BurntSushi/toml)
一言まとめ
Go 標準ライブラリに TOML パーサは無い。`github.com/BurntSushi/toml` は TOML 仕様の共著者が書いた事実上の標準で、`toml.DecodeFile` だけで足り、推移的依存が無い。pelletier/go-toml v2 は API が広く依存も多い。手書きは TOML v1.0 の複雑さ(日時型・インラインテーブル・ドット付きキー)に見合わない。
目次 4 sections
調査時点: 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 仕様の共著者が作者 |
| API | toml.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 へ移植、概念ページとして再構成。冒頭に定義を追加