0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DDL・マイグレーションからORM・スキーマまで爆速生成 — GitHub Copilot × Prompt filesの実践例

Last updated at Posted at 2025-08-20

はじめに

こんにちは!開発現場で、こんな単純作業に時間を奪われていませんか?

「新しいテーブルのDDL(CREATE TABLE文)はできた。さあ、次はこれを元にORMモデルを書いていくぞ…」

この作業、本当に面倒ですよね。カラム名やデータ型、制約を一つずつ確認しながらのコピペ作業は、ミスの温床でもあります。

そこで私たちは、GitHub Copilot × Prompt files機能を活用して、DDLから各種コードを全自動で生成できる仕組みを構築しました。

想定読者

この記事は、以下の読者を想定しています。

  • エディタに VS Code を使っている
  • GitHub Copilot を利用できる(Individual/Business いずれも可)
  • チーム開発で、「機械的な作業はできるだけ自動化したい!」 と思っている

特に、
「DDL、マイグレーションは書けるのに、その後のORMコード作成が面倒でたまらない…」
という方におすすめです。

この記事では、そんな面倒な作業を自動化する具体的な方法と効果をご紹介します。


課題:DBスキーマ変更に伴う単純作業とAI利用の限界点

私たちのプロジェクトでは、テーブル追加のたびにORMモデル、スキーマファイルを作成していました。

まず、AIすら使わず手作業で行っている場合、カラム定義や型変換などを毎回ゼロから作成する必要があり、次のような課題が生じがちです。

  • 開発時間の浪費
  • ヒューマンエラーの発生

一方で、Copilot ChatやChatGPTなどのAIを使えば生成はできますが、次の面倒が残ります。

  • プロンプトを毎回探してコピペ
  • 個人管理でチーム共有しにくい

これまでのAIを使っても残る "ちょとした面倒" もさくっと解決してしまいましょう!


解決策:GitHub Copilotにプロンプトを覚えさせる

解決に使ったのが、Copilot ChatのPrompt files機能です。

Prompt files機能を使うことで…

  • Git管理で共有可能(全員が同じ変換ルールを利用)
  • VS Codeから即呼び出し(コピペ不要)
  • 指定ファイルへ自動追記(貼り付け作業ゼロ)

リポジトリ直下で.github/prompts/*.prompt.md と定義ファイルを置くことで、Copilot Chatに /コマンド名 と打つだけで、専用のAIが動作してくれます。(VS Code 公式ドキュメント:Prompt files参照) ※執筆時点では試験的機能のため、将来的に変更・廃止される可能性があります。

まずは、その仕組みの“設計図”であるプロンプトファイル(ddl-to-prisma.prompt.md)の中身を見てみましょう。
ここで定義した内容が、そのまま後の実行ステップで動くAIの挙動を決めます。


実際のプロンプトファイル(ddl-to-prisma.prompt.md

---
# Copilotの動作モードを指定します。
 # 'agent' (デフォルト):ファイル編集やターミナル実行など、VS Code上の高度な操作を許可するモード。今回の例のようにファイルを自動編集させたい場合はこのモードを使います。
 # 'ask':一般的な質問応答やコード生成を行います。ファイル操作は行いません。
 # 'edit':インラインでコードを編集するモードです。
mode: 'agent'

# 使用するAIモデルを指定します(未指定時はVS Codeで選択中のモデルを使用)。
# GPT-4系(スタンダード)は変換失敗が多いため避け、Claude Sonnet 4・GPT-5・Gemini 2.5 Proを推奨します。
model: 'Claude Sonnet 4'

# プロンプトの説明文です(なくても機能には影響ありません)。
# 何をするコマンドか、どんな引数が必要かを簡潔に書くのがポイントです。
# (例) 'SQLのCREATE TABLE文をPrismaスキーマに変換します。:app=[アプリ名]で対象を指定'
description: 'SQLのCREATE TABLE文を新規Prismaスキーマまたは、既にあるPrismaスキーマであれば更新します。
  (使用方法)
  Prismaのスキーマファイルに追加または変換したいSQLとどのサービスのPrismaスキーマに追記するかを指定してください。
    sample-app-1: サンプルアプリ1
    sample-app-2: サンプルアプリ2

  (プロンプト例)
    /ddl-to-prisma:app=sample-app-1
    {該当のSQL}
'
---

## 命令

ユーザーが提供したSQLのCREATE TABLE文を以下の要件に従ってPrismaスキーマに変換し、指定されたアプリケーションのschema.prismaファイルに追記してください。

### アプリケーション選択

変数 ${app} が指定されている場合:

- `sample-app-1`: dev-monorepo-api/apps/sample-app-1/prisma/schema.prisma に追記
- `sample-app-2`: dev-monorepo-api/apps/sample-app-2/prisma/schema.prisma に追記

変数 ${app}が指定されていない場合:
以下の質問をユーザーに行ってから処理を開始してください:
「どちらのアプリケーションのPrismaスキーマに追記しますか?1. sample-app-1 2. sample-app-2
番号で選択してください。」

### ファイル編集制限

指定されたprisma/schema.prismaファイル以外を編集しないでください

## 要件

- 「prismaで作成したスキーマのコードのサンプル」のフォーマットを模倣してスキーマコードを生成すること
- テーブル名のプレフィックス「t_」または「m_」をモデル名に含めない
- モデル名はPascalCaseで記述する
- 全てのフィールドに@map()を使用して元のカラム名をマッピングする
- テーブル名は@@map()でマッピングする

## 型変換ルール

- BIGINT UNSIGNED → BigInt @db.UnsignedBigInt
- INT UNSIGNED → Int @db.UnsignedInt
- TINYINT UNSIGNED → Int @db.UnsignedTinyInt
- VARCHAR(n) → String @db.VarChar(n)
- DATETIME → DateTime @db.DateTime(0)
- AUTO_INCREMENT → @default(autoincrement())
- PRIMARY KEY → @id

## Prismaスキーマサンプル

prisma
model SampleUser {
  id          BigInt   @id @default(autoincrement()) @db.UnsignedBigInt @map("id")
  displayName String   @map("display_name") @db.VarChar(255)
  email       String   @unique(map: "uq_sample_users_01") @map("email") @db.VarChar(255)
  createdAt   DateTime @default(now()) @map("created_at") @db.DateTime(0)
  updatedAt   DateTime @updatedAt @map("updated_at") @db.DateTime(0)

  @@map("t_sample_users")
}

このように、生成ルールや保存先、型変換などを事前に定義しておけます。

💡 補足
このプロンプトは、新規のPrismaスキーマを生成するだけでなく、既存スキーマとの違い(差分)を自動検知して、必要な部分だけを編集することも可能です。
例えば、既存モデルに新しいフィールドを追加したり、不要なフィールドを削除することも、DDLを渡すだけで自動反映されます。

では、このプロンプトを実際に呼び出して、どのように作業が進むのかを見ていきましょう。


実際にプロンプトを呼び出して作業させる

ステップ1:コマンドの呼び出し

まず、Copilot Chatの入力欄に / を入力します。すると、.github/prompts/ に定義されたプロンプトが一覧表示されるので、使いたいコマンド(今回は /ddl-to-prisma)を選択します。

prompt-list.png

ステップ2:プロンプトと情報の入力

次に、必要に応じてプロンプトで定義された変数(例::app=sample-app-1)と、変換対象のデータやコードを入力して実行します。
変数を必要としないプロンプトでは、対象となる内容だけを入力すればOKです。

prompt-input.png

ステップ3:生成されたコードの確認と反映

実行後、Copilotが指定されたファイルを自動で編集してくれます。変更内容を確認し、問題がなければ「保持」ボタンを押して変更を確定します。もし内容が期待と異なれば「元に戻す」で取り消すことも可能です。

prompt-output.png

このように、たった3ステップで面倒なコード生成作業が完了します。


他にも広がる応用の可能性

同様に、以下のプロンプトもサンプルプロンプトをカスタムすることですぐに作成可能です。

  • /ddl-to-sequelize: Sequelizeなど他のモデルファイル生成・編集
  • /migration-to-prisma: Prismaスキーマ生成・編集
  • /migration-to-sequelize: Sequelizeなど他のモデルファイル生成・編集

セキュリティ・運用上の注意点

プロンプトはチームの資産としてリポジトリで管理するため、以下の点に注意して運用しています。

  • 機密情報を含めない: プロンプトやサンプルコードには、顧客情報や会社固有のドメイン情報、APIキーなどを絶対に含めないようにします
  • チームレビューの徹底: 新しいプロンプトを追加・修正する際は、機能だけでなくセキュリティ的な観点からも必ずチームでレビューを行います

まとめ

GitHub CopilotのPrompt files機能を使えば、定型的な作業をAIに任せて、開発者はもっと創造的な業務に集中できます。

私たちのチームでは、この仕組みによってDBスキーマ関連の作業を80%以上削減することができました。

皆さんの現場にも、「AIに任せられる作業」はきっとあるはず。ぜひPrompt files試してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?