Upgrade your Rails

Ruby / Ruby on Rails ビギナーズ勉強会 第12回

2016/4/10

宇都宮 諒(@ryo511)

自己紹介

  • 宇都宮 諒(うつのみや りょう)
  • Twitter, Facebook等では「ryo511」
  • Webアプリケーションエンジニア
  • 業務で主に使ってる​言語はPHP, JavaScript, C#
  • IDEが好き
    • PhpStorm, Visual Studio, RubyMine等
      • ※IDEは「Integrated Development Environment(統合開発環境)」の略称。開発ツールをひとまとめにしたソフトウェア

Railsアプリのバージョン

  • フレームワークのバージョンは固定されるものではない
  • バグの修正は日常茶飯事
  • 脆弱性が見つかってバージョンアップが必要になることも
  • つい最近(2016/3/11)も、Railsの脆弱性が発見された
    • CVE-2016-0753
  • Rubyの脆弱性が見つかることも
    • CVE-2015-7551(2015年12月)
  • 学習環境はバージョン固定でもいいが、本番環境は適切にバージョンアップを行う必要がある

どのバージョンまで上げれば?

  • 「公式サポートが続いていること」
  • 「脆弱性が発見されていないこと」
  • 以上の条件を満たすバージョンまで上げるべき
    • Ruby: 2.1.8/2.2.4/2.3.0
    • Rails: 4.1.14.1+/4.2.5.1+/5.0.0.beta1.1+

Railsのライブラリ管理

  • Rubygems(gem)
    • Ruby組み込みのライブラリ管理システム
  • Bundler
    • プロジェクト単位でライブラリの依存関係を管理
  • Gemfile
    • Bundlerが使用する設定ファイル
    • バージョン番号の指定も可能
    • 「gem 'rails', '4.1.5'」でRails 4.1.5を指定できる
  • Gemfile.lock
    • プロジェクトにインストールされているバージョンを保存するファイル

bundlerのコマンド

  • bundle install
    • Gemfile.lockに書いてあるバージョンをインストール
    • Gemfile.lockに無ければ新規インストール
    • 本番デプロイではこれを使う
  • bundle update
    • Gemfileに書いてある制限の範囲内で、最新のバージョンをインストール
    • Gemfie.lockが更新される
    • バージョンアップ時に使う

バージョンアップ手順

  • gitのブランチを切って作業する
  • Gemfileを修正する
    • gem 'rails', '4.2.2' → gem 'rails'
    • バージョン指定がない => 最新安定版が入る
  • 「bundle update」を実行する
  • 壊れてないか確認(bundle exec rake test + 手動確認)
  • 大丈夫そうならmerge & push
  • 以上!
    • マイナーバージョンアップならコードは無変更でいけることが多い?

せっかくなのでRuby 2.3を…

  • 「最新の Ruby が一番いい Ruby」
  • rvmの場合
    • rvm get head # rvmを最新版に更新
    • rvm install 2.3.0 # 2.3.0をインストール
  • Gemfile修正
    • ruby '2.3.0'
  • bundle update
  • 大丈夫そうなら本番デプロイ(git push heroku)

俺のRailsバージョンアップがこんなに簡単なはずが(ry

  • Railsのバージョンアップは大変とよく聞くけど…
  • Rails Tutorialアプリで、↓のバージョンアップは簡単
    • Ruby 2.1.5 => 2.3.0
    • Rails 4.2.2 => 4.2.6
  • みんなもやってみよう!
  • ハマった時はハマった時で、何かしらの知見は得られるはず

ご清聴ありがとう

ございました

Upgrade your Rails

By Ryo Utsunomiya

Upgrade your Rails

Ruby / Ruby on Rails ビギナーズ 第12回

  • 694
Loading comments...

More from Ryo Utsunomiya