Rails公式ブログのRails 5 beta1の新機能についてのブログ記事『Riding Rails: Rails 5.0.0.beta1: Action Cable, API mode, Rails command』を英語の勉強がてら読んでみました!
🐡 Action Cable
- Action Cableは、Websocketをハンドリングするためのフレームワーク - チャットや、Notificationを簡単に実装することができる
チャットアプリケーションのサンプルソース
# アプリの作成 |
ルーティングを修正。
# config/routes.rb |
JS側で、Action Cableを有効にします。
# app/assets/javascripts/cable.coffee |
クライアントサイド(CoffeeScript)のSpeakアクションを修正。
# app/assets/javascripts/channels/chat.coffee |
サーバサイドのAction Cableのクラス CatChannel
を修正。
# ActionCableのクラス |
Messageをテーブルに保存したら、非同期でJobを起動。
# Messageを管理するクラス |
保存されたメッセージを、MessageBroadcastJobで非同期でブロードキャスト。
# 非同期でクライアントにメッセージを送るためのJob |
チャット風にメッセージを表示。
|
あと部分テンプレート追加。キャッシュも普通に使うことができます!
|
あとはいつ戻おり rails s
で起動するとpumaが立ち上がります。
感想
以下、使ってみて感じたことです。
- サーバ/クライアントサイド両方の処理を意識する必要がある
- Viewのキャッシュなど、Railsの今までの知識を有効活用できる
- 一時的に接続が失敗したり、エラー時のリカバリ処理等、実際に作る場合はいろいろ考慮が必要そう
- Basecamp 3では本番で使われているけど、ネットの知見がたまるまで少し様子見が吉かも
関連リンク
- Rails 5 + ActionCableで作る!シンプルなチャットアプリ(DHH氏のデモ動画より) - Qiita
- rails/actioncable-examples: Action Cable Examples - GitHub
🐯 API Mode
BackendとしてAPIを作るのに特化したrailsプロジェクトを rails new backend --api
等で簡単に作成できる。
このAPI Modeとは直接の関係はないですが、『jsonapi-resources』というプロジェクトがあるようです。
こちらもサンプルソースを見た限りはなかなかおもしろそう。うまく使いこなせれば、楽ができそうです!
も少し詳しく調べてみました => Rails 5.0.0.beta2 APIモードについて調べてみた
🐰 Active Record Attributes
DBに保存している値の型と、Active Recordで取り出した時の型を分けることができる。
# 小数点付きの型でDBに保存 |
配列や、レンジの状態で値を受け取ることもできます。
# 配列やレンジを設定する事もできる |
さらに、独自の型を定義することもできます。これはいいかも!
class MoneyType < ActiveRecord::Type::Integer |
実用性も高いし、これは地味にかなりありがたい機能。
ちなみに、こんな使い方もできるそうで…夢が広がりんぐ。
class Money < Struct.new(:amount, :currency) |
ActiveRecord::Attributes::ClassMethods
🐞 belongs_toが必須に
belongs_to
でassociationを定義した際には、対応するデータがあることが必須になりました。
対応するデータがない場合はエラーとなるため、エラーにしないためには次のように optional: true
を追加する必要があります。
class User |
😼 renderをどこからでも呼び出せる
Rakeタスクや、バックグラウンドのジョブキューなどでも #render
を行うことができるようになりました。
ApplicationController.render _render_options_ |
assings
オプションなどを使うことで、インスタンス変数をテンプレートに渡すこともできます。
🚕 Ruby 2.2.2以上をサポート
本番環境で動いている場合は、Railsのバージョンアップよりも、Rubyのバージョンアップを先やる必要があるかも。
😀 パフォーマンス改善について
Ruby 2.2.2以上や、Rails 5を使うことで、GCの改善や、メモリ消費量の削減といったパフォーマンスの改善の恩恵を受けることができる。
次のコミットはパフォマンスの改善に関するコミットである。
- Beyond Ludicrous Speed
- Speed up ActionController::Renderer normalize_keys by ~28%
- 10X speed improvements for AS::Dependencies.loadable_constants_for_path
- Speed up code and avoid unnecessary MatchData objects
- Freeze string literals when not mutated.
👽 Turbolinks 3
Turbolinksを新しく書きなおしたバージョン。最大の特徴は、テンプレートの部分的な書き換えに対応していること。
- data-turbolinks-permanent => ページ間で保持されることでより高速に動作。サイドバーとかに使えそう - data-turbolinks-temporary => ページ間で切り替わっていく要素につける
😸 そのほか変更点
- rake db:migrate => rails db:migrate に変更 - テストの failures 情報が見やすくなる - 抽象クラスの ApplicationRecord をベースにするようになりました - ActiveRecord::Relation#in_batches を扱いやすくしてメモリの使いすぎを防ぐ
🗽 CHANGELOG
- ActionPack CHANGELOG
- ActionMailer CHANGELOG
- ActionView CHANGELOG
- ActiveRecod CHANGELOG
- ActiveModel CHANGELOG
- ActiveSupport CHANGELOG
- ActiveJob CHANGELOG
- Railties CHANGELOG
🎃 (補足) Turbolinks 5
ネイティブのiOSとAndroidのラッパ実装として、Turbolinks5を新しく作っているらしいです。まだどんな実装なのかはわかりませんが、新しい試みでおもしろそう。
turbolinks/turbolinks: Turbolinks makes navigating your web application faster
🐠 (補足) Ruby 2.2.2以上を使用
Rails 5からはRuby 2.2.2以上を利用します
🐮 参考リンク
🍣 変更来歴
- (2016-01-31 22:00) 新規作成
- (2016-02-08 21:50) APIモードの記述を修正
- (2016-02-09 08:25) Change Logをbeta2にバージョンアップ
- (2016-02-12 20:30) belongs_toやrender anywhereについて追記