HTMLフォーマットとは?
HTMLフォーマッターは、HTMLフォーマット(美化またはプリティプリントとも呼ばれます)を実行するツールです。HTMLマークアップに一貫したインデント、改行、スペースを追加し、ネスト構造を視覚的に分かりやすくします。ブラウザはHTMLをレンダリングする際に空白を無視するため、1行で書かれたドキュメントも丁寧にインデントされたドキュメントも同じ出力を生成します。違いは人間のためのものです。整形されたHTMLは読みやすく、デバッグしやすく、保守しやすくなります。
HTML仕様(WHATWGがHTML Living Standardとして管理)は110以上の要素を定義しており、それぞれに固有のコンテンツモデルがあります。<div>、<section>、<article>などのブロックレベル要素は通常、新しい行から始まり子要素にインデントを付けます。<br>、<img>、<input>などの空要素は閉じタグを持たず、インデントする子要素もありません。優れたフォーマッターはこれらの違いを理解し、すべてのタグの後に無差別に空白を追加するのではなく、インデントルールを適切に適用します。
フォーマットは開発時に最も重要です。CMSプラットフォームからの出力やブラウザの DevTools からコピーしたマークアップ、ミニファイされたHTMLや機械生成されたHTMLは、単一の密な1行として届くことがよくあります。適切なインデントがなければ、閉じタグの欠落を見つけたり深くネストされた構造を追跡したりするのに大幅な時間がかかります。HTMLフォーマッターは、そのテキストの壁を1ステップで適切にインデントされた読みやすいツリー構造に変換します。
このHTMLフォーマッターを使う理由
任意のHTMLを貼り付けると、適切にインデントされた出力がすぐに得られます。インストールするプラグインも、記述する設定ファイルも、作成するアカウントも不要です。
HTMLフォーマッターの使用例
HTMLインデントのルール
HTMLフォーマッターが各要素タイプをどのように扱うかはコンテンツモデルによって異なります。下の表は一般的な要素と、2スペースおよび4スペース設定でのインデント方法を示しています。どちらもブラウザで同じレンダリングを生成します。違いは可読性です。
| タグ | 要素タイプ | 2スペース | 4スペース |
|---|---|---|---|
| <div> | Block element | New line, indent children | New line, indent children |
| <span> | Inline element | New line, indent children | Inline with parent text |
| <br> | Void element | New line, same level | New line, same level |
| <img> | Void element | New line, same level | New line, same level |
| <!-- --> | Comment | New line, same level | New line, same level |
| <!DOCTYPE> | Document type | First line, no indent | First line, no indent |
| <script> | Script block | New line, preserve inner | New line, preserve inner |
| <pre> | Preformatted | New line, preserve inner | New line, preserve inner |
フォーマッター vs. ミニファイアー vs. リンター
これら3つのツールはHTMLを対象としますが、目的がそれぞれ異なります。フォーマットとミニファイは逆の変換です。リンターは空白を変えずにエラーをチェックします。
コード例
一般的な言語やツールでHTMLをプログラム的にフォーマットする方法:
import { html as beautify } from 'js-beautify'
const ugly = '<div><p>Hello</p><ul><li>One</li><li>Two</li></ul></div>'
const formatted = beautify(ugly, {
indent_size: 2,
indent_char: ' ',
wrap_line_length: 80,
preserve_newlines: false,
})
// → <div>
// → <p>Hello</p>
// → <ul>
// → <li>One</li>
// → <li>Two</li>
// → </ul>
// → </div>from bs4 import BeautifulSoup ugly = '<div><p>Hello</p><ul><li>One</li><li>Two</li></ul></div>' soup = BeautifulSoup(ugly, 'html.parser') print(soup.prettify(formatter='minimal')) # → <div> # → <p> # → Hello # → </p> # → <ul> # → <li>One</li> # → <li>Two</li> # → </ul> # → </div>
package main
import (
"bytes"
"fmt"
"golang.org/x/net/html"
"strings"
)
func main() {
ugly := "<div><p>Hello</p></div>"
doc, _ := html.Parse(strings.NewReader(ugly))
var buf bytes.Buffer
html.Render(&buf, doc)
fmt.Println(buf.String())
// renders normalized HTML — pair with indent logic for pretty output
}# Format a single file in place npx prettier --write index.html # Format and print to stdout (pipe-friendly) npx prettier --parser html index.html # Format with 4-space indentation npx prettier --tab-width 4 --parser html index.html # Format HTML from stdin echo '<div><p>Hello</p></div>' | npx prettier --parser html