👨‍💻

《Rails》初学者のマイグレーションファイル修正【オリジナルアプリ作成】

2024/04/21に公開

こんにちは、ミヤビです(^^)

プログラミング学習を始めて5ヶ月、実装したい機能はまだまだたくさんあるオリジナルアプリをRailsで開発中です。

スクールのカリキュラムに取り組んでいた時も躓いたマイグレーション関連について簡単にまとめておきます。
現時点での僕の理解や部分的な説明になっちゃうかと思いますが、あしからずお願いします。

シンプルにテーブルを作成したり、カラムを追加や変更する時に触るファイル、の理解で今はいます。

ミスに気づいた時

マイグレーションファイルを触ること自体はそんなに難しくは感じないんですが、僕がどこで躓いたか?というと本番環境にデプロイした時です。
ローカルで作業をしている時に、必要に応じてマイグレーションファイルを修正したり、後からカラムを追加したりしていました。
その時に僕の犯していたミスは大きく2つ。

ミスに気づくのが本番環境にデプロイした時になるわけですが、ローカルで作業している時は何となく動いちゃったりします。
ひとえに理解力が浅いまま突き進んでいるからことなんですが、、、^^;

マイグレーションファイルを修正する時は一旦rollbackする

アプリを作成してテーブルを作成していると、マイグレーションファイルを作成していると思います。
例えばこんな感じの。

20240321225440_create_friends.rb
class CreateFriends < ActiveRecord::Migration[7.0]
  def change
    create_table :friends do |t|
      t.string     :friends_name
      t.string     :contact
      t.timestamps
    end
  end
end

ターミナルで下記のコマンドを実行すると、テーブルが作成されます。

rails db:migrate

実行した後に、状態を見てみます。
状態を見るコマンドは下記です。

rails db:migrate:status

実行すると、ターミナルにこんな感じの表示が出ます。

Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240321104546  Devise create users
   up     20240321225440  Create friends
   up     20240409222224  Create emotions

一番左のStatusがupになっているので、マイグレーションが実行されている状態です。
ここがdownになっていると実行されていないです。
僕がやってしまっていたミスの一つが、このupの状態でマイグレーションファイルを修正していたこと、です。
マイグレーションファイルを修正する際は、一旦はdownの状態にして修正しないといけないんですね。

rails db:rollback

このコマンドを実行すればdownの状態になります。

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20240321104546  Devise create users
   up     20240321225440  Create friends
  down    20240409222224  Create emotions

一番下のemotionsの部分だけdownになっています。
これは先程のrails db:rollbackは直前の一つのファイルだけをrollbackするコマンドなのでこの状態になっています。
特定のダイルを指定したい場合、複数を指定したい場合は色々方法があるようですが、僕が使っているのは下記のコマンドが多いです。

rails db:rollback STEP=n

このコマンドのnの部分は数字が入ります。
2なら2つ、3なら3つマイグレーションをrollbackしてくれます。

rails db:migrate VERSION=リビジョン番号

これはバージョンを指定してrollbackしてくれます。
先程のMigration IDの部分をリビジョン番号に入力すればOKです。

他にも方法はあると思いますが、兎にも角にもマイグレーションファイルを修正する時のまとめです。

この手順を踏まないと、ファイルだけ修正しても基本意味がないと思います。

カラムの追加に注意する

これは今はもう無いんですが、カリキュラムに取り組んでいる時に意図せずやっていたことです。

20240321225440_create_friends.rb
class CreateFriends < ActiveRecord::Migration[7.0]
  def change
    create_table :friends do |t|
      t.string     :friends_name
      t.string     :contact
      t.timestamps
    end
  end
end

さっきと同じ例ですが、このファイルを実行すると、テーブルには「friedns_name」「contact」のカラムが作成されます。
Image from Gyazo
例えばここに「email」というカラムを追加したいとします。

rails generate migration AddEmailToUsers email:string

通常は例えばこういうコマンドを実行すればOKです。
なんですが、僕がやっていたいのは、すでにある「contact」を追加するために下記のコマンドを実行したりしていました。

rails generate migration AddEmailToUsers contact:string

これにより何が起こるかと言うと、同じテーブルに「contact」のカラムが2つある=重複する状態になってしまうんですよね、、、
これが本番環境でエラーを起こす要因となりました。
慣れてくれば何てことないんですが、最初は分からないですよね。。。^^;

まとめ

まとまりがない文章が続きましたが、簡単にまとめます。

こんな感じです。
オリアプ作成段階に入ると、後からカラム追加したり名前を変更することは全然あります!
マイグレーションもまだまだ奥が深いことありそうなので都度追記や別記事書いていきます。

未経験からの初学者が勉強をするのは大変ですが、その挑戦それ自体がきっと素晴らしいです!

より良い人生にしていきましょう♪

Discussion