Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

とあるプロジェクトでRubyとRailsのアップデートに挑戦している最中のお話です。 2019/3/7にとらのあな主催のLT用に作成したスライドとなります。アップデートする際に変更したことや、ポイントを解説しています。

More Decks by 虎の穴ラボ株式会社

Other Decks in Technology

Transcript

  1. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    Ruby&Railsアップデート の戦い 2019.03.07 オタクが最新技術を追うライトニングトークイベント 株式会社虎の穴 開発室 JUNE-JUNE
  2. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    今回話すこと 1. 自己紹介 2. はじめに 3. バージョンの変遷 4. なぜやるのか 5. やったこと紹介とポイント 6. バージョンアップやってみて 2
  3. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    自己紹介 名:JUNE-JUNE ‣ 現在:N代目ファンティアマン ‣ 前職:スマフォアプリサーバーサイドエンジニア    +プロジェクトリーダーみたいなことやってた オタク ‣ えろげ:ランス大好き ‣ アニメ:毎週10本程度 ‣ ブーム:某喪女漫画 3
  4. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 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
  5. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    なぜやるのか ・使えるGem(ライブラリ)を増やすため ・プロジェクト全体を把握できるから ・Railsの知識がかなり身に付くから ・なんとなくやりたかった 10
  6. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    設定ファイル変更 13 ①「app:update」コマンドを実行 ②既存の変更を保持するようにマージする
  7. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    設定ファイル変更 14 ・主にconfig/* のファイル群 ・過去のGit編集履歴を見て、なぜ過去の人たちが  「設定ファイルに変更を加えたか」を理解する
  8. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 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を再生成する
  9. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    テーブルIDがBIGINTデフォルトになる 17 ③方法3:schema.rbを再生成する →テストコードを含めて対応する場合はこの方法がベター →再生成すると、  新しいバージョンに最適化されたschema.rbになる (テーブルごとにid: :integerのオプションが  自動で追加されている)
  10. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    alias_method_chainは使えない 19 ・メソッドの上書きをする手段 ・5.0から非推奨。5.0リリースノート「10.2 非推奨」参照 ・非推奨だが依存ライブラリなどの影響か、  サーバ起動時に動作しなくなっている
  11. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 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
  12. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    enumの変数でjoinが ActiveRecordのメソッドと重複しているからNGとなる件 23
  13. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    enumの変数でjoinが ActiveRecordのメソッドと重複しているからNGとなる件 24 ・かなりレアケースな事例 ・5.2リリースノート「8 Active Record 8.3 主な変更点」参照  『Relationのインスタンスメソッドと衝突するスコープ定義を許さないようになった。 』
  14. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 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となる件
  15. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 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となる件
  16. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    27 ・enumの変数名を変えるしかない ・極力、よくある名前を変数につけないようにした方がいい enumの変数でjoinが ActiveRecordのメソッドと重複しているからNGとなる件
  17. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    Redisの設定方法が変わります 29 ・リリースノート「2.6 ActiveSupport::Cache::RedisCacheStore」参照 ・Railsが5.2より公式でキャッシュ機構をサポート ・公式サポートのRedis設定方法じゃないと動かなくなった
  18. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    rails-footnotesとは 33 ・開発デバッグのライブラリ ・上記のようなフッターが設定した各画面に追加される ・実行されているSQLや処理時間を見ることができる rails-footnotesが動かない\(^o^)/
  19. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    rails-footnotesが動かない\(^o^)/ 34 ・サーバー起動すると上記のエラーがでた 「instance_writter」でプロジェクト内を検索しても出てこない  ↓ 「Gem」で取り込んでいる何かが原因と推測  ↓  1つ1つのGemを取り外し、エラーが出なくなるまで検証 `mattr_accessor` : unknown keyword: instance_writter (AngumentError)
  20. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    36 ・変数名のタイポミス修正を放置しており、Rails5.2からは動作しない  ※Issueでも突っ込まれてる  ※利用者からpullリクエストが出されているが、リリースされていない https://github.com/josevalim/rails-footnotes/issues/153 rails-footnotesが動かない\(^o^)/
  21. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    37 ・「Latest commit 0ca9f4c on 21 Jul 2016」で  3年もバージョンアップをしていない ・保守されていないGemなので、コメントアウト rails-footnotesが動かない\(^o^)/
  22. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    テストコード 39 ・Railsアップデートにおいては必須 ・500あるテストコード結果のうち、300件が失敗 ・不足している処理部分のテストを追加実装する
  23. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    バージョンアップ作業やってみて 41 ・Railsの勉強になる ・日本語の参考サイトが存在しないこと多々あり ・古すぎるGemを切り捨てる勇気も必要 ・プロジェクト初期の成り立ちが紐解けてくる ・テストコードの必要性が身に沁みる
  24. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴 Copyright © 2019 Toranoana Inc. All Rights Reserved.

    しかし・・・ バージョンアップ作業、まだまだあります 42