Code to Rollback SQL Generator
指定されたコードを解析し、3つのフェーズでロールバックSQLを生成するスキル。 このスキルはオーケストレーターとして機能し、各フェーズはサブエージェント(Task tool)で実行する。
入力
- •ファイルパスと行番号(例:
@src/xba/packages/xbacore/classes/task/5min.php#L123-161) - •または、解析対象のメソッド/関数名
ワークフロー
Phase 1: コード解析
使用ツール: Task tool (subagent_type: db-change-analyzer)
このプロジェクト専用の特化エージェントを使用。mk1フレームワーク(FuelPHPベース)のパターンを理解している。
code
description: "コード解析とデータ変更洗い出し" subagent_type: "db-change-analyzer" prompt: | 指定されたコード [ファイルパス:行番号] を解析し、以下を特定してください: 1. このコードが呼び出すメソッド・関数を特定 2. 各メソッドでINSERT/UPDATE/DELETEされるテーブルを特定 3. 変更されるカラムを一覧化 4. 外部キー制約(ON DELETE CASCADE等)を確認 5. 結果をテーブル形式でまとめる 出力形式: | テーブル | 操作 | 主要カラム | |---------|------|-----------| | table_name | INSERT/UPDATE/DELETE | column1, column2, ... |
Phase 1完了後: AskUserQuestionで確認を取る
code
質問: 「解析結果を確認してください。この内容を記憶に保存しますか?」 選択肢: - はい、記憶に保存する - いいえ、Phase 3に進む(記憶をスキップ) - 修正が必要
Phase 2: 記憶保存
使用ツール: Task tool (subagent_type: general-purpose)
code
description: "解析結果をメモリに保存" subagent_type: "general-purpose" prompt: | agent-memoryスキルを使用して、以下の解析結果を保存してください: [Phase 1の解析結果をここに渡す] 保存要件: - 保存先: .claude/skills/agent-memory/memories/ 配下の適切なカテゴリ - ファイル名: 解析対象に基づいて命名 - frontmatter: summary, created, tags, related を設定 保存が完了したらファイルパスを報告してください。
Phase 2完了後: AskUserQuestionで確認を取る
code
質問: 「記憶に保存しました。ロールバックSQLを生成しますか?」 選択肢: - はい、SQLを生成する - いいえ、ここで終了
Phase 3: SQL生成
使用ツール: Task tool (subagent_type: general-purpose)
code
description: "ロールバックSQL生成" subagent_type: "general-purpose" prompt: | sql-generatorスキルを使用して、以下のテーブルをロールバックするSQLを作成してください: [Phase 1で特定したテーブル一覧と操作] 要件: - 外部キー制約を考慮した削除順序 - 変数設定(SET v.xxx)による柔軟なID指定 - 確認用SELECT文を含める - ON DELETE CASCADEがある場合は親テーブル削除のみで可 出力先: .claude/skills/sql-generator/sqls/xba/ または bamanager/ 生成が完了したらファイルパスを報告してください。
Phase 3完了後: 生成されたSQLファイルのパスを報告
コンテキストの受け渡し
各フェーズ間でコンテキストを渡す際は、前フェーズの結果を次フェーズのpromptに含める:
code
Phase 1 結果 → Phase 2 promptに含める → Phase 2 結果 → Phase 3 promptに含める
注意事項
- •companiesテーブル等の更新は履歴がないためロールバック不可(コメントで警告を含める)
- •ON DELETE CASCADEがある場合は親テーブル削除のみで可
- •本番実行前に必ずSELECTで確認することを推奨
- •charge_histories.ch_ng_notified_at のような通知フラグ更新はロールバック不要
使用例
code
ユーザー: @src/xba/packages/xbacore/classes/task/5min.php#L123-161 のデータ変更を解析してロールバックSQLを作成して Claude(オーケストレーター): 1. Task tool (db-change-analyzer) でコード解析 → 結果取得 2. 解析結果を表示 → AskUserQuestion で確認 3. Task tool (general-purpose) で記憶保存 → 結果取得 4. 記憶完了を表示 → AskUserQuestion で確認 5. Task tool (general-purpose) でSQL生成 → 結果取得 6. 完了報告(SQLファイルパス)
使用するエージェント
| Phase | エージェント | 特化内容 |
|---|---|---|
| 1 | db-change-analyzer | mk1フレームワークのDB操作パターンを理解 |
| 2 | general-purpose | agent-memoryスキルを使用 |
| 3 | general-purpose | sql-generatorスキルを使用 |