---
title: "FactoryBotはActiveRecord以外のモデルにも使える"
description: "FactoryBotの initialize\\with* メソッドを使うと、オブジェクトを好きな方法で初期化でき、任意のオブジェクトを自在にファクトリー化できます"
canonical: https://oozou.com/til/you-can-use-factorybot-for-non-activerecord-models-45
locale: ja
date: 2020-10-13
topic: ruby
---

# FactoryBotはActiveRecord以外のモデルにも使える

> FactoryBotの initialize\with* メソッドを使うと、オブジェクトを好きな方法で初期化でき、任意のオブジェクトを自在にファクトリー化できます

Published: 2020-10-13 · Topic: [ruby](https://oozou.com/ja/til-topics/ruby) ([markdown](https://oozou.com/ja/til-topics/ruby.md))

FactoryBotの *initialize\_with* メソッドを使うと、オブジェクトを好きな方法で初期化でき、任意のオブジェクトを自在にファクトリー化できます

```ruby
FactoryBot.define do
  factory :citizen_id_image, class: CitizenIdImagePresenter do
    image_url { 'https://placehold.it/200x200' }

    initialize_with { new(image_url: image_url) }
  end
end
build(:citizen_id_image)
#=> 
```

# はじめに

FactoryBotは、開発者がテストフィクスチャをその場で定義・作成できる、Ruby on Railsアプリケーション向けの人気のテストツールです。テストデータを柔軟かつ効率的に作成する手段を提供し、テストの記述とメンテナンスを容易にしてくれます。この記事では、RailsのテストでFactoryBotを効果的に使う方法を探ります。

# FactoryBotのセットアップ

RailsアプリケーションでFactoryBotをセットアップするには、Gemfileに factory\_bot gemを追加し、bundle install コマンドを実行します。その後、config/initializers ディレクトリに factory\_bot.rb ファイルを作成してFactoryBotを設定できます。このファイルでは、ファクトリーのパスやデフォルトのストラテジーなど、factory\_bot の設定を定義できます。

# モデルとファクトリーの定義

FactoryBotにおけるファクトリーとは、オブジェクトを作成するための設計図です。factories ディレクトリにファイルを作成することで、モデルのファクトリーを定義できます。たとえばUserモデルがある場合、factories ディレクトリに user.rb ファイルを作成してユーザーファクトリーを定義できます。このファイルでは、ユーザーファクトリーの属性と関連を定義できます。

# ファクトリーのオプションと属性

FactoryBotには、ファクトリーをカスタマイズするためのオプションや属性がいくつか用意されています。たとえば、class 属性で作成するオブジェクトのクラスを指定できます。attributes オプションでファクトリーの属性を定義することもできます。さらに、association オプションでファクトリー間の関連を定義できます。

# まとめ

まとめると、FactoryBotはRailsアプリケーションでテストフィクスチャを作成するための強力なツールです。モデルのファクトリーを定義することで、テストデータを素早く効率的に作成できます。柔軟な設定オプションとカスタマイズ可能な属性により、FactoryBotはテストの記述とメンテナンスを容易にしてくれます。この記事で紹介したベストプラクティスに従えば、FactoryBotを最大限に活用してテストの品質を向上させられます。

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/ja/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
