ai-driven-development legacy-migration
レガシー SQL 由来の日本語テーブル名と、どう向き合うか
「漢字混じりのマスタ_明細」みたいな日本語テーブル名と日本語列名は、レガシー業務系の世界では普通にあります。AI に書かせるとここで誤字や同音異義の事故が出やすいので、扱い方をルール化しました。
W
渡邊 賢 なぜ書いたか
レガシー業務系のSQLを読むと、テーブル名や列名が 日本語 で書かれていることが普通にあります。「漢字混じりのマスタ_明細」みたいなやつです。Blazor + EFへの移行で、AIにこれらをマッピングさせると、微妙に名前を間違えたり、同音異義のテーブルを混同したりする事故が起きます。今回はその扱い方をルール化した話です。
何が起きやすいか
具体的に踏んだのはこのあたりです。
- 似た名前のテーブルを 別物として2系統持っている のに、片方しか触らずに「削除完了」してしまう(本体だけ消して内訳・添付が残る)
- カナ・漢字・全角半角がぶれた名前をAIが「同じ」と推論してしまう
- 元実装のクエリが日本語識別子を 二重引用符で囲んだOracle SQL だったが、移行先のEF Coreで囲み方を間違えて通らない
対策: 命名は「正確さ」が品質そのもの
3つだけルールにしました。
- エンティティ名は元のテーブル名と1:1対応 にする(漢字含めてそのまま)。略称や英語化は禁止
- 削除・更新クエリは元VBのSQLを写経して比較する。AIに書き直させる前に、まず人間が「触るテーブル一覧」を抽出する
- 関連マスタは集合として扱う。「本体・内訳・添付」のような3系統が常にセットなら、削除サービスの中で一括ハンドリングする責任を1箇所に集める
わかったこと
- 日本語識別子は移行で最も誤字が出やすい場所。AIに丸投げせず、触るべきテーブルの一覧を先に確定 してから実装させるのが安全
- 元実装が「本体 + 内訳 + 添付」のような関連系統を持っていたら、移行先でも 集合として扱うサービス を1つ用意するのが結局速い。個別呼び出しを画面ごとにやると、どこかで漏れます
- レビュー観点に「触るべきテーブルが全部触られているか」を固定で入れると、漏れがほぼ消えました
次にやること / 未解決の問題
- EF Core側の
[Table("漢字混じりのマスタ_明細")]属性の運用ガイドを書きたい。今は属性で日本語名を吸収しているが、運用ルールが揺れている - 同音異義テーブルがあるドメインでは、エンティティのクラス名を英語にしつつ属性で日本語テーブルを指定する方式と、クラス名も日本語にする方式が両方混ざっている。どちらかに寄せたい
person
渡邊 賢
等差級数的Commit 運営 / ICD VIETNAM.LLC General Manager
AI駆動開発と段階的なレガシーモダン化をテーマに、日々の試行錯誤をこのブログに記録しています。
プロフィール詳細 arrow_forward似たような課題に困っている方、一緒に考えませんか。
AI駆動開発・Vibe Coding・レガシーマイグレーションに関するご相談を受け付けています。