Ruby on Rails

Ruby on Railsでテーブルのカラムを追加・削除する方法

Ruby on Railsではテーブルの変更(テーブル削除やカラム追加、インデックス追加など)はマイグレーションという仕組みを使って行います。SQLを直接操作することはないんですね。

今回は、マイグレーションの中でもよく使うテーブルのカラム追加・削除の方法をメモしておきます。

使用したRailsのバージョンは以下のとおりです。

$ rails -v
Rails 5.1.6.1

カラム追加

以下コマンドで、テーブルのカラムを追加するためのマイグレーションファイルを作成します。

$ rails generate migration Addカラム名Toテーブル名 カラム名:データ型
view raw rails.sh hosted with ❤ by GitHub

以下コマンドで、マイグレーションファイルをもとにテーブルのカラムを追加します。

$ rails db:migrate
view raw rails.sh hosted with ❤ by GitHub

実際に試してみます。

# postsテーブルにstring型のtitle項目を追加する
$ rails generate migration AddTitleToPosts title:string
view raw rails.sh hosted with ❤ by GitHub

上記コマンドを実行すると、以下のようなマイグレーションファイルがタイムスタンプ付きで自動生成されます。

db/migrate/20181208122013_add_title_to_posts.rb

class AddTitleToPosts < ActiveRecord::Migration[5.1]
def change
add_column :posts, :title, :string
end
end
view raw rails.rb hosted with ❤ by GitHub

あとは、以下コマンドでテーブルのカラムを追加してやればOKです。

$ rails db:migrate
view raw rails.sh hosted with ❤ by GitHub

ちなみに、以下コマンドのようにカラムを複数追加することもできます。Detailsの箇所はどんな名前でもOKです。

# postsテーブルにstring型のtitle項目とauthor項目を追加する
$ rails generate migration AddDetailsToPosts title:string author:string
view raw rails.sh hosted with ❤ by GitHub

自動生成されるマイグレーションファイルは以下のとおりです。

class AddDetailsToPosts < ActiveRecord::Migration[5.1]
def change
add_column :posts, :title, :string
add_column :posts, :author, :string
end
end
view raw rails.rb hosted with ❤ by GitHub

カラム削除

以下コマンドで、テーブルのカラムを削除するためのマイグレーションファイルを作成します。

$ rails generate migration Removeカラム名Fromテーブル名 カラム名:データ型
view raw rails.sh hosted with ❤ by GitHub

以下コマンドで、マイグレーションファイルをもとにテーブルのカラムを削除します。

$ rails db:migrate
view raw rails.sh hosted with ❤ by GitHub

実際に試してみます。

# postsテーブルのstring型のtitle項目を削除する
$ rails generate migration RemoveTitleFromPosts title:string
view raw rails.sh hosted with ❤ by GitHub

上記コマンドを実行すると、以下のようなマイグレーションファイルがタイムスタンプ付きで自動生成されます。

db/migrate/20181208135907_remove_title_from_posts.rb

class RemoveTitleFromPosts < ActiveRecord::Migration[5.1]
def change
remove_column :posts, :title, :string
end
end
view raw rails.rb hosted with ❤ by GitHub

あとは、以下コマンドでテーブルのカラムを削除してやればOKです。

$ rails db:migrate
view raw rails.sh hosted with ❤ by GitHub

ちなみに、以下コマンドのようにカラムを複数削除することもできます。Detailsの箇所はどんな名前でもOKです。

# postsテーブルのstring型のtitle項目とauthor項目を削除する
$ rails generate migration RemoveDetailsFromPosts title:string author:string
view raw rails.sh hosted with ❤ by GitHub

自動生成されるマイグレーションファイルは以下のとおりです。

class RemoveDetailsFromPosts < ActiveRecord::Migration[5.1]
def change
remove_column :posts, :title, :string
remove_column :posts, :author, :string
end
end
view raw rails.rb hosted with ❤ by GitHub

まとめ

Ruby on Railsでテーブルのカラムを追加・削除する方法をまとめました。 RailsはAddカラム名Toテーブル名といい、Removeカラム名Fromテーブル名といい、ほんと規約がかっちりしていますね。

参考リンク

-Ruby on Rails

S