Ruby 2.5.0

毎年12月25日に Ruby のアップデートがあるのが恒例となっていますが、今年も例にもれず12月25日に Ruby 2.5.0 がリリースされました。

リリース内容については以下の記事に記載されています。
https://github.com/ruby/ruby/blob/v2_5_0/NEWS

内容的には既存機能のパフォーマンス向上の他、新機能がいくつか追加されていたので、よく使いそうなものをいくつかピックアップして実際に試してみました。

インストール

brew を使用している場合は、以下のコマンドで ruby-build をアップデートしましょう。

$ brew upgrade ruby-build
$ rbenv install -l # インストール可能なバージョンに 2.5.0 があるか確認

# もし表示されない場合は ruby-build を再インストールしましょう
# $ brew reinstall ruby-build --HEAD

# インストール(オプションでドキュメントなしにすると早いです)
$ CONFIGURE_OPTS="--disable-install-rdoc" rbenv install 2.5.0

$ rbenv local 2.5.0
$ ruby -v # 2.5.0 になっている確認

pp が標準でロードされるように

デバッグ出力時にきれいに表示してくれる pp ライブラリが require なしで使用できるようになりました。

class User
  def initialize(id:, name:)
    @id = id
    @name = name
  end
end

user1 = User.new(id: 1, name: '田中')
user2 = User.new(id: 2, name: '鈴木')

users = [user1, user2]

pp users
=>
[#<User:0x00007fcd7889fba0 @id=1, @name="田中">,
 #<User:0x00007fcd7889f830 @id=2, @name="鈴木">]

Hash#slice

Rails で実装されていた Hashクラスの slice メソッドが Ruby にも実装されました。Hash の特定のキーのみを取得したい場合に使用します。

hash = {id: 1, name: '田中'}

hash.slice(:id)
=> {:id=>1}

Enumerable の any?/all?/none?/one? でパターンオブジェクトが使用できるように

pp ['a', '1', '2'].all? /\d/ # => false
pp ['a', '1', '2'].any? /\d/ # => true
pp ['a', '1', '2'].none? /\d/ # => false
pp ['a', '1', '2'].one? /\d/ # => false

配列のメソッドに append/prepend が追加

従来の push/unshift のエイリアスです。

[1].append(2) # => [1, 2]
[1].prepend(2) # => [2, 1]

round/floor/ceil/truncate で Integer の場合は Float 変換しないように

10.round(2) # => 10

# 今まで
10.round(2) # => 10.0

SecureRandom.alphanumeric

英数字のみのランダムな文字列を生成します。

require 'securerandom'

SecureRandom.alphanumeric # => "1NGvMsx9z6MBSPr2"

yield_self

レシーバをブロックの引数に与え、ブロック内の評価値を返します。

10.yield_self { |num| num * 2 } # => 20