Top Banner
Ruby 2.3 のてざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30
48

Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Jul 24, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Ruby 2.3 のてざわり

新機能と使いどころ

Kunihiko ItoESM

富山合同勉強会20162016-01-30

Page 2: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

はじめまして

Page 3: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

p self

Page 4: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

p self

名前: 伊藤 邦彦

出身: 富山

在住: 東京

所属: ESM アジャイル事業部

仕事: [Rails, neo4j]

Page 5: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

@kunitoo

Page 6: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

@kunitoo

Page 7: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

From Java To Ruby

変わったこと

IDE を使わなくなった

REPLで試しながら書くようになった

Page 8: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

プログラムを書くときにしていること

rails console を立ちあげる

console に書いて試していく1.

ファイルに書き移していく2.

複雑になったらテストを書く3.

Page 9: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

今日伝えたいこと

Page 10: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Ruby おもしろい

Page 11: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Ruby を触ってみたい

Page 12: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

今日の内容

昨年の12月25日にリリースされた Ruby 2.3 の新機能とその使いどころを紹介します

Page 13: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.
Page 14: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Ruby 2.3 新機能

Page 15: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

すぐに使える

safe navigation operator

SQUIGGLY HEREDOC

Page 16: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

使う機会が増えそう

#dig

Enumerable#grep_v

Page 17: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

その他

the did_you_mean gem

NameError#receiver

Hash#to_proc

Page 18: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

すぐに使える

safe navigation operator

SQUIGGLY HEREDOC

Page 19: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

safe navigation operator

別名

lonely operator‐

ぼっち演算子‐

Active Support の try! と同様の挙動

Page 20: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

safe navigation operator

obj = nil

obj.hoge #=> NoMethodError:# undefined method `hoge' for nil:NilClass

obj&.hoge #=> nil

Page 21: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

&.

Page 22: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

&. の使いどころ

ユーザーがログインしていないとき

current_user = nilcurrent_user&.name #=> nilcurrent_user.try!(:name) #=> nil

currnet_user = User.find_by(name: 'kunitoo')current_user&.name #=> 'kunitoo'current_user.try!(:name) #=> 'kunitoo'

Page 23: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

SQUIGGLY HEREDOC

ヒアドキュメント内のインデントを取り除く `<<~` リテラルです

Active Support の strip_heredoc と同様の動きをします

Page 24: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

SQUIGGLY HEREDOC

# 通常のヒアドキュメント<<-HEREDOC hoge

fugaHEREDOC#=> " hoge\n\n fuga\n"# SQUIGGLY HEREDOC<<~SQUIGGLY_HEREDOC hoge

fugaSQUIGGLY_HEREDOC #=> "hoge\n\nfuga\n"

Page 25: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

SQUIGGLY HEREDOC

# strip_heredoc<<-HEREDOC.strip_heredoc hoge

fugaHEREDOC#=> "hoge\n\nfuga\n"# SQUIGGLY HEREDOC<<~SQUIGGLY_HEREDOC hoge

fugaSQUIGGLY_HEREDOC #=> "hoge\n\nfuga\n"

Page 26: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

SQUIGGLY_HEREDOC の使いどころ

簡易なメッセージやQueryのテンプレートとして使う

Page 27: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

SQUIGGLY_HEREDOC の使いどころ

def calc_billin query = <<~SQL INSERT INTO bills (name, total) SELECT name, sum(amount) AS total FROM orders JOIN ... WHERE ... SQL ActiveRecord::Base.connection.execute(query)end

Page 28: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

使う機会が増えそう

#dig

Enumerable#grep_v

Page 29: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

#dig

追加されたクラス

Array‐

Hash‐

Struct‐

OpenStruct‐

深い階層にある値を取得することができる

Page 30: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

#dig

a = [[1, 2], [3, 4]]

a.dig(0, 1) #=> 2a.dig(1, 2) #=> nil

h = {foo: {bar: 1}}}

h.dig(:foo, :bar) #=> 1

Page 31: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

#dig

dig メソッドを持つオジェクトであれば、交ざっていても使えます

user = { user: { address: [ {name: '富山市', ruby: 'とやまし'}, {name: '呉羽町', ruby: 'くれはまち'} ] }}user.dig(:user, :address, 1, :name) #=> "呉羽町"user.dig(:user, :address, 2, :name) #=> nil

Page 32: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

#dig の使いどころ

JSON の値の取得

Hash の値に Array がある場合

request paramter

user = JSON.parse(request.body)

Page 33: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

#dig の使いどころ

(0..1).map {|index| user.dig(:user, :address, index, :name)} #=> ["呉羽町", nil]

Page 34: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Enumerable#grep_v

Enumerable#grep のマッチの条件を逆にして、pattern === item が成立 しない要素を全て含んだ配列を返します

(1..10).grep_v 2..5 # => [1, 6, 7, 8, 9, 10]

Page 35: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

正規表現クイズ

Bob, John, Jahn の中から Jo から始まる名前以外を抽出するには?

^[^Jo]1.

^[^J][^o]2.

^(?!Jo)3.

Page 36: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

こたえ

3. ^(?!Jo)

names.grep /^[^Jo]/ #=> ['Bob']names.grep /^[^J][^o]/ #=> []names.grep /^(?!Jo)/ #=> ["Bob", "Jahn"]

Page 37: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Enumerable#grep_v の使いどころ

Enumerable#grep では逆の条件が書きづらいときや型情報を使うとき

['Bob', 'John', 'Jahn'].grep_v /^Jo/ #=> ["Bob", "Jahn"][1, '1', 1.0].grep_v String #=> [1, 1.0]

Page 38: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

the did_you_mean gem

did_you_mean gem がバンドルされるようになりました。NameError と NoMethodError の発生時、デバッグを容易にするため、正しい名前と思われる候補を合わせて表示します。

Page 39: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

the did_you_mean gem の使いどころ

irb や rails console でお世話になります。自信のないスペルでも調べなくてもよくなります。

Page 40: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

the did_you_mean gem の使いどころ

'hello'.revarse# => NoMethodError: undefined method `revarse' for "hello":String# Did you mean? reverse# reverse!

'str'.encodeing# => NoMethodError: undefined method `encodeing' for "str":String# Did you mean? encoding# encode# encode!

Page 41: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

NameError#receiver

NameError が発生した時のレシーバオブジェクトを返します

begin 'abc'.foorescue => e p e.receiverend #=> 'abc'

Page 42: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

NameError#receiver の使いどころ

module DidYouMean class VariableNameChecker ... snip ... def initialize(exception) @name = exception.name.to_s.tr("@", "") @lvar_names = exception.local_variables receiver = exception.receiver

@method_names = receiver.methods + receiver.private_methods @ivar_names = receiver.instance_variables @cvar_names = receiver.class.class_variables @cvar_names += receiver.class_variables if receiver.kind_of?(Module) end endend

Page 43: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

NameError#receiver の使いどころ

デバッグするときに呼び出し元のオブジェクトそのものを取得できる

Page 44: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Hash#to_proc

self に対応する Proc オブジェクトを返します。

[1, 2, 3].map(&h) # => [10, 20, 30]

Page 45: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Hash#to_proc の使いどころ

おもいつきません...

Page 46: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

その他

frozen string literal

String#+@, String#-@

Page 47: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

まとめ

Rails に存在した &. や HEREDOC はすぐに使えそう

#dig や grep_v は意識していれば、使えるところがありそう

Hash#to_proc はだれか使いどころおしえてください

Page 48: Ruby 2.3 の てざ わり - Rabbit Slide Show · Ruby 2.3 の てざ わり 新機能と使いどころ Kunihiko Ito ESM 富山合同勉強会2016 2016-01-30. はじめ まして.

Enjoy Ruby