bin/rails generate
Railsのファイルを生成するコマンド。省略が可能でbin/rails g ...
でも同じ。
真逆のコマンドでdestroy
がある。こちらも省略が可能でbin/rails d ...
で同じ結果になる。
bin/rails g ...
を実行した後でg
をd
に変更しただけのコマンドを実行すれば何もしていないのと同じ状態になる。ただし、generate
コマンドは指定された内容でファイルを生成するだけなので、おかしな内容を指定してファイルが生成されるとdestroy
コマンドがパースエラーを起こすことがある。
Scaffold
bin/rails g scaffold モデル名 [カラム:型 …]
モデル名はuser_account
、User_Account
、UserAccount
、user_accounts
、User_Accounts
、UserAccounts
のいずれでも同じ結果になる(正確にはアンダースコアの有無でapp/assets/stylesheets/*.scss
のコメントに差異がある)。
カラム:型
はname:string
のように指定する。
例:bin/rails g scaffold user_account name:string birthday:date
bin/rails g scaffold ...
コマンドは、app/assets/stylesheets/*.scss
ファイルが作られる点を除いて、bin/rails g scaffold_controller ...
とbin/rails g model ...
を実行したのと同じ結果になる。
なので、基本的にはscaffold
は使わずにscaffold_controller
とmodel
を使えば良いと思う。
bin/rails g resource モデル名 [カラム:型 …]
bin/rails g resource UserAccount name:string birthday:date
を実行した場合、bin/rails g model UserAccount name:string birthday:date
とbin/rails g controller UserAccounts
(複数形注意)を実行して、config/routes.rb
にresources :user_accounts
した状態と同じになる。
Controller
bin/rails g scaffold_controller モデル名 [カラム:型 …]
RESTfulな形でControllerとViewを作成する。カラムを指定すると、ViewやController内のpermit
メソッドに指定したカラムが追加される。
bin/rails g controller コントローラー名 [アクション …]
RESTfulでない形でControllerとViewを作成する。
コントローラー名はUserAccounts
、user_accounts
、UserAccountsController
、user_accounts_controller
のいずれでも同じ結果になる(正確にはアンダースコアの有無でapp/assets/stylesheets/*.scss
のコメントに差異がある)。
ただし、user_account
やUserAccount
のように単数形で指定するとコントローラー名やViewのディレクトリも単数形になってネーミングルール違反になるので注意。
指定したアクションはGETメソッドのアクションとして追加されViewも作成される。GETメソッド以外のアクションは指定できない。
例として、bin/rails g controller UserAccounts index show
を実行したとするとconfig/routes.rb
は以下のような内容で生成される。
get 'user_accounts/index'
get 'user_accounts/show'
使い勝手はよくないので、scaffold_controller
を使うのが良いと思う。
Model
bin/rails g model モデル名 [カラム:型 …]
指定したモデル名とカラムでモデルを作成する。
モデル名はuser_account
、User_Account
、UserAccount
、user_accounts
、User_Accounts
、UserAccounts
のいずれでもUserAccount
モデルが作成される。
指定できる型などはbin/rails g model --help
を参照。
bin/rails g migration マイグレーション名 [カラム:型 …]
指定したマイグレーション名でマイグレーションファイルを作成する。
マイグレーション名は特殊なパターンとして以下の2つがある。
create_user_account
のようにcreate_テーブル名
をつけるとテーブル作成add_columns_to_user_account
のようにadd_任意文字列_to_テーブル名
とするとカラム追加
テーブル名は単数形でも複数形でもよい。この2つのパターンのときのみカラム:型
の指定が意味を持つ。
例1:bin/rails g migration create_user_account name:string birthday:date
を実行した場合
# db/migrate/タイムスタンプ_create_user_account.rb
class CreateUserAccount < ActiveRecord::Migration[6.1]
def change
create_table :user_accounts do |t|
t.string :name
t.date :birthday
t.timestamps
end
end
end
例2:bin/rails g migration add_name_birthday_columns_to_user_account name:string birthday:date
を実行した場合
# db/migrate/タイムスタンプ_add_name_birthday_columns_to_user_account.rb
class AddNameBirthdayColumnsToUserAccount < ActiveRecord::Migration[6.1]
def change
add_column :user_accounts, :name, :string
add_column :user_accounts, :birthday, :date
end
end
例3:bin/rails g migration user_account name:string birthday:date
を実行した場合
# db/migrate/タイムスタンプ_user_account.rb
class UserAccount < ActiveRecord::Migration[6.1]
def change
end
end
bin/rails g application_record
app/models/application_record.rb
を作成するだけのコマンド。ActiveRecord以外のORMを使っている場合、--orm
オプションを使うことで指定することができる。
bin/rails g active_record:application_record
bin/rails g application_record
に--orm
を指定しなかった時と同じ。
View
bin/rails g helper ヘルパー名
指定した名前でヘルパーを作成する。
ヘルパー名はスネークケースとキャメルケースに区別はなく、単数形と複数形はそのまま名前に適用される。
bin/rails g jbuilder コントローラ名 [カラム:型 …]
指定したコントローラーに以下の3つのjbuilderのビューを追加する。
index.json.jbuilder
show.json.jbuilder
_モデル名単数形.json.jbuilder
scaffold_controller
で作成されるjbuilderのビューと同じものが作られる。
bin/rails g assets NAME
指定した名前でassetsのJavaScriptファイルとStylesheetファイルを作成する。JavaScriptファイルは作成される条件があるのか作成されないことがある。
テスト
bin/rails g test_unit:*
minitestで各種テストの作成。
bin/rails g system_test システムテスト名
minitestでシステムテストが追加される。
bin/rails g integration_test コントローラ名
Request Specを作成する。bin/rails g rspec:request
と同じ。
bin/rails g rspec:request コントローラ名
Request Specを作成する。
bin/rails g rspec:integration コントローラ名
Request Specを作成する。bin/rails g rspec:request
と同じ。
bin/rails g rspec:scaffold コントローラ名
spec/requests
、spec/views
、spec/routing
のテストを追加する。
その他のコマンド
- rspec:channel
- rspec:controller
- rspec:feature
- rspec:generator
- rspec:helper
- rspec:install
- rspec:job
- rspec:mailbox
- rspec:mailer
- rspec:model
- rspec:system
- rspec:view
その他機能追加
bin/rails g channel チャンネル名
ActionCableのチャンネルを追加する。
bin/rails g job ジョブ名
ActiveJobのジョブを追加する。
bin/rails g mailer メーラ名 [メソッド …]
ActionMailerのメーラを追加する。
bin/rails g mailbox メールボックス名
ActionMailboxのメールボックスを追加する。
その他
bin/rails g benchmark ベンチマーク名 [ケース …]
ベンチマークをとるためのスクリプトを作成する。ベンチマーク名はスネークケースでもキャメルケースでも結果はスネークケースのファイル名になる。
例:bin/rails g benchmark benchmark_script 実装例1 実装例2
を実行した場合
# script/benchmarks/benchmark_script.rb
# frozen_string_literal: true
require_relative "../../config/environment"
# Any benchmarking setup goes here...
Benchmark.ips do |x|
x.report("実装例1") { }
x.report("実装例2") { }
x.compare!
end
x.report("実装例1") { }
のブロックに比較したいコードを書く。
実行方法はruby script/benchmarks/benchmark_script.rb
のように単にruby
コマンドにファイルを指定するだけで良い。以下のような結果になる。
Warming up --------------------------------------
実装例1 5.174k i/100ms
実装例2 5.416k i/100ms
Calculating -------------------------------------
実装例1 54.041k (± 3.6%) i/s - 274.222k in 5.081149s
実装例2 53.707k (± 4.0%) i/s - 270.800k in 5.050139s
Comparison:
実装例1: 54041.0 i/s
実装例2: 53706.8 i/s - same-ish: difference falls within error
benchmark-ips
というgemがデフォルトのベンチマークツールなので、細かい設定などはそちらのドキュメントを参照。
bin/rails g generator ジェネレータ名
bin/rails generate
(bin/rails g
)コマンドで使えるサブコマンドを追加する。
例えば、bin/rails g generator foo
を実行した場合、bin/rails g foo 名前
というコマンドが追加される。ジェネレータの作り方はRails ジェネレータとテンプレート入門 - Railsガイドを参照。
bin/rails g task タスク名
Rakeタスクを追加する。