pry_logo(1)

REPL–Read、Eval、Print、Loopは、言語内の式を評価するためのプログラミング言語の対話型シェルです。 REPLsは、言語、構文、Apiを学ぶのに最適な方法です。

ほとんどのプログラミング言語は、独自のREPLまたは同じ目的のために書かれたコミュニティ構築ツールを持っています。 Rubyでは、IRB–Interactive Ruby Shellを使用すると、数秒でRubyをプレイし、その機能を試し始めることができます。IRBはRubyにバンドルされており、コマンドラインからコマンドirbを使用して起動できます。 これは、コマンド履歴、行編集、およびその中からRubyプログラムを実行することを提供します。 しかし、今日はIRBについて話すつもりはありません。 代わりに、私はpryと呼ばれる代替案と、それがテーブルにもたらすものに焦点を当てたいと思います。 私たちは、Pryが今日詰め込まれているいくつかの気の利いた機能が表示されます。

Installation

明らかに、pryをいじり始める前に、それをインストールする必要があります。 PryはRuby gemなので、それをインストールすることはRuby gemをインストールすることと同じです。 Rubyコアのドキュメントにアクセスするためにpry-docを追加しました。 Pryを開始するには、gemがインストールされた後にpryと入力するだけです。また、アプリケーションのgemfileにgem "pry"を追加することで、アプリケーションの依存関係の一部にすることもできます。 アプリケーション内からpryをインストールすると、独自の利点があります。 実際には、RailsコンソールをPryに置き換えるpry-railsgemがあります。今日はRails gemには触れませんが、私はPryの最高の機能のいくつかに焦点を当て、あなた自身でもっと探索できるようにします。

ドキュメントの探索&Source

Pryで利用可能な最も便利な機能の一つは、シェル内からドキュメントとソースコードを探索する機能です。 Pryは、実行時にソースコードから取得することで、それを可能にします。 ドキュメントを表示するコマンドはshow-docshow-docはriとYARDのドキュメントで簡単に動作し、構文の強調表示と書式設定もサポートします。 それでは、それで遊んでみましょう。

pryコンソールでメソッド名の後にshow-docと入力すると、メソッドのドキュメントがコンソールに直接返されます。

pry(main)> show-doc Array#mapFrom: array.c (C Method):Owner: ArrayVisibility: publicSignature: map()Number of lines: 12Invokes the given block once for each element of self.Creates a new array containing the values returned by the block.See also Enumerable#collect.If no block is given, an Enumerator is returned instead. a = a.collect { |x| x + "!" } #=> a.map.with_index { |x, i| x * i } #=> a #=> 

結果は一目瞭然で、ドキュメントのソース、署名、行数、提供されているメソッドの説明が返されます。 私はMRIを使用しているので、これはCの方法であることに気付くでしょう。 コアなPryコマンドは、JRubyやRubiniusを含むインタプリタのいずれかで動作することを知って幸せになるでしょう。したがって、このメソッドは言語コアの一部であり、結果から収集できるようにCで記述されています。 このメソッドのソースをpryの内部から直接見ることができます。 入力するだけshow-sourceその後にメソッド名を入力します。

pry(main)> show-source Array#mapFrom: array.c (C Method):Owner: ArrayVisibility: publicNumber of lines: 13static VALUErb_ary_collect(VALUE ary){ long i; VALUE collect; RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length); collect = rb_ary_new2(RARRAY_LEN(ary)); for (i = 0; i < RARRAY_LEN(ary); i++) { rb_ary_push(collect, rb_yield(RARRAY_AREF(ary, i))); } return collect;}

そこにあります。 のソースコードArray#mapshow-methodshow-sourceを使用できます。 あなたが使用してきたいくつかの方法を試してみてください。

フック

今日見ている次の機能はフックです。 フックは、Pryのイベントに関連付けられている呼び出し可能なメソッドに過ぎません。 Pryでイベントが発生するたびに、それに関連付けられたフックが実行されます。 Pryには、:before_session:before_evalなど、”フック”できるイベントがすでにいくつかあります。 これらの既存のイベントのいずれかのフックを見て構築してみましょう。

 pry(main)> Pry.hooks.add_hook(:after_read, "uphook") do |text, pry| pry(main)* puts text.upcase pry(main)* end

ここでは、各ステートメントがシェルによって読み取られ、文字列を出力して大文字に変換した後に実行されるフックを作成しています。 これをテストするには、フックをロードするために新しいPryセッションを開始する必要があります。

 pry(main)> Pry.start# New Session is started here pry(main)> "abc""ABC"=> "abc"

ご覧のように、入力された文字列 これはフックの単純なユースケースですが、あなたはそれからはるかに多くを作ることができます。 Pry拡張機能は、彼らの優れた機能を提供するために、これらをたくさん使用しています。 しかも、あなたも、独自のイベントを作成し、その後、独自のフックすることができます! 独自のカスタムイベントの作成については、こちらをご覧ください

状態ナビゲーション

Pryは、ファイルシステムのように、オブジェクトを参照したり、コンテクストを切り替えたり、レベルを変更したりする素晴らしいオプションを提供します。 例を見てみましょう。まず、cdcd <OBJECT_NAME>cdnestingを使用して、ネストした場所とネストリストをすばやく確認できます。

pry(Apple):1> nestingNesting status:--0. main (Pry top level)1. Fruit2. Applepry(Apple):1> cd ..pry(Fruit):1> self=> Fruitpry(Fruit):1> cd -pry(Apple):2> self=> Apple

Unixcdcd ..lsのように、Pryの状態ナビゲーション機能を補完する他の便利なコマンドがあります。 find-methodコマンドは、メソッドの機能とそれが何をするかを見つけるために使用されます。 状態ナビゲーションコマンドの完全な機能セットはここに文書化されています

History

Pryのもう一つの便利な機能は、履歴追跡です。 デフォルトでは、pryセッションが開始されると、Pryは履歴ファイルに使用したコマンドを記録し、後で検査、分析、または再生することができます。 履歴の追跡の周りに箱から出して詮索好きによって提供される設定オプションの数があります。 デフォルトでは、履歴は/.pryhistory.pryrcファイルに追加することで簡単に変更できます。

Pry.config.history.file = "~/.filenamehere"

また、履歴はpryセッションが開始されるたびに履歴ファイルからロードされ、セッションが終了するとファイルに保存されます。 ただし、次の構成を使用してこの動作を上書きすることができます:

# To Disable the autoloadPry.config.history.should_load = false# To enable the autosavePry.config.history.should_save = false

履歴ファイルを直接操作する以外に、便利なhisthistコマンドを入力すると、保存されている履歴全体が出力されます。ただし、フラグを使用して履歴をさらにフィルタリングして検査することはできます。 以下は、利用可能ないくつかのフラグの一部です。p>

単語cd--grep--grep--tailオプションを使用します。 値が渡されない場合のデフォルトの数値は10です。

 pry(Rails):1> hist --tail 5 6: show-method assets 7: cd .. 8: ls 9: hist10: hist --grep cd

Pryのhisthistreplayreplayhist --replay X..Y:

 pry(main)> hist --replay 2..5constants: API Application CommandsTasks Configuration Console ConsoleMethods Engine Html Info InfoController Initializable MailersController Paths Rack Railtie VERSION WelcomeControllerActiveSupport::Autoload#methods: autoload autoload_at autoload_under autoloads eager_autoload eager_load!Rails.methods: app_class app_class= application application= backtrace_cleaner cache cache= configuration env env= gem_version groups initialize! initialized? logger logger= public_path root versioninstance variables: @_at_path @_autoloads @_eager_autoload @_env @_under_path @app_class @application @cache @logger @parent_namelocals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_...

結論

それで私たちはチュートリアルの結論に達しました。 Pryは実際にデフォルトのIRBシェルの強力な代替品であり、既存のワークフローを強化するのに適しています。 私たちはPryのいくつかの機能について話しましたが、ステップデバッグ(pry-debugger gemを使用)やREPL内からファイルを編集してリロードする機能など、はるかに多 私たちはすでにPryを始めるのに役立つチュートリアルを持っています、あなたはここでそれを読むことができ、ここで見つけることができる包括的なPry wikiドキュメンテーションページがあります。読んでくれてありがとう、私はそれがあなたの目的を果たしたことを願っています。

コメントを残す

メールアドレスが公開されることはありません。