34
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rails console(rails c) の便利な使い方(irb,pry)

Last updated at Posted at 2018-09-28

最近ruby on Railsで開発をしていてrails cをよく使い、とても便利だと思ったのでまとめておきます。使い方を網羅的にではなく自分が使ってて便利だったと思ったことを書きます。

index

#####1. rubyをインタラクティブに実行する
#####2. pry-railsを使ってみる
#####3. binding-pryを使ってみる

1. rubyをインタラクティブに実行する

これはrails cじゃなくてもrubyをPCに入れていればirbを使うことによって実行することができます。もちろん下のように単純な計算も実行できます。


irb(main):022:0> a = 3
=> 3
irb(main):023:0> b = 5
=> 5
irb(main):024:0> a + b
=> 8

railsで便利なのは以下のようにリテラルのクラスだったり、親クラスだったり、メソッドだったりをみることができることである。rubyのオブジェクト指向のきれいさを改めて実感することができる。また、テーブルのレコードのクラス名や

以下はリテラルのクラスを確認する例で.classというメソッドを使っている。


irb(main):001:0> "aiueo".class
=> String
irb(main):002:0> 1.class
=> Fixnum
irb(main):003:0> {}.class
=> Hash
irb(main):004:0> :aiueo.class
=> Symbol
irb(main):005:0> [].class
=> Array

また.superclassというメソッドを使って親クラス(継承元クラス)を調べることができます。下の画像より、文字列であるStringクラスの親クラスはObjectクラスでありその親クラスはBasicObjectクラスであることが分かります。また、BasicObjectクラスの親クラスはnilであることから、BasicObjectクラスが根本のクラスであることが分かります。またすべてのクラスの元をたどっていくとBasicObjectクラスにたどり着きます。

irb(main):007:0> String.superclass
=> Object
irb(main):008:0> String.superclass.superclass
=> BasicObject
irb(main):009:0> String.superclass.superclass.superclass
=> nil

rails cではレコードを作成することができます。まだフォームは作っていないが、データを1件くらい入れて確かめたいときに便利です。

[1] irb(main)> book = Book.new
=> #<Book:0x00007f6688ab2278 id: nil, title: nil, body: nil, created_at: nil, updated_at: nil>
[2] irb(main)> book.title = "aa"
=> "aa"
[3] irb(main)> book.body = "bb"
=> "bb"
[4] irb(main)> book.save
   (0.1ms)  begin transaction
  Book Create (4.9ms)  INSERT INTO "books" ("title", "body", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["title", "aa"], ["body", "bb"], ["created_at", "2018-09-28 13:03:06.406855"], ["updated_at", "2018-09-28 13:03:06.406855"]]
   (3.2ms)  commit transaction
=> true

以下のように一行で書くこともできます。

[1] irb(main)> Book.create(title: "aa",body: "bb")
   (0.1ms)  begin transaction
  Book Create (8.3ms)  INSERT INTO "books" ("title", "body", "created_at", "updated_at") VALUES (?, ?, ?, ?)  [["title", "aa"], ["body", "bb"], ["created_at", "2018-09-28 13:05:21.899677"], ["updated_at", "2018-09-28 13:05:21.899677"]]
   (4.2ms)  commit transaction
=> #<Book:0x00007f668885ee18 id: 2, title: "aa", body: "bb", created_at: Fri, 28 Sep 2018 13:05:21 UTC +00:00, updated_at: Fri, 28 Sep 2018 13:05:21 UTC +00:00>

##2. pry-railsを使ってみる
このときにpry-byebugも一緒に入れるとbinding.pryを使うときに使いやすいです。

Gemfile
gem "pry-rails"
gem "pry-byebug"

とGemfileに書いて、bundle installを行うとrails cを行ったときに出てくるのが、irbではなくてpryになる。ここで使えるコマンドがshow-modelsとshow-routesです。そうすることにより、ルーティングとテーブルを見ることが出来ます。

[1] pry(main)> show-models
ApplicationRecord
  Table doesn't exist
Book
  id: integer
  title: string
  body: string
  created_at: datetime
  updated_at: datetime
Group
  id: integer
  group_name: string
  created_at: datetime
  updated_at: datetime
  has_many :members

show-modelsではアソシエーションが読み込まれているかも表示されます。また、show-routesはrails routesよりも早く表示させられるらしいです。

[1] pry(main)> show-routes
                   Prefix Verb   URI Pattern                                                                              Controller#Action
                new1_book GET    /books/new1(.:format)                                                                    books#new1
              create_book POST   /books(.:format)                                                                         books#create1
                     root GET    /                                                                                        books#index
                   groups GET    /groups(.:format)                                                                        groups#index
                          POST   /groups(.:format)                                                                        groups#create
                new_group GET    /groups/new(.:format)                                                                    groups#new
               edit_group GET    /groups/:id/edit(.:format)                                                               groups#edit
                    group GET    /groups/:id(.:format)                                                                    groups#show
                          PATCH  /groups/:id(.:format)                                                                    groups#update
                          PUT    /groups/:id(.:format)                                                                    groups#update
                          DELETE /groups/:id(.:format)                                                                    groups#destroy
                    posts GET    /posts(.:format)                                                                         posts#index
                          POST   /posts(.:format)                                                                         posts#create
                 new_post GET    /posts/new(.:format)                                                                     posts#new
                edit_post GET    /posts/:id/edit(.:format)                                                                posts#edit
                     post GET    /posts/:id(.:format)                                                                     posts#show
                          PATCH  /posts/:id(.:format)                                                                     posts#update
                          PUT    /posts/:id(.:format)                                                                     posts#update
                          DELETE /posts/:id(.:format)                                                                     posts#destroy
                    books GET    /books(.:format)                                                                         books#index
                          POST   /books(.:format)                                                                         books#create
                 new_book GET    /books/new(.:format)                                                                     books#new
                edit_book GET    /books/:id/edit(.:format)                                                                books#edit
                     book GET    /books/:id(.:format)                                                                     books#show
                          PATCH  /books/:id(.:format)                                                                     books#update
                          PUT    /books/:id(.:format)                                                                     books#update
                          DELETE /books/:id(.:format)                                                                     books#destroy

##3. binding.pryを使ってみる
binding.pryはrailsで開発する上で必須であるであろうデバッグツールです。コントローラーの途中で実行を止めることができ、どの変数にどんな値が入っているか確認することが出来ます。また、gem "pry-byebug"により、止めた位置から一行ずつ実行することが出来ます。そのため、どのように実行されているかが分かりrailsへの理解も深まります。

下のコードはあるレコードを作るときにどのような流れで作られているかを示している物です。

    28: def create2
    29: 	binding.pry
 => 30: 	book = Book.new(book_params)
    31: 	book.save
    32: 	redirect_to books_path
    33: end

[1] pry(#<BooksController>)> book_params
=> <ActionController::Parameters {"title"=>"ddd"} permitted: true>
[2] pry(#<BooksController>)> next

From: /vagrant/bookers/app/controllers/books_controller.rb @ line 31 BooksController#create2:

    28: def create2
    29: 	binding.pry
    30: 	book = Book.new(book_params)
 => 31: 	book.save
    32: 	redirect_to books_path
    33: end

[2] pry(#<BooksController>)> book
=> #<Book:0x00007f0c74ce3a10 id: nil, title: "ddd", body: nil, created_at: nil, updated_at: nil>
[3] pry(#<BooksController>)> next
   (0.4ms)  begin transaction
   app/controllers/books_controller.rb:31
  Book Create (5.8ms)  INSERT INTO "books" ("title", "created_at", "updated_at") VALUES (?, ?, ?)  [["title", "ddd"], ["created_at", "2018-09-28 13:40:30.163883"], ["updated_at", "2018-09-28 13:40:30.163883"]]
   app/controllers/books_controller.rb:31
   (4.4ms)  commit transaction
   app/controllers/books_controller.rb:31

From: /vagrant/bookers/app/controllers/books_controller.rb @ line 32 BooksController#create2:

    28: def create2
    29: 	binding.pry
    30: 	book = Book.new(book_params)
    31: 	book.save
 => 32: 	redirect_to books_path
    33: end

こんな感じでrails cを使ってみてください。

34
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?