2017年3月20日月曜日

【Rails5.1.0beta1】 Rails5.0.1からRails5.1.0beta1にアップグレードする。 Rails5.1.0更新の準備と調査

  • 公開日:2017年03月20日
  • 最終更新日:2017年05月05日

記事概要

rails5.0.1からRails5.1.0beta1にアップグレードした時の方法をまとめた記事です。

環境

  • centos6.5
  • Rails5.0.1 → Rails5.1.0beta1
  • ruby2.3.0 → ruby2.4.0
  • rbenv
  • unicorn
  • whenever

はじめに

Rails5.1.0beta1がリリースされたので、Rails5.1.0の準備を開始しました。
今回は変更点が多いので、Rails5.1.0beta1の状態ではリリースせず、Rails5.1.0になってからリリースをしたいと思います。
また、この機会に色々とRailsアプリのリファクタリングをしていこうと思っています。
ずっとAndroid開発で放置状態だったので。出し惜しみしないで、ブログに情報も載せていこうと思います。

Rails5.1.0の変更点

Rails5.1.0は、Rails5.0.1と比較すると大きく変わりました。変更点の概要を以下に記述します。

  • YarnでjavaScriptを管理
  • webpackでビルドが可能
  • jQueryが不要になった(rails-ujsに書き直された)
  • 機能テスト用のライブラリCapybaraが正式にサポート
  • 暗号の管理方法変更
  • routesの改良
  • form_withでform_tag / form_forを統一
  • 4.x以前はサポートしない

凄まじい量の変化です。なので、今から少しづつ対応していきましょう。

作業内容

今回のRails5.1.0のアップグレードでは、以下のタスクを行っていく予定です。

  • jQueryをrails-ujsに置き換える
  • Capybaraの導入
  • CIの設定
  • 暗号の管理方法変更
  • routesの改善
  • form_withでform_tag / form_forを統一
  • Ruby2.4のコードにリファクタリング

最低限でこれくらいありますね。Ruby2.4のFixnumの改善も対応したっぽいので、コードも本格的に修正します。頭痛くなってきた。。。

移行用の作業branchの作成

gitでrails5.1.0beta1移行用の作業ブランチを作成します。

terminal

cd {project_folder}
git branch feature/rails5.1.0beta1

checkoutでブランチを切り替えます。

terminal

git checkout feature/rails5.1.0beta1

準備完了です。

Gemfile修正

まずGemfileを修正します。

{project_folder}/Gemfile

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '5.0.1'

↓

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '5.1.0.beta1'

gem 'rails', '5.1.0.beta1'に修正し、updateします。

terminal

// update
bundle update 

bundle updateは、全ての依存関係をインストール・ダウンロードし直すことができます。

terminal

Fetching git://github.com/capistrano/rbenv.git
Fetching gem metadata from https://rubygems.org/..............
Fetching version metadata from https://rubygems.org/...
Fetching dependency metadata from https://rubygems.org/..
Resolving dependencies.................
Using rake 12.0.0
Installing concurrent-ruby 1.0.5 (was 1.0.3)
Installing i18n 0.8.1 (was 0.7.0)
Using minitest 5.10.1
Installing thread_safe 0.3.6 (was 0.3.5)
Installing builder 3.2.3 (was 3.2.2)
Installing erubi 1.6.0
Using mini_portile2 2.1.0
Using rack 2.0.1
Installing nio4r 2.0.0 (was 1.2.1) with native extensions
Using websocket-extensions 0.1.2
Using mime-types-data 3.2016.0521
Installing arel 8.0.0 (was 7.1.4)
Installing net-ssh 4.1.0 (was 3.2.0)
Using ast 2.3.0
Using debug_inspector 0.0.2
Using bundler 1.11.2
Installing byebug 9.0.6 (was 9.0.5) with native extensions
Installing capistrano-harrow 0.5.3 (was 0.5.2)
Using chronic 0.10.2
Installing coffee-script-source 1.12.2 (was 1.10.0)
Using execjs 2.7.0
Using method_source 0.8.2
Using thor 0.19.4
Using database_cleaner 1.5.3
Installing diff-lcs 1.3 (was 1.2.5)
Using multipart-post 2.0.0
Installing hashie 3.5.5 (was 3.4.4)
Using multi_json 1.12.1
Installing json 1.8.6 (was 1.8.3) with native extensions
Installing jwt 1.5.6 (was 1.5.4)
Installing kaminari-core 1.0.1
Installing kgio 2.11.0 (was 2.10.0) with native extensions
Installing libv8 3.16.14.19 (was 3.16.14.15)
Installing multi_xml 0.6.0 (was 0.5.5)
Installing mysql2 0.4.5 (was 0.4.4) with native extensions
Using powerpack 0.1.1
Installing rainbow 2.2.1 (was 2.1.0) with native extensions
Installing raindrops 0.17.0 (was 0.16.0) with native extensions
Installing rdoc 4.3.0 (was 4.2.2)
Using ref 2.0.0
Using rspec-support 3.5.0
Using ruby-progressbar 1.8.1
Installing unicode-display_width 1.1.3 (was 1.1.0)
Installing sass 3.4.23 (was 3.4.22)
Installing tilt 2.0.7 (was 2.0.5)
Using turbolinks-source 5.0.0
Using tzinfo 1.2.2
Installing sitemap_generator 5.3.1 (was 5.1.0)
Installing nokogiri 1.7.0.1 (was 1.6.8.1) with native extensions
Using rack-test 0.6.3
Using sprockets 3.7.1
Installing websocket-driver 0.6.5 (was 0.6.4) with native extensions
Using mime-types 3.1
Using net-scp 1.2.1
Installing parser 2.4.0.0 (was 2.3.1.2)
Using binding_of_caller 0.7.2
Using whenever 0.9.7
Using coffee-script 2.4.1
Installing uglifier 3.1.9 (was 3.0.0)
Installing faraday 0.11.0 (was 0.9.2)
Installing omniauth 1.6.1 (was 1.3.1)
Installing unicorn 5.2.0 (was 5.1.0) with native extensions
Installing sdoc 0.4.2 (was 0.4.1)
Installing therubyracer 0.12.3 (was 0.12.2) with native extensions
Installing rspec-core 3.5.4 (was 3.5.1)
Using rspec-expectations 3.5.0
Using rspec-mocks 3.5.0
Installing turbolinks 5.0.1 (was 5.0.0)
Installing activesupport 5.1.0.beta1 (was 5.0.1)
Using loofah 2.0.3
Using mail 2.6.4
Installing sshkit 1.12.0 (was 1.11.1)
Installing rubocop 0.47.1 (was 0.41.2)
Installing oauth2 1.3.1 (was 1.2.0)
Using webpay 3.2.3
Installing rails-dom-testing 2.0.2 (was 2.0.1)
Using globalid 0.3.7
Installing activemodel 5.1.0.beta1 (was 5.0.1)
Installing factory_girl 4.8.0 (was 4.7.0)
Installing jbuilder 2.6.3 (was 2.5.0)
Installing spring 2.0.1 (was 1.7.2)
Using rails-html-sanitizer 1.0.3
Installing airbrussh 1.1.2 (was 1.0.2)
Using omniauth-oauth2 1.4.0
Installing activejob 5.1.0.beta1 (was 5.0.1)
Installing activerecord 5.1.0.beta1 (was 5.0.1)
Installing actionview 5.1.0.beta1 (was 5.0.1)
Using capistrano 3.5.0
Using omniauth-google-oauth2 0.4.1
Installing kaminari-activerecord 1.0.1
Installing actionpack 5.1.0.beta1 (was 5.0.1)
Installing kaminari-actionview 1.0.1
Using capistrano-bundler 1.1.4
Installing capistrano-maintenance 1.2.0 (was 1.0.0)
Using capistrano-rbenv 2.1.0 (was 2.0.4) from git://github.com/capistrano/rbenv.git (at master@4483faf)
Using capistrano-ssh-doctor 1.0.0
Using capistrano3-unicorn 0.2.1
Installing actioncable 5.1.0.beta1 (was 5.0.1)
Installing actionmailer 5.1.0.beta1 (was 5.0.1)
Installing railties 5.1.0.beta1 (was 5.0.1)
Using sprockets-rails 3.2.0
Installing rails-controller-testing 1.0.1 (was 0.1.1)
Installing kaminari 1.0.1 (was 0.17.0)
Installing capistrano-rails 1.2.3 (was 1.1.7)
Using coffee-rails 4.2.1
Installing factory_girl_rails 4.8.0 (was 4.7.0)
Installing jquery-rails 4.2.2 (was 4.1.1)
Installing rails-i18n 5.0.3 (was 5.0.0)
Installing rspec-rails 3.5.2 (was 3.5.1)
Using teaspoon 1.1.5
Installing rails 5.1.0.beta1 (was 5.0.1)
Using sass-rails 5.0.6
Using web-console 2.3.0
Using teaspoon-jasmine 2.3.4
Bundle updated!

一発でうまくいきました。5.0.1に対応してあれば、bundle updateはひっかからないようです。

すべてのgemの更新に成功したら、updateの準備は完了です。

Upgrade to Rails5.1.0beta1

Gemファイルの導入が完了したら、rails app:updateで設定ファイルを更新します。

terminal

bundle exec rails app:update

ファイル更新の有無を聞かれるので、更新が必要なファイルのみ変更します。
私の環境では以下のようにしました。

  • config/routes.rb → 更新しない
  • config/application.rb → 更新しない
  • config/secrets.yml → 更新する
  • config/cable.yml → 更新する
  • config/puma.yml → 更新する
  • config/environments/development.rb → 更新する
  • config/environments/production.rb → 更新する
  • config/environments/test.rb → 更新する
  • config/initializers/assets.rb → 更新する
  • config/initializers/new_framework_defaults.rb → 更新しない
  • bin/setup → 更新しない
  • bin/update → 更新しない

diffで確認したところ、変更点で気をつける点は以下です。

config/environments/development.rb

ActiveSupport::EventedFileUpdateCheckerがデフォルトで有効になっています。
vagrantやdocker等の仮想環境で開発をしている場合は無効にしておいた方が良いです。更新が反映されなくなることがあります。

config/environments/development.rb
  config.file_watcher = ActiveSupport::EventedFileUpdateChecker

  # config.file_watcher = ActiveSupport::EventedFileUpdateChecker 

config.assets.digest = trueが削除さています。
これも不要みたいです。毎回コンパイルされるのかな。。。

config/environments/production.rb

config.read_encrypted_secrets = trueが追加されました。
暗号は管理方法が変わりました。

Rails5.1.0beta1 Encrypted secretsの対応

下記のやり方だと、Rails5.1.0では動作しませんでした。既存のsecrets.ymlでも動くので、Encrypted secretsの導入は少し待ってからの方が良いかもしれません。これだと管理が煩雑になって、デメリットの方が多い気がします。

暗号の管理方法が変更されたので対応します。terminalを開きます。

terminal
bin/rails secrets:setup

config/secrets.yml.key
append  .gitignore
create  config/secrets.yml.enc

You can edit encrypted secrets with `bin/rails secrets:edit`.
Add this to your config/environments/production.rb:
config.read_encrypted_secrets = true

これだけです。パスワードの入ったsecrets.yml.keyファイルを.gitignoreに自動で追加してくれます。 config/secrets.yml.encはgitで管理可能です。pushしてもOKです。

また、config/environments/production.rbにconfig.read_encrypted_secrets = trueが追加されていることも確認してください。
あとは、本番でconfig/secrets.yml.keyのuploadを忘れないようにしましょう。開発環境で有効にする必要はないとは思いますが、本番と同じにしたい人はconfig.read_encrypted_secrets = trueを追加しても良いと思います。

Rails5.1.0beta1 rails-ujs対応

rails-ujsを導入すれば、jQueryが不要になります。jQueryなしで動くように書き直されたようです。素晴らしい!!

デバッグ中にバグが出ました。jqueryに依存しているところは書き直しが必要です。

config/environments/development.rb
# Use jquery as the JavaScript library
#gem 'jquery-rails'

gem 'rails-ujs'

インストールします。

terminal

// update
bundle update 

Installing rails-ujs 0.1.0

インストールしたら、application.jsを修正します。

assets/javascript/application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

↓

//= require rails-ujs
//= require turbolinks
//= require_tree .

Rails5.1.0beta1起動

アプリを起動します。

terminal

rbenv exec bundle exec rails s -b 0.0.0.0
=> Booting WEBrick
=> Rails 5.1.0.beta1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2017-03-20 14:24:05] INFO  WEBrick 1.3.1
[2017-03-20 14:24:05] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2017-03-20 14:24:05] INFO  WEBrick::HTTPServer#start: pid=10639 port=3000

コンソールにRails 5.1.0.beta1 applicationが表示され、画面が表示されれば成功です。

私の環境では問題なく動いているようです。jqueryがなくなって、rails-ujsになったので、動きが軽くなった気がします。計測はしていませんけどね。
だいたいここまでで3時間くらいです。とはいえ、ここからが本番ですが。

まとめ

Rails5.0.1からRails5.1.0beta1のアップデートは、多くの変更が必要になります。
4.x以下は切り捨てられるので、早めに更新の準備をしましょう。また、Fixnumの改善も対応済み(らしい)ので、この機会にRuby2.4.0へのリファクタリングも済ませてしまうと良いでしょう。

タスクが完了するまで継続的にブログも更新します。

以上です。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2017年3月11日土曜日

2017年3月に読んだ本 2/20 - 3/11日まで

  • 公開日:2017年03月11日

目的

ネットの情報がテレビ化してつまらなくなってきたので、2017年からは再び読書量を増やそうと思います。
読書記録のまとめです。

前回の記録はこちらです。

今年(2017年)の読書数 : 現在 20冊(2017/01/01 - 2017/03/11)

RxJavaリアクティブプログラミング

  • 開始:2017年02月20日 - 終了 : 2017年02月24日
  • 評価 : A

丁寧に説明されていますが、リアクティブプログラミングの経験がないと、理解できない可能性が高いと思います。逆に、リアクティブプログラミングの経験がある人には良書です。Rxjavaを使う開発時には、側に置いておきたい本です。

詳細な書評も書いています。参考にしてください。

科学雑誌Newton2017/04月号

  • 開始:2017年02月26日 - 終了 : 2017年02月28日
  • 評価 : A

宇宙の特集が面白かったです。シリーズ 炭素の科学の2回目も面白かったです。
全体的に先月より良かったです。

ナショナルジオグラフィック2017/03月号

  • 開始:2017年03月01日 - 終了 : 2017年03月08日
  • 評価 : B

今月号はイマイチでした。洞窟の特集はよかったです。来月号に期待です。

難しいことはわかりませんが、お金の増やし方を教えてください!

  • 開始:2017年03月11日 - 終了 : 2017年03月11日
  • 評価 : A

良い本です。最近はお金の本はあまり読まなくなったのですが、この本は読んでおくべきです。そして、投資未経験の人は少しづつ投資を始めていきましょう。とはいえ、サラリーマンの源泉徴収の仕組みを変えないと日本で投資が活発になるとは思えませんけどね。

確定拠出年金の教科書

  • 開始:2017年02月28日 - 終了 : 2017年03月12日
  • 評価 : A

確定拠出年金の法律が変わったので、基本を抑えるために購入しました。しかし、これだけの仕組みを作ったということは、老後の生活は自分で責任を持ってくれと、政府から国民に暗に伝えているのと同じですね。でも、日本で投資をきちんとお金を運用できるのは人口の1割だと思います。

まとめ

投資本は最近読んでいなかったのですが、山崎 元さんの本が面白かったので、2冊続けて購入しました。両方ともよかったです。しかし、日本では全然投資が浸透しませんね。僕の周りでも未だにほとんど投資はやってません。お金なんて道具だと思うんですどね。。。

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

2017年3月4日土曜日

【Android7.1】android.support:designのsetDrawerListenerがdeprecatedになった対応方法

  • 公開日:2017年03月05日

記事概要

Androidのアプリ開発で、setDrawerListenerがdeprecatedになりました。
この記事は、その修正方法を記載した記事です。

環境

  • buildToolsVersion 25.0.2
  • com.android.support:design 25.1.1

事象

Androidアプリのコードで記載したsetDrawerListenerがdeprecatedになりました。つーかこのメソッド、Android Studioで自動生成されるんですけど……

修正方法

setDrawerListenerメソッドをaddDrawerListenerメソッドに差し替えます。

変更前
{project_folder}/MainActivity.java

        drawer.setDrawerListener(toggle);

変更後
{project_folder}/MainActivity.java

        drawer.addDrawerListener(toggle);

上記の変更でdeprecatedが消えます。
ソースコードを比較して読んでみると、確かにsetDrawerListenerのメソッドは古臭いので、変更しておきましょう。

結論

簡単な修正なので、プログラミングJavaでなく、ブログで公開しました。プログラミングJavaのサイトも引き続きよろしくお願いしましす。高度な記事もそろそろ追加していきます。

にしても、時々おかしなコード混ざってますよね。オープンソースだから、仕方ないんですけど。でも、railsよりマシかな。。。rails5.1のアップデート大変そうですね。そろそろ取り組んでいかないとダメですね。

PS : Androidを支える技術〈I〉を読んでいます。終わったら感想書くかも。。。

以上です。

PICK UP

運営サイト


この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加
Related Posts Plugin for WordPress, Blogger...