2016年も間もなく終了です。
今年の夏頃からIT企業が少しずつRails5への移行をしてきましたが、まだRails5を触れていない方が多いのではないでしょうか。来年はRails4からRails5へ移行する方が増えてきます。
2017年になる前にRails5を触れておきましょう。
Rails5の環境構築
Rails5はが対応しているruby2.3をインストールします。
※ruby2.2.2以上を使用の場合、Rails5からインストールしましょう。
$ brew update
$ brew upgrade ruby-build
$ rbenv install --list #2.3.3が入ってるか確認してみましょう
$ rbenv install 2.3.3
$ rbenv global 2.3.3 #切り替わらなければ$ rbenv local 2.3.3でやってください。
$ ruby -v #2.3.3であることを確認
$ gem install bundler
$ gem install rails -v 5.0.0
$ rbenv rehash
$ rails -v #rails5.0.0であることを確認
Rails5の新知識
以下何点かピックアップして便利な機能を取り上げます。
Action Cable
Rails5の新機能としてAction Cableがあります。Action Cableとは WebSocket を扱うフレームワークで、バックエンド・フロントエンドのフレームワークを提供します。
Action Cableを用いることで、リアルタイムな双方向通信を可能にするWebSocketの機能をRailsアプリケーションに簡単に追加することが可能になりました。Action Cableには、サーバーとクライアントの両方の機能が含まれています。
サーバー側では、ApplicationCable::ConnectionやApplicationCable::Channelなどのクラスを用いて実装を行い、クライアント側では、CoffeeScript(JavaScript)のApp.cable.subscriptions.createによってサーバー側のAppearanceChannel#subscribedメソッドを呼び出します。
channel
Rails5からActionCableのフレームワークを利用するためにchannelという仕組み
//ここまででrails new ~ MVC作成まで済ませてください。
$ rails g channel chat comment
chatチャンネルをcommentメソッド付きで作成することができます。
- app/channelsフォルダは サーバーサイド を実装するために使います。
- javascripts/channelフォルダは クライアントサイド を実装するため
Sprockets3のサポート
Rails4:
config/initializers/assets.rbでどのアセットをプリコンパイルするか指定
Rails5:
app/assets/config/ディレクトリ内のmanifest.jsで指定します。
プリコンパイル対象の指定方法が変更になりました。Rails4まではconfig/initializers/assets.rbでしたが、Rails5ではapp/assets/config/manifest.jsとなります。
// app/assets/config/manifest.js
//
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
※Rails 5.1ではSprockets4が標準となります。
railsコマンドへの統一
rakeコマンドがrailsコマンドに統一されます。
Rails4
rake db:migrate
Rails5
rails db:migrate で実行できるようになります。
orメソッド
クエリ関連のメソッドです。
その1つとしてorができます!読んだ通りの挙動をします。
例) User.where(id: [1,2]).or(User.where(name: "Mike"))
#saveメソッドのtouchオプションが追加
saveメソッドでtouchオプションを指定するとタイムスタンプを更新しないようにすることができます。タイムスタンプを更新したくないケースは割りと良くあると思いますが、より簡単にできるようになりました。
pluckとwithoutメソッド
pluckメソッド
特定のレコードのカラムを配列にする#pluckメソッドと似た挙動のメソッドがハッシュの配列でも使えるようになりました。
[{ name: "Tom" }, { name: "Jack" }, { name: "Mike" }].pluck(:name)
=> ["Tom", "Jack", "Mike"]
withoutメソッド
配列の中から特定の要素を除く#withoutメソッドが追加されました。
people = ["Jack", "George", "Jackson", "Ted"]
people.without "Ted", "Jackson"
=> ["Jack", "George"]
Enumerableモジュールにpluckとwithoutが追加されました。#pluckはActiveRecordではおなじみでしたが、Enumerableにも追加されました。個人的にはインターフェイスが揃うことは好ましいことだと思っています。
アソシエーションに関して
has_many :throughがeager loadingするとき、joinするモデルのorderが正しく動作するようになります。
下記の例だとcategoriesがeager loadingされるとき、by_orderのorderになります。
class Article < ActiveRecord::Base
has_many :by_order, -> { order(:genre) }
has_many :categories, through: :by_order
end
最後に
見慣れないメソッドばかりかもしれませんが、Rails4よりもRails5になったことで少しだけ便利になりました。
今後プログラミングを始める方はより敷居が下がり、サービスを作れる人は多くなってきます。
ただコードの品質を保つことも重要なことです。ただ単にコードをかくのでなく、Rails5など常に新しい情報をキャッチアップしながらその時に最適なコードを書いていきましょう。