ToolDeck

จัดรูปแบบ TOML

จัดรูปแบบและตรวจสอบไฟล์คอนฟิก TOML

ลองตัวอย่าง

ข้อมูล TOML

TOML ที่จัดรูปแบบแล้ว

ประมวลผลในเครื่อง · ปลอดภัยในการวางข้อมูลลับ
TOML ที่จัดรูปแบบแล้วจะปรากฏที่นี่…
ลองดูด้วย:TOML เป็น JSON

อัปเดตล่าสุด: เมษายน 2569

TOML Formatting คืออะไร?

TOML (Tom's Obvious Minimal Language) คือรูปแบบไฟล์ config ที่สร้างโดย Tom Preston-Werner ในปี 2013 มันแมปตรงกับ hash table และใช้การกำหนดประเภทที่ชัดเจนสำหรับทุก value ตัวจัดรูปแบบ TOML รับ TOML ดิบหรือที่มีรูปแบบไม่สม่ำเสมอแล้ว serialize ใหม่ด้วย spacing ที่สม่ำเสมอ indentation ที่ถูกต้อง และการจัดลำดับ key แบบ canonical ผลลัพธ์คือไฟล์ที่ปฏิบัติตามข้อตกลงเดียวกันทั่วทั้งโปรเจกต์ ทำให้การเปลี่ยน config ตรวจสอบใน diff ได้ง่ายขึ้น

TOML v1.0.0 specification ที่เสร็จสมบูรณ์ในเดือนมกราคม 2021 กำหนด grammar อย่างเข้มงวดพอที่ parser ที่สอดคล้องใดก็ตามจะสร้างโครงสร้างข้อมูลที่เหมือนกันจาก input เดียวกัน การจัดรูปแบบไม่เปลี่ยนเนื้อหาเชิงความหมายของไฟล์ TOML มันปรับเพียง whitespace การจัดกลุ่ม key และรูปแบบ quoting เท่านั้น ซึ่งหมายความว่าคุณสามารถจัดรูปแบบไฟล์ TOML ได้อย่างอิสระโดยไม่ต้องกังวลว่าจะทำให้พฤติกรรมของแอปพลิเคชันพัง

ต่างจาก JSON ตรงที่ TOML รองรับ comment ประเภทวันที่-เวลาในตัว และรูปแบบ string หลายแบบ (basic, literal และ multi-line) ตัวจัดรูปแบบที่ดีจะเก็บรักษา comment ไว้และรักษาความแตกต่างระหว่าง inline table กับ standard table header นอกจากนี้ยังจัดการ array of table ได้อย่างถูกต้อง โดยรักษาการจัดกลุ่ม section ให้ครบถ้วนเพื่อให้ไฟล์อ่านได้ง่ายสำหรับทั้งมนุษย์และ parser ที่ใช้งาน

Before · toml
After · toml
title="My App"
version="1.0.0"
debug=false
[database]
host="localhost"
port=5432
name="mydb"
[database.pool]
max_connections=25
timeout=30
[[servers]]
name="web"
host="web.example.com"
[[servers]]
name="api"
host="api.example.com"
title = "My App"
version = "1.0.0"
debug = false

[database]
host = "localhost"
port = 5432
name = "mydb"

[database.pool]
max_connections = 25
timeout = 30

[[servers]]
name = "web"
host = "web.example.com"

[[servers]]
name = "api"
host = "api.example.com"

ทำไมต้องใช้ตัวจัดรูปแบบ TOML?

ไฟล์ config สะสมความแตกต่างด้านรูปแบบเมื่อสมาชิกทีมหลายคนแก้ไขตามเวลา tab ปะปนกับ space บาง key ถูก quote โดยไม่จำเป็น และ table section สูญเสียการจัดกลุ่มทางภาพ ตัวจัดรูปแบบ TOML ทำให้ทุกอย่างเป็นมาตรฐานในครั้งเดียว

จัดรูปแบบได้ทันที
วาง TOML ที่ยังไม่จัดรูปแบบแล้วรับผลลัพธ์ที่สะอาดสม่ำเสมอทันที ไม่ต้องติดตั้ง CLI ไม่ต้องตั้งค่าโปรเจกต์ ไม่ต้องรอขั้นตอน build
🔒
ประมวลผลโดยให้ความเป็นส่วนตัวก่อน
การ parse และการจัดรูปแบบทั้งหมดทำงานในเบราว์เซอร์ ข้อมูล config ของคุณรวมถึง credential หรือชื่อ host ภายในไม่เคยออกจากเครื่องของคุณ
มีการตรวจสอบรวมอยู่ด้วย
ตัวจัดรูปแบบ parse TOML ของคุณก่อน serialize ใหม่ หาก input มีข้อผิดพลาดทาง syntax คุณจะได้รับข้อความแสดงข้อผิดพลาดที่ชัดเจนพร้อมบรรทัดที่มีปัญหา ทำให้การจัดรูปแบบทำหน้าที่เป็นการตรวจสอบด้วย
📋
ไม่ต้องสมัครบัญชี
เปิดหน้าและเริ่มจัดรูปแบบได้เลย ไม่มีการสมัครสมาชิก ไม่มี rate limit และไม่มีการติดตามการใช้งาน เครื่องมือทำงานเหมือนกันทุกครั้งที่เข้าใช้

กรณีการใช้งานตัวจัดรูปแบบ TOML

Frontend Development
จัดรูปแบบไฟล์ wrangler.toml สำหรับโปรเจกต์ Cloudflare Workers หรือ deno.toml สำหรับ frontend ที่ใช้ Deno การจัดรูปแบบที่สะอาดช่วยเมื่อตรวจสอบ deployment config ใน pull request
Backend Engineering
ทำให้ไฟล์ Cargo.toml ของ Rust microservice หลายตัวมีมาตรฐานเดียวกัน การจัดรูปแบบที่สม่ำเสมอทำให้ตรวจสอบเวอร์ชัน dependency และ feature flag ในหลาย repository ได้ง่าย
DevOps และ CI/CD
จัดรูปแบบไฟล์ config อย่าง .goreleaser.toml, netlify.toml หรือ Starship prompt config ก่อน commit เพิ่มการตรวจสอบการจัดรูปแบบใน CI pipeline เพื่อบังคับใช้ความสม่ำเสมอของรูปแบบ
QA และการทดสอบ
จัดรูปแบบ test fixture อย่างรวดเร็วเพื่อให้อ่านง่ายและ diff ได้ง่าย เมื่อการทดสอบล้มเหลวเพราะความแตกต่างของ config ไฟล์ที่จัดรูปแบบแล้วทำให้การเปรียบเทียบระหว่างผลลัพธ์จริงกับที่คาดหวังชัดเจนขึ้น
Data Engineering
จัดรูปแบบ Telegraf หรือ InfluxDB config ที่กำหนด data collection pipeline ไฟล์เหล่านี้มักเติบโตเป็นหลายร้อยบรรทัด และการจัดรูปแบบที่สม่ำเสมอช่วยให้ดูแลรักษาได้ง่าย
การเรียนรู้ไวยากรณ์ TOML
วางตัวอย่างจากเอกสารหรือ tutorial แล้วดูว่าตัวจัดรูปแบบทำให้เป็นมาตรฐานอย่างไร นี่เป็นวิธีที่รวดเร็วในการเรียนรู้ว่า bracket style, quoting rule และการจัดกลุ่ม table แบบใดคือ canonical

ตารางอ้างอิงไวยากรณ์ TOML

TOML มีชุด construct ขนาดเล็ก ตารางด้านล่างแสดง element เชิงโครงสร้างทุกตัวที่กำหนดใน TOML v1.0.0 specification ตัวจัดรูปแบบใช้ spacing และ grouping ที่สม่ำเสมอกับทั้งหมดนี้

ไวยากรณ์ชื่อหมายเหตุ
key = "value"Basic key-value pairKeys are bare or quoted; values are typed
[table]Standard tableCreates a named section (hash table)
[a.b.c]Dotted tableShorthand for nested tables
[[array]]Array of tablesEach [[name]] block appends to an array
key = """...\n"""Multi-line basic stringAllows newlines, escapes processed
key = '''...\n'''Multi-line literal stringAllows newlines, no escape processing
# commentCommentExtends to end of line; not in JSON output
{inline = true}Inline tableSingle-line table, no newlines allowed

TOML vs JSON vs YAML

TOML, JSON และ YAML แก้ปัญหาที่ซ้อนทับกัน แต่ตัดสินใจแลกเปลี่ยนที่แตกต่างกัน

คุณสมบัติTOMLJSONYAML
Comment# comment บรรทัดไม่รองรับ# comment บรรทัด
Value ที่มีประเภทString, int, float, bool, datetimeString, number, bool, nullอนุมาน (เกิดข้อผิดพลาดได้ง่าย)
การซ้อนHeader [table]วงเล็บปีกกาใช้ indentation
ความเข้มงวดของ specเข้มงวด (ผลลัพธ์การ parse เดียว)เข้มงวด (RFC 8259)ผ่อนปรน (parse ได้หลายแบบ)
รองรับวันที่/เวลา4 ประเภทในตัวไม่มี (ใช้ string แทน)อนุมาน (ไม่แน่นอน)
Trailing commaไม่อนุญาตไม่อนุญาตไม่มี (ไม่ใช้ comma)

ตัวอย่าง Code

ตัวอย่างด้านล่างจัดรูปแบบ TOML ด้วยโปรแกรมในหลายภาษาและเครื่องมือ แต่ละตัวอย่างอ่านไฟล์ parse แล้วเขียนผลลัพธ์ที่จัดรูปแบบแล้ว

JavaScript (Node.js)
import { parse, stringify } from '@iarna/toml'
import fs from 'fs'

const raw = fs.readFileSync('config.toml', 'utf-8')
const doc = parse(raw)
const formatted = stringify(doc)
// stringify() outputs canonical TOML with consistent spacing
fs.writeFileSync('config.toml', formatted)

// Quick one-liner with npx:
// npx taplo fmt config.toml
Python
import tomllib   # Python 3.11+ (read-only)
import tomli_w   # pip install tomli-w (write)

# Parse and re-serialize to format
with open("config.toml", "rb") as f:
    data = tomllib.load(f)

formatted = tomli_w.dumps(data)
# tomli_w produces sorted keys, consistent quoting, and
# proper whitespace around = signs
print(formatted)

# CLI alternative: taplo fmt config.toml
Go
package main

import (
    "fmt"
    "os"
    "github.com/BurntSushi/toml"
    "bytes"
)

func main() {
    var data map[string]interface{}
    _, err := toml.DecodeFile("config.toml", &data)
    if err != nil {
        fmt.Fprintln(os.Stderr, err) // parse error with line number
        os.Exit(1)
    }
    var buf bytes.Buffer
    enc := toml.NewEncoder(&buf)
    enc.Indent = "  "
    enc.Encode(data) // re-serialized with consistent formatting
    fmt.Print(buf.String())
}
CLI (taplo)
# Install taplo — the standard TOML toolkit
cargo install taplo-cli
# or: npm install -g @taplo/cli

# Format a single file in place
taplo fmt config.toml

# Format all .toml files in a project
taplo fmt

# Check formatting without modifying (CI-friendly)
taplo fmt --check

# Validate TOML syntax without formatting
taplo lint config.toml

คำถามที่พบบ่อย

ตัวจัดรูปแบบ TOML ทำอะไร?
ตัวจัดรูปแบบ TOML parse ไฟล์ให้เป็นโครงสร้างข้อมูลแล้ว serialize ใหม่ด้วย whitespace, การจัดลำดับ key และ quoting ที่สม่ำเสมอ เนื้อหาเชิงความหมายยังคงเหมือนเดิม เปลี่ยนเพียงการนำเสนอทางภาพ: spacing รอบเครื่องหมายเท่ากับ บรรทัดว่างระหว่าง table section และ indentation ของ value ที่ซ้อนกัน
การจัดรูปแบบ TOML ปลอดภัยสำหรับไฟล์ config ที่ใช้งานจริงไหม?
ใช่ การจัดรูปแบบเปลี่ยนเพียง whitespace และรายละเอียดด้านรูปแบบ โครงสร้างข้อมูลที่ parse ได้ก่อนและหลังการจัดรูปแบบเหมือนกันทุกประการ หากตัวจัดรูปแบบพบ input ที่ไม่ถูกต้อง จะรายงานข้อผิดพลาดแทนที่จะสร้างผลลัพธ์ที่เสียหาย คุณสามารถยืนยันได้โดย parse ทั้งสองเวอร์ชันและเปรียบเทียบ object ที่ได้
TOML ต่างจาก JSON อย่างไร?
TOML รองรับ comment ประเภทวันที่-เวลาในตัว multi-line string และ table header สำหรับจัดระเบียบข้อมูลที่ซ้อนกัน JSON ไม่มีสิ่งเหล่านี้ รูปแบบนี้ออกแบบมาสำหรับไฟล์ config ที่มนุษย์อ่านและแก้ไข JSON ออกแบบมาสำหรับการแลกเปลี่ยนข้อมูลระหว่างโปรแกรม การที่ JSON ไม่รองรับ comment ทำให้บันทึกการตัดสินใจด้าน config แบบ inline ได้ยากขึ้น
สามารถจัดรูปแบบ TOML จาก command line ได้ไหม?
ได้ Taplo คือ TOML formatter CLI ที่ใช้กันแพร่หลายที่สุด ติดตั้งด้วย cargo install taplo-cli หรือ npm install -g @taplo/cli แล้วรัน taplo fmt เพื่อจัดรูปแบบไฟล์ .toml ทั้งหมดในโปรเจกต์ รองรับการตั้งค่าผ่านไฟล์ taplo.toml หรือ .taplo.toml สำหรับกฎแบบกำหนดเอง
การจัดรูปแบบเก็บรักษา comment ในไฟล์ TOML ไว้ไหม?
ตัวจัดรูปแบบบนเบราว์เซอร์นี้ parse input ให้เป็นโครงสร้างข้อมูลแล้ว serialize ใหม่ ซึ่งจะลบ comment ออก หากต้องการเก็บรักษา comment ให้ใช้เครื่องมือที่รองรับ CST อย่าง Taplo (CLI) หรือ toml-edit (Rust library) ซึ่งทำงานกับ concrete syntax tree แทนที่จะเป็นข้อมูลที่ parse แล้ว
ความแตกต่างระหว่างการจัดรูปแบบ TOML กับการตรวจสอบ TOML คืออะไร?
การตรวจสอบตรวจว่าไฟล์สอดคล้องกับ specification และรายงานข้อผิดพลาดหากไม่สอดคล้อง การจัดรูปแบบไปไกลกว่านั้น: มันตรวจสอบ input แล้วเขียนใหม่ด้วยรูปแบบที่เป็นมาตรฐาน ทุกการดำเนินการจัดรูปแบบรวมการตรวจสอบเป็นขั้นตอนแรก ดังนั้นไฟล์ที่จัดรูปแบบสำเร็จรับประกันว่าถูกต้อง
โปรเจกต์ใดบ้างที่ใช้ TOML เป็นรูปแบบ config?
Cargo ของ Rust (Cargo.toml), ระบบนิเวศการจัดแพ็กเกจของ Python (pyproject.toml), Hugo static site, Deno (deno.toml), Cloudflare Workers (wrangler.toml), InfluxDB, Telegraf และ Starship prompt ทั้งหมดใช้ TOML รูปแบบนี้ได้รับความนิยมหลังจากที่ Rust นำมาใช้เป็นมาตรฐานสำหรับ package manifest ในปี 2015

เครื่องมือที่เกี่ยวข้อง