この記事に関連するツール
ブラウザ上ですぐに試せます。記事の内容を確認しながら使うと、作業の流れをつかみやすくなります。
SQLは動けばよい、で済ませるとレビューが重くなります。
特にJOINやサブクエリが入ると、整形されていないSQLは条件の見落としにつながります。
SQL Formatterを使うと、クエリの構造を先に整えてからレビューできます。
こんなSQLを読むとき
select users.id, users.name, count(orders.id) as order_count from users left join orders on users.id = orders.user_id where users.status = 'active' group by users.id, users.name order by order_count desc;
整形すると、読みたい単位が分かれます。
SELECT
users.id,
users.name,
COUNT(orders.id) AS order_count
FROM users
LEFT JOIN orders
ON users.id = orders.user_id
WHERE users.status = 'active'
GROUP BY
users.id,
users.name
ORDER BY order_count DESC;
この形なら、JOIN条件、絞り込み条件、集計条件を別々に確認できます。
実例:APIデバッグとSQL確認をつなげる
APIのレスポンスが想定と違うときは、ブラウザのNetworkタブからリクエストをCurlとしてコピーし、再現コードを作ってからSQLログを確認する流れがよくあります。
curl 'https://example.com/api/users?status=active' \
-H 'Authorization: Bearer token'
リクエスト条件を再現できたら、サーバーログに出たSQLを整形します。
select * from users where status = 'active' and deleted_at is null order by created_at desc;
APIの入力条件とSQLの WHERE が対応しているかを見比べることで、フロントエンドのパラメータ漏れなのか、バックエンドのクエリ条件漏れなのかを切り分けやすくなります。
レビュー前に見るポイント
- SELECT句に不要な列が入っていない
- JOIN条件が意図したキーになっている
- WHERE句で除外しすぎていない
- GROUP BYの列がSELECT句と対応している
- ORDER BYが期待する並び順になっている
整形はSQLを正しくする作業ではありません。
ただし、正しくない箇所を見つけやすくする作業としてかなり有効です。
SQL Builderとの使い分け
SQL Builderでクエリの骨組みを作り、SQL Formatterで最終確認する流れにすると、作成とレビューの役割を分けられます。
SQLを書き慣れていない人の学習にも、レビュー前のセルフチェックにも使いやすい流れです。
Curlコマンド変換ツールを併用すると、API再現コード、SQL整形、レビューコメントを同じ流れで作れます。再現条件を先に固定してからSQLを見ると、調査の前提がずれにくくなります。