更新情報

初めまして。トランスネットの泉です。Rails技術者認定試験のベータ試験で、Rails技術者認定試験運営委員会の吉政さんと面識ができ、そのご縁で、このコラムを書くことになりました。
このコラムは毎月1本のペースで、学習し始めた方がつまずきやすいポイントや、Ruby on Railsでの開発がより楽しくなるような技術を、徒然に書いていきたいと思います。

さ て、第一回目は「rails console」です。rails consoleは、Railsアプリケーションを対話的に操作するための機能です。rails consoleを使わなくともRailsアプリケーションを作ることはできるため、この機能を知らない方も結構いらっしゃるようです。普段は ActiveRecordにお任せなのに、DBレコードの確認をするときだけは四苦八苦してSQLを組み立てたりしていませんか?
あるいは、Modelのメソッドを試しに実行してみたいけど、簡単な方法がわからない……
それでは余りに勿体ない!ということで、rails consoleについてご紹介します。

rails console自体はRails本体に組み込まれている機能ですので、皆さんのRailsアプリケーションですぐに試すことができます。また、お気軽に実験していただけるようサンプルアプリケーションをGitHubに用意しましたので、是非ご利用ください。
https://github.com/dev-tni/traveler/

まずは起動

それでは早速起動してみましょう。普段通りのterminalでRailsアプリケーションのルート階層に移動した後、次のコマンドを実行するだけです。

$ bundle exec rails console

(サンプルアプリケーションでは、tag”plain_console”をcheckoutした状態で実行してください)
serverを起動するときは”rails server”、consoleを起動するときは”rails console”。
bundlerを使われていることがほとんどだと思いますが、うまくいかない場合は皆さんの環境に合わせて読み替えてください。

consoleも省略形”c”が用意されていますので、次のコマンドでも起動できます。

$ bundle exec rails c

rails consoleを起動すると、お馴染みのirbプロンプトが表示されます。

001

普段Railsアプリケーションのソースコードに書いているようなことを、対話的に実行することができます。

002

参照だけではなく、保存することもできます。

003

Railsアプリケーションそのものの操作ですので、Modelの保存時にはきちんとValidationが実施されます。
整合性の取れないおかしなデータをデータベースに入れてしまうことも防げます。

004

もっと使いやすく

ところで、Rubyの対話的インタフェースといえばpryが人気です。
折角ですので、rails consoleでもpryを使いましょう。
また、インスタンスの情報も読みづらいため、色付と整形をおこなう”awesome_print”もご紹介します。

Gemfileに次の2つのGemを追加し、bundle installしてください。

gem pry-rails
gem awesome_print
view rawGemfile hosted with ❤ by GitHub

awesome_printを有効にするために、以下のコードをRailsアプリケーションのルートディレクトリに”.pryrc”ファイルとして保存してください。

if defined?(AwesomePrint)
AwesomePrint.pry!
end
view raw.pryrc hosted with ❤ by GitHub

(サンプルアプリケーションでは、ここまで適用した状態で”pry”tagを設定してあります)

pryを利用する場合も、先程と全く同じコマンドで起動します。

$ bundle exec rails c

005

プロンプトがirbからpryになりました。

先程と同様の処理を実施してみましょう。

006

並べてみます。

007

実行している処理は全く同じですが、出力結果の違いは一目瞭然です。

pryとawesome_printで見違えるrails console、いかがでしょうか。
もちろん、見た目だけではなくpryの機能を使うことができますので色々とお試しください。

便利なオプション

rails consoleにはいくつかのオプションがあります。

環境を指定して起動

起動コマンドに続けて、環境を指定します。

$ bundle exec rails console production

008

consoleの起動時には、このようにどの環境で起動しているか表示されます。
まずはここを確認し、一息ついてから作業をするように習慣づけをおすすめします 🙂

sandbox

consoleの終了時に、consoleでの操作が全てロールバックされます。
ただし、トランザクションが効かないような処理(DDLの発行など)を実行するとロールバックされませんのでご注意ください。

起動コマンドに続けて、オプション –sandbox を指定します。

$ bundle exec rails c –sandbox

009

sandbox状態で起動していること、終了時に全ての変更がロールバックされる旨が表示されます。
この状態でモデルの delete_all メソッドを実行して、consoleを終了してみます。

010

sandboxの挙動を確認できましたでしょうか。

なお、環境の指定もできます。
うっかり間違えて破壊的メソッドを実行しても元に戻るので、本番環境でも安心して参照作業を実施できます。

$ bundle exec rails c production –sandbox

011

まとめ

Railsアプリケーションを対話的に操作するための機能、rails consoleをご紹介しました。
Gemを追加する際、一般的にはgroup: :developmentを指定してdevelopment環境のみに適用してしまうことも多いようです。
しかし、本番環境でこそ操作性と視認性が大事ではないでしょうか。
sandboxもありますし、是非本番環境でも活用していただければと思います。

それでは今日はこの辺で。次回をお楽しみに♪