{"title":"フィクスチャ (fixture)","version":"6.0","locale":"ja","docname":"topics/db/fixtures","url":"/ja/6.0/topics/db/fixtures/","canonical":"https://djangodocs.dev/ja/6.0/topics/db/fixtures/","summary":"フィクスチャ (fixture) とは、シリアライズされたデータベースのコンテンツを含むファイルのコレクションです。各フィクスチャにはユニークな名前があり、フィクスチャを構成するファイルは、複数のアプリケーションの複数のディレクトリに分散できます。 参考 モデルに初期データを投入する フィクスチャを生成する Link to…","html":"<span id=\"fixtures-explanation\"></span><h1>フィクスチャ (fixture)<a class=\"heading-anchor\" href=\"#fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p><em>フィクスチャ (fixture)</em> とは、シリアライズされたデータベースのコンテンツを含むファイルのコレクションです。各フィクスチャにはユニークな名前があり、フィクスチャを構成するファイルは、複数のアプリケーションの複数のディレクトリに分散できます。</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">参考</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/6.0/howto/initial-data/\"><span class=\"doc\">モデルに初期データを投入する</span></a></p></li>\n</ul>\n</aside>\n<section id=\"how-to-produce-a-fixture\">\n<h2>フィクスチャを生成する<a class=\"heading-anchor\" href=\"#how-to-produce-a-fixture\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>フィクスチャは <a class=\"reference internal\" href=\"/ja/6.0/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> によって生成できます。また、 <a class=\"reference internal\" href=\"/ja/6.0/topics/serialization/\"><span class=\"doc\">シリアライゼーションツール</span></a> を直接使って、あるいは手書きでカスタムフィクスチャを生成することもできます。</p>\n</section>\n<section id=\"how-to-use-a-fixture\">\n<h2>フィクスチャを使う<a class=\"heading-anchor\" href=\"#how-to-use-a-fixture\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>フィクスチャを使えば、 <a class=\"reference internal\" href=\"/ja/6.0/topics/testing/tools/#topics-testing-fixtures\"><span class=\"std std-ref\">テスト</span></a> のためのデータを事前に投入できます。</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">fixtures</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;fixture-label&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>または <a class=\"reference internal\" href=\"/ja/6.0/howto/initial-data/#initial-data-via-fixtures\"><span class=\"std std-ref\">初期データ</span></a> を <a class=\"reference internal\" href=\"/ja/6.0/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">loaddata</span></code></a> コマンドを使って提供することもできます:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>&lt;fixture<span class=\"w\"> </span>label&gt;\n</code></pre></div>\n</section>\n<section id=\"how-fixtures-are-discovered\">\n<h2>Djangoにフィクスチャを認識させる<a class=\"heading-anchor\" href=\"#how-fixtures-are-discovered\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django はこれらの場所でフィクスチャを探します:</p>\n<ol class=\"arabic simple\">\n<li><p>インストールされた各アプリケーションの <code class=\"docutils literal notranslate\"><span class=\"pre\">fixtures</span></code> ディレクトリ内</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-FIXTURE_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FIXTURE_DIRS</span></code></a> 設定にリストされている任意のディレクトリ内</p></li>\n<li><p>フィクスチャによって名前が付けられたリテラル パス内</p></li>\n</ol>\n<p>Django は、指定されたフィクスチャ名と一致するフィクスチャをすべて読み込みます。指定されたフィクスチャに拡張子がある場合、そのタイプのフィクスチャだけが読み込まれます。たとえば</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>mydata.json\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">mydata</span></code> と呼ばれる JSON フィクスチャのみを読み込みます。フィクスチャの拡張子は <a class=\"reference internal\" href=\"/ja/6.0/topics/serialization/#serialization-formats\"><span class=\"std std-ref\">シリアライザ</span></a> に登録された名前 (例: <code class=\"docutils literal notranslate\"><span class=\"pre\">json</span></code> や <code class=\"docutils literal notranslate\"><span class=\"pre\">xml</span></code>)  に対応していなければなりません。</p>\n<p>拡張子を省略した場合、Django は利用可能なすべてのフィクスチャタイプから、マッチするフィクスチャを検索します。例えば</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>mydata\n</code></pre></div>\n<p>これは <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata</span></code> というフィクスチャタイプのフィクスチャを探します。フィクスチャディレクトリに <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json</span></code> が含まれていれば、そのフィクスチャは JSON フィクスチャとして読み込まれます。</p>\n<p>命名されたフィクスチャはディレクトリ・コンポーネントを含むことができます。これらのディレクトリは検索パスに含まれます。たとえば:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>foo/bar/mydata.json\n</code></pre></div>\n<p>これは、インストールされている各アプリケーションに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;app_label&gt;/fixtures/foo/bar/mydata.json</span></code> を、 <a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-FIXTURE_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FIXTURE_DIRS</span></code></a> 内の各ディレクトリに対して <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;dirname&gt;/foo/bar/mydata.json</span></code> を、そしてリテラルパス <code class=\"docutils literal notranslate\"><span class=\"pre\">foo/bar/mydata.json</span></code> を検索します。</p>\n<section id=\"fixtures-loading-order\">\n<h3>フィクスチャが読み込まれる順番<a class=\"heading-anchor\" href=\"#fixtures-loading-order\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>複数のフィクスチャを同じ呼び出しで指定できます。たとえば:</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>mammals<span class=\"w\"> </span>birds<span class=\"w\"> </span>insects\n</code></pre></div>\n<p>またはテストケースクラスで:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AnimalTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">fixtures</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;mammals&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;birds&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;insects&quot;</span><span class=\"p\">]</span>\n</code></pre></div>\n<p>フィクスチャが読み込まれる順番は、管理コマンドを使うときでも、上で示したようにテストケースクラスでリストアップするときでも、リストアップされた順番に従います。</p>\n<p>これらの例では、すべてのアプリケーション（ <a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> で定義されたアプリケーションの順番）から <code class=\"docutils literal notranslate\"><span class=\"pre\">mammals</span></code> という名前のすべてのフィクスチャが最初に読み込まれます。続いて、すべての <code class=\"docutils literal notranslate\"><span class=\"pre\">birds</span></code> フィクスチャが読み込まれ、続いてすべての <code class=\"docutils literal notranslate\"><span class=\"pre\">insects</span></code> フィクスチャが読み込まれます。</p>\n<p>データベースのバックエンドが行レベルの制約をサポートしている場合、これらの制約はトランザクションの最後にチェックされることに注意してください。データベース構成が遅延制約チェックをサポートしていない場合、フィクスチャをまたぐリレーションシップは読み込みエラーになるかもしれません（例については <a class=\"reference external\" href=\"https://dev.mysql.com/doc/refman/en/constraint-foreign-key.html\">MySQL</a> のドキュメントを参照してください）。</p>\n</section>\n</section>\n<section id=\"how-fixtures-are-saved-to-the-database\">\n<h2>フィクスチャはどのようにデータベースに保存されるか<a class=\"heading-anchor\" href=\"#how-fixtures-are-saved-to-the-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>フィクスチャファイルが処理されると、データはそのままデータベースに保存されます。モデルで定義された <a class=\"reference internal\" href=\"/ja/6.0/ref/models/instances/#django.db.models.Model.save\" title=\"django.db.models.Model.save\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">save()</span></code></a> メソッドは呼び出されず、 <a class=\"reference internal\" href=\"/ja/6.0/ref/signals/#django.db.models.signals.pre_save\" title=\"django.db.models.signals.pre_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">pre_save</span></code></a> や <a class=\"reference internal\" href=\"/ja/6.0/ref/signals/#django.db.models.signals.post_save\" title=\"django.db.models.signals.post_save\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">post_save</span></code></a> シグナルは <code class=\"docutils literal notranslate\"><span class=\"pre\">raw=True</span></code> で呼び出されます。インスタンスはモデルにローカルな属性しか持たないからです。例えば、フィクスチャの読み込み中に存在せず、例外を発生させるようなリレーション先フィールドにアクセスするハンドラを無効にしたい場合があるでしょう:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.signals</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">post_save</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MyModel</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_handler</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"c1\"># disable the handler during fixture loading</span>\n    <span class=\"k\">if</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw&quot;</span><span class=\"p\">]:</span>\n        <span class=\"k\">return</span>\n    <span class=\"o\">...</span>\n\n\n<span class=\"n\">post_save</span><span class=\"o\">.</span><span class=\"n\">connect</span><span class=\"p\">(</span><span class=\"n\">my_handler</span><span class=\"p\">,</span> <span class=\"n\">sender</span><span class=\"o\">=</span><span class=\"n\">MyModel</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このロジックをカプセル化するデコレータを書くこともできます:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">functools</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">wraps</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">disable_for_loaddata</span><span class=\"p\">(</span><span class=\"n\">signal_handler</span><span class=\"p\">):</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Decorator that turns off signal handlers when loading fixture data.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"nd\">@wraps</span><span class=\"p\">(</span><span class=\"n\">signal_handler</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;raw&quot;</span><span class=\"p\">]:</span>\n            <span class=\"k\">return</span>\n        <span class=\"n\">signal_handler</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">wrapper</span>\n\n\n<span class=\"nd\">@disable_for_loaddata</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_handler</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>このロジックは、 <a class=\"reference internal\" href=\"/ja/6.0/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>\n<section id=\"compressed-fixtures\">\n<h2>圧縮されたフィクスチャ<a class=\"heading-anchor\" href=\"#compressed-fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>フィクスチャは <code class=\"docutils literal notranslate\"><span class=\"pre\">zip</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">gz</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">bz2</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">lzma</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">xz</span></code> フォーマットのいずれかに圧縮される場合があります。次に例を示します。</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code>django-admin<span class=\"w\"> </span>loaddata<span class=\"w\"> </span>mydata.json\n</code></pre></div>\n<p>これは <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.zip</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.gz</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.bz2</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.lzma</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json.xz</span></code> のいずれかを探します。圧縮アーカイブに含まれる最初のファイルが使用されます。</p>\n<p>同じ名前で異なるフィクスチャタイプを持つ2つのフィクスチャが見つかった場合(例えば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.json</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.xml.gz</span></code> が同じフィクスチャディレクトリで見つかった場合)、フィクスチャのインストールは中断され、 <a class=\"reference internal\" href=\"/ja/6.0/ref/django-admin/#django-admin-loaddata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">loaddata</span></code></a> の呼び出しでインストールされたデータはデータベースから削除されることに注意してください。</p>\n<aside class=\"admonition-mysql-with-myisam-and-fixtures admonition\">\n<p class=\"admonition-title\">MyISAM を使用した MySQL とフィクスチャ</p>\n<p>MySQL の MyISAM ストレージエンジンはトランザクションや制約をサポートしていないため、 MyISAM を使用する場合、フィクスチャデータの検証や、複数のトランザクションファイルが見つかった場合のロールバックはできません。</p>\n</aside>\n</section>\n<section id=\"database-specific-fixtures\">\n<h2>データベース別のフィクスチャ<a class=\"heading-anchor\" href=\"#database-specific-fixtures\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>複数のデータベースをセットアップしている場合、あるデータベースには読み込ませたいが、別のデータベースには読み込ませたくないフィクスチャ・データがあるかもしれません。このような状況では、フィクスチャの名前にデータベース識別子を追加できます。</p>\n<p>例えば、 <a class=\"reference internal\" href=\"/ja/6.0/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a> 設定に <code class=\"docutils literal notranslate\"><span class=\"pre\">users</span></code> データベースが定義されている場合、フィクスチャの名前を <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.users.json</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">mydata.users.json.gz</span></code> とすると、 <code class=\"docutils literal notranslate\"><span class=\"pre\">users</span></code> データベースにデータを読み込むと指定したときだけフィクスチャが読み込まれます。</p>\n</section>","rootId":"fixtures","toc":[{"title":"フィクスチャを生成する","anchor":"how-to-produce-a-fixture","children":[]},{"title":"フィクスチャを使う","anchor":"how-to-use-a-fixture","children":[]},{"title":"Djangoにフィクスチャを認識させる","anchor":"how-fixtures-are-discovered","children":[{"title":"フィクスチャが読み込まれる順番","anchor":"fixtures-loading-order","children":[]}]},{"title":"フィクスチャはどのようにデータベースに保存されるか","anchor":"how-fixtures-are-saved-to-the-database","children":[]},{"title":"圧縮されたフィクスチャ","anchor":"compressed-fixtures","children":[]},{"title":"データベース別のフィクスチャ","anchor":"database-specific-fixtures","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Django を使う","url":"/ja/6.0/topics/"},{"docname":"topics/db/index","title":"モデルとデータベース","url":"/ja/6.0/topics/db/"}],"prev":{"docname":"topics/db/instrumentation","title":"データベースの計測","url":"/ja/6.0/topics/db/instrumentation/"},"next":{"docname":"topics/db/examples/index","title":"モデルリレーションシップ API の使用例","url":"/ja/6.0/topics/db/examples/"},"formats":{"html":"/ja/6.0/topics/db/fixtures/","markdown":"/ja/6.0/topics/db/fixtures.md","json":"/ja/6.0/topics/db/fixtures.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/db/fixtures.txt","official":"https://docs.djangoproject.com/ja/6.0/topics/db/fixtures/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}