SQL クエリをフォーマットする方法
整っていない SQL はバグを生む最速の方法のひとつです。クエリがインデントなしの 1 行に並んでいると、どの条件がどの結合に適用されるのか、サブクエリがどこから始まってどこで終わるのか、ロジックが正しいのかを見抜くのは困難です。
フォーマットが重要な理由
- デバッグ — よくフォーマットされたクエリは論理エラーを見えやすくします。SELECT から WHERE、JOIN への流れを推測なしに追えます。
- コードレビュー — レビュアーはフォーマット済み SQL を数秒で読めます。1 行のクエリだとまず頭の中で解析しなければなりません。
- 保守性 — 数か月後にクエリに戻ってきたとき、フォーマットされていれば一目で何をしているかわかります。
- 協業 — チーム内で一貫したフォーマットを使えば、全員が同じように SQL を読めます。
SQL をフォーマットする方法
- SQL を貼り付ける — ミニファイされた、または整っていないクエリをフォーマッターに入力します。SELECT、INSERT、UPDATE、DELETE、CREATE TABLE、サブクエリや結合を含む複雑なクエリにも対応します。
- オプションを設定 — インデントサイズと、キーワードを大文字にするかを選択します。これらの設定はプロジェクトのスタイルガイドに合わせてください。
- 結果をコピー — フォーマット済み SQL はエディタ、データベースクライアント、ドキュメントに貼り戻せます。
良いフォーマットの見た目
select u.name, o.total from users u join orders o on u.id = o.user_id where o.total > 100 and u.active = 1 order by o.total desc のようなクエリは次のようになります:
SELECT
u.name,
o.total
FROM users u
JOIN orders o
ON u.id = o.user_id
WHERE o.total > 100
AND u.active = 1
ORDER BY o.total DESC
各句が独立した行で始まります。条件は親句の下にインデントされます。結合とその ON 条件は明確にペアになっています。
ヒント
- コミット前にフォーマット — バージョン管理に加える前に SQL をフォーマッターに通しましょう。差分がクリーンに保たれ、レビューがスタイルではなくロジックに集中できます。
- キーワードのケースを統一 — 大文字か小文字かを決めて、プロジェクト全体で統一してください。スタイルが混在するとクエリが読みにくくなります。
- 複雑なクエリは分割 — フォーマットしてもなお読みにくいクエリは、CTE(Common Table Expressions)やビューに分割しましょう。フォーマットでは本質的に複雑なロジックは直せません。
- シンタックスハイライトを確認 — 良いフォーマッターはキーワード、文字列、数値を区別するハイライトを提供しており、タイポを見つけやすくなります。
よくある質問
SQL のキーワードは大文字で書くべきですか?
SQL のキーワード(SELECT、FROM、WHERE)を大文字で、テーブル名やカラム名を小文字で書くのは広く採用されている慣習です。クエリが視覚的に読みやすくなります。多くのスタイルガイドが推奨していますが、データベースエンジンが要求するものではありません。
フォーマットでクエリの実行が変わりますか?
いいえ。空白とインデントは SQL の実行に影響しません。フォーマットは純粋に人間の可読性のためです。ミニファイされたクエリとインデントされたクエリは同じ結果を返します。
どのインデントサイズを使うべきですか?
2 スペースも 4 スペースもどちらも一般的です。チームで使われているものを選び、一貫させてください。ほとんどの SQL フォーマッターはこの設定が変えられます。
SQL はサーバーに送信されますか?
いいえ。フォーマットは完全にブラウザ内で行われます。クエリがデバイスから出ることはありません。