SQLフォーマッター・整形ツール

本ツールは,簡易的な文字列置換ベースでSQL文を整形・Minifyするブラウザ用ツールです.インデント調整(2/4スペース)や大小文字変換をサポートしますが,構文検査やDB接続機能はありません.

読み込み中...

入力データの記述例

SELECT id,name FROM users WHERE age>20 ORDER BY name ASC

処理後の出力結果例

SELECT id,
name
FROM users
WHERE age>20
ORDER BY name ASC

よく発生する構文エラー・記述ミス

  • •構文検査や実行検証の機能はありません.整形後のクエリを利用先の検証環境で確認してください.
  • •各データベース固有の構文やドル引用符は適切に整形されない場合があります.
  • •Minifyはコメントと空白を削減しますが,元のSQLの意味の保持を保証しません.

対応規格・動作仕様

SQLテキストの簡易整形2/4スペース大文字/小文字/保持Minify(意味保持は非保証)

関連する技術解説・ブログ記事

ZeroToolsのブラウザ内処理と,外部通信を利用する機能の違いやデータの取り扱いについて.

記事を読む

ZeroToolsのブラウザ内処理とプライバシー

ZeroToolsは,入力内容を端末内で処理するツールを中心に提供しています.各ツールの対応範囲と制限を確認して利用してください.

データの取り扱い・プライバシー方針
第1章

貼付けと二つの出力

本SQLフォーマッター・整形ツールは,テキストエリアに入力されたデータベース操作言語(SQL)に対して,読みやすさを向上させる「整形(Beautify)」と,ファイルサイズや通信量を削減するための「圧縮(Minify)」という二つの出力形式を提供します.ユーザーが対象となるクエリをテキストエリアに貼り付け,用途に応じたボタンをクリックするだけで,ブラウザ上のJavaScriptが直ちに処理を開始します.

「整形(Beautify)」機能は,一行に長く記述されてしまって解読が困難なクエリや,開発者ごとに書き方が異なりインデントが揃っていないSQL文に対し,あらかじめ定められたルールに従って改行と空白を挿入します.これにより,区切りの位置を目視しやすくなり,チーム内でのコードレビューや後日のメンテナンス作業が容易になります.

一方,「圧縮(Minify)」機能は,アプリケーションのソースコード内にクエリを埋め込む場合や,ネットワーク経由でクエリを送信する際のペイロードを最小化したい場面で活用されます.この機能を選択すると,クエリ内に含まれる不要な改行,連続するスペース,およびインラインコメントやブロックコメントが取り除かれ,可能な限り短い文字列へと変換されます.

画面上にはクリアボタンやコピーボタンといった補助機能も配置されており,変換後のコードをワンクリックでクリップボードに格納できるため,統合開発環境(IDE)やデータベース管理ツールへとスムーズにペーストできます.なお,本ツールは抽象構文木(AST)を用いた完全な構文解析器を実装しているわけではなく,入力された文字列に対する連続的な置換処理と分割処理によって二つの出力を生成しています.

したがって,データベース接続を伴う実行計画の取得や,クエリの文法的な正しさを保証するLint機能は搭載されておらず,あくまで文字列の形式的なフォーマット変換に特化した設計となっています.

第2章

字句の簡易処理

当ツールの文字列処理エンジンは,本格的なパーサー(構文解析器)を用いず,正規表現と特定の区切り文字を利用した簡易的な字句処理によってSQLの構造を読み解きます.処理の最初のステップとして,クエリ内に含まれる「文字列リテラル」と「コメント」を一時的に保護する処理が行われます.

シングルクォーテーション,ダブルクォーテーション,あるいはバッククォートで囲まれた文字列,およびハイフン二つ(--)から始まる行コメント,スラッシュとアスタリスク(/* */)で囲まれたブロックコメントは,それぞれ固有のプレースホルダー文字列(例:__SQL_TOKEN_0__)へと一時的に置き換えられます.

これにより,その後の空白分割や大文字変換処理によって,文字列の中身やコメント内のテキストが意図せず改変されてしまうことを防ぎます.

文字列とコメントを保護した後,ツールは括弧(( と ))およびカンマ(,)の前後に強制的に空白を挿入し,クエリ全体を空白文字を基準としてトークン(単語)の配列へと分割します.この分割された配列に対して,特定の組み合わせを持つ複数単語の句を一つのトークンとして再結合する処理を実行します.

例えば,「GROUP」と「BY」,「ORDER」と「BY」,「INSERT」と「INTO」,「LEFT」と「JOIN」,「UNION」と「ALL」といった,SQLの構文上不可分なキーワード群は,個別の単語ではなく一つの意味のまとまりとして扱われるように結合されます.

このようにして抽出・結合されたトークン配列を先頭から順に走査しながら,出力用の文字列を構築していきます.このとき,ツール内部に保持された「SELECT」「FROM」「WHERE」「JOIN」といった主要キーワードのリストと照合を行い,一致した場合はそのキーワードの前で改行を入れるといったレイアウトの調整を行います.

「AND」や「OR」などの論理演算子についても同様に改行のトリガーとなります.すべてのトークンを配置し終えた後,最初にプレースホルダーへと置き換えていた文字列やコメントを元の状態へと復元し,連続する空行を整理するクリーンアップ処理を経て,最終的な整形済みクエリが完成します.

第3章

インデントと大小文字

画面上のコントロールパネルでは,整形結果の見た目をユーザーの好みやプロジェクトのコーディング規約に合わせて調整するための設定項目が提供されています.一つ目はインデント幅の指定であり,ドロップダウンメニューから「2スペース」または「4スペース」を選択することができます.

このインデントは,主に括弧によって囲まれたサブクエリ(副問合せ)やカラム定義のリスト,関数内の引数リストなどの階層構造を表現するために使用されます.トークンの走査中に開き括弧「(」を検知するとインデントの深度が1段階深くなり,それに続く改行の後に指定された数の空白が挿入されます.

逆に閉じ括弧「)」を検知するとインデントの深度が1段階浅くなり,適切な位置に括弧が配置されます.また,カンマ「,」の直後にも改行と現在の深度に応じたインデントが付与されるため,SELECT句で複数のカラムを取得する場合などに,各カラムが縦に綺麗に整列します.

二つ目の設定項目は,キーワードの大文字・小文字の変換規則です.「大文字に変換」「小文字に変換」「ケースを維持」の三つのオプションが用意されています.ツール内部には「SELECT」「WHERE」「LIMIT」「CREATE TABLE」などの標準的なSQLコマンドや修飾子を含む予約語のセットが定義されており,分割されたトークンがこのセットに含まれているかどうかを判定します.

該当するキーワードであった場合,ユーザーの選択に従って強制的に大文字(例:SELECT)または小文字(例:select)に変換されて出力されます.「ケースを維持」を選択した場合は,入力時の文字のまま出力されます.キーワード一覧との文字列一致で変換するため,同じ綴りの識別子を文脈から区別する処理はありません.

これにより,SQLコマンド部分とユーザー定義の識別子部分のコントラストを付け,視認性を高めることが可能です.

第4章

具体的な確認手順

本ツールを利用してクエリの整形や圧縮を行う場合,処理結果が想定通りであるかをユーザー自身で確認する手順が重要となります.まず,「SQL入力」エリアに対象のクエリを貼り付けます.例えば,select id,name from users where status='active' and age>20; という改行のないクエリを入力し,インデントを「2スペース」,キーワードを「大文字に変換」に設定して「整形」ボタンを押下します.

すると右側のパネルには,SELECTが大文字に変換され,idとnameがカンマの後に改行され,FROMとWHEREがそれぞれ独立した行となり,ANDの前で改行とインデントが行われた状態のクエリが出力されます.この結果を目視で確認し,意図したレイアウトになっているかをチェックします.

次に,「圧縮(Minify)」機能を使用する場合の確認手順です.開発中のクエリには -- この条件は必須 といった行コメントが含まれていることが多々ありますが,圧縮ボタンを押下すると,これらのコメントはすべてスペースに置換され,改行も削除されて一行の短い文字列になります.

また,カンマや等号(=),不等号(>,<)の前後にあった空白も可能な限り詰められます.出力された圧縮済みのコードをコピーボタンで取得し,アプリケーションのソースコード内に文字列として貼り付ける前に,必ず一度テキストエディタ等で想定外の文字の結合が起きていないかを確認してください.

本ツールは文字列の置換ロジックで動作しているため,複雑な入れ子構造や特殊な記号を含むクエリの場合,括弧の対応関係や空白の位置が元のクエリの文脈を完全に維持できないケースが存在し得ます.そのため,整形や圧縮を行った直後のクエリを本番環境に直接適用するのではなく,必ずローカルの開発用データベースやステージング環境のデータベースクライアント(psqlやMySQL Workbenchなど)で一度実行し,構文エラーが発生しないこと,および実行結果のレコード件数や内容が変換前のクエリと完全に一致することを確認するプロセスを運用フローに組み込むことを推奨します.

第5章

コメント・方言の限界

当ツールが採用している正規表現とプレースホルダーを用いた簡易的な字句処理アプローチには,対応できる構文の範囲に明確な限界が存在します.まずコメントの保持についてですが,標準的な -- による行コメントと /* */ によるブロックコメントの保護には対応しているものの,データベース製品によっては異なる記法をサポートしている場合があります.

例えば,MySQLにおける # を用いた行コメントなどには対応しておらず,これらがクエリ内に含まれていた場合,単なる記号として扱われてしまい,改行や空白の調整の過程で意図しない位置に移動したり,クエリの構造を崩してしまう原因となることがあります.

また,データベース固有の「方言」と呼ばれる独自の拡張構文についても,完全な整形は保証されません.例えば,PostgreSQLで多用されるドル引用符($$ や $tag$ で囲む文字列)によるリテラル表記は保護対象として認識されないため,内部の文字列がSQLのトークンとして分割され,キーワードの大文字変換や不要な改行の挿入が行われてしまう可能性があります.

同様に,Oracle Databaseの階層問い合わせ(START WITH ... CONNECT BY)や,SQL ServerのCROSS APPLYなどの特有のキーワードについても,内部の主要キーワードリストに完全には網羅されていないため,標準的なSELECTやWHEREのような適切な改行・インデントが行われず,単なる一般の単語として横に並んで出力される場合があります.

さらに,データ型のキャスト演算子(::)やJSON抽出演算子(-> や ->>)といった各データベース製品固有の演算子記号周りの空白処理も,厳密な文脈解析を行っていないため,不自然な空白が挿入されたり,逆に必要な空白が削除されるリスクがあります.圧縮(Minify)処理においても,コメントの削除と空白の削減を機械的に行うため,特定の方言における文脈(例:識別子とキーワードが隣接してはならないケース)においては,構文エラーを引き起こす文字列へと変換されてしまう可能性を排除できません.

これらの限界を理解した上で,標準的なSQL構文の範囲内で利用することが求められます.

第6章

実務における整形済みSQLの検証手順

本ツールで整形・MinifyしたSQLを実際の業務で利用する際は,構文検査機能が含まれていないため,事前の慎重な確認が不可欠です.整形後のクエリを本番環境でいきなり実行することは避け,必ず安全な検証環境(テストデータベース)を用いて以下の手順を実施してください.

まず,元のSQLとツールで整形した後のSQLのテキスト差分(Diff)を確認します.文字列処理による簡易的なフォーマットであるため,意図しない改行やスペースの欠落が生じていないかを目視や差分ツールでチェックしてください.特に,文字列リテラル内やコメント部分が不自然に変更されていないかに注意を払う必要があります.

次に,検証環境で元のクエリと整形後のクエリをそれぞれ実行し,取得される結果セット(行数,列数,データ内容)が意図どおりであることを確認します.この際,対象のSQLに個人情報や機密データが含まれる場合は,ツールへ入力する前にテスト用のダミー値に置き換えるか,あるいは機密値を伏せた状態(マスク処理)にしてから整形を行う実務手順を徹底してください.

本処理自体はブラウザ内で実行されますが,サイト全体が無通信であることや完全なオフライン状態,絶対的な安全性を保証するものではないため,機密情報の直接的な貼り付けは推奨されません.

最後に,検証環境での実行結果に問題がないことが確認できた場合に限り,次のステップへ進めてください.決して本番環境での直接実行(本番実行)は行わず,あくまで検証環境での確認に留めることが重要です.

よくある質問(FAQ)

A.
当ツールの整形および圧縮処理はすべてお使いのブラウザ上のJavaScriptで完結しています.データベースへの接続や外部サーバーへのデータアップロードは行いません.ただしサイト全体の通信や機密情報の安全性を保証する説明ではありません.
A.
SELECTやWHERE,JOINなどの基本的な標準SQLキーワードの整形に対応しています.ただし,簡易的な文字列処理によってフォーマットを行っているため,各データベース製品固有の複雑な構文や,ドル引用符(Dollar Quote)などの特殊な記述,独自の組み込み関数については適切に整形されない場合があります.
A.
いいえ,当ツールは文字列の簡易的な置換と分割によるフォーマット専用であり,データベースエンジンによる構文解析(AST生成)や実行検証の機能は持っていません.整形後のクエリが正しく動作するかどうかは,ご利用のデータベース環境で実際に実行する前に必ずご自身で確認してください.
A.
圧縮機能は,改行やインデント,コメント(-- や /* */)を削除して連続する空白を一つにまとめる簡易的な処理を行います.そのため,クエリ内の文字列リテラルや特定の方言における文脈によっては意図しない形に結合される可能性があり,意味の保持を完全には保証できません.