fix について
fixは、監査結果をマイグレーション案に変換するオプトイン型のデータベース移行スキルです。既定ではdry-runで実行し、自動・提案・助言の変更を区別して、明示的な確認後にのみ書き込みます。
主な機能
- 01既定でdry-runを実行
- 02リスク別に修正を分類
- 03マイグレーション差分と理由を表示
- 04書き込み前に確認を要求
- 05書き込み後に結果を再検証
- 06稼働中のデータベースへ直接書き込まない
活用シーン
- 01監査結果に基づく移行案の確認
- 02カテゴリ別の修正範囲指定
- 03意味変更を個別にレビュー
- 04書き込み後の移行結果確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill fixインストール後、Claude Code で/fixを入力して読み込まれたか確認します。
詳細
fix(オプトイン型ライター)
disable-model-invocation: true は、モデルがこの機能を自律的に実行することは決してなく、ユーザーが /claude-db:fix を実行した場合にのみ実行されることを意味します。書き込みは db-migration-writer サブエージェント(Write/Edit を持つ唯一のエージェント)を通じてのみ行われ、明示的な確認を得た後に限られます。デフォルトはドライランです。
修正可能な分類(各指摘の fixable フィールドに基づきます。schema/finding.schema.json を参照)
- AUTO — 決定論的で、加算的、可逆的、機械検証可能で、セマンティックリスクが低いものです。オンラインで安全な変更を expand-contract マイグレーションとして表現できる場合は、差分と確認を経て書き込めます。
欠落している非一意インデックス/FK をサポートするインデックスの追加、
NOT VALIDを使ってからVALIDATEするNOT NULL/CHECK/UNIQUE制約の追加、NOT VALIDで追加してから検証する欠落した FK の追加、デフォルト値または生成列の加算的な追加、サイズが不足している整数キーの拡張が該当します。いずれもクリーンなダウンマイグレーションを備えます。 - PROPOSED — データ、セマンティクス、または構造を変更するものです。ドラフトマイグレーションを生成し、項目ごとの承認を求めます。データを強制変換/書き換える型変更(例:通貨を
floatからnumericに変更)、バックフィル、非正規化/正規化の移行、名前変更、enum の変更、ソフトデリート/時間関連の列が該当します。 - ADVISORY — ツールによる書き込みは行いません。エンジンの選択(M0)、シャーディング/パーティショニングのトポロジー、RLS/セキュリティポリシーの設計、キャパシティ/スケーリングの判断、実際の本番データまたは意図に関する判断が必要な事項が該当します。
ワークフロー
- 指摘事項(直近の監査、新たな監査、または findings JSON から取得)を受け取ります。
fixable: auto(ユーザーがオプトインした場合はproposedも)に絞り込みます。対象範囲には--categoryを適用します。 - 各指摘について、正確なマイグレーションを作成します(書き換え/ロックのリスクがある場合は expand-contract の手順を含めます)。差分の前には、何を行い、なぜ必要なのかを説明する平易な言葉の行を記載し、その後に unified diff/マイグレーションファイルの内容を続けます。必要な実値(バックフィル値、enum の対象セット、FK の参照先)はすべてユーザーに尋ねて解決します。決して捏造しません。
- ドライラン(デフォルト):すべての平易な言葉の行と差分を、ファイル/手順ごとにまとめて表示します。何も書き込みません。
fix(--dry-runなし)で変更される内容を、各手順のロックレベルと可逆性を含めて要約します。 - 明示的な確認を得た場合に限り、適用を db-migration-writer に委任します。変更ごとに確認するか、まとめて確認するかはユーザーが選択できます。
安全性(厳守事項)
- ドライランがデフォルトです。書き込みには
--dry-runを外し、確認する必要があります。 - データ損失/破壊を伴う手順(DROP、TRUNCATE、縮小、enum 値の削除)を実行するには、書き込み前に
/claude-db:migrateのトークンハンドシェイクが必要です。fixはこうした手順を migration-safety に回し、ショートカットしません。ハンドシェイクは具体的な入力が必要で、はい/いいえではありません。ユーザーは影響を受けるオブジェクト名をそのまま入力する必要があります(例:ordersテーブルの削除を確認するにはordersと入力します)。一致しない返答があった場合、その手順は中止されます。 - Git の状態を考慮します。作業ツリーに変更がある場合は、
--forceがない限り書き込みを拒否します。ブランチの使用を推奨します。git status --porcelainで検出します。Git リポジトリがない場合:リポジトリ外ではgit status --porcelainは 128 で終了します。「リポジトリなし」は書き込み可能として扱います(汚れる対象がないためです)。バックアップは引き続きプラグインのデータディレクトリに保存し、書き込み前にその旨をユーザーへ一行で伝えます。 - 冪等性:既存の制約/インデックスを検出し、重複を作成しません(再実行しても、適用後に新たな差分は生じません)。
- 再検証:書き込み後、各指摘の
verification.reproduce/アサーションを再実行し、変更ごとに合格/不合格を報告します。 .git/、.env/シークレット、ロックファイル、またはプロジェクトルート外のファイルには決して触れません。稼働中のデータベースには決して書き込みません。fixが出力するのはマイグレーションファイルであり、その適用はハンドシェイクのもとでマイグレーションツールが行います。- 捏造禁止:デフォルト値、バックフィル値、統計、価格、認証情報を決して捏造しません。
コメント
Markdown 対応