3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rails マイグレーションファイル増えまくってない?30秒で既存テーブルに新規カラム追加・修正する方法

Last updated at Posted at 2023-12-11

1.はじめに

この記事では既存のテーブルに新たにカラム追加する際に、永遠とマイグレーションファイルが増えてしまう人に向けて、マイグレーションファイルを最小限化方法を解説します。

「いやいや当たり前でしょ。」と思うかもしれませんが、僕も過去にrailsを学び始めて一番最初にぶち当たった壁なので初心者向けに書いています!

2.マイグレーションファイルとは?

マイグレーションファイルは、データベースを生成する際の設計図になるものです。
また、マイグレーションファイルを実行することで、記述した内容に基づいたテーブルが生成されます。

3.ロールバックのやり方

まずはロールバックをする方法をおさらいしましょう。

ターミナル (一つ前まで戻す)
$ rails db:rollback

複数のファイルをロールバックしたい時は以下のように記述しましょう。

ターミナル (任意のファイルまで戻す)
$ rails db:rollback STEP=

すなわち5つのマイグレーションファイルとrollbackしたいときはSTEP=5となるわけです。

ここまでがロールバックのおさらいです。

4.既存テーブルにカラムの追加方法

tweetsテーブルにtitleというカラムをstring型追加する時、

ターミナル
$ rails g migration AddTitleToTweets title:string

のよう形で書いていませんか?

厳密には正しいですが、このままだとカラムを追加する際にマイグレーションファイルが永遠と増殖してしまいます。

今回の方法は、直接マイグレーションファイルを編集するという方法です。

1.ターミナルでマイグレーションファイルのrollbackを行う。
(※この際、必ずstatusがdownになっていることを確認しましょう!🚨)

image.png

2.編集したいマイグレーションファイルを選択
image.png

今回だと、以下のように追加してください

マイグレーションファイル
class CreateTweets < ActiveRecord::Migration[6.1]
  def change
    create_table :tweets do |t|
      t.text :body
      t.text :name
      t.string :image
      t.string :title   #追加する行

      t.timestamps
    end
  end
end

その後、ターミナルで以下を打ち込みましょう。

ターミナル
$ rails db:migrate

schema.rbを見てみましょう
スクリーンショット 2023-12-11 10.59.19.png

titleというカラムがstring型で追加されました。

(🚨注意点🚨)
・必ずstatusはオフにしましょう
・マイグレーションファイルを直接書き換えるので、間違いがないか必ず確認しましょう
・rails db:migrateした際にschema.rbをみて更新されているか確認しましょう

まとめ

今回はマイグレーションファイルをスッキリし、簡単にカラムを追加する方法を紹介しました。

追加をメインで行いましたが修正したい場合も同様で
status down → ファイルの修正 → マイグレーション
の流れで一発です!

これでrails 初学者でも気軽に、好きなように開発ができますね🌟

それでは楽しいrails開発の旅を〜!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?