TOML 포맷터

TOML(Tom's Obvious, Minimal Language)을 정렬하고 검증합니다. key = value・테이블・배열을 보기 좋게 정렬하고, 구문 오류가 있으면 줄 번호와 함께 표시합니다.

TOML의 주요 데이터 타입

타입 작성 예 설명
문자열(기본) "hello" 큰따옴표로 감쌉니다. \n, \t 같은 이스케이프 시퀀스를 사용할 수 있습니다.
문자열(리터럴) 'C:\path' 작은따옴표로 감쌉니다. 이스케이프 처리를 전혀 하지 않으므로 백슬래시가 포함된 경로 문자열에 편리합니다.
정수 42 기본은 10진수이며, 0x(16진수)・0o(8진수)・0b(2진수)와 1_000처럼 밑줄 구분 표기도 가능합니다.
부동소수점수 3.14 지수 표기(1e10)와 inf・nan도 유효한 값으로 취급됩니다.
불리언 true true 또는 false 중 하나입니다. 첫 글자가 대문자인 형식(True)은 무효합니다.
배열 [1, 2, 3] 대괄호 안에 쉼표로 값을 나열합니다. 마지막에 쉼표를 붙이는 것도 허용됩니다.
테이블 [server] 섹션 헤더 이후에 등장하는 모든 key = value는 해당 테이블의 하위 요소가 됩니다.
배열 테이블 [[fruits-basket]] 같은 이름의 테이블을 여러 번 반복해 배열을 표현합니다(예: 여러 개의 의존성 정의).
날짜/시간 1979-05-27T07:32:00Z RFC 3339 형식으로, 따옴표 없이 쓸 수 있는 유일한 복합 값입니다.

  • 인라인 배열・인라인 테이블은 한 줄로 완결되는 표기만 지원합니다. 여러 줄에 걸친 배열은 미리 한 줄로 합친 뒤 붙여넣어 주세요.
  • 정렬 결과는 "=" 앞뒤를 항상 반각 공백 1칸으로 맞추고, 배열・인라인 테이블의 구분자도 ", "로 통일합니다. 작성자마다 다른 표기 차이를 흡수할 수 있습니다.
  • 주석(# 이후)은 그대로 유지되지만, "#" 바로 뒤에 공백이 없으면 1칸을 보완하는 정도의 최소한의 정리만 이루어집니다.
  • 연속된 빈 줄은 한 줄로 합쳐서 출력되므로 테이블 간의 구분이 더 잘 보입니다.
  • 이 도구는 브라우저 안에서 모든 처리가 완결됩니다. 입력한 설정 파일 내용이 외부 서버로 전송되는 일은 없습니다.

자주 묻는 질문

단순한 키-값 조합이 중심이고 여러 사람이 함께 편집하는 설정 파일(의존성 정의 등)에는 TOML이 적합합니다. 들여쓰기 실수로 인한 사고가 적기 때문입니다. 반대로 깊은 중첩 구조나 여러 문서를 하나로 결합해야 한다면 YAML이 표현력 면에서 더 우수합니다.

[[section]] 헤더 자체의 정렬은 수행하지만, 같은 이름의 섹션을 하나의 배열로 합쳐 JSON 객체로 변환하는 처리는 하지 않습니다. 복잡한 배열 테이블 구조는 줄 단위로 정렬된 결과를 직접 눈으로 확인한 뒤 사용해 주세요.

RFC 3339 형식으로 구문만 인식하여 값을 그대로 출력합니다. 다만 "2월 30일"처럼 달력상 잘못된 날짜까지는 검증하지 않습니다. 엄격한 날짜 검증이 필요하다면 별도로 확인해 주세요.

"""..."""'''...'''는 현재 지원하지 않으며, 해당 줄은 오류로 감지됩니다. 긴 텍스트를 다뤄야 한다면 한 줄로 작성 가능한 이스케이프 문자열 형식으로 바꾼 뒤 시도해 주세요.

아니요. 정렬 처리는 모두 사용 중인 브라우저 안(JavaScript)에서 완결되며, 서버로 전송되거나 저장되는 일은 전혀 없습니다. 인증 정보가 포함된 설정 파일이라도 안심하고 사용하실 수 있습니다.
ツールくん

여담 ― TOML이 "설정 파일의 공통어"가 된 이유

TOML은 GitHub 공동 창업자인 Tom Preston-Werner가 2013년에 고안한 포맷으로, 정식 명칭인 "Tom's Obvious, Minimal Language"가 설계 철학을 그대로 나타냅니다. JSON처럼 기계가 다루기 쉬우면서도, 사람이 있는 그대로 읽고 써도 헷갈리지 않는 구문을 목표로 만들어졌습니다.

보급을 결정지은 계기는 Rust의 패키지 매니저 Cargo가 설정 파일 형식으로 Cargo.toml을 채택한 것입니다. 이후 Python의 패키징 표준을 정한 PEP 518이 pyproject.toml을 도입하면서, 난립하던 setup.py・setup.cfg・requirements.txt를 하나로 통합하는 역할도 맡았습니다.

YAML과 가장 큰 차이는 "들여쓰기에 의미를 부여하지 않는다"는 설계에 있습니다. YAML은 들여쓰기 폭의 미세한 어긋남이 구문 오류나 데이터 구조 오인식을 일으키기 쉬운 반면, TOML은 [section]key = value의 조합만으로 계층을 표현하기 때문에 복사・붙여넣기로 인한 실수가 상대적으로 적다고 알려져 있습니다.

반면 TOML은 YAML에 비해 표현력이 다소 제한적입니다. 값을 재사용하는 앵커・별칭 기능이 없고, 복잡한 다계층 구조를 간결하게 작성하기 어려운 편이라, 용도에 따라 YAML・JSON과 구분해 사용하는 것이 실무에서의 정석으로 여겨집니다.

→ 모든 여담 보기