rabbit-slide-znz-rubykansai85-ruby26 2019.02.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rabbit +1 -0
- data/README.md +24 -0
- data/Rakefile +17 -0
- data/config.yaml +20 -0
- data/pdf/rubykansai85-ruby26-ruby-2.6-update.pdf +0 -0
- data/ruby-2.6-update.md +291 -0
- metadata +62 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6ddbd795577b9a2ae6513d87145c003d13b5fbb94c94bd777ee76d9962d99fe4
|
4
|
+
data.tar.gz: 0c9feacbb2ebae217e47bdc13247189e67dc5c6da3aef033a8e09c1343eca81b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e6c6d26f96af302b8ef83c4980fa5d6d534867d991906def46f543ddc5483c7e263b95d61c8d155ab9e13f1fcf72197a2905bbd52ac074d0743c4d25c759ecfb
|
7
|
+
data.tar.gz: edae4988ea5e9a1f955126909bd6d2f7ee011335ccad8b6687e2ad4df6339927cf5ae772d1d473f260fd352511025c4a8a3da27f649445dbb2f6503c6bb81d31
|
data/.rabbit
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.6-update.md
|
data/README.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Ruby 2.6 Update
|
2
|
+
|
3
|
+
[第85回 Ruby関西 勉強会](https://rubykansai.doorkeeper.jp/events/85497)の発表資料です。
|
4
|
+
|
5
|
+
## 作者向け
|
6
|
+
|
7
|
+
### 表示
|
8
|
+
|
9
|
+
rake
|
10
|
+
|
11
|
+
### 公開
|
12
|
+
|
13
|
+
rake publish
|
14
|
+
|
15
|
+
## 閲覧者向け
|
16
|
+
|
17
|
+
### インストール
|
18
|
+
|
19
|
+
gem install rabbit-slide-znz-rubykansai85-ruby26
|
20
|
+
|
21
|
+
### 表示
|
22
|
+
|
23
|
+
rabbit rabbit-slide-znz-rubykansai85-ruby26.gem
|
24
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require "rabbit/task/slide"
|
2
|
+
|
3
|
+
# Edit ./config.yaml to customize meta data
|
4
|
+
|
5
|
+
spec = nil
|
6
|
+
Rabbit::Task::Slide.new do |task|
|
7
|
+
spec = task.spec
|
8
|
+
# spec.files += Dir.glob("doc/**/*.*")
|
9
|
+
# spec.files -= Dir.glob("private/**/*.*")
|
10
|
+
# spec.add_runtime_dependency("YOUR THEME")
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Tag #{spec.version}"
|
14
|
+
task :tag do
|
15
|
+
sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
|
16
|
+
sh("git", "push", "--tags")
|
17
|
+
end
|
data/config.yaml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
id: rubykansai85-ruby26
|
3
|
+
base_name: ruby-2.6-update
|
4
|
+
tags:
|
5
|
+
- ruby
|
6
|
+
presentation_date: 2019/02/16
|
7
|
+
version: 2019.02.16
|
8
|
+
licenses: []
|
9
|
+
slideshare_id:
|
10
|
+
speaker_deck_id:
|
11
|
+
ustream_id:
|
12
|
+
vimeo_id:
|
13
|
+
youtube_id:
|
14
|
+
author:
|
15
|
+
markup_language: :markdown
|
16
|
+
name: Kazuhiro NISHIYAMA
|
17
|
+
email: zn@mbf.nifty.com
|
18
|
+
rubygems_user: znz
|
19
|
+
slideshare_user: znzjp
|
20
|
+
speaker_deck_user: znz
|
Binary file
|
data/ruby-2.6-update.md
ADDED
@@ -0,0 +1,291 @@
|
|
1
|
+
# Ruby 2.6 Update
|
2
|
+
|
3
|
+
author
|
4
|
+
: Kazuhiro NISHIYAMA
|
5
|
+
|
6
|
+
content-source
|
7
|
+
: 第85回 Ruby関西 勉強会
|
8
|
+
|
9
|
+
date
|
10
|
+
: 2019/02/16
|
11
|
+
|
12
|
+
institution
|
13
|
+
: 株式会社Ruby開発
|
14
|
+
|
15
|
+
allotted-time
|
16
|
+
: 40m
|
17
|
+
|
18
|
+
theme
|
19
|
+
: lightning-simple
|
20
|
+
|
21
|
+
# 自己紹介
|
22
|
+
|
23
|
+
- 西山 和広
|
24
|
+
- Ruby のコミッター
|
25
|
+
- twitter, github など: @znz
|
26
|
+
- 株式会社Ruby開発 www.ruby-dev.jp
|
27
|
+
|
28
|
+
# ITアイランドセミナー in 姫島2019
|
29
|
+
|
30
|
+
- 2019-03-15(金)〜16(土) 大分県姫島
|
31
|
+
- <https://connpass.com/event/115052/>
|
32
|
+
- <https://www.ruby-dev.jp/seminar/himeshima/2019>
|
33
|
+
|
34
|
+
# OSS Gate
|
35
|
+
|
36
|
+
- OSS Gate大阪ワークショップ2019-03-09
|
37
|
+
<https://oss-gate.doorkeeper.jp/events/86154>
|
38
|
+
- 「OSSの開発に参加する」を実際に体験するワークショップ
|
39
|
+
- 実際にOSSの開発に参加する人(「ビギナー」)と「ビギナー」をサポートする人(「サポーター」)を募集中
|
40
|
+
|
41
|
+
# agenda
|
42
|
+
|
43
|
+
- 2.6.0 での変更の紹介
|
44
|
+
- 2.6.0 での問題
|
45
|
+
- 2.6.1 での問題
|
46
|
+
- 2.6.2, 2.6.3 の予定
|
47
|
+
|
48
|
+
# オススメ記事
|
49
|
+
|
50
|
+
- プロと読み解く Ruby 2.6 NEWS ファイル - クックパッド開発者ブログ
|
51
|
+
<https://techlife.cookpad.com/entry/2018/12/25/110240>
|
52
|
+
|
53
|
+
# 2.6.0 での変更の紹介
|
54
|
+
|
55
|
+
# $SAFE がプロセスグローバルに
|
56
|
+
|
57
|
+
- `Proc#call` で保存されなくなった
|
58
|
+
- スレッドローカル (Fiber ローカル) ではない
|
59
|
+
- マルチスレッドプログラムでスレッドセーフに扱えなくなった
|
60
|
+
- `$SAFE = 1` から `$SAFE = 0` で戻せるようになった
|
61
|
+
|
62
|
+
# 終端なしの Range
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
ary[1..] #=> ary[1..-1] と同じ
|
66
|
+
|
67
|
+
(1..).each {|index| ... } # 1 から無限にループ
|
68
|
+
|
69
|
+
# each_with_index を 0 でなく 1 から始める
|
70
|
+
ary.zip(1..) {|elem, index| ... }
|
71
|
+
```
|
72
|
+
|
73
|
+
# キーワード引数とオプション引数のコーナーケースを禁止
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
def foo(h = {}, key: :default)
|
77
|
+
p [h, key]
|
78
|
+
end
|
79
|
+
|
80
|
+
foo(:key => 1, "str" => 2)
|
81
|
+
#=> [{"str"=>2}, 1] (2.5 まで)
|
82
|
+
#=> non-symbol key in keyword arguments:
|
83
|
+
# "str" (ArgumentError) (2.6)
|
84
|
+
```
|
85
|
+
|
86
|
+
# ローカル変数の shadowing 警告を削除
|
87
|
+
|
88
|
+
以下のような例で `shadowing outer local variable` 警告がでなくなった
|
89
|
+
|
90
|
+
```ruby
|
91
|
+
user = users.find {|user| cond(user) }
|
92
|
+
```
|
93
|
+
|
94
|
+
# バックトレース表示
|
95
|
+
|
96
|
+
プロセス終了時のバックトレースで cause のバックトレースも表示されるようになった
|
97
|
+
|
98
|
+
```
|
99
|
+
$ ruby -e 'def a;b;rescue;raise "in a";end;def b;raise "in b";end;a'
|
100
|
+
Traceback (most recent call last):
|
101
|
+
2: from -e:1:in `<main>'
|
102
|
+
1: from -e:1:in `a'
|
103
|
+
-e:1:in `b': in b (RuntimeError)
|
104
|
+
2: from -e:1:in `<main>'
|
105
|
+
1: from -e:1:in `a'
|
106
|
+
-e:1:in `rescue in a': in a (RuntimeError)
|
107
|
+
```
|
108
|
+
|
109
|
+
# flip-flop が deprecated
|
110
|
+
|
111
|
+
条件式としての範囲式
|
112
|
+
<https://docs.ruby-lang.org/ja/2.6.0/doc/spec=2foperator.html#range_cond>
|
113
|
+
|
114
|
+
```ruby
|
115
|
+
5.times{|n|
|
116
|
+
if (n==2)..(n==3)
|
117
|
+
p n
|
118
|
+
end
|
119
|
+
}
|
120
|
+
#=> 2
|
121
|
+
# 3
|
122
|
+
```
|
123
|
+
|
124
|
+
# to_h がブロックを受け取るように
|
125
|
+
|
126
|
+
```
|
127
|
+
# 従来の to_h の使い方
|
128
|
+
["Foo", "Bar"].map {|x| [x.upcase, x.downcase] }.to_h
|
129
|
+
#=> {"FOO"=>"foo", "BAR"=>"bar"}
|
130
|
+
|
131
|
+
# 新しい用法
|
132
|
+
["Foo", "Bar"].to_h {|x| [x.upcase, x.downcase] }
|
133
|
+
#=> {"FOO"=>"foo", "BAR"=>"bar"}
|
134
|
+
```
|
135
|
+
|
136
|
+
# Array#filter, Array#filter!, Enumerable#filter
|
137
|
+
|
138
|
+
- `Array#select`, `Array#select!`, `Enumerable#select` の別名
|
139
|
+
- (ruby 1.6 までの `Array#filter` は今の `Array#map!` と同じ)
|
140
|
+
- (ruby 1.8 から 2.5 には `Array#filter` はない)
|
141
|
+
|
142
|
+
# Dir#each_child, Dir#children
|
143
|
+
|
144
|
+
`.`, `..` を含まない `Dir.each_child`, `Dir.children` のインスタンスメソッド版
|
145
|
+
|
146
|
+
# Enumerable#chain
|
147
|
+
|
148
|
+
```ruby
|
149
|
+
a1 = %w(1 2)
|
150
|
+
a2 = %w(3 4)
|
151
|
+
a3 = %w(5 6)
|
152
|
+
[a1, a2, a3].each{|ary| ary.each{|e| p e}} # 多重ループ
|
153
|
+
(a1+a2+a3).each{|e| p e} # 配列の時のみ
|
154
|
+
a1.chain(a2, a3).each{|e| p e}
|
155
|
+
(a1.each + a2.each + a3.each).each{|e| p e}
|
156
|
+
a1.chain(a2.reverse_each, a3).each{|e| p e} # each を持てば繋げられる
|
157
|
+
```
|
158
|
+
|
159
|
+
# Enumerator::ArithmeticSequence
|
160
|
+
|
161
|
+
- 等差数列を提供するためのクラス
|
162
|
+
- Python のスライスに相当
|
163
|
+
- いろんなライブラリが対応していけばより便利に
|
164
|
+
|
165
|
+
```ruby
|
166
|
+
3.step(by: 2, to: 10)
|
167
|
+
(3..10)%2
|
168
|
+
```
|
169
|
+
|
170
|
+
# Exception#full_message の引数追加
|
171
|
+
|
172
|
+
- `:highlight`, `:order`
|
173
|
+
- ruby 2.5.1 にもバックポート済み
|
174
|
+
|
175
|
+
# open のモードに x 追加
|
176
|
+
|
177
|
+
`File::EXCL` の代わりに使える `x` 追加 (C11 由来)
|
178
|
+
|
179
|
+
# Kernel#then
|
180
|
+
|
181
|
+
`Kernel#yield_self` の別名
|
182
|
+
|
183
|
+
# Kernel#Integer などに :exception
|
184
|
+
|
185
|
+
```
|
186
|
+
Integer('hello')
|
187
|
+
#=> `Integer': invalid value for Integer(): "hello" (ArgumentError)
|
188
|
+
Integer('hello', exception: false) #=> nil
|
189
|
+
p system("ruby -e raise") #=> false
|
190
|
+
p system("ruby -e raise", exception: true)
|
191
|
+
#=> `system': Command failed with exit 1: ruby -e raise (RuntimeError)
|
192
|
+
```
|
193
|
+
|
194
|
+
# system, exec などの close_others
|
195
|
+
|
196
|
+
- デフォルトが false に
|
197
|
+
- ruby 本体が開く fd は以前と変わらず `FD_CLOEXEC` を設定
|
198
|
+
- 拡張ライブラリが開く fd やプロセス起動時に継承した fd に影響
|
199
|
+
|
200
|
+
# KeyError.new, NameError.new
|
201
|
+
|
202
|
+
- :receiver, :key 追加
|
203
|
+
- Ruby レベルでも設定可能に
|
204
|
+
- `did_you_mean` との相性が良くなる
|
205
|
+
|
206
|
+
# 関数合成オペレータ
|
207
|
+
|
208
|
+
`Proc#<<`, `Proc#>>`
|
209
|
+
|
210
|
+
```ruby
|
211
|
+
plus2 = -> x { x + 2 }
|
212
|
+
times3 = -> x { x * 3 }
|
213
|
+
|
214
|
+
times3plus2 = plus2 << times3
|
215
|
+
p times3plus2.(3) #=> 3 * 3 + 2 => 11
|
216
|
+
p times3plus2.(4) #=> 4 * 3 + 2 => 14
|
217
|
+
|
218
|
+
plus2times3 = times3 << plus2
|
219
|
+
p plus2times3.(3) #=> (3 + 2) * 3 => 15
|
220
|
+
p plus2times3.(5) #=> (5 + 2) * 3 => 21
|
221
|
+
```
|
222
|
+
|
223
|
+
# String#split がブロック対応
|
224
|
+
|
225
|
+
```ruby
|
226
|
+
"foo/bar/baz".split("/") {|s| p s } #=> "foo", "bar", "baz"
|
227
|
+
```
|
228
|
+
|
229
|
+
# 2.6.0 での問題
|
230
|
+
|
231
|
+
# 2.6.0 の Net::HTTP のバグ
|
232
|
+
|
233
|
+
- 詳細: <https://mensfeld.pl/2019/01/exploring-a-critical-netprotocol-issue-in-ruby-2-6-0p0-and-how-it-can-lead-to-a-security-problem/>
|
234
|
+
|
235
|
+
# 2.6.0 の Net::HTTP のバグ
|
236
|
+
|
237
|
+
- <https://bugs.ruby-lang.org/issues/15468>
|
238
|
+
- マルチバイト文字の扱いの問題
|
239
|
+
- `String#byteslice` を使うべきところで `String#[]` を使っていた
|
240
|
+
- 使い方によってはセキュリティ問題が起きる
|
241
|
+
- 2.6.1 では修正済み
|
242
|
+
|
243
|
+
# 2.6.1 での問題
|
244
|
+
|
245
|
+
# 2.6 で bundler が default gem に
|
246
|
+
|
247
|
+
default gem とは?
|
248
|
+
|
249
|
+
- default gem : 標準添付ライブラリーだが gem で新しいバージョンに更新可能
|
250
|
+
- bundled gem : ruby と一緒にインストールされる gem (アンインストールも可能)
|
251
|
+
|
252
|
+
# bundler の不具合
|
253
|
+
|
254
|
+
- Ruby 2.6.1 の Bundler の不具合のお知らせ
|
255
|
+
<https://www.hsbt.org/diary/20190205.html#p02>
|
256
|
+
|
257
|
+
# bundler の不具合
|
258
|
+
|
259
|
+
- <https://bugs.ruby-lang.org/issues/15582>
|
260
|
+
- 1.17.2 そのままなら問題ない
|
261
|
+
- 2.0.1 や 1.7.3 をインストールすると壊れる
|
262
|
+
- <https://bugs.ruby-lang.org/issues/15469>
|
263
|
+
- default gem (csv, json など) の別バージョンが使えない
|
264
|
+
|
265
|
+
# bundler: 対処方法
|
266
|
+
|
267
|
+
- 2.6.2 を待つ
|
268
|
+
- `gem update --system`
|
269
|
+
- rbenv + ruby-build なら以下のようにパッチを適用しつつインストール
|
270
|
+
|
271
|
+
```
|
272
|
+
curl -sSL \
|
273
|
+
https://bugs.ruby-lang.org/attachments/download/7631/15582-bundler-gemspec.patch \
|
274
|
+
https://bugs.ruby-lang.org/attachments/download/7635/r15469-bundler-final.patch |
|
275
|
+
rbenv install --patch 2.6.1
|
276
|
+
```
|
277
|
+
|
278
|
+
# 2.6.2, 2.6.3 の予定
|
279
|
+
|
280
|
+
# 今後のリリース予定
|
281
|
+
|
282
|
+
- 2.6.2 で Unicode 12.0 対応予定 (3月?)
|
283
|
+
- 2.6.3 で Unicode 12.1 対応 (新元号対応) 予定 (4月?)
|
284
|
+
- (別リリースが挟まってバージョンがずれる可能性はある)
|
285
|
+
|
286
|
+
# もっと先の話
|
287
|
+
|
288
|
+
- 2.3 から入った `frozen_string_literal` は 3.0 ではデフォルトにならない
|
289
|
+
- キーワード引数が分離されるはず (`*rest` と `**kwrest` が混ざらなくなる)
|
290
|
+
- パターンマッチが入るかも
|
291
|
+
<https://bugs.ruby-lang.org/issues/14912>
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rabbit-slide-znz-rubykansai85-ruby26
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2019.02.16
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kazuhiro NISHIYAMA
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-02-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rabbit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.0.2
|
27
|
+
description: "[第85回 Ruby関西 勉強会](https://rubykansai.doorkeeper.jp/events/85497)の発表資料です。"
|
28
|
+
email:
|
29
|
+
- zn@mbf.nifty.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".rabbit"
|
35
|
+
- README.md
|
36
|
+
- Rakefile
|
37
|
+
- config.yaml
|
38
|
+
- pdf/rubykansai85-ruby26-ruby-2.6-update.pdf
|
39
|
+
- ruby-2.6-update.md
|
40
|
+
homepage: http://slide.rabbit-shocker.org/authors/znz/rubykansai85-ruby26/
|
41
|
+
licenses: []
|
42
|
+
metadata: {}
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
requirements: []
|
58
|
+
rubygems_version: 3.0.1
|
59
|
+
signing_key:
|
60
|
+
specification_version: 4
|
61
|
+
summary: Ruby 2.6 Update
|
62
|
+
test_files: []
|