Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Rails /テーブル作成、カラムの追加や削除[備忘録]

More than 1 year has passed since last update.

はじめに

アプリを作成していて、後からカラムを追加したい時に、はじめはschema.rbに書けばいいんじゃないか?と思っていたけど(これはNG笑)、正式なやり方を学んだの備忘録として残しておこうと思います。

マイグレーションについて

データベースにテーブルを追加するには、Railsが用意しているマイグレーションという仕組みを使っていきます。
このマイグレーションとは、データベーススキーマへの変更を随時追加、削除していくための仕組みです。
具体的にはテーブルを作成・削除、テーブルのカラムを追加・削除が行えます。

モデルの作成からテーブル作成

railsにてモデルを作成する際に、テーブルを作成するためのマイグレーションファイルが同時に作られます。
※モデルを作成するコマンドは以下になります。

$ bin/rails generate model [モデル名] [属性名:データ型 属性名:データ型・・・] [オプション]

例をあげると、Userモデルを作成したい場合、[モデル名]にUser、[属性名:データ型]にはname:string email:stringを指定します。コマンドは以下のようになります。

$ rails generate model User name:string email:string

コマンドを実行すると自動生成されるものが以下の4tつになります。
①モデルのクラスファイル
②マイグレーションファイル
③モデルの自動テスト
④モデルの自動テストで使うfictureファイル

マイグレーションファイルに関して生成されたファイルはこのようになります。

db/migrate/XXXXXXXXXXXXXX_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users do |t|
      t.string :name
      t.string :email

      t.timestamps
    end
  end
end

上記ファイルが生成された後、データベースのテーブルの定義をRailsに読み込ませるために、次のコマンドでマイグレーションを実行します。

rails db:migrate

これでUsersテーブルが作成されました!

テーブルの削除やカラムの追加・削除

やり方としては、新たにマイグレーションを個別で作成し、その中に変更したい処理を記述して、$ rails db:migrateコマンドで実行をします。

マイグレーションファイルを作成するコマンド

$ rails g migration クラス名 カラム名:データ型

※クラス名はAddXXXToYYY、またはRemoveXXXFromYYYとします。
「XXX」にはテーブル名、YYYにはカラム名(複数のカラムを変更したい場合などがあるのでカラム名ではなくても問題ありません)

[カラム追加のマイグレーション作成]
※nickname(string型)のカラムを追加したい場合

rails generate migration AddNicknameToUsers nickname:string

ファイルが作成されたら$ rails db:migrateを実行し反映させます。

[カラム削除のマイグレーション作成]
※name(string型)のカラムを削除したい場合

rails generate migration RemoveNameFromUsers name:string

ファイルが作成されたら$ rails db:migrateを実行し反映させます。

ファイルの削除

データベースへ反映ができ、特に残しておく必要がなければ追加したファイルは削除しておいてもいいでしょう。
ファイルツリーから直接消さずに、コマンドを実行してファイルを削除しましょう。コマンドは以下になります。

rails destroy migration クラス名

(例)先ほどのファイルを削除する場合

rails destroy migration AddNicknameToUsers

参考

https://qiita.com/azusanakano/items/a2847e4e582b9a627e3a
https://qiita.com/kanuu/items/a9223712ee0ff8d19d56

Toshimatu
よろしくお願いします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away