writing-sql について
writing-sqlは、SQLの作成とレビューに使うスキルで、キーワードの大文字化と縦型レイアウトを定めています。短いクエリから複雑なクエリまで書式を統一したいプロジェクトに適し、PHPに埋め込むSQLも対象です。
主な機能
- 01SQLキーワードの大文字化
- 02句ごとに改行
- 03句の内容をインデント
- 04列を1行に1つ記述
- 05JOINと条件の書式規則
- 06SQL用途別のリファレンス
活用シーン
- 01短いクエリと複雑なクエリの書式統一
- 02SQLが書式規則に沿うか確認
- 03PHP文字列内のSQL作成
- 04DDLやDMLの規則を参照
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ borkweb/ skills --skill writing-sqlインストール後、Claude Code で/writing-sqlを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/complex.mdddl.mddml.mdphp.md詳細
SQL の記述
概要
このプロジェクトのすべての SQL では、厳格な縦方向のフォーマットスタイルに従います。トップレベルのキーワードはすべてそれぞれ独立した行に記述し、その配下はすべてインデントします。
短いクエリも例外ではありません。 1 列、1 テーブル、1 条件のクエリも、10 個の JOIN を含む巨大なクエリと同じフォーマットにします。
ルール
キーワードの大文字・小文字
SQL キーワードはすべて大文字にします:SELECT、FROM、WHERE、JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN、ON、AND、OR、NOT、IN、EXISTS、BETWEEN、LIKE、IS NULL、IS NOT NULL、INSERT INTO、VALUES、UPDATE、SET、DELETE FROM、ORDER BY、GROUP BY、HAVING、LIMIT、OFFSET、AS、CASE、WHEN、THEN、ELSE、END、UNION、UNION ALL、EXCEPT、INTERSECT、WITH、RECURSIVE、OVER、PARTITION BY、ROWS、RANGE、ON DUPLICATE KEY UPDATE、CREATE TABLE、ALTER TABLE、DROP TABLE、ADD COLUMN、DROP COLUMN、MODIFY COLUMN、DEFAULT、NOT NULL、PRIMARY KEY、FOREIGN KEY、REFERENCES、AUTO_INCREMENT、ENGINE、CHARSET、COLLATE、INDEX、UNIQUE KEY、IF EXISTS、IF NOT EXISTS、CASCADE。
縦方向のレイアウト
各トップレベルの句キーワードは、独立した行の先頭に単独で記述します。その句に属する内容はすべて、1 段階(4 つのスペース)インデントします。
トップレベルの句キーワード:SELECT、FROM、WHERE、ORDER BY、GROUP BY、HAVING、LIMIT、SET、VALUES、ON DUPLICATE KEY UPDATE。
列
列は 1 行に 1 つ記述し、インデントして末尾にカンマを付けます:
SELECT
a.name,
a.weight_kg,
a.birth_date
FROM と JOIN
JOIN は FROM の下にインデントします。ON は JOIN の下にインデントします。内部結合には JOIN のみを使用します(INNER キーワードは冗長です)。外部結合が必要な場合は、明示的に LEFT JOIN または RIGHT JOIN を使用します:
FROM
animals a
JOIN species s
ON a.species_id = s.id
LEFT JOIN habitats h
ON a.habitat_id = h.id
複数条件の JOIN — 各条件を独立した行に記述し、先頭に AND を置きます:
FROM
animals a
JOIN observations o
ON a.id = o.animal_id
AND o.observed_at >= :start_date
AND o.status = 'confirmed'
WHERE
最初の条件をインデントします。続く行は同じインデントにし、先頭に AND/OR を置きます:
WHERE
s.class = :class
AND h.region = :region
AND a.released_at IS NULL
ORDER BY/GROUP BY
ORDER BY
a.name ASC
GROUP BY
s.id,
h.name
LIMIT/OFFSET
LIMIT
:limit
OFFSET
:offset
条件に応じた例
記述またはレビューする SQL に関連するリファレンスのみを参照してください:
- 複雑なクエリ:サブクエリ、CTE、CASE、ウィンドウ関数、集合演算。
- DML:INSERT、UPDATE、DELETE。
- DDL:マイグレーションでの CREATE、ALTER、DROP。
- PHP 内の SQL:PDO、heredoc、wpdb、Laravel、動的なフラグメント。
ホスト言語の文字列内の SQL も、短いクエリを含め、同じ縦方向のレイアウトを維持します。パラメーターのバインドとクエリの意味を保持してください。フォーマット変更は、クエリの実行やスキーマの変更を許可するものではありません。