$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

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

    View Slide

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

    View Slide

  4. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    はじめに
    4

    View Slide

  5. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    業務のとあるプロジェクト
    Ruby 2.3.0
    Rails 5.0.0
    5

    View Slide

  6. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    古いのでそろそろ
    バージョンアップ
    したいですね
    6

    View Slide

  7. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    バージョンの変更
    7

    View Slide

  8. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    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

    View Slide

  9. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    なぜやるのか
    9

    View Slide

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

    View Slide

  11. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    やったこと紹介

    ポイント解説
    11

    View Slide

  12. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    設定ファイル変更
    12

    View Slide

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

    View Slide

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

    View Slide

  15. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    テーブルIDがBIGINTデフォルトになる
    15

    View Slide

  16. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    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を再生成する

    View Slide

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

    View Slide

  18. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    alias_method_chainは使えない
    18

    View Slide

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

    View Slide

  20. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    20
    ※ActiveRecordをutf8mb4で動かすためのよくあるソース

    View Slide

  21. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    外部依存のデフォルト設定が変わった
    21

    View Slide

  22. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    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

    View Slide

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

    View Slide

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

    View Slide

  25. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    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となる件

    View Slide

  26. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    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となる件

    View Slide

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

    View Slide

  28. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    Redisの設定方法が変わります
    28

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  32. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    rails-footnotesが動かない\(^o^)/
    32

    View Slide

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

    View Slide

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

    View Slide

  35. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    35
    weblioの検索結果より
    rails-footnotesが動かない\(^o^)/

    View Slide

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

    View Slide

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

    View Slide

  38. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    テストコード
    38

    View Slide

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

    View Slide

  40. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    バージョンアップ作業やってみて
    40

    View Slide

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

    View Slide

  42. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    しかし・・・
    バージョンアップ作業、まだまだあります
    42

    View Slide

  43. 虎の穴 虎の穴 虎の穴 虎の穴 虎の穴
    虎の穴
    Copyright © 2019 Toranoana Inc. All Rights Reserved.
    続きは(そのうち)同人誌2.0にて!
    43

    View Slide