前提
- Node.js: v22.13.1
- TypeScript: Version 5.8.2
- TypeORM: 0.3.21
- ts-node: 10.9.2
事象
以下のコマンドを実行して、エラーが発生した:
npx typeorm-ts-node-commonjs migration:generate src/migration/CreateDrugTable -d src/data-source.ts
エラーメッセージ:
No changes in database schema were found - cannot generate a migration.
To create a new empty migration use "typeorm migration:create" command
原因
このエラーの主な原因は、synchronize: true
が設定されていたことです。synchronize: true
にすると、TypeORM はアプリケーション起動時にデータベーススキーマを自動で更新します。この設定により、エンティティの変更が自動的にデータベースに反映され、不要な変更がログとして残ります。そのため、マイグレーションの自動生成時に変更が見つからず、エラーが発生することがあります。
解決策
エラーを解決するためには、synchronize: false
に設定を変更した上で、データベーススキーマをリセットすることが必要です。以下の手順で問題を解決できます。
手順
-
data-source.ts
の設定確認data-source.ts
でsynchronize: true
が設定されていた場合、まずこれをfalse
に変更します。これにより、データベーススキーマの自動更新を無効にします。const AppDataSource = new DataSource({ type: "mysql", host: "localhost", port: 3306, username: "root", password: "password", database: "mydb", synchronize: false, // この設定が重要 entities: [Drug, User], migrations: ["src/migration/**/*.ts"], });
-
データベーススキーマをリセット
次に、データベーススキーマをリセットします。
synchronize: false
の設定により、データベースの変更が自動的に反映されなくなりますが、既存のスキーマをリセットするためには手動でスキーマを削除します。npx typeorm schema:drop -d src/data-source.ts
-
マイグレーションの再生成
データベーススキーマをリセットした後、再度マイグレーションを生成します。
npx typeorm-ts-node-commonjs migration:generate src/migration/CreateDrugTable -d src/data-source.ts
これで、マイグレーションが正常に生成されるはずです。
まとめ
No changes in database schema were found
エラーが発生する場合、synchronize: true
設定が影響している可能性があります。この場合、以下の手順で問題を解決できます。
-
synchronize: false
に設定を変更。 -
npx typeorm schema:drop -d src/data-source.ts
でデータベーススキーマをリセット。 - 再度、マイグレーションを生成。
これで、マイグレーションの自動生成が正常に動作するようになります!🚀