Open2
TypeORMのマイグレーションについて
マイグレーションファイルを生成する方法について
マイグレーションファイルを手動生成する場合
yarn typeorm migration:create dir-path
# ./src/migrations/ファイル名に手動で作成する場合
yarn typeorm migration:create ./src/migrations/ファイル名
Entityと接続先のDBとの差分を検知して、自動で作成する
yarn typeorm migration:generate dir-path
# ./src/migrations/ファイル名に手動で作成する場合
yarn typeorm migration:generate ./src/migrations/ファイル名
Migrationファイルとは
Migration(マイグレーション)とは、データベースのスキーマ(構造)の変更履歴を管理するためのファイルです。チーム開発や本番環境へのデプロイ時に、データベースの変更を安全かつ確実に適用するために使用されます。
Migrationファイルの作成方法
TypeORMでMigrationファイルを作成する方法は主に2つあります。
- 手動で作成する方法
- 自動生成する方法
1. 手動で作成する方法
手動でMigrationファイルを作成する場合、以下のコマンドを使用します。
typeorm migration:create -n <MigrationName>
または、TypeORMのバージョンが0.3.x以降の場合は、以下のようにCLIを実行します。
npx typeorm migration:create ./src/migrations/<MigrationName>
手順
- コマンドを実行すると、指定した名前で空のMigrationファイルが生成されます。
- 生成されたファイル内の
up
とdown
メソッドに、適用したいSQLクエリやスキーマ変更を記述します。
利点
- 細かい制御が可能で、複雑な変更にも対応できます。
注意点
- 手動でSQLを記述するため、ミスが発生しやすい可能性があります。
2. 自動生成する方法
エンティティの変更点から自動的にMigrationファイルを生成する方法です。
typeorm migration:generate -n <MigrationName>
TypeORM 0.3.x以降では:
npx typeorm migration:generate ./src/migrations/<MigrationName>
手順
- エンティティ(モデル)を更新します。
- コマンドを実行すると、エンティティとデータベースの差分を検出し、自動的にMigrationファイルを生成します。
利点
- 手作業を減らし、ミスを減らすことができます。
- エンティティとデータベースの同期が容易になります。
注意点
- 複雑な変更や特定のケースでは、期待通りに動作しない場合があります。
比較表
項目 | 手動作成 | 自動生成 |
---|---|---|
作成方法 | コマンドで空のファイルを生成し手動編集 | エンティティの変更から自動的に生成 |
利点 | 細かい制御が可能 | 手作業が減りミスを減らせる |
注意点 | ミスが発生しやすい | 複雑な変更には対応が難しい場合がある |
主なコマンド | migration:create |
migration:generate |
類似用語の説明と比較
エンティティ(Entity)
- データベースのテーブルに対応するクラス。
- TypeORMでは、デコレーターを使用してエンティティを定義します。
リポジトリ(Repository)
- エンティティに対するCRUD操作を提供するオブジェクト。
- データベース操作を抽象化し、コードの再利用性を高めます。
DataSourceとConnection
- Connection:TypeORM 0.2.xまで使用されていたデータベース接続の管理クラス。
- DataSource:TypeORM 0.3.x以降で導入された新しい接続管理クラス。
比較
項目 | Connection (0.2.x) | DataSource (0.3.x以降) |
---|---|---|
定義方法 |
createConnection 関数を使用 |
new DataSource でインスタンス化 |
利点 | 既存のプロジェクトで使用可能 | 複数の接続やモジュール化が容易 |
注意点 | 新機能の恩恵を受けられない | 移行が必要(Breaking Changes) |
まとめ
TypeORMでMigrationファイルを作成する際には、プロジェクトの規模や要件に応じて手動作成と自動生成を使い分けることが重要です。自動生成は便利ですが、全てのケースで完璧に動作するわけではないため、必要に応じて手動で調整することも検討してください。
また、TypeORMのバージョンによって使用するクラスやコマンドが異なる場合があるため、ドキュメントを参照しながら最新の方法を採用することをお勧めします。