LoginSignup
3
0

マイグレーション、DB周りの便利なコマンド集

Posted at

はじめに

スクールの課題で、タスク管理アプリを作成しているときにマイグレーションファイルに記載している内容が、$ rails db:migrateしてもschemaファイルに反映されないことがあり、マイグレーションの復習も兼ねてアウトプットします。修正や追加等ありましたら、コメントいただけるとありがたいです。

環境

・MacBookAir 13インチ M1(2020)
・OS:Sonoma 14.3
・メモリ:16GB
・Rails: version 6.1.7.6

マイグレーションとは?

データベースの中にテーブルを作成するするために必要なもの。マイグレーションファイルを使用してデータベーススキーマに変更を反映させる仕組みです。RailsのマイグレーションファイルはRubyのプログラムで書き実行します。

テーブルの作成カラムを追加・削除インデックスの追加スキーマに対するあらゆる変更は、都度マイグレーションファイルを作成してスキーマに反映するという流れをとる。したがって、データベーススキーマの変遷の歴史がマイグレーションファイルとして残ります。

※この仕組みの長所は、データベーススキーマの状態を任意の地点まで戻せる点です。例えば、アプリケーションのコードに変更を加えた後、何らかの事情でコードをある地点まで戻したい時、その途中でデータベーススキーマへの変更が行われていたとしても、マイグレーションファイルを参照して、任意の地点まで元に戻すことができます。
作り方は大きく2種類あります。

1. rails g modelコマンドでモデルを作成

rails g model [model] [属性名1:データ型1] [属性名2:データ型2] ... 

このコマンドでモデルを作成すると、対応するマイグレーションファイルが一緒に生成されます。例えば、String型のname属性, Integer型のage属性を持つUserモデルを作成したい場合は、$ rails g model user name:string age:integerとなります。モデルを作成する時、対応するテーブルが必要なことがあらかじめ分かっている場合は、この方法でマイグレーションファイルを作成すると楽。

2. rails g migrateコマンドでマイグレーションファイルだけを単独で作成

rails g migrate [マイグレーションクラス名]

モデルを作成したあとでテーブルを作成する場合や、テーブル作成以外のマイグレーションファイルが必要な場合はこちらを使うことになります。

マイグレーションを実行

$ rails db:migrate
== 20200713120627 CreateUsers: migrating ======================================
-- create_table(:users)
  -> 0.0203s
== 20200713120627 CreateUsers: migrated (0.0204s) =============================

DBやマイグレーション周りの便利なコマンド集

マイグレーションがどこまで進んでいるか確認

$ rails db:version
#versionを確認する。
# 例:Current version: 20171112122350
# version: 20171112122350実行している場合↑

$ rails db:migrate:status
#migrationの適用状態を表示

ロールバック

$ rails db:rollback  
#1つ前のファイルの状態まで戻す。

$ rails db:rollback STEP=

#現在地を含めた○個前までなかったことにしてくれる
#つまり○+1個前のファイルまで実行された状態
rake db:migrate VERSION=0
#最初のバージョン(0)に戻す場合。VERSIONを指定するとその件数分、戻す。

rails db:migrate:down VERSION=20221003050833
#VERSIONに指定されたmigrationをdownにする
$ rails db:abort_if_pending_migrations
#どのファイルが作られていないか知りたい時。

マイグレーションファイルを作成

$ rails db:migrate

$ rails db:migrate:up VERSION=20221003050833
#VERSIONに指定されたmigrationをupにする

番外編(rails db:reset、rails db:migrate:reset、rails db:setup etc..

)

$ rails db:reset

新しくテーブルを作り直して、さらにシードファイルも読み込んでダミーデータも作ってくれる。新しくテーブルを作り直すので、既存のデータは全て消えて新たにシードファイルを元に作り直す。db:drop、db:create、db:schema:load、db:seedをまとめて実行するコマンド。

$ rails db:migrate:reset

新たにテーブルを作り直すので、テーブルのデータはもちろん全部消える。※ここは、$ rails db:resetと同じ。
シードファイルは読み込まないので、新しいダミーデータは生成されない。($ rails db:seedは自分で実行する必要がある)
rails db:drop、rails db:create、rails db:migrateをまとめて実行するコマンド。

$ rails db:setup

アプリケーションのDB周りの初期設定をしてくれる。以下3つのコマンドを実行してくれる。

  1. $ rails db:create
  2. $ rails db:schema:load
  3. $ rails db:seed
$ db:drop

DBを削除する。

3
0
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
3
0