Rails 5 のマイナー機能の紹介
こんにちは、バックエンドエンジニアのダイクストラです。
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のログにカラーが増えた