😊

DBを操作するRailsコマンド集(最低限知っておくべき‼︎)

2024/02/09に公開

概要

Railsでは色々なDBの操作コマンドが出てくるので、それぞれ理解していく必要があります。
紙に書いて説明していきます。下手くそかもしれないですが、ご了承ください🙇‍♂️

DBの作成、削除

以下は空のDB作成、削除コマンドです。

rails db:create
rails db:drop

migrationの実行、migrationを元に戻すコマンド

以下は空のDBにmigrationの実行、元に戻すコマンドです。

rails db:migrate
rails db:rollback

migrationの実行とはアプリケーション内のDBの構造を変更し、その変更を反映します。
この反映を元に戻すのがrollbackです。

⚫︎補足

rails db:rollback STEP=n

直近のn個のマイグレーションを取り消します。

ex)
STEP=3を指定した場合、直近の3つの未適用のマイグレーションが適用されます。これにより、データベースの状態を特定のポイントまで戻したり、特定のマイグレーションまで進めたりすることができます。

⚫︎補足
最初の状態に戻したいときは、VERSION=0オプションを使います。

  $ rails db:migrate VERSION=0

rails db:migrate:status

マイグレーションの実行状況を表示します。

rails db:migrate:status

全体像

紹介した4つのコマンドの全体像です。

rails db:create #DB作成
rails db:drop #DB削除
rails db:migrate #migration実行
rails db:rollback #migrationの反映を元に戻す

rails db:dropの補足

DBを完全に削除するコマンドrails db:dropです。
つまり、DB内のすべてのテーブルやデータを削除します。

rails db:seed

初期データやテストデータのことで動作確認用に初めからあって欲しいデータがあります。
これがseedです。初期データをデータベースに挿入するコマンドです。

rails db:seed

seeds.rbというファイルがあり、ここにレコードなど作成するスクリプトを書いておくと、
rails db:seedコマンドで初期データを保存できます。

rails db:reset

DBをリセットして初期状態に戻すコマンドです。
DBを一度作り直して、schema.rbに沿ってDBを作り直すコマンドです。
schema.rb は、migration 実行後に自動的に更新される、データベースの定義が書いてあるファイルでしたね。

rails db:resetの注意

開発中にDBをリセットして、テストデータを消したり、新しいマイグレーションを適用できたりしますが、
rails db:resetを実行すると、DB内のすべてのデータが消えるので、
あまり使わない方がいいみたいです。

rails db:migrate:reset

DBをリセットして、すべてのマイグレーションを最初から実行し直すコマンドです
DBの設計書(migrationファイル)に基づいて再作成するので、リセットするときはこちらのコマンドの方がいいみたいです。

その他DBコマンド集

rails db:version

現在のDBのスキーマバージョンを表示します。

rails db:version

rails db:migrate:redo

直前のマイグレーションを取り消してから再度実行します

rails db:migrate:redo
  1. 最後に実行されたmigrationを取り消す(db:rollbackを実行)
    2.マイグレーションを再度実行します(db:migrateを実行)

開発者が最新のマイグレーションをテストしたり、最後の変更を取り消して再度適用したりする時に使います

rails db:schema:load

schema.rbファイルに記述されたDBのスキーマ情報を使って、DBのスキーマを再作成します。schema.rbファイルに記述されたスキーマ情報に従って、データベースが再構築されます。

rails db:schema:load

rails db:schema:dump

DBのスキーマ情報をRubyのコードとしてdb/schema.rbというファイルにダンプするコマンドです。

rails db:schema:dump

Laravelバージョン

Laravelだと以下の記事のようなコマンドです。

https://qiita.com/Hashimoto-Noriaki/items/65eb7be82d8b64dde4d6

Discussion