SQL Formatter:SQLの整形と美化
無料、登録不要。SQL Formatter:MySQL、PostgreSQL、SQL Server、SQLite等のクエリを美化。キーワード大文字化、インデント、圧縮。無料。
SQL Formatterとは?
SQL Formatterは、未整形、圧縮、またはスタイルが不統一なSQLクエリを、適切なインデントと一貫したキーワードケーシングを持つクリーンで読みやすいコードに変換するブラウザベースのツールです。開発者やデータアナリストは、フォーマットの悪いSQLに常に遭遇します。アプリケーションコードにインラインで書かれたクエリ、ORMデバッグログからの出力、ドキュメントからコピーしたSQL、または段階的な編集によって構造を失ったクエリなどがその例です。
このツールはその生のSQLを受け取り、sql-formatterライブラリを使ってダイアレクト対応のフォーマットを適用します。このライブラリはStandard SQL、MySQL、MariaDB、PostgreSQL、PL/SQL(Oracle)、T-SQL(SQL Server)、SQLiteの構文ルールを理解しています。対象ダイアレクトを選び、インデント幅を設定し、キーワードの大文字化を切り替え、結果を圧縮することができます。すべての処理はサーバーなし、サインアップなし、無料でブラウザ内でローカルに実行されます。
主な機能
- 適切なインデントでSQLを整形 — 1回の貼り付けで複数のステートメント間に設定可能な
tabWidthとlinesBetweenQueries: 2スペーシングを持つsql-formatterライブラリを使用。 - 複数のSQLダイアレクトをサポート — Standard SQL、MySQL、MariaDB、PostgreSQL、PL/SQL(Oracle)、T-SQL(SQL Server)、SQLiteから選択。ダイアレクトの選択はフォーマッターがダイアレクト固有の構文や予約語をどう処理するかに影響します。
- カスタマイズ可能なインデント設定 — アクションバーから2スペースまたは4スペースのインデントを選択。
- キーワード大文字化トグル — ボタンが
keywordCase: 'upper'とkeywordCase: 'preserve'を切り替えます。大文字化がアクティブな場合(デフォルト)、すべてのSQLキーワードが大文字に標準化されます(SELECT、FROM、WHERE、JOINなど)。無効にすると、キーワードのケーシングはそのまま残ります。 - SQL圧縮 —
tabWidth: 0でフォーマットし、結果をトークン間のスペース1つの単一行に圧縮。 - 整形された出力をクリップボードにコピー — Clipboard APIとtextareaフォールバック。
.sqlファイルとしてダウンロード —text/sqlMIMEタイプでformatted.sqlとして出力を保存。- キーボードショートカット — Ctrl+Enter(Cmd+Enter)で整形、Ctrl+Shift+M(Cmd+Shift+M)で圧縮。
SQL Formatterの使い方
ステップ1:SQLを貼り付ける
/developer/code/sql-formatterでツールを開きます。SQLクエリを左側の入力パネルに貼り付けます。セミコロンで区切られた複数のステートメントに対応しています。フォーマッターは出力内の各ステートメントの間に2つの空白行を入れます。
ステップ2:ダイアレクトとオプションを選択
パネル下のアクションバーで:
- ダイアレクトを選択 ドロップダウンから:Standard SQL、MySQL、MariaDB、PostgreSQL、PL/SQL(Oracle)、T-SQL(SQL Server)、またはSQLite。最も正確なフォーマットのために、クエリを実行するデータベースエンジンに合わせて選択してください。
- インデントを選択:2または4スペース。
- Uppercaseを切り替える:Uppercaseボタンはデフォルトでアクティブです。アクティブな場合、すべてのSQLキーワードが大文字に正規化されます。クリックして無効にすると元のケーシングが保持されます。
ステップ3:Formatをクリック
FormatをクリックするかCtrl+Enter / Cmd+Enterを押します。整形されたSQLが読み取り専用の出力パネルに表示されます。ツールは履歴エントリにダイアレクトを表示します(例:「Formatted POSTGRESQL (2.4 KB)」)。
入力例 — アプリケーションデバッグ出力からのインラインクエリ:
select u.id,u.email,u.created_at,count(o.id) as order_count,sum(o.total_amount) as total_spent from users u left join orders o on u.id=o.user_id where u.active=true and u.created_at>='2024-01-01' group by u.id,u.email,u.created_at having count(o.id)>0 order by total_spent desc limit 25
PostgreSQLダイアレクト、2スペースインデント、uppercase onでの出力:
SELECT
u.id,
u.email,
u.created_at,
COUNT(o.id) AS order_count,
SUM(o.total_amount) AS total_spent
FROM
users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE
u.active = TRUE
AND u.created_at >= '2024-01-01'
GROUP BY
u.id,
u.email,
u.created_at
HAVING
COUNT(o.id) > 0
ORDER BY
total_spent DESC
LIMIT
25
ステップ4:圧縮(オプション)
MinifyをクリックするかCtrl+Shift+M / Cmd+Shift+Mを押して単一行のSQL文字列を生成します。大文字化とダイアレクトの設定は圧縮中も適用されます。圧縮されたSQLは、環境変数、設定文字列、または行の変更がノイズになる比較差分にクエリを埋め込む場合に便利です。
同じクエリの圧縮出力:
SELECT u.id, u.email, u.created_at, COUNT(o.id) AS order_count, SUM(o.total_amount) AS total_spent FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE u.active = TRUE AND u.created_at >= '2024-01-01' GROUP BY u.id, u.email, u.created_at HAVING COUNT(o.id) > 0 ORDER BY total_spent DESC LIMIT 25
ステップ5:コピーまたはダウンロード
Copyをクリックして出力をクリップボードに置きます。Downloadをクリックしてformatted.sqlを保存します。どちらのボタンも右パネルに出力が存在するまで無効です。
実用的な例
ORMデバッグクエリの整理
DjangoやRailsのORMデバッグ出力は、クエリを混合ケーシングの単一行でログに記録します。典型的なDjangoクエリログエントリ:
select "products"."id", "products"."name", "products"."price", "products"."stock_count" from "products" where "products"."category_id" = 12 and "products"."active" = true order by "products"."name" asc
PostgreSQLダイアレクトを選択し(DjangoはダブルクォートのPostgreSQL引用スタイルを使用)、大文字化を有効にしてFormatをクリックします。出力はダブルクォートで囲まれた識別子を保持しながら、大文字キーワードで適切なインデントを示します。
ストアドプロシージャのレビュー
T-SQLのストアドプロシージャが単一のフォーマットされていないブロックとしてバージョン管理にチェックインされていました。T-SQL(SQL Server)ダイアレクトを選択してFormatをクリックすると、一貫したキーワードケーシングを持つインデントされた読みやすいバージョンが得られます。フォーマットされたバージョンはプルリクエストのdiffで確認しやすく、元のものを置き換えてコミットし直すことができます。
設定にクエリを埋め込む
アプリケーションがレポートクエリをYAML設定ファイルに単一行文字列として保存しています。SQL Formatterで適切なフォーマットでクエリを作成・テストし、埋め込み用のコンパクトなバージョンを生成するためにMinifyをクリックします。フォーマットされたバージョンを圧縮版の横のコメントとして残しておくと、設定ファイルが保守しやすくなります。
# フォーマット済みバージョン(読みやすさのため):
# SELECT product_id, SUM(quantity) AS units_sold
# FROM order_items
# WHERE order_date >= :start_date
# GROUP BY product_id
# ORDER BY units_sold DESC
report_query: "SELECT product_id, SUM(quantity) AS units_sold FROM order_items WHERE order_date >= :start_date GROUP BY product_id ORDER BY units_sold DESC"
ヒントとベストプラクティス
ダイアレクトをデータベースに合わせてください。 ほとんどのSQLフォーマットはダイアレクトに依存しませんが、sql-formatterライブラリはダイアレクト固有の構文(PostgreSQLの:: cast構文、T-SQLのTOP、LIMIT/OFFSETの配置の違いなど)を正しいダイアレクトが選択されている場合により正確に処理します。
コードレビューの読みやすさのために大文字を使用してください。 SQLの大文字キーワードの慣習は広く認知されており、構造的コンポーネント(SELECT、FROM、WHERE、JOIN)を識別子やリテラルと視覚的に区別させます。レビューまたはコミットされるコードをフォーマットする前に大文字化トグルを有効にしてください。
差分比較前に整形してください。 クエリの2つのバージョンを比較する際は、最初に同じ設定で両方をフォーマットしてください。フォーマットされていないSQLの差分は、単一の構造変更が多くの行に影響する可能性があるため、ノイズの多い出力を生成します。フォーマットされたSQLの差分は意味のある変更のみを示します。
複数のステートメントに対応しています。 セミコロンで区切られた複数のCREATE TABLE、INSERT、ALTER TABLEステートメントを含むマイグレーションファイルやスクリプトを貼り付けることができます。フォーマッターは視覚的な区切りとして各ステートメントの間に2つの空白行を生成します。
チームの規約用にプリセットを保存してください。 Glyph Widgetsのサポーターは、ダイアレクト、インデント、大文字化の設定を名前付きプリセットとして保存できます。プロジェクトを切り替える際にチームの規約をワンクリックで適用できるよう、プロジェクトごとに1つのプリセットを作成してください(例:「MySQL 2スペース大文字」)。
よくある問題とトラブルシューティング
Formatをクリックした後のエラーメッセージ — sql-formatterライブラリは認識できない構文でエラーをスローします。一般的な原因は:選択したダイアレクトでサポートされていない独自の拡張機能、手続き型コード(PL/pgSQL関数本体、T-SQL BEGIN/ENDブロック)、または{{ variable }}や#{variable}のようなアプリケーション層のテンプレート構文が混在したSQL。フォーマット前にサポートされていない部分を削除またはコメントアウトしてください。
キーワードが大文字化されない — Uppercaseボタンがアクティブ状態(塗りつぶし、プライマリスタイル)にあることを確認してください。ボタンがアウトラインスタイルの場合、ケーシングはpreserveに設定されています。大文字化モードを有効にするには一度クリックしてください。
間違ったダイアレクトが予期しない改行を引き起こす — sql-formatterライブラリの改行ルールはダイアレクトによって異なります。クエリが奇妙なフォーマットになる場合は、ダイアレクトとしてStandard SQLを試してください。
圧縮出力の一部にまだ複数のスペースがある — 圧縮アプローチはすべての空白シーケンスを単一のスペースに圧縮します。ただし、引用符で囲まれた文字列のコンテンツには影響しません。シングルクォート文字列内のスペースは保持されます。
「Please enter SQL to format」エラー — 入力が空です。Formatをクリックする前に左パネルにSQLクエリを貼り付けてください。
ダウンロードされたファイルが毎回formatted.sqlという名前になる — これは固定ファイル名です。ダウンロード後にプロジェクトの命名規則に合わせてファイルの名前を変更してください。
プライバシーとセキュリティ
SQL Formatterはsql-formatterライブラリを使ってすべてのSQLテキストをブラウザ内でローカルに処理します。テーブル名、カラム名、データ値、接続文字列の認証情報などのクエリテキストは一切サーバーに送信されません。ページが読み込まれればオフラインで動作します。これにより、独自のスキーマ名、内部ビジネスロジック、またはサンプルデータを含むクエリでも安全に使用できます。
よくある質問
SQL Formatterは無料ですか? はい、完全に無料です。すべてのフォーマット、圧縮、ダイアレクトオプションは料金なしでアカウント不要で利用できます。保存済みプリセットやセッション履歴などのGlyph WidgetsサポーターフィーチャーはKo-fiサポーター向けに提供されていますが、コアSQLフォーマットには制限がありません。
オフラインで動作しますか? はい。ページが読み込まれると、すべてのフォーマットがJavaScriptを使用してブラウザ内でローカルに実行されます。インターネットから切断してもクエリのフォーマットを中断なく続けることができます。
SQLは安全ですか? はい。SQLは一切サーバーに送信されません。ブラウザのメモリ内で完全に処理され、ツールをクリアするかタブを閉じると破棄されます。内部テーブル名、ビジネスロジック、またはサンプルデータ値を含むクエリを安全に貼り付けることができます。
サポートされているSQLダイアレクトは? Standard SQL、MySQL、MariaDB、PostgreSQL、PL/SQL(Oracle)、T-SQL(SQL Server)、SQLiteをサポートしています。これらはsql-formatterライブラリのlanguageパラメーターに直接対応しています。
ツールはSQL構文を検証しますか? sql-formatterライブラリはSQLをフォーマットするのに十分な解析を行い、処理できない特定の構文でエラーをスローしますが、厳密な意味でのSQLバリデーターではありません。真の構文検証には、データベースエンジンのEXPLAINやクエリプランナーを使用してください。
複数のクエリを一度にフォーマットできますか? はい。セミコロンで区切られた複数のステートメントを貼り付けてください。フォーマッターは各フォーマット済みステートメントの間に2つの空白行を入れ、クエリ間の境界を明確にします。
Uppercaseトグルは具体的に何をしますか? 有効にすると、フォーマッターはsql-formatterオプションにkeywordCase: 'upper'を設定し、すべてのSQL予約語を大文字に変換します。SELECT、FROM、WHERE、JOIN、ON、GROUP BY、ORDER BY、LIMIT、COUNT、SUM、MAXなどの関数名も含まれます。無効にすると、keywordCase: 'preserve'は入力のケーシングをそのまま維持します。
フォーマッターはCTE(Common Table Expressions)を処理できますか? はい。CTEs(WITH ... AS (...))は、CTE定義とそれに続くメインクエリに適切なインデントを持って正確にフォーマットされます。これはすべてのサポートされているダイアレクトに適用されます。
フォーマットのキーボードショートカットは? Windows/LinuxではCtrl+Enter、macOSではCmd+Enterです。圧縮には、Windows/LinuxではCtrl+Shift+M、macOSではCmd+Shift+Mを使用します。
CREATE TABLEのようなDDLステートメントをフォーマットできますか? はい。sql-formatterライブラリはDDL(CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE INDEXなど)だけでなく、DML(SELECT、INSERT、UPDATE、DELETE)とDCL(GRANT、REVOKE)も処理します。DDLとDMLの混在したスクリプトはセミコロンで区切られていれば正しくフォーマットされます。
関連ツール
JSON Formatter — スキーマ検証、スキーマ生成、インタラクティブなツリービューアーでJSONデータをフォーマットおよび検証。
XML Formatter — 設定可能なインデントと圧縮でXMLドキュメントをフォーマットおよび検証。
YAML Formatter — YAML設定ファイルをフォーマットしてJSONに変換。
今すぐSQL Formatterを試す:SQL Formatter