SQLフォーマッター
SQL文字列にインデントと改行を加えて読みやすく整形します。長くて複雑なSQLのデバッグ・コードレビュー・ドキュメント化に役立ちます。
整形前
整形後
SQLフォーマッターとは
長いSQLは1行に詰め込まれていると構造が読み取れません。このツールはSELECT・FROM・WHERE・JOINといったキーワードを基準に改行を入れ、ネストしたサブクエリを段付けして、文の構造が目で追える形に整えます。整形しても意味は変わりません。
方言の選択が結果に影響します。MySQL・PostgreSQL・Oracle・SQL Serverではそれぞれ固有の構文があるため、使っているデータベースに合わせて選んでください。なお構文エラーがあるSQLは正しく解析できず、整形されないことがあります。その場合はまずSQL自体の妥当性を確認してください。
SQLの整形手順
- SQLを貼り付ける 整形したいSQLを入力欄に貼り付けます。セミコロンで区切れば複数の文をまとめて処理できます。
- 方言を選ぶ 使用中のデータベースに合わせて選択します。分からない場合は標準SQLのままでも大半の構文は整形できます。
- インデントと大文字変換を設定する インデント幅はチームの規約に合わせて調整します。大文字変換を有効にするとキーワードが揃い読みやすくなります。
- 整形して結果を確認する 「整形」を押すと結果が表示されます。そのままコードレビューや仕様書へ貼り付けられます。
使いこなすためのヒント
- 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の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 と入力するだけでパスワードなしでログインできてしまう ― という古典的な脆弱性は、今もセキュリティ研修の定番教材として使われています。