こんにちは、バックエンドエンジニアのダイクストラです。
Rails 5 がやっと出ました!ActionCable やTurbolinks 3など大きな機能が色々追加されました。 加えて,Ruby 2.2.1以上を使うことが必要になりました。 これらに関する記事はたくさんあるので、今回はあまり知られていない機能を紹介します。
便利な機能
APIベースのアプリケーションが作成可能
人気のジェム Rails API は Rails 5 にマージされました。ActionController::API で API のみのアプリケーションを作成することが出来ます。新しいアプリケーション作る時、フラグを追加するだけで出来ます。
rails new hogehoge --api
このタイプのアプリケーションは、ActionController::Base ではなく、ActionController::API を使います。middlewareも少なくなり、コントローラーがもっとシンプルになるので、JSベースのアプリ作る時は、このような作り方が便利です!
Migration に コメントを追加できる
データベースにはあった機能ですが、今まで直接SQLのクエリで書く必要がありました。Rails 5 から MySQL と PostgreSQL 使っていれば、コメントを追加することができます!
class CreatePosts < ActiveRecord::Migration[5.0]
def change
create_table :posts, comment: 'テーブルのコメント' do |t|
t.string :title, comment: 'フィールドのコメント'
end
end
end
DBAのツールにも、schema.rbにもコメントでます。
create_join_table で UUID を使える
これはシンプルな機能ですが、今までは integer を扱えませんでした。
class CreateJoinTableFavorites < ActiveRecord::Migration[5.0]
def change
create_join_table(:users, :posts, column_options: {type: :uuid})
end
end
使わないで欲しい機能
ActiveSupport で Array#second_to_last と Array#third_to_last のメソッドが増えた
よく .last と .first を使うと思ますが、 third_to_last などは本当に必要ありますか?マジックナンバー)のようなものなので、先にリファクタリングして欲しいです。Array 使わず Hash にすれば、コードが分かりやすくなる可能性があります。どうしてもこの使い方しかないと思ってたら、普通に Array の [-2] 是非、使ってください。
ActiveSupport で Enumerable#without のメソッド増えた
Array の場合は ary1 - ary2 でこれが実現できますし、Hash の場合は色んなやり方があるので、不必要なメソッドが増えたと思います。
Rubyの標準ライブラリで簡単に書けることをわざわざRailsだけのコードで書く意味がないです!
> [1,2,3,4,5] - [3,4] => [1, 2, 5]
> {a: 1, b: 2, c: 3}.reject{|x| [:a].include? x}
=> {:b=>2, :c=>3}
ActiveRecord のオブジェクト をsave する時、(touch: false) を入れれば、 updated_at はアップデートされない
今まで save した時、 updated_at がアップデートされたのに、急に touch: false をつけてしまうと、挙動が変わるので同じプロジェクトで働いてる人が困惑する可能性があります。save(touch: false) を使いたい時は、updated_at ではなく、新しいコラム作ったほうがいいでしょう。
その他の便利なアップデート
SQLのログにカラーが増えた
