Skip to content

Instantly share code, notes, and snippets.

@nnks1010
Last active December 31, 2017 13:03
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nnks1010/e1b23568d47c638dd177d1b94ebbc00f to your computer and use it in GitHub Desktop.
Save nnks1010/e1b23568d47c638dd177d1b94ebbc00f to your computer and use it in GitHub Desktop.
Pryで充実したRuby開発を!

Pryで充実したRuby開発を!

これは 高知工科大 Advent Calendar 2017 の23日目の記事です

今日から工科大生は楽しい冬休みの始まりですね!!僕はソフ工で休みはなさそうですが 😇

今年のソフ工ではRubyのフレームワークを使ってシステム開発をする話をよく耳にします.自分たちのグループでもRuby on Rails を使って開発しますし.

そこでPryのお話をしていこうと思います.

Pryとは何ぞ

RubyのREPLのひとつです.REPLとはRead-eval-print loopの略であり,読んで評価して出力するを繰り返すものです.※1

Rubyでは標準REPLとしてirbがあります.shellでirbコマンドを使って実行することができます.

そしてPryは先ほど紹介したirbの上位版です:muscle:

公式ではこう書いてます.

Pry is a powerful alternative to the standard IRB shell for Ruby. It features syntax highlighting, a flexible plugin architecture, runtime invocation and source and documentation browsing.

ぱっと見,シンタックスハイライトやランタイム呼び出し,プラグインアーキテクチャやドキュメントがいいぞって言ってる感じ.(翻訳ぶっ込み)

まぁ実際に使ってみれば良さはわかります.早速導入からやりましょう

導入

自分の環境は以下のような感じです

  • OS: macOS Sierra
  • Ruby: Version 2.4.3p205

まずgemでpryをinstallします.

$ gem install pry pry-doc

これによりshellでpryコマンドを使用できるようになります.pry-docはPryのドキュメントサポートの拡張を提供しています.

ではpryの主要な機能一覧について説明していきます.この機能のことをランタイム呼び出しって言ってると思われる.多分

pryの機能一覧はpry上でhelpと実行すれば出て来ます.そのhelp上で出てくる機能のカテゴリだけでも結構あります.

  • Context
  • Editing
  • Introspection
  • Gems
  • etc...

全部の機能を説明するのは無理なんで良いやつをつまみつまみで紹介していきます.

Pryの機能

pryはcdコマンドを使うことによりコンテキスト間の移動を行うことができます.ここでいうコンテキストはオブジェクトやスコープのことを指します.

つまりオブジェクトの中に入ることができるわけです.例えば以下のようにすればStringクラスの中に入ることができます.

$ pry
[1] pry(main)> cd String
[2] pry(String):1>

また,lsコマンドを使うことにより現在のコンテキストで使えるメソッドなどを見ることができます.大変便利

[2] pry(String):1> ls
String.methods: try_convert
String#methods:
%  []           casecmp?  concat  each_codepoint  getbyte  length  ord        rstrip   slice!   succ!     to_sym  upcase
*  []=          center    count   each_line       gsub     lines   partition  rstrip!  split    sum       tr      upcase!
+  ascii_only?  chars     crypt   empty?          gsub!    ljust   prepend    scan     squeeze  swapcase  tr!     upto
...
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_

そして,show-docshow-methodを使うことによってメソッドのドキュメントやソースコードを見れることができます.すげぇ

pryのみならばC言語のソースを見ることができませんが,pry-docを入れることによって見ることができます.

[3] pry(String):1> show-doc upcase

From: string.c (C Method):
Owner: String
Visibility: public
Signature: upcase(*arg1)
Number of lines: 6

Returns a copy of str with all lowercase letters replaced with their
uppercase counterparts.

See String#downcase for meaning of options and use with different encodings.

   "hEllO".upcase   #=> "HELLO"
[4] pry(String):1> show-method upcase

From: string.c (C Method):
Owner: String
Visibility: public
Number of lines: 7

static VALUE
rb_str_upcase(int argc, VALUE *argv, VALUE str)
{
    str = rb_str_dup(str);
    rb_str_upcase_bang(argc, argv, str);
    return str;
}

このほかにも.commandでshellのコマンドを使うこともできます.

[5] pry(String):1> .ls
Gemfile     Gemfile.lock    vendor
[6] pry(String):1> .vim

こんな感じでpryには便利な機能が沢山あります.

pryを使ったデバッグ

pryには充実したプラグインアーキテクチャがあります.pry-docもそのひとつですね.

そのほかにもpry-railspry-debugなどがあります.こいつらを使ってよくrailsでデバッグをやってます.

railsのGemfileに以下を記述して導入します.

# Gemfile

group :development do
  gem 'pry'
  gem 'pry-doc'
  gem 'pry-rails'
  gem 'pry-byebug'
end

pry-railsによってrails consoleで使われるREPLをirbからpryに変更することができます. また,pry-byebugによってプログラム中のデバッグしたい箇所にbinding.pryを記述することによりそこでpryが起動されます.

こいつはrailsで開発するにあたってマジで便利です.使うことをオススメします.

終わりに

ちょい色々あってあんま記事書く時間がなくてこれで終わりです.すんません:bow: pryrcとかも書きたかった.

この記事はpryについては本当に触り程度しか触れていません.気になった方はどんどん調べて見るといいです.この記事でrubyでの開発が少しでも楽になれば幸いです.

参考

今更ながらPryについて色々と調べてみた


※1 ここでREPLとInterpreterの違いってなんやねんって思う人がいるかもしれません.(自分がそう)

これについてはここのブログで書かれてました. 結構細かく定義されているもんなんですね.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment