12
7

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 5 years have passed since last update.

マイグレーションファイルについて

Last updated at Posted at 2019-04-03

マイグレーションファイルとは

Railsにて、データベースを扱う場合は必ず避けて通れないもの、それがマイグレーションファイルです。

データベースが白紙のノートだとしたら、そこに上から小さな紙を貼り付けて、罫線を引く感じですかね。

そうすることで、もしもそのデータが要らなくなった時に、貼り付けた紙を剥がすだけで良くなります。

データベースに直接書き込むと、それを消すのが大変なことはなんとなく想像できるかと思います。

具体的なマイグレーションファイルの使い方

イメージだけでは意味がありませんので、実際にマイグレーションファイルを利用する流れをお伝えしていきます。

以下はターミナルの記述です。
まず、アプリを作ります。

bin/rails new sample

次に、モデルを作ります。
設計図のようなものです。

bin/rails generate model User name:string age:integer

そして、このタイミングで実は、マイグレーションファイルが出来上がっています。

db/migrate/20190205132111_create_users.rb
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

このファイルを覗くと、マイグレーションファイルでどんな下書きをしたのか見ることができます。
下書き(マイグレーションファイル)が多数ある場合は、ここで最終的にどのように本書きされたのか見ておくと良いでしょう。

db/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にすると、マイグレーションファイルをコードエディタなどで編集できるので、有り難いのですが、あまりやりすぎると、そもそものデータベースの前提が崩れることもありますので、多用は厳禁です。

やはり、最初から修正など無い方が良いですよね。

12
7
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
12
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?