1.はじめに
railsでアプリを作成するときによく使用する(イメージがある)「rails g」コマンド。
今回はrails gコマンドについてまとめてみました。
2.使用環境
- mac.os バージョン10.15.6
- Ruby 2.6.6
- Rails 6.1.3.1
- psql (PostgreSQL) 12.6
3.rails gはどんな時に使う?
モデルやコントローラ、マイグレーションファイルなどを作成するとき。
rails generate [対象の雛形] [引数]
とコマンドを入力すると作成できる。
※generate:生成するという意味。generateはgに省略可能。
今回は投稿型アプリで使用するPostモデルを作成しました。
# string型のtitleとtext型のcontentの、2つのカラムを用意したPostモデルの作成
# rails g model [モデル名] [属性名:データ型 属性名:データ型 ...][オプション]
rails g model Post title:string content:text
3.1.モデルとは
データとデータに関わるビジネスロジック(コアなルール。アプリケーション特有の処理)をオブジェクトとして実装したもの。また、データベースの保存や読み込みも行う。
3.2.コントローラとは
ユーザーが操作するブラウザなどのクライアントからの入力(リクエスト)を受け、適切な出力(レスポンス)を作成するための制御を行う。必要に応じてモデルの利用やビューの呼び出しを行う。
3.3.マイグレーションファイルとは
Rubyで書かれたテーブルの設計図。
rails g model Post title:string content:text
を実行すると、2つのファイルが作成される。
①モデル
class Post < ApplicationRecord
end
②マイグレーションファイル
class CreatePosts < ActiveRecord::Migration[6.1]
def change
create_table :posts do |t|
t.string :title
t.text :content
# t.timestamps=>レコードが作成された時間(created_atカラム)と
# 更新された時間(updated_atカラム)を作成してくれる
t.timestamps
end
end
end
マイグレーションファイルは設計図
なので、この時点ではテーブルは作成されていない。
rails db:migrate
コマンドを入力することでマイグレーションファイルが実行され、
データベースにテーブルが作成される。
Postテーブル ※テーブル:エクセルの表にあたる
id | title | content | created_at | updated_at |
---|---|---|---|---|
db/schema.rb
で、現在のテーブル一覧を確認することができる。
3.4.db/schema.rbとは
現在のデータベースの構造を確認できる。schema.rbはマイグレーションを適用したり外したりすると自動的に出力される。
ActiveRecord::Schema.define(version: 年月日時) do
create_table "posts", force: :cascade do |t|
t.string "title"
t.text "content"
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
end
end
3.5.テーブルの作成はなぜ必要?
Railsのモデルクラスはデータベースのテーブルの定義を読み込んで動作するため。
3.6.マイグレーションをやり直したい時の対策
マイグレーションの実行は一方通行になっており、マイグレーションファイルを修正して再度rails db:migrate
しても更新されない。
- カラム名の追加・修正・削除をしたいとき:
rails g migration
コマンドでその指示を入れたマイグレーションファイルを作成する。 -
rails db:rollback (STEP=x)
(適用されているマイグレーションのバージョンからx個、マイグレーションする前の状態にする),rails db:migrate:down
(マイグレーションファイルのダウンメソッドを実行する)を活用する。
※rails db:migrate:status
を実行すると現在の状況が確認できる。
upになっているものはすでに実行済みで、rails db:rollback
やrails db:migrate:down
にすることでmigrateする前の状態に戻りstatusがdownに変更される。rails db:migrate
を行うと、再度upの状態に戻る。
hogehoge@hogenoMacBook-Air app名 % rails db:migrate:status
database: app名_development
Status Migration ID Migration Name
--------------------------------------------------
up 年月日時 Create posts
up 年月日時 Create ◯○s
up 年月日時 Create ◯○s
なお、master(main)ブランチやdevelopブランチにマージされた後、マイグレーションファイルを修正するのは他の開発者や本番環境に影響するため原則避ける。
4.調べてみて
コマンドを実行することでどのような影響を与えるか、より理解を深める必要があると感じた。
5.参考
1.書籍:大場寧子他, 現場で使えるRuby on Rails5速修実践ガイド, マイナビ出版, 2018.
2.web:Railsにおけるマイグレーションとは
3.web:【Rails】マイグレーションファイルを徹底解説!
6.最後に
記事の感想や意見、ご指摘等あれば伝えていただけるとありがたいです。
読んでいただき、ありがとうございました。