LoginSignup
12
7

More than 5 years have passed since last update.

ターミナルにおけるマイグレーション操作まとめ

Last updated at Posted at 2018-03-02

「あれってどうやるんだっけ?前にも検索した気がするけど今日もググろう」をゼロに。

自分の備忘録かつ、今現在プログラミングを学習している方々の無駄な時間を節約するために。

※MVCについてある程度理解しているものとして話は進みます。

筆者の環境

ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
Rails 5.1.5

DBを作成する

やり方

$ rake db:create

何が起きるのか

開発中のアプリケーションと紐づくデータベース(DB)が作成される。

アプリを開発する際、一番初めにやること。
これをせずにマイグレーションを実行するとエラーが出る。だってマイグレーションファイルを提出しようにも、提出先のDBがないんだもの。
Railsチュートリアルとかを一通り終わらせて初めてアプリを作るって人にありがちな間違い。僕もそうでした。

マイグレーションファイルを「提出」する

やり方

$ rake db:migrate

何が起きるのか

DB上に各モデルのテーブルが作成されます。
よく「マイグレーションを実行する」というのはこのコマンドを実行することを指します。

db/migrate以下の全マイグレーションファイルが対象。
20180302112122_devise_create_user.rbのようなタイムスタンプから始まるファイル達です。

このマイグレーションファイルの内容通りにテーブルが作成され、レコードを保存する際にはファイル内の記述通りに処理されます。
ちなみに一度マイグレーションしたマイグレーションファイルは、後からコードを修正して再びマイグレーションしても、テーブルに対して全く何の影響も与えることができません。

マイグレーションファイルは「提出する」という概念がしっくりくるのです。その説明は記事の本筋から外れるため、詳しく知りたい方はググってくださいませ。

マイグレーションの履歴を見る

やり方

$ rake db:migrate:status

何が起きるのか

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20180228155323  Devise create users
   up     20180228155448  Create quadrants
   up     20180228155554  Create tasks

マイグレーションの実行履歴が上記のような形でターミナルに出力されます。

Statusがupになっていれば既に提出済みです。
Migration IDはマイグレーションファイル名のタイムスタンプ部分ですね。上記の場合、1行目だと「20180228155323_devise_create_users.rbは既にマイグレーションされています」という意味になります。

ロールバックする

やり方

$ rake db:rollback

何が起きるのか

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20180228155323  Devise create users
   up     20180228155448  Create quadrants
   up     20180228155554  Create tasks

これが・・・

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20180228155323  Devise create users
   up     20180228155448  Create quadrants
  down    20180228155554  Create tasks

こうなります。
マイグレーションにはステップという概念があり、rake db:rollbackが1ステップ分、マイグレーションを巻き戻すことができます。
※downとは「まだマイグレーションファイルが提出されていませんよ〜」という意味。

2ステップ分ロールバックする

やり方

$ rake db:rollback STEP=2

何が起きるのか

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20180228155323  Devise create users
   up     20180228155448  Create quadrants
   up     20180228155554  Create tasks

これが・・・

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20180228155323  Devise create users
  down    20180228155448  Create quadrants
  down    20180228155554  Create tasks

ただのrake db:rollbackだけでは1ステップ分しかロールバックされませんが、ステップ数を指定することで好きなステップまでロールバックすることが可能です。

テーブル内のデータを全削除する

やり方

$ rake db:migrate:reset

何が起きるのか

アプリに紐づくDBそのものを削除し、再びDBを作成し、rake db:migrateが実行されます。
この操作は取り返しがつきません。実行前に「本当にやっちゃって大丈夫か」を必ずご確認ください。

最後に

僕自身、まだまだ先人たちのドキュメントを参照しながら開発を続ける日々です。
インターネットって素晴らしいですね。本当に助けられてばかりです。

これからは少しでも恩返ししていければと思い、拙い知識を総動員して少しずつ記事を投稿していくと思います。

PS:間違いや認識違いがあればご指摘頂けると幸いです。

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