15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

はじめてのRails5

Last updated at Posted at 2016-12-07

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など常に新しい情報をキャッチアップしながらその時に最適なコードを書いていきましょう。

参考サイト

15
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?