---
title: "モデルに初期データを投入する"
version: 5.1
locale: ja
source: https://docs.djangoproject.com/ja/5.1/howto/initial-data/
canonical: https://djangodocs.dev/ja/5.1/howto/initial-data/
---
# モデルに初期データを投入する

アプリを最初にセットアップするとき、データベースに、ハードコーディングされたデータをあらかじめ入力しておくと便利なことがあります。マイグレーションまたはフィクスチャで初期データを提供できます。

## マイグレーションで初期データを投入する

アプリの初期データを自動的にロードするには、 [データマイグレーション](/ja/5.1/topics/migrations/#data-migrations) を作成します。マイグレーションはテストデータベースのセットアップ時に実行されるため、 [いくつかの条件](/ja/5.1/topics/testing/overview/#test-case-serialized-rollback) を満たすことで、データが利用できるようになります。

## フィクスチャでデータを投入する

[フィクスチャ](/ja/5.1/topics/db/fixtures/#fixtures-explanation) (fixture) を使ってデータを投入することもできますが、 [`TransactionTestCase.fixtures`](/ja/5.1/topics/testing/tools/#django.test.TransactionTestCase.fixtures) を使わない限り、このデータは自動的にはロードされません。

フィクスチャは、Djangoがデータベースにインポートする方法を知っているデータのコレクションです。 すでにいくつかのデータがある場合、フィクスチャを作成する最も簡単な方法は [`manage.py dumpdata`](/ja/5.1/ref/django-admin/#django-admin-dumpdata) コマンドを使用することです。 もしくは、フィクスチャを手動で書くこともできます; フィクスチャは JSON、XML、または ([PyYAML](https://pyyaml.org/) をインストールして) YAML ドキュメントとして記述できます。 [シリアライズのドキュメント](/ja/5.1/topics/serialization/) でサポートされている各 [シリアライズフォーマット](/ja/5.1/topics/serialization/#serialization-formats) の詳細を確認できます。

例として、 `Person` モデルのフィクスチャをJSONで書くと次のようになります:

```js
[
  {
    "model": "myapp.person",
    "pk": 1,
    "fields": {
      "first_name": "John",
      "last_name": "Lennon"
    }
  },
  {
    "model": "myapp.person",
    "pk": 2,
    "fields": {
      "first_name": "Paul",
      "last_name": "McCartney"
    }
  }
]
```

YAML のフィクスチャだと以下のようになります:

```yaml
- model: myapp.person
  pk: 1
  fields:
    first_name: John
    last_name: Lennon
- model: myapp.person
  pk: 2
  fields:
    first_name: Paul
    last_name: McCartney
```

このデータは、アプリケーション内の `fixtures` ディレクトリ内に保存しておくことができます。

データを読み込むには、 [`manage.py loaddata`](/ja/5.1/ref/django-admin/#django-admin-loaddata) `<fixturename>` を呼び出します。ここで `<fixturename>` は作成したフィクスチャファイルの名前です。 [`loaddata`](/ja/5.1/ref/django-admin/#django-admin-loaddata) を実行するたびに、フィクスチャからデータが読み込まれ、データベースに再ロードされます。これは、フィクスチャによって作成された行の一つを変更してから [`loaddata`](/ja/5.1/ref/django-admin/#django-admin-loaddata) を再度実行すると、変更が元に戻ってしまうことを意味します。

### フィクスチャファイルを探す場所を Django に教える

デフォルトでは、Djangoは各アプリ内の `fixtures` ディレクトリでフィクスチャを探すため、`loaddata sample` コマンドで `my_app/fixtures/sample.json` ファイルを見つけられます。相対パスも使用できるため、`loaddata my_app/sample` とすると `my_app/fixtures/my_app/sample.json` ファイルを見つけられます。

Django は [`FIXTURE_DIRS`](/ja/5.1/ref/settings/#std-setting-FIXTURE_DIRS) 設定で指定されたディレクトリのリストからもフィクスチャを探します。

デフォルトの検索を完全に無効にするには、フィクスチャファイルの場所を絶対パスで指定します。例えば、`loaddata /path/to/sample` のようにします。

> **フィクスチャファイルの名前空間を指定する**
>
> Django は、名前が一致するフィクスチャファイルを最初に見つけると、そのフィクスチャ ファイルを使います。そのため、異なるアプリケーションに同じ名前のフィクスチャファイルがあると、 `loaddata` コマンドでそれらを区別できなくなります。この問題を避ける最も簡単な方法は、フィクスチャファイルを *名前空間* で区切ることです。つまり、上記の相対パスの例のように、アプリケーションに応じた名前のディレクトリにファイルを置くことです。

> **See also**
>
> フィクスチャは [テストフレームワーク](/ja/5.1/topics/testing/tools/#topics-testing-fixtures) でも利用でき、テスト環境の一貫性を保つのに役立ちます。
