AI は format conversion(CSV ↔ JSON ↔ SQL)や migration script に向いています。変換 rule が mechanical だからです。正しく安全にする trick は、schema、sample row、明示的な safety requirement という十分な context を渡すことです。
import csv
# Source CSV: id,email,signup_date (signup_date may be blank)
# Target table: users(id INT, email TEXT NOT NULL, signup_date DATE NULL)
def csv_to_sql(path: str) -> list[str]:
statements = []
with open(path, newline="", encoding="utf-8") as f:
for row in csv.DictReader(f):
email = row["email"].strip()
if not email: # validate: invalid row を skip し、garbage を insert しない
continue
date = row["signup_date"].strip() or None
email_sql = email.replace("'", "''") # quote を escape し、壊れた SQL / injection を避ける
date_sql = f"'{date}'" if date else "NULL"
# ON CONFLICT により idempotent: 再実行しても duplicate を作らない
statements.append(
f"INSERT INTO users (id, email, signup_date) "
f"VALUES ({int(row['id'])}, '{email_sql}', {date_sql}) "
f"ON CONFLICT (id) DO NOTHING;"
)
return statements
comment は重要な部分を示しています。validation(empty email を skip)、escaping(quotes)、idempotency(ON CONFLICT DO NOTHING)です。AI にこの 3 つを含めるよう求めます。naive script が忘れがちな点だからです。
Data migration は high-stakes で、しばしば one-shot です。double-insert や row drop を起こす script は、undo が高くつきます。AI は conversion の作成を加速しますが、idempotency、validation、copy での dry-run という safety property は non-negotiable です。生成された script は、real data に blindly 実行するものではなく、読んで test すべき draft として扱います。