review-sql について
SQL およびクエリコードを対象とするレビュー用スキルです。コードレビューの工程にも、クエリに絞った検査にも使えます。パラメーター化、インデックス、トランザクション、NULL 処理、方言、ページネーションを確認し、具体的な位置を示して指摘します。
主な機能
- 01インジェクションリスクとパラメーター化の確認
- 02インデックスと実行計画上の懸念の評価
- 03トランザクション境界と分離レベルの確認
- 04NULL 処理と一意制約の確認
- 05方言互換性とページネーションの評価
- 06機密列へのアクセスと権限の確認
活用シーン
- 01生 SQL や埋め込みクエリのレビュー
- 02クエリの正確性、性能、安全性の確認
- 03移行時のデータベース方言互換性の検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nesnilnehc/ ai-cortex --skill review-sqlインストール後、Claude Code で/review-sqlを入力して読み込まれたか確認します。
同梱ファイルREADME.md
詳細
スキル(Skill):SQL のレビュー
目的(Purpose)
SQL およびクエリ関連コードの言語とクエリの規約のみを確認します。インジェクションとパラメーター化、インデックスと実行計画の問題、トランザクションと分離、NULL と一意制約、方言の移植性、大規模テーブルとページネーションのパターン、機密列と権限を対象とします。集約のため、標準形式で結果リストを出力します。範囲の選択や、包括的なセキュリティ/アーキテクチャレビューは定義しません。インジェクションはここでは SQL 固有の問題ですが、より広範なセキュリティについては review-security を使用してください。
主な目標(Core Objective)
最優先の目標:指定されたコード範囲を対象に、インジェクション/パラメーター化、インデックス、トランザクション、NULL/制約、方言の移植性、ページネーションのパターン、機密列へのアクセスを網羅した、SQL を中心とする findings リストを作成します。
成功基準(すべて満たす必要があります):
- ✅ SQL 範囲のみ:SQL とクエリの規約のみをレビューし、範囲の選択、包括的なセキュリティ分析、アーキテクチャ分析は実行していません
- ✅ 7 つの SQL の観点をすべて網羅:インジェクション/パラメーター化、インデックス/実行計画、トランザクション/分離、NULL/一意制約、方言/移植性、大規模テーブル/ページネーションのパターン、および関連する機密列/権限
- ✅ 結果の形式に準拠:各結果には、場所、カテゴリ(
language-sql)、重大度、タイトル、説明、および任意の提案が含まれています - ✅ 重大なインジェクション問題にフラグを付ける:SQL インジェクションのパターン(文字列連結、ユーザー入力の補間)に「重大」の重大度を付けています
- ✅ 正確な場所を参照:すべての結果が、特定のファイル:行またはクエリ識別子の場所を参照しています
受け入れテスト:出力には、関連するすべてのクエリの観点を網羅した SQL の結果リストが含まれ、インジェクションのリスクに「重大」のフラグが付けられ、各結果に具体的な場所の参照が含まれていますか?
範囲の境界(範囲の境界)
このスキルが担当する内容:
- 文字列連結または補間による SQL インジェクション — パラメーター化クエリとプリペアドステートメント
- WHERE/JOIN/ORDER BY 列のインデックス不足
- トランザクション境界、分離レベル、デッドロックのリスク、長時間実行されるトランザクション
- 比較/集計での NULL の扱い、一意制約、NOT NULL の正確性
- データベース方言の移植性(LIMIT/OFFSET/FETCH、日付関数、ベンダー固有の構文)
- 大規模テーブルの全件スキャン、ページネーション戦略(keyset と OFFSET)
- SELECT 内の機密列の露出、最小権限ロールの使用
このスキルが担当しない内容:
- 範囲の選択 — 範囲は呼び出し元が指定します
- より広範なセキュリティ分析(SQL インジェクションを除く)—「review-security」を使用してください
- アーキテクチャ分析 —「review-architecture」を使用してください
- 包括的なオーケストレーションによるレビュー —「コードレビュー」を使用してください
引き継ぎ先:すべての SQL の結果を出力したら、集約のために orchestrate-code-review に引き渡します。より広範なセキュリティの問題(認証、暗号化、設定)については、「セキュリティレビュー」に案内してください。
使用例(ユースケース)
- オーケストレーションされたレビュー:orchestrate-code-review が SQL(.sql ファイル、埋め込み SQL、ORM で生成された SQL)を含むプロジェクトを実行するときに、言語別のステップとして使用します。
- SQL のみのレビュー:ユーザーがクエリの正確性、パフォーマンス、セキュリティのみを確認したい場合。
- 移行または移植性:方言固有の構文と、データベース間の移植性を確認します。
使用するタイミング:レビュー対象のコードに SQL(生の .sql、埋め込みコード、または ORM で生成された SQL)が含まれている場合。範囲(差分かパスか)は呼び出し元またはユーザーが決定します。
動作(動作)
このスキルの範囲
- 分析対象:指定された範囲(ファイル、スニペット、差分)内の SQL とクエリロジック。.sql ファイル、アプリケーションコード内の埋め込み SQL、または ORM で生成された SQL(確認できる場合)を対象とします。
- 対象外:範囲(差分かコードベースか)を決定しないでください。アプリケーション全体のセキュリティレビューやアーキテクチャレビューは実行しません。SQL/クエリの観点に焦点を当てます。
確認リスト(SQL の観点のみ)
- インジェクションとパラメーター化:文字列連結や補間を使わずに SQL でユーザー入力を処理しているか。パラメーター化クエリまたはプリペアドステートメントを使用しているか。信頼できない入力による動的 SQL を避けているか。
- インデックスと実行計画:インデックスのない列でフィルターまたは結合を行うクエリ。大規模テーブルに対する SELECT *。WHERE/JOIN/ORDER BY に必要なインデックスの不足。
- トランザクションと分離:適切なトランザクション境界。分離レベルとロック。長時間実行されるトランザクションの回避。デッドロックのリスク。
- NULL と一意制約:比較と集計における NULL の扱い。一意制約と重複の処理。適切な場合の NOT NULL。
- 方言と移植性:データベース固有の構文(例:LIMIT と OFFSET/FETCH、日付関数)と、必要に応じた移植性(複数のデータベースをサポートする場合)。
- 大規模テーブルとページネーション:大規模テーブルに対する全件スキャン。ページネーション(keyset と OFFSET)とスケーラビリティ。
- 機密列と権限:SELECT 内の機密データ。SQL 内での最小権限とロールの使用(確認できる場合)。
トーンと参照
- 専門的かつ技術的:具体的な場所(ファイル:行またはクエリ識別子)を参照します。場所、カテゴリ、重大度、タイトル、説明、提案を含む結果を出力します。
入力と出力(Input & Output)
入力(入力)
- コード範囲:SQL を含むファイルまたはスニペット(例:.sql ファイル、埋め込み SQL を含むコード、または利用可能な場合は ORM で生成された SQL)。ユーザーまたは範囲スキルによって提供されます。
出力(出力)
- 付録:出力契約で定義されている形式で、0 個以上の結果を出力します。
- このスキルのカテゴリはlanguage-sqlです。
制限(制限)
厳守する境界(Hard Boundaries)
- 範囲の選択や、包括的なセキュリティ/アーキテクチャレビューを実行しないでください。SQL とクエリの規約に従ってください。
- 具体的な場所や実行可能な提案を含めずに、結論を出さないでください。
- 特に指定がない限り、特定のデータベースベンダーを想定しないでください。関連する場合は方言に言及してください。
スキルの境界(Skill Boundaries)
次のことはしないでください(他のスキルが対応できます):
- コード範囲を選択または定義しないでください — 範囲は呼び出し元または「コードレビュー」が決定します
- SQL インジェクション以外の広範なセキュリティ分析を実行しないでください —「review-security」を使用してください
- アーキテクチャ分析を実行しないでください —「review-architecture」を使用してください
- SQL 以外のコードに対する SQL の規約をレビューしないでください(アプリケーションコード内の SQL インジェクションは「セキュリティレビュー」で指摘してください)
作業を終了して引き継ぐタイミング:
- すべての SQL の結果を出力したら、集約のために「orchestrate-code-review」に引き渡します
- ユーザーがより広範なセキュリティ分析(認証、暗号化、設定)を必要とする場合は、「セキュリティレビュー」に案内します
- ユーザーが包括的なレビュー(範囲+言語+認知)を必要とする場合は、「コードレビュー」に案内します
セルフチェック(Self-Check)
主な成功基準
- SQL 範囲のみ:SQL とクエリの規約のみをレビューし、範囲の選択、包括的なセキュリティ分析、アーキテクチャ分析は実行していません
- 7 つの SQL の観点をすべて網羅:インジェクション/パラメーター化、インデックス/実行計画、トランザクション/分離、NULL/一意制約、方言/移植性、大規模テーブル/ページネーションのパターン、および関連する機密列/権限
- 結果の形式に準拠:各結果には、場所、カテゴリ(
language-sql)、重大度、タイトル、説明、および任意の提案が含まれています - 重大なインジェクション問題にフラグを付ける:SQL インジェクションのパターン(文字列連結、ユーザー入力の補間)に「重大」の重大度を付けています
- 正確な場所を参照:すべての結果が、特定のファイル:行またはクエリ識別子の場所を参照しています
プロセス品質チェック
- SQL/クエリの観点のみをレビューしましたか(クエリ設計を超える範囲/アーキテクチャを扱っていませんか)?
- 関連するパラメーター化、インデックス、トランザクション、NULL/制約、移植性を網羅しましたか?
- 各 finding に、場所、カテゴリ=language-sql、重大度、タイトル、説明、任意の提案が含まれていますか?
- 問題を file:line またはクエリ識別子で参照しましたか?
受け入れテスト
出力には、関連するすべてのクエリの観点を網羅した SQL の結果リストが含まれ、インジェクションのリスクに「重大」のフラグが付けられ、各結果に具体的な場所の参照が含まれていますか?
例(例)
例 1:クエリ内の文字列連結
- 入力:ユーザー入力を含め、文字列連結を使用して構築されたクエリ。
- 期待される結果:SQL インジェクションに関する重大な finding を出力し、パラメーター化クエリまたはプリペアドステートメントを提案します。カテゴリ=language-sql。
例 2:ページネーションのない大規模テーブル
- 入力:LIMIT やページネーションのない SELECT * FROM large_table ORDER BY id。
- 期待される結果:パフォーマンスとスケーラビリティに関する結果を出力し、ページネーション(例:keyset または OFFSET/FETCH)を提案し、不要な場合は SELECT * を避けるよう提案します。カテゴリ=language-sql。
エッジケース:ORM で生成された SQL
- 入力:ORM のみを使用するアプリケーションコード。生成された SQL は確認できません。
- 期待される結果:コード内に生の SQL またはクエリビルダーがないか確認します。確認できる SQL がない場合は、その旨を説明してスキップするか、「範囲内にレビュー対象の SQL がありません」と報告します。SQL を捏造しないでください。