Railsのデータベースコマンドこれさえ見れば問題なし!

概要

Railsアプリでデータベースをmigrateする際の有用なコマンドをこの記事にまとめる。

migrateコマンドまとめ

ファイル作成コマンド

rails g migration クラス名`

  $ rails g migration CreateUsers
  Running via Spring preloader in process 310
    invoke  active_record
      create    db/migrate/20220913055401_create_users.rb
  • モデルファイル作成

rails g model モデル名

  $ rails g migration User
  Running via Spring preloader in process 315
      invoke  active_record
    identical    db/migrate/20220913055401_create_users.rb
      create    app/models/user.rb

本来マイグレーションファイルも作成されますが、元々モデル名に対応するマイグレーションファイルが作成されていた場合、作成はスキップされます。

データベース作成コマンド

  • database.ymlでの設定内容に基づデータベースを作成

rails db:create

  $ rails db:create
  Created database 'データベース名①'
  Created database 'データベース名②'
  • database.ymlでの設定内容に基づデータベースを作成及びseedデータを反映

rails db:setup

rails db:create と rails db:seed を行う。

マイグレーション実行コマンド

rails db:migrate

  $ rails db:migrate
  == 20220913055401 CreateUsers: migrating ==================
  -- create_table(:users)
  == 20220913055401 CreateUsers: migrated (0.2292s) =========

rails db:migrate VERSION=20220802084230

  $ rails db:migrate VERSION=20220802084230
  == 20220405101025 ChangeColumnUsers: migrating ====================================
  -- change_column(:users, :age, :integer)
    -> 0.2541s
  == 20220405101025 ChangeColumnUsers: migrated (0.2880s) ===========================

  == 20220405103000 ChangeColumnSubjects: migrating ====================================
  -- change_column(:subjects, :title, :string)
    -> 0.2541s
  == 20220405103000 ChangeColumnSubjects: migrated (0.2880s) ===========================

  == 20220802084230 CreateTests: migrating ====================================
  -- create_table(:tests)
    -> 0.2541s
  == 20220802084230 CreateTests: migrated (0.2880s) ===========================

rails db:migrate:up VERSION=20220405103000

  $ rails db:migrate:up VERSION=20220405103000
  == 20220405103000 ChangeColumnSubjects: migrating ====================================
  -- change_column(:subjects, :title, :string)
    -> 0.2541s
  == 20220405103000 ChangeColumnSubjects: migrated (0.2880s) ===========================

rails db:migrate RAILS_ENV=◯◯

RAILS_ENVの値にproduction、testを入力することで、マイグレーションをする環境を替えられる。(デフォルトはdevelopment)

  $ rails db:migrate RAILS_ENV=production
  == 20220405101025 ChangeColumnUsers: migrating ====================================
  -- change_column(:users, :age, :integer)
    -> 0.2541s
  == 20220405101025 ChangeColumnUsers: migrated (0.2880s) ===========================

  == 20220405103000 ChangeColumnSubjects: migrating ====================================
  -- change_column(:subjects, :title, :string)
    -> 0.2541s
  == 20220405103000 ChangeColumnSubjects: migrated (0.2880s) ===========================

  == 20220802084230 CreateTests: migrating ====================================
  -- create_table(:tests)
    -> 0.2541s
  == 20220802084230 CreateTests: migrated (0.2880s) ===========================

マイグレーション状況確認コマンド

rails db:migrate:status

  $ rails db:migrate:status
  Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220329033155  Create users
   up     20220329034010  Create subjects
   up     20220405101025  Change column users
   up     20220405103000  Change column subjects
   up     20220802084230  Create tests

rails db:version

  $ rails db:version
  Current version: 20220802084230

ロールバックコマンド

rails db:rollback

  $ rails db:rollback
  == 20220802084230 CreateTests: reverting ====================================
  -- create_table(:tests)
    -> 0.2541s
  == 20220802084230 CreateTests: reverted (0.2880s) ===========================

  $ rails db:migrate:status
  Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220329033155  Create users
   up     20220329034010  Create subjects
   up     20220405101025  Change column users
   up     20220405103000  Change column subjects
  down    20220802084230  Create tests

rails db:rollback STEP=◯

  $ rails db:rollback STEP=2
  == 20220405103000 ChangeColumnSubjects: reverting ====================================
  -- change_column(:subjects, :title, :string)
    -> 0.2541s
  == 20220405103000 ChangeColumnSubjects: reverted (0.2880s) ===========================

  == 20220405101025 ChangeColumnUsers: reverting ====================================
  -- change_column(:users, :age, :integer)
    -> 0.2541s
  == 20220405101025 ChangeColumnUsers: reverted (0.2880s) ===========================

  $ rails db:migrate:status
  Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220329033155  Create users
   up     20220329034010  Create subjects
  down    20220405101025  Change column users
  down    20220405103000  Change column subjects
  down    20220802084230  Create tests

rails db:migrate:down VERSION=20220329033155

  $ rails db:rollback STEP=2
  == 20220329033155 CreateUsers: reverting ====================================
  -- create_tables(:users)
    -> 0.2541s
  == 20220329033155 CreateUsers: reverted (0.2880s) ===========================

  $ rails db:migrate:status
  Status   Migration ID    Migration Name
--------------------------------------------------
  down    20220329033155  Create users
   up     20220329034010  Create subjects
  down    20220405101025  Change column users
  down    20220405103000  Change column subjects
  down    20220802084230  Create tests

マイグレーションコマンド

rails db:migrate:redo

  $ rails db:migrate:redo
  == 20220802084230 CreateTests: reverting ====================================
  -- create_table(:tests)
    -> 0.2541s
  == 20220802084230 CreateTests: reverted (0.2880s) ===========================

  == 20220802084230 CreateTests: migrating ====================================
  -- create_table(:tests)
    -> 0.2541s
  == 20220802084230 CreateTests: migrated (0.2880s) ===========================

rails db:migrate:redo STEP=2

  $ rails db:migrate:redo STEP=2
  == 20220802084230 CreateTests: reverting ====================================
  -- create_table(:tests)
    -> 0.2541s
  == 20220802084230 CreateTests: reverted (0.2880s) ===========================

  == 20220405103000 ChangeColumnSubjects: reverting ====================================
  -- change_column(:subjects, :title, :string)
    -> 0.2541s
  == 20220405103000 ChangeColumnSubjects: reverted (0.2880s) ===========================

  == 20220405103000 ChangeColumnSubjects: migrating ====================================
  -- change_column(:subjects, :title, :string)
    -> 0.2541s
  == 20220405103000 ChangeColumnSubjects: migrated (0.2880s) ===========================

  == 20220802084230 CreateTests: migrating ====================================
  -- create_table(:tests)
    -> 0.2541s
  == 20220802084230 CreateTests: migrated (0.2880s) ===========================

rails db:migrate:redo VERSION=20220405103000

  $ rails db:migrate:redo VERSION=20220405103000
  == 20220405103000 ChangeColumnSubjects: reverting ====================================
  -- change_column(:subjects, :title, :string)
    -> 0.2541s
  == 20220405103000 ChangeColumnSubjects: reverted (0.2880s) ===========================

  == 20220405103000 ChangeColumnSubjects: migrating ====================================
  -- change_column(:subjects, :title, :string)
    -> 0.2541s
  == 20220405103000 ChangeColumnSubjects: migrated (0.2880s) ===========================

データベースを削除及び初期化コマンド

  • データベースを削除

rails db:drop

  $ rails db:drop
  Dropped database 'データベース名①'
  Dropped database 'データベース名②'
  • データベースを初期化する

rails db:reset

rails db:drop でデータベースを削除後、rails db:setup でseedデータを反映させたデータベースを作成

rails db:migrate:reset

rails db:drop でデータベースを削除後、rails db:create でデータベースを作成、 rails db:migrate を行う。

最後に

改めて今回まとめた事でどういうものが出力できるか理解できました。どこか間違っている所があれば指摘して頂けると嬉しいです。
ここまで読んで下さりありがとうございました〜

参考資料