SQLフォーマッター
ログやORMからコピーした1行のSQL文を貼り付けると、フォーマッターがそれをインデントされた句に分け、キーワードの大文字小文字を統一し、SELECT、FROM、WHERE、GROUP BYの前で改行し、射影部分の列を揃えます。MySQL、PostgreSQL、SQL Server、Oracle、SQLite、BigQueryの方言に対応しており、それぞれでキーワードや予約語が少しずつ異なります。
整形の仕組み
-
1
SQLを貼り付け
1行のかたまり、Hibernateからのミニファイ出力など、なんでも。`;`で区切られた複数文もすべて整形されます。
-
2
方言とスタイルを選ぶ
方言はキーワード一覧を制御し、スタイルはカンマの位置(先頭か末尾か)、インデント幅、キーワードの大文字・小文字を制御します。
-
3
トークンは正規表現置換ではなく解析される
トークナイザーが文字列、コメント、括弧、サブクエリを正しく扱います。文字列リテラルはそのまま保持されます。
-
4
整形した出力をコピー
検証済みのSQL。意味は同じで、レイアウトはすっきりします。
整形前と整形後
整形前:
SELECT u.id,u.name,COUNT(o.id) AS orders FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at>='2024-01-01' GROUP BY u.id,u.name HAVING COUNT(o.id)>5 ORDER BY orders DESC LIMIT 50;
整形後(先頭カンマ、大文字キーワード、2スペースインデント):
SELECT
u.id
, u.name
, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o
ON o.user_id = u.id
WHERE u.created_at >= '2024-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY orders DESC
LIMIT 50;
重要なスタイルの選択
- キーワードの大文字と小文字。 UPPERCASEは伝統的で見つけやすいです。小文字は、構文ハイライトのある最新のコードエディタではすっきり見えます。
- 先頭カンマと末尾カンマ。 先頭(
, col)は1つの列をコメントアウトしやすいです。末尾(col,)はテキストとして自然に読めます。 GROUP BYのカンマ位置。 長い句では1行に1つ、短い句ではインラインにすることが多いです。- JOINのインデント。 次の行に
ONを置く(ぶら下げインデント)か、同じ行に置くか。長い条件はぶら下げが向きます。 - サブクエリ。 開きカッコだけでなく、サブクエリ全体をインデントします。
方言ごとの落とし穴
- 識別子におけるMySQLのバッククォートとPostgreSQLのダブルクォート。
WITHCTE、MS SQLはWITHの前に;が必要です。フォーマッターがこれを処理します。- ウィンドウ関数、長い
OVER (...)句は、PARTITION BYとORDER BYを改行で折り返すと読みやすくなります。 - BigQueryには
ARRAY_AGG、STRUCT、テーブルのサフィックス(*_yyyymmdd)があり、トークナイザーはこれらを壊してはいけません。 - Oracleには
(+)の外部結合構文があります。フォーマッターはこれを保持しつつ、レガシーとして印を付けます。
フォーマッターが行わないこと
- バグの修正、不正なJOINは不正なままです。
SELECT *の展開、列リストはスキーマから推測しません。- クエリの最適化、レイアウトのみで、実行計画は扱いません。
- サブクエリのCTEへの書き換え、別の関心事です。
よくある質問
いいえ。純粋に見た目だけです。空白、改行、カンマの位置は動きますが、キーワード、演算子、リテラル、識別子は完全に保持されます。
対応しています。CREATE TABLE、ALTER、CREATE PROCEDURE、トリガー。フォーマッターはブロック構造(BEGIN ... END)やプロシージャ内の行継続も扱います。
本来は壊れないはずです。壊れたなら、おそらく方言の不一致です。方言を切り替えてみてください。再現する不具合は報告してください。バグとして扱います。
Flink SQLやCassandra CQLは似て見えますが、主流のフォーマッターが壊しがちな方言固有のキーワードがあります。慎重に使い、出力が動くことを確認してください。
関連ツール
Webpack設定ジェネレーター
素の JavaScript、React、Vue 向けに webpack 5 の webpack.config.js を生成します。TypeScript、Babel、CSS や Sass、画像、HtmlWebpackPlugin、開発サーバー、npm install のコマンドまでそろいます。
CSSローディングアニメーション生成ツール
純粋なCSSで円形スピナーを作成できます。直径、枠の太さ、アクセントカラー、回転速度を設定し、ライブプレビューを確認して、そのまま使えるCSSをコピー。SVGもJavaScriptも不要です。
OpenAPI 検証ツール
OpenAPI または Swagger のドキュメントを JSON か YAML で貼り付けて、コア構造をチェックします: バージョンフィールド、info オブジェクト、paths を、わかりやすいエラーと警告つきで。
カラーティントジェネレーター
ベースカラーの明るい色合いを生成します。デザイン システム トークン、背景、ホバー状態を 3 ~ 20 段階でスケールします。
CMYK から RGB への変換
標準的な計算式で CMYK の割合をおおよその RGB 値と Hex 値に変換し、画面用にすばやく確認できます。
PHPフォーマッター
単純なPHPコードに改行と2または4スペースのインデントを追加します。結果は必ず確認してください。PHPパーサーでもPSR-12準拠ツールでもありません。
このツールは他の言語でも利用できます
- SQL-formaterare [SV]
- Formatador SQL [PT]
- Formateador SQL [ES]
- รูปแบบ SQL [TH]
- Format SQL [ID]
- Formateur SQL [FR]
- SQL-Formatter [DE]
- SQL 포매터 [KO]
- SQL-formatter [NL]
- تنسيق SQL [AR]
- Định dạng SQL [VI]
- Formater SQL [PL]
- SQL 格式化器 [ZH]
- SQL Formatter [EN]
- Formatter SQL [IT]
- Форматтер SQL [RU]
- SQL Biçimlendirici [TR]