16
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NIFTYAdvent Calendar 2017

Day 8

開発が捗る便利なRubyライブラリ

Posted at

この記事は NIFTY Advent Calendar 2017 の8日目の記事です。
7日目は @esu_eichi さんの クレジットカードを使わないでlinebotを作ったときの話 でした。

はじめに

開発ではRubyを使うことが多いのですが、よく使うgemを紹介します。
ここで紹介しているのは有名なものばかりですので、この記事を読んで興味が出た方は
RubyGems.orgThe Ruby Toolbox で探してみるといいでしょう。

Pry

irb の強化版で、同じく対話式でオブジェクトを確認できます。
gem install pry でインストールします。
また、プラグインも豊富で、pry-docpry-byebugrails consolepry で使える pry-rails などもあります。 一緒にインストールしておくと便利です。

インストールしたら pry コマンドで対話モードに入ります。

$ pry
pry(main)>

require でライブラリを読み込んだり

pry(main)> require 'net/http'
=> true

どんなオブジェクトが作成されたか確認できます

pry(main)> uri = URI.parse("https://www.google.co.jp/")
=> #<URI::HTTPS https://www.google.co.jp/>

pry(main)> response = Net::HTTP.get_response(uri)
=> #<Net::HTTPOK 200 OK readbody=true>

pry(main)> response.code
=> "200"

ls コマンドで、定義された変数(上で定義したresponse)や、メソッドが確認できます

pry(main)> ls
self.methods: inspect  to_s
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_  response

cd コマンドでオブジェクトに移動できます

pry(main)> cd response
pry(#<Net::HTTPOK>):1>

ls で確認してみると... そのオブジェクトのメソッドなどが確認できます

pry(#<Net::HTTPOK>):1> ls
Net::HTTPHeader#methods:
  []              connection_close?       content_type=          each_key    initialize_http_header  range=            size
  []=             connection_keep_alive?  delete                 each_name   key?                    range_length      sub_type
  add_field       content_length          each                   each_value  length                  set_content_type  to_hash
  basic_auth      content_length=         each_capitalized       fetch       main_type               set_form          type_params
  canonical_each  content_range           each_capitalized_name  form_data=  proxy_basic_auth        set_form_data
  chunked?        content_type            each_header            get_fields  range                   set_range
Net::HTTPResponse#methods:
  body   code       decode_content   entity  error_type  http_version  message  read_body    reading_body  uri   value
  body=  code_type  decode_content=  error!  header      inspect       msg      read_header  response      uri=
self.methods: __pry__
instance variables: @body  @body_exist  @code  @decode_content  @header  @http_version  @message  @read  @socket  @uri
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_

pry-doc をインストールしておくと、show-method で内容を確認できます

pry(#<Net::HTTPOK>):1> show-method header
...

def header   #:nodoc:
  warn "#{caller(1)[0]}: warning: Net::HTTPResponse#header is obsolete" if $VERBOSE
  self
end

他にも edit コマンドでファイルの編集ができます(エディタが起動)

pry(#<Net::HTTPOK>):1> edit header
...
147   def header   #:nodoc:
148     warn "#{caller(1)[0]}: warning: Net::HTTPResponse#header is obsolete" if $VERBOSE
149     self
150   end
...

使いこなすと、開発がスムーズに行えるようになるので、オススメです。

faker

様々なダミーデータを作成できるライブラリです。
サンプルやテストでデータを用意するときに重宝します。

require 'faker'

Faker::Internet.user_name #=> "laria"
Faker::Internet.password  #=> "FeSv8eJoVbYv7"

Faker::DragonBall.character #=> "Super Saiyan 3 Goku"
Faker::Job.title            #=> "Chief Banking Assistant"

# 一部日本語にも対応
Faker::Config.locale = :ja

Faker::Name.last_name #=> "清水"

大量にユーザーを作ったりできます。

users = 1000.times.map do
  name  = Faker::Name.name
  email = Faker::Internet.email
  User.new(name, email)
end

サンプルデータ作るの面倒なので、手軽に作成できてよいです。

ReFe2

日本語ドキュメントで有名な「るりま」を端末で見ることができます。
いちいちブラウザを開く必要がありません。
以下のようインストールします。

$ gem install refe2
$ bitclust setup

refe コマンドが使えるようになりました。 Net::HTTP.get_response のドキュメントを見てみましょう

$ refe Net::HTTP.get_response
require 'net/http'
Net::HTTP.get_response
--- get_response(uri) -> Net::HTTPResponse
--- get_response(host, path = nil, port = nil) -> Net::HTTPResponse
指定した対象に GET リクエストを送り、そのレスポンスを
[[c:Net::HTTPResponse]] として返します。

対象の指定方法は [[c:URI]] で指定するか、
(host, port, path) で指定するかのいずれかです。

@param uri データの取得対象を [[c:URI]] で指定します。
@param host 接続先のホストを文字列で指定します。
@param path データの存在するパスを文字列で指定します。
@param port 接続するポートを整数で指定します。
@see [[m:Net::HTTP#get]]

メソッド名だけでも検索可能

$ refe get_response

クラスなどは説明が長いのでlessなどでみてください。

$ refe String | less

こちらも気軽に確認ができて便利です。

Rubocop

The Ruby Style Guide に沿った
コーディングスタイルをチェックしてくれます。

例えば、以下のようなコードを書いてしまったとして...

bad.rb
# bad
class Person
  def initialize(first_name, last_name)
    @first_name = first_name
    @last_name  = last_name
  end

  def first_name
    @first_name
  end

  def last_name
    @last_name
  end
end

rubocop コマンドを実行すると...

$ rubocop bad.rb
Inspecting 1 file
C

Offenses:

bad.rb:8:3: C: Use attr_reader to define trivial reader methods.
  def first_name
  ^^^
bad.rb:12:3: C: Use attr_reader to define trivial reader methods.
  def last_name
  ^^^

1 file inspected, 2 offenses detected

attr_reader を使え、と怒られます。

以下のよう修正して...

good.rb
# good
class Person
  attr_reader :first_name, :last_name

  def initialize(first_name, last_name)
    @first_name = first_name
    @last_name  = last_name
  end
end

確認すると...

$ rubocop good.rb
Inspecting 1 file
.

1 file inspected, no offenses detected

怒られなくなりました!

しかし、プロジェクトのコーディングスタイルに合わない場合もあると思います。
その場合、調整が可能で .rubocop.yml にルールの設定ができます。
また、meowcop という gem を利用しても調整可能です。

さいごに

簡単にインストールできて試せて、楽しいな〜と思う一方、まだまだ使いこなせてない気がします。
今後も頑張りたいと思います。

明日は @motaHack さんの記事です。お楽しみに。

16
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?