更新日:
【Rails】 rails console(rails c)の便利な使い方とは?
consoleコマンドは、コマンドラインでRailsアプリケーションとやり取りすることが出来ます。サーバーのデータを変更する時やRailsアプリケーションに定義したメソッドを試す時に便利です。
Railsアプリケーションのコンソールに接続して、データベースのデータを追加したい場合を見ていきましょう。
次の画像は、users_app
のアプリケーションで利用してるデータベースの中身です。
usersテーブルにデータを追加するために、次の動画のようにrails console
を実行してコンソールを起動します。
そして、コンソール上でcreateメソッドを使ってUserモデルのインスタンスを生成しデータベースに保存すると、次の画像のようにusersテーブルにデータが追加されます。
このようにrails console
を実行して、Railsアプリケーションのコンソールに接続することによって、データの操作をコンソール上で行うことが出来ます。
consoleコマンドには、他にも便利な使い方が沢山あるので1つ1つ整理しながら学んでいきましょう。
consoleコマンドの使い方
この章では、コンソールの起動方法やオプション、コンソールで使えるメソッドについて解説します。画像や動画を使って解説しているので、コマンドの実行結果まで確認することが出来ます。
どんなことが出来るのか?
rails console
を実行すると、コンソールが起動します。このコンソールでRailsアプリケーションとやり取りすることが出来ます。
具体的には、Railsアプリケーションで作成中、もしくは作成したメソッドを試すことが出来たり、モデルを操作してデータベースにデータを反映させることが出来ます。
また、consoleコマンドのオプションや環境を指定して起動させれば、様々な状況に合わせてコンソールを使うことが出来ます。
コンソールを起動する
コンソールを起動するには、ターミナルでRailsアプリケーションのルートディレクトリに移動して、次のコマンドを実行します。
1
rails console
console
はc
というエイリアスが使えるので、次のようにrails c
で実行することも出来ます。
1
rails c
コンソールを終了するには、コンソールでexit
かquit
を実行します。
1
2
3
exit
#もしくは以下を実行する
quit
それでは、users_app
のコンソールを起動させて終了させてみます。
users_app
のルートディレクトリでrails console
を実行することで、コンソールを起動させることが出来ていますね。そして、コンソールの終了にはexit
またはquit
を実行しています。
オプションを使う
consoleコマンドには、次のようにオプションを指定することが出来ます。
今回は、オプションの中でもよく使う-sandbox
について解説します。
1
rails console [オプション]
-sandbox
-sandbox
を付けてコンソールを起動すると、終了時にコンソールで変更したデータを元に戻すことが出来ます。
1
2
rails console -sandbox
rails console -s #同上
上記のコマンドを実行すると、次の画像のようにrails c
を実行した場合と違って、in sandbox
が追加されます。
この状態で、次の画像のようにデータを新規に作成してもコンソールを終了(exit
)すれば、元に戻すことが出来ます。
usersテーブルを確認しても、山田太郎さんのデータは追加されていませんね。
このように-sandbox
は、コンソールを終了するとデータを元に戻すことができるので、データを変更せずにRubyのコードを試したい時に便利です。
環境を指定する
Railsには、以下の3つの環境が用意されています。
develop
- 【開発環境】アプリケーション開発を行う作業場所test
- 【テスト環境】作成した機能などをテストする場所production
- 【本番環境】完成したアプリケーションをユーザーが利用する場所
コンソールを起動する際には、次のように環境を指定することが出来ます。
1
rails console [環境]
例えば、Railsアプリケーションの本番環境でコンソールを起動したい場合は、次のようにproduction
を指定して実行します。
1
rails c production
次の画像のようにデフォルトでは開発環境でしたが、production
を指定すると本番環境でコンソールを起動を起動することが出来ます。
また、次のコードのようにenvメソッドで現在の環境を調べることが出来ます。
1
2
irb(main):001:0> Rails.env
=> "production"
Railsの環境を詳しく知りたい方は、「Railsの3つの環境と役割とは?」を参考にしてください。
Rails6以降の場合
Rails6以降の場合は、rails c [環境]
だと次のようにエラーが発生します。
1
2
3
rails c production
ERROR: "rails console" was called with arguments ["production"] (Thor::InvocationError)
Usage: "rails console [options]"
この場合は、次のいずれかのコマンドを実行するとコンソールを起動することができます。
1
2
3
4
RAILS_ENV=[環境] rails c
rails c --environment [環境]
#もしくは以下を実行する
rails c -e [環境]
例えば、本番環境でコンソールを起動する場合は、次のように指定します。
1
2
3
RAILS_ENV=production rails c
rails c --environment production
rails c -e production
Rails 6.0も含めて広い範囲を体系的に学びたいという方は、この参考書が良いでしょう。
appメソッドとhelperメソッド
コンソール上でappメソッドやhelperメソッドを使用すると、ヘルパーの取得や名前付きルーティングヘルパーで生成されるパスを調べたり、リクエストを投げることができます。
ルーティングヘルパーで生成されるパスを調べる
名前付きルーティングヘルパーで生成されるパスは、appメソッドを使って調べることができます。
1
2
3
4
irb(main):001:0> app.users_path
=> "/users"
irb(main):002:0> app.users_url
=> "http://localhost:3000/users"
上記のルーティングヘルパー(pathヘルパーやurlヘルパー)は、次のようにresourcesメソッドでルーティングを定義した場合に使うことができます。
1
2
3
Rails.application.routes.draw do
resources :users
end
ルーティングヘルパーの使い方については、「Prefixとは?」を参考にして下さい。
リクエストを投げる
appメソッドを使えば、コンソール上でリクエストを投げることができます。
1
2
irb(main):001:0> app.get "http://localhost:3000/users"
=> 200
上記では、ステータスコードの200を返していますね。これは、リクエストが成功し、正常なレスポンスが返ったという意味です。
レスポンスの中身は、次のコードを実行すると確認することができます。
1
2
3
4
5
irb(main):002:0> app.response.body
=> "<!DOCTYPE html>\n<html>\n <head>\n <title>UsersApp</title>\n <meta name=\"csrf-param\" content=\"authenticity_token\" />
\n<meta name=\"csrf-token\" content=\"55ssWbjmO964gtnliGifBT2kVQ8eKSjIBSDTORJxjUYgM/dhpXbwHhx2d9S9vpjYUmSK8//WxeSshYV/SBvJgA==\" />\n \n\n <link rel=\"stylesheet\" media=\"all\" href=\"/assets/application.debug-
ec6f5f383ea57e6f33bb1140831d2e69fd135e29f145864e7e897fe2790ea885.css\" />\n <script src=\"/packs/js/application-cd9baa997ab2a6e5febb.js\"></script>\n </head>\n\n <body>\n <p id=\"notice\"></p>\n\n<h1>Users</h1>\n\n<table>\n <thead>\n <tr>\n <th>Name</th>\n <th>Age</th>\n <th colspan=\"3\"></th>\n </tr>\n </thead>\n\n
<tbody>\n <tr>\n <td>田中ゆうこ</td>\n <td>18</td>\n <td><a href=\"/users/1\">Show</a></td>\n <td><a href=\"/users/1/edit\">Edit</a></td>
ヘルパーを呼び出す
helperメソッドを使えば、Railsアプリケーションのヘルパーを呼び出すことができます。
例えば、Railsに用意されているbutton_toをコンソール上で呼び出したい場合は、次のコードを実行します。
1
2
irb(main):001:0> helper.button_to 'ユーザー登録', app.new_user_path, method: :get
=> "<form class=\"button_to\" method=\"get\" action=\"/users/new\"><input type=\"submit\" value=\"ユーザー登録\" /></form>"
コンソール上で実行しているので、button_toに指定する名前付きルーティングヘルパーは、appメソッドを使ってapp.new_user_path
と指定します。
返り値は、ヘルパーのHTMLを返すのでヘルパーのメソッドがどんなHTMLを出力するのか知りたい時も便利ですね。
コンソールに変更点を反映させる
コンソール上でreload!
を実行すると、コンソールを再起動することなく変更点を反映させることができます。
1
irb(main):001:0> reload!
例えば、コンソールを起動した状態で次のようにクラスメソッドを追加したとします。
1
2
3
4
5
6
class User < ApplicationRecord
#クラスメソッドを追加
def self.say_hello
'hello!'
end
end
そして、上記で定義したsay_helloクラスメソッドを次のように元々起動していたコンソール上で呼び出した場合は、反映されていないので未定義のエラーが発生します。
1
2
3
4
irb(main):001:0> User.say_hello
Traceback (most recent call last):
1: from (irb):1
NoMethodError (undefined method `say_hello' for User (call 'User.connection' to establish a connection):Class)
この時コンソールに反映させる為に再起動が必要ですが、コードを変更するたびに再起動するのは億劫ですよね。
そこでreload!
を実行すれば、次のコードのように再起動することなく変更点を反映することができるので便利です。
1
2
3
4
5
irb(main):002:0> reload!
Reloading...
=> true
irb(main):003:0> User.say_hello
=> "hello!"
データベースを操作する
ActiveRecordのメソッドを使ってコンソール上でデータベースを操作する事ができます。データベースの中身をSQLを組み立てる事なく確認することができるので便利です。
例えば、次のコードのようにfindメソッドを使って引数に指定したidのレコードを取得できます。
1
2
3
irb(main):001:0> User.find(3)
SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1
=> #<User id: 3, name: "高橋なおき", age: 33, created_at: "2020-09-17 17:39:53", updated_at: "2020-09-17 17:39:53">
主なActiveRecordのメソッドは、次の通りです。
ActiveRecordのメソッド | 内容 | Pikawakaの記事 |
---|---|---|
allメソッド | 全てのレコードを返す | 記事を読む» |
findメソッド | 指定したidのレコードを返す | 記事を読む» |
find_byメソッド | 検索でヒットしたレコードの最初の一件だけを返す | 記事を読む» |
newメソッド | インスタンスを生成する | |
saveメソッド | インスタンスをデータベースに保存する | 記事を読む» |
createメソッド | インスタンス生成とデータベースに保存する | 記事を読む» |
updateメソッド | レコードの情報を更新する | 記事を読む» |
次の動画のように、コンソールで上記のcreateメソッドやupdateメソッドなどデータベースを変更するメソッドを試そうとすると、実際に反映されてしまうので注意して下さい。
データベースの内容を変更せずにメソッドを試したい場合は、-sandbox
のオプションでコンソールを起動させて下さい。
コンソールをirbからpryに変更した場合
Railsアプリケーションにgemのpry-railsをインストールすると、コンソールをirbからpryに変更することができます。
コンソールをpryに変更すると、表示が見やすくなるので可読性が上がったり、便利なコマンドやメソッドで効率よくデバックをすることができます。
表示が見やすくなる
pryをインストールする前は、次のようにusersテーブルからレコードを全て取得してもデータが分かりづらい状態でした。
しかし、次の動画のようにpryに変更することで、インデントや改行、カラーリングがされるので表示がとても見やすくなります。
便利な組み込みコマンドが使える
見た目が分かりやすくなるだけではなく、pryの便利な組み込みコマンドを使うことが出来ます。
便利なコマンドの1つにshow-models
があります。
show-models
は、現在のモデル全てを確認することができるコマンドです。
1
[1] pry(main)> show-models
他にも便利なコマンドやbinding.pryで効率よくデバックが出来ます。
pry-railsを使ってみたい方は、是非こちらの「Pryについて徹底解説!」を参考にしてみて下さい。
この記事のまとめ
- consoleコマンドは、コマンドラインでRailsアプリケーションとやり取りすることが出来る
- サーバーのデータを変更するときや定義したメソッドを試すときに便利!
-sandbox
を付けてコンソールを起動すれば、終了時にコンソールで変更したデータを元に戻すことが出来る