1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

マイグレーションファイルの基本

Last updated at Posted at 2021-03-19

マイグレーションとは?

マイグレーション(migration)とは辞書では「移行」の意味を持つ
ざっくりいうと「SQLなしでデータベースにテーブルを作成する機能」のこと。

作り方

ターミナルでコマンドを打つと作成できる

ターミナル
# モデルと同時に生成
$ rails g model User

モデルと同時に生成される複数ファイルのうちのひとつにマイグレーションが入っている。

ターミナル
# 単体で生成
$rails g migration create_user name:string email:string gender:integer

マイグレーションのみを生成する際には、ファイル名の後ろに[カラム名:データ型]を指定することで生成前に
テーブルを指定しておくことが可能。

基本の形

db/migrate/[timestamp]_ファイル名.rb

class CreateUsers < ActiveRecord::Migration[6.1]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email 
      t.integer :gender
      t.timestamps
    end
  end
end

解説
"t.データ型 :カラム名"という形で記述していく。

実行方法
以下のコマンドをターミナルで実行することで、テーブルが生成される。

ターミナル
$ rails db:migrate

また、実行時に自動で3つのカラム(id, created_at, updated_at)も生成される。
マイグレーションファイルは一度実行すると次回のrails db:migrateでは実行されなくなる。
なので実行後に追加でカラムが必要になった場合は、加筆するのではなく新しくマイグレーションファイルを作るのが有効。
*もちろん加筆した上で"rails db:migrate:reset"をやるのもOKだが、注意は必要。

マイグレーション名は以下の形式にすることで、適切な記述のマイグレーションが作成される。
・マイグレーション名を"AddColumnToTable"や"RemoveColumnFromTabel"である
・後ろにカラム名やデータ型が続く

追加例
$ rails g migration AddAgeToUsers age:integer
カラム追加のマイグレーションファイル
class AddAgesToUsers < ActiveRecord::Migration[6.1]
  def change
    add_column :users, :age, :integer
  end
end

上記マイグレーションファイルを作成したあとにrails db:migrateでageカラムを追加してくれる

削除例
$ rails g migration RemoveGenderFromUsers gender:integer
カラム削除のマイグレーション

class AddColumnGenders < ActiveRecord::Migration[6.1]
  def change
    remove_column :users, :gender, :integer
  end
end

上記マイグレーションファイルを作成したあとにrails db:migrateでgenderカラムを削除してくれる

rails db:migrate:resetでテーブルを再作成することもできるが、
チーム開発等では変更が加えられていないか十分に注意が必要。

その他

マイグレーションファイルを1つのバージョンだけ実行したい場合

1.以下でmigrationのステータスを確認

ターミナル
$ bundle exec rake db:migrate:status

2.表示されるMigration IDをコピー
3.以下のコマンドでバージョンを指定して実行

ターミナル
$ rails db:migrate VERSION=[Migration ID]

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
◯changeメソッドの代わりに使うup/downや外部キーadd_foreign_keyもアウトプットしたかったが後日更新予定。

参考

・Railsガイド

・Rails初心者がつまずきやすい「マイグレーション」

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?