SlideShare a Scribd company logo
Ruby 2.6 Update
Kazuhiro NISHIYAMA
第85回 Ruby関⻄ 勉強会
2019/02/16
株式会社Ruby開発
Powered by Rabbit 2.1.8
⾃己紹介
⻄⼭ 和広
Ruby のコミッター
twitter, github など: @znz
株式会社Ruby開発 www.ruby-dev.jp
1/36
ITアイランドセミナー in 姫
島2019
2019-03-15(⾦)〜16(⼟) ⼤分県姫島
https://connpass.com/event/115052/
https://www.ruby-dev.jp/seminar/
himeshima/2019
2/36
OSS Gate
OSS Gate⼤阪ワークショップ2019-03-09
https://oss-gate.doorkeeper.jp/
events/86154
「OSSの開発に参加する」を実際に体験す
るワークショップ
実際にOSSの開発に参加する⼈(「ビギナ
ー」)と「ビギナー」をサポートする⼈
(「サポーター」)を募集中
3/36
agenda
2.6.0 での変更の紹介
2.6.0 での問題
2.6.1 での問題
2.6.2, 2.6.3 の予定
4/36
オススメ記事
プロと読み解く Ruby 2.6 NEWS ファイル
- クックパッド開発者ブログ
https://techlife.cookpad.com/
entry/2018/12/25/110240
5/36
2.6.0 での
変更の紹介
$SAFE がプロセスグローバ
ルに
Proc#call で保存されなくなった
スレッドローカル (Fiber ローカル) ではな
い
マルチスレッドプログラムでスレッドセーフに
扱えなくなった
$SAFE = 1 から $SAFE = 0 で戻せるよ7/36
終端なしの Range
ary[1..] #=> ary[1..-1] と同じ
(1..).each {|index| ... } # 1 から無限にループ
# each_with_index を 0 でなく 1 から始める
ary.zip(1..) {|elem, index| ... }
8/36
キーワード引数とオプション
引数のコーナーケースを禁⽌
def foo(h = {}, key: :default)
p [h, key]
end
foo(:key => 1, "str" => 2)
#=> [{"str"=>2}, 1] (2.5 まで)
#=> non-symbol key in keyword arguments:
# "str" (ArgumentError) (2.6)
9/36
ローカル変数の
shadowing 警告を削除
以下のような例で shadowing outer local
variable 警告がでなくなった
user = users.find {|user| cond(user) }
10/36
バックトレース表⽰
プロセス終了時のバックトレースで cause のバ
ックトレースも表⽰されるようになった
$ ruby -e 'def a;b;rescue;raise "in a";end;def b;raise "in b";end;a'
Traceback (most recent call last):
2: from -e:1:in `<main>'
1: from -e:1:in `a'
-e:1:in `b': in b (RuntimeError)
2: from -e:1:in `<main>'
1: from -e:1:in `a'
-e:1:in `rescue in a': in a (RuntimeError)
11/36
flip-flop が deprecated
条件式としての範囲式
https://docs.ruby-lang.org/ja/2.6.0/doc/
spec=2foperator.html#range_cond
5.times{|n|
if (n==2)..(n==3)
p n
end
}
#=> 2
# 3
12/36
to_h がブロックを受け取る
ように
# 従来の to_h の使い⽅
["Foo", "Bar"].map {|x| [x.upcase, x.downcase] }.to_h
#=> {"FOO"=>"foo", "BAR"=>"bar"}
# 新しい⽤法
["Foo", "Bar"].to_h {|x| [x.upcase, x.downcase] }
#=> {"FOO"=>"foo", "BAR"=>"bar"}
13/36
Array#filter,
Array#filter!,
Enumerable#filter
Array#select, Array#select!,
Enumerable#select の別名
(ruby 1.6 までの Array#filter は今の
Array#map! と同じ)
(ruby 1.8 から 2.5 には Array#filter はない
) 14/36
Dir#each_child,
Dir#children
., .. を含まない Dir.each_child,
Dir.children のインスタンスメソッド版
15/36
Enumerable#chain
a1 = %w(1 2)
a2 = %w(3 4)
a3 = %w(5 6)
[a1, a2, a3].each{|ary| ary.each{|e| p e}} # 多重ループ
(a1+a2+a3).each{|e| p e} # 配列の時のみ
a1.chain(a2, a3).each{|e| p e}
(a1.each + a2.each + a3.each).each{|e| p e}
a1.chain(a2.reverse_each, a3).each{|e| p e} # each を持てば繋げられる
16/36
Enumerator::Arithmeti
cSequence
等差数列を提供するためのクラス
Python のスライスに相当
いろんなライブラリが対応していけばより
便利に
3.step(by: 2, to: 10)
(3..10)%2
17/36
Exception#full_messag
e の引数追加
:highlight, :order
ruby 2.5.1 にもバックポート済み
18/36
open のモードに x 追加
File::EXCL の代わりに使える x 追加 (C11 由
来)
19/36
Kernel#then
Kernel#yield_self の別名
20/36
Kernel#Integer など
に :exception
Integer('hello')
#=> `Integer': invalid value for Integer(): "hello" (ArgumentError)
Integer('hello', exception: false) #=> nil
p system("ruby -e raise") #=> false
p system("ruby -e raise", exception: true)
#=> `system': Command failed with exit 1: ruby -e raise (RuntimeError)
21/36
system, exec などの
close_others
デフォルトが false に
ruby 本体が開く fd は以前と変わらず
FD_CLOEXEC を設定
拡張ライブラリが開く fd やプロセス起動時
に継承した fd に影響
22/36
KeyError.new,
NameError.new
:receiver, :key 追加
Ruby レベルでも設定可能に
did_you_mean との相性が良くなる
23/36
関数合成オペレータ
Proc#<<, Proc#>>
plus2 = -> x { x + 2 }
times3 = -> x { x * 3 }
times3plus2 = plus2 << times3
p times3plus2.(3) #=> 3 * 3 + 2 => 11
p times3plus2.(4) #=> 4 * 3 + 2 => 14
plus2times3 = times3 << plus2
p plus2times3.(3) #=> (3 + 2) * 3 => 15
p plus2times3.(5) #=> (5 + 2) * 3 => 21
24/36
String#split がブロック対
応
"foo/bar/baz".split("/") {|s| p s } #=> "foo", "bar", "baz"
25/36
2.6.0 で
の問題
2.6.0 の Net::HTTP のバグ
詳細: https://mensfeld.pl/2019/01/
exploring-a-critical-netprotocol-issue-
in-ruby-2-6-0p0-and-how-it-can-lead-
to-a-security-problem/
27/36
2.6.0 の Net::HTTP のバグ
https://bugs.ruby-lang.org/
issues/15468
マルチバイト⽂字の扱いの問題
String#byteslice を使うべきところで
String#[] を使っていた
使い⽅によってはセキュリティ問題が起き
る
28/36
2.6.1 で
の問題
2.6 で bundler が
default gem に
default gem とは?
default gem : 標準添付ライブラリーだが
gem で新しいバージョンに更新可能
bundled gem : ruby と⼀緒にインストー
ルされる gem (アンインストールも可能)
30/36
bundler の不具合
Ruby 2.6.1 の Bundler の不具合のお知ら
せ
https://www.hsbt.org/
diary/20190205.html#p02
31/36
bundler の不具合
https://bugs.ruby-lang.org/
issues/15582
1.17.2 そのままなら問題ない
2.0.1 や 1.7.3 をインストールすると壊れる
https://bugs.ruby-lang.org/
issues/15469
default gem (csv, json など) の別バージョン32/36
bundler: 対処⽅法
2.6.2 を待つ
gem update --system
rbenv + ruby-build なら以下のようにパ
ッチを適⽤しつつインストール
curl -sSL 
https://bugs.ruby-lang.org/attachments/download/7631/15582-bundler-gemspec.patch 
https://bugs.ruby-lang.org/attachments/download/7635/r15469-bundler-final.patch |
rbenv install --patch 2.6.1
33/36
2.6.2, 2.6.3
の予定
今後のリリース予定
2.6.2 で Unicode 12.0 対応予定 (3⽉?)
2.6.3 で Unicode 12.1 対応 (新元号対応)
予定 (4⽉?)
(別リリースが挟まってバージョンがずれる
可能性はある)
35/36
もっと先の話
2.3 から⼊った
frozen_string_literal は 3.0 ではデ
フォルトにならない
キーワード引数が分離されるはず (*rest
と **kwrest が混ざらなくなる)
パターンマッチが⼊るかも
https://bugs.ruby-lang.org/
issues/14912
36/36Powered by Rabbit 2.1.8

More Related Content

PDF
MlnagoyaRx
PDF
超簡単!SubversionとTortoiseSVN入門(操作編1)
PDF
超簡単!Subversion入門 概念編
PDF
超簡単!Subversion入門 準備編
PDF
超簡単! MySQLをWindowsにインストール
PDF
超簡単!バージョン管理入門 最初の一歩
PDF
超簡単!SubversionとTortoiseSVN入門(操作編2)
PDF
Git入門-概念編
MlnagoyaRx
超簡単!SubversionとTortoiseSVN入門(操作編1)
超簡単!Subversion入門 概念編
超簡単!Subversion入門 準備編
超簡単! MySQLをWindowsにインストール
超簡単!バージョン管理入門 最初の一歩
超簡単!SubversionとTortoiseSVN入門(操作編2)
Git入門-概念編

What's hot (20)

PDF
超簡単! PythonをWindows Serverにインストール
PDF
超簡単! GitをWindowsにインストール
PDF
パケットキャプチャの定番! Wiresharkのインストールとミニ紹介
PDF
Alfresco勉強会#24 コンテンツのライフサイクル
PDF
超簡単! TortoiseGitをWindowsにインストール
PDF
Scala2.10.x bytecode problems in Android
PDF
東京Node学園#3 Domains & Isolates
PDF
TypeScript 言語処理系ことはじめ
PDF
Hudson using Groovy #jggug
PDF
タスクマネージャーの上級版!Process Explorerの紹介
PDF
超簡単! Redmineで体験 初めてのチケット管理
PPTX
StackStormではじめる1人Slackのすすめ
PDF
オープンソースNW監視ツールのご紹介
PDF
Ruby way-openstack.keynote
PDF
#31 愛しのst2
PDF
シェル入門
PDF
#logstudy 01 rsyslog入門
PDF
Of tutorials v4.1
PDF
RとSQLiteによるオミックス解析の促進
超簡単! PythonをWindows Serverにインストール
超簡単! GitをWindowsにインストール
パケットキャプチャの定番! Wiresharkのインストールとミニ紹介
Alfresco勉強会#24 コンテンツのライフサイクル
超簡単! TortoiseGitをWindowsにインストール
Scala2.10.x bytecode problems in Android
東京Node学園#3 Domains & Isolates
TypeScript 言語処理系ことはじめ
Hudson using Groovy #jggug
タスクマネージャーの上級版!Process Explorerの紹介
超簡単! Redmineで体験 初めてのチケット管理
StackStormではじめる1人Slackのすすめ
オープンソースNW監視ツールのご紹介
Ruby way-openstack.keynote
#31 愛しのst2
シェル入門
#logstudy 01 rsyslog入門
Of tutorials v4.1
RとSQLiteによるオミックス解析の促進
Ad

Similar to Ruby 2.6 Update (20)

PDF
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
PDF
Ansible2.0と実用例
PDF
私とOSS活動とPerl
PDF
qemuのriscv64にDebianを入れてみた
PDF
Play framework 2.0のおすすめと1.2からのアップグレード
PDF
PHPの今とこれから2025 (PHP Conference Japan 2025)
PPTX
20170527 inside .NET Core on Linux
PDF
Docker with RHEL7 技術勉強会
PDF
成長を加速する minne の技術基盤戦略
PDF
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
KEY
Bundler kanazawa.rb meetup #2 2012/09/19
KEY
OSS奨励賞受賞プレゼン 活動紹介
PDF
Node.jsでブラウザメッセンジャー
PDF
Tricky implementation of Go ARM soft float
PPTX
実は怖くないDevOps
PPTX
イベント駆動プログラミングとI/O多重化
PDF
Rails解説セミナー: リリースノート解説編
PDF
補足 : LOOLのビルドについて
PDF
Ansible troubleshooting 101_2021
PDF
Ruby 2.5
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ansible2.0と実用例
私とOSS活動とPerl
qemuのriscv64にDebianを入れてみた
Play framework 2.0のおすすめと1.2からのアップグレード
PHPの今とこれから2025 (PHP Conference Japan 2025)
20170527 inside .NET Core on Linux
Docker with RHEL7 技術勉強会
成長を加速する minne の技術基盤戦略
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
Bundler kanazawa.rb meetup #2 2012/09/19
OSS奨励賞受賞プレゼン 活動紹介
Node.jsでブラウザメッセンジャー
Tricky implementation of Go ARM soft float
実は怖くないDevOps
イベント駆動プログラミングとI/O多重化
Rails解説セミナー: リリースノート解説編
補足 : LOOLのビルドについて
Ansible troubleshooting 101_2021
Ruby 2.5
Ad

More from Kazuhiro Nishiyama (20)

PDF
Ruby on Rails と私 at 関西Ruby会議08 After Party: 叡電LT 🚃
PDF
riscv64.rubyci.org internal at RubyKaigi 2025 LT
PDF
Rubyの日本語リファレンスマニュアルの現在と未来 (松江Ruby会議11) 2024-10-05
PDF
devise-two-factor gem を 4.x から 5.x に上げた話
PDF
docs.ruby-lang.org/ja/ の生成方法を (GitHub Actions に)変えた
PDF
Ubuntuのriscv64版をqemuで動かした at LILO&東海道らぐオフラインミーティング 2024-04-27
PDF
lilo.linux.or.jp を buster から bullseye に上げた
PDF
小規模個人アプリをRails 7.xにバージョンアップした話
PDF
Ruby リファレンスマニュアル改善計画 2022 進捗報告
PDF
fukuoka03-rubima-reboot-rubyist-magazine-reboot.pdf
PDF
rubykaigi2022-rurema-history-and-future.pdf
PDF
systemd 再入門
PDF
Ruby 3.0.0 コネタ集
PDF
livedoor天気API終了対応
PDF
Wireguard 実践入門
PDF
workflow,job,step の使い分けの基準を考える
PDF
あまり知られていないRubyの便利機能
PDF
Dockerのオフィシャルrubyイメージとは?
PDF
チャットボットのススメ
PDF
Dokku の紹介
Ruby on Rails と私 at 関西Ruby会議08 After Party: 叡電LT 🚃
riscv64.rubyci.org internal at RubyKaigi 2025 LT
Rubyの日本語リファレンスマニュアルの現在と未来 (松江Ruby会議11) 2024-10-05
devise-two-factor gem を 4.x から 5.x に上げた話
docs.ruby-lang.org/ja/ の生成方法を (GitHub Actions に)変えた
Ubuntuのriscv64版をqemuで動かした at LILO&東海道らぐオフラインミーティング 2024-04-27
lilo.linux.or.jp を buster から bullseye に上げた
小規模個人アプリをRails 7.xにバージョンアップした話
Ruby リファレンスマニュアル改善計画 2022 進捗報告
fukuoka03-rubima-reboot-rubyist-magazine-reboot.pdf
rubykaigi2022-rurema-history-and-future.pdf
systemd 再入門
Ruby 3.0.0 コネタ集
livedoor天気API終了対応
Wireguard 実践入門
workflow,job,step の使い分けの基準を考える
あまり知られていないRubyの便利機能
Dockerのオフィシャルrubyイメージとは?
チャットボットのススメ
Dokku の紹介

Ruby 2.6 Update