これは 高知工科大 Advent Calendar 2017 の23日目の記事です
今日から工科大生は楽しい冬休みの始まりですね!!僕はソフ工で休みはなさそうですが 😇
今年のソフ工ではRubyのフレームワークを使ってシステム開発をする話をよく耳にします.自分たちのグループでもRuby on Rails を使って開発しますし.
そこで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は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-doc
やshow-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-doc
もそのひとつですね.
そのほかにもpry-rails
やpry-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での開発が少しでも楽になれば幸いです.
※1 ここでREPLとInterpreterの違いってなんやねんって思う人がいるかもしれません.(自分がそう)
これについてはここのブログで書かれてました. 結構細かく定義されているもんなんですね.