vdeep

*

vdeepはプログラミング、IT、Web技術、ライフハックの事などなどを管理人okutaniがつぶやくブログです

【Rails】データベーステーブル周りのgenerateコマンドまとめ

      2018/05/31

LINEで送る
Pocket


こんにちは、okutani(@okutani_t)です。本記事では、自分の備忘録用にRuby on Railsで使えるテーブル周りのコマンドをまとめています。

なお、本記事でのコマンドはbundlerで導入したrailsコマンドを利用するため、「$ bundle exec rails」コマンドを利用しています。グローバルに導入したrailsコマンドを利用する場合は「bundle exec」を削除して読み進めてください。

Railsの導入などは以下の記事を参考にしてください。

MacにRubyとRuby on Railsを導入する方法
こんにちは、okutani(@okutani_t)です。本記事では「MacにRubyとRuby on Ra...
2017-07-14 01:07
はてブ
CentOS7にRuby on Railsを導入する方法
こんにちは、okutani(@okutani_t)です。本記事ではCentOS7にRuby on Rail...
2016-07-09 17:42
はてブ

今回の動作環境は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ユーザーの参考になれば幸いです。

LINEで送る
Pocket

okutani (okutani_t) のヒトコト
Railsのコマンドはとても便利ですが覚えるのが大変ですね。いつもメモ書きを見ながら作業してたので備忘録でまとめてみました。

 - Ruby on Rails

スポンサーリンク

PC用AdSense

PC用AdSense

  こちらもどうぞ

vdeepのトップページへ戻る画像です。風船の形をした島を女の子が掴んでいます。