とあるプロジェクトでRubyとRailsのアップデートに挑戦している最中のお話です。 2019/3/7にとらのあな主催のLT用に作成したスライドとなります。アップデートする際に変更したことや、ポイントを解説しています。
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴虎の穴Copyright © 2019 Toranoana Inc. All Rights Reserved.Ruby&Railsアップデートの戦い2019.03.07 オタクが最新技術を追うライトニングトークイベント株式会社虎の穴 開発室JUNE-JUNE
View Slide
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴虎の穴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.0Rails 5.0.05
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴虎の穴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.3Rails 5.0.0 → 5.2.1付随する形で.....activemodel 5.0.0 → 5.2.2aws-sdk 2.3 → 3.0.1redis 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_idbelongs_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.joinSELECT `users`.* FROM `users` FROM `users`.`status` = 0enumの変数でjoinがActiveRecordのメソッドと重複しているからNGとなる件
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴虎の穴Copyright © 2019 Toranoana Inc. All Rights Reserved.26$ bin/rails c >User.joinSELECT `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.35weblioの検索結果よりrails-footnotesが動かない\(^o^)/
虎の穴 虎の穴 虎の穴 虎の穴 虎の穴虎の穴Copyright © 2019 Toranoana Inc. All Rights Reserved.36・変数名のタイポミス修正を放置しており、Rails5.2からは動作しない ※Issueでも突っ込まれてる ※利用者からpullリクエストが出されているが、リリースされていないhttps://github.com/josevalim/rails-footnotes/issues/153rails-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