{"title":"モデルに初期データを投入する","version":"5.2","locale":"ja","docname":"howto/initial-data","url":"/ja/5.2/howto/initial-data/","canonical":"https://djangodocs.dev/ja/5.2/howto/initial-data/","summary":"アプリを最初にセットアップするとき、データベースに、ハードコーディングされたデータをあらかじめ入力しておくと便利なことがあります。マイグレーションまたはフィクスチャで初期データを提供できます。 マイグレーションで初期データを投入する Link to this heading # アプリの初期データを自動的にロードするには、…","html":"<h1>モデルに初期データを投入する<a class=\"heading-anchor\" href=\"#how-to-provide-initial-data-for-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>アプリを最初にセットアップするとき、データベースに、ハードコーディングされたデータをあらかじめ入力しておくと便利なことがあります。マイグレーションまたはフィクスチャで初期データを提供できます。</p>\n<section id=\"provide-initial-data-with-migrations\">\n<h2>マイグレーションで初期データを投入する<a class=\"heading-anchor\" href=\"#provide-initial-data-with-migrations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>アプリの初期データを自動的にロードするには、 <a class=\"reference internal\" href=\"/ja/5.2/topics/migrations/#data-migrations\"><span class=\"std std-ref\">データマイグレーション</span></a> を作成します。マイグレーションはテストデータベースのセットアップ時に実行されるため、 <a class=\"reference internal\" href=\"/ja/5.2/topics/testing/overview/#test-case-serialized-rollback\"><span class=\"std std-ref\">いくつかの条件</span></a> を満たすことで、データが利用できるようになります。</p>\n</section>\n<section id=\"provide-data-with-fixtures\">\n<span id=\"initial-data-via-fixtures\"></span><h2>フィクスチャでデータを投入する<a class=\"heading-anchor\" href=\"#provide-data-with-fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"/ja/5.2/topics/db/fixtures/#fixtures-explanation\"><span class=\"std std-ref\">フィクスチャ</span></a> (fixture) を使ってデータを投入することもできますが、 <a class=\"reference internal\" href=\"/ja/5.2/topics/testing/tools/#django.test.TransactionTestCase.fixtures\" title=\"django.test.TransactionTestCase.fixtures\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TransactionTestCase.fixtures</span></code></a> を使わない限り、このデータは自動的にはロードされません。</p>\n<p>フィクスチャは、Djangoがデータベースにインポートする方法を知っているデータのコレクションです。 すでにいくつかのデータがある場合、フィクスチャを作成する最も簡単な方法は <a class=\"reference internal\" href=\"/ja/5.2/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">dumpdata</span></code></a> コマンドを使用することです。 もしくは、フィクスチャを手動で書くこともできます; フィクスチャは JSON、XML、または (<a class=\"reference external\" href=\"https://pyyaml.org/\">PyYAML</a> をインストールして) YAML ドキュメントとして記述できます。 <a class=\"reference internal\" href=\"/ja/5.2/topics/serialization/\"><span class=\"doc\">シリアライズのドキュメント</span></a> でサポートされている各 <a class=\"reference internal\" href=\"/ja/5.2/topics/serialization/#serialization-formats\"><span class=\"std std-ref\">シリアライズフォーマット</span></a> の詳細を確認できます。</p>\n<p>例として、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Person</span></code> モデルのフィクスチャをJSONで書くと次のようになります:</p>\n<div class=\"code-block\" data-language=\"js\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Js</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Js code\"><code><span class=\"p\">[</span>\n<span class=\"w\">  </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;model&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"s2\">&quot;myapp.person&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;pk&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"mf\">1</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;fields&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">      </span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">      </span><span class=\"s2\">&quot;last_name&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"s2\">&quot;Lennon&quot;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"w\">  </span><span class=\"p\">},</span>\n<span class=\"w\">  </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;model&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"s2\">&quot;myapp.person&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;pk&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"mf\">2</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"s2\">&quot;fields&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">      </span><span class=\"s2\">&quot;first_name&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"s2\">&quot;Paul&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">      </span><span class=\"s2\">&quot;last_name&quot;</span><span class=\"o\">:</span><span class=\"w\"> </span><span class=\"s2\">&quot;McCartney&quot;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"w\">  </span><span class=\"p\">}</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>YAML のフィクスチャだと以下のようになります:</p>\n<div class=\"code-block\" data-language=\"yaml\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">YAML</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"YAML code\"><code><span class=\"p p-Indicator\">-</span><span class=\"w\"> </span><span class=\"nt\">model</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">myapp.person</span>\n<span class=\"w\">  </span><span class=\"nt\">pk</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">1</span>\n<span class=\"w\">  </span><span class=\"nt\">fields</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"nt\">first_name</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">John</span>\n<span class=\"w\">    </span><span class=\"nt\">last_name</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">Lennon</span>\n<span class=\"p p-Indicator\">-</span><span class=\"w\"> </span><span class=\"nt\">model</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">myapp.person</span>\n<span class=\"w\">  </span><span class=\"nt\">pk</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">2</span>\n<span class=\"w\">  </span><span class=\"nt\">fields</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"nt\">first_name</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">Paul</span>\n<span class=\"w\">    </span><span class=\"nt\">last_name</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"l l-Scalar l-Scalar-Plain\">McCartney</span>\n</code></pre></div>\n<p>このデータは、アプリケーション内の <code class=\"docutils literal notranslate\"><span class=\"pre\">fixtures</span></code> ディレクトリ内に保存しておくことができます。</p>\n<p>データを読み込むには、 <a class=\"reference internal\" href=\"/ja/5.2/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">loaddata</span></code></a> <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fixturename&gt;</span></code> を呼び出します。ここで <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;fixturename&gt;</span></code> は作成したフィクスチャファイルの名前です。 <a class=\"reference internal\" href=\"/ja/5.2/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">loaddata</span></code></a> を実行するたびに、フィクスチャからデータが読み込まれ、データベースに再ロードされます。これは、フィクスチャによって作成された行の一つを変更してから <a class=\"reference internal\" href=\"/ja/5.2/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">loaddata</span></code></a> を再度実行すると、変更が元に戻ってしまうことを意味します。</p>\n<section id=\"tell-django-where-to-look-for-fixture-files\">\n<h3>フィクスチャファイルを探す場所を Django に教える<a class=\"heading-anchor\" href=\"#tell-django-where-to-look-for-fixture-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>デフォルトでは、Djangoは各アプリ内の <code class=\"docutils literal notranslate\"><span class=\"pre\">fixtures</span></code> ディレクトリでフィクスチャを探すため、<code class=\"docutils literal notranslate\"><span class=\"pre\">loaddata</span> <span class=\"pre\">sample</span></code> コマンドで <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app/fixtures/sample.json</span></code> ファイルを見つけられます。相対パスも使用できるため、<code class=\"docutils literal notranslate\"><span class=\"pre\">loaddata</span> <span class=\"pre\">my_app/sample</span></code> とすると <code class=\"docutils literal notranslate\"><span class=\"pre\">my_app/fixtures/my_app/sample.json</span></code> ファイルを見つけられます。</p>\n<p>Django は <a class=\"reference internal\" href=\"/ja/5.2/ref/settings/#std-setting-FIXTURE_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FIXTURE_DIRS</span></code></a> 設定で指定されたディレクトリのリストからもフィクスチャを探します。</p>\n<p>デフォルトの検索を完全に無効にするには、フィクスチャファイルの場所を絶対パスで指定します。例えば、<code class=\"docutils literal notranslate\"><span class=\"pre\">loaddata</span> <span class=\"pre\">/path/to/sample</span></code> のようにします。</p>\n<aside class=\"admonition-namespace-your-fixture-files admonition\">\n<p class=\"admonition-title\">フィクスチャファイルの名前空間を指定する</p>\n<p>Django は、名前が一致するフィクスチャファイルを最初に見つけると、そのフィクスチャ ファイルを使います。そのため、異なるアプリケーションに同じ名前のフィクスチャファイルがあると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">loaddata</span></code> コマンドでそれらを区別できなくなります。この問題を避ける最も簡単な方法は、フィクスチャファイルを <em>名前空間</em> で区切ることです。つまり、上記の相対パスの例のように、アプリケーションに応じた名前のディレクトリにファイルを置くことです。</p>\n</aside>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<p>フィクスチャは <a class=\"reference internal\" href=\"/ja/5.2/topics/testing/tools/#topics-testing-fixtures\"><span class=\"std std-ref\">テストフレームワーク</span></a> でも利用でき、テスト環境の一貫性を保つのに役立ちます。</p>\n</aside>\n</section>\n</section>","rootId":"how-to-provide-initial-data-for-models","toc":[{"title":"マイグレーションで初期データを投入する","anchor":"provide-initial-data-with-migrations","children":[]},{"title":"フィクスチャでデータを投入する","anchor":"provide-data-with-fixtures","children":[{"title":"フィクスチャファイルを探す場所を Django に教える","anchor":"tell-django-where-to-look-for-fixture-files","children":[]}]}],"breadcrumbs":[{"docname":"howto/index","title":"How-to ガイド","url":"/ja/5.2/howto/"}],"prev":{"docname":"howto/index","title":"How-to ガイド","url":"/ja/5.2/howto/"},"next":{"docname":"howto/legacy-databases","title":"レガシーなデータベースと Django の統合","url":"/ja/5.2/howto/legacy-databases/"},"formats":{"html":"/ja/5.2/howto/initial-data/","markdown":"/ja/5.2/howto/initial-data.md","json":"/ja/5.2/howto/initial-data.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/howto/initial-data.txt","official":"https://docs.djangoproject.com/ja/5.2/howto/initial-data/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}