SlideShare a Scribd company logo
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
Ruby&Railsアップデート
の戦い
2019.03.07 オタクが最新技術を追うライトニングトークイベント
株式会社虎の穴 開発室
JUNE-JUNE
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
今回話すこと
1. 自己紹介
2. はじめに
3. バージョンの変遷
4. なぜやるのか
5. やったこと紹介とポイント
6. バージョンアップやってみて
2
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
自己紹介
名:JUNE-JUNE
‣ 現在:N代目ファンティアマン
‣ 前職:スマフォアプリサーバーサイドエンジニア
   +プロジェクトリーダーみたいなことやってた
オタク
‣ えろげ:ランス大好き
‣ アニメ:毎週10本程度
‣ ブーム:某喪女漫画
3
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
はじめに
4
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
業務のとあるプロジェクト
Ruby 2.3.0
Rails 5.0.0
5
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
古いのでそろそろ
バージョンアップ
したいですね
6
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
バージョンの変更
7
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
バージョンの変遷
Ruby 2.3.0 → 2.5.3
Rails 5.0.0 → 5.2.1
付随する形で.....
activemodel 5.0.0 → 5.2.2
aws-sdk 2.3 → 3.0.1
redis 3.3.0 → 4.1.0
他にも盛りだくさん!
8
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
なぜやるのか
9
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
なぜやるのか
・使えるGem(ライブラリ)を増やすため
・プロジェクト全体を把握できるから
・Railsの知識がかなり身に付くから
・なんとなくやりたかった
10
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
やったこと紹介
と
ポイント解説
11
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
設定ファイル変更
12
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
設定ファイル変更
13
①「app:update」コマンドを実行
②既存の変更を保持するようにマージする
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
設定ファイル変更
14
・主にconfig/* のファイル群
・過去のGit編集履歴を見て、なぜ過去の人たちが
 「設定ファイルに変更を加えたか」を理解する
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
テーブルIDがBIGINTデフォルトになる
15
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
テーブルIDがBIGINTデフォルトになる
16
・5.1リリースノート「9 Active Record」参照
・マイグレーションでのテーブル生成時にて、
 idが「bigint」で生成される
①方法1:「id: :integer」のオプション指定
②方法2:「外部参照カラム」を「bigint」型にする
③方法3:schema.rbを再生成する
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
テーブルIDがBIGINTデフォルトになる
17
③方法3:schema.rbを再生成する
→テストコードを含めて対応する場合はこの方法がベター
→再生成すると、
 新しいバージョンに最適化されたschema.rbになる
(テーブルごとにid: :integerのオプションが
 自動で追加されている)
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
alias_method_chainは使えない
18
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
alias_method_chainは使えない
19
・メソッドの上書きをする手段
・5.0から非推奨。5.0リリースノート「10.2 非推奨」参照
・非推奨だが依存ライブラリなどの影響か、
 サーバ起動時に動作しなくなっている
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
20
※ActiveRecordをutf8mb4で動かすためのよくあるソース
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
外部依存のデフォルト設定が変わった
21
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
外部依存のデフォルト設定が変わった
22
・5.2リリースノート「8 Active Record 8.3 主な変更点」参照
・belongs_to+foreign_keyの設定をしており、
 外部キーのnilを許可する場合で発生
・オプションの付与が必須となる
belongs_to :user, class_name: 'User', foreign_key: :user_id
belongs_to :user, class_name: User, foreign_key: :user_id, optional: true
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
enumの変数でjoinが
ActiveRecordのメソッドと重複しているからNGとなる件
23
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
enumの変数でjoinが
ActiveRecordのメソッドと重複しているからNGとなる件
24
・かなりレアケースな事例
・5.2リリースノート「8 Active Record 8.3 主な変更点」参照
 『Relationのインスタンスメソッドと衝突するスコープ定義を許さないようになった。 』
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
25
$ bin/rails c                  
 >User.join
SELECT `users`.* FROM `users` FROM `users`.`status` = 0
enumの変数でjoinが
ActiveRecordのメソッドと重複しているからNGとなる件
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
26
$ bin/rails c                  
 >User.join
SELECT `users`.* FROM `users` FROM `users`.`status` = 0
アップデート後、このjoinが重複する
enumの変数でjoinが
ActiveRecordのメソッドと重複しているからNGとなる件
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
27
・enumの変数名を変えるしかない
・極力、よくある名前を変数につけないようにした方がいい
enumの変数でjoinが
ActiveRecordのメソッドと重複しているからNGとなる件
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
Redisの設定方法が変わります
28
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
Redisの設定方法が変わります
29
・リリースノート「2.6 ActiveSupport::Cache::RedisCacheStore」参照
・Railsが5.2より公式でキャッシュ機構をサポート
・公式サポートのRedis設定方法じゃないと動かなくなった
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
30
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
31
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
rails-footnotesが動かない\(^o^)/
32
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
rails-footnotesとは
33
・開発デバッグのライブラリ
・上記のようなフッターが設定した各画面に追加される
・実行されているSQLや処理時間を見ることができる
rails-footnotesが動かない\(^o^)/
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
rails-footnotesが動かない\(^o^)/
34
・サーバー起動すると上記のエラーがでた
「instance_writter」でプロジェクト内を検索しても出てこない
 ↓
「Gem」で取り込んでいる何かが原因と推測
 ↓
 1つ1つのGemを取り外し、エラーが出なくなるまで検証
`mattr_accessor` : unknown keyword: instance_writter (AngumentError)
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
35
weblioの検索結果より
rails-footnotesが動かない\(^o^)/
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
36
・変数名のタイポミス修正を放置しており、Rails5.2からは動作しない
 ※Issueでも突っ込まれてる
 ※利用者からpullリクエストが出されているが、リリースされていない
https://github.com/josevalim/rails-footnotes/issues/153
rails-footnotesが動かない\(^o^)/
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
37
・「Latest commit 0ca9f4c on 21 Jul 2016」で
 3年もバージョンアップをしていない
・保守されていないGemなので、コメントアウト
rails-footnotesが動かない\(^o^)/
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
テストコード
38
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
テストコード
39
・Railsアップデートにおいては必須
・500あるテストコード結果のうち、300件が失敗
・不足している処理部分のテストを追加実装する
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
バージョンアップ作業やってみて
40
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
バージョンアップ作業やってみて
41
・Railsの勉強になる
・日本語の参考サイトが存在しないこと多々あり
・古すぎるGemを切り捨てる勇気も必要
・プロジェクト初期の成り立ちが紐解けてくる
・テストコードの必要性が身に沁みる
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
しかし・・・
バージョンアップ作業、まだまだあります
42
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
虎の穴
Copyright © 2019 Toranoana Inc. All Rights Reserved.
続きは(そのうち)同人誌2.0にて!
43

More Related Content

PDF
AWS Elemental MediaConvert で動画変換
PDF
店舗の滞在率を知りたい!
PDF
【Alexa】スキル内課金でチャリンチャリンしてみた
PDF
20200422 lt everyones_java
PDF
今月のレッツゴー陰陽師!
PPTX
みずほ銀行システム統合 苦闘の19年史 史上最大のITプロジェクト「3度目の正直」
PDF
【LT資料】ラムダ式でDSL
PDF
サーバサイドKotlinへの入門 Ktor編
AWS Elemental MediaConvert で動画変換
店舗の滞在率を知りたい!
【Alexa】スキル内課金でチャリンチャリンしてみた
20200422 lt everyones_java
今月のレッツゴー陰陽師!
みずほ銀行システム統合 苦闘の19年史 史上最大のITプロジェクト「3度目の正直」
【LT資料】ラムダ式でDSL
サーバサイドKotlinへの入門 Ktor編

Similar to 20190307_Ruby&Railsアップデートの戦い (15)

PDF
Alexaの電卓スキルを作ってみる
PDF
[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)
PDF
技術書典の被チェック数を計測してみた
PDF
Dockerで始める開発環境構築
PPTX
Pepper君で即売会のお手伝い
PDF
俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
PDF
Alexa-hostedスキルを使って 最速でオウム返しスキルを作る
PDF
Yahoo! JAPANの不正投稿対策 #yjmu
PPTX
最近のヤフオク!におけるAbuser対策
PPTX
ゆるドラ運営記
PPTX
SpiderAFにおける機械学習を使った不正検知
PDF
「カイゼン・ジャーニー」の紹介
PPTX
YJTC18 C-1 Kotlin導入の状況と展望
PDF
【LT資料】GoでつくるCUIツール
PDF
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Alexaの電卓スキルを作ってみる
[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)
技術書典の被チェック数を計測してみた
Dockerで始める開発環境構築
Pepper君で即売会のお手伝い
俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
Alexa-hostedスキルを使って 最速でオウム返しスキルを作る
Yahoo! JAPANの不正投稿対策 #yjmu
最近のヤフオク!におけるAbuser対策
ゆるドラ運営記
SpiderAFにおける機械学習を使った不正検知
「カイゼン・ジャーニー」の紹介
YJTC18 C-1 Kotlin導入の状況と展望
【LT資料】GoでつくるCUIツール
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Ad

More from 虎の穴 開発室 (20)

PDF
FizzBuzzで学ぶJavaの進化
PDF
Railsのデバッグ どうやるかを改めて確認する
PDF
虎の穴ラボ エンジニア採用説明資料 .pdf
PDF
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
PDF
toranoana.deno #6 アジェンダ 採用説明
PDF
Deno 向け WEB 開発用のツールを作ったので 紹介します
PDF
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
PDF
GCPの画像認識APIの紹介
PDF
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
PDF
GitHub APIとfreshで遊ぼう
PDF
通販開発部の西田さん「通販開発マネジメントの5ルール」
PDF
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
PDF
セキュリティを強化しよう!CloudArmorの機能解説
PDF
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
PDF
Amplify Studioを使ってみた
PDF
いいテスト会 (スプリントレビュー) をやろう!
PDF
【Saitama.js】Denoのすすめ
PDF
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
PDF
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
PDF
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
FizzBuzzで学ぶJavaの進化
Railsのデバッグ どうやるかを改めて確認する
虎の穴ラボ エンジニア採用説明資料 .pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
toranoana.deno #6 アジェンダ 採用説明
Deno 向け WEB 開発用のツールを作ったので 紹介します
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
GCPの画像認識APIの紹介
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
GitHub APIとfreshで遊ぼう
通販開発部の西田さん「通販開発マネジメントの5ルール」
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
セキュリティを強化しよう!CloudArmorの機能解説
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
Amplify Studioを使ってみた
いいテスト会 (スプリントレビュー) をやろう!
【Saitama.js】Denoのすすめ
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
Ad

20190307_Ruby&Railsアップデートの戦い