{"id":3196,"date":"2025-03-24T08:46:41","date_gmt":"2025-03-23T23:46:41","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3196"},"modified":"2025-03-24T08:47:11","modified_gmt":"2025-03-23T23:47:11","slug":"laravel-seeder%e3%81%ae%e5%ae%8c%e5%85%a8%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e5%9f%ba%e7%a4%8e%e3%81%8b%e3%82%89%e5%ae%9f%e8%b7%b5%e3%81%be%e3%81%a7%e8%a7%a3","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3196","title":{"rendered":"Laravel Seeder\u306e\u5b8c\u5168\u30de\u30b9\u30bf\u30fc\u30ac\u30a4\u30c9\uff1a\u57fa\u790e\u304b\u3089\u5b9f\u8df5\u307e\u3067\u89e3\u8aac"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Laravel Seeder\u3068\u306f\uff1a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u521d\u671f\u5316\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">Seeder\u306e\u5f79\u5272\u3068\u91cd\u8981\u6027\u3092\u7406\u89e3\u3057\u3088\u3046<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u5f93\u6765\u306e\u65b9\u6cd5\u3068Seeder\u3092\u6bd4\u8f03\u3057\u3066\u30e1\u30ea\u30c3\u30c8\u3092\u77e5\u308b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">Seeder\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">Seeder\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u5b9f\u884c\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u521d\u671f\u30c7\u30fc\u30bf\u6295\u5165\u306e\u5177\u4f53\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">run()\u30e1\u30bd\u30c3\u30c9\u306e\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">Factory\u3068\u306e\u9023\u643a\u3067\u5b9f\u73fe\u3059\u308b\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u751f\u6210<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">ModelFactory\u306e\u57fa\u672c\u6982\u5ff5\u3068\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-9\">Factory\u3068Seeder\u306e\u7d44\u307f\u5408\u308f\u305b\u30d1\u30bf\u30fc\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u542b\u3080\u30c7\u30fc\u30bf\u306e\u751f\u6210\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">\u5b9f\u8df5\u7684\u306aSeeder\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af\u96c6<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u672c\u756a\u74b0\u5883\u3068\u958b\u767a\u74b0\u5883\u3067\u306e\u30c7\u30fc\u30bf\u51fa\u3057\u5206\u3051<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u306e\u52b9\u7387\u7684\u306a\u751f\u6210\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u65e2\u5b58\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089Seeder\u3092\u751f\u6210\u3059\u308b\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">Seeder\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u6ce8\u610f\u70b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305fSeeder\u8a2d\u8a08<\/a>      <\/li>      <li>        <a href=\"#i-17\">\u4fdd\u5b88\u6027\u306e\u9ad8\u3044Seeder\u30b3\u30fc\u30c9\u306e\u66f8\u304d\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">\u3088\u304f\u3042\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-19\">\u767a\u5c55\u7684\u306aSeeder\u6d3b\u7528\u4e8b\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306eSeeder\u6d3b\u7528\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-21\">\u672c\u756a\u74b0\u5883\u3067\u306e\u30de\u30b9\u30bf\u30fc\u30c7\u30fc\u30bf\u7ba1\u7406<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-22\">CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3078\u306e\u7d44\u307f\u8fbc\u307f\u65b9<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Laravel Seeder\u3068\u306f\uff1a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u521d\u671f\u5316\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">Seeder\u306e\u5f79\u5272\u3068\u91cd\u8981\u6027\u3092\u7406\u89e3\u3057\u3088\u3046<\/h3>\n\n\n\n<p>Laravel Seeder\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u521d\u671f\u30c7\u30fc\u30bf\u3092\u7c21\u5358\u304b\u3064\u52b9\u7387\u7684\u306b\u6295\u5165\u3059\u308b\u305f\u3081\u306e\u6a5f\u80fd\u3067\u3059\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u521d\u671f\u30c7\u30fc\u30bf\u306f\u975e\u5e38\u306b\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>Seeder\u304c\u63d0\u4f9b\u3059\u308b\u4e3b\u306a\u4fa1\u5024<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u521d\u671f\u5316\u306e\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u958b\u767a\u74b0\u5883\u306e\u7d20\u65e9\u3044\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u4e00\u8cab\u6027\u78ba\u4fdd<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d7\u30ed\u30bb\u30b9\u306e\u52b9\u7387\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c1\u30fc\u30e0\u5168\u54e1\u304c\u540c\u3058\u521d\u671f\u30c7\u30fc\u30bf\u3067\u958b\u767a\u53ef\u80fd<\/li>\n\n\n\n<li>\u74b0\u5883\u69cb\u7bc9\u306e\u624b\u9806\u3092\u5927\u5e45\u306b\u7c21\u7565\u5316<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u5b9a\u7fa9\u3092\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3067\u8ffd\u8de1\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u57fa\u672c\u7684\u306aSeeder\u306e\u69cb\u9020\nclass UsersTableSeeder extends Seeder\n{\n    public function run()\n    {\n        DB::table('users')-&gt;insert([\n            'name' =&gt; '\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc',\n            'email' =&gt; 'test@example.com',\n            'password' =&gt; Hash::make('password'),\n        ]);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u5f93\u6765\u306e\u65b9\u6cd5\u3068Seeder\u3092\u6bd4\u8f03\u3057\u3066\u30e1\u30ea\u30c3\u30c8\u3092\u77e5\u308b<\/h3>\n\n\n\n<p>\u5f93\u6765\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u521d\u671f\u5316\u65b9\u6cd5\u3068\u6bd4\u8f03\u3059\u308b\u3053\u3068\u3067\u3001Seeder\u306e\u4fa1\u5024\u304c\u3088\u308a\u660e\u78ba\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u5f93\u6765\u306e\u521d\u671f\u30c7\u30fc\u30bf\u6295\u5165\u65b9\u6cd5<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u624b\u52d5\u3067\u306eSQL\u5b9f\u884c<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SQL\u30d5\u30a1\u30a4\u30eb\u306e\u624b\u52d5\u5b9f\u884c<\/li>\n\n\n\n<li>phpMyAdmin\u306a\u3069\u306e\u7ba1\u7406\u30c4\u30fc\u30eb\u3067\u306e\u76f4\u63a5\u5165\u529b<\/li>\n\n\n\n<li>CSV\u30d5\u30a1\u30a4\u30eb\u306e\u30a4\u30f3\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8ab2\u984c\u70b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u624b\u9806\u306e\u5c5e\u4eba\u5316<\/li>\n\n\n\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u56f0\u96e3\u3055<\/li>\n\n\n\n<li>\u74b0\u5883\u9593\u3067\u306e\u4e00\u8cab\u6027\u78ba\u4fdd\u306e\u96e3\u3057\u3055<\/li>\n<\/ul>\n\n\n\n<p><strong>Seeder\u3092\u4f7f\u7528\u3057\u305f\u5834\u5408\u306e\u30e1\u30ea\u30c3\u30c8<\/strong><\/p>\n\n\n<div id=\"id-0b4ccc95-76c6-4675-a071-70bdb5327fde\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u89b3\u70b9<\/th><th>\u5f93\u6765\u306e\u65b9\u6cd5<\/th><th>Seeder\u3092\u4f7f\u7528<\/th><\/tr><\/thead><tbody><tr><td>\u518d\u73fe\u6027<\/td><td>\u624b\u9806\u66f8\u4f9d\u5b58<\/td><td>\u30b3\u30fc\u30c9\u3067\u4fdd\u8a3c<\/td><\/tr><tr><td>\u81ea\u52d5\u5316<\/td><td>\u56f0\u96e3<\/td><td>\u5bb9\u6613<\/td><\/tr><tr><td>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406<\/td><td>\u8907\u96d1<\/td><td>Git\u7b49\u3067\u5bb9\u6613\u306b\u7ba1\u7406<\/td><\/tr><tr><td>\u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027<\/td><td>\u624b\u52d5\u78ba\u8a8d\u5fc5\u8981<\/td><td>\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u5236\u5fa1\u53ef\u80fd<\/td><\/tr><tr><td>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9<\/td><td>\u7169\u96d1<\/td><td>\u5bb9\u6613<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><strong>\u5b9f\u88c5\u4f8b\u3067\u898b\u308b\u9055\u3044<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ DatabaseSeeder\u3067\u306e\u4e00\u62ec\u7ba1\u7406\nclass DatabaseSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u5b9f\u884c\u9806\u5e8f\u3092\u5236\u5fa1\u53ef\u80fd\n        $this-&gt;call([\n            UsersTableSeeder::class,\n            PostsTableSeeder::class,\n            CommentsTableSeeder::class,\n        ]);\n    }\n}\n\n\/\/ \u74b0\u5883\u306b\u5fdc\u3058\u305f\u5236\u5fa1\u3082\u5bb9\u6613\nif (App::environment('local', 'development')) {\n    $this-&gt;call(TestDataSeeder::class);\n}<\/pre>\n\n\n\n<p><strong>Seeder\u304c\u3082\u305f\u3089\u3059\u5177\u4f53\u7684\u306a\u6539\u5584\u70b9<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u30d7\u30ed\u30bb\u30b9\u306e\u6539\u5584<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u74b0\u5883\u69cb\u7bc9\u6642\u9593\u306e\u5927\u5e45\u524a\u6e1b<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u9593\u3067\u306e\u77e5\u8b58\u5171\u6709\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u30fb\u30c6\u30b9\u30c8\u306e\u52b9\u7387\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u54c1\u8cea\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u3088\u308b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u4e00\u8cab\u6027\u306e\u3042\u308b\u547d\u540d\u898f\u5247\u306e\u9069\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u904b\u7528\u8ca0\u8377\u306e\u8efd\u6e1b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u81ea\u52d5\u5316\u306b\u3088\u308b\u4eba\u7684\u30df\u30b9\u306e\u9632\u6b62<\/li>\n\n\n\n<li>\u74b0\u5883\u79fb\u884c\u306e\u7c21\u7565\u5316<\/li>\n\n\n\n<li>\u30c8\u30e9\u30d6\u30eb\u6642\u306e\u539f\u56e0\u7279\u5b9a\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">Seeder\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">Seeder\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u5b9f\u884c\u65b9\u6cd5<\/h3>\n\n\n\n<p>Seeder\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u304b\u3089\u5b9f\u884c\u307e\u3067\u306e\u57fa\u672c\u7684\u306a\u6d41\u308c\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. Seeder\u30af\u30e9\u30b9\u306e\u4f5c\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Artisan\u30b3\u30de\u30f3\u30c9\u3067\u30b7\u30fc\u30c0\u30fc\u3092\u4f5c\u6210\nphp artisan make:seeder ProductsTableSeeder\n\n\/\/ \u751f\u6210\u3055\u308c\u308b\u30d5\u30a1\u30a4\u30eb: database\/seeders\/ProductsTableSeeder.php\nclass ProductsTableSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u3053\u3053\u306b\u30c7\u30fc\u30bf\u6295\u5165\u30ed\u30b8\u30c3\u30af\u3092\u8a18\u8ff0\n    }\n}<\/pre>\n\n\n\n<p><strong>2. DatabaseSeeder\u3078\u306e\u767b\u9332<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ database\/seeders\/DatabaseSeeder.php\nclass DatabaseSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u5b9f\u884c\u3057\u305f\u3044\u30b7\u30fc\u30c0\u30fc\u3092\u767b\u9332\n        $this-&gt;call([\n            ProductsTableSeeder::class\n        ]);\n    }\n}<\/pre>\n\n\n\n<p><strong>3. \u30b7\u30fc\u30c0\u30fc\u306e\u5b9f\u884c\u30b3\u30de\u30f3\u30c9<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5168\u3066\u306e\u30b7\u30fc\u30c0\u30fc\u3092\u5b9f\u884c\nphp artisan db:seed\n\n# \u7279\u5b9a\u306e\u30b7\u30fc\u30c0\u30fc\u306e\u307f\u5b9f\u884c\nphp artisan db:seed --class=ProductsTableSeeder\n\n# \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5\u3068\u30b7\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u540c\u6642\u5b9f\u884c\nphp artisan migrate:refresh --seed<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u521d\u671f\u30c7\u30fc\u30bf\u6295\u5165\u306e\u5177\u4f53\u4f8b<\/h3>\n\n\n\n<p>\u5b9f\u969b\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306b\u57fa\u3065\u3044\u305f\u5b9f\u88c5\u4f8b\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p><strong>1. \u57fa\u672c\u7684\u306a\u30c7\u30fc\u30bf\u6295\u5165<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ProductsTableSeeder extends Seeder\n{\n    public function run()\n    {\n        DB::table('products')-&gt;insert([\n            [\n                'name' =&gt; '\u5546\u54c1A',\n                'price' =&gt; 1000,\n                'description' =&gt; '\u5546\u54c1A\u306e\u8aac\u660e',\n                'created_at' =&gt; now(),\n                'updated_at' =&gt; now(),\n            ],\n            [\n                'name' =&gt; '\u5546\u54c1B',\n                'price' =&gt; 2000,\n                'description' =&gt; '\u5546\u54c1B\u306e\u8aac\u660e',\n                'created_at' =&gt; now(),\n                'updated_at' =&gt; now(),\n            ],\n        ]);\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u5916\u90e8\u30ad\u30fc\u3092\u542b\u3080\u30c7\u30fc\u30bf\u306e\u6295\u5165<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OrdersTableSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u30e6\u30fc\u30b6\u30fcID\u3092\u53d6\u5f97\n        $userIds = DB::table('users')-&gt;pluck('id');\n\n        \/\/ \u5546\u54c1ID\u3092\u53d6\u5f97\n        $productIds = DB::table('products')-&gt;pluck('id');\n\n        foreach($userIds as $userId) {\n            DB::table('orders')-&gt;insert([\n                'user_id' =&gt; $userId,\n                'product_id' =&gt; $productIds-&gt;random(),\n                'quantity' =&gt; rand(1, 5),\n                'order_date' =&gt; now(),\n                'created_at' =&gt; now(),\n                'updated_at' =&gt; now(),\n            ]);\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">run()\u30e1\u30bd\u30c3\u30c9\u306e\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>run()\u30e1\u30bd\u30c3\u30c9\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\u308b\u305f\u3081\u306e\u69d8\u3005\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ComplexDataSeeder extends Seeder\n{\n    public function run()\n    {\n        DB::transaction(function () {\n            \/\/ \u8907\u6570\u30c6\u30fc\u30d6\u30eb\u3078\u306e\u30c7\u30fc\u30bf\u6295\u5165\n            DB::table('categories')-&gt;insert([...]);\n            DB::table('products')-&gt;insert([...]);\n            DB::table('product_categories')-&gt;insert([...]);\n        });\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u30c1\u30e3\u30f3\u30af\u51e6\u7406\u306b\u3088\u308b\u5927\u91cf\u30c7\u30fc\u30bf\u6295\u5165<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class LargeDataSeeder extends Seeder\n{\n    public function run()\n    {\n        collect(range(1, 10000))-&gt;chunk(1000)-&gt;each(function ($chunk) {\n            $records = $chunk-&gt;map(function ($number) {\n                return [\n                    'name' =&gt; \"Item {$number}\",\n                    'created_at' =&gt; now(),\n                    'updated_at' =&gt; now(),\n                ];\n            })-&gt;toArray();\n\n            DB::table('items')-&gt;insert($records);\n        });\n    }\n}<\/pre>\n\n\n\n<p><strong>3. \u74b0\u5883\u306b\u5fdc\u3058\u305f\u30c7\u30fc\u30bf\u5236\u5fa1<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ConfigurableSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u74b0\u5883\u5909\u6570\u306b\u57fa\u3065\u304f\u30c7\u30fc\u30bf\u91cf\u306e\u8abf\u6574\n        $count = App::environment('testing') ? 10 : 100;\n\n        for ($i = 0; $i &lt; $count; $i++) {\n            DB::table('samples')-&gt;insert([\n                'name' =&gt; \"Sample {$i}\",\n                'environment' =&gt; App::environment(),\n                'created_at' =&gt; now(),\n            ]);\n        }\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u5fdc\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u6295\u5165\u8981\u4ef6\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3055\u3089\u306b\u5f37\u529b\u306a\u6a5f\u80fd\u3067\u3042\u308bFactory\u3068\u306e\u9023\u643a\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">Factory\u3068\u306e\u9023\u643a\u3067\u5b9f\u73fe\u3059\u308b\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u751f\u6210<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">ModelFactory\u306e\u57fa\u672c\u6982\u5ff5\u3068\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>ModelFactory\u306f\u3001\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u3084\u30c0\u30df\u30fc\u30c7\u30fc\u30bf\u3092\u52b9\u7387\u7684\u306b\u751f\u6210\u3059\u308b\u305f\u3081\u306e\u5f37\u529b\u306a\u6a5f\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>1. Factory\u306e\u4f5c\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ Artisan\u30b3\u30de\u30f3\u30c9\u3067\u30d5\u30a1\u30af\u30c8\u30ea\u3092\u4f5c\u6210\nphp artisan make:factory ProductFactory --model=Product\n\n\/\/ database\/factories\/ProductFactory.php\nclass ProductFactory extends Factory\n{\n    protected $model = Product::class;\n\n    public function definition()\n    {\n        return [\n            'name' =&gt; $this-&gt;faker-&gt;word,\n            'price' =&gt; $this-&gt;faker-&gt;numberBetween(100, 10000),\n            'description' =&gt; $this-&gt;faker-&gt;sentence,\n            'stock' =&gt; $this-&gt;faker-&gt;randomNumber(2),\n            'created_at' =&gt; now(),\n            'updated_at' =&gt; now(),\n        ];\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u72b6\u614b\u306e\u5b9a\u7fa9<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ProductFactory extends Factory\n{\n    public function outOfStock()\n    {\n        return $this-&gt;state(function (array $attributes) {\n            return [\n                'stock' =&gt; 0,\n                'status' =&gt; 'unavailable'\n            ];\n        });\n    }\n\n    public function onSale()\n    {\n        return $this-&gt;state(function (array $attributes) {\n            return [\n                'price' =&gt; $this-&gt;faker-&gt;numberBetween(50, 500),\n                'status' =&gt; 'on_sale'\n            ];\n        });\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">Factory\u3068Seeder\u306e\u7d44\u307f\u5408\u308f\u305b\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p>Seeder\u3068Factory\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u67d4\u8edf\u306a\u30c7\u30fc\u30bf\u751f\u6210\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u57fa\u672c\u7684\u306a\u7d44\u307f\u5408\u308f\u305b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ProductsTableSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u901a\u5e38\u306e\u30c7\u30fc\u30bf\u751f\u6210\n        Product::factory()-&gt;count(50)-&gt;create();\n\n        \/\/ \u7279\u5b9a\u306e\u72b6\u614b\u3092\u6301\u3064\u30c7\u30fc\u30bf\u751f\u6210\n        Product::factory()\n            -&gt;count(10)\n            -&gt;outOfStock()\n            -&gt;create();\n\n        Product::factory()\n            -&gt;count(5)\n            -&gt;onSale()\n            -&gt;create();\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u6761\u4ef6\u4ed8\u304d\u30c7\u30fc\u30bf\u751f\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class UsersTableSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u7ba1\u7406\u8005\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210\n        User::factory()\n            -&gt;count(3)\n            -&gt;state(function (array $attributes) {\n                return [\n                    'role' =&gt; 'admin',\n                    'email_verified_at' =&gt; now(),\n                ];\n            })\n            -&gt;create();\n\n        \/\/ \u4e00\u822c\u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210\n        User::factory()\n            -&gt;count(100)\n            -&gt;state(function (array $attributes) {\n                return [\n                    'role' =&gt; 'user',\n                    'email_verified_at' =&gt; $this-&gt;faker-&gt;randomElement([now(), null]),\n                ];\n            })\n            -&gt;create();\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u542b\u3080\u30c7\u30fc\u30bf\u306e\u751f\u6210\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u8907\u96d1\u306a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u6301\u3064\u30c7\u30fc\u30bf\u306e\u751f\u6210\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. has\u3068for\u306b\u3088\u308b\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u751f\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class BlogPostsSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u6295\u7a3f\u3068\u95a2\u9023\u30b3\u30e1\u30f3\u30c8\u3092\u540c\u6642\u751f\u6210\n        Post::factory()\n            -&gt;count(20)\n            -&gt;has(Comment::factory()-&gt;count(5))\n            -&gt;create();\n\n        \/\/ \u7279\u5b9a\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u95a2\u9023\u4ed8\u3051\u3089\u308c\u305f\u6295\u7a3f\u3092\u751f\u6210\n        User::factory()\n            -&gt;count(5)\n            -&gt;has(\n                Post::factory()\n                    -&gt;count(3)\n                    -&gt;state(function (array $attributes, User $user) {\n                        return ['author_name' =&gt; $user-&gt;name];\n                    })\n            )\n            -&gt;create();\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u591a\u5bfe\u591a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u751f\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class CourseEnrollmentsSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u8b1b\u5ea7\u3068\u53d7\u8b1b\u751f\u306e\u95a2\u4fc2\u3092\u751f\u6210\n        Course::factory()\n            -&gt;count(10)\n            -&gt;has(\n                Student::factory()\n                    -&gt;count(30)\n                    -&gt;state(function (array $attributes, Course $course) {\n                        return [\n                            'enrolled_at' =&gt; $this-&gt;faker-&gt;dateTimeBetween(\n                                $course-&gt;start_date,\n                                $course-&gt;end_date\n                            )\n                        ];\n                    })\n            )\n            -&gt;create();\n    }\n}<\/pre>\n\n\n\n<p><strong>3. \u8907\u96d1\u306a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u968e\u5c64\u306e\u751f\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ECommerceSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u30ab\u30c6\u30b4\u30ea\u3001\u5546\u54c1\u3001\u6ce8\u6587\u306e\u968e\u5c64\u69cb\u9020\u3092\u751f\u6210\n        Category::factory()\n            -&gt;count(5)\n            -&gt;has(\n                Product::factory()\n                    -&gt;count(10)\n                    -&gt;has(\n                        OrderItem::factory()\n                            -&gt;count(3)\n                            -&gt;for(\n                                Order::factory()\n                                    -&gt;state(function (array $attributes) {\n                                        return [\n                                            'total_amount' =&gt; 0  \/\/ \u5f8c\u3067\u8a08\u7b97\n                                        ];\n                                    })\n                            )\n                    )\n            )\n            -&gt;create();\n\n        \/\/ \u6ce8\u6587\u5408\u8a08\u91d1\u984d\u306e\u66f4\u65b0\n        Order::all()-&gt;each(function ($order) {\n            $order-&gt;update([\n                'total_amount' =&gt; $order-&gt;orderItems-&gt;sum('price')\n            ]);\n        });\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c6\u30b9\u30c8\u3084\u958b\u767a\u306b\u5fc5\u8981\u306a\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u3082\u7c21\u5358\u306b\u751f\u6210\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5b9f\u8df5\u7684\u306a\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">\u5b9f\u8df5\u7684\u306aSeeder\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af\u96c6<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u672c\u756a\u74b0\u5883\u3068\u958b\u767a\u74b0\u5883\u3067\u306e\u30c7\u30fc\u30bf\u51fa\u3057\u5206\u3051<\/h3>\n\n\n\n<p>\u74b0\u5883\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u30c7\u30fc\u30bf\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u74b0\u5883\u5909\u6570\u3092\u4f7f\u7528\u3057\u305f\u5236\u5fa1<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DatabaseSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u57fa\u672c\u30c7\u30fc\u30bf\u306f\u5168\u74b0\u5883\u3067\u5fc5\u8981\n        $this-&gt;call(BasicDataSeeder::class);\n\n        \/\/ \u74b0\u5883\u306b\u5fdc\u3058\u305f\u30b7\u30fc\u30c0\u30fc\u306e\u5b9f\u884c\n        if (app()-&gt;environment('local', 'development')) {\n            $this-&gt;call([\n                TestUserSeeder::class,\n                DummyContentSeeder::class,\n            ]);\n        }\n\n        if (app()-&gt;environment('production')) {\n            $this-&gt;call([\n                ProductionConfigSeeder::class,\n                InitialMasterDataSeeder::class,\n            ]);\n        }\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u6d3b\u7528\u3057\u305f\u30c7\u30fc\u30bf\u5236\u5fa1<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/seeder.php\nreturn [\n    'data_volume' =&gt; [\n        'local' =&gt; [\n            'users' =&gt; 100,\n            'products' =&gt; 1000,\n        ],\n        'testing' =&gt; [\n            'users' =&gt; 10,\n            'products' =&gt; 50,\n        ],\n        'production' =&gt; [\n            'users' =&gt; 0,\n            'products' =&gt; 0,\n        ],\n    ],\n];\n\n\/\/ \u30b7\u30fc\u30c0\u30fc\u3067\u306e\u4f7f\u7528\nclass ConfigurableSeeder extends Seeder\n{\n    public function run()\n    {\n        $env = app()-&gt;environment();\n        $count = config(\"seeder.data_volume.{$env}.users\", 0);\n\n        User::factory()-&gt;count($count)-&gt;create();\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u306e\u52b9\u7387\u7684\u306a\u751f\u6210\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u52b9\u7387\u7684\u306b\u751f\u6210\u3059\u308b\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u30c1\u30e3\u30f3\u30af\u51e6\u7406\u306b\u3088\u308b\u30e1\u30e2\u30ea\u7ba1\u7406<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class LargeDataSetSeeder extends Seeder\n{\n    public function run()\n    {\n        $totalRecords = 1000000;\n        $chunkSize = 1000;\n\n        \/\/ \u30e1\u30e2\u30ea\u52b9\u7387\u306e\u826f\u3044\u30c7\u30fc\u30bf\u751f\u6210\n        collect(range(1, $totalRecords))\n            -&gt;chunk($chunkSize)\n            -&gt;each(function ($chunk) {\n                DB::table('large_data')-&gt;insert(\n                    $chunk-&gt;map(function ($number) {\n                        return [\n                            'reference_code' =&gt; \"REF-{$number}\",\n                            'data' =&gt; json_encode([\n                                'field1' =&gt; $this-&gt;faker-&gt;sentence,\n                                'field2' =&gt; $this-&gt;faker-&gt;randomNumber,\n                            ]),\n                            'created_at' =&gt; now(),\n                        ];\n                    })-&gt;toArray()\n                );\n            });\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u30ad\u30e5\u30fc\u3092\u6d3b\u7528\u3057\u305f\u975e\u540c\u671f\u30c7\u30fc\u30bf\u751f\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class QueuedDataSeeder extends Seeder\n{\n    public function run()\n    {\n        $batches = 100;\n        $recordsPerBatch = 1000;\n\n        for ($i = 0; $i &lt; $batches; $i++) {\n            ProcessDataBatch::dispatch($recordsPerBatch)\n                -&gt;onQueue('seeding');\n        }\n    }\n}\n\n\/\/ \u30b8\u30e7\u30d6\u30af\u30e9\u30b9\nclass ProcessDataBatch implements ShouldQueue\n{\n    public function handle()\n    {\n        User::factory()\n            -&gt;count($this-&gt;recordsPerBatch)\n            -&gt;create()\n            -&gt;each(function ($user) {\n                \/\/ \u95a2\u9023\u30c7\u30fc\u30bf\u306e\u751f\u6210\n                Profile::factory()-&gt;for($user)-&gt;create();\n                Post::factory()-&gt;count(5)-&gt;for($user)-&gt;create();\n            });\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u65e2\u5b58\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089Seeder\u3092\u751f\u6210\u3059\u308b\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u5b9f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30b7\u30fc\u30c0\u30fc\u3092\u81ea\u52d5\u751f\u6210\u3059\u308b\u5b9f\u7528\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u30c7\u30fc\u30bf\u62bd\u51fa\u3068\u30b7\u30fc\u30c0\u30fc\u751f\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DatabaseToSeederGenerator\n{\n    public static function generate($table, $limit = 10)\n    {\n        $data = DB::table($table)-&gt;limit($limit)-&gt;get();\n\n        $output = \"&lt;?php\\n\\n\";\n        $output .= \"namespace Database\\\\Seeders;\\n\\n\";\n        $output .= \"use Illuminate\\\\Database\\\\Seeder;\\n\";\n        $output .= \"use Illuminate\\\\Support\\\\Facades\\\\DB;\\n\\n\";\n        $output .= \"class {$table}Seeder extends Seeder\\n\";\n        $output .= \"{\\n\";\n        $output .= \"    public function run()\\n\";\n        $output .= \"    {\\n\";\n        $output .= \"        DB::table('{$table}')-&gt;insert([\\n\";\n\n        foreach ($data as $row) {\n            $output .= \"            [\\n\";\n            foreach ((array)$row as $key =&gt; $value) {\n                $value = is_string($value) ? \"'{$value}'\" : $value;\n                $output .= \"                '{$key}' =&gt; {$value},\\n\";\n            }\n            $output .= \"            ],\\n\";\n        }\n\n        $output .= \"        ]);\\n\";\n        $output .= \"    }\\n\";\n        $output .= \"}\\n\";\n\n        file_put_contents(\n            database_path(\"seeders\/{$table}Seeder.php\"),\n            $output\n        );\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u30c7\u30fc\u30bf\u30af\u30ea\u30fc\u30cb\u30f3\u30b0\u3068\u5909\u63db<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DataCleanupSeeder extends Seeder\n{\n    protected function cleanupData($data)\n    {\n        return collect($data)-&gt;map(function ($item) {\n            \/\/ \u6a5f\u5bc6\u60c5\u5831\u306e\u524a\u9664\n            unset($item['password']);\n            unset($item['remember_token']);\n\n            \/\/ \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u533f\u540d\u5316\n            if (isset($item['email'])) {\n                $item['email'] = \"user{$item['id']}@example.com\";\n            }\n\n            \/\/ \u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u306e\u8abf\u6574\n            if (isset($item['created_at'])) {\n                $item['created_at'] = now();\n            }\n\n            return $item;\n        })-&gt;toArray();\n    }\n\n    public function run()\n    {\n        $rawData = DB::table('users')-&gt;get();\n        $cleanData = $this-&gt;cleanupData($rawData);\n\n        DB::table('users')-&gt;insert($cleanData);\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5b9f\u8df5\u7684\u306a\u30c7\u30fc\u30bf\u751f\u6210\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u304a\u3051\u308b\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u6ce8\u610f\u70b9\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">Seeder\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u6ce8\u610f\u70b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305fSeeder\u8a2d\u8a08<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b7\u30fc\u30c7\u30a3\u30f3\u30b0\u306b\u304a\u3044\u3066\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f\u91cd\u8981\u306a\u8003\u616e\u70b9\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class OptimizedProductSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u274c \u60aa\u3044\u4f8b\uff1a\u30e1\u30e2\u30ea\u3092\u5927\u91cf\u6d88\u8cbb\n        $products = Product::factory()-&gt;count(10000)-&gt;make();\n        DB::table('products')-&gt;insert($products-&gt;toArray());\n\n        \/\/ \u2705 \u826f\u3044\u4f8b\uff1a\u30c1\u30e3\u30f3\u30af\u51e6\u7406\u3067\u30e1\u30e2\u30ea\u4f7f\u7528\u3092\u6291\u5236\n        Product::factory()\n            -&gt;count(10000)\n            -&gt;chunk(1000)\n            -&gt;each(function ($chunk) {\n                DB::table('products')-&gt;insert($chunk-&gt;toArray());\n            });\n    }\n}<\/pre>\n\n\n\n<p><strong>\u30d0\u30eb\u30af\u30a4\u30f3\u30b5\u30fc\u30c8\u306e\u6d3b\u7528<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class PerformanceOptimizedSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u274c \u60aa\u3044\u4f8b\uff1a\u500b\u5225\u306eINSERT\u6587\u304c\u767a\u884c\u3055\u308c\u308b\n        foreach (range(1, 1000) as $i) {\n            DB::table('items')-&gt;insert([\n                'name' =&gt; \"Item {$i}\",\n                'created_at' =&gt; now(),\n            ]);\n        }\n\n        \/\/ \u2705 \u826f\u3044\u4f8b\uff1a\u30d0\u30eb\u30af\u30a4\u30f3\u30b5\u30fc\u30c8\u3067\u51e6\u7406\u3092\u52b9\u7387\u5316\n        $items = collect(range(1, 1000))-&gt;map(function ($i) {\n            return [\n                'name' =&gt; \"Item {$i}\",\n                'created_at' =&gt; now(),\n            ];\n        });\n\n        DB::table('items')-&gt;insert($items-&gt;toArray());\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u4fdd\u5b88\u6027\u306e\u9ad8\u3044Seeder\u30b3\u30fc\u30c9\u306e\u66f8\u304d\u65b9<\/h3>\n\n\n\n<p>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3092\u8003\u616e\u3057\u305f\u30b3\u30fc\u30c9\u8a2d\u8a08\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u8a2d\u5b9a\u306e\u5916\u90e8\u5316<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/seeder.php\nreturn [\n    'test_data' =&gt; [\n        'admin_users' =&gt; [\n            ['email' =&gt; 'admin1@example.com', 'role' =&gt; 'super_admin'],\n            ['email' =&gt; 'admin2@example.com', 'role' =&gt; 'admin'],\n        ],\n        'categories' =&gt; [\n            '\u958b\u767a', '\u30c7\u30b6\u30a4\u30f3', '\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0', '\u904b\u7528',\n        ],\n    ],\n];\n\n\/\/ \u8a2d\u5b9a\u3092\u6d3b\u7528\u3057\u305fSeeder\nclass ConfigurableAdminSeeder extends Seeder\n{\n    public function run()\n    {\n        $adminUsers = config('seeder.test_data.admin_users');\n\n        foreach ($adminUsers as $admin) {\n            User::factory()\n                -&gt;state($admin)\n                -&gt;create();\n        }\n    }\n}<\/pre>\n\n\n\n<p><strong>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3068\u518d\u5229\u7528<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class BaseSeeder extends Seeder\n{\n    protected function createWithRelations($model, $count, $relations)\n    {\n        return $model::factory()\n            -&gt;count($count)\n            -&gt;has($relations)\n            -&gt;create();\n    }\n\n    protected function truncateTable($table)\n    {\n        DB::statement('SET FOREIGN_KEY_CHECKS=0');\n        DB::table($table)-&gt;truncate();\n        DB::statement('SET FOREIGN_KEY_CHECKS=1');\n    }\n}\n\nclass BlogSeeder extends BaseSeeder\n{\n    public function run()\n    {\n        $this-&gt;truncateTable('posts');\n\n        $this-&gt;createWithRelations(\n            Post::class,\n            10,\n            Comment::factory()-&gt;count(5)\n        );\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u3088\u304f\u3042\u308b\u30c8\u30e9\u30d6\u30eb\u3068\u305d\u306e\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u4e00\u822c\u7684\u306a\u554f\u984c\u3068\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u5916\u90e8\u30ad\u30fc\u5236\u7d04\u306e\u554f\u984c<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class RelationalDataSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u274c \u60aa\u3044\u4f8b\uff1a\u5916\u90e8\u30ad\u30fc\u5236\u7d04\u30a8\u30e9\u30fc\u306e\u53ef\u80fd\u6027\n        Order::factory()-&gt;count(10)-&gt;create();\n        User::factory()-&gt;count(5)-&gt;create();\n\n        \/\/ \u2705 \u826f\u3044\u4f8b\uff1a\u4f9d\u5b58\u95a2\u4fc2\u3092\u8003\u616e\u3057\u305f\u9806\u5e8f\n        $users = User::factory()-&gt;count(5)-&gt;create();\n\n        $users-&gt;each(function ($user) {\n            Order::factory()\n                -&gt;count(2)\n                -&gt;for($user)\n                -&gt;create();\n        });\n    }\n}<\/pre>\n\n\n\n<p><strong>\u4e00\u610f\u5236\u7d04\u306e\u885d\u7a81<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class UniqueConstraintSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u274c \u60aa\u3044\u4f8b\uff1a\u4e00\u610f\u5236\u7d04\u9055\u53cd\u306e\u53ef\u80fd\u6027\n        User::factory()-&gt;count(100)-&gt;create([\n            'email' =&gt; 'test@example.com'\n        ]);\n\n        \/\/ \u2705 \u826f\u3044\u4f8b\uff1a\u4e00\u610f\u6027\u3092\u4fdd\u8a3c\n        User::factory()\n            -&gt;count(100)\n            -&gt;sequence(fn ($sequence) =&gt; [\n                'email' =&gt; \"user{$sequence-&gt;index}@example.com\"\n            ])\n            -&gt;create();\n    }\n}<\/pre>\n\n\n\n<p><strong>\u30c7\u30fc\u30bf\u6574\u5408\u6027\u306e\u78ba\u4fdd<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DataIntegritySeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u274c \u60aa\u3044\u4f8b\uff1a\u6574\u5408\u6027\u30c1\u30a7\u30c3\u30af\u306a\u3057\n        Product::factory()-&gt;count(10)-&gt;create([\n            'price' =&gt; rand(-1000, 1000)\n        ]);\n\n        \/\/ \u2705 \u826f\u3044\u4f8b\uff1a\u30c7\u30fc\u30bf\u306e\u6574\u5408\u6027\u3092\u78ba\u4fdd\n        Product::factory()\n            -&gt;count(10)\n            -&gt;state(function (array $attributes) {\n                return [\n                    'price' =&gt; max(0, $attributes['price']),\n                    'stock' =&gt; max(0, $attributes['stock']),\n                    'status' =&gt; $attributes['stock'] &gt; 0 ? 'available' : 'out_of_stock',\n                ];\n            })\n            -&gt;create();\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u610f\u8b58\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u5b89\u5b9a\u3057\u305f\u4fdd\u5b88\u6027\u306e\u9ad8\u3044Seeder\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u767a\u5c55\u7684\u306a\u6d3b\u7528\u4e8b\u4f8b\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">\u767a\u5c55\u7684\u306aSeeder\u6d3b\u7528\u4e8b\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306eSeeder\u6d3b\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30c6\u30b9\u30c8\u306e\u54c1\u8cea\u3068\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306eSeeder\u6d3b\u7528\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u5225\u306e\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u4f5c\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class TestDataSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u57fa\u672c\u7684\u306a\u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\n        $basicUser = User::factory()-&gt;create([\n            'email' =&gt; 'test@example.com',\n            'role' =&gt; 'user'\n        ]);\n\n        \/\/ \u7279\u5b9a\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u7528\u30c7\u30fc\u30bf\n        $this-&gt;createSubscriptionTestData();\n        $this-&gt;createOrderProcessingTestData();\n    }\n\n    private function createSubscriptionTestData()\n    {\n        $user = User::factory()-&gt;create([\n            'email' =&gt; 'subscriber@example.com'\n        ]);\n\n        Subscription::factory()\n            -&gt;count(3)\n            -&gt;sequence(\n                ['status' =&gt; 'active', 'trial_ends_at' =&gt; now()-&gt;addDays(7)],\n                ['status' =&gt; 'cancelled', 'ends_at' =&gt; now()-&gt;addDays(30)],\n                ['status' =&gt; 'expired', 'ends_at' =&gt; now()-&gt;subDays(1)]\n            )\n            -&gt;for($user)\n            -&gt;create();\n    }\n\n    private function createOrderProcessingTestData()\n    {\n        $orders = Order::factory()\n            -&gt;count(4)\n            -&gt;sequence(\n                ['status' =&gt; 'pending'],\n                ['status' =&gt; 'processing'],\n                ['status' =&gt; 'completed'],\n                ['status' =&gt; 'failed']\n            )\n            -&gt;create();\n\n        foreach ($orders as $order) {\n            OrderItem::factory()\n                -&gt;count(rand(1, 3))\n                -&gt;for($order)\n                -&gt;create();\n        }\n    }\n}<\/pre>\n\n\n\n<p><strong>\u30d5\u30a3\u30fc\u30c1\u30e3\u30fc\u30c6\u30b9\u30c8\u7528\u306e\u30c7\u30fc\u30bf\u751f\u6210<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class FeatureTestSeeder extends Seeder\n{\n    public function run()\n    {\n        \/\/ \u8907\u6570\u306e\u6a5f\u80fd\u30c6\u30b9\u30c8\u7528\u30b7\u30ca\u30ea\u30aa\u30c7\u30fc\u30bf\n        $scenarios = [\n            'checkout_process' =&gt; function () {\n                $user = User::factory()\n                    -&gt;has(Cart::factory()-&gt;withItems(3))\n                    -&gt;create();\n\n                return compact('user');\n            },\n\n            'subscription_renewal' =&gt; function () {\n                $user = User::factory()\n                    -&gt;has(\n                        Subscription::factory()\n                            -&gt;state(['ends_at' =&gt; now()-&gt;addDay()])\n                    )\n                    -&gt;create();\n\n                return compact('user');\n            }\n        ];\n\n        \/\/ \u30b7\u30ca\u30ea\u30aa\u30c7\u30fc\u30bf\u306e\u751f\u6210\u3068\u4fdd\u5b58\n        foreach ($scenarios as $name =&gt; $creator) {\n            $this-&gt;scenarios[$name] = $creator();\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u672c\u756a\u74b0\u5883\u3067\u306e\u30de\u30b9\u30bf\u30fc\u30c7\u30fc\u30bf\u7ba1\u7406<\/h3>\n\n\n\n<p>\u672c\u756a\u74b0\u5883\u3067\u5b89\u5168\u306b\u30de\u30b9\u30bf\u30fc\u30c7\u30fc\u30bf\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u624b\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3055\u308c\u305f\u30de\u30b9\u30bf\u30fc\u30c7\u30fc\u30bf<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class MasterDataSeeder extends Seeder\n{\n    protected $version = '1.0.0';\n    protected $dataPath = 'database\/master_data\/';\n\n    public function run()\n    {\n        if ($this-&gt;isDataAlreadySeeded()) {\n            return;\n        }\n\n        DB::transaction(function () {\n            $this-&gt;seedCategories();\n            $this-&gt;seedTaxRates();\n            $this-&gt;seedSystemConfigs();\n\n            $this-&gt;recordSeederExecution();\n        });\n    }\n\n    protected function isDataAlreadySeeded()\n    {\n        return DB::table('seeder_logs')-&gt;where([\n            'seeder' =&gt; static::class,\n            'version' =&gt; $this-&gt;version\n        ])-&gt;exists();\n    }\n\n    protected function seedCategories()\n    {\n        $categories = json_decode(\n            file_get_contents($this-&gt;dataPath . 'categories.json'),\n            true\n        );\n\n        foreach ($categories as $category) {\n            Category::updateOrCreate(\n                ['code' =&gt; $category['code']],\n                $category\n            );\n        }\n    }\n\n    protected function recordSeederExecution()\n    {\n        DB::table('seeder_logs')-&gt;insert([\n            'seeder' =&gt; static::class,\n            'version' =&gt; $this-&gt;version,\n            'executed_at' =&gt; now()\n        ]);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3078\u306e\u7d44\u307f\u8fbc\u307f\u65b9<\/h3>\n\n\n\n<p>\u81ea\u52d5\u5316\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306bSeeder\u3092\u52b9\u679c\u7684\u306b\u7d71\u5408\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u74b0\u5883\u5225\u306eSeeder\u5b9f\u884c\u5236\u5fa1<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DeploymentSeeder extends Seeder\n{\n    public function run()\n    {\n        $environment = app()-&gt;environment();\n        $deployStage = config('deploy.stage');\n\n        match ($environment) {\n            'testing' =&gt; $this-&gt;runTestingSeeds(),\n            'staging' =&gt; $this-&gt;runStagingSeeds(),\n            'production' =&gt; $this-&gt;runProductionSeeds(),\n            default =&gt; $this-&gt;runDevelopmentSeeds(),\n        };\n    }\n\n    protected function runProductionSeeds()\n    {\n        \/\/ \u30b7\u30b9\u30c6\u30e0\u306e\u57fa\u672c\u8a2d\u5b9a\u306e\u307f\n        $this-&gt;call([\n            SystemConfigSeeder::class,\n            MasterDataSeeder::class,\n        ]);\n    }\n\n    protected function runStagingSeeds()\n    {\n        \/\/ \u672c\u756a\u30c7\u30fc\u30bf\u306e\u30b5\u30d6\u30bb\u30c3\u30c8\n        $this-&gt;call([\n            SystemConfigSeeder::class,\n            MasterDataSeeder::class,\n            SampleCustomerSeeder::class,\n        ]);\n    }\n\n    protected function runTestingSeeds()\n    {\n        \/\/ \u30c6\u30b9\u30c8\u7528\u306e\u5b8c\u5168\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\n        $this-&gt;call([\n            TestDataSeeder::class,\n            FeatureTestSeeder::class,\n        ]);\n    }\n}<\/pre>\n\n\n\n<p><strong>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u4f8b<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n\n# \u30c7\u30d7\u30ed\u30a4\u74b0\u5883\u306e\u5224\u5b9a\nENVIRONMENT=$1\n\n# \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3068\u30b7\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u5b9f\u884c\nphp artisan migrate --force\nphp artisan db:seed --class=DeploymentSeeder --force\n\n# \u74b0\u5883\u56fa\u6709\u306e\u5f8c\u51e6\u7406\ncase $ENVIRONMENT in\n  \"production\")\n    php artisan cache:clear\n    php artisan config:cache\n    php artisan route:cache\n    ;;\n  \"staging\")\n    php artisan cache:clear\n    ;;\nesac<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u767a\u5c55\u7684\u306a\u6d3b\u7528\u4f8b\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u9069\u5207\u306aSeeder\u5b9f\u88c5\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002Seeder\u306f\u5358\u306a\u308b\u30c7\u30fc\u30bf\u6295\u5165\u30c4\u30fc\u30eb\u3067\u306f\u306a\u304f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u5168\u4f53\u3092\u652f\u3048\u308b\u91cd\u8981\u306a\u57fa\u76e4\u3068\u3057\u3066\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33,12],"tags":[],"class_list":{"0":"post-3196","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php-laravel","7":"category-php","8":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3196"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3196\/revisions"}],"predecessor-version":[{"id":3199,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3196\/revisions\/3199"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}