GitHub Copilot
GitHub Copilot は、Prisma ORM ワークフローを高速化する AI コーディングアシスタントです。これにより、定型的な作業に費やす時間を減らし、データモデリング、クエリ、共同作業により多くの時間を費やすことができます。エディターで GitHub Copilot 拡張機能を使用すると、次のことができます。
- スキーマの編集時やクライアント呼び出し時に、Prisma を認識したコード提案を受け取ることができます。
- モデリングパターンについて Copilot とチャットしたり、クエリのトラブルシューティングを行ったり、マイグレーション戦略を検討したりできます。
- Copilot のコマンドパレットインターフェースを介して、一般的な Prisma CLI コマンド (例:
prisma migrate dev
、prisma db push
) を実行できます。 - Copilot チャットインターフェースから直接、Prisma スキーマモデルをスキャフォールドし、Prisma Client コードを生成し、マイグレーションを実行できます。
GitHub Copilot を使用すると、Prisma for GitHub Copilot 拡張機能 を介して公式ドキュメントをクエリできるほか、Prisma スキーマのスキャフォールド、シードスクリプトの実行、本番環境に対応した Prisma Postgres データベースの作成など、VS Code エージェントモードでの自動アクションを実行することもできます。
Prisma for GitHub Copilot 拡張機能で Prisma ドキュメントをクエリする
Prisma for GitHub Copilot 拡張機能を使用すると、GitHub Copilot Chat 内で Prisma ドキュメントを直接取得できます。エディターからスキーマ構文、クライアントメソッド、マイグレーションコマンドなどを調べることができます。
拡張機能を有効にする方法
- GitHub Marketplace から Prisma for Copilot をインストールします。
- GitHub Copilot Chat がインストールされており、コードエディターでアクティブであることを確認してください。
- ワークスペースでファイルを開き、Copilot Chat を起動します。
- チャットで、質問の前に
@prisma-for-copilot
キーワードを付けます。
@prisma-for-copilot How do I define a one-to-many relation?
- Prisma for GitHub Copilot 拡張機能をインストールします。
- IDE を開きます。
- GitHub Copilot Chat 拡張機能をインストールします。
- Copilot Chat を開き、質問モードに切り替えます。
- 質問: 「
@prisma-for-github-copilot
1対多のリレーションを定義するにはどうすればよいですか?」 (数秒経っても@prisma-for-github-copilot
名前空間が表示されない場合は、チャットを再読み込みしてください。) - プロンプトが表示されたら、ブラウザで Prisma アプリを承認し、チャットに戻ります。
- チャットに戻った後、質問を再送信します。
- Copilot は Prisma ドキュメントから直接取得した回答を返します。
GitHub Copilot のエージェント機能を使用する
GitHub Copilot Chat は、VS Code で Prisma コマンドを実行できるエージェントモードを提供します。エージェントチャットを使用して、次のことができます。
- マイグレーションを実行し、確認する。
- Prisma Client コードを生成する。
- 新しい Prisma Postgres データベースを作成し、
.env
ファイルを更新する。
Copilot チャットで「Create a database named test-db and add its connection string to the .env file.
」と入力すると、自動的に test-db
という名前の新しいデータベースが作成され、その接続文字列が .env
ファイルに追加されます。これについて詳しくは、当社のVS Code エージェントモードのドキュメントをご覧ください。
copilot-instructions.md
で GitHub Copilot をカスタマイズする
リポジトリに.github/copilot-instructions.md
ファイルを追加することで、Copilot Chat の動作を調整できます。このファイルは、すべての Copilot Chat セッションにガイドラインを注入します。
Prisma 用 .github/copilot-instructions.md
の例
# GitHub Copilot Instructions for Prisma Workspace
## General Guidelines
1. **Language**: English only.
2. **Types**: Declare explicit types; avoid `any`.
3. **Comments**: Use JSDoc for public methods and classes.
4. **Exports**: One export per file.
5. **Naming**:
* **Classes/interfaces** → `PascalCase`
* **Variables/functions** → `camelCase`
* **Files/directories** → `kebab-case`
* **Constants** → `UPPERCASE`
* **Boolean flags** → verb-based (e.g., `isLoading`)
---
## Prisma-Specific Guidelines
### 1. Data Modeling
* **Domain-driven model names**: keep them singular (e.g. `User`, `OrderItem`).
* **Field naming**: use `camelCase` for fields (e.g. `createdAt`, `deletedAt`).
* **IDs & keys**:
```prisma
model Post {
id Int @id @default(autoincrement())
uuid String @unique @default(uuid())
}
/```
* **Composite keys & uniques**:
```prisma
@@id([userId, role])
@@unique([email, tenantId])
/```
* **Enums & constrained values**: leverage `enum` for fixed domains.
* **Soft deletes & audit**:
```prisma
model Base {
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
}
/```
### 2. Indexing & Constraints
* **Single-column indexes** for frequent lookups:
```prisma
@@index([email])
/```
* **Compound indexes** for multi-field filters/sorts:
```prisma
@@index([status, createdAt])
/```
* **Full-text search** (Postgres-only):
```prisma
@@index([title, content], type: Brin) // or Gin for JSONB
/```
### 3. Migrations
* **Descriptive names**: `npx prisma migrate dev --name add-order-totals`
* **Idempotent steps**: avoid imperative SQL in migrations.
* **Shadow database**: enable in CI to catch drift.
* **Never edit** migration SQL after it’s applied to any environment.
### 4. Client Instantiation & Connection Management
* **Singleton pattern**
```ts
// prisma.ts
import { PrismaClient } from '@prisma/client';
export const prisma = global.prisma || new PrismaClient();
if (process.env.NODE_ENV !== 'production') global.prisma = prisma;
/```
### 5. Transactions & Batch Operations
* **Multi-step atomicity**:
```ts
const result = await prisma.$transaction([
prisma.user.create({ data: { /*…*/ } }),
prisma.order.create({ data: { /*…*/ } }),
]);
/```
* **Interactive transactions** for long-running flows.
* **Bulk writes**: chunk large inserts/updates to avoid timeouts.
### 6. Precise Queries & Performance
* **Select only needed fields**:
```ts
await prisma.user.findUnique({
where: { id },
select: { id: true, email: true },
});
/```
* **Avoid N+1**: use `include` or batch `findMany` with `where: { id: { in: [...] } }` or use database joins in prisma.
* Use **Cursor-based pagination**
### 7. Raw Queries & Client Extensions
* **Raw SQL** when necessary, safely:
```ts
const users = await prisma.$queryRaw`SELECT * FROM "User" WHERE email = ${email}`;
/```
* **Sanitize inputs** with `Prisma.sql` for complex interpolations.
* **Client extensions**: use preview feature `clientExtensions` to add common helper methods.
### 8. Error Handling
* **Catch specific errors**:
```ts
try {
// …
} catch (e) {
if (e instanceof Prisma.PrismaClientKnownRequestError) {
// P2002: Unique constraint
}
}
/```
* **Wrap in service-level errors** to add context before bubbling up.
### 9. Testing
* **In-memory DB** (SQLite) or **Testcontainers** for integration tests.
* **Mock Prisma Client** for pure unit tests via `jest.mock()` or similar.
### 10. Logging, Monitoring & Metrics
* **Enable query logging** in dev:
```ts
new PrismaClient({ log: ['query', 'warn', 'error'] });
/```
* **APM integration** (Datadog, Sentry) – capture latency, errors.
* **Client extensions** for metrics: create extensions that wrap calls to emit timing and telemetry instead of middleware.
### 11. Security & Best Practices
* **Never expose** raw Prisma client in HTTP controllers—wrap in a service layer.
* **Validate inputs** (e.g. with Zod) before any DB operation.
* **Least privilege** DB users: use separate roles for migrations vs. runtime.
* **Rotate credentials** and load from secure vault (AWS Secrets Manager, etc.).
### 12. Environment & Configuration
* **Centralize `DATABASE_URL`** and connection settings in `.env`.
* **Pin preview features** in `schema.prisma`:
```prisma
generator client {
previewFeatures = ["clientExtensions", "interactiveTransactions"]
}
/```
* **Version pinning**: match CLI and client versions in `package.json`.
このファイルをリポジトリのルートの .github/
以下に配置してください。Copilot Chat は、プロジェクト内のすべての会話にこれらのルールを自動的に適用します。