【Rails】データベース・テーブルまわりでよく使うコマンドまとめ
2019/06/07
こんにちは、okutani(@okutani_t)です。本記事では、自分の備忘録用にRuby on Railsで使えるテーブル周りのコマンドをまとめています。
なお、本記事でのコマンドはbundlerで導入したrailsコマンドを利用するため、「$ bundle exec rails」コマンドを利用しています。グローバルに導入したrailsコマンドを利用する場合は「bundle exec」を削除して読み進めてください。
Railsの導入などは以下の記事を参考にしてください。
今回の動作環境はRuby on Rails5.2.0です。
それでは、データベーステーブル周りのコマンドを載せていきます。
スポンサーリンク
もくじ
データベースの作成
以下のコマンドを実行すると、データベースが作成されます。
$ bundle exec rails db:create
デフォルトでは「プロジェクト名_development」「プロジェクト名_test」のふたつのデータベースが作成されます。
テーブルの新規作成
テーブルを新規作成するには以下の手順。
$ bundle exec rails generate model User name:string email:string
上記のコマンドで、「name」「email」カラムを持った「users」テーブルを作成するためのmigrationファイルが作成されます。
ちなみに、generateは「g」に置き換えることができ、stringは省略できるため、上記のコマンドは以下のように記述することができます。
$ bundle exec rails g model User name email
コマンドが短くなってすっきりしました。
migrationファイルは、「db/migrate/日付_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
上記のファイルを変更すれば、好きにカラムの情報を変更することができます。
実際にDBに反映させるため、migrationを実行します。
$ bundle exec rails db:migrate
これでDBに「users」テーブルが「name」と「email」カラム付きで作成されます。
リレーション付きで作成
外部キー制約付きのテーブルを作成するには「モデル名:references」というコマンドを利用します。
$ bundle exec rails g model Tweet user:references text
これで、Userに紐付いたTweetモデルが作成されます。
class CreateTweets < ActiveRecord::Migration[5.2]
def change
create_table :tweets do |t|
t.references :user, foreign_key: true
t.string :text
t.timestamps
end
end
end
migrationを実行。
$ bundle exec rails db:migrate
リレーション付きのモデルは頻繁に作成するので覚えておくと良いですね。
カラムに利用できる型
カラムには以下の型が設定できます。
string | 文字列 |
---|---|
text | 長い文字列 |
integer | 整数 |
float | 浮動小数点 |
decimal | 固定小数点 |
datetime | 日時 |
timestamp | タイムスタンプ |
time | 時刻 |
date | 日付 |
binary | バイナリ文字列 |
boolean | 真偽値 |
テーブルの削除
テーブルの削除方法について解説します。
migration実行前の場合
migration実行前の場合は、以下のコマンドで関連ファイルなど含めて削除することができます。
$ bundle exec rails destroy model User
これで、マイグレーションファイル、モデルファイル、テストファイルなどの関連ファイルがすべて削除されます。
migration実行後の場合
migration実行後の場合は以下のコマンドでテーブル削除用のmigrationファイルを作成します。
$ bundle exec rails g migration DropTableUser
生成されたmigrationファイルを以下のように変更します。
class DropTableUser < ActiveRecord::Migration[5.2]
def change
drop_table :users
end
end
migrationを実行します。
$ bundle exec rails db:migrate
そのあとは、モデルファイルなどの関連ファイルを手動で削除すればOKです。
後述するロールバックを効かせる場合は、changeメソッドではなくup・downメソッドを利用する必要があります。時間があるとき追記します。
DBのリセット
以下のコマンドを実行すると、DBを削除し、migrationファイルを1から実行しなおしてくれます。
$ bundle exec rails db:migrate:reset
以下のコマンドでも同様にリセットしてくれますが、こちらは「db/schema.rb」の情報を元にDBをリセットします。
$ bundle exec rails db:reset
基本的には「$ bundle exec rails db:migrate:reset」コマンドを実行しておけばOKです。
カラムの追加
カラムをusersテーブルに追加したい場合は以下のコマンドを実行します。以下の例では「address」カラムを追加しました。
$ bundle exec rails g migration AddAddressColumnToUser address
以下の内容でmigrationファイルが生成されました。
class AddAddressColumnToUser < ActiveRecord::Migration[5.2]
def change
add_column :users, :address, :string
end
end
migrationを実行。
$ bundle exec rails db:migrate
これでusersテーブルにaddressカラムが追加されました。
カラムの削除
カラムの削除をおこないたい場合、以下の形でコマンドを実行します。一例として、usersテーブルからemailカラムを削除しています。
$ bundle exec rails g migration RemoveEmailColumnFromUser email
以下の内容でファイルが生成されます。
class RemoveEmailColumnFromUser < ActiveRecord::Migration[5.2]
def change
remove_column :users, :email, :string
end
end
migrationの実行。
$ bundle exec rails db:migrate
usersテーブルからemailカラムが削除されました。
カラム名の変更
カラム名の変更は以下の手順でおこないます。一例として、usersテーブルのnamaeカラムをnameカラムに変更します。
$ bundle exec rails g migration RenameNamaeColumnToNameFromUser
作成されたmigrationファイルを以下のように編集。
class RenameNamaeColumnToNameFromUser < ActiveRecord::Migration[5.2]
def change
rename_column :users, :namae, :name
end
end
migrationの実行。
$ bundle exec rails db:migrate
これでusersテーブルのnamaeカラムがnameにリネームされました。
型の変更
カラムの型を変更するには以下の手順をおこないます。以下の例では、usersテーブルのbioカラムをstring -> textに変更しています。
$ bundle exec rails g migration ChangeDatatypeBioOfUser
マイグレーションファイルを以下のように変更します。
class ChangeDatatypeBioOfUser < ActiveRecord::Migration[5.2]
# 変更内容
def up
change_column :users, :bio, :text
end
# 変更前の内容
def down
change_column :users, :bio, :string
end
end
changeメソッドではなく、upとdownメソッドを利用しています。
これは後述するrollbackを利用する際に、変更前の型情報を明示しておかなければいけないためです。
migrationを実行すると、型が変更されていることが確認できます。
追加オプションなど
「not null, default, index, unique」などオプションの追加方法について解説します。
以下の例では、usersテーブルのuuidカラムを「not null」「default値 -> 0」「index追加(+ unique追加)」を設定しています。
$ bundle exec rails g migration ChangeUuidColumnToUser
生成されたmigrationファイルを編集。
class ChangeUuidColumnToUser < ActiveRecord::Migration[5.2]
# 変更内容
def up
change_column :users, :uuid, :string, default: 0, null: false
add_index :users, :uuid, unique: true
end
# 変更前の内容
def down
change_column :users, :uuid, :string, default: nil, null: true
remove_index :users, :uuid
end
end
upとdownを設定してrollbackできるように実装しています。
migrationをおこなうと、usersテーブルのuuidカラムに各オプションが設定されていることが確認できます。
migrationのバージョンをひとつ前に戻す
migrationのバージョンをひとつ前に戻したい場合、以下のコマンドを利用します。
$ bundle exec rails db:rollback
これでmigrationのバージョンがひとつ前に戻ります。
migrationファイルを作成するときは、ロールバックできるかどうかを意識して作成すると良いですね。
まとめ
本記事では、RailsのDBテーブル周りのコマンドを備忘録的にまとめてみました。
まだまだテーブル周りのコマンドはたくさんあるので、ちょこちょこ気付いたときに追記していこうと思います。
Railsユーザーの参考になれば幸いです。
Web開発のお仕事を募集しています
フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。
「Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。
ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。
LINKお問い合わせ
スポンサーリンク