【Rails】サンプルのユーザーを追加する方法

rails

こんにちは!てくてーくです。

今回はアプリケーションを作成する時に試しにローカル環境でサンプルユーザーを登録してみたいという場合に使えるRailsの機能を紹介したいと思います。

大量のサンプルユーザーを一気に登録する方法

Webアプリケーションを作成しているとローカル環境でサンプルユーザーを登録して、実際に動くかどうかをみてみたいという時があると思います。

そんな時は、ブラウザのユーザー登録ページから手作業で一人一人を登録して追加していく方法の他に大量のユーザーを自動で一気に登録できる、とっても便利な方法がありますので順を追ってみていきましょう。

Gemfileを追加する

まずはGemfileにFaker Gemを追加します。

Gemfile

gem 'faker', '1.7.3'

お約束のbundle installを実行します。

$ bundle install

Rubyスクリプト(Railsタスク)を追加

次にサンプルユーザーを生成するRubyスクリプト (Railsタスクとも呼びます) を追加します。Railsではdb/seeds.rbというファイルを標準として使います。

db/seeds.rbに以下のよう追加にします。

db/seeds.rb

99.times do |n|
  name = Faker::Name.name
  email = "example-#{n+1}@tekute-ku.com"
  password = "password"
  User.create!(name: name,
  email: email,
  password: password,
  password_confirmation: password)
end

これでそれらしい名前でメールアドレスを持つユーザーを99人作ってくれます。

データベースをリセットしRailsタスクを実行

それではデータベースをリセットしてこの99人を作るRailsタスクを実行しましょう。

$ rails db:migrate:reset
$ rails db:seed

Railsサーバーを動かしているともしかしたらrails db:migrate:resetを実行しても動かない時もあるかもしれません。

そのような場合は、Railsサーバーを一回止めて実行してみると良いそうです。

rails db:seedを実行し終えると、すでに99人ものサンプルユーザーが登録されているはずです。

一人一人登録していくより断然早いですね。

99.times do |n|
.
.
.

この部分の数字を変えれば作成される人数も変えることができます。

45.times do |n|
.
.
.

数字を45に変えればサンプルユーザーも45人作成されます。

 

任意のユーザーを登録したい時

多数のサンプルユーザーの他に任意のユーザーを登録したい時はdb/seeds.rbに以下のように追加し先ほどと同様のRailsタスクを実行すれば任意のユーザーを追加できます。

User.create!(name: "teku",
             email: "teku@teku.com",
             password: "tekutekuteku",
             password_confirmation: "tekutekuteku",
             admin: true)

99.times do |n|
  name = Faker::Name.name
  email = "example-#{n+1}@tekute-ku.com"
  password = "password"
  User.create!(name: name,
  email: email,
  password: password,
  password_confirmation: password)
end
$ rails db:migrate:reset
$ rails db:seed

もしユーザーにadmin属性があるのであればadmin: trueと指定することもできます。

 

なぜ User.create! なのか

上に示したコードの中で User.create! という部分があったと思います。なぜこのcreate!createメソッドではないのでしょうか。

create!は基本的にcreateメソッドと同じ働きを持ちますが、ユーザーが無効な場合にfalseを返すのではなく例外を発生させてくれます。つまり想定外のエラーを想定内のエラーとして処理してくれるのです。こうしておくと見逃しやすいエラーを見つけやすくなります。

では実際にどんな処理に変わるかみてみましょう。

メールアドレスを空欄にしてみてその処理結果を比べてみます。

(比較)User.create の時

User.create (name: "teku",
             email:  ""  ,
             .
             .
             .

rails db:seed
実行後
syntaxError: .  .  . db/seeds.rb:1: syntax error, unexpected tLABEL, expecting ‘)’

User.create (name:  “komu”,

syntaxErrorが出ていますが、どこがどう違うのか細かな部分がわかりません。

(比較)User.create! の時

User.create!(name: "teku",
             email:  ""  ,
             .
             .
             .
rails db:seed
実行後
ActiveRecord::RecordInvalid: Validation failed: Email can’t be blank, Email is invalid
User.createに比べてなにがどう間違っているのかを示してくれています。
これなら間違っていてもすぐ対処できますね。
なのでcreateメソッドよりcreate!の方が都合が良いんですね。

まとめ

  • はじめに適当なユーザーを追加するGemファイルのFaker Gemをインストールする
  • 次にdb/seeds.rbにサンプルユーザー、任意のユーザーを追加するためのコードを入力する
  • 最後にRailsタスクを実行する
  • User.create!は例外を発生させてくれるため、エラーが見つけやすくなる

以上が今回の学んだ内容です。例外処理については用語の定義を理解できていなかったのでまだまだ精進あるのみです。

コメント