©John Mair(Banisterfiend)2018
(作成者)
©Kyrylo Silin(Kyrylosilin)2018
(メンダー)
卒業生:
リンク:
PRYは、強力な内省機能を備えたランタイム開発者コンソールとIRBの代替品です。 Pryは、IRBの代替品以上のものになることを目指しています。これは、Ruby言語にRepl駆動型のプログラミングをもたらす試みです。
edit Class#method
)cd
、 ls
、および友人) gem 'pry' , '~> 0.15.0'
gem install pry
PRYはかなり柔軟であり、重要なユーザーのカスタマイズを可能にします。 readline
メソッドを備えたオブジェクトから読み取り、 puts
メソッドを持つオブジェクトに書き込むことは些細なことです。 PRYの他の多くの側面も構成可能であるため、カスタムシェルを実装するのに適した選択肢となっています。
PRYには実行可能なものが付属しているため、コマンドラインで呼び出すことができます。 pry
を入力するだけです。 $XDG_CONFIG_HOME/pry/
またはユーザーのホームディレクトリのpryrc
ファイルが存在する場合はロードされます。詳細については、 pry --help
コマンドラインでヘルプ。
PRYセッションのほぼすべての機能がコマンドとして実装されています。コマンドはメソッドではなく、その間に空白がないため、行の先頭から開始する必要があります。コマンドは柔軟な構文をサポートし、シェルコマンドと同じ方法で「オプション」を許可します。たとえば、次のPRYコマンドには、「PA」で始まるすべてのプライベートインスタンスメソッド(範囲)のリストが表示されます。
pry ( YARD :: Parser :: SourceParser ) : 5 > ls - Mp -- grep ^ pa
YARD :: Parser :: SourceParser #methods: parse parser_class parser_type parser_type= parser_type_for_filename
PRYを使用すると、 cd
コマンドを使用して、異なるスコープ(オブジェクト)に出入りすることができます。これにより、プログラムまたはライブラリのランタイムビューを探索できます。特定の範囲内で使用可能な変数とメソッドを表示するには、汎用性の高いLSコマンドを使用します。
ここでは、トップレベルでこじ開き、次にクラスをこじ開けてから、そのクラス内のインスタンス変数でこじ開けます。
pry ( main ) > class Hello
pry ( main ) * @x = 20
pry ( main ) * end
=> 20
pry ( main ) > cd Hello
pry ( Hello ) : 1 > ls - i
instance variables : @x
pry ( Hello ) : 1 > cd @x
pry ( 20 ) : 2 > self + 10
=> 30
pry ( 20 ) : 2 > cd ..
pry ( Hello ) : 1 > cd ..
pry ( main ) > cd ..
後の数字:
PRYプロンプトでは、ネスティングレベルを示します。ネストに関する詳細情報を表示するには、 nesting
コマンドを使用してください。例えば
pry ( "friend" ) : 3 > nesting
Nesting status :
0 . main ( Pry top level )
1 . Hello
2 . 100
3 . "friend"
=> nil
その後、 jump-to
コマンドを使用して、以前のネストレベルのいずれかに戻ることができます。
pry ( "friend" ) : 3 > jump - to 1
= > 100
pry ( Hello ) : 1 >
PRYは、実行中のプログラムの途中で呼び出すことができます。それは呼び出された時点でPryセッションを開き、その時点ですべてのプログラム状態を利用可能にします。 my_object.pry
構文を使用してbinding.pry
のオブジェクトに呼び出すことができます。 PRYセッションは、オブジェクトの範囲内(またはバインディング)内で開始されます。セッションが終了すると、プログラムはあなたが行った変更を続けます。
この機能は、デバッグ、開発者コンソールの実装、ホットパッチの適用などに使用できます。
コード:
# test.rb
require 'pry'
class A
def hello ( ) puts "hello world!" end
end
a = A . new
# start a REPL session
binding . pry
# program resumes here (after pry session)
puts "program resumes here."
PRYセッション:
pry ( main ) > a . hello
hello world!
=> nil
pry ( main ) > def a . goodbye
pry ( main ) * puts "goodbye cruel world!"
pry ( main ) * end
=> :goodbye
pry ( main ) > a . goodbye
goodbye cruel world!
=> nil
pry ( main ) > exit
program resumes here .
「。」で始まる入力の行。コマンドシェルに転送されます。これにより、ファイルシステムをナビゲートし、エディターをスポーンし、PRY内から直接GitとRakeを実行できます。
さらに、 shell-mode
コマンドを使用して、現在の作業ディレクトリをPRYプロンプトに組み込み、ファイル名の完了(この段階で制限されています)を作成できます。また、通常の#{}
文字列補数構文を使用して、Rubyコードをシェルに直接挿入することもできます。
以下のコードではshell-mode
に切り替えてpryrc
ファイルを編集します。その後、その内容物を猫にして、ファイルをリロードします。
pry ( main ) > shell - mode
pry main : /home/john / ruby / projects / pry $ . cd ~
pry main : /home/john $ . emacsclient . pryrc
pry main : /home/john $ . cat . pryrc
def hello_world
puts "hello world!"
end
pry main : /home/john $ load ".pryrc"
=> true
pry main : /home/john $ hello_world
hello world!
また、ルビーコードをシェルに挿入することもできます。以下の例では、現在のディレクトリのランダムファイルでシェルコマンドcat
を使用し、そのファイルの行の数をwc
を使用します。
pry main : /home/john $ . cat #{Dir['*.*'].sample} | wc -l
44
show-source
コマンドでメソッドソースコードを閲覧できます。ほぼすべてのルビーメソッド(およびいくつかのCメソッド、Pry-Doc GEM)は、ソースを表示することができます。ページよりも長いコードは、ポケットベル(以下など)を介して送信され、すべてのコードが適切に強調表示されます(Cコードも)。
show-source
コマンドは、典型的なRI Class#method
構文の2つの構文と、単に範囲内のメソッドの名前を受け入れます。オプションで、 -l
オプションを渡すと、出力にライン番号を含めるようにshow-source
。
次の例では、 Pry
クラスを入力し、「se」から始まるインスタンスメソッドをリストし、 set_last_result
メソッドのソースコードを表示します。
pry ( main ) > cd Pry
pry ( Pry ) : 1 > ls - M -- grep se
Pry #methods: raise_up raise_up! raise_up_common reset_eval_string select_prompt set_last_result
pry ( Pry ) : 1 > show - source set_last_result - l
From : /home/john / ruby / projects / pry / lib / pry / pry_instance . rb : 405 :
Owner : Pry
Visibility : public
Signature : set_last_result ( result , code = ?)
Number of lines : 6
405 : def set_last_result ( result , code = "" )
406 : @last_result_is_exception = false
407 : @output_ring << result
408 :
409 : self . last_result = result unless code =~ / A s * z /
410 : end
pry-doc
プラグインを使用して(Ruby Coreから)Cメソッドを表示できることに注意してください。また、 show-source
用の代替構文を披露します。
pry ( main ) > show - source Array #select
From : array . c in Ruby Core ( C Method ) :
Number of lines : 15
static VALUE
rb_ary_select ( VALUE ary )
{
VALUE result ;
long i ;
RETURN_ENUMERATOR ( ary , 0 , 0 ) ;
result = rb_ary_new2 ( RARRAY_LEN ( ary ) ) ;
for ( i = 0 ; i < RARRAY_LEN ( ary ) ; i ++ ) {
if ( RTEST ( rb_yield ( RARRAY_PTR ( ary ) [ i ] ) ) ) {
rb_ary_push ( result , rb_ary_elt ( ary , i ) ) ;
}
}
return result ;
}
PRYの1つのユースケースは、オブジェクトの内外でcd
を使用して表示して表示および呼び出しを行うことにより、実行時にプログラムを探索することです。探索の過程で、あなたが出くわした特定の方法のドキュメントを読むのに役立つかもしれません。 show-source
コマンドは、通常のri
構文の2つの構文と、現在範囲にあるすべての方法の名前を受け入れることをサポートしています。
PRYドキュメントシステムは、事前に生成されたrdoc
またはri
に依存せず、代わりにオンデマンドの方法の真上のコメントをつかみます。これにより、より迅速なドキュメンテーションの検索が行われ、PRYシステムがrdoc
によって取り上げられない方法のドキュメントを取得できます。 PRYはまた、RDOCフォーマットとヤード形式の両方を基本的に理解しており、文書を適切に強調表示しようとします。
それにもかかわらず、 ri
機能は非常に優れており、PRYのシステムよりも利点があり、クラスと方法のドキュメントの検索を可能にします。したがって、Pryはri
コマンドを介してri
と良好な統合を整えています。コマンドの構文はコマンドラインにあるとまったく同じです。そのため、文字列を引用する必要はありません。
この例では、 Gem
クラスを入力し、 try_activate
メソッドのドキュメントを表示します。
pry ( main ) > cd Gem
pry ( Gem ) : 1 > show - source try_activate - d
From : /Users/john / rbenv / versions / 2.7 . 1 / lib / ruby / 2.7 . 0 / rubygems . rb : 194 :
Owner : #<Class:Gem>
Visibility : public
Signature : try_activate ( path )
Number of lines : 28
Try to activate a gem containing path . Returns true if
activation succeeded or wasn 't needed because it was already
activated. Returns false if it can' t find the path in a gem .
def self . try_activate ( path )
# finds the _latest_ version... regardless of loaded specs and their deps
# if another gem had a requirement that would mean we shouldn't
# activate the latest version, then either it would already be activated
# or if it was ambiguous (and thus unresolved) the code in our custom
# require will try to activate the more specific version.
spec = Gem :: Specification . find_by_path path
pry ( Gem ) : 1 >
通常の方法でri
を使用することもできます。
pry ( main ) ri Array #each
----------------------------------------------------------- Array #each
array . each { | item | block } -> array
------------------------------------------------------------------------
Calls _block_ once for each element in _self_ , passing that element
as a parameter .
a = [ "a" , "b" , "c" ]
a . each { | x | print x , " -- " }
produces :
a -- b -- c --
edit Class#method
を使用するか、 edit my_method
、お気に入りのエディターで直接編集する方法を開くことができます。 Pryにはいくつかの異なる編集者に関する知識があり、メソッドが定義されている行でファイルを開こうとします。
Pry.editor
Accessorに割り当てて、エディターを使用するように設定できます。 Pry.editor
、デフォルトで$EDITOR
にデフォルトで、またはnano
バックアップデフォルトとして使用する失敗になります。編集されたファイルは、エディターを終了した後に自動的にリロードされます - リロードは--no-reload
オプションを編集してedit
ことで抑制できます
以下の例では、デフォルトのエディターを「emacsclient」に設定し、編集するためにPry#repl
メソッドを開きます。
pry ( main ) > Pry . editor = "emacsclient"
pry ( main ) > edit Pry #repl
他の多くのコマンドはPRYで利用できます。プロンプトで完全なリストタイプのhelp
表示するには。各コマンドの簡単な説明には、使用するための基本的な指示が提供されています。いくつかのコマンドには、 command_name --help
入力することでアクセスできるより広範なヘルプがあります。コマンドは通常、 --help
オプションが利用可能である場合、その説明で発言します。
Pryの-r
フラグを使用して、アプリの環境でPRYコンソールを実行できます。
pry -r ./config/environment
または、Rails Console( bin/rails console
)を起動してからpry
と入力します。
Pry-Rails GemをGemfileに追加することで、RailsコンソールとしてPryを使用することも可能です。これにより、Railsコンソールのヘルパーをロードし、有用なRails固有のコマンドを追加することに加えて、デフォルトのコンソールをPryに置き換えます。
pry-rails
現在維持されていないことに注意してください。
また、RailsとのPryの統合の詳細については、Wikiもご覧ください。
構文の強調表示は、PRYでデフォルトでオンになっています。色を変更したい場合は、Pry-Theme Gemをご覧ください。
toggle-color
コマンドを使用して、セッションでオンとオフを強調表示する構文を切り替えることができます。または、 pryrc
ファイルにラインPry.color = false
配置することで、永久にオフにすることができます。
問題、質問、またはバグレポートがある場合は、次のことをお気軽にお問い合わせください。
プロジェクトはMITライセンスを使用します。詳細については、license.mdを参照してください。
Pryは主にJohn Mair(Banisterfiend)の作品であり、貢献者の完全なリストについては、貢献者グラフを参照してください。