マイグレーションファイルとは
Railsにて、データベースを扱う場合は必ず避けて通れないもの、それがマイグレーションファイルです。
データベースが白紙のノートだとしたら、そこに上から小さな紙を貼り付けて、罫線を引く感じですかね。
そうすることで、もしもそのデータが要らなくなった時に、貼り付けた紙を剥がすだけで良くなります。
データベースに直接書き込むと、それを消すのが大変なことはなんとなく想像できるかと思います。
具体的なマイグレーションファイルの使い方
イメージだけでは意味がありませんので、実際にマイグレーションファイルを利用する流れをお伝えしていきます。
以下はターミナルの記述です。
まず、アプリを作ります。
bin/rails new sample
次に、モデルを作ります。
設計図のようなものです。
bin/rails generate model User name:string age:integer
そして、このタイミングで実は、マイグレーションファイルが出来上がっています。
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name
t.integer :age
t.timestamps
end
end
end
小さな紙が今、データベースに貼られましたね!
あとは、好きに書き込んでいくわけですが、実は、まだ今の段階では下書きだと思ってください。
この後に消せないボールペンでなぞっていきます。
正直、この段階である程度データベースのカラムは決めておいた方が良いです。
(オプション追加や、indexをつけるなら、この段階で!!)
なぜなら、消せないボールペンでなぞってしまうと、それを書き換えるのは非常に骨が折れるからです。
効率的ではないと思います。
bin/rake db:migrate
消せないボールペンで書きました。
このコマンドを行うと、ついにデータベースの体裁が整います。
マイグレーションファイルの状態確認
マイグレーションファイルが増えてくると、今が下書きなのか、本書きなのか分からなくなります。
そんな時には、現在のデータベースの状態を確認しましょう。
schema.rb
このファイルを覗くと、マイグレーションファイルでどんな下書きをしたのか見ることができます。
下書き(マイグレーションファイル)が多数ある場合は、ここで最終的にどのように本書きされたのか見ておくと良いでしょう。
ActiveRecord::Schema.define(version: 2019_04_03_143620) do
create_table "users", force: :cascade do |t|
t.string "name"
t.integer "age"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
データベースにカラム"nam"や"age"が登録されているのが分かりますね。
rake db:migrate:status
このコマンドは、今、マイグレーションファイルが下書き状態なのか、本書き状態なのかを一覧で教えてくれます。
Status Migration ID Migration Name
--------------------------------------------------
up 20190205132111 Create users
upはもう本書きされてますよ、ということです。
対して、
Status Migration ID Migration Name
--------------------------------------------------
down 20190205132111 Create users
downはまだ下書きだよ、という意味です。
ちなみに意図的にこのupされているファイルをdownさせることも可能です。
downにすると、マイグレーションファイルをコードエディタなどで編集できるので、有り難いのですが、あまりやりすぎると、そもそものデータベースの前提が崩れることもありますので、多用は厳禁です。
やはり、最初から修正など無い方が良いですよね。