{"id":3282,"date":"2025-03-24T08:46:32","date_gmt":"2025-03-23T23:46:32","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3282"},"modified":"2025-03-24T08:47:02","modified_gmt":"2025-03-23T23:47:02","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91laravel%e5%85%a5%e9%96%80-2024%e5%b9%b4%e6%b1%ba%e5%ae%9a%e7%89%88-%e7%92%b0%e5%a2%83%e6%a7%8b%e7%af%89%e3%81%8b%e3%82%89%e8%aa%8d%e8%a8%bc%e5%ae%9f","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3282","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Laravel\u5165\u9580 2024\u5e74\u6c7a\u5b9a\u7248 &#8211; \u74b0\u5883\u69cb\u7bc9\u304b\u3089\u8a8d\u8a3c\u5b9f\u88c5\u307e\u3067\u5b8c\u5168\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\u3068\u306f\uff1f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u5fb4\u3068\u5229\u70b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e2d\u3067Laravel\u304c\u9078\u3070\u308c\u308b\u7406\u7531<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">Laravel\u3067\u5b9f\u73fe\u3067\u304d\u308b\u6a5f\u80fd\u3068\u958b\u767a\u52b9\u7387\u5316\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">Laravel\u958b\u767a\u74b0\u5883\u306e\u69cb\u7bc9\u624b\u9806<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">Docker\u306b\u3088\u308bLaravel\u74b0\u5883\u69cb\u7bc9\u306e\u5177\u4f53\u7684\u306a\u624b\u9806<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">VScode\u306e\u63a8\u5968\u8a2d\u5b9a\u3068\u30c7\u30d0\u30c3\u30b0\u74b0\u5883\u306e\u6e96\u5099<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">Laravel\u306e\u57fa\u672c\u6982\u5ff5\u30de\u30b9\u30bf\u30fc<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5f79\u5272\u7406\u89e3<\/a>      <\/li>      <li>        <a href=\"#i-8\">Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u30d3\u30e5\u30fc\u4f5c\u6210\u306e\u57fa\u790e<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">Eloquent\u306b\u3088\u308bDB\u64cd\u4f5c\u306e\u57fa\u672c<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">\u5b9f\u8df5\u7684\u306aCRUD\u6a5f\u80fd\u306e\u5b9f\u88c5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">\u30bf\u30b9\u30af\u7ba1\u7406\u30a2\u30d7\u30ea\u3092\u4f8b\u306b\u3057\u305f\u57fa\u672c\u6a5f\u80fd\u306e\u4f5c\u308a\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3068\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306e\u5b9f\u88c5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-13\">\u8a8d\u8a3c\u6a5f\u80fd\u306e\u5b9f\u88c5\u3068\u6d3b\u7528\u65b9\u6cd5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">Laravel Breeze\u3092\u4f7f\u3063\u305f\u8a8d\u8a3c\u6a5f\u80fd\u306e\u5c0e\u5165<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-15\">\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u30fb\u30ed\u30b0\u30a4\u30f3\u6a5f\u80fd\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-16\">Laravel\u958b\u767a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-17\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-18\">\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u8a2d\u8a08\u306e\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-19\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-20\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-21\">\u52b9\u7387\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u306e\u9032\u3081\u65b9<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-22\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1a\u5b9f\u8df5\u7684\u306a\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-23\">\u304a\u3059\u3059\u3081\u306e\u5b66\u7fd2\u6559\u6750\u3068\u60c5\u5831\u6e90<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-24\">\u30b9\u30c6\u30c3\u30d7\u30a2\u30c3\u30d7\u306e\u305f\u3081\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/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\u3068\u306f\uff1f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u5fb4\u3068\u5229\u70b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e2d\u3067Laravel\u304c\u9078\u3070\u308c\u308b\u7406\u7531<\/h3>\n\n\n\n<p>Laravel\u306f\u3001\u30a8\u30ec\u30ac\u30f3\u30c8\u3067\u8868\u73fe\u529b\u8c4a\u304b\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u3001\u4e16\u754c\u4e2d\u306e\u958b\u767a\u8005\u304b\u3089\u652f\u6301\u3055\u308c\u3066\u3044\u307e\u3059\u30022024\u5e74\u73fe\u5728\u3001PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e2d\u3067\u6700\u3082\u4eba\u6c17\u304c\u3042\u308a\u3001GitHub\u4e0a\u3067\u3082\u6700\u3082\u591a\u304f\u306e\u30b9\u30bf\u30fc\u6570\u3092\u7372\u5f97\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>Laravel\u304c\u9078\u3070\u308c\u308b\u4e3b\u306a\u7406\u7531\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5145\u5b9f\u3057\u305f\u6a5f\u80fd\u30bb\u30c3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f37\u529b\u306aORM\u3067\u3042\u308bEloquent<\/li>\n\n\n\n<li>\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u611f\u7684\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/li>\n\n\n\n<li>\u5805\u7262\u306a\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u7ba1\u7406\u3084\u30b8\u30e7\u30d6\u30ad\u30e5\u30fc\u30a4\u30f3\u30b0\u6a5f\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u512a\u308c\u305f\u958b\u767a\u8005\u4f53\u9a13<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8c4a\u5bcc\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>Artisan\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308b\u958b\u767a\u52b9\u7387\u5316<\/li>\n\n\n\n<li>PHPUnit\u306b\u3088\u308b\u30c6\u30b9\u30c8\u6a5f\u80fd\u306e\u6a19\u6e96\u642d\u8f09<\/li>\n\n\n\n<li>\u5206\u304b\u308a\u3084\u3059\u3044\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u306e\u5145\u5b9f<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CSRF\u4fdd\u8b77<\/li>\n\n\n\n<li>XSS\u5bfe\u7b56<\/li>\n\n\n\n<li>SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u9632\u6b62<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">Laravel\u3067\u5b9f\u73fe\u3067\u304d\u308b\u6a5f\u80fd\u3068\u958b\u767a\u52b9\u7387\u5316\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>Laravel\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6a5f\u80fd\u3092\u52b9\u7387\u7684\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>1. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u52b9\u7387\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=\"\">\/\/ Eloquent\u3092\u4f7f\u7528\u3057\u305f\u30b7\u30f3\u30d7\u30eb\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\n$users = User::where('active', 1)\n            -&gt;orderBy('name')\n            -&gt;get();\n\n\/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u7c21\u5358\u306a\u5b9a\u7fa9\npublic function posts() {\n    return $this-&gt;hasMany(Post::class);\n}<\/pre>\n\n\n\n<p><strong>2. \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc<\/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=\"\">\/\/ \u30b7\u30f3\u30d7\u30eb\u306a\u30eb\u30fc\u30c8\u5b9a\u7fa9\nRoute::get('\/posts', [PostController::class, 'index']);\nRoute::resource('posts', PostController::class);<\/pre>\n\n\n\n<p><strong>3. \u8a8d\u8a3c\u6a5f\u80fd\u306e\u5b9f\u88c5<\/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=\"\">\/\/ \u8a8d\u8a3c\u6a5f\u80fd\u306e\u7c21\u5358\u306a\u5b9f\u88c5\nphp artisan make:auth<\/pre>\n\n\n\n<p><strong>\u958b\u767a\u52b9\u7387\u5316\u306e\u30dd\u30a4\u30f3\u30c8\uff1a<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u74b0\u5883\u306e\u7d71\u4e00<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker\u3092\u4f7f\u7528\u3057\u305f\u74b0\u5883\u69cb\u7bc9<\/li>\n\n\n\n<li>Laravel Sail\u306b\u3088\u308b\u958b\u767a\u74b0\u5883\u306e\u6a19\u6e96\u5316<\/li>\n\n\n\n<li>composer.json\u306b\u3088\u308b\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b3\u30fc\u30c9\u54c1\u8cea\u306e\u7dad\u6301<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PSR\u6e96\u62e0\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04<\/li>\n\n\n\n<li>Laravel Pint \u306b\u3088\u308b\u30b3\u30fc\u30c9\u6574\u5f62<\/li>\n\n\n\n<li>PHPStan\u306b\u3088\u308b\u9759\u7684\u89e3\u6790<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitHub\u30a2\u30af\u30b7\u30e7\u30f3\u306b\u3088\u308bCI\/CD<\/li>\n\n\n\n<li>Laravel Forge\u306b\u3088\u308b\u7c21\u5358\u306a\u30c7\u30d7\u30ed\u30a4<\/li>\n\n\n\n<li>Envoy\u306b\u3088\u308b\u30c7\u30d7\u30ed\u30a4\u30b9\u30af\u30ea\u30d7\u30c8\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<p>Laravel\u306e\u63a1\u7528\u306b\u3088\u308a\u3001\u958b\u767a\u8005\u306f\u57fa\u76e4\u3068\u306a\u308b\u6a5f\u80fd\u306e\u5b9f\u88c5\u306b\u6642\u9593\u3092\u8cbb\u3084\u3059\u3053\u3068\u306a\u304f\u3001\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u88c5\u306b\u96c6\u4e2d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u30012024\u5e74\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306f\u3001\u3055\u3089\u306a\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5411\u4e0a\u3068\u958b\u767a\u4f53\u9a13\u306e\u6539\u5584\u304c\u56f3\u3089\u308c\u3066\u304a\u308a\u3001\u3088\u308a\u52b9\u7387\u7684\u306a\u958b\u767a\u304c\u53ef\u80fd\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">Laravel\u958b\u767a\u74b0\u5883\u306e\u69cb\u7bc9\u624b\u9806<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">Docker\u306b\u3088\u308bLaravel\u74b0\u5883\u69cb\u7bc9\u306e\u5177\u4f53\u7684\u306a\u624b\u9806<\/h3>\n\n\n\n<p>2024\u5e74\u73fe\u5728\u3001Laravel\u306e\u958b\u767a\u74b0\u5883\u69cb\u7bc9\u306b\u306f\u3001Docker\u74b0\u5883\u306e\u5229\u7528\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u3067\u306f\u3001Docker Compose\u3068Laravel Sail\u3092\u4f7f\u7528\u3057\u305f\u74b0\u5883\u69cb\u7bc9\u624b\u9806\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/p>\n\n\n\n<p>\u958b\u767a\u3092\u59cb\u3081\u308b\u524d\u306b\u3001\u4ee5\u4e0b\u306e\u30c4\u30fc\u30eb\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Docker Desktop<\/li>\n\n\n\n<li>Git<\/li>\n\n\n\n<li>Composer\uff08PHP\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\uff09<\/li>\n<\/ul>\n\n\n\n<p><strong>2. Laravel\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\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=\"\"># Composer\u3092\u4f7f\u7528\u3057\u3066\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\ncomposer create-project laravel\/laravel my-project\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\ncd my-project\n\n# Laravel Sail\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\ncomposer require laravel\/sail --dev\n\n# Sail\u306e\u521d\u671f\u5316\uff08Docker\u74b0\u5883\u306e\u8a2d\u5b9a\uff09\nphp artisan sail:install<\/pre>\n\n\n\n<p><strong>3. Docker\u74b0\u5883\u306e\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<p><code>docker-compose.yml<\/code>\u306e\u4e3b\u8981\u306a\u8a2d\u5b9a\uff1a<\/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=\"\">services:\n    laravel.test:\n        build:\n            context: .\/vendor\/laravel\/sail\/runtimes\/8.2\n            dockerfile: Dockerfile\n            args:\n                WWWGROUP: '${WWWGROUP}'\n        image: sail-8.2\/app\n        ports:\n            - '${APP_PORT:-80}:80'\n        environment:\n            WWWUSER: '${WWWUSER}'\n            LARAVEL_SAIL: 1\n        volumes:\n            - '.:\/var\/www\/html'\n        networks:\n            - sail\n        depends_on:\n            - mysql\n            - redis\n\n    mysql:\n        image: 'mysql\/mysql-server:8.0'\n        ports:\n            - '${FORWARD_DB_PORT:-3306}:3306'\n        environment:\n            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'\n            MYSQL_DATABASE: '${DB_DATABASE}'\n            MYSQL_USER: '${DB_USERNAME}'\n            MYSQL_PASSWORD: '${DB_PASSWORD}'<\/pre>\n\n\n\n<p><strong>4. \u74b0\u5883\u306e\u8d77\u52d5\u3068\u52d5\u4f5c\u78ba\u8a8d<\/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=\"\"># Docker\u74b0\u5883\u306e\u8d77\u52d5\n.\/vendor\/bin\/sail up -d\n\n# \u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n.\/vendor\/bin\/sail composer install\n\n# \u74b0\u5883\u5909\u6570\u30d5\u30a1\u30a4\u30eb\u306e\u6e96\u5099\ncp .env.example .env\n\n# \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ad\u30fc\u306e\u751f\u6210\n.\/vendor\/bin\/sail artisan key:generate\n\n# \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u884c\n.\/vendor\/bin\/sail artisan migrate<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">VScode\u306e\u63a8\u5968\u8a2d\u5b9a\u3068\u30c7\u30d0\u30c3\u30b0\u74b0\u5883\u306e\u6e96\u5099<\/h3>\n\n\n\n<p>VSCode\u3067Laravel\u958b\u767a\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u305f\u3081\u306e\u8a2d\u5b9a\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u63a8\u5968\u62e1\u5f35\u6a5f\u80fd\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/strong><\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u62e1\u5f35\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP Intelephense\uff08PHP\u30b3\u30fc\u30c9\u88dc\u5b8c\uff09<\/li>\n\n\n\n<li>Laravel Blade Snippets\uff08Blade \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u7528\uff09<\/li>\n\n\n\n<li>Laravel Artisan\uff08artisan\u30b3\u30de\u30f3\u30c9\u7d71\u5408\uff09<\/li>\n\n\n\n<li>PHP Debug\uff08Xdebug\u306b\u3088\u308b\u30c7\u30d0\u30c3\u30b0\u7528\uff09<\/li>\n\n\n\n<li>GitLens\uff08Git\u7d71\u5408\uff09<\/li>\n\n\n\n<li>Laravel Extra Intellisense\uff08Laravel\u56fa\u6709\u306e\u88dc\u5b8c\uff09<\/li>\n<\/ul>\n\n\n\n<p><strong>2. VSCode\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\uff08settings.json\uff09<\/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=\"\">{\n    \"editor.formatOnSave\": true,\n    \"php.suggest.basic\": false,\n    \"php.validate.enable\": true,\n    \"php.validate.run\": \"onType\",\n    \"[php]\": {\n        \"editor.defaultFormatter\": \"bmewburn.vscode-intelephense-client\",\n        \"editor.formatOnSave\": true\n    },\n    \"[blade]\": {\n        \"editor.defaultFormatter\": \"onecentlin.laravel-blade\"\n    }\n}<\/pre>\n\n\n\n<p><strong>3. Xdebug\u306e\u8a2d\u5b9a<\/strong><\/p>\n\n\n\n<p><code>docker-compose.yml<\/code>\u306bXdebug\u306e\u8a2d\u5b9a\u3092\u8ffd\u52a0\uff1a<\/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=\"\"># php.ini\u306e\u8a2d\u5b9a\u8ffd\u52a0\nextra_hosts:\n    - \"host.docker.internal:host-gateway\"\nenvironment:\n    XDEBUG_MODE: \"debug,develop\"\n    XDEBUG_CONFIG: \"client_host=host.docker.internal\"<\/pre>\n\n\n\n<p>VSCode\u306elaunch.json\u8a2d\u5b9a\uff1a<\/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=\"\">{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"Listen for Xdebug\",\n            \"type\": \"php\",\n            \"request\": \"launch\",\n            \"port\": 9003,\n            \"pathMappings\": {\n                \"\/var\/www\/html\": \"${workspaceFolder}\"\n            }\n        }\n    ]\n}<\/pre>\n\n\n\n<p><strong>4. \u958b\u767a\u52b9\u7387\u3092\u4e0a\u3052\u308bVSCode\u8a2d\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30cb\u30da\u30c3\u30c8\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Laravel\u306e\u983b\u51fa\u30b3\u30fc\u30c9\u30d1\u30bf\u30fc\u30f3\u3092\u30b9\u30cb\u30da\u30c3\u30c8\u3068\u3057\u3066\u767b\u9332<\/li>\n\n\n\n<li>Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u7528\u306e\u30ab\u30b9\u30bf\u30e0\u30b9\u30cb\u30da\u30c3\u30c8\u4f5c\u6210<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bf\u30b9\u30af\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\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=\"\">   {\n       \"version\": \"2.0.0\",\n       \"tasks\": [\n           {\n               \"label\": \"Sail Up\",\n               \"type\": \"shell\",\n               \"command\": \".\/vendor\/bin\/sail up -d\"\n           },\n           {\n               \"label\": \"Run Tests\",\n               \"type\": \"shell\",\n               \"command\": \".\/vendor\/bin\/sail test\"\n           }\n       ]\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Git\u7ba1\u7406\u306e\u52b9\u7387\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>.gitignore\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>GitLens\u306b\u3088\u308b\u30b3\u30fc\u30c9\u5909\u66f4\u5c65\u6b74\u306e\u53ef\u8996\u5316<\/li>\n\n\n\n<li>Source Control\u30d3\u30e5\u30fc\u306e\u6d3b\u7528<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u74b0\u5883\u69cb\u7bc9\u306b\u3088\u308a\u3001\u52b9\u7387\u7684\u306aLaravel\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u3001Docker\u3068VSCode\u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u3001\u30c1\u30fc\u30e0\u958b\u767a\u306b\u304a\u3051\u308b\u74b0\u5883\u306e\u7d71\u4e00\u6027\u3092\u4fdd\u3061\u306a\u304c\u3089\u3001\u500b\u3005\u306e\u958b\u767a\u8005\u304c\u5feb\u9069\u306b\u4f5c\u696d\u3067\u304d\u308b\u74b0\u5883\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">Laravel\u306e\u57fa\u672c\u6982\u5ff5\u30de\u30b9\u30bf\u30fc<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5f79\u5272\u7406\u89e3<\/h3>\n\n\n\n<p>\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306f\u3001HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u9069\u5207\u306a\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306b\u632f\u308a\u5206\u3051\u308b\u91cd\u8981\u306a\u6a5f\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u57fa\u672c\u7684\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/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=\"\">\/\/ routes\/web.php\nuse App\\Http\\Controllers\\UserController;\n\n\/\/ \u57fa\u672c\u7684\u306a\u30eb\u30fc\u30c8\u5b9a\u7fa9\nRoute::get('\/users', [UserController::class, 'index']);\nRoute::post('\/users', [UserController::class, 'store']);\nRoute::get('\/users\/{id}', [UserController::class, 'show']);\n\n\/\/ \u30ea\u30bd\u30fc\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5b9a\u7fa9\uff08CRUD\u30eb\u30fc\u30c8\u3092\u4e00\u62ec\u5b9a\u7fa9\uff09\nRoute::resource('users', UserController::class);\n\n\/\/ \u30b0\u30eb\u30fc\u30d7\u5316\u3068\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u9069\u7528\nRoute::middleware(['auth'])-&gt;group(function () {\n    Route::get('\/dashboard', DashboardController::class);\n    Route::resource('posts', PostController::class);\n});<\/pre>\n\n\n\n<p><strong>2. \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u57fa\u672c\u69cb\u9020<\/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=\"\">\/\/ app\/Http\/Controllers\/UserController.php\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\n\nclass UserController extends Controller\n{\n    public function index()\n    {\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u4e00\u89a7\u3092\u53d6\u5f97\n        $users = User::paginate(10);\n        return view('users.index', compact('users'));\n    }\n\n    public function show($id)\n    {\n        \/\/ \u5358\u4e00\u30e6\u30fc\u30b6\u30fc\u3092\u53d6\u5f97\n        $user = User::findOrFail($id);\n        return view('users.show', compact('user'));\n    }\n\n    public function store(Request $request)\n    {\n        \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\n        $validated = $request-&gt;validate([\n            'name' =&gt; 'required|max:255',\n            'email' =&gt; 'required|email|unique:users',\n        ]);\n\n        \/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u4f5c\u6210\n        User::create($validated);\n        return redirect()-&gt;route('users.index');\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u30d3\u30e5\u30fc\u4f5c\u6210\u306e\u57fa\u790e<\/h3>\n\n\n\n<p>Blade\u306f\u3001Laravel\u306e\u5f37\u529b\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3067\u3001PHP\u30b3\u30fc\u30c9\u3068HTML\u3092\u52b9\u7387\u7684\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u57fa\u672c\u7684\u306aBlade\u306e\u69cb\u6587<\/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=\"\">&lt;!-- resources\/views\/users\/index.blade.php --&gt;\n@extends('layouts.app')\n\n@section('content')\n    &lt;h1&gt;\u30e6\u30fc\u30b6\u30fc\u4e00\u89a7&lt;\/h1&gt;\n\n    @foreach ($users as $user)\n        &lt;div class=\"user-card\"&gt;\n            &lt;h2&gt;{{ $user-&gt;name }}&lt;\/h2&gt;\n            {{-- \u30a8\u30b9\u30b1\u30fc\u30d7\u306a\u3057\u3067\u51fa\u529b --}}\n            {!! $user-&gt;profile_html !!}\n\n            @if ($user-&gt;is_admin)\n                &lt;span class=\"admin-badge\"&gt;\u7ba1\u7406\u8005&lt;\/span&gt;\n            @endif\n        &lt;\/div&gt;\n    @endforeach\n\n    {{ $users-&gt;links() }} {{-- \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30ea\u30f3\u30af --}}\n@endsection<\/pre>\n\n\n\n<p><strong>2. \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u30b9\u30ed\u30c3\u30c8<\/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=\"\">\/\/ \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u5b9a\u7fa9\n\/\/ resources\/views\/components\/alert.blade.php\n&lt;div class=\"alert alert-{{ $type ?? 'info' }}\"&gt;\n    {{ $slot }}\n&lt;\/div&gt;\n\n\/\/ \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u4f7f\u7528\n&lt;x-alert type=\"danger\"&gt;\n    &lt;strong&gt;\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff01&lt;\/strong&gt;\n    \u8a2d\u5b9a\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n&lt;\/x-alert&gt;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">Eloquent\u306b\u3088\u308bDB\u64cd\u4f5c\u306e\u57fa\u672c<\/h3>\n\n\n\n<p>Eloquent\u306f\u3001Laravel\u306e\u5f37\u529b\u306aORM\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u76f4\u611f\u7684\u306b\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. \u30e2\u30c7\u30eb\u306e\u5b9a\u7fa9\u3068\u95a2\u9023\u4ed8\u3051<\/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=\"\">\/\/ app\/Models\/User.php\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass User extends Model\n{\n    protected $fillable = ['name', 'email', 'password'];\n\n    \/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u6295\u7a3f\u3092\u53d6\u5f97\n    public function posts()\n    {\n        return $this-&gt;hasMany(Post::class);\n    }\n\n    \/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u3092\u53d6\u5f97\n    public function profile()\n    {\n        return $this-&gt;hasOne(Profile::class);\n    }\n}\n\n\/\/ app\/Models\/Post.php\nclass Post extends Model\n{\n    protected $fillable = ['title', 'content', 'user_id'];\n\n    public function user()\n    {\n        return $this-&gt;belongsTo(User::class);\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u3088\u304f\u4f7f\u7528\u3059\u308bEloquent\u306e\u64cd\u4f5c<\/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=\"\">\/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u53d6\u5f97\n$users = User::all(); \/\/ \u5168\u4ef6\u53d6\u5f97\n$user = User::find(1); \/\/ ID\u6307\u5b9a\n$activeUsers = User::where('status', 'active')-&gt;get(); \/\/ \u6761\u4ef6\u6307\u5b9a\n\n\/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u4ed8\u304d\u306e\u30c7\u30fc\u30bf\u53d6\u5f97\n$user = User::with('posts')-&gt;find(1);\n$posts = $user-&gt;posts; \/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30c7\u30fc\u30bf\u306b\u30a2\u30af\u30bb\u30b9\n\n\/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u4f5c\u6210\n$user = User::create([\n    'name' =&gt; '\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc',\n    'email' =&gt; 'test@example.com'\n]);\n\n\/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u66f4\u65b0\n$user-&gt;update(['name' =&gt; '\u65b0\u3057\u3044\u540d\u524d']);\n\n\/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u524a\u9664\n$user-&gt;delete();\n\n\/\/ \u9ad8\u5ea6\u306a\u30af\u30a8\u30ea\n$users = User::whereHas('posts', function ($query) {\n    $query-&gt;where('status', 'published');\n})-&gt;get();<\/pre>\n\n\n\n<p><strong>3. \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3068\u30b7\u30fc\u30c7\u30a3\u30f3\u30b0<\/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\/migrations\/create_users_table.php\npublic function up()\n{\n    Schema::create('users', function (Blueprint $table) {\n        $table-&gt;id();\n        $table-&gt;string('name');\n        $table-&gt;string('email')-&gt;unique();\n        $table-&gt;timestamp('email_verified_at')-&gt;nullable();\n        $table-&gt;string('password');\n        $table-&gt;rememberToken();\n        $table-&gt;timestamps();\n    });\n}\n\n\/\/ database\/seeders\/UserSeeder.php\nclass UserSeeder extends Seeder\n{\n    public function run()\n    {\n        User::factory()-&gt;count(10)-&gt;create()-&gt;each(function ($user) {\n            $user-&gt;posts()-&gt;saveMany(\n                Post::factory()-&gt;count(3)-&gt;make()\n            );\n        });\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u6982\u5ff5\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001Laravel\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306aWeb\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u3001\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001Blade\u3001Eloquent\u306f\u3001Laravel\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u6838\u3068\u306a\u308b\u8981\u7d20\u3067\u3059\u3002\u5b9f\u969b\u306e\u958b\u767a\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5805\u7262\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-10\">\u5b9f\u8df5\u7684\u306aCRUD\u6a5f\u80fd\u306e\u5b9f\u88c5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30bf\u30b9\u30af\u7ba1\u7406\u30a2\u30d7\u30ea\u3092\u4f8b\u306b\u3057\u305f\u57fa\u672c\u6a5f\u80fd\u306e\u4f5c\u308a\u65b9<\/h3>\n\n\n\n<p>\u30bf\u30b9\u30af\u7ba1\u7406\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u901a\u3058\u3066\u3001\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5\u65b9\u6cd5\u3092\u5b66\u3073\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p><strong>1. \u30e2\u30c7\u30eb\u3068\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\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=\"\"># \u30e2\u30c7\u30eb\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u4e00\u62ec\u751f\u6210\nphp artisan make:model Task -mcr<\/pre>\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\/migrations\/xxxx_xx_xx_create_tasks_table.php\npublic function up()\n{\n    Schema::create('tasks', function (Blueprint $table) {\n        $table-&gt;id();\n        $table-&gt;string('title');\n        $table-&gt;text('description')-&gt;nullable();\n        $table-&gt;enum('status', ['pending', 'in_progress', 'completed']);\n        $table-&gt;date('due_date')-&gt;nullable();\n        $table-&gt;foreignId('user_id')-&gt;constrained()-&gt;onDelete('cascade');\n        $table-&gt;timestamps();\n    });\n}<\/pre>\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=\"\">\/\/ app\/Models\/Task.php\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Task extends Model\n{\n    protected $fillable = [\n        'title',\n        'description',\n        'status',\n        'due_date',\n        'user_id'\n    ];\n\n    protected $casts = [\n        'due_date' =&gt; 'date'\n    ];\n\n    public function user()\n    {\n        return $this-&gt;belongsTo(User::class);\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u30eb\u30fc\u30c8\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=\"\">\/\/ routes\/web.php\nRoute::middleware(['auth'])-&gt;group(function () {\n    Route::resource('tasks', TaskController::class);\n    Route::patch('tasks\/{task}\/status', [TaskController::class, 'updateStatus'])\n        -&gt;name('tasks.status.update');\n});<\/pre>\n\n\n\n<p><strong>3. \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5b9f\u88c5<\/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=\"\">\/\/ app\/Http\/Controllers\/TaskController.php\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Task;\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Requests\\TaskRequest;\n\nclass TaskController extends Controller\n{\n    public function index()\n    {\n        $tasks = Task::where('user_id', auth()-&gt;id())\n            -&gt;orderBy('due_date')\n            -&gt;paginate(10);\n\n        return view('tasks.index', compact('tasks'));\n    }\n\n    public function create()\n    {\n        return view('tasks.create');\n    }\n\n    public function store(TaskRequest $request)\n    {\n        $task = auth()-&gt;user()-&gt;tasks()-&gt;create($request-&gt;validated());\n\n        return redirect()\n            -&gt;route('tasks.index')\n            -&gt;with('success', '\u30bf\u30b9\u30af\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f');\n    }\n\n    public function edit(Task $task)\n    {\n        $this-&gt;authorize('update', $task);\n        return view('tasks.edit', compact('task'));\n    }\n\n    public function update(TaskRequest $request, Task $task)\n    {\n        $this-&gt;authorize('update', $task);\n        $task-&gt;update($request-&gt;validated());\n\n        return redirect()\n            -&gt;route('tasks.index')\n            -&gt;with('success', '\u30bf\u30b9\u30af\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f');\n    }\n\n    public function destroy(Task $task)\n    {\n        $this-&gt;authorize('delete', $task);\n        $task-&gt;delete();\n\n        return redirect()\n            -&gt;route('tasks.index')\n            -&gt;with('success', '\u30bf\u30b9\u30af\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f');\n    }\n\n    public function updateStatus(Request $request, Task $task)\n    {\n        $this-&gt;authorize('update', $task);\n        $task-&gt;update(['status' =&gt; $request-&gt;status]);\n\n        return response()-&gt;json(['status' =&gt; 'success']);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3068\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p><strong>1. \u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\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=\"\">php artisan make:request TaskRequest<\/pre>\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=\"\">\/\/ app\/Http\/Requests\/TaskRequest.php\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass TaskRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        return [\n            'title' =&gt; 'required|max:255',\n            'description' =&gt; 'nullable|string',\n            'status' =&gt; 'required|in:pending,in_progress,completed',\n            'due_date' =&gt; 'nullable|date|after_or_equal:today'\n        ];\n    }\n\n    public function messages()\n    {\n        return [\n            'title.required' =&gt; '\u30bf\u30a4\u30c8\u30eb\u306f\u5fc5\u9808\u3067\u3059',\n            'title.max' =&gt; '\u30bf\u30a4\u30c8\u30eb\u306f255\u6587\u5b57\u4ee5\u5185\u3067\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044',\n            'status.required' =&gt; '\u30b9\u30c6\u30fc\u30bf\u30b9\u306f\u5fc5\u9808\u3067\u3059',\n            'status.in' =&gt; '\u7121\u52b9\u306a\u30b9\u30c6\u30fc\u30bf\u30b9\u3067\u3059',\n            'due_date.after_or_equal' =&gt; '\u671f\u65e5\u306f\u672c\u65e5\u4ee5\u964d\u306e\u65e5\u4ed8\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044'\n        ];\n    }\n}<\/pre>\n\n\n\n<p><strong>2. Blade\u30d3\u30e5\u30fc\u306e\u5b9f\u88c5<\/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=\"\">&lt;!-- resources\/views\/tasks\/create.blade.php --&gt;\n@extends('layouts.app')\n\n@section('content')\n&lt;div class=\"container mx-auto px-4\"&gt;\n    &lt;h1 class=\"text-2xl mb-4\"&gt;\u65b0\u898f\u30bf\u30b9\u30af\u4f5c\u6210&lt;\/h1&gt;\n\n    &lt;form action=\"{{ route('tasks.store') }}\" method=\"POST\"&gt;\n        @csrf\n\n        &lt;div class=\"mb-4\"&gt;\n            &lt;label for=\"title\" class=\"block mb-2\"&gt;\u30bf\u30a4\u30c8\u30eb&lt;\/label&gt;\n            &lt;input type=\"text\" \n                   name=\"title\" \n                   id=\"title\" \n                   class=\"w-full p-2 border @error('title') border-red-500 @enderror\"\n                   value=\"{{ old('title') }}\"&gt;\n            @error('title')\n                &lt;p class=\"text-red-500 text-sm mt-1\"&gt;{{ $message }}&lt;\/p&gt;\n            @enderror\n        &lt;\/div&gt;\n\n        &lt;div class=\"mb-4\"&gt;\n            &lt;label for=\"description\" class=\"block mb-2\"&gt;\u8aac\u660e&lt;\/label&gt;\n            &lt;textarea name=\"description\" \n                      id=\"description\" \n                      class=\"w-full p-2 border\"\n                      rows=\"4\"&gt;{{ old('description') }}&lt;\/textarea&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=\"mb-4\"&gt;\n            &lt;label for=\"status\" class=\"block mb-2\"&gt;\u30b9\u30c6\u30fc\u30bf\u30b9&lt;\/label&gt;\n            &lt;select name=\"status\" \n                    id=\"status\" \n                    class=\"w-full p-2 border\"&gt;\n                &lt;option value=\"pending\" @selected(old('status') == 'pending')&gt;\u672a\u7740\u624b&lt;\/option&gt;\n                &lt;option value=\"in_progress\" @selected(old('status') == 'in_progress')&gt;\u9032\u884c\u4e2d&lt;\/option&gt;\n                &lt;option value=\"completed\" @selected(old('status') == 'completed')&gt;\u5b8c\u4e86&lt;\/option&gt;\n            &lt;\/select&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=\"mb-4\"&gt;\n            &lt;label for=\"due_date\" class=\"block mb-2\"&gt;\u671f\u65e5&lt;\/label&gt;\n            &lt;input type=\"date\" \n                   name=\"due_date\" \n                   id=\"due_date\" \n                   class=\"w-full p-2 border\"\n                   value=\"{{ old('due_date') }}\"&gt;\n        &lt;\/div&gt;\n\n        &lt;button type=\"submit\" \n                class=\"bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600\"&gt;\n            \u4f5c\u6210\u3059\u308b\n        &lt;\/button&gt;\n    &lt;\/form&gt;\n&lt;\/div&gt;<\/pre>\n\n\n\n<p><strong>3. JavaScript\u306b\u3088\u308b\u52d5\u7684\u306a\u64cd\u4f5c\u306e\u5b9f\u88c5<\/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=\"\">\/\/ resources\/js\/tasks.js\ndocument.addEventListener('DOMContentLoaded', function() {\n    \/\/ \u30b9\u30c6\u30fc\u30bf\u30b9\u66f4\u65b0\u306e\u975e\u540c\u671f\u51e6\u7406\n    const statusButtons = document.querySelectorAll('.status-update');\n    statusButtons.forEach(button =&gt; {\n        button.addEventListener('click', async function() {\n            const taskId = this.dataset.taskId;\n            const newStatus = this.dataset.status;\n\n            try {\n                const response = await fetch(`\/tasks\/${taskId}\/status`, {\n                    method: 'PATCH',\n                    headers: {\n                        'Content-Type': 'application\/json',\n                        'X-CSRF-TOKEN': document.querySelector('meta[name=\"csrf-token\"]').content\n                    },\n                    body: JSON.stringify({ status: newStatus })\n                });\n\n                if (response.ok) {\n                    location.reload();\n                }\n            } catch (error) {\n                console.error('Error updating status:', error);\n                alert('\u30b9\u30c6\u30fc\u30bf\u30b9\u306e\u66f4\u65b0\u306b\u5931\u6557\u3057\u307e\u3057\u305f');\n            }\n        });\n    });\n});<\/pre>\n\n\n\n<p>\u3053\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u6a5f\u80fd\u3092\u6301\u3064\u30bf\u30b9\u30af\u7ba1\u7406\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5b8c\u6210\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bf\u30b9\u30af\u306e\u4f5c\u6210\u3001\u7de8\u96c6\u3001\u524a\u9664\uff08CRUD\u64cd\u4f5c\uff09<\/li>\n\n\n\n<li>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306b\u3088\u308b\u30c7\u30fc\u30bf\u691c\u8a3c<\/li>\n\n\n\n<li>\u30b9\u30c6\u30fc\u30bf\u30b9\u7ba1\u7406\u6a5f\u80fd<\/li>\n\n\n\n<li>\u671f\u65e5\u7ba1\u7406\u6a5f\u80fd<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306e\u30bf\u30b9\u30af\u7ba1\u7406<\/li>\n<\/ol>\n\n\n\n<p>\u7279\u306b\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f7f\u7528\u3057\u305f\u5805\u7262\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30dd\u30ea\u30b7\u30fc\u3092\u4f7f\u7528\u3057\u305f\u8a8d\u53ef\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u975e\u540c\u671f\u51e6\u7406\u306b\u3088\u308bUX\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6a5f\u80fd\u306f\u3001\u591a\u304f\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u5fc5\u8981\u3068\u3055\u308c\u308b\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306e\u826f\u3044\u4f8b\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-13\">\u8a8d\u8a3c\u6a5f\u80fd\u306e\u5b9f\u88c5\u3068\u6d3b\u7528\u65b9\u6cd5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">Laravel Breeze\u3092\u4f7f\u3063\u305f\u8a8d\u8a3c\u6a5f\u80fd\u306e\u5c0e\u5165<\/h3>\n\n\n\n<p>Laravel Breeze\u306f\u3001\u8a8d\u8a3c\u306b\u5fc5\u8981\u306a\u57fa\u672c\u7684\u306a\u6a5f\u80fd\u3092\u7d20\u65e9\u304f\u5b9f\u88c5\u3067\u304d\u308b\u30b9\u30bf\u30fc\u30bf\u30fc\u30ad\u30c3\u30c8\u3067\u3059\u30022024\u5e74\u73fe\u5728\u3001\u6700\u3082\u63a8\u5968\u3055\u308c\u308b\u8a8d\u8a3c\u5b9f\u88c5\u65b9\u6cd5\u306e\u4e00\u3064\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>1. Laravel Breeze\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u521d\u671f\u8a2d\u5b9a<\/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=\"\"># Breeze\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\ncomposer require laravel\/breeze --dev\n\n# Breeze\u306e\u57fa\u672c\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nphp artisan breeze:install\n\n# \u5fc5\u8981\u306a\u30a2\u30bb\u30c3\u30c8\u306e\u30d3\u30eb\u30c9\nnpm install\nnpm run dev\n\n# \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5b9f\u884c\nphp artisan migrate<\/pre>\n\n\n\n<p><strong>2. \u8a8d\u8a3c\u95a2\u9023\u306e\u30eb\u30fc\u30c8\u78ba\u8a8d<\/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=\"\">\/\/ routes\/auth.php\uff08Breeze\u306b\u3088\u3063\u3066\u81ea\u52d5\u751f\u6210\uff09\nuse App\\Http\\Controllers\\Auth\\AuthenticatedSessionController;\nuse App\\Http\\Controllers\\Auth\\RegisteredUserController;\n\nRoute::middleware('guest')-&gt;group(function () {\n    Route::get('register', [RegisteredUserController::class, 'create'])\n        -&gt;name('register');\n    Route::post('register', [RegisteredUserController::class, 'store']);\n    Route::get('login', [AuthenticatedSessionController::class, 'create'])\n        -&gt;name('login');\n    Route::post('login', [AuthenticatedSessionController::class, 'store']);\n    \/\/ ...\u305d\u306e\u4ed6\u306e\u8a8d\u8a3c\u95a2\u9023\u30eb\u30fc\u30c8\n});\n\nRoute::middleware('auth')-&gt;group(function () {\n    Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])\n        -&gt;name('logout');\n});<\/pre>\n\n\n\n<p><strong>3. \u57fa\u672c\u7684\u306a\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u4f7f\u7528\u65b9\u6cd5<\/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=\"\">\/\/ routes\/web.php\nRoute::middleware(['auth'])-&gt;group(function () {\n    Route::get('\/dashboard', function () {\n        return view('dashboard');\n    })-&gt;name('dashboard');\n\n    \/\/ \u7ba1\u7406\u8005\u5c02\u7528\u30eb\u30fc\u30c8\n    Route::middleware(['admin'])-&gt;group(function () {\n        Route::get('\/admin', [AdminController::class, 'index'])-&gt;name('admin.index');\n    });\n});<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u30fb\u30ed\u30b0\u30a4\u30f3\u6a5f\u80fd\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h3>\n\n\n\n<p><strong>1. \u30e6\u30fc\u30b6\u30fc\u30e2\u30c7\u30eb\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">\/\/ app\/Models\/User.php\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Laravel\\Sanctum\\HasApiTokens;\n\nclass User extends Authenticatable\n{\n    use HasApiTokens, HasFactory, Notifiable;\n\n    protected $fillable = [\n        'name',\n        'email',\n        'password',\n        'role',\n        'last_login_at'\n    ];\n\n    protected $hidden = [\n        'password',\n        'remember_token',\n    ];\n\n    protected $casts = [\n        'email_verified_at' =&gt; 'datetime',\n        'last_login_at' =&gt; 'datetime',\n        'password' =&gt; 'hashed',\n    ];\n\n    \/\/ \u30ed\u30fc\u30eb\u30c1\u30a7\u30c3\u30af\u30e1\u30bd\u30c3\u30c9\n    public function isAdmin(): bool\n    {\n        return $this-&gt;role === 'admin';\n    }\n\n    \/\/ \u30ed\u30b0\u30a4\u30f3\u6642\u9593\u66f4\u65b0\n    public function updateLastLoginAt(): void\n    {\n        $this-&gt;update(['last_login_at' =&gt; now()]);\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u30ab\u30b9\u30bf\u30e0\u8a8d\u8a3c\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\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=\"\">php artisan make:middleware EnsureUserIsAdmin<\/pre>\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=\"\">\/\/ app\/Http\/Middleware\/EnsureUserIsAdmin.php\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Http\\Request;\n\nclass EnsureUserIsAdmin\n{\n    public function handle(Request $request, Closure $next)\n    {\n        if (!auth()-&gt;user()-&gt;isAdmin()) {\n            return redirect()\n                -&gt;route('dashboard')\n                -&gt;with('error', '\u7ba1\u7406\u8005\u6a29\u9650\u304c\u5fc5\u8981\u3067\u3059\u3002');\n        }\n\n        return $next($request);\n    }\n}<\/pre>\n\n\n\n<p><strong>3. \u8a8d\u8a3c\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">\/\/ app\/Http\/Controllers\/Auth\/AuthenticatedSessionController.php\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\Auth\\LoginRequest;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass AuthenticatedSessionController extends Controller\n{\n    public function store(LoginRequest $request)\n    {\n        $request-&gt;authenticate();\n\n        $request-&gt;session()-&gt;regenerate();\n\n        \/\/ \u30ed\u30b0\u30a4\u30f3\u6642\u9593\u306e\u66f4\u65b0\n        auth()-&gt;user()-&gt;updateLastLoginAt();\n\n        \/\/ \u30ed\u30fc\u30eb\u306b\u5fdc\u3058\u3066\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u5148\u3092\u5909\u66f4\n        return redirect()-&gt;intended(\n            auth()-&gt;user()-&gt;isAdmin() \n                ? route('admin.dashboard') \n                : route('dashboard')\n        );\n    }\n\n    public function destroy(Request $request)\n    {\n        Auth::guard('web')-&gt;logout();\n\n        $request-&gt;session()-&gt;invalidate();\n        $request-&gt;session()-&gt;regenerateToken();\n\n        return redirect('\/');\n    }\n}<\/pre>\n\n\n\n<p><strong>4. \u8a8d\u8a3c\u753b\u9762\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">&lt;!-- resources\/views\/auth\/login.blade.php --&gt;\n&lt;x-guest-layout&gt;\n    &lt;div class=\"min-h-screen flex items-center justify-center\"&gt;\n        &lt;div class=\"max-w-md w-full space-y-8\"&gt;\n            &lt;div&gt;\n                &lt;h2 class=\"mt-6 text-center text-3xl font-extrabold text-gray-900\"&gt;\n                    \u30ed\u30b0\u30a4\u30f3\n                &lt;\/h2&gt;\n            &lt;\/div&gt;\n\n            &lt;form class=\"mt-8 space-y-6\" action=\"{{ route('login') }}\" method=\"POST\"&gt;\n                @csrf\n\n                &lt;!-- Email Address --&gt;\n                &lt;div&gt;\n                    &lt;label for=\"email\" class=\"block text-sm font-medium text-gray-700\"&gt;\n                        \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\n                    &lt;\/label&gt;\n                    &lt;input id=\"email\" \n                           type=\"email\" \n                           name=\"email\" \n                           value=\"{{ old('email') }}\" \n                           required \n                           class=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm\"&gt;\n                    @error('email')\n                        &lt;p class=\"mt-2 text-sm text-red-600\"&gt;{{ $message }}&lt;\/p&gt;\n                    @enderror\n                &lt;\/div&gt;\n\n                &lt;!-- Password --&gt;\n                &lt;div&gt;\n                    &lt;label for=\"password\" class=\"block text-sm font-medium text-gray-700\"&gt;\n                        \u30d1\u30b9\u30ef\u30fc\u30c9\n                    &lt;\/label&gt;\n                    &lt;input id=\"password\" \n                           type=\"password\" \n                           name=\"password\" \n                           required \n                           class=\"mt-1 block w-full rounded-md border-gray-300 shadow-sm\"&gt;\n                    @error('password')\n                        &lt;p class=\"mt-2 text-sm text-red-600\"&gt;{{ $message }}&lt;\/p&gt;\n                    @enderror\n                &lt;\/div&gt;\n\n                &lt;!-- Remember Me --&gt;\n                &lt;div class=\"flex items-center justify-between\"&gt;\n                    &lt;div class=\"flex items-center\"&gt;\n                        &lt;input id=\"remember_me\" \n                               type=\"checkbox\" \n                               name=\"remember\" \n                               class=\"h-4 w-4 text-indigo-600 border-gray-300 rounded\"&gt;\n                        &lt;label for=\"remember_me\" class=\"ml-2 block text-sm text-gray-900\"&gt;\n                            \u30ed\u30b0\u30a4\u30f3\u72b6\u614b\u3092\u4fdd\u6301\n                        &lt;\/label&gt;\n                    &lt;\/div&gt;\n\n                    @if (Route::has('password.request'))\n                        &lt;a href=\"{{ route('password.request') }}\" \n                           class=\"text-sm text-indigo-600 hover:text-indigo-500\"&gt;\n                            \u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u304a\u5fd8\u308c\u3067\u3059\u304b\uff1f\n                        &lt;\/a&gt;\n                    @endif\n                &lt;\/div&gt;\n\n                &lt;div&gt;\n                    &lt;button type=\"submit\" \n                            class=\"w-full flex justify-center py-2 px-4 border border-transparent rounded-md shadow-sm text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500\"&gt;\n                        \u30ed\u30b0\u30a4\u30f3\n                    &lt;\/button&gt;\n                &lt;\/div&gt;\n            &lt;\/form&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/x-guest-layout&gt;<\/pre>\n\n\n\n<p><strong>5. \u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u6a5f\u80fd\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">\/\/ app\/Notifications\/ResetPasswordNotification.php\nnamespace App\\Notifications;\n\nuse Illuminate\\Notifications\\Messages\\MailMessage;\nuse Illuminate\\Notifications\\Notification;\n\nclass ResetPasswordNotification extends Notification\n{\n    public $token;\n\n    public function __construct($token)\n    {\n        $this-&gt;token = $token;\n    }\n\n    public function toMail($notifiable)\n    {\n        return (new MailMessage)\n            -&gt;subject('\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u306e\u304a\u77e5\u3089\u305b')\n            -&gt;line('\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f\u3002')\n            -&gt;action('\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8', url(route('password.reset', [\n                'token' =&gt; $this-&gt;token,\n                'email' =&gt; $notifiable-&gt;getEmailForPasswordReset(),\n            ], false)))\n            -&gt;line('\u3053\u306e\u30ea\u30f3\u30af\u306e\u6709\u52b9\u671f\u9650\u306f:count\u5206\u3067\u3059\u3002', ['count' =&gt; config('auth.passwords.'.config('auth.defaults.passwords').'.expire')])\n            -&gt;line('\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u3053\u306e\u30e1\u30fc\u30eb\u3092\u7121\u8996\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6a5f\u80fd\u304c\u5229\u7528\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u30fb\u30ed\u30b0\u30a4\u30f3\u30fb\u30ed\u30b0\u30a2\u30a6\u30c8<\/li>\n\n\n\n<li>\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8<\/li>\n\n\n\n<li>\u30e1\u30fc\u30eb\u8a8d\u8a3c<\/li>\n\n\n\n<li>\u30ed\u30b0\u30a4\u30f3\u72b6\u614b\u306e\u4fdd\u6301<\/li>\n\n\n\n<li>\u7ba1\u7406\u8005\u6a29\u9650\u306b\u3088\u308b\u6a5f\u80fd\u5236\u9650<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u51e6\u7406<\/li>\n\n\n\n<li>\u30ed\u30b0\u30a4\u30f3\u5c65\u6b74\u306e\u8a18\u9332<\/li>\n<\/ol>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306b\u95a2\u3059\u308b\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5fc5\u305a\u30cf\u30c3\u30b7\u30e5\u5316\u3057\u3066\u4fdd\u5b58<\/li>\n\n\n\n<li>CSRF\u5bfe\u7b56\u306e\u5b9f\u65bd<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u653b\u6483\u5bfe\u7b56<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30a2\u306a\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6a5f\u80fd\u306f\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3057\u306a\u304c\u3089\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-16\">Laravel\u958b\u767a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p><strong>1. \u5165\u529b\u5024\u306e\u691c\u8a3c\u3068\u30b5\u30cb\u30bf\u30a4\u30ba<\/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=\"\">\/\/ app\/Http\/Requests\/ArticleRequest.php\nclass ArticleRequest extends FormRequest\n{\n    public function rules()\n    {\n        return [\n            'title' =&gt; ['required', 'string', 'max:255', new NoScriptTag],\n            'content' =&gt; ['required', 'string', new NoScriptTag],\n            'category_id' =&gt; ['required', 'exists:categories,id'],\n            'tags' =&gt; ['array', 'max:5'],\n            'tags.*' =&gt; ['exists:tags,id'],\n            'image' =&gt; ['nullable', 'image', 'max:2048'], \/\/ \u6700\u59272MB\n        ];\n    }\n}\n\n\/\/ app\/Rules\/NoScriptTag.php\nclass NoScriptTag implements Rule\n{\n    public function passes($attribute, $value)\n    {\n        return !preg_match('\/&lt;script\\b[^&gt;]*&gt;(.*?)&lt;\\\/script&gt;\/is', $value);\n    }\n}\n\n\/\/ app\/Http\/Controllers\/ArticleController.php\nclass ArticleController extends Controller\n{\n    public function store(ArticleRequest $request)\n    {\n        \/\/ \u5165\u529b\u5024\u306f\u81ea\u52d5\u7684\u306b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u6e08\u307f\n        $validated = $request-&gt;validated();\n\n        \/\/ HTML\u306e\u5b89\u5168\u306a\u4fdd\u5b58\n        $validated['content'] = clean($validated['content']); \/\/ HTMLPurifier\u3092\u4f7f\u7528\n\n        return Article::create($validated);\n    }\n}<\/pre>\n\n\n\n<p><strong>2. SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56<\/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=\"\">\/\/ \u63a8\u5968\u3055\u308c\u306a\u3044\u65b9\u6cd5\uff08SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306e\u5371\u967a\u6027\uff09\n$users = DB::select(\"SELECT * FROM users WHERE status = '{$status}'\");\n\n\/\/ \u63a8\u5968\u3055\u308c\u308b\u65b9\u6cd5\uff08\u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u306e\u4f7f\u7528\uff09\n$users = DB::table('users')\n    -&gt;where('status', $status)\n    -&gt;get();\n\n\/\/ \u3055\u3089\u306b\u63a8\u5968\u3055\u308c\u308b\u65b9\u6cd5\uff08Eloquent\u306e\u4f7f\u7528\uff09\n$users = User::where('status', $status)-&gt;get();\n\n\/\/ \u751f\u306eSQL\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u4f7f\u7528\n$users = DB::select('SELECT * FROM users WHERE status = ?', [$status]);<\/pre>\n\n\n\n<p><strong>3. CSRF\u5bfe\u7b56\u3068\u30bb\u30c3\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=\"\">\/\/ app\/Http\/Kernel.php\nprotected $middlewareGroups = [\n    'web' =&gt; [\n        \\App\\Http\\Middleware\\EncryptCookies::class,\n        \\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::class,\n        \\Illuminate\\Session\\Middleware\\StartSession::class,\n        \\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,\n        \\App\\Http\\Middleware\\VerifyCsrfToken::class,\n        \\App\\Http\\Middleware\\HandleInertiaRequests::class,\n    ],\n];\n\n\/\/ Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u306e\u30c8\u30fc\u30af\u30f3\u8ffd\u52a0\n&lt;form method=\"POST\" action=\"\/articles\"&gt;\n    @csrf\n    &lt;!-- \u30d5\u30a9\u30fc\u30e0\u306e\u5185\u5bb9 --&gt;\n&lt;\/form&gt;\n\n\/\/ API\u3067\u306eCSRF\u5bfe\u7b56\naxios.defaults.headers.common['X-CSRF-TOKEN'] = document\n    .querySelector('meta[name=\"csrf-token\"]')\n    .getAttribute('content');<\/pre>\n\n\n\n<p><strong>4. \u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/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=\"\">\/\/ app\/Http\/Controllers\/FileController.php\nclass FileController extends Controller\n{\n    public function store(Request $request)\n    {\n        $request-&gt;validate([\n            'file' =&gt; ['required', 'file', 'mimes:pdf,docx,xlsx', 'max:10240'],\n        ]);\n\n        $path = $request-&gt;file('file')-&gt;store('uploads', 's3');\n\n        \/\/ \u30d5\u30a1\u30a4\u30eb\u60c5\u5831\u3092\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\n        return FileUpload::create([\n            'user_id' =&gt; auth()-&gt;id(),\n            'path' =&gt; $path,\n            'original_name' =&gt; $request-&gt;file('file')-&gt;getClientOriginalName(),\n            'mime_type' =&gt; $request-&gt;file('file')-&gt;getMimeType(),\n            'size' =&gt; $request-&gt;file('file')-&gt;getSize(),\n        ]);\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u8a2d\u8a08\u306e\u65b9\u6cd5<\/h3>\n\n\n\n<p><strong>1. \u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\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=\"\">\/\/ app\/Services\/ArticleService.php\nclass ArticleService\n{\n    public function __construct(\n        private readonly ArticleRepository $repository,\n        private readonly TagService $tagService\n    ) {}\n\n    public function createArticle(array $data): Article\n    {\n        DB::transaction(function () use ($data) {\n            $article = $this-&gt;repository-&gt;create($data);\n\n            if (isset($data['tags'])) {\n                $this-&gt;tagService-&gt;attachTags($article, $data['tags']);\n            }\n\n            event(new ArticleCreated($article));\n\n            return $article;\n        });\n    }\n}\n\n\/\/ app\/Http\/Controllers\/ArticleController.php\nclass ArticleController extends Controller\n{\n    public function __construct(\n        private readonly ArticleService $articleService\n    ) {}\n\n    public function store(ArticleRequest $request)\n    {\n        $article = $this-&gt;articleService-&gt;createArticle($request-&gt;validated());\n        return redirect()-&gt;route('articles.show', $article);\n    }\n}<\/pre>\n\n\n\n<p><strong>2. \u30ea\u30dd\u30b8\u30c8\u30ea\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5<\/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=\"\">\/\/ app\/Repositories\/Interfaces\/ArticleRepositoryInterface.php\ninterface ArticleRepositoryInterface\n{\n    public function find(int $id): ?Article;\n    public function create(array $data): Article;\n    public function update(Article $article, array $data): bool;\n    public function delete(Article $article): bool;\n}\n\n\/\/ app\/Repositories\/ArticleRepository.php\nclass ArticleRepository implements ArticleRepositoryInterface\n{\n    public function find(int $id): ?Article\n    {\n        return Article::with(['user', 'category', 'tags'])-&gt;find($id);\n    }\n\n    public function create(array $data): Article\n    {\n        return Article::create($data);\n    }\n}\n\n\/\/ app\/Providers\/RepositoryServiceProvider.php\nclass RepositoryServiceProvider extends ServiceProvider\n{\n    public function register()\n    {\n        $this-&gt;app-&gt;bind(\n            ArticleRepositoryInterface::class,\n            ArticleRepository::class\n        );\n    }\n}<\/pre>\n\n\n\n<p><strong>3. \u30c9\u30e1\u30a4\u30f3\u30a4\u30d9\u30f3\u30c8\u3068\u30ea\u30b9\u30ca\u30fc\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=\"\">\/\/ app\/Events\/ArticleCreated.php\nclass ArticleCreated\n{\n    public function __construct(public readonly Article $article) {}\n}\n\n\/\/ app\/Listeners\/SendArticleNotification.php\nclass SendArticleNotification implements ShouldQueue\n{\n    public function handle(ArticleCreated $event)\n    {\n        $followers = $event-&gt;article-&gt;user-&gt;followers;\n\n        Notification::send(\n            $followers,\n            new NewArticleNotification($event-&gt;article)\n        );\n    }\n}<\/pre>\n\n\n\n<p><strong>4. \u5024\u30aa\u30d6\u30b8\u30a7\u30af\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=\"\">\/\/ app\/ValueObjects\/Money.php\nclass Money\n{\n    public function __construct(\n        private readonly int $amount,\n        private readonly string $currency = 'JPY'\n    ) {\n        if ($amount &lt; 0) {\n            throw new InvalidArgumentException('\u91d1\u984d\u306f0\u4ee5\u4e0a\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002');\n        }\n    }\n\n    public function getAmount(): int\n    {\n        return $this-&gt;amount;\n    }\n\n    public function add(Money $other): self\n    {\n        if ($this-&gt;currency !== $other-&gt;currency) {\n            throw new InvalidArgumentException('\u901a\u8ca8\u5358\u4f4d\u304c\u7570\u306a\u308a\u307e\u3059\u3002');\n        }\n\n        return new self($this-&gt;amount + $other-&gt;amount, $this-&gt;currency);\n    }\n}\n\n\/\/ app\/Models\/Product.php\nclass Product extends Model\n{\n    protected $casts = [\n        'price' =&gt; Money::class,\n    ];\n}<\/pre>\n\n\n\n<p><strong>5. \u30c6\u30b9\u30c8\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=\"\">\/\/ tests\/Feature\/ArticleTest.php\nclass ArticleTest extends TestCase\n{\n    use RefreshDatabase;\n\n    public function test_user_can_create_article()\n    {\n        $user = User::factory()-&gt;create();\n        $articleData = Article::factory()-&gt;make()-&gt;toArray();\n\n        $response = $this-&gt;actingAs($user)\n            -&gt;post(route('articles.store'), $articleData);\n\n        $response-&gt;assertRedirect();\n        $this-&gt;assertDatabaseHas('articles', [\n            'title' =&gt; $articleData['title'],\n            'user_id' =&gt; $user-&gt;id,\n        ]);\n    }\n\n    public function test_unauthorized_user_cannot_create_article()\n    {\n        $articleData = Article::factory()-&gt;make()-&gt;toArray();\n\n        $response = $this-&gt;post(route('articles.store'), $articleData);\n\n        $response-&gt;assertRedirect(route('login'));\n    }\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u5f97\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5165\u529b\u5024\u306e\u9069\u5207\u306a\u691c\u8a3c<\/li>\n\n\n\n<li>SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56<\/li>\n\n\n\n<li>XSS\u5bfe\u7b56<\/li>\n\n\n\n<li>CSRF\u5bfe\u7b56<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u5411\u4e0a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8cac\u52d9\u306e\u660e\u78ba\u306a\u5206\u96e2<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li>\u62e1\u5f35\u6027\u306e\u78ba\u4fdd<\/li>\n\n\n\n<li>\u518d\u5229\u7528\u6027\u306e\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>N+1\u554f\u984c\u306e\u56de\u907f<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u9069\u5207\u306a\u5229\u7528<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-19\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<p><strong>1. \u74b0\u5883\u8a2d\u5b9a\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/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=\"\"># \u30a8\u30e9\u30fc1: \u30ad\u30fc\u304c\u751f\u6210\u3055\u308c\u3066\u3044\u306a\u3044\nPHP Fatal error: No application encryption key has been specified.\n\n# \u89e3\u6c7a\u65b9\u6cd5\nphp artisan key:generate\n\n# \u30a8\u30e9\u30fc2: \u30b9\u30c8\u30ec\u30fc\u30b8\u30d1\u30fc\u30df\u30c3\u30b7\u30e7\u30f3\nThe stream or file \"storage\/logs\/laravel.log\" could not be opened\n\n# \u89e3\u6c7a\u65b9\u6cd5\nchmod -R 775 storage\nchmod -R 775 bootstrap\/cache<\/pre>\n\n\n\n<p><strong>2. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/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=\"\">\/\/ \u30a8\u30e9\u30fc1: SQLSTATE[42S02]: Base table or view not found\n\/\/ \u539f\u56e0: \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u304c\u5b9f\u884c\u3055\u308c\u3066\u3044\u306a\u3044\n\n\/\/ \u89e3\u6c7a\u65b9\u6cd5\nphp artisan migrate\n\n\/\/ \u30a8\u30e9\u30fc2: SQLSTATE[23000]: Integrity constraint violation\n\/\/ \u5916\u90e8\u30ad\u30fc\u5236\u7d04\u30a8\u30e9\u30fc\u306e\u5bfe\u51e6\nclass CreateCommentsTable extends Migration\n{\n    public function up()\n    {\n        Schema::create('comments', function (Blueprint $table) {\n            $table-&gt;id();\n            $table-&gt;foreignId('post_id')\n                  -&gt;constrained()\n                  -&gt;onDelete('cascade'); \/\/ \u89aa\u30ec\u30b3\u30fc\u30c9\u524a\u9664\u6642\u306b\u95a2\u9023\u30ec\u30b3\u30fc\u30c9\u3082\u524a\u9664\n            $table-&gt;text('content');\n            $table-&gt;timestamps();\n        });\n    }\n}<\/pre>\n\n\n\n<p><strong>3. N+1\u554f\u984c\u306e\u691c\u51fa\u3068\u89e3\u6c7a<\/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=\"\">\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\uff08N+1\u554f\u984c\uff09\nforeach (Post::all() as $post) {\n    echo $post-&gt;user-&gt;name; \/\/ \u5404\u6295\u7a3f\u3054\u3068\u306b\u30e6\u30fc\u30b6\u30fc\u30af\u30a8\u30ea\u304c\u5b9f\u884c\u3055\u308c\u308b\n}\n\n\/\/ \u89e3\u6c7a\u65b9\u6cd51: Eager\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u4f7f\u7528\n$posts = Post::with('user')-&gt;get();\n\n\/\/ \u89e3\u6c7a\u65b9\u6cd52: LazyEager\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u4f7f\u7528\n$posts = Post::all();\n$posts-&gt;load('user');\n\n\/\/ N+1\u554f\u984c\u306e\u691c\u51fa\n\/\/ app\/Providers\/AppServiceProvider.php\npublic function boot()\n{\n    DB::listen(function($query) {\n        Log::info(\n            $query-&gt;sql,\n            $query-&gt;bindings,\n            $query-&gt;time\n        );\n    });\n}<\/pre>\n\n\n\n<p><strong>4. \u30e1\u30e2\u30ea\u95a2\u9023\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=\"\">\/\/ \u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406\u6642\u306e\u30e1\u30e2\u30ea\u4e0d\u8db3\u5bfe\u7b56\n\/\/ \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\n$users = User::all(); \/\/ \u3059\u3079\u3066\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u30e1\u30e2\u30ea\u306b\u8aad\u307f\u8fbc\u3080\n\n\/\/ \u89e3\u6c7a\u65b9\u6cd51: \u30c1\u30e3\u30f3\u30af\u51e6\u7406\nUser::chunk(1000, function ($users) {\n    foreach ($users as $user) {\n        \/\/ \u51e6\u7406\n    }\n});\n\n\/\/ \u89e3\u6c7a\u65b9\u6cd52: \u30ab\u30fc\u30bd\u30eb\u306e\u4f7f\u7528\nforeach (User::cursor() as $user) {\n    \/\/ \u51e6\u7406\n}\n\n\/\/ \u89e3\u6c7a\u65b9\u6cd53: LazyCollection \u306e\u4f7f\u7528\nUser::lazy()-&gt;each(function ($user) {\n    \/\/ \u51e6\u7406\n});<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-21\">\u52b9\u7387\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u306e\u9032\u3081\u65b9<\/h3>\n\n\n\n<p><strong>1. \u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\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=\"\">\/\/ Laravel Debugbar\u306e\u8a2d\u5b9a\n\/\/ composer require barryvdh\/laravel-debugbar --dev\n\n\/\/ config\/debugbar.php\nreturn [\n    'enabled' =&gt; env('DEBUGBAR_ENABLED', env('APP_DEBUG', false)),\n    'collectors' =&gt; [\n        'phpinfo' =&gt; true,\n        'messages' =&gt; true,\n        'time' =&gt; true,\n        'memory' =&gt; true,\n        'queries' =&gt; true,\n        'db' =&gt; true,\n        'views' =&gt; true,\n        'route' =&gt; true,\n        'auth' =&gt; true,\n        'gate' =&gt; true,\n        'session' =&gt; true,\n        'request' =&gt; true,\n    ],\n];\n\n\/\/ \u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u51fa\u529b\nDebugbar::info($variable);\nDebugbar::warning('\u8b66\u544a\u30e1\u30c3\u30bb\u30fc\u30b8');\nDebugbar::error('\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8');<\/pre>\n\n\n\n<p><strong>2. \u30ed\u30b0\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=\"\">\/\/ app\/Providers\/AppServiceProvider.php\npublic function boot()\n{\n    \/\/ SQL\u30af\u30a8\u30ea\u306e\u30ed\u30b0\n    if (config('app.debug')) {\n        DB::listen(function ($query) {\n            Log::channel('sql')-&gt;info(\n                $query-&gt;sql,\n                [\n                    'bindings' =&gt; $query-&gt;bindings,\n                    'time' =&gt; $query-&gt;time,\n                ]\n            );\n        });\n    }\n}\n\n\/\/ config\/logging.php\n'channels' =&gt; [\n    'sql' =&gt; [\n        'driver' =&gt; 'daily',\n        'path' =&gt; storage_path('logs\/sql.log'),\n        'level' =&gt; 'debug',\n        'days' =&gt; 14,\n    ],\n],\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ed\u30b0\u306e\u51fa\u529b\nLog::channel('daily')-&gt;info('\u30c7\u30d0\u30c3\u30b0\u60c5\u5831', [\n    'user_id' =&gt; auth()-&gt;id(),\n    'action' =&gt; 'user_registration',\n    'data' =&gt; $userData,\n]);<\/pre>\n\n\n\n<p><strong>3. \u30c7\u30d0\u30c3\u30b0\u7528\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\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=\"\">\/\/ dump()\u3068dd()\u306e\u4f7f\u3044\u5206\u3051\npublic function show(Request $request)\n{\n    dump($request-&gt;all()); \/\/ \u51e6\u7406\u3092\u7d99\u7d9a\n    \/\/ \u307e\u305f\u306f\n    dd($request-&gt;all()); \/\/ \u305d\u306e\u5834\u3067\u51e6\u7406\u3092\u505c\u6b62\n\n    \/\/ \u8907\u6570\u306e\u5909\u6570\u3092\u30c0\u30f3\u30d7\n    dump($var1, $var2, $var3);\n}\n\n\/\/ ray()\u306e\u4f7f\u7528\uff08Spatie Ray\uff09\npublic function process()\n{\n    ray($variable)-&gt;color('green');\n    ray()-&gt;showQueries();\n    ray()-&gt;measure();\n\n    \/\/ \u51e6\u7406\u306e\u5b9f\u884c\n\n    ray()-&gt;stopMeasure();\n}<\/pre>\n\n\n\n<p><strong>4. \u30c6\u30b9\u30c8\u3092\u6d3b\u7528\u3057\u305f\u30c7\u30d0\u30c3\u30b0<\/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=\"\">\/\/ tests\/Feature\/UserRegistrationTest.php\nclass UserRegistrationTest extends TestCase\n{\n    public function test_user_registration_with_debug()\n    {\n        \/\/ \u30c6\u30b9\u30c8\u5b9f\u884c\u524d\u306e\u72b6\u614b\u78ba\u8a8d\n        $this-&gt;beforeTest();\n\n        $response = $this-&gt;post('\/register', [\n            'name' =&gt; 'Test User',\n            'email' =&gt; 'test@example.com',\n            'password' =&gt; 'password',\n        ]);\n\n        \/\/ \u30c7\u30d0\u30c3\u30b0\u60c5\u5831\u306e\u51fa\u529b\n        Log::info('Registration Response', [\n            'status' =&gt; $response-&gt;status(),\n            'content' =&gt; $response-&gt;content(),\n        ]);\n\n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u72b6\u614b\u78ba\u8a8d\n        $this-&gt;assertDatabaseHas('users', [\n            'email' =&gt; 'test@example.com',\n        ]);\n\n        \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u72b6\u614b\u78ba\u8a8d\n        $this-&gt;assertTrue(auth()-&gt;check());\n    }\n\n    private function beforeTest()\n    {\n        \/\/ \u30c6\u30b9\u30c8\u524d\u306e\u74b0\u5883\u72b6\u614b\u3092\u30ed\u30b0\u306b\u8a18\u9332\n        Log::info('Test Environment', [\n            'database' =&gt; config('database.default'),\n            'mail_driver' =&gt; config('mail.default'),\n        ]);\n    }\n}<\/pre>\n\n\n\n<p><strong>5. \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u306e\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=\"\">\/\/ .env \u30d5\u30a1\u30a4\u30eb\u306e\u8a2d\u5b9a\nAPP_DEBUG=true\nAPP_ENV=local\n\n\/\/ config\/app.php \u3067\u306e\u74b0\u5883\u306b\u5fdc\u3058\u305f\u8a2d\u5b9a\n'debug' =&gt; (bool) env('APP_DEBUG', false),\n'env' =&gt; env('APP_ENV', 'production'),\n\n\/\/ \u30c7\u30d0\u30c3\u30b0\u30e2\u30fc\u30c9\u306b\u5fdc\u3058\u305f\u51e6\u7406\u306e\u5206\u5c90\nif (config('app.debug')) {\n    \/\/ \u958b\u767a\u74b0\u5883\u3067\u306e\u307f\u5b9f\u884c\u3059\u308b\u51e6\u7406\n    $this-&gt;registerDebugServices();\n}<\/pre>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u30c7\u30d0\u30c3\u30b0\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6bb5\u968e\u7684\u306a\u30c7\u30d0\u30c3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u306e\u7bc4\u56f2\u3092\u7279\u5b9a<\/li>\n\n\n\n<li>\u95a2\u9023\u3059\u308b\u30ed\u30b0\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u74b0\u5883\u5909\u6570\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u72b6\u614b\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u306e\u4f7f\u3044\u5206\u3051<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Laravel Debugbar: \u958b\u767a\u74b0\u5883\u3067\u306e\u5168\u822c\u7684\u306a\u60c5\u5831<\/li>\n\n\n\n<li>Ray: \u8a73\u7d30\u306a\u30c7\u30d0\u30c3\u30b0\u60c5\u5831<\/li>\n\n\n\n<li>Xdebug: \u30b9\u30c6\u30c3\u30d7\u5b9f\u884c\u304c\u5fc5\u8981\u306a\u5834\u5408<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30b0\u306e\u9069\u5207\u306a\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30b0\u30ec\u30d9\u30eb\u306e\u4f7f\u3044\u5206\u3051<\/li>\n\n\n\n<li>\u30ed\u30b0\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u6a5f\u5bc6\u60c5\u5831\u306e\u30de\u30b9\u30ad\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u99c6\u52d5\u30c7\u30d0\u30c3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u554f\u984c\u306e\u518d\u73fe\u30c6\u30b9\u30c8\u306e\u4f5c\u6210<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u3092\u4f7f\u3063\u305f\u554f\u984c\u306e\u5207\u308a\u5206\u3051<\/li>\n\n\n\n<li>\u4fee\u6b63\u5f8c\u306e\u56de\u5e30\u30c6\u30b9\u30c8<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-22\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\uff1a\u5b9f\u8df5\u7684\u306a\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u304a\u3059\u3059\u3081\u306e\u5b66\u7fd2\u6559\u6750\u3068\u60c5\u5831\u6e90<\/h3>\n\n\n\n<p><strong>1. \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30ea\u30bd\u30fc\u30b9<\/strong><\/p>\n\n\n\n<p>Laravel\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3001\u6700\u3082\u4fe1\u983c\u3067\u304d\u308b\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/laravel.com\/docs\">Laravel\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a><\/li>\n\n\n\n<li>\u57fa\u672c\u6982\u5ff5\u304b\u3089\u9ad8\u5ea6\u306a\u6a5f\u80fd\u307e\u3067\u4f53\u7cfb\u7684\u306b\u5b66\u7fd2\u53ef\u80fd<\/li>\n\n\n\n<li>\u5404\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u5909\u66f4\u70b9\u3092\u78ba\u8a8d\u53ef\u80fd<\/li>\n\n\n\n<li>API\u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3068\u3057\u3066\u6d3b\u7528<\/li>\n\n\n\n<li>Laravel Forge\u3001Vapor\u3001Envoyer<\/li>\n\n\n\n<li>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3068\u904b\u7528\u306e\u5b66\u7fd2<\/li>\n\n\n\n<li>\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u69cb\u7bc9\u306e\u7406\u89e3<\/li>\n<\/ul>\n\n\n\n<p><strong>2. \u30aa\u30f3\u30e9\u30a4\u30f3\u5b66\u7fd2\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/strong><\/p>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u304a\u3059\u3059\u3081\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\uff1a<\/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=\"\">1. Laracasts\n   - \u57fa\u790e\u304b\u3089\u5fdc\u7528\u307e\u3067\u8c4a\u5bcc\u306a\u52d5\u753b\u30b3\u30f3\u30c6\u30f3\u30c4\n   - \u5b9f\u8df5\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d9\u30fc\u30b9\u306e\u5b66\u7fd2\n   - \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30d5\u30a9\u30fc\u30e9\u30e0\u3067\u306e\u8cea\u554f\u5bfe\u5fdc\n\n2. Laravel Daily\n   - \u5b9f\u52d9\u3067\u5f79\u7acb\u3064Tips\u3084\u5b9f\u88c5\u4f8b\n   - \u30b1\u30fc\u30b9\u30b9\u30bf\u30c7\u30a3\u30d9\u30fc\u30b9\u306e\u89e3\u8aac\n   - \u6700\u65b0\u306eLaravel\u95a2\u9023\u60c5\u5831\n\n3. Udemy\n   - \u69cb\u9020\u5316\u3055\u308c\u305f\u5b66\u7fd2\u30ab\u30ea\u30ad\u30e5\u30e9\u30e0\n   - \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d9\u30fc\u30b9\u306e\u5b9f\u8df5\u7684\u30b3\u30fc\u30b9\n   - \u65e5\u672c\u8a9e\u30b3\u30f3\u30c6\u30f3\u30c4\u3082\u5145\u5b9f<\/pre>\n\n\n\n<p><strong>3. \u6280\u8853\u66f8\u7c4d\u3068\u30d6\u30ed\u30b0<\/strong><\/p>\n\n\n\n<p>2024\u5e74\u6642\u70b9\u3067\u304a\u3059\u3059\u3081\u306e\u6280\u8853\u66f8\u7c4d\uff1a<\/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=\"\">1. \u5165\u9580\u30ec\u30d9\u30eb\n   - \u300cLaravel\u5165\u9580 \u7b2c2\u7248\u300d\n   - \u300cPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af Laravel\u5b9f\u8df5\u958b\u767a\u300d\n\n2. \u4e2d\u7d1a\u30ec\u30d9\u30eb\n   - \u300cLaravel\u5b9f\u8df5\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u300d\n   - \u300cLearning Laravel \u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u300d\n\n3. \u4e0a\u7d1a\u30ec\u30d9\u30eb\n   - \u300cLaravel Clean Architecture\u300d\n   - \u300c\u5b9f\u8df5Laravel Microservices\u300d<\/pre>\n\n\n\n<p><strong>4. \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30ea\u30bd\u30fc\u30b9<\/strong><\/p>\n\n\n\n<p>\u6d3b\u767a\u306a\u6280\u8853\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3078\u306e\u53c2\u52a0\uff1a<\/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=\"\">1. GitHub\n   - \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u8ca2\u732e\n   - \u5b9f\u969b\u306e\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u5b66\u7fd2\n   - \u30a4\u30b7\u30e5\u30fc\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u4f5c\u6210\n\n2. \u6280\u8853\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\n   - Laravel Conference\u3078\u306e\u53c2\u52a0\n   - \u56fd\u5185\u5916\u306ePHP\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\n   - \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30df\u30fc\u30c8\u30a2\u30c3\u30d7\n\n3. \u6280\u8853\u30d6\u30ed\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\n   - Qiita\n   - Zenn\n   - Medium<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u30b9\u30c6\u30c3\u30d7\u30a2\u30c3\u30d7\u306e\u305f\u3081\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/h3>\n\n\n\n<p><strong>1. \u521d\u7d1a\u8005\u30ec\u30d9\u30eb\uff081-3\u30f6\u6708\uff09<\/strong><\/p>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\u6982\u5ff5\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7406\u89e3\uff1a<\/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=\"\">\/\/ 1. \u74b0\u5883\u69cb\u7bc9\n- Docker\/Laravel Sail\u306e\u4f7f\u7528\n- \u57fa\u672c\u7684\u306a\u958b\u767a\u74b0\u5883\u306e\u8a2d\u5b9a\n\n\/\/ 2. \u57fa\u672c\u6a5f\u80fd\u306e\u7fd2\u5f97\n- \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\n- \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\n- Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\n- Eloquent\u57fa\u790e\n\n\/\/ 3. \u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\n- \u30d5\u30a9\u30fc\u30e0\u51e6\u7406\n- \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\n- \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c<\/pre>\n\n\n\n<p><strong>2. \u4e2d\u7d1a\u8005\u30ec\u30d9\u30eb\uff083-6\u30f6\u6708\uff09<\/strong><\/p>\n\n\n\n<p>\u3088\u308a\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3068\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u306e\u7fd2\u5f97\uff1a<\/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=\"\">\/\/ 1. \u8a8d\u8a3c\u3068\u8a8d\u53ef\n- Laravel Breeze\/Jetstream\n- \u30dd\u30ea\u30b7\u30fc\u3068\u30b2\u30fc\u30c8\n- API\u30c8\u30fc\u30af\u30f3\u8a8d\u8a3c\n\n\/\/ 2. \u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\n- PHPUnit\n- Feature\/Unit\u30c6\u30b9\u30c8\n- \u30e2\u30c3\u30af\/\u30b9\u30bf\u30d6\u306e\u6d3b\u7528\n\n\/\/ 3. \u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\n- \u30ea\u30dd\u30b8\u30c8\u30ea\u30d1\u30bf\u30fc\u30f3\n- \u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\n- \u30d5\u30a1\u30b5\u30fc\u30c9\u30d1\u30bf\u30fc\u30f3<\/pre>\n\n\n\n<p><strong>3. \u4e0a\u7d1a\u8005\u30ec\u30d9\u30eb\uff086\u30f6\u6708\u4ee5\u4e0a\uff09<\/strong><\/p>\n\n\n\n<p>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u958b\u767a\u30b9\u30ad\u30eb\uff1a<\/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=\"\">\/\/ 1. \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n- \u30af\u30ea\u30fc\u30f3\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n- \u30c9\u30e1\u30a4\u30f3\u99c6\u52d5\u8a2d\u8a08\n- CQRS\/\u30a4\u30d9\u30f3\u30c8\u30bd\u30fc\u30b7\u30f3\u30b0\n\n\/\/ 2. \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\n- \u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\n- \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u6700\u9069\u5316\n- \u975e\u540c\u671f\u51e6\u7406\n\n\/\/ 3. \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\n- API\u8a2d\u8a08\n- \u30b5\u30fc\u30d3\u30b9\u5206\u5272\n- \u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc<\/pre>\n\n\n\n<p><strong>4. \u5b9f\u8df5\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a2\u30a4\u30c7\u30a2<\/strong><\/p>\n\n\n\n<p>\u30b9\u30ad\u30eb\u30ec\u30d9\u30eb\u5411\u4e0a\u306e\u305f\u3081\u306e\u500b\u4eba\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\uff1a<\/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=\"\">1. \u57fa\u790e\u30ec\u30d9\u30eb\n   - \u30bf\u30b9\u30af\u7ba1\u7406\u30a2\u30d7\u30ea\n   - \u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\n   - \u7c21\u6613EC\u30b5\u30a4\u30c8\n\n2. \u4e2d\u7d1a\u30ec\u30d9\u30eb\n   - SNS\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\n   - \u4e88\u7d04\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\n   - \u30d5\u30a1\u30a4\u30eb\u5171\u6709\u30b5\u30fc\u30d3\u30b9\n\n3. \u4e0a\u7d1a\u30ec\u30d9\u30eb\n   - \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30d9\u30fc\u30b9\u306eEC\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\n   - \u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30c1\u30e3\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0\n   - \u5206\u6790\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9<\/pre>\n\n\n\n<p>\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u306e\u305f\u3081\u306e\u30a2\u30c9\u30d0\u30a4\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f53\u7cfb\u7684\u306a\u5b66\u7fd2\u8a08\u753b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u660e\u78ba\u306a\u76ee\u6a19\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u5b9a\u671f\u7684\u306a\u632f\u308a\u8fd4\u308a<\/li>\n\n\n\n<li>\u5b66\u7fd2\u8a18\u9332\u306e\u4f5c\u6210<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9f\u8df5\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u500b\u4eba\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u958b\u767a<\/li>\n\n\n\n<li>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3078\u306e\u8ca2\u732e<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u5b9f\u65bd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6700\u65b0\u6280\u8853\u306e\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6280\u8853\u30d6\u30ed\u30b0\u306e\u5b9a\u671f\u8cfc\u8aad<\/li>\n\n\n\n<li>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3078\u306e\u53c2\u52a0<\/li>\n\n\n\n<li>\u65b0\u6a5f\u80fd\u306e\u7a4d\u6975\u7684\u306a\u8a66\u7528<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u77e5\u8b58\u306e\u5171\u6709<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6280\u8853\u30d6\u30ed\u30b0\u306e\u57f7\u7b46<\/li>\n\n\n\n<li>\u52c9\u5f37\u4f1a\u3067\u306e\u767a\u8868<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u5185\u3067\u306e\u77e5\u8b58\u5171\u6709<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30ea\u30bd\u30fc\u30b9\u3068\u30ed\u30fc\u30c9\u30de\u30c3\u30d7\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001Laravel\u306e\u5b66\u7fd2\u3092\u52b9\u679c\u7684\u306b\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u91cd\u8981\u306a\u306e\u306f\u3001\u81ea\u5206\u306e\u30da\u30fc\u30b9\u3067\u7740\u5b9f\u306b\u9032\u3080\u3053\u3068\u3068\u3001\u5b9f\u8df5\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u901a\u3058\u3066\u5b66\u3093\u3060\u77e5\u8b58\u3092\u5b9a\u7740\u3055\u305b\u308b\u3053\u3068\u3067\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-3282","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\/3282","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=3282"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3282\/revisions"}],"predecessor-version":[{"id":3284,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3282\/revisions\/3284"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3282"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3282"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3282"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}