সর্বশেষ আপডেট: এপ্রিল ২০২৬
TOML ফর্ম্যাটিং কী?
TOML (Tom's Obvious Minimal Language) হলো Tom Preston-Werner-এর ২০১৩ সালে তৈরি একটি কনফিগারেশন ফাইল ফর্ম্যাট। এটি সরাসরি একটি হ্যাশ টেবিলে ম্যাপ হয় এবং সকল মানের জন্য সুস্পষ্ট টাইপিং ব্যবহার করে। একটি TOML ফর্ম্যাটার কাঁচা বা অসামঞ্জস্যপূর্ণভাবে স্টাইল করা TOML নিয়ে সামঞ্জস্যপূর্ণ স্পেসিং, সঠিক ইন্ডেন্টেশন এবং মানসম্মত কী অর্ডারিং সহ পুনরায় সিরিয়ালাইজ করে। ফলাফল হলো এমন একটি ফাইল যা আপনার পুরো প্রজেক্টে একই নিয়ম অনুসরণ করে, যা diff-এ কনফিগ পরিবর্তনগুলো পর্যালোচনা করা সহজ করে তোলে।
TOML v1.0.0 স্পেসিফিকেশন, যা জানুয়ারি ২০২১ সালে চূড়ান্ত করা হয়েছে, ব্যাকরণটি এতটাই কঠোরভাবে সংজ্ঞায়িত করে যে যেকোনো সামঞ্জস্যপূর্ণ পার্সার একই ইনপুট থেকে একটি অভিন্ন ডেটা কাঠামো তৈরি করে। ফর্ম্যাটিং একটি TOML ফাইলের তথ্য পরিবর্তন করে না। এটি শুধুমাত্র হোয়াইটস্পেস, কী গ্রুপিং এবং কোটিং স্টাইল সামঞ্জস্য করে। এর অর্থ আপনি আপনার অ্যাপ্লিকেশনের আচরণ ভাঙার চিন্তা না করেই TOML ফাইল স্বাধীনভাবে ফর্ম্যাট করতে পারেন।
JSON-এর বিপরীতে, 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 ফর্ম্যাটার কেন ব্যবহার করবেন?
কনফিগারেশন ফাইলে সময়ের সাথে সাথে স্টাইলের অসামঞ্জস্য জমে যায় কারণ বিভিন্ন দলের সদস্যরা সেগুলো সম্পাদনা করেন। ট্যাব ও স্পেস মিশে যায়, কিছু কী অপ্রয়োজনীয়ভাবে কোট করা হয়, এবং টেবিল সেকশন তাদের ভিজ্যুয়াল গ্রুপিং হারিয়ে ফেলে। একটি TOML ফর্ম্যাটার এই সবকিছু একবারেই স্বাভাবিক করে।
TOML ফর্ম্যাটারের ব্যবহারের ক্ষেত্র
TOML সিনট্যাক্স রেফারেন্স
TOML-এর কাঠামোগত উপাদানগুলোর একটি ছোট সংগ্রহ রয়েছে। নিচের টেবিলটি TOML v1.0.0 স্পেসিফিকেশনে সংজ্ঞায়িত প্রতিটি কাঠামোগত উপাদান তালিকাভুক্ত করে। একটি ফর্ম্যাটার এই সবগুলোতে সামঞ্জস্যপূর্ণ স্পেসিং ও গ্রুপিং প্রয়োগ করে।
| সিনট্যাক্স | নাম | নোট |
|---|---|---|
| key = "value" | Basic key-value pair | Keys are bare or quoted; values are typed |
| [table] | Standard table | Creates a named section (hash table) |
| [a.b.c] | Dotted table | Shorthand for nested tables |
| [[array]] | Array of tables | Each [[name]] block appends to an array |
| key = """...\n""" | Multi-line basic string | Allows newlines, escapes processed |
| key = '''...\n''' | Multi-line literal string | Allows newlines, no escape processing |
| # comment | Comment | Extends to end of line; not in JSON output |
| {inline = true} | Inline table | Single-line table, no newlines allowed |
TOML বনাম JSON বনাম YAML
TOML, JSON এবং YAML একই ধরনের সমস্যার সমাধান করে কিন্তু ভিন্ন আপোষ করে।
| বৈশিষ্ট্য | TOML | JSON | YAML |
|---|---|---|---|
| মন্তব্য | # লাইন মন্তব্য | সমর্থিত নয় | # লাইন মন্তব্য |
| টাইপযুক্ত মান | String, int, float, bool, datetime | String, number, bool, null | অনুমানকৃত (ত্রুটিপ্রবণ) |
| নেস্টিং | [table] হেডার | কার্লি ব্রেস | ইন্ডেন্টেশন-ভিত্তিক |
| স্পেসিফিকেশনের কঠোরতা | কঠোর (একটি পার্স ফলাফল) | কঠোর (RFC 8259) | শিথিল (একাধিক বৈধ পার্স) |
| ডেট/টাইম সমর্থন | ৪টি নেটিভ টাইপ | নেই (স্ট্রিং ব্যবহার করুন) | অন্তর্নিহিত (ভঙ্গুর) |
| ট্রেইলিং কমা | অনুমোদিত নয় | অনুমোদিত নয় | প্রযোজ্য নয় (কোনো কমা নেই) |
কোড উদাহরণ
নিচের উদাহরণগুলো বিভিন্ন ভাষা ও টুলে প্রোগ্রামগতভাবে TOML ফর্ম্যাট করে। প্রতিটি একটি ফাইল পড়ে, পার্স করে এবং একটি ফর্ম্যাটেড সংস্করণ লেখে।
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.tomlimport 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.tomlpackage 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())
}# 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