SQLフォーマッター

SQL文字列にインデントと改行を加えて読みやすく整形します。長くて複雑なSQLのデバッグ・コードレビュー・ドキュメント化に役立ちます。

整形前

整形後

SQLフォーマッターとは

長いSQLは1行に詰め込まれていると構造が読み取れません。このツールはSELECT・FROM・WHERE・JOINといったキーワードを基準に改行を入れ、ネストしたサブクエリを段付けして、文の構造が目で追える形に整えます。整形しても意味は変わりません。

方言の選択が結果に影響します。MySQL・PostgreSQL・Oracle・SQL Serverではそれぞれ固有の構文があるため、使っているデータベースに合わせて選んでください。なお構文エラーがあるSQLは正しく解析できず、整形されないことがあります。その場合はまずSQL自体の妥当性を確認してください。

SQLの整形手順

  1. SQLを貼り付ける 整形したいSQLを入力欄に貼り付けます。セミコロンで区切れば複数の文をまとめて処理できます。
  2. 方言を選ぶ 使用中のデータベースに合わせて選択します。分からない場合は標準SQLのままでも大半の構文は整形できます。
  3. インデントと大文字変換を設定する インデント幅はチームの規約に合わせて調整します。大文字変換を有効にするとキーワードが揃い読みやすくなります。
  4. 整形して結果を確認する 「整形」を押すと結果が表示されます。そのままコードレビューや仕様書へ貼り付けられます。

使いこなすためのヒント

  • SELECT・FROM・WHERE・JOIN などの SQL キーワードが自動改行・整列され、ネストしたサブクエリも適切にインデントされます。
  • 「大文字変換」を有効にするとキーワードが自動で大文字化され、可読性が向上します。
  • インデントの大きさを調整することで、チームのコーディング規約に合わせた整形が可能です。
  • 整形後の SQL をコードレビューや仕様書に貼り付けると読みやすくなります。
  • MySQL・PostgreSQL・Oracle など主要な SQL 方言に対応しています。

SQLフォーマッターの活用シーン

受け取ったSQLを読み解く

ログやアプリのソースから抜き出した1行のSQLを整形すると、結合条件や絞り込み条件の構造が一目で分かります。

コードレビューに出す前に整える

インデントを揃えてから提出すれば、レビュアーは書式ではなくロジックに集中できます。差分も読みやすくなります。

仕様書やドキュメントへ載せる

整形済みのSQLを資料に貼れば、読み手が構造を追えます。大文字変換を併用すると印刷物でも見やすくなります。

遅いクエリの構造を分析する

サブクエリの深さや結合の数を目で確認できるため、実行計画を読む前の当たりを付けられます。

SQLに関する用語

SQL方言
データベース製品ごとに異なる構文の差異です。標準SQLに各製品が独自の拡張を加えているため、整形時に指定が必要になります。
サブクエリ
別のSQL文の中に入れ子で書かれた問い合わせです。深くなるほど読みにくくなるため、段付けの効果が大きい部分です。
JOIN
複数のテーブルを結び付けて取得する構文です。結合条件が長くなりがちで、改行位置が可読性を左右します。
プリペアドステートメント
値を後から差し込む形で問い合わせを組み立てる方式です。SQLインジェクション対策の基本になります。
SQLインジェクション
入力値にSQLの断片を混ぜて意図しない問い合わせを実行させる攻撃です。文字列連結でSQLを組むと起こりやすくなります。
ストアドプロシージャ
データベース側に保存しておく一連の処理です。制御構文を含むため、整形の対応範囲外になることがあります。

よくある質問

標準SQLに加え、MySQL・PostgreSQL・Oracle(PL/SQL)・SQL Server(T-SQL)に対応しています。プルダウンから使用中のデータベースに合った方言を選ぶことで、方言固有の構文が正しく整形されます。

入力した SQL に構文エラーがある場合、フォーマッターが正しく解析できないことがあります。SQL が有効な構文かどうかをデータベースクライアントで確認してみてください。

複数の SQL 文をセミコロン区切りで貼り付けると、まとめて整形されます。ただし、ストアドプロシージャや PL/SQL のブロック構文は完全にはサポートされていない場合があります。
ツールくん

余談ですが ― SQLの50年 ― リレーショナルデータベースの歴史

SQLは1970年にEF Codd(IBM)が論文で提唱した 関係モデル に基づき、IBMが「SEQUEL」として開発したのが起源です(商標の都合でSQLに改称)。1986年にANSI標準化され、今日に至るまで多くのデータベースで使われ続けている息の長い言語です。

最も有名なセキュリティ事件の一つが SQLインジェクション 攻撃です。2011年のソニーPSN(PlayStation Network)事件では1億件以上の個人情報が漏洩し、損害額は1.71億ドルと試算されました。現在でもOWASP Top 10(Webアプリの主要脆弱性ランキング)の常連として挙げられており、「プリペアドステートメント」の使用が対策の基本とされています。

「WHERE 1=1」は動的なSQL構築の便利テクニックですが、SQLインジェクションの典型例でもあります。ログインフォームに ' OR '1'='1 と入力するだけでパスワードなしでログインできてしまう ― という古典的な脆弱性は、今もセキュリティ研修の定番教材として使われています。