Railsが用意するDB関連のタスク

rails db:create データベースを作成する
rails db:drop データベースを削除する
rails db:migrate マイグレーションファイルの内容をDBに反映させる
rails db:migrate:status 現在のマイグレーション状態を表示する(いままでにmigrationをした履歴が表示される)
rails db:prepare DBが存在すればマイグレーションを、存在しなければデータベースのセットアップを実行
rails db:reset データベースをdropして、db:setupを実行する
rails db:rollback 実行したマイグレーションを取り消す
rails db:schema:dump DBの構成をdb/schema.rbへ出力する
rails db:schema:load db/schema.rbの内容を実行する
rails db:seed db/seeds.rbの内容を実行する
rails db:seed:replant DBの内容をTRUNCATEし、スキーマの読み込みとシードデータの読み込みを行う
rails db:setup データベースを作成し、スキーマの読み込みとシードデータの読み込みを行う
rails db:version 現在適応しているマイグレーションのバージョンを表示する

rails db:resetはmigrate、drop、createを一気に行うコマンド

rails db:rollbackは一番最後のマイグレーションファイルの内容を戻します。複数戻したいときはSTEPを使って、rails db:rollback STEP=2のように書きます。

rails db:seed:replantは全部データを削除してから、 seed データを投入します。

RAILS_ENVを指定しない場合は、developmentとtest環境のスキーマを作成して、production環境のデータベースを作成したいときは下記のように環境変数RAILS_ENVを指定します。

$ bin/rails db:create RAILS_ENV=production

Rails6 のちょい足しな新機能を試す95(db:prepare 編) - Qiita

DBへテーブル定義を反映させてみます。bin/rails db:migrate:statusでデータベースへ反映済みの状態を確認できます。upは適用済みを表しています。

$ bin/rails db:migrate:status
Schema migrations table does not exist yet.

$ bin/rails db:migrate
== 20211227053840 CreateBlogs: migrating ======================================
-- create_table(:blogs)
   -> 0.0031s
== 20211227053840 CreateBlogs: migrated (0.0032s) =============================

== 20211227053956 CreateEntries: migrating ====================================
-- create_table(:entries)
   -> 0.0049s
== 20211227053956 CreateEntries: migrated (0.0050s) ===========================

$ bin/rails db:migrate:status

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20211227053840  Create blogs
   up     20211227053956  Create entries

scaffoldで作成したマイグレーションファイル。マイグレーションファイル内で使えるメソッドはupdownchangeメソッドです。ここではchangeメソッドを使っています。

class CreateEntries < ActiveRecord::Migration[6.0]
  def change
    create_table :entries do |t|
      t.string :title
      t.text :body
      t.references :blog, null: false, foreign_key: true

      t.timestamps
    end
  end
end

upメソッド:テーブルの情報を反映する時に使用

downメソッド:テーブルの情報を巻き戻す時に使用

changeメソッド:upとdownそれぞれで呼ばれるメソッド。下記がchangeでサポートされているマイグレーション定義の一覧です。

https://i.gyazo.com/b45800dfe8b0dcc1fbf286c3c5ac388a.png

changeとupの使い分け