ToolActToolAct

SQL フォーマットツール

SQL入力
フォーマット結果
行数: 1文字数: 0バイト数: 0
行数: 1文字数: 0

SQLフォーマットとは?

SQLフォーマットは、圧縮された乱雑なSQLステートメントを、インデント整った、キーワードが強調された読みやすいフォーマットに変換するプロセスです。良いSQLフォーマットはコードの可読性を向上させ、チームコードレビューを容易にし、クエリロジックと条件を素早く特定できます。データベース開発とメンテナンスに不可欠なスキルです。

使い方

使い方

  1. 左側の入力欄にSQL文を貼り付けるか入力
  2. インデント幅(2スペース、4スペース、Tab)とキーワードの大小文字を選択
  3. 「フォーマット」でSQLを整形、「圧縮」で余白を削除
  4. 結果は右側にシンタックスハイライト付きで表示されます
  5. 「コピー」または「ダウンロード」で結果を保存

SQLレビュー時の注意点

  • 整形は可読性を向上させますが、権限、インデックス、実行プラン、業務ロジックの正当性は検証しません。
  • 変更したSQLを実行する前に、生成された句、文字列リテラル、コメント、データベース固有の構文を手動で確認してください。

利用シーン

密な SQL クエリをレビュー可能な形に整形長い SELECT、JOIN、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT、INSERT 文を貼り付けると、フォーマッタが主要な句をインデント付きで別々の行に分割します。ORM やレポートツールが1行に詰め込んだ SQL も、整形後はレビュー、デバッグ、説明がしやすくなります。
チームやデータベースのスタイルにキーワードの大文字小文字を統一大文字または小文字のキーワードを選択し、文字列リテラル、コメント、ドル引用ブロックは保護されたまま維持されます。マイグレーションファイル、ダッシュボード、ランブック、内部ドキュメント向けにコード片を標準化でき、SELECT、JOIN、CASE、集計関数を一つずつ探す手間が省けます。パースはブラウザ内でローカルに実行されるため、内部テーブル名や未リリースのフィーチャーフラグ、ステージングスキーマを参照するクエリも、サードパーティの美化ツールに送信せずに再整形できます。
レビュー後に SQL を圧縮して転送用に整備ミニファイモードではブロックコメント、行コメント、重複する空白、コンマや括弧周辺のスペースを削除します。URL パラメータ、フィクスチャ、コンパクトな設定値に向いていますが、読みやすいバージョンで内容を確認してから適用してください。
CTE とサブクエリをネストインデントで整形WITH 句の共通テーブル式(CTE)と相関サブクエリは追加のインデントレベルが付与され、外側の SELECT、内側の SELECT、UNION ブロックが視覚的に分離されます。再帰的な CTE チェーンや EXISTS サブクエリがコードレビューで追いやすくなります。方言の検出も重要で、PostgreSQL は `DISTINCT ON (col)` を、MySQL はバッククォート識別子と `IFNULL` を、SQL Server は角括弧の `[table]` と `TOP n` を、Oracle は `DUAL` と `ROWNUM` を使用します。フォーマッタは主要キーワード(SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY)を一貫して整列しますが、方言固有のトークンリストは利用者側で確認する必要があります。
意図しないデカルト積をリリース前に発見カンマ区切りの FROM 句を含むマルチテーブルの SELECT を整形すると、JOIN ... ON 条件が欠けている箇所が明確になります。展開レイアウトで露出したテーブルリストに、本番環境で突然行数が倍増する余分な行乗算がないか確認できます。MySQL の prepared statement や多くの ORM で使われるクエスチョンマークプレースホルダー、PostgreSQL のバインドパラメータ $1 $2、Oracle と SQL*Plus のコロン名バインドに注意してください。フォーマッタはこれらのトークンを識別子として扱わないよう保護しますが、キーワードの大文字小文字はチームのスタイル(マイグレーションは UPPER、コードレビューの可読性は lower)に合わせる必要があります。

仕組み

SQLのフォーマット処理は3段階のパイプラインで構成されます。まずトークナイザがソーステキストをトークン列(キーワード、識別子、リテラル、演算子、コメント、空白)に分割し、次にパーサが句構造に基づいてトークンをグループ化し、最後にプリンタがその結果を走査してスタイルポリシーに従い改行・インデント・大文字小文字を出力します。トークナイザは方言を意識する必要があります。文字列と識別子の区切り文字が方言によって異なるためです。ANSI SQLは識別子に二重引用符、文字列に一重引用符を使用し、MySQLはバッククォート、SQL Serverは角括弧、PostgreSQLはドル引用ブロック($$...$$ や $tag$...$tag$)を追加しており、内部のすべての文字(引用符を含む)をエスケープします。

出力パスでは各句に1つのルールを適用します。SELECT / FROM / WHERE / GROUP BY / HAVING / ORDER BY / LIMIT はそれぞれ列0で新しい行を開始し、投影列やON条件は1段階(2スペース、4スペース、またはタブ)インデントし、JOINキーワード(INNER / LEFT / RIGHT / FULL / CROSS)はFROMの下に揃え、CASE / WHEN / THEN / ELSE / ENDは縦に並べ、括弧付きサブクエリやWITH内のCTEは追加のインデントレベルを付与して外側のSELECTが視覚的にアンカーされたままになるようにします。文字列リテラル、行コメント(-- ...)、ブロックコメント(/* ... */)、ドル引用ブロックは1回だけトークン化され、中身はそのまま出力されるため内部の空白は変更されません。

キーワードの大文字小文字変換はソースに対して盲目的な正規表現で行うのではなく、出力時に適用されます。RESERVED_KEYWORD として分類されたトークンのみが大文字または小文字に変換されるため、バッククォート内の `order` や `user` という識別子は元の大文字小文字のまま保持されます。方言対応は重要です。予約語リストがエンジンによって異なるためです。PostgreSQL は DISTINCT ON、RETURNING、ILIKE を認識し、MySQL は IFNULL、LIMIT n,m、ENGINE= を追加し、SQL Server は TOP n、OUTPUT、角括弧識別子を使用し、Oracle は DUAL、ROWNUM、EXCEPT の代わりに MINUS を使用し、BigQuery と Snowflake は QUALIFY、EXCEPT(列指定)、配列/構造体リテラルで標準を拡張しています。性能はソース長に比例(O(n)トークン、O(n)出力バイト)するため、数MBのマイグレーションスクリプトでもミリ秒でフォーマットできます。
  • トークナイザ:ソースを RESERVED_KEYWORD、IDENTIFIER、STRING_LITERAL、NUMBER、OPERATOR、LINE_COMMENT(-- ...)、BLOCK_COMMENT(/* ... */)、WHITESPACE のクラスに分割し、コメントと文字列はそのまま保持する
  • 方言対応:一重引用符文字列(ANSI)、バッククォート識別子(MySQL)、角括弧識別子(SQL Server)、二重引用符識別子(PostgreSQL/標準)、ドル引用ブロック $$...$$(PostgreSQL)
  • 句レイアウト:SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY、LIMIT はそれぞれ列0にアンカーし、投影列とON条件は1段階インデントし、JOINキーワードはFROMの下に揃える
  • CTEとサブクエリのインデント:WITH句は内側のSELECTを1段階追加インデントし、EXISTS / IN / スカラコンテキスト内の相関サブクエリはそれぞれ独自のインデントを付与して外側のクエリがアンカーされたままになるようにする
  • 大文字小文字ポリシー:出力時にトークンクラスごとに適用され、RESERVED_KEYWORDトークンのみが大文字/小文字に変換される。`order` や [user] のような識別子は元の大文字小文字のまま保持される
  • バインドパラメータ:クエスチョンマークプレースホルダー(MySQL prepared statement)、$1/$2番号付きバインド(PostgreSQL)、コロン名バインド(Oracle/SQL*Plus)は PARAMETER としてトークン化され、識別子として再フォーマットされることはない
  • 計算量:O(n)の字句解析とO(n)の出力(n = ソース長)。数MBのマイグレーションスクリプトもミリ秒でフォーマット可能。sql-formatter npmライブラリ、pgFormatter、Prettier SQLプラグインと同等

使用例

JOIN と WHERE を含む密な SELECT を整形

入力:  select u.id,u.name,o.total from users u left join orders o on o.user_id=u.id where u.status='active' and o.created_at>='2026-01-01' order by o.total desc limit 10;

出力:
SELECT u.id, u.name, o.total
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE u.status = 'active'
  AND o.created_at >= '2026-01-01'
ORDER BY o.total DESC
LIMIT 10;

整形済み SQL を 1 行に圧縮して設定文字列に

入力(整形済み、6 行):
SELECT id, name
FROM   products
WHERE  price < 100
  AND  stock > 0
ORDER  BY name;

圧縮後の出力(1 行、78 文字):
SELECT id,name FROM products WHERE price<100 AND stock>0 ORDER BY name;

WITH(CTE)+ ネストしたサブクエリの整形

WITH recent_orders AS (
  SELECT user_id, SUM(total) AS spend
  FROM   orders
  WHERE  created_at >= NOW() - INTERVAL '30 days'
  GROUP  BY user_id
)
SELECT u.name, r.spend
FROM   users u
JOIN   recent_orders r ON r.user_id = u.id
WHERE  r.spend > (SELECT AVG(spend) FROM recent_orders);

キーワードを小文字化(チームスタイル)

設定: インデント = スペース 2、キーワード = 小文字

入力:  SELECT * FROM Users WHERE Status=1;

出力:
select *
from users
where status = 1;

用途: Ruby on Rails / Django ORM スタイルのマイグレーションファイルに合致

よくある質問

どの SQL 方言に対応していますか?

標準 ANSI SQL に加え、各方言固有のキーワードに対応しています。MySQL、PostgreSQL、MSSQL/T-SQL、SQLite、Oracle、BigQuery、Snowflake などです。ドロップダウンから対象の方言を選択することで、フォーマッターが方言固有のキーワード(LIMIT と TOP、RETURNING、MERGE など)を認識します。

どのようなスタイルオプションがありますか?

キーワードの大文字/小文字、インデント幅、列リストでのカンマ前置/後置、折り返しの最大行長、キーワードの前後どちらで改行するかなどです。通常はサイドパネルにオプションが表示されます。

SQL の構文チェックは行いますか?

ほとんどのフォーマッターは緩やかにパースし、疑わしい SQL もそのまま通します。本格的な構文検証にはデータベース接続(あるいは sqlparse、sqlglot のような実 SQL パーサー)が必要です。本ツールはレイアウト整形用とし、構文チェックは IDE や実際のデータベースで行ってください。

ストアドプロシージャやトリガーも整形できますか?

ほとんどの実装は CREATE PROCEDURE / CREATE FUNCTION / トリガーを方言がサポートする範囲で扱えます。制御フロー(IF/ELSE/WHILE)を含む長い本体も正しく整形されますが、ベンダー拡張(T-SQL 固有のキーワードなど)には適切な方言の指定が必要です。

クエリはアップロードされますか?

いいえ。整形は JavaScript 製の SQL パーサーを使ってブラウザ内で実行されます。貼り付けた SQL は送信されません。とはいえ、本番環境の認証情報や個人情報を Web ツールに貼り付けるのは避けてください。

CTE や JOIN のインデントが妙な形になるのはなぜ?

フォーマッターによって CTE の整列方法は異なります。各 CTE 定義をインデントするものもあれば、左揃えのままにするものもあります。JOIN にも同様に複数の有効なスタイル('JOIN x ON' と 'JOIN x\n ON')があります。チームのスタイルに合うオプションを選び、統一して使うのが良いでしょう。

SQL を最小化することはできますか?

実装によっては「1行モード」が用意されており、改行や余分な空白を取り除けます。コード中に文字列リテラルとして SQL を埋め込む際に便利です。レビューでは1行 SQL は読みづらいため、整形済みのバージョンをバージョン管理に残しておきましょう。

関連ツール

JSON フォーマットツール

オンラインJSONフォーマットツール。シンタックスハイライト、エラー検出、圧縮・美化をサポート。ワンクリックでJSONデータを美化し、フォーマットエラーを素早く特定し、開発効率を向上させます。

CSV to SQL 変換ツール

カスタムテーブル名、区切り文字、引用符スタイルをサポートするオンラインCSV to SQLツール。CSVデータを素早くSQL INSERTステートメントに変換し、データベースへのインポートを容易にします。

Excel to SQL 変換ツール

オンラインExcel to SQLコンバーター。.xlsxおよび.xls形式に対応、複数シート選択対応。スプレッドシートデータをローカルでSQL INSERT文に変換。

XML フォーマットツール

オンラインXMLフォーマットツール。自動インデント美化、構文検証、圧縮処理をサポート。カスタムインデント対応、XMLフォーマットエラーを素早く検出。

YAML フォーマットツール

オンラインYAMLフォーマットツール。構文チェック、自動インデント、フォーマット変換をサポート。設定ファイルを簡単に処理し、構文問題を素早く発見。

正規表現テストツール

オンライン正規表現テストツール。リアルタイムマッチング、結果をハイライト表示。よく使う正規表現ライブラリ対応、正規表現のデバッグと検証に役立ちます。