AgentSkillsCN

code-to-rollback-sql

解析指定代码(如方法、函数),梳理出将被 INSERT/UPDATE/DELETE 的表与列,并将其存储于 agent-memory 中,同时生成回滚用 SQL。“解析此代码所生成的数据,生成对应的回滚 SQL”“查询 @文件路径#行号 的数据变更,生成相关 SQL”“为该方法生成回滚 SQL”等请求均可触发该技能。

SKILL.md
--- frontmatter
name: code-to-rollback-sql
description: 指定されたコード(メソッド、関数)を解析し、INSERT/UPDATE/DELETEされるテーブル・カラムを洗い出し、agent-memoryに記憶し、ロールバック用SQLを生成する。「このコードで作成されるデータを解析してロールバックSQLを作って」「@ファイルパス#行番号 のデータ変更を調べてSQL生成して」「このメソッドのロールバックSQLを作成」などのリクエストでトリガー。

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エージェント特化内容
1db-change-analyzermk1フレームワークのDB操作パターンを理解
2general-purposeagent-memoryスキルを使用
3general-purposesql-generatorスキルを使用