Ruby
RubyOnRails

Railsコマンドまとめ(基本~応用)

前書き

Rails5からrakeコマンドからrailsコマンドに移り変わりました。そこで、自分用のメモとしてRailsコマンドをまとめました。他の人にも参考になれば嬉しいです。

コントローラー編

コントローラーを作るコマンド

ここではTopsControllerを作ると仮定します。

$ rails g controller tops

結果

  create  app/controllers/tops_controller.rb
  invoke  erb
  create    app/views/tops
  invoke  test_unit
  create    test/controllers/tops_controller_test.rb
  invoke  helper
  create    app/helpers/tops_helper.rb
  invoke    test_unit
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/tops.coffee
  invoke    scss
  create      app/assets/stylesheets/tops.css.scss
  • app/controllers/tops_controller.rb
    • TopsControllerクラス本体
  • test/controllers/tops_controller_test.rb
    • TopsController固有のテストスクリプト
  • test/controllers/tops_controller_test.rb
    • TopsController固有のビューヘルパー
  • app/assets/javascripts/tops.coffee
    • TopsController固有のCoffeeScript
  • app/assets/stylesheets/tops.css.scss
    • TopsController固有のSCSS

モデル編

モデルを作るコマンド

ここではTopモデルを作り、そのTopモデルに関するDBのテーブルのカラムがカラム名: name, 型: text であると仮定します。

$ rails g model top name:text

結果

  invoke  active_record
  create    db/migrate/20171113101911_create_tops.rb
  create    app/models/top.rb
  invoke    test_unit
  create      test/models/top_test.rb
  create      test/fixtures/tops.yml
  • db/migrate/20171113101911_create_tops.rb
    • Topモデル固有のマイグレーションファイル
  • app/models/top.rb
    • モデルクラス(topsテーブルを操作するためのモデル本体)
  • test/models/top_test.rb
    • モデルクラスをテストするためのスクリプト
  • test/fixtures/tops.yml
    • テストデータを投入するためのフィクスチャファイル

カラムを追加するMigrationファイルを作成

$ rails g migration AddContentToTop content:text

結果

invoke  active_record
create    db/migrate/20171113102729_add_content_to_top.rb
db/migrate/20171113102325_add_top_to_content.rb
class AddContentToTop < ActiveRecord::Migration
  def change
    add_column :tops, :content, :text
  end
end

このように、topsテーブルにtext型のcontentカラムを追加するマイグレーションファイルが作られます。

カラムを削除するMigrationファイルを作成

$ rails g migration RemoveContentFromTop content:text

結果

invoke  active_record
      create    db/migrate/20171113102930_remove_content_from_top.rb
db/migrate/20171113102930_remove_content_from_top.rb
class RemoveContentFromTop < ActiveRecord::Migration
  def change
    remove_column :tops, :content, :text
  end
end

このように、topsテーブルからtext型のcontentカラムを削除するマイグレーションファイルが作られます。

データベース編

ここでは、以下のようなデータベースを扱うと仮定します。

database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  host: localhost

development:
  <<: *default
  database: Line_development

test:
  <<: *default
  database: Line_test

データベースに接続

$ rails dbconsole

Railsアプリが接続しているデータベースに接続します。この場合だと、上記のmysql2にユーザーがrootで接続します。

データベースの作成

$ rails db:create

結果

Created database 'Line_development'
Created database 'Line_test'

2つのデータベースが作られます

データベースの削除

$ rails db:drop
Dropped database 'Line_development'
Dropped database 'Line_test'

2つのデータベースが削除されます

データベースのテーブルレイアウトを作成

$ rails db:migrate (VERSION=20171113101911)

db/migrate/以下のマイグレーションファイルを参照し、データベースのレイアウトが作られます。VERSIONオプションを用いると、特定のマイグレーションファイルのみを実行します。オプションがなければ全てのマイグレーションファイルが実行されます。

データベースをリセットする

$ rails db:migrate:reset

上記の db:drop, db:create, db:migrateの一連の流れを実行します。

データベースのテーブルレイアウトを作成したものを取り消し

$ rails db:rollback (STEP=3)

実行されたマイグレーションファイルをdb/schema.rbを参照して取り消します。STEPオプションを用いると、取り消すマイグレーションファイルの数を指定することができます。上の例だと、最新の状態から3つのマイグレーションファイルを取り消します。オプションがなければ最新の状態のマイグレーションファイルだけ(1つだけ)が取り消されます。

データベースのレイアウトを取り消してから再び作成

$ rails db:rollback:redo (STEP=3)

上記のrails db:rollbackとrails db:migrateをセットにしたものです。マイグレーションファイルを一旦取り消してから再び実行します(redo)。STEPオプションはrails db:rollbackと同様です。

データベースにダミーデータを追加する1 (db/seeds.rbを利用)

$ rails db:seed

db/seeds.rbファイルを実行します。

db/seeds.rb
Top.create(content: "A")

この場合だと、topsテーブルにcontentカラムの値がAのレコードが追加されます。(id, created_at, updated_atは自動的に挿入されます。)

データベースにダミーデータを追加する2 (test/fixtures/tops.ymlを利用)

$ rails db:fixtures:load (FIXTURES=tops)

test/fixtures/tops.ymlファイルを実行します。FIXTURESオプションを利用すると、実行するファイルを指定できます。オプションがなければ、test/fixtures/以下のファイル全てが実行されます。

データベースを参照してschema.rbを生成する

rails db:schema:dump

現在のデータベースを参照して、schema.rbファイルが更新されます。

schema.rbを参照してSQLのスクリプト文を生成する

rails db:structure:dump

schema.rbファイルに基づくstructure.sqlファイルが生成されます。

class CreateGroups < ActiveRecord::Migration[5.1]
  def change
    create_table :groups do |t|
      t.string :name

      t.timestamps
    end
  end
end

上記のようなマイグレーションファイルを実行してからrails db:structure:dumpコマンドを実行すると

structure.sql
DROP TABLE IF EXISTS `groups`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `groups` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

このような、マイグレーションファイルを満たすSQLスクリプトファイルが生成されます。

その他の便利なコマンド

コンソールを実行

$ rails console

コンソールを実行できます。Active::Recordを使ってデータベースにレコードを追加するときによく使いますね!

キャッシュの削除

$ rails tmp:create:clear

/tmp/cache/ディレクトリ以下に生成されたキャッシュを削除します

秘密トークンの設定

$ rails secret

結果

c3bcedd29a4c60898047e2d6b347c4f0e45a3fb25786bf56385bae50a7fd5fa03fecb25f5c3a01a818985a226dc1f625facfa79de0f00604b4af1b32d1b903f9

このように、秘密トークンを生成することができます。

ルーティングの確認

$ rails routes

ルーティングの一覧を確認することができます。

アセットをコンパイル

$ rails assets:precompile (RAILS_ENV=production)

アセットをコンパイルすることができます。これで本番環境で表示させる準備ができます。

アプリやActive Recordで利用できるタイムゾーンの一覧を確認

$ rails time:zones:all

結果

* UTC -11:00 *
American Samoa
International Date Line West
Midway Island

...
...
...

* UTC +09:00 *
Osaka
Sapporo
Seoul
Tokyo
Yakutsk

* UTC +09:30 *
Adelaide
Darwin

...
...
...

このように、タイムゾーンの一覧を確認することができます。

あとがき

調べてみると知らなかったコマンドやオプションがたくさんありました。少しでも役に立ったという方は是非
いいね
お願いします。