migrate について
migrateは、デフォルトで読み取り専用のデータベース移行安全スキルです。既存または生成された移行を分析し、ロック、テーブル再書き換え、可逆性、データ損失のリスクを評価します。破壊的変更を書き込むには、委任されたエージェントによる実行と対象名の厳密な確認が必要です。
主な機能
- 01既存の移行ファイルを検査
- 02スキーマ差分を生成して分類
- 03ロック、再書き換え、可逆性を評価
- 04破壊的変更とデータ損失手順を特定
- 05Expand-contract方式の展開手順を提案
- 06破壊的な書き込みに対象名の確認を要求
活用シーン
- 01適用前に移行をレビュー
- 022つのスキーマパスを比較して生成変更を確認
- 03リスクの高いスキーマ変更を安全に展開する計画
- 04破壊的な移行の誤実行を防止
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill migrateインストール後、Claude Code で/migrateを入力して読み込まれたか確認します。
詳細
/claude-db:migrate
db-migration-safety(M22、axis performance)モジュールが所有する、マイグレーションの安全性に関するリンターです。チェックには db-migration-safety / MSA を使用します。デフォルトは読み取り専用モードです。分析と説明のみを行い、マイグレーションは実行しません。
$ARGUMENTS には次の2つの形式があります。
- 単一ファイルのリンター —
<migration-file|migration-dir> [flags]:既存のマイグレーションを解析して分類します(下記参照)。 - 差分モード —
<from-schema> <to-schema> [flags]:2つのスキーマパスを指定します。node scripts/schema-diff.mjs --from <from-schema> --to <to-schema>を実行して up/down マイグレーションを生成し、生成されたマイグレーションを単一ファイルモードと同様に分類します。
引数が指定されていない場合は、引数を尋ねるか、プロジェクトのマイグレーションディレクトリを案内してください。
差分モード(<from-schema> <to-schema>)
node scripts/schema-diff.mjs --from <A> --to <B>を実行して、up マイグレーションと down マイグレーションを生成します。schema-diff.mjsは破壊的な手順にフラグを付けます。- 生成された up/down マイグレーションを、各手順の平易な要約とともにユーザーに提示します。
schema-diff.mjsが破壊的と判断したすべての手順(DROP TABLE/COLUMN、型の縮小)は、何かを書き込む前に、以下のデータ損失確認手順に進めます。- その後、生成されたマイグレーションを、単一ファイルモードと同じロック/書き換え/可逆性の分析で分類します。
実施内容(単一ファイルのリンター)
- マイグレーションを解析します(生の SQL または生成された ORM マイグレーション)。エンジンを検出し、エンジン固有のロック/書き換えルールを読み込みます。
- 各ステートメントを分類します。
- ロックレベル — 例:Postgres の
ACCESS EXCLUSIVE(読み取りと書き込みをブロック)とSHARE UPDATE EXCLUSIVEの違い、およびテーブルが処理中ずっとブロックされるかどうか。 - テーブルの書き換え — 変更によってすべての行が書き換えられるかどうか(例:古いエンジンで volatile default を持つ
NOT NULL列を追加する場合、または列の型を変更する場合)。書き換えのコストはテーブルサイズに応じて増加します。 - 可逆性 — きれいに down マイグレーションできるか、または一方向の操作か(データがすでに削除または変換されているか)。
- 破壊的/データ損失 —
DROP COLUMN/TABLE、TRUNCATE、型の縮小、enum 値の削除、不可逆な変換。
- ロックレベル — 例:Postgres の
schema/finding.schema.jsonに従って所見を出力します(status/severity/機密情報を伏せたうえで問題のステートメントを引用するevidence.observed/verification.reproduce/expected_impact.axis=performance+confidence+magnitude)。可逆性または expand-contract のない破壊的なマイグレーションは severity-5 となります(Performance に上限を設定)。行数やロック時間を捏造してはいけません。magnitude は high|medium|low の段階で示し、テーブルサイズに応じて評価します。テーブルサイズを創作してはいけません。- リスクのある変更には expand-contract によるロールアウトを提案します。expand(新しい nullable 列/新しいテーブルを追加する、またはデュアル書き込みを行う)、migrate(オンラインでバッチごとにバックフィルする)、contract(制約を切り替え、古い構造を削除する)の各段階を、ロックレベルを明記した個別の可逆な手順として提示します。
安全性/確認手順
- このコマンドが単独でマイグレーションを適用することはありません。
--applyは適用を要求するだけです。 - データ損失/破壊的と分類された手順には、明示的なトークン確認が必要です。対象となる正確なステートメントと不可逆な結果を提示し、その後、ユーザーに影響を受けるオブジェクト名をそのまま入力するよう求めます。yes/no ではありません。例:
DROP TABLE ordersを確認するには、ユーザーはordersと入力する必要があります。列emailを削除する場合は、emailと入力します。オブジェクト名と完全一致しない返信の場合、その手順は中止されます。確認ルールについてはreferences/migration-safety.mdを参照してください。 - 実際の書き込みは db-migration-writer サブエージェント(Write/Edit を持つ唯一のエージェント)にのみ委任し、確認手順を終えた後に限って実行します。デフォルトは読み取り専用です。
コメント
Markdown 対応