読者です 読者をやめる 読者になる 読者になる

Wondershake 開発者ブログ

Locari(ロカリ)の運営会社の開発者ブログです。

Rails 5 のマイナー機能の紹介

こんにちは、バックエンドエンジニアのダイクストラです。

Rails 5 がやっと出ました!ActionCable やTurbolinks 3など大きな機能が色々追加されました。 加えて,Ruby 2.2.1以上を使うことが必要になりました。 これらに関する記事はたくさんあるので、今回はあまり知られていない機能を紹介します。

便利な機能

APIベースのアプリケーションが作成可能

人気のジェム Rails APIRails 5 にマージされました。ActionController::APIAPI のみのアプリケーションを作成することが出来ます。新しいアプリケーション作る時、フラグを追加するだけで出来ます。

rails new hogehoge --api

このタイプのアプリケーションは、ActionController::Base ではなく、ActionController::API を使います。middlewareも少なくなり、コントローラーがもっとシンプルになるので、JSベースのアプリ作る時は、このような作り方が便利です!

PRリンク

Migration に コメントを追加できる

データベースにはあった機能ですが、今まで直接SQLのクエリで書く必要がありました。Rails 5 から MySQLPostgreSQL 使っていれば、コメントを追加することができます!

class CreatePosts < ActiveRecord::Migration[5.0]
  def change
    create_table :posts, comment: 'テーブルのコメント' do |t|
      t.string :title, comment: 'フィールドのコメント'
    end
  end
end

DBAのツールにも、schema.rbにもコメントでます。

PRリンク

create_join_table で UUID を使える

これはシンプルな機能ですが、今までは integer を扱えませんでした。

class CreateJoinTableFavorites < ActiveRecord::Migration[5.0]
  def change
    create_join_table(:users, :posts, column_options: {type: :uuid})
  end
end

PRリンク

使わないで欲しい機能

ActiveSupportArray#second_to_lastArray#third_to_last のメソッドが増えた

よく .last.first を使うと思ますが、 third_to_last などは本当に必要ありますか?マジックナンバー)のようなものなので、先にリファクタリングして欲しいです。Array 使わず Hash にすれば、コードが分かりやすくなる可能性があります。どうしてもこの使い方しかないと思ってたら、普通に Array[-2] 是非、使ってください。

PRリンク

ActiveSupportEnumerable#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}

PRリンク

ActiveRecord のオブジェクト をsave する時、(touch: false) を入れれば、 updated_at はアップデートされない

今まで save した時、 updated_at がアップデートされたのに、急に touch: false をつけてしまうと、挙動が変わるので同じプロジェクトで働いてる人が困惑する可能性があります。save(touch: false) を使いたい時は、updated_at ではなく、新しいコラム作ったほうがいいでしょう。

PRリンク

その他の便利なアップデート

SQLのログにカラーが増えた

f:id:dykstra:20160817181904p:plain

PRリンク