Rubyist必携 pry-railsを使いこなせば幸せになれる
はじめに
エンジニアの@ryooo321です。
よろしくお願いします。
弊社では多くのプロジェクトでruby on railsを使っています。
ruby on railsで開発する上でrails consoleは欠かせない存在かと思います。
pry-railsを使うと、rails consoleをさらに高機能にできます。
今回は私の感じたpry-rails(と便利なgemいくつか)の便利利用法をいくつか紹介したいと思います。
※ 本記事はKyoto.rbでの発表内容をブログ向けにまとめなおしたものです。
下記ブログにpryの分かりやすい良記事がありまして、内容が重なる部分もありまして恐縮ですが、
ご存じない使い方が一つでもあれば幸いです。
Rubyistよ、irbを捨ててPryを使おう
Kyoto.rbについて
京都市周辺のRuby技術者が集まって刺激しあえる場を作っていこうとするコミュニティです。
毎週木曜日にMeetupを行っていますので、興味のある方はぜひご参加ください。
http://qwik.jp/kyotorb/
目次
1. installと起動
2. シェルコマンド
3. noecho;
4. シンタックス
5. gistにアップロード
6. オブジェクト調査
7. 自作のpryコマンドを追加
8. デバッグ
9. reload!
10. ルーティングやモデルを参照
11. 履歴が充実
12. ソースを参照
13. helpが充実
2. シェルコマンド
3. noecho;
4. シンタックス
5. gistにアップロード
6. オブジェクト調査
7. 自作のpryコマンドを追加
8. デバッグ
9. reload!
10. ルーティングやモデルを参照
11. 履歴が充実
12. ソースを参照
13. helpが充実
1. installと起動
インストール
gemで簡単にインストールできます。
# pry-railsはgemでinstallできます。 gem install pry-rails # railsプロジェクトのGemfileに下記を追記します。 gem 'pry-rails'
起動
Gemfileに追記されていれば、いつものrails console起動コマンドでpryが立ち上がります。
[補足]Gemfileに追記したくない場合
Gemfileに追記しなくても、下記コマンドで起動できます。
rails console
[補足]Gemfileに追記したくない場合
Gemfileに追記しなくても、下記コマンドで起動できます。
pry -r ./config/environment
2. シェルコマンド
lsはともかく、rakeやgitコマンドが打てるのはありがたいです。
gitなどの認証プロンプトも問題ありません。
ruby の変数も展開して使えます。
gitなどの認証プロンプトも問題ありません。
ruby の変数も展開して使えます。
.ls -la .bundle exec rake db:migrate .git commit -m ‘foobar’ # rubyの変数を使う yyyymmdd = Date.today.strftime('%Y%m%d') .touch tmp_#{yyyymmdd}
3. noecho;
irbで最終行の出力がechoされて必要なものが見づらくなることがあります。
pryならセミコロンをつけた行は結果が出力されないので、見やすくなります。
例えば、データのcreated_atを参照したいとします。
pryならセミコロンをつけた行は結果が出力されないので、見やすくなります。
例えば、データのcreated_atを参照したいとします。
# irbの場合 irb(main):001:0> items = Item.all irb(main):002:0> items.each do |item| irb(main):003:1* p item.created_at irb(main):004:1> end Wed, 17 Oct 2012 14:04:51 UTC +00:00 Wed, 17 Oct 2012 14:05:00 UTC +00:00 # ⬆⬆⬆見たい出力 # ⬇⬇⬇余計な出力 => [#- , #
- ]; # pryの場合 [1] pry(main)> items = Item.all; [2] pry(main)> items.each do |item| | p item.created_at | end; Wed, 17 Oct 2012 14:04:51 UTC +00:00 Wed, 17 Oct 2012 14:05:00 UTC +00:00 # ⬆⬆⬆見やすい!
4. シンタックス
5. gistにアップロード
ファイルや関数をgistにポストできます。
他のポストオプションはgist --helpで確認できます。
さらにgistのURLがクリップボードに入る気の利かせっぷりです。
他のポストオプションはgist --helpで確認できます。
さらにgistのURLがクリップボードに入る気の利かせっぷりです。
# gistにファイル内容をポストする場合 gist -f app/controllers/items_controller.rb Gist created at https://gist.github.com/38b0d0456e6816be9f3c and added to clipboard. # ※ Gemfileに「gem 'jist'」を追加し、 # pryコンソール上でコマンドをインストールする必要があります。 install-command gist
6. オブジェクト調査
オブジェクトにcdできて、lsでオブジェクトのメソッドや変数を確認できます。
[1] pry(main)> items = Item.all [2] pry(main)> cd items ⬆変数にcdできます。 ⬇次行が「pry(#)」になります。 [3] pry(# ):1> cd self.first [4] pry(# - ):2> ls --grep tax ⬆lsで関数を検索 ⬇Itemオブジェクトのメソッド・変数が表示されます。 Item#methods: tax price_with_tax
7. 自作のpryコマンドを追加
下記の関数でpryのコンソールで使えるコマンドを追加できます。
railsプロジェクトディレクトリ直下に.pryrcを作成すると起動ごとにロードされますので、そこにコマンド追加処理を記載すると自動でロードされます。
こちらのgistに便利なコマンドが4つありました。
https://gist.github.com/1297510 ※ pconsole.shはpry-railsを使っているなら不要です。
※ railsプロジェクトディレクトリ直下に.pryrcを作って、上記gistのpryrc.rbの内容を記述すれば捗ります。
いずれも便利でしたのでお奨めします。
my_command_set = Pry::CommandSet.new do command "コマンド名", "helpコマンドでの説明" do |引数| # 処理 end end Pry.config.commands.import my_command_set
railsプロジェクトディレクトリ直下に.pryrcを作成すると起動ごとにロードされますので、そこにコマンド追加処理を記載すると自動でロードされます。
こちらのgistに便利なコマンドが4つありました。
https://gist.github.com/1297510 ※ pconsole.shはpry-railsを使っているなら不要です。
※ railsプロジェクトディレクトリ直下に.pryrcを作って、上記gistのpryrc.rbの内容を記述すれば捗ります。
いずれも便利でしたのでお奨めします。
追加されるコマンド | 処理の概要 |
---|---|
copy(contents) | クリップボードにコピー |
clear | コンソールをクリアー |
sql(query) | sqlを実行 |
caller_method(depth) | 呼び出し元メソッドの情報を出力 |
8. デバッグ
pry-debuggerを使えばブレイクして変数の中身を書き換えたりステップ実行などが可能になります。
ブレイクポイントを打ったり条件停止なども可能です。
gemを追加
Gemfileに下記を追加すると使えるようになります。
gem 'pry-debugger'
使い方
9. reload!
pry-railsならreload!が使えます。
reload! Reloading... => true # 標準のpryでは全体をリロードする機能がありません。 [2] pry(main)> reload-method ItemsController#index ← reload-methodなら可能※ rails consoleを使っていた方は当たり前かと思われるかもしれませんが、pry-railsでも以前はデフォルトで使えない機能だったようです。
10. ルーティングやモデルを参照
show-routes
railsで定義したルーティングテーブルを参照できます。
show-routes items GET /items(.:format) items#index POST /items(.:format) items#create new_item GET /items/new(.:format) items#new edit_item GET /items/:id/edit(.:format) items#edit item GET /items/:id(.:format) items#show PUT /items/:id(.:format) items#update DELETE /items/:id(.:format) items#destroy # grepすることで絞り込みもできます。 show-routes --grep destroy
show-models
MySQLのテーブル定義を参照できます。
show-models Item id: integer name: string created_at: datetime updated_at: datetime ※ grepすることで一致した文字列が赤く表示されます。 show-models --grep created_at
show-middleware
railsで利用しているミドルウェアを参照できます。
show-middleware use ActionDispatch::Static use Rack::Lock use ActiveSupport::Cache::Strategy::LocalCache use Rack::Runtime use Rack::MethodOverride use ActionDispatch::RequestId use Rails::Rack::Logger use ActionDispatch::ShowExceptions
11. 履歴が充実
histコマンドが充実していて、再実行やgrepができます。
hist --help Usage: hist hist --head N hist --tail N hist --show START..END hist --grep PATTERN hist --clear hist --replay START..END hist --save [START..END] FILE
12. ソースを参照
find-methodでメソッドを検索
[1] pry(main)> find-method before_filter AbstractController::Callbacks::ClassMethods AbstractController::Callbacks::ClassMethods#before_filter AbstractController::Callbacks::ClassMethods#prepend_before_filter AbstractController::Callbacks::ClassMethods#skip_before_filter AbstractController::Callbacks::ClassMethods#append_before_filter
show-methodでソースを参照
※ show-sourceのエイリアスです。
[1] pry(main)> show-method 'hoge'.pluralize From: path to gem/activesupport-3.2.8/lib/active_support/core_ext/string/inflections.rb @ line 25: Number of lines: 7 Owner: String Visibility: public def pluralize(count = nil) if count == 1 self else ActiveSupport::Inflector.pluralize(self) end end
edit-methodでエディタを開く
下記コマンドでエディタが開きます。
vimやSublimeText2やemacsで開くこともできます。(後述)
下記コマンドでエディタを変更できます。(永続化するには.pryrcに記述)
vimやSublimeText2やemacsで開くこともできます。(後述)
edit-method 'hoge'.pluralize
下記コマンドでエディタを変更できます。(永続化するには.pryrcに記述)
# vimの場合 Pry.config.editor="vim" # 流行のSublime Text 2 @macなら下記でいけます。 Pry.config.editor="/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl" # コマンドラインから起動するシムリンクを貼れば下記でいけます Pry.config.editor="subl" # 起動シムリンク ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl
gemのドキュメントを参照
※ gem 'pry-doc'が必要です。
show-doc ActiveRecord::Base
ri
rdocドキュメントを読めます。
※ gem installで-no-riしている場合はもちろん見れません。
※ gem installで-no-riしている場合はもちろん見れません。
[1] pry(main)> ri Hash#delete_if Hash#delete_if (from ruby core) ------------------------------------------------------------------------------ hsh.delete_if {| key, value | block } -> hsh hsh.delete_if -> an_enumerator ------------------------------------------------------------------------------ Deletes every key-value pair from hsh for which block evaluates to true. If no block is given, an enumerator is returned instead. h = { "a" => 100, "b" => 200, "c" => 300 } h.delete_if {|key, value| key >= "b" } #=> {"a"=>100}
13. helpが充実
helpとタイプすると、pryのメソッドを確認できます。
さらに、pryのメソッドに--helpをつけることでメソッドのオプションを確認できます。
さらに、pryのメソッドに--helpをつけることでメソッドのオプションを確認できます。
14. 関連情報
一緒に働きたい方、絶賛 募集中
京都で開発してみたいというエンジニアの皆さん、ご応募お待ちしています!
技術力を伸ばしたい学生さん、アルバイトも可能なのでご応募お待ちしています!
大阪、滋賀、神戸から通勤実績があります