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.jbuildershow.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タスクを追加する。