複数のテーブルを結合した長いSQL、改行もインデントもなく一行に詰まっていると読むのに一苦労します。同僚のコードをレビューするときも、自分の昔書いたクエリを見直すときも、整形されていないSQLは思った以上に時間を取ります。
この記事では、SQLの整形とは何か、どう書けば読みやすくなるかを具体例で解説します。
SQL整形とは?
SQL整形(SQLフォーマット)とは、SQLクエリにインデントや改行を加えて視覚的に読みやすくすることです。動作は変わらず、人間にとっての読みやすさだけが向上します。
たとえば次のSQLを見てください。
SELECT u.id,u.name,o.total FROM users u JOIN orders o ON u.id=o.user_id WHERE o.total>1000 ORDER BY o.total DESC LIMIT 10;
これを整形すると:
SELECT u.id, u.name, o.total FROM users u JOIN orders o ON u.id = o.user_id WHERE o.total > 1000 ORDER BY o.total DESC LIMIT 10;
同じ処理結果ですが、後者のほうが構造を把握しやすく、ミスも見つけやすくなります。
読みやすいSQLの書き方
キーワードは大文字で統一する
SELECT・FROM・WHERE・JOINなどのSQLキーワードを大文字で書く慣習があります。テーブル名・カラム名(小文字)との区別がつき、構造が一目でわかります。
-- 読みにくい select id, name from users where active = true; -- 読みやすい SELECT id, name FROM users WHERE active = TRUE;
句ごとに改行する
SELECT・FROM・WHERE・JOIN・ORDER BYなどの主要な句は、それぞれ行頭に置きます。
SELECT p.id, p.title, c.name AS category_name FROM products p JOIN categories c ON p.category_id = c.id WHERE p.price < 5000 AND p.stock > 0 ORDER BY p.created_at DESC;
サブクエリのインデント
サブクエリ(入れ子のSELECT)はインデントを深くして内と外を区別します。
SELECT u.name, recent_orders.total FROM users u JOIN ( SELECT user_id, SUM(amount) AS total FROM orders WHERE created_at >= '2026-01-01' GROUP BY user_id ) AS recent_orders ON u.id = recent_orders.user_id;
チームでルールを統一する
「キーワードの大文字/小文字」「インデント幅」「カンマを行頭か行末に置くか」などは、チームで決めておくと後で揃えるコストがかかりません。SQLフォーマッターを使えばルールを自動で統一できます。
よくある質問(FAQ)
- 整形するとSQLの動作が変わりますか?
- 変わりません。SQLは改行・スペース・インデントを無視して解釈されます。整形はあくまで人間の読みやすさを改善するためのものです。
- カンマは行末と行頭どちらに置くべきですか?
- どちらでも動作しますが、行頭カンマ(先頭に
,を置く)は最後の行の削除し忘れによるエラーを防ぎやすいため好む開発者が多いです。チームの方針を優先してください。 - ORMやフレームワークが生成したSQLも整形できますか?
- できます。ORMの出力やログに流れるクエリは機械生成のため読みにくいことが多いですが、SQLフォーマッターにそのまま貼り付けて整形できます。デバッグ時に便利です。
まとめ
- SQL整形はインデント・改行・大文字化でクエリを読みやすくすること
- 動作には影響しないが、レビューやデバッグの効率が大きく上がる
- 句ごとに改行・キーワードを大文字化するだけでも格段に見やすくなる
- チームでルールを決め、フォーマッターで自動化するのが効率的
SQLを素早く整形したいときは以下のツールをどうぞ。
- SQLフォーマッター:SQLを貼り付けて即整形
- テキスト差分チェッカー:整形前後のSQLを比較
- JSONフォーマッター:APIから返ってきたJSONデータも整形