「あれってどうやるんだっけ?前にも検索した気がするけど今日もググろう」をゼロに。
自分の備忘録かつ、今現在プログラミングを学習している方々の無駄な時間を節約するために。
※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:間違いや認識違いがあればご指摘頂けると幸いです。