Skip to content

Commit a6bfdbc

Browse files
authored
Merge pull request #2862 from AtCoder-NoviSteps/#2861
fix: Resolve version mismatch between local env and ci (#2861)
2 parents a863eb2 + bf0e6a6 commit a6bfdbc

File tree

2 files changed

+279
-2
lines changed
  • .github/workflows
  • docs/dev-notes/2025-11-20/resolve_version_mismatch_between_local_env_and_ci

2 files changed

+279
-2
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ jobs:
103103
run: pnpm build
104104

105105
- name: Apply all pending migrations to the database
106-
run: pnpm dlx prisma migrate deploy
106+
run: pnpm exec prisma migrate deploy
107107
env:
108108
DATABASE_URL: ${{ secrets.PREVIEW_DATABASE_URL }}
109109
DIRECT_URL: ${{ secrets.PREVIEW_DIRECT_URL }}
@@ -155,7 +155,7 @@ jobs:
155155
run: pnpm build
156156

157157
- name: Apply all pending migrations to the database
158-
run: pnpm dlx prisma migrate deploy
158+
run: pnpm exec prisma migrate deploy
159159
env:
160160
DATABASE_URL: ${{ secrets.PRODUCTION_DATABASE_URL }}
161161
DIRECT_URL: ${{ secrets.PRODUCTION_DIRECT_URL }}
Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
# ローカル環境とCI環境のPrismaバージョン不一致解決計画
2+
3+
**作成日**: 2025-11-20
4+
5+
**優先度**: High
6+
7+
**対象**: CI自動デプロイメント(preview、production)
8+
9+
---
10+
11+
## 概要
12+
13+
ローカル環境で指定されているPrisma v5.22とCI環境で使用されるPrisma v7.xのバージョン不一致を解決するための計画です。
14+
15+
### 現象
16+
17+
- **エラー**: CI環境で `schema.prisma``url` および `directUrl` 属性が廃止されたとのエラーが発生
18+
- **原因**: `.github/workflows/ci.yml``pnpm dlx prisma migrate deploy` を実行する際、レジストリから最新版(v7.x)をダウンロードしているため
19+
- **期待動作**: ローカル環境と同じPrisma v5.22(`package.json`で指定)をCI環境でも使用すること
20+
21+
---
22+
23+
## 背景
24+
25+
### Prisma バージョン戦略
26+
27+
- **ローカル環境**: v5.22.0(明示的に指定)
28+
- **CI環境(現在)**: v7.x(最新版、意図しない)
29+
- **理由**: Lucia v2.7.7(認証ライブラリ)との互換性維持
30+
31+
### コマンドの挙動の違い
32+
33+
| コマンド | 動作 | バージョン |
34+
| ------------------ | -------------------------------- | ---------------------------------- |
35+
| `pnpm dlx prisma` | レジストリからダウンロード&実行 | **最新版(v7.x)** |
36+
| `pnpm exec prisma` | node_modules内のバージョンを実行 | **package.json指定版(v5.22)**|
37+
38+
**参照**: [pnpm公式ドキュメント](https://pnpm.io/cli/dlx)[pnpm exec](https://pnpm.io/cli/exec)
39+
40+
---
41+
42+
## 前提条件
43+
44+
1. **Lucia v2互換性**: 現在の`@lucia-auth/adapter-prisma` v3.0.2はPrisma v5対応設計
45+
- Lucia v3も開発終了(deprecated)のため移行の必然性あり
46+
- ただし即座のアップグレードは非推奨(検証不足)
47+
48+
2. **Prisma v7への本格移行**: 将来的に以下が必要
49+
- `schema.prisma`から`url`/`directUrl``prisma.config.ts`に移行
50+
- Lucia認証ライブラリの刷新検討
51+
- 本対応は「今後のタスク」セクションに記載
52+
53+
3. **現在の選択肢**: v5.22に留まり、バージョン指定の堅牢化
54+
55+
---
56+
57+
## 修正計画
58+
59+
### 対象ファイル
60+
61+
- `.github/workflows/ci.yml`
62+
63+
### 修正内容
64+
65+
#### 1. preview ジョブ
66+
67+
```yaml
68+
# 修正前
69+
- name: Apply all pending migrations to the database
70+
run: pnpm dlx prisma migrate deploy
71+
env:
72+
DATABASE_URL: ${{ secrets.PREVIEW_DATABASE_URL }}
73+
DIRECT_URL: ${{ secrets.PREVIEW_DIRECT_URL }}
74+
75+
# 修正後
76+
- name: Apply all pending migrations to the database
77+
run: pnpm exec prisma migrate deploy
78+
env:
79+
DATABASE_URL: ${{ secrets.PREVIEW_DATABASE_URL }}
80+
DIRECT_URL: ${{ secrets.PREVIEW_DIRECT_URL }}
81+
```
82+
83+
#### 2. production ジョブ
84+
85+
```yaml
86+
# 修正前
87+
- name: Apply all pending migrations to the database
88+
run: pnpm dlx prisma migrate deploy
89+
env:
90+
DATABASE_URL: ${{ secrets.PRODUCTION_DATABASE_URL }}
91+
DIRECT_URL: ${{ secrets.PRODUCTION_DIRECT_URL }}
92+
93+
# 修正後
94+
- name: Apply all pending migrations to the database
95+
run: pnpm exec prisma migrate deploy
96+
env:
97+
DATABASE_URL: ${{ secrets.PRODUCTION_DATABASE_URL }}
98+
DIRECT_URL: ${{ secrets.PRODUCTION_DIRECT_URL }}
99+
```
100+
101+
### 修正の効果
102+
103+
| 項目 | 修正前 | 修正後 |
104+
| -------------- | ----------------------------- | --------------- |
105+
| 実行バージョン | v7.x(最新) | v5.22(指定版) |
106+
| エラー発生 | ✅ 発生(datasource url廃止) | ❌ 発生しない |
107+
| 環境一貫性 | ❌ ローカルと異なる | ✅ 統一 |
108+
| Lucia互換性 | ❌ 不安定 | ✅ 維持 |
109+
110+
---
111+
112+
## 実装チェックリスト
113+
114+
### ステップ1: ファイル修正
115+
116+
- [x] `.github/workflows/ci.yml` の preview ジョブ内「Apply all pending migrations to the database」ステップで `pnpm dlx` を `pnpm exec` に変更
117+
- [x] `.github/workflows/ci.yml` の production ジョブ内「Apply all pending migrations to the database」ステップで `pnpm dlx` を `pnpm exec` に変更
118+
119+
### ステップ2: 動作確認
120+
121+
- [x] ローカルユニットテスト実行: `pnpm test:unit` ✅ パス (1683 passed | 1 skipped)
122+
- [ ] preview環境へのデプロイ実行、ログ確認(DATABASE_URL、DIRECT_URLが正しく参照されているか)
123+
- [ ] production環境へのデプロイ実行、ログ確認
124+
- [ ] マイグレーション実行完了の確認
125+
126+
### ステップ3: ドキュメント
127+
128+
- [x] このファイルに実装完了記録を追記
129+
130+
---
131+
132+
## 検証項目
133+
134+
| 項目 | 方法 | 期待値 |
135+
| -------------------- | ------------------------------------------------- | ------------------ |
136+
| バージョン確認 | CI ログで `prisma` コマンド実行時のバージョン表示 | v5.22.0 |
137+
| マイグレーション成功 | preview/production環境でのデプロイ完了 | エラーなし |
138+
| スキーマ整合性 | データベースのスキーマ検証 | 既存スキーマと同一 |
139+
140+
---
141+
142+
## 今後のタスク(将来対応)
143+
144+
### タスク1: Prisma v7への本格移行
145+
146+
**対象**: Prisma v5.22 → v7.x へのアップグレード
147+
148+
**必要な実装**:
149+
150+
1. `prisma/prisma.config.ts` を新規作成(datasource設定を移行)
151+
2. `prisma/schema.prisma` から `url` と `directUrl` を削除
152+
3. `PrismaClient` の初期化時に `adapter` または `accelerateUrl` を指定
153+
4. CI環境での環境変数設定を見直し
154+
5. すべてのテスト実行確認
155+
156+
**優先度**: Medium(Lucia検証後)
157+
158+
**参照**: [Prisma v7 migration guide](https://pris.ly/d/config-datasource)
159+
160+
### タスク2: Lucia 認証ライブラリの刷新検討
161+
162+
**背景**:
163+
164+
- Lucia v2: 開発終了(レガシー)
165+
- Lucia v3: メンテナンスモード(deprecated)
166+
- Prisma v7への対応状況が不明確
167+
168+
**必要な検討**:
169+
170+
1. 代替ライブラリ調査(例: Better Auth, NextAuth.js v5、Auth.js等)
171+
2. 機能要件確認(ユーザー認証、セッション管理など)
172+
3. 既存実装との互換性評価
173+
4. 段階的移行戦略の立案
174+
5. テストスイートの拡充
175+
176+
**優先度**: Medium
177+
178+
**依存関係**: タスク1(Prisma v7)の完了後推奨
179+
180+
### タスク3: prisma.config.ts移行ガイド作成
181+
182+
**対象**: 開発チーム向けドキュメント
183+
184+
**含める内容**:
185+
186+
- `prisma.config.ts` の設定方法
187+
- `schema.prisma` の移行チェックリスト
188+
- 環境変数の新しい管理方法
189+
- よくある問題とトラブルシューティング
190+
191+
**優先度**: Low(タスク1完了後)
192+
193+
---
194+
195+
## 参考: Prisma v7 breaking changes
196+
197+
### datasource url廃止の理由
198+
199+
Prisma v7では以下の設計変更により、`datasource`内で接続URLを指定することを廃止:
200+
201+
1. **構成の分離**: スキーマ定義と環境設定を明確に分離
202+
2. **ランタイムの柔軟性**: PrismaClientの初期化時に接続情報を指定可能に
203+
3. **Accelerate対応**: データベース接続の最適化オプション(proxy層)への対応
204+
205+
### v5.22で対応している属性
206+
207+
- ✅ `provider`(データベースプロバイダー)
208+
- ✅ `url`(環境変数参照: `env("DATABASE_URL")`
209+
- ✅ `directUrl`(環境変数参照: `env("DIRECT_URL")`
210+
- ✅ `shadowDatabaseUrl`(テスト・マイグレーション用DB)
211+
212+
### v7.xで廃止された属性
213+
214+
- ❌ `url`(schema.prisma内での指定)
215+
- ❌ `directUrl`(schema.prisma内での指定)
216+
217+
---
218+
219+
## Q&A
220+
221+
### Q1: なぜ `prisma.config.ts` は v5.22でサポートされていないのか?
222+
223+
**A**: `prisma.config.ts` はPrisma v6.18.0で試験的機能(Early Access)として導入されました。v5.22ではこの機能が存在しないため、使用できません。したがって、現在v5.22を使用する場合は、`schema.prisma`内で接続情報を指定する従来の方法が唯一の選択肢です。
224+
225+
### Q2: v5.22のままでいつまで使用可能か?
226+
227+
**A**: 公式のサポート終了日は明記されていませんが、新機能やセキュリティ修正の提供は期待できません。v7系への移行は数ヶ月〜1年以内の実施が推奨されます。
228+
229+
### Q3: 修正後、スキーマファイルに変更は必要か?
230+
231+
**A**: いいえ。修正はCIの実行コマンドのみです。`prisma/schema.prisma` は変更不要です。
232+
233+
---
234+
235+
## 実装完了記録
236+
237+
### 実装日
238+
239+
- [x] 2025-11-20
240+
241+
### 修正内容
242+
243+
- [x] preview ジョブ: `pnpm dlx` → `pnpm exec` に変更
244+
- [x] production ジョブ: `pnpm dlx` → `pnpm exec` に変更
245+
246+
### テスト結果
247+
248+
- [x] ローカルユニットテスト: ✅ PASS (1683 tests, 1 skipped)
249+
- [ ] CI実行: ✅ / ❌(GitHub Actions実行待機中)
250+
- [ ] preview環境デプロイ: ✅ / ❌
251+
- [ ] production環境デプロイ: ✅ / ❌
252+
- [ ] マイグレーション実行: ✅ / ❌
253+
254+
### 備考
255+
256+
**修正内容**:
257+
258+
- `pnpm dlx prisma migrate deploy` → `pnpm exec prisma migrate deploy`
259+
- `pnpm dlx` はレジストリから最新版(v7.x)をダウンロード実行する
260+
- `pnpm exec` は `node_modules` 内の指定版(v5.22)を実行する
261+
- 修正後、CI環境でもローカル環境と同じPrisma v5.22が使用される
262+
263+
**得られた教訓**:
264+
265+
1. **バージョン指定の重要性**: `pnpm dlx` と `pnpm exec` の挙動の違いを理解することが、環境の一貫性確保に不可欠
266+
2. **コマンドの選択が与える影響**: 一見単純なコマンド名の違いが、CI/CD環境で大きな問題につながる可能性
267+
3. **Prisma のバージョン管理**: メジャーバージョン間のbreaking changes(v5 → v7での `datasource url` 廃止)は、移行戦略とテストが重要
268+
4. **段階的アプローチの有効性**: 即座のメジャーバージョンアップグレードより、バージョン指定の堅牢化で環境統一を優先するのが安全
269+
270+
---
271+
272+
## 参照リンク
273+
274+
- 📖 [pnpm dlx ドキュメント](https://pnpm.io/cli/dlx)
275+
- 📖 [pnpm exec ドキュメント](https://pnpm.io/cli/exec)
276+
- 📖 [Prisma v7 datasource config](https://pris.ly/d/config-datasource)
277+
- 📖 [Prisma v7 PrismaClient config](https://pris.ly/d/prisma7-client-config)

0 commit comments

Comments
 (0)