tawara's blog

雑記。個人の見解です。

Enumを活用すれば整数値に名前をつけられる

こんにちは、たわらです。

Enumについて簡単に整理した記事です。

Enumって?

「列挙型」という意味だそうです。

Wikipediaによれば「列挙型(れっきょがた、enumerated typeあるいはenumeration type)とは、コンピュータプログラミング)において、プログラマが選んだ各々の識別子(列挙子)をそのまま有限集合として持つ抽象データ型である」

ざっくり説明すれば、一連の整数値に対して複数の変数名をつけること、と言えます。

こんなふうに使う

ユーザーのサービスに対する権限を定義する必要があるとします。

class AddColmunToUsers < ActiveRecord::Migration[5.2]
  def change
    add_column :users, :role, :integer, null: false, default: 0
  end
end

こんな感じで、Userクラスにroleカラムを追加します。データ型はintegerです。defaultを0にしておきます。

次にUserクラスに次のように記述します。

enum role: { general: 0, admin: 1 }

こうすることで、0と1にそれぞれgeneralとadminという名前を付与することができます。(言い方として、roleカラムにenum属性を宣言する、という言うのでしょうか。このあたりがわからないですね、、、)

便利メソッドが使えるから属性の確認が効率よくできる!

enum属性を付与することで、ユーザーがどの権限かを簡単に確認することができます。

たとえば、管理者権限のユーザーでしか許可したくないプログラムがあるとします。

enumを定義していない場合は、このように書くことになります。

実行したい処理 if @user.role == 1

このコードのいまいちなところは、1が何を示しているかわからないことになります。

このデメリットをenumは解消してくれます。enum属性を宣言すると便利メソッドが使えるようになるのです。

実行したい処理 if @user.admin?

このコードは自然言語に近いかたちで理解ができます。管理者か? とユーザーオブジェクトに聞いている感じですね。adminであればtrue、そうでなければfalseを返すメソッドが使えるようになります。

他にも破壊的なメソッドなどあるので都度確認しましょう。

参考文献

api.rubyonrails.org

qiita.com