Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
Ruby�2.4�/�
Rails�5.0に上げ
た際のパッチ5選
表参道.rb�#19
Sansan株式会社
2017-02-02�(Thu)
伊藤�浩⼀�(@koic)
(株)永和システムマネジメント
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
わたし
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
今⽇の話
アプリケーションコードは巨⼈
の肩に乗った氷⼭の⼀角
✓
"Gemfile.lock�に記されている
コードはプロジェクトのコード
としてメンテナンス対象であ
る"
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
まとめ
アップグレードの道のりは1年前
にははじまっている
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
アップグレードへの症状例
分かりやすいのは、そもそも�
rails�server�が起動しない
✓
自動テストをパスしない✓
アップグレードすれば噛み合わ
せの悪いライブラリは出てきた
りする
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
upstreamへの還元5選
bkeepers/dotenv#251✓
cowboyd/therubyracer#413✓
rsim/oracle-
enhanced#1084
✓
kubo/ruby-oci8#144✓
sferik/rails̲admin#2789✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
2016年3⽉
https://github.com/
bkeepers/dotenv/pull/251
✓
Fix�a�failure�spec�in�ruby�
2.4.0dev
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
diff
������������
������������������
���������������������������������������������������������������������������
����������������������������������������������������������������������
����������
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
期待する振る舞いが分からな
い
https://bugs.ruby-lang.org/
issues/12121�で問い合わせ
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
最⼩ケースの作成
���������
��������������
���
���������
��������������
��������������
���
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
結果
Ruby�2.3.0�...�p�
M2.constants�#�=>�[:B,�:A]
✓
Ruby�2.4.0�...�p�
M2.constants�#�=>�[:A,�:B]
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
回答から抜粋
これは、ドキュメントの問題
だ と思い ま す 。
Module#constantsの戻り順
を保障したことはないし、こ
れからも保障されないと思い
ます。今回は⾼速化の⼀環と
して順序が変わりましたが、
今後も同様のことは起き得ま
す。
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
どういうことだったか?
値を割り当ててから実⾏という
流れが、値を割り当てる前に実
⾏になってエラー
✓
Module#constants�の戻り値
の順序が変わっていた
✓
仕様�(⾼速化の⼀環で順序が変
わったが、そもそも順序の保証
はない)
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
2016年5⽉
https://github.com/
cowboyd/therubyracer/
pull/413
✓
Support�for�unified�Integer�
class�in�Ruby�2.4+
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
diff
�����������������������������������������������������������������������������������������
������������������������������������������������������������������������������������������
����������������������
�������������������������������������������������
�������
�����
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
どういうものだったか?
Ruby�2.4�では�Fixnum�=>�
Integer�となり、Integer�に対
応する�module�がなくてエラ
ー。
✓
2017年1⽉にリリースされ
た。
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
2016年12⽉
https://github.com/rsim/
oracle-enhanced/pull/1084
✓
Fix�ORA-00933�error�when�
executing�`rails�
db:schema:load`
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
diff�(1)
��������������������������
�������
���������������������������������������������������
���
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
diff�(2)
�������������������������������������������
������������������������������������������������������������������
������������������������������������������������������������������������������������
����������������������������
���������������������������������������������������������������
����������������������
�����������������������������
������������������������������������������������������
������������������������������������������������������������������������
���������������������������������
��������
������������������������������
���������������������������������������������������������������������������
��������������������������������
������������������������������������������������������������������������
���������������������������
����������
��������������������������������������������������������������������������������
�����������������������������������������������������������������������
���������
�������
�����
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
どういうものだったか?
`rails�db:migrate`�だと積み重
ねただけのマイグレーションが
実⾏されて遅い
✓
db/schema.rb�を共有して、
`rails�db:schema:load`�実⾏�
(テスト/CI環境)
✓
Rails�5�で導⼊されたマルチイ
ンサート対応が必要で�`rails�
db:schema:load`�でエラー
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
2016年12⽉
https://github.com/kubo/
ruby-oci8/pull/144
✓
Fix�invalid�value�for�
BigDecimal�in�Ruby�2.4.0+
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
diff
違いが分かりますか?
�
�������������������
���������������������������������
�������������������������������������������������������������������������
�������������������������������������������������������������������������
�������������������������
�����������������������������������
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
どういうものだったか?
`rake�spec`�を実⾏してエラ
ーになった?�(記憶がおぼろ)
✓
Ruby�2.3�でパスしていた�1.E
+00�という値が、Ruby�2.4�
だとパスしなかった
✓
仕様が分からないので、ruby/
decimal�に�ISSUE�を書いて回
答をもらう
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
2016年12⽉
https://github.com/sferik/
rails̲admin/pull/2789
✓
Fix�#encoding�error�by�
oracle̲enhanced
✓
@ojiryメンバーによるパッチ✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
diff
������������
���������������������������������������������������������
���������������������
�������������������������������������������������������������������������������������������������
�����������������
����������������������������������������������������������������������������������
��������������������������
������������������������������������������������������������������������������������������������
��������
�������������������������������������������������������������������������������������������
�������
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
どういうものだったか?
PostgreSQL�/�MySQL�/�
SQLite�(?)�でない�RDBMS�は
別途対応が必要だった
✓
PR�を⾒てもらうサポートをす
る
✓
リポジトリの所有者よりも最近
マージボタンを押すような活動
しているコミッターにメンショ
ンする
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
まだ時間
はありま
すね?
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
Kaminari�1.0.0
https://github.com/sferik/
rails̲admin/pull/2810
✓
Loosen�the�dependency�
version�of�Kaminari�(1.0.0)
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
diff
�����������������������������������������������������
���������������������������������������������������
���������������������������������������������
������������������������������������������������������
�����������������������������������������������
���������������������������������������������
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
どういうものだったか?
gemspec�での縛りを緩めて、
CI�用に�Gemfile�での縛りを作
るお仕事
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
Conclusion
kamipo名⾔�"困ってる⼈がい
る問題が直るのではなく直す気
のある⼈がいる問題が直る"
✓
(汎用的なフレームワークは難
しくても)�特化されたアプリケ
ーション起点でのエラーなら分
かりやすい
✓
多⼈数が数年に渡って関わるよ
うなアプリケーションでは特に
アップグレード重要
✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
Values
最新の安定版�Rails�に速く乗る✓
自信を持ってプロジェクト(へ
の加⼊)を進められる
✓
新しいバージョンを使うこと
で�EOL�に出会わずにすむ
✓
"Ruby�はバージョンを上げる
だけで速くなる"
✓
No�hate✓
Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9
まとめ
アップグレードの道のりは1年前
にははじまっている

Ruby 2.4 / Rails 5.0に上げた際のパッチ5選