{"id":3460,"date":"2025-03-24T08:46:08","date_gmt":"2025-03-23T23:46:08","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3460"},"modified":"2025-03-24T08:46:38","modified_gmt":"2025-03-23T23:46:38","slug":"php-laravel%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%e3%81%b8%e3%81%ae%e9%81%93%ef%bc%9a%e5%88%9d%e5%bf%83%e8%80%85%e3%81%8b%e3%82%89%e4%b8%8a%e7%b4%9a%e8%80%85%e3%81%be%e3%81%a7%e4%bd%bf%e3%81%88%e3%82%8b","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3460","title":{"rendered":"PHP Laravel\u30de\u30b9\u30bf\u30fc\u3078\u306e\u9053\uff1a\u521d\u5fc3\u8005\u304b\u3089\u4e0a\u7d1a\u8005\u307e\u3067\u4f7f\u3048\u308b10\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"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\u5165\u9580\uff1aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u738b\u8005\u3068\u306f<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">Laravel\u304c\u9078\u3070\u308c\u308b\u7406\u7531\u3068\u4eba\u6c17\u306e\u79d8\u5bc6<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">MVC\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u3068Laravel\u306e\u57fa\u672c\u601d\u60f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">Laravel\u74b0\u5883\u69cb\u7bc9\u306e\u5b8c\u5168\u30ac\u30a4\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">Composer\u3092\u4f7f\u3063\u305fLaravel\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u59cb\u3081\u65b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">\u52b9\u7387\u7684\u306a\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-26\">Laravel\u306e\u57fa\u672c\u6a5f\u80fd\u30de\u30b9\u30bf\u30fc\u30ac\u30a4\u30c9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-27\">\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306e\u7406\u89e3\u3068\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-32\">Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3067\u52b9\u7387\u7684\u306a\u30d3\u30e5\u30fc\u4f5c\u6210<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-37\">Eloquent ORM\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u7c21\u7d20\u5316\u3059\u308b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-42\">\u5b9f\u8df5\u7684\u306aLaravel\u30c6\u30af\u30cb\u30c3\u30af\uff1a\u521d\u7d1a\u7de8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-43\">\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3068\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-48\">\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u4f7f\u3063\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-52\">\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\u3068\u7ba1\u7406<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-58\">\u5b9f\u8df5\u7684\u306aLaravel\u30c6\u30af\u30cb\u30c3\u30af\uff1a\u4e2d\u7d1a\u7de8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-59\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3092\u6d3b\u7528\u3057\u305f\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0<\/a>      <\/li>      <li>        <a href=\"#i-70\">\u30ad\u30e5\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u975e\u540c\u671f\u51e6\u7406\u3092\u5b9f\u73fe\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-75\">\u30a4\u30d9\u30f3\u30c8\u3068\u30ea\u30b9\u30ca\u30fc\u3092\u4f7f\u3063\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u306e\u9023\u643a<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-81\">\u5b9f\u8df5\u7684\u306aLaravel\u30c6\u30af\u30cb\u30c3\u30af\uff1a\u4e0a\u7d1a\u7de8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-82\">\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u3068DI\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-88\">\u30ab\u30b9\u30bf\u30e0\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4f5c\u6210\u3068Composer\u3067\u306e\u516c\u958b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-95\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\uff08TDD\uff09\u3068Laravel\u306e\u76f8\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-102\">Laravel\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-103\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u9ad8\u901f\u5316\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-112\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-119\">\u672c\u756a\u74b0\u5883\u30c7\u30d7\u30ed\u30a4\u6642\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-131\">Laravel\u958b\u767a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-132\">\u30af\u30ea\u30fc\u30f3\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u305f\u3081\u306eLaravel\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04<\/a>      <\/li>      <li>        <a href=\"#i-142\">\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u8a08\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-149\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5b9f\u88c5\u3068\u8106\u5f31\u6027\u5bfe\u7b56<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-159\">Laravel\u3068PHP\u306e\u4ed6\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u6bd4\u8f03<\/a>    <ul class=\"menu_level_1\">      <li class=\"first last\">        <a href=\"#i-160\">Symfony\u3068Laravel\u306e\u9055\u3044\u3068\u9078\u629e\u57fa\u6e96<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-162\">Laravel\u30de\u30b9\u30bf\u30fc\u3078\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-163\">\u304a\u3059\u3059\u3081\u306e\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3<\/a>      <\/li>      <li>        <a href=\"#i-168\">Laravel\u3068Vue.js\/React.js\u306e\u7d71\u5408\u3067\u6700\u65b0\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u958b\u767a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-177\">\u5b9f\u52d9\u3067\u6d3b\u304b\u305b\u308bLaravel\u30b9\u30ad\u30eb\u30a2\u30c3\u30d7\u6226\u7565<\/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\u5165\u9580\uff1aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u738b\u8005\u3068\u306f<\/h2>\n\n\n\n<p>Laravel \u306f\u3001\u8fd1\u5e74\u306e PHP \u958b\u767a\u306b\u304a\u3044\u3066\u4e0d\u52d5\u306e\u5730\u4f4d\u3092\u78ba\u7acb\u3057\u305f\u6700\u3082\u4eba\u6c17\u306e\u3042\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u300cPHP \u306e\u30a8\u30ec\u30ac\u30f3\u30c8 Web \u8077\u4eba\u300d\u3068\u547c\u3070\u308c\u308b\u3053\u3068\u3082\u3042\u308b\u3088\u3046\u306b\u3001\u958b\u767a\u8005\u4f53\u9a13\u3092\u91cd\u8996\u3057\u305f\u8a2d\u8a08\u3068\u3001\u30b7\u30f3\u30d7\u30eb\u306a\u304c\u3089\u3082\u5f37\u529b\u306a\u6a5f\u80fd\u30bb\u30c3\u30c8\u3067\u591a\u304f\u306e\u958b\u767a\u8005\u304b\u3089\u652f\u6301\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u306e\u57fa\u672c\u6982\u5ff5\u3068\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u305f\u969b\u306e\u7279\u5fb4\u306b\u3064\u3044\u3066\u6398\u308a\u4e0b\u3052\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">Laravel\u304c\u9078\u3070\u308c\u308b\u7406\u7531\u3068\u4eba\u6c17\u306e\u79d8\u5bc6<\/h3>\n\n\n\n<p>Laravel \u304c\u3053\u308c\u307b\u3069\u307e\u3067\u306b\u652f\u6301\u3055\u308c\u308b\u7406\u7531\u306f\u3001\u305d\u306e\u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u8a2d\u8a08\u601d\u60f3\u3068\u958b\u767a\u8005\u3092\u7b2c\u4e00\u306b\u8003\u3048\u305f\u6a5f\u80fd\u30bb\u30c3\u30c8\u306b\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u4e3b\u306a\u7279\u5fb4\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-2\">1. \u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u69cb\u6587\u3068\u958b\u767a\u8005\u4f53\u9a13\u306e\u91cd\u8996<\/h4>\n\n\n\n<p>Laravel \u306e\u6700\u5927\u306e\u7279\u5fb4\u306f\u3001\u76f4\u611f\u7684\u3067\u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u69cb\u6587\u3067\u3059\u3002\u958b\u767a\u8005\u306e\u751f\u7523\u6027\u3092\u9ad8\u3081\u308b\u305f\u3081\u306b\u8a2d\u8a08\u3055\u308c\u3066\u304a\u308a\u3001\u8907\u96d1\u306a\u51e6\u7406\u3082\u7c21\u6f54\u306a\u30b3\u30fc\u30c9\u3067\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/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\u306e\u4f8b\nRoute::get('\/welcome', function () {\n    return view('welcome', ['name' =&gt; 'Laravel']);\n});\n\n\/\/ \u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u306e\u4f8b\n$users = DB::table('users')\n            -&gt;where('votes', '&gt;', 100)\n            -&gt;get();\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-3\">2. \u5145\u5b9f\u3057\u305f\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0<\/h4>\n\n\n\n<p>Laravel \u306f\u5358\u306a\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u8d85\u3048\u3001\u5305\u62ec\u7684\u306a\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Composer<\/strong>: \u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406<\/li>\n\n\n\n<li><strong>Artisan<\/strong>: \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9<\/li>\n\n\n\n<li><strong>Forge\/Envoyer<\/strong>: \u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30fb\u30c4\u30fc\u30eb<\/li>\n\n\n\n<li><strong>Laravel Vapor<\/strong>: \u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8<\/li>\n\n\n\n<li><strong>Laravel Nova<\/strong>: \u7ba1\u7406\u30d1\u30cd\u30eb<\/li>\n\n\n\n<li><strong>Laravel Horizon<\/strong>: \u30ad\u30e5\u30fc\u76e3\u8996\u30b7\u30b9\u30c6\u30e0<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-4\">3. \u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>Laravel \u306f\u975e\u5e38\u306b\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u6301\u3061\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30ea\u30bd\u30fc\u30b9\u304c\u8c4a\u5bcc\u306b\u5b58\u5728\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Laracasts \u3084 Laravel News \u306a\u3069\u306e\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/li>\n\n\n\n<li>\u8a73\u7d30\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/li>\n\n\n\n<li>\u5b9a\u671f\u7684\u306a\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9 (Laracon)<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u30e9\u30a4\u30d6\u30e9\u30ea<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-5\">4. \u4f01\u696d\u30ec\u30d9\u30eb\u306e\u958b\u767a\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u6a5f\u80fd\u30bb\u30c3\u30c8<\/h4>\n\n\n\n<p>Laravel \u306f\u500b\u4eba\u958b\u767a\u304b\u3089\u5927\u898f\u6a21\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u307e\u3067\u5bfe\u5fdc\u53ef\u80fd\u306a\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f37\u529b\u306a\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u901a\u4fe1 (Laravel Echo)<\/li>\n\n\n\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u30b8\u30e7\u30d6\u30ad\u30e5\u30fc\u3068\u975e\u540c\u671f\u51e6\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">MVC\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u3068Laravel\u306e\u57fa\u672c\u601d\u60f3<\/h3>\n\n\n\n<p>Laravel \u306f Model-View-Controller (MVC) \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u5358\u306b MVC \u3092\u5b9f\u88c5\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u73fe\u4ee3\u7684\u306a Web \u958b\u767a\u306e\u30cb\u30fc\u30ba\u306b\u5408\u308f\u305b\u3066\u62e1\u5f35\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">MVC \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u57fa\u672c<\/h4>\n\n\n\n<p>Laravel \u306b\u304a\u3051\u308b MVC \u306e\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u5f79\u5272\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\uff1a<\/p>\n\n\n<div id=\"id-9aa1794b-d37d-4c45-ab59-a3f95b4ebe00\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/th><th>\u5f79\u5272<\/th><th>Laravel \u3067\u306e\u5b9f\u88c5<\/th><\/tr><\/thead><tbody><tr><td><strong>Model<\/strong><\/td><td>\u30c7\u30fc\u30bf\u3068\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u7ba1\u7406<\/td><td>Eloquent ORM<\/td><\/tr><tr><td><strong>View<\/strong><\/td><td>\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u8868\u793a<\/td><td>Blade \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3<\/td><\/tr><tr><td><strong>Controller<\/strong><\/td><td>\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3057\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3059<\/td><td>Controller \u30af\u30e9\u30b9<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">Laravel \u306e\u8a2d\u8a08\u601d\u60f3<\/h4>\n\n\n\n<p>Laravel \u306e\u8a2d\u8a08\u601d\u60f3\u306f\u3001\u300c\u958b\u767a\u8005\u306e\u5e78\u798f\u5ea6\u300d\u3092\u6700\u5927\u5316\u3059\u308b\u3053\u3068\u306b\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u8003\u3048\u65b9\u306b\u8868\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u898f\u7d04\u3088\u308a\u3082\u8a2d\u5b9a (Convention Over Configuration)<\/strong> \u958b\u767a\u8005\u304c\u660e\u793a\u7684\u306b\u8a2d\u5b9a\u3057\u306a\u304f\u3066\u3082\u3001\u898f\u7d04\u306b\u5f93\u3046\u3053\u3068\u3067\u57fa\u672c\u7684\u306a\u52d5\u4f5c\u304c\u5b9f\u73fe\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u758e\u7d50\u5408\u3068\u4f9d\u5b58\u6027\u6ce8\u5165<\/strong> \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u9593\u3092\u758e\u7d50\u5408\u306b\u3057\u3001\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u3092\u901a\u3058\u305f\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 <code>\/\/ \u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u3092\u4f7f\u3063\u305f\u4f9d\u5b58\u6027\u6ce8\u5165\u306e\u4f8b public function __construct(UserRepository $users) { $this-&gt;users = $users; }<\/code><\/li>\n\n\n\n<li><strong>\u30c6\u30b9\u30bf\u30d3\u30ea\u30c6\u30a3\u306e\u91cd\u8996<\/strong> \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u81ea\u4f53\u304c\u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u3092\u8003\u616e\u3057\u3066\u8a2d\u8a08\u3055\u308c\u3066\u304a\u308a\u3001\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u304b\u3089\u30d6\u30e9\u30a6\u30b6\u30c6\u30b9\u30c8\u307e\u3067\u5305\u62ec\u7684\u306a\u30c6\u30b9\u30c8\u30c4\u30fc\u30eb\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u62bd\u8c61\u5316<\/strong> \u8907\u96d1\u306a\u51e6\u7406\u3092\u62bd\u8c61\u5316\u3057\u3001\u958b\u767a\u8005\u304c\u672c\u8cea\u7684\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306b\u96c6\u4e2d\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">Laravel \u306b\u304a\u3051\u308b SOLID \u539f\u5247\u306e\u5b9f\u8df5<\/h4>\n\n\n\n<p>Laravel \u306f SOLID \u539f\u5247\uff08\u5358\u4e00\u8cac\u4efb\u3001\u30aa\u30fc\u30d7\u30f3\u30fb\u30af\u30ed\u30fc\u30ba\u30c9\u3001\u30ea\u30b9\u30b3\u30d5\u306e\u7f6e\u63db\u3001\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u5206\u96e2\u3001\u4f9d\u5b58\u6027\u9006\u8ee2\uff09\u3092\u5b9f\u8df5\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u304c\u6301\u7d9a\u53ef\u80fd\u3067\u4fdd\u5b88\u3057\u3084\u3059\u3044\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306e\u69cb\u7bc9\u3092\u53ef\u80fd\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4f8b\u3048\u3070\u3001\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u4ed5\u7d44\u307f\u306f\u4f9d\u5b58\u6027\u9006\u8ee2\u539f\u5247\u3092\u5b9f\u88c5\u3057\u3001\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u4ecb\u3057\u305f\u758e\u7d50\u5408\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u8a2d\u8a08\u3092\u4fc3\u9032\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>Laravel \u306e\u3053\u308c\u3089\u306e\u8a2d\u8a08\u601d\u60f3\u306f\u3001\u5358\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u3001\u30c6\u30b9\u30c8\u53ef\u80fd\u3067\u62e1\u5f35\u3057\u3084\u3059\u3044\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3092\u5b9f\u73fe\u3059\u308b\u3053\u3068\u306b\u91cd\u70b9\u3092\u7f6e\u3044\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u304c\u591a\u304f\u306e\u4f01\u696d\u3084\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067 Laravel \u304c\u9078\u3070\u308c\u308b\u5927\u304d\u306a\u7406\u7531\u306e\u4e00\u3064\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-10\">Laravel\u74b0\u5883\u69cb\u7bc9\u306e\u5b8c\u5168\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<p>Laravel \u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3092\u59cb\u3081\u308b\u306b\u306f\u3001\u9069\u5207\u306a\u74b0\u5883\u69cb\u7bc9\u304c\u5fc5\u8981\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u306e\u74b0\u5883\u69cb\u7bc9\u306b\u95a2\u3059\u308b\u5b8c\u5168\u306a\u30ac\u30a4\u30c9\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002\u521d\u5fc3\u8005\u304b\u3089\u4e0a\u7d1a\u8005\u307e\u3067\u3001\u30b9\u30e0\u30fc\u30ba\u306b\u958b\u767a\u3092\u958b\u59cb\u3067\u304d\u308b\u624b\u9806\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">Composer\u3092\u4f7f\u3063\u305fLaravel\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u59cb\u3081\u65b9<\/h3>\n\n\n\n<p><a href=\"https:\/\/getcomposer.org\/\">Composer<\/a> \u306f PHP \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u7ba1\u7406\u30c4\u30fc\u30eb\u3067\u3042\u308a\u3001Laravel \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u4f9d\u5b58\u95a2\u4fc2\u306e\u7ba1\u7406\u306b\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u307e\u305a\u306f Composer \u3092\u4f7f\u3063\u305f Laravel \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u59cb\u3081\u65b9\u3092\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-12\">1. \u524d\u63d0\u6761\u4ef6\u306e\u78ba\u8a8d<\/h4>\n\n\n\n<p>Laravel \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u524d\u306b\u3001\u4ee5\u4e0b\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP &gt;= 8.1<\/li>\n\n\n\n<li>BCMath PHP Extension<\/li>\n\n\n\n<li>Ctype PHP Extension<\/li>\n\n\n\n<li>Fileinfo PHP Extension<\/li>\n\n\n\n<li>JSON PHP Extension<\/li>\n\n\n\n<li>Mbstring PHP Extension<\/li>\n\n\n\n<li>OpenSSL PHP Extension<\/li>\n\n\n\n<li>PDO PHP Extension<\/li>\n\n\n\n<li>Tokenizer PHP Extension<\/li>\n\n\n\n<li>XML PHP Extension<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">2. Composer \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h4>\n\n\n\n<p>\u307e\u3060 Composer \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001<a href=\"https:\/\/getcomposer.org\/download\/\">\u516c\u5f0f\u30b5\u30a4\u30c8<\/a>\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">3. Laravel \u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09<\/h4>\n\n\n\n<p>Laravel \u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u3092\u4f7f\u3046\u3068\u3001\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u3088\u308a\u7c21\u5358\u306b\u4f5c\u6210\u3067\u304d\u307e\u3059\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=\"\"># Composer\u3092\u4f7f\u3063\u3066Laravel\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u3092\u30b0\u30ed\u30fc\u30d0\u30eb\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\ncomposer global require laravel\/installer\n\n# \u30d1\u30b9\u3092\u901a\u3059\uff08~\/.bashrc \u3084 ~\/.zshrc \u306a\u3069\u306b\u8ffd\u52a0\uff09\nexport PATH=\"$PATH:$HOME\/.composer\/vendor\/bin\"\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">4. Laravel \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210<\/h4>\n\n\n\n<p>Laravel \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f\u30012\u3064\u306e\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>Laravel \u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u3092\u4f7f\u3046\u5834\u5408\uff1a<\/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=\"\"># \u65b0\u3057\u3044Laravel\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\nlaravel new my-project\n<\/pre>\n\n\n\n<p><strong>Composer \u3092\u76f4\u63a5\u4f7f\u3046\u5834\u5408\uff1a<\/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\u3063\u3066\u65b0\u3057\u3044Laravel\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\ncomposer create-project --prefer-dist laravel\/laravel my-project\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-16\">5. \u958b\u767a\u30b5\u30fc\u30d0\u30fc\u306e\u8d77\u52d5<\/h4>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u3001\u30d3\u30eb\u30c8\u30a4\u30f3\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\u307e\u3059\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=\"\">cd my-project\nphp artisan serve\n<\/pre>\n\n\n\n<p>\u30d6\u30e9\u30a6\u30b6\u3067 <code>http:\/\/localhost:8000<\/code> \u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3068\u3001Laravel \u306e\u30a6\u30a7\u30eb\u30ab\u30e0\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u52b9\u7387\u7684\u306a\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h3>\n\n\n\n<p>\u52b9\u7387\u7684\u306a Laravel \u958b\u767a\u3092\u884c\u3046\u305f\u3081\u306b\u306f\u3001\u5358\u306b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u958b\u767a\u74b0\u5883\u5168\u4f53\u3092\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u63a8\u5968\u3055\u308c\u308b\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">1. \u7d71\u5408\u958b\u767a\u74b0\u5883\uff08IDE\uff09\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h4>\n\n\n\n<p>Laravel \u958b\u767a\u306b\u6700\u9069\u306a IDE \u3068\u30a8\u30af\u30b9\u30c6\u30f3\u30b7\u30e7\u30f3\uff1a<\/p>\n\n\n<div id=\"id-3f21ecd8-0395-4131-a52d-35698b2974be\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>IDE<\/th><th>\u304a\u3059\u3059\u3081\u30a8\u30af\u30b9\u30c6\u30f3\u30b7\u30e7\u30f3<\/th><\/tr><\/thead><tbody><tr><td><strong>VS Code<\/strong><\/td><td>PHP Intelephense, Laravel Artisan, Laravel Snippets<\/td><\/tr><tr><td><strong>PhpStorm<\/strong><\/td><td>Laravel Plugin\uff08\u30d3\u30eb\u30c8\u30a4\u30f3\u3067\u307b\u3068\u3093\u3069\u30b5\u30dd\u30fc\u30c8\u6e08\u307f\uff09<\/td><\/tr><tr><td><strong>Sublime Text<\/strong><\/td><td>Laravel Blade Highlighter, PHP Companion<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-19\">2. \u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306e\u30aa\u30d7\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<p>Laravel \u306e\u958b\u767a\u74b0\u5883\u306b\u306f\u8907\u6570\u306e\u9078\u629e\u80a2\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-20\">a. Laravel Sail\uff08\u63a8\u5968\uff09<\/h5>\n\n\n\n<p>Laravel Sail \u306f\u3001Docker \u3092\u4f7f\u3063\u305f\u8efd\u91cf\u306a\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3001Laravel \u306e\u958b\u767a\u74b0\u5883\u3092\u7c21\u5358\u306b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3067\u304d\u307e\u3059\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=\"\"># \u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067Sail\u3092\u4f7f\u3046\u5834\u5408\nlaravel new my-project --sail\n\n# \u65e2\u5b58\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306bSail\u3092\u8ffd\u52a0\u3059\u308b\u5834\u5408\ncomposer require laravel\/sail --dev\nphp artisan sail:install\n\n# Sail\u3092\u8d77\u52d5\n.\/vendor\/bin\/sail up\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-21\">b. Laravel Valet\uff08macOS\u5c02\u7528\uff09<\/h5>\n\n\n\n<p>macOS \u30e6\u30fc\u30b6\u30fc\u306b\u306f Laravel Valet \u304c\u304a\u3059\u3059\u3081\u3067\u3059\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=\"\"># Homebrew\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n\/bin\/bash -c \"$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/HEAD\/install.sh)\"\n\n# PHP\u3068Composer\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nbrew install php composer\n\n# Valet\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\ncomposer global require laravel\/valet\nvalet install\n\n# \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092Valet\u3067\u767b\u9332\ncd ~\/Projects\nvalet park\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-22\">c. Homestead\uff08VirtualBox\/Vagrant\uff09<\/h5>\n\n\n\n<p>\u3088\u308a\u5f93\u6765\u578b\u306e\u4eee\u60f3\u74b0\u5883\u3092\u597d\u3080\u5834\u5408\u306f Laravel Homestead \u304c\u5229\u7528\u3067\u304d\u307e\u3059\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=\"\"># Vagrant\u30dc\u30c3\u30af\u30b9\u306e\u8ffd\u52a0\nvagrant box add laravel\/homestead\n\n# Homestead\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\ngit clone https:\/\/github.com\/laravel\/homestead.git ~\/Homestead\ncd ~\/Homestead\nbash init.sh\n<\/pre>\n\n\n\n<p>\u305d\u306e\u5f8c\u3001<code>Homestead.yaml<\/code> \u3092\u7de8\u96c6\u3057\u3066\u4eee\u60f3\u30de\u30b7\u30f3\u306e\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-23\">3. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h4>\n\n\n\n<p>Laravel \u306f\u69d8\u3005\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>MySQL<\/strong>: \u6700\u3082\u4e00\u822c\u7684\u306a\u9078\u629e\u80a2<\/li>\n\n\n\n<li><strong>PostgreSQL<\/strong>: \u3088\u308a\u9ad8\u5ea6\u306a\u6a5f\u80fd\u304c\u5fc5\u8981\u306a\u5834\u5408<\/li>\n\n\n\n<li><strong>SQLite<\/strong>: \u5c0f\u898f\u6a21\u30a2\u30d7\u30ea\u3084\u958b\u767a\u7528<\/li>\n\n\n\n<li><strong>SQL Server<\/strong>: Windows\u30d9\u30fc\u30b9\u306e\u74b0\u5883\u5411\u3051<\/li>\n<\/ul>\n\n\n\n<p><code>.env<\/code> \u30d5\u30a1\u30a4\u30eb\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u60c5\u5831\u3092\u8a2d\u5b9a\u3057\u307e\u3059\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=\"\">DB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=laravel\nDB_USERNAME=root\nDB_PASSWORD=\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-24\">4. \u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h4>\n\n\n\n<p>Git\u3092\u4f7f\u3063\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u306f\u5fc5\u9808\u3067\u3059\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=\"\"># Git\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u521d\u671f\u5316\ngit init\n\n# .gitignore\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\uff08\u4e00\u822c\u7684\u306b\u81ea\u52d5\u751f\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff09\n# \u5fc5\u8981\u306b\u5fdc\u3058\u3066\u7de8\u96c6\n\n# \u6700\u521d\u306e\u30b3\u30df\u30c3\u30c8\ngit add .\ngit commit -m \"Initial commit\"\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">5. NPM \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff08\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u958b\u767a\u7528\uff09<\/h4>\n\n\n\n<p>Laravel \u306e\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u958b\u767a\u306b\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\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=\"\"># NPM\u4f9d\u5b58\u95a2\u4fc2\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nnpm install\n\n# \u958b\u767a\u30e2\u30fc\u30c9\u3067\u306e\u30b3\u30f3\u30d1\u30a4\u30eb\nnpm run dev\n\n# \u672c\u756a\u7528\u306b\u30d3\u30eb\u30c9\nnpm run build\n<\/pre>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u624b\u9806\u3092\u8e0f\u3080\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u304b\u3064\u5f37\u529b\u306a Laravel \u958b\u767a\u74b0\u5883\u304c\u6574\u3044\u307e\u3059\u3002\u9069\u5207\u306a\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u306e\u751f\u7523\u6027\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3001\u3088\u308a\u9ad8\u54c1\u8cea\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-26\">Laravel\u306e\u57fa\u672c\u6a5f\u80fd\u30de\u30b9\u30bf\u30fc\u30ac\u30a4\u30c9<\/h2>\n\n\n\n<p>Laravel \u306e\u5f37\u307f\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u5fc5\u8981\u306a\u57fa\u672c\u6a5f\u80fd\u304c\u5145\u5b9f\u3057\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u958b\u767a\u306e\u57fa\u790e\u3068\u306a\u308b3\u3064\u306e\u91cd\u8981\u306a\u6a5f\u80fd\u306b\u7126\u70b9\u3092\u5f53\u3066\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-27\">\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306e\u7406\u89e3\u3068\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>Laravel \u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306eURL\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5bfe\u5fdc\u95a2\u4fc2\u3092\u5b9a\u7fa9\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306f\u3001<code>routes\/web.php<\/code>\uff08Web\u30da\u30fc\u30b8\u7528\uff09\u3001<code>routes\/api.php<\/code>\uff08API\u7528\uff09\u306a\u3069\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-28\">\u57fa\u672c\u7684\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<p>\u6700\u3082\u57fa\u672c\u7684\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306f\u3001URL\u3001HTTP \u30e1\u30bd\u30c3\u30c9\u3001\u305d\u3057\u3066\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5bfe\u5fdc\u4ed8\u3051\u3067\u3059\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=\"\">\/\/ \u57fa\u672c\u7684\u306aGET\u30eb\u30fc\u30c8\nRoute::get('\/hello', function () {\n    return 'Hello World';\n});\n\n\/\/ \u540d\u524d\u4ed8\u304d\u30eb\u30fc\u30c8\nRoute::get('\/profile', function () {\n    return view('profile');\n})-&gt;name('profile');\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u30a2\u30af\u30b7\u30e7\u30f3\u3078\u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\nRoute::get('\/users', [UserController::class, 'index']);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">\u30eb\u30fc\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf<\/h4>\n\n\n\n<p>URL\u304b\u3089\u52d5\u7684\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u53d7\u3051\u53d6\u308b\u65b9\u6cd5\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=\"\">\/\/ \u5fc5\u9808\u30d1\u30e9\u30e1\u30fc\u30bf\nRoute::get('\/user\/{id}', function ($id) {\n    return 'User '.$id;\n});\n\n\/\/ \u30aa\u30d7\u30b7\u30e7\u30f3\u30d1\u30e9\u30e1\u30fc\u30bf\uff08?\u3092\u4ed8\u3051\u308b\uff09\nRoute::get('\/user\/{name?}', function ($name = 'Guest') {\n    return 'Hello '.$name;\n});\n\n\/\/ \u6b63\u898f\u8868\u73fe\u306b\u3088\u308b\u5236\u7d04\nRoute::get('\/user\/{id}', function ($id) {\n    \/\/ ...\n})-&gt;where('id', '[0-9]+');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">\u30eb\u30fc\u30c8\u30b0\u30eb\u30fc\u30d7<\/h4>\n\n\n\n<p>\u5171\u901a\u306e\u5c5e\u6027\u3092\u6301\u3064\u30eb\u30fc\u30c8\u3092\u30b0\u30eb\u30fc\u30d7\u5316\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u91cd\u8907\u3092\u6e1b\u3089\u305b\u307e\u3059\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=\"\">\/\/ \u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u9069\u7528\u3057\u305f\u30b0\u30eb\u30fc\u30d7\nRoute::middleware(['auth'])-&gt;group(function () {\n    Route::get('\/dashboard', function () {\n        \/\/ \u8a8d\u8a3c\u6e08\u307f\u30e6\u30fc\u30b6\u30fc\u306e\u307f\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\n    });\n    Route::get('\/settings', function () {\n        \/\/ \u8a8d\u8a3c\u6e08\u307f\u30e6\u30fc\u30b6\u30fc\u306e\u307f\u30a2\u30af\u30bb\u30b9\u53ef\u80fd\n    });\n});\n\n\/\/ \u30d7\u30ec\u30d5\u30a3\u30c3\u30af\u30b9\u3092\u9069\u7528\u3057\u305f\u30b0\u30eb\u30fc\u30d7\nRoute::prefix('admin')-&gt;group(function () {\n    Route::get('\/users', function () {\n        \/\/ \/admin\/users \u306b\u30de\u30c3\u30c1\n    });\n});\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">\u30eb\u30fc\u30c8\u540d\u524d\u7a7a\u9593\u3068\u30ea\u30bd\u30fc\u30b9\u30eb\u30fc\u30c8<\/h4>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u3084 RESTful \u30ea\u30bd\u30fc\u30b9\u306e\u5b9a\u7fa9\u3092\u7c21\u5358\u306b\u884c\u3048\u307e\u3059\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=\"\">\/\/ \u540d\u524d\u7a7a\u9593\u306b\u3088\u308b\u30b0\u30eb\u30fc\u30d7\u5316\nRoute::namespace('Admin')-&gt;group(function () {\n    \/\/ App\\Http\\Controllers\\Admin \u540d\u524d\u7a7a\u9593\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\n});\n\n\/\/ \u30ea\u30bd\u30fc\u30b9\u30eb\u30fc\u30c8\uff08CRUD\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u4e00\u62ec\u5b9a\u7fa9\uff09\nRoute::resource('photos', PhotoController::class);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-32\">Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3067\u52b9\u7387\u7684\u306a\u30d3\u30e5\u30fc\u4f5c\u6210<\/h3>\n\n\n\n<p>Blade \u306f Laravel \u306e\u5f37\u529b\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3067\u3001PHP \u306e\u6a5f\u80fd\u3092\u6d3b\u304b\u3057\u3064\u3064\u3001\u3088\u308a\u7c21\u6f54\u3067\u8aad\u307f\u3084\u3059\u3044\u69cb\u6587\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">Blade\u306e\u57fa\u672c\u69cb\u6587<\/h4>\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=\"\">{{-- Blade\u30b3\u30e1\u30f3\u30c8 --}}\n\n{{-- \u5909\u6570\u306e\u8868\u793a\uff08HTML\u30a8\u30b9\u30b1\u30fc\u30d7\u3042\u308a\uff09 --}}\n{{ $name }}\n\n{{-- HTML\u30a8\u30b9\u30b1\u30fc\u30d7\u306a\u3057\u3067\u8868\u793a\uff08\u6ce8\u610f\u3057\u3066\u4f7f\u7528\uff09 --}}\n{!! $html !!}\n\n{{-- \u6761\u4ef6\u5206\u5c90 --}}\n@if (count($records) === 1)\n    \u4e00\u4ef6\u306e\u30ec\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u3059\n@elseif (count($records) &gt; 1)\n    \u8907\u6570\u306e\u30ec\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u3059\n@else\n    \u30ec\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u305b\u3093\n@endif\n\n{{-- \u30eb\u30fc\u30d7 --}}\n@foreach ($users as $user)\n    &lt;p&gt;{{ $user-&gt;name }}&lt;\/p&gt;\n@endforeach\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-34\">\u30ec\u30a4\u30a2\u30a6\u30c8\u3068\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/h4>\n\n\n\n<p>Blade \u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u6a5f\u80fd\u3092\u4f7f\u3046\u3068\u3001Web\u30b5\u30a4\u30c8\u5168\u4f53\u3067\u5171\u901a\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\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=\"\">{{-- layouts\/app.blade.php --}}\n&lt;html&gt;\n    &lt;head&gt;\n        &lt;title&gt;@yield('title')&lt;\/title&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        @section('sidebar')\n            \u3053\u308c\u306f\u30e1\u30a4\u30f3\u306e\u30b5\u30a4\u30c9\u30d0\u30fc\u3067\u3059\n        @show\n\n        &lt;div class=\"container\"&gt;\n            @yield('content')\n        &lt;\/div&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;\n\n{{-- child.blade.php --}}\n@extends('layouts.app')\n\n@section('title', '\u30da\u30fc\u30b8\u30bf\u30a4\u30c8\u30eb')\n\n@section('sidebar')\n    @parent\n    &lt;p&gt;\u5b50\u30d3\u30e5\u30fc\u5074\u306e\u30b5\u30a4\u30c9\u30d0\u30fc&lt;\/p&gt;\n@endsection\n\n@section('content')\n    &lt;p&gt;\u30b3\u30f3\u30c6\u30f3\u30c4\u90e8\u5206&lt;\/p&gt;\n@endsection\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u30b9\u30ed\u30c3\u30c8<\/h4>\n\n\n\n<p>Laravel 8\u4ee5\u964d\u3067\u306f\u3001\u3088\u308a\u67d4\u8edf\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u304c\u5c0e\u5165\u3055\u308c\u307e\u3057\u305f\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=\"\">{{-- \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u5b9a\u7fa9 (alert.blade.php) --}}\n&lt;div class=\"alert alert-{{ $type }}\"&gt;\n    {{ $slot }}\n&lt;\/div&gt;\n\n{{-- \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u4f7f\u7528 --}}\n&lt;x-alert type=\"error\"&gt;\n    &lt;strong&gt;\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\uff01&lt;\/strong&gt; \u4f55\u304b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002\n&lt;\/x-alert&gt;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-36\">\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u3068\u30ab\u30b9\u30bf\u30e0\u62e1\u5f35<\/h4>\n\n\n\n<p>Blade \u306b\u306f\u591a\u6570\u306e\u4fbf\u5229\u306a\u30c7\u30a3\u30ec\u30af\u30c6\u30a3\u30d6\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\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=\"\">{{-- \u672a\u5b9a\u7fa9\u5909\u6570\u306e\u30c1\u30a7\u30c3\u30af --}}\n{{ $name ?? 'Default' }}\n\n{{-- \u30b5\u30d6\u30d3\u30e5\u30fc\u306e\u8aad\u307f\u8fbc\u307f --}}\n@include('shared.errors')\n\n{{-- \u8a8d\u8a3c\u95a2\u9023 --}}\n@auth\n    \u8a8d\u8a3c\u6e08\u307f\u30e6\u30fc\u30b6\u30fc\u5411\u3051\u30b3\u30f3\u30c6\u30f3\u30c4\n@endauth\n\n@guest\n    \u30b2\u30b9\u30c8\u5411\u3051\u30b3\u30f3\u30c6\u30f3\u30c4\n@endguest\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-37\">Eloquent ORM\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u7c21\u7d20\u5316\u3059\u308b<\/h3>\n\n\n\n<p>Eloquent \u306f Laravel \u306e ORM\uff08\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30fb\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30fb\u30de\u30c3\u30d4\u30f3\u30b0\uff09\u30b7\u30b9\u30c6\u30e0\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u7684\u306b\u884c\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-38\">\u30e2\u30c7\u30eb\u306e\u57fa\u672c<\/h4>\n\n\n\n<p>Eloquent \u30e2\u30c7\u30eb\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u306b\u5bfe\u5fdc\u3057\u307e\u3059\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=\"\">\/\/ User\u30e2\u30c7\u30eb\u306e\u4f8b\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass User extends Model\n{\n    \/\/ \u30c6\u30fc\u30d6\u30eb\u540d\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\uff08\u7701\u7565\u53ef\uff09\n    protected $table = 'users';\n    \n    \/\/ \u4e00\u62ec\u4ee3\u5165\u53ef\u80fd\u306a\u5c5e\u6027\uff08Mass Assignment Protection\uff09\n    protected $fillable = ['name', 'email', 'password'];\n    \n    \/\/ \u975e\u8868\u793a\u306b\u3059\u308b\u5c5e\u6027\n    protected $hidden = ['password', 'remember_token'];\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-39\">\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c<\/h4>\n\n\n\n<p>Eloquent \u3092\u4f7f\u3063\u305f\u57fa\u672c\u7684\u306a\u30c7\u30fc\u30bf\u64cd\u4f5c\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=\"\">\/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u53d6\u5f97\n$users = User::all(); \/\/ \u5168\u30e6\u30fc\u30b6\u30fc\u53d6\u5f97\n$user = User::find(1); \/\/ ID\u306b\u3088\u308b\u53d6\u5f97\n$users = User::where('active', 1)-&gt;get(); \/\/ \u6761\u4ef6\u306b\u3088\u308b\u53d6\u5f97\n\n\/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u4f5c\u6210\n$user = new User;\n$user-&gt;name = 'John';\n$user-&gt;email = 'john@example.com';\n$user-&gt;save();\n\n\/\/ \u4e00\u62ec\u4ee3\u5165\u306b\u3088\u308b\u4f5c\u6210\n$user = User::create([\n    'name' =&gt; 'John',\n    'email' =&gt; 'john@example.com',\n    'password' =&gt; bcrypt('password')\n]);\n\n\/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u66f4\u65b0\n$user = User::find(1);\n$user-&gt;email = 'new@example.com';\n$user-&gt;save();\n\n\/\/ \u4e00\u62ec\u66f4\u65b0\nUser::where('active', 0)\n    -&gt;update(['active' =&gt; 1]);\n\n\/\/ \u30ec\u30b3\u30fc\u30c9\u306e\u524a\u9664\n$user = User::find(1);\n$user-&gt;delete();\n\n\/\/ ID\u306b\u3088\u308b\u524a\u9664\nUser::destroy(1);\nUser::destroy([1, 2, 3]);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-40\">\u30af\u30a8\u30ea\u30d3\u30eb\u30c0<\/h4>\n\n\n\n<p>Eloquent \u306f\u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u3068\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u7d71\u5408\u3055\u308c\u3066\u3044\u307e\u3059\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=\"\">\/\/ \u6761\u4ef6\u306b\u3088\u308b\u7d5e\u308a\u8fbc\u307f\n$users = User::where('votes', '&gt;', 100)-&gt;get();\n\n\/\/ \u8907\u6570\u6761\u4ef6\n$users = User::where('votes', '&gt;', 100)\n            -&gt;where('name', 'John')\n            -&gt;get();\n\n\/\/ OR\u6761\u4ef6\n$users = User::where('votes', '&gt;', 100)\n            -&gt;orWhere('name', 'John')\n            -&gt;get();\n\n\/\/ \u4e26\u3079\u66ff\u3048\n$users = User::orderBy('name', 'desc')-&gt;get();\n\n\/\/ \u4ef6\u6570\u5236\u9650\n$users = User::skip(10)-&gt;take(5)-&gt;get();\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u57fa\u672c<\/h4>\n\n\n\n<p>Eloquent \u306e\u5927\u304d\u306a\u5f37\u307f\u306f\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u6271\u3044\u3084\u3059\u3055\u306b\u3042\u308a\u307e\u3059\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=\"\">\/\/ User\u30e2\u30c7\u30eb\u3067\u306e\u95a2\u9023\u5b9a\u7fa9\npublic function posts()\n{\n    return $this-&gt;hasMany(Post::class);\n}\n\n\/\/ Post\u30e2\u30c7\u30eb\u3067\u306e\u95a2\u9023\u5b9a\u7fa9\npublic function user()\n{\n    return $this-&gt;belongsTo(User::class);\n}\n\n\/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u5229\u7528\n$user = User::find(1);\n$posts = $user-&gt;posts; \/\/ \u30e6\u30fc\u30b6\u30fc\u306e\u6295\u7a3f\u3092\u53d6\u5f97\n\n\/\/ Eager Loading\uff08N+1\u554f\u984c\u306e\u89e3\u6c7a\uff09\n$users = User::with('posts')-&gt;get();\nforeach ($users as $user) {\n    foreach ($user-&gt;posts as $post) {\n        echo $post-&gt;title;\n    }\n}\n<\/pre>\n\n\n\n<p>Laravel \u306e\u57fa\u672c\u6a5f\u80fd\u3067\u3042\u308b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3001Blade \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3001Eloquent ORM\u3092\u30de\u30b9\u30bf\u30fc\u3059\u308c\u3070\u3001Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u57fa\u790e\u304c\u8eab\u306b\u3064\u304d\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6a5f\u80fd\u306f\u76f8\u4e92\u306b\u9023\u643a\u3057\u3066\u50cd\u304d\u3001\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u305f\u3081\u306e\u5f37\u56fa\u306a\u57fa\u76e4\u3068\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u57fa\u672c\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u305f\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-42\">\u5b9f\u8df5\u7684\u306aLaravel\u30c6\u30af\u30cb\u30c3\u30af\uff1a\u521d\u7d1a\u7de8<\/h2>\n\n\n\n<p>\u57fa\u672c\u7684\u306a Laravel \u306e\u6a5f\u80fd\u3092\u7406\u89e3\u3057\u305f\u3089\u3001\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u8eab\u306b\u3064\u3051\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002\u3053\u3053\u3067\u306f\u521d\u7d1a\u8005\u5411\u3051\u306e\u5b9f\u7528\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3068\u3057\u3066\u3001\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3001\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3001\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-43\">\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3068\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3068\u30c7\u30fc\u30bf\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\uff08\u691c\u8a3c\uff09\u306f\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002Laravel \u3067\u306f\u7c21\u6f54\u304b\u3064\u5f37\u529b\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-44\">CSRF\u30d7\u30ed\u30c6\u30af\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<p>Laravel \u306f\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30ea\u30af\u30a8\u30b9\u30c8\u30d5\u30a9\u30fc\u30b8\u30a7\u30ea\uff08CSRF\uff09\u653b\u6483\u304b\u3089\u4fdd\u8b77\u3059\u308b\u305f\u3081\u306b\u3001\u3059\u3079\u3066\u306e\u30d5\u30a9\u30fc\u30e0\u306b\u81ea\u52d5\u7684\u306bCSRF\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3057\u307e\u3059\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=\"\">&lt;form method=\"POST\" action=\"\/profile\"&gt;\n    @csrf\n    &lt;!-- \u30d5\u30a9\u30fc\u30e0\u30d5\u30a3\u30fc\u30eb\u30c9 --&gt;\n&lt;\/form&gt;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-45\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u57fa\u672c<\/h4>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u5b9f\u88c5\u4f8b\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=\"\">public function store(Request $request)\n{\n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u5b9a\u7fa9\n    $validatedData = $request-&gt;validate([\n        'name' =&gt; 'required|max:255',\n        'email' =&gt; 'required|email|unique:users',\n        'password' =&gt; 'required|min:8|confirmed',\n    ]);\n\n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u901a\u904e\u5f8c\u306e\u51e6\u7406\n    User::create($validatedData);\n    \n    return redirect('\/dashboard')-&gt;with('success', '\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f');\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">\u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f7f\u3063\u305f\u9ad8\u5ea6\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/h4>\n\n\n\n<p>\u5927\u304d\u306a\u30d5\u30a9\u30fc\u30e0\u3084\u8907\u96d1\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30ed\u30b8\u30c3\u30af\u306f\u3001\u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u30af\u30e9\u30b9\u306b\u5206\u96e2\u3067\u304d\u307e\u3059\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=\"\"># \u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u30af\u30e9\u30b9\u306e\u751f\u6210\nphp artisan make:request StorePostRequest\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\/Http\/Requests\/StorePostRequest.php\npublic function rules()\n{\n    return [\n        'title' =&gt; 'required|unique:posts|max:255',\n        'body' =&gt; 'required',\n        'publish_at' =&gt; 'nullable|date',\n    ];\n}\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\npublic function messages()\n{\n    return [\n        'title.required' =&gt; '\u30bf\u30a4\u30c8\u30eb\u306f\u5fc5\u9808\u3067\u3059',\n        'title.unique' =&gt; '\u305d\u306e\u30bf\u30a4\u30c8\u30eb\u306f\u65e2\u306b\u4f7f\u308f\u308c\u3066\u3044\u307e\u3059',\n    ];\n}\n<\/pre>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u4f7f\u7528\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=\"\">public function store(StorePostRequest $request)\n{\n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306f\u81ea\u52d5\u7684\u306b\u884c\u308f\u308c\u308b\n    $post = Post::create($request-&gt;validated());\n    return redirect()-&gt;route('posts.show', $post);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-47\">\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u306e\u8868\u793a<\/h4>\n\n\n\n<p>Blade \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u306e\u30a8\u30e9\u30fc\u8868\u793a\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=\"\">&lt;form method=\"POST\" action=\"\/post\"&gt;\n    @csrf\n    \n    &lt;div&gt;\n        &lt;label for=\"title\"&gt;\u30bf\u30a4\u30c8\u30eb&lt;\/label&gt;\n        &lt;input id=\"title\" name=\"title\" value=\"{{ old('title') }}\"&gt;\n        \n        @error('title')\n            &lt;div class=\"alert alert-danger\"&gt;{{ $message }}&lt;\/div&gt;\n        @enderror\n    &lt;\/div&gt;\n    \n    &lt;!-- \u4ed6\u306e\u30d5\u30a9\u30fc\u30e0\u30d5\u30a3\u30fc\u30eb\u30c9 --&gt;\n&lt;\/form&gt;\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-48\">\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u4f7f\u3063\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h3>\n\n\n\n<p>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306f\u3001HTTP \u30ea\u30af\u30a8\u30b9\u30c8\u304c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5230\u9054\u3059\u308b\u524d\u3084\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u30e6\u30fc\u30b6\u30fc\u306b\u8fd4\u3055\u308c\u308b\u524d\u306b\u5b9f\u884c\u3055\u308c\u308b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u6a5f\u69cb\u3067\u3059\u3002\u8a8d\u8a3c\u3001\u30ed\u30b0\u8a18\u9332\u3001CORS \u5bfe\u5fdc\u306a\u3069\u3001\u69d8\u3005\u306a\u7528\u9014\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-49\">\u7d44\u307f\u8fbc\u307f\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u4f7f\u7528<\/h4>\n\n\n\n<p>\u30eb\u30fc\u30c8\u5b9a\u7fa9\u3067\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u9069\u7528\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=\"\">\/\/ \u5358\u4e00\u30eb\u30fc\u30c8\u3078\u306e\u9069\u7528\nRoute::get('\/dashboard', function () {\n    \/\/ ...\n})-&gt;middleware('auth');\n\n\/\/ \u8907\u6570\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u9069\u7528\nRoute::get('\/admin\/dashboard', function () {\n    \/\/ ...\n})-&gt;middleware(['auth', 'admin']);\n\n\/\/ \u30eb\u30fc\u30c8\u30b0\u30eb\u30fc\u30d7\u3078\u306e\u9069\u7528\nRoute::middleware(['auth'])-&gt;group(function () {\n    Route::get('\/dashboard', function () {\n        \/\/ ...\n    });\n    Route::get('\/settings', function () {\n        \/\/ ...\n    });\n});\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-50\">\u30ab\u30b9\u30bf\u30e0\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u4f5c\u6210<\/h4>\n\n\n\n<p>\u72ec\u81ea\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u56fa\u6709\u306e\u8981\u4ef6\u306b\u5bfe\u5fdc\u3067\u304d\u307e\u3059\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=\"\"># \u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u751f\u6210\nphp artisan make:middleware CheckAge\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\/Http\/Middleware\/CheckAge.php\npublic function handle($request, Closure $next)\n{\n    \/\/ \u30e6\u30fc\u30b6\u30fc\u304c18\u6b73\u4ee5\u4e0a\u304b\u30c1\u30a7\u30c3\u30af\n    if ($request-&gt;age &lt;= 18) {\n        return redirect('home');\n    }\n\n    return $next($request);\n}\n<\/pre>\n\n\n\n<p>\u4f5c\u6210\u3057\u305f\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u767b\u9332\u3059\u308b\u306b\u306f\u3001<code>app\/Http\/Kernel.php<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u7de8\u96c6\u3057\u307e\u3059\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=\"\">\/\/ \u30b0\u30ed\u30fc\u30d0\u30eb\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\nprotected $middleware = [\n    \/\/ ...\n];\n\n\/\/ \u30eb\u30fc\u30c8\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\nprotected $routeMiddleware = [\n    'auth' =&gt; \\App\\Http\\Middleware\\Authenticate::class,\n    \/\/ ...\n    'checkage' =&gt; \\App\\Http\\Middleware\\CheckAge::class,\n];\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-51\">\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u6d3b\u7528\u4f8b<\/h4>\n\n\n\n<p>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u5b9f\u7528\u7684\u306a\u6d3b\u7528\u4f8b\u3092\u3044\u304f\u3064\u304b\u7d39\u4ecb\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30b1\u30fc\u30eb\uff08\u8a00\u8a9e\uff09\u5207\u308a\u66ff\u3048<\/strong>\uff1a\u30e6\u30fc\u30b6\u30fc\u306e\u8a00\u8a9e\u8a2d\u5b9a\u306b\u57fa\u3065\u3044\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a00\u8a9e\u3092\u5207\u308a\u66ff\u3048\u308b\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/li>\n\n\n\n<li><strong>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u30e2\u30fc\u30c9\u5236\u5fa1<\/strong>\uff1a\u7279\u5b9a\u306eIP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u306e\u30a2\u30af\u30bb\u30b9\u306e\u307f\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u30e2\u30fc\u30c9\u4e2d\u3067\u3082\u30a2\u30af\u30bb\u30b9\u3092\u8a31\u53ef\u3059\u308b\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/li>\n\n\n\n<li><strong>\u30a2\u30af\u30bb\u30b9\u30ed\u30b0\u8a18\u9332<\/strong>\uff1a\u3059\u3079\u3066\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3084\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8a18\u9332\u3059\u308b\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-52\">\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\u3068\u7ba1\u7406<\/h3>\n\n\n\n<p>Laravel \u306b\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u306b\u5fc5\u8981\u306a\u6a5f\u80fd\u304c\u3042\u3089\u304b\u3058\u3081\u7d44\u307f\u8fbc\u307e\u308c\u3066\u304a\u308a\u3001\u308f\u305a\u304b\u306a\u30b3\u30fc\u30c9\u3067\u5805\u7262\u306a\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-53\">\u8a8d\u8a3c\u30b9\u30ab\u30d5\u30a9\u30fc\u30eb\u30c9\u306e\u751f\u6210<\/h4>\n\n\n\n<p>Laravel 8\u4ee5\u524d\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=\"\"># Laravel UI\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u305f\u8a8d\u8a3c\u30b9\u30ab\u30d5\u30a9\u30fc\u30eb\u30c9\ncomposer require laravel\/ui\nphp artisan ui bootstrap --auth\nnpm install &amp;&amp; npm run dev\n<\/pre>\n\n\n\n<p>Laravel 8\u4ee5\u964d\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=\"\"># Laravel Breeze\u3092\u4f7f\u7528\uff08\u6700\u5c0f\u9650\u306e\u5b9f\u88c5\uff09\ncomposer require laravel\/breeze --dev\nphp artisan breeze:install\nnpm install &amp;&amp; npm run dev\n\n# \u307e\u305f\u306f Laravel Jetstream\u3092\u4f7f\u7528\uff08\u9ad8\u5ea6\u306a\u6a5f\u80fd\u30bb\u30c3\u30c8\uff09\ncomposer require laravel\/jetstream\nphp artisan jetstream:install livewire\n# \u307e\u305f\u306f\nphp artisan jetstream:install inertia\nnpm install &amp;&amp; npm run dev\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-54\">\u8a8d\u8a3c\u306b\u95a2\u3059\u308b\u4e3b\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/h4>\n\n\n\n<p>Laravel \u306e\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306f\u4ee5\u4e0b\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-f91e033c-a1ec-4246-80ad-be50fd4f818b\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/th><th>\u8aac\u660e<\/th><\/tr><\/thead><tbody><tr><td><strong>\u30ac\u30fc\u30c9<\/strong><\/td><td>\u8a8d\u8a3c\u65b9\u6cd5\u3092\u5b9a\u7fa9\uff08\u30bb\u30c3\u30b7\u30e7\u30f3\u3001\u30c8\u30fc\u30af\u30f3\u306a\u3069\uff09<\/td><\/tr><tr><td><strong>\u30d7\u30ed\u30d0\u30a4\u30c0<\/strong><\/td><td>\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u306e\u53d6\u5f97\u65b9\u6cd5\u3092\u5b9a\u7fa9\uff08Eloquent, Database\uff09<\/td><\/tr><tr><td><strong>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/strong><\/td><td>\u8a8d\u8a3c\u72b6\u614b\u306b\u57fa\u3065\u3044\u3066\u30eb\u30fc\u30c8\u30a2\u30af\u30bb\u30b9\u3092\u5236\u5fa1<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-55\">\u30ab\u30b9\u30bf\u30e0\u8a8d\u8a3c\u306e\u5b9f\u88c5\u4f8b<\/h4>\n\n\n\n<p>\u624b\u52d5\u3067\u306e\u8a8d\u8a3c\u51e6\u7406\u306e\u4f8b\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=\"\">\/\/ \u30ed\u30b0\u30a4\u30f3\u51e6\u7406\npublic function login(Request $request)\n{\n    $credentials = $request-&gt;validate([\n        'email' =&gt; 'required|email',\n        'password' =&gt; 'required',\n    ]);\n\n    if (Auth::attempt($credentials)) {\n        $request-&gt;session()-&gt;regenerate();\n        return redirect()-&gt;intended('dashboard');\n    }\n\n    return back()-&gt;withErrors([\n        'email' =&gt; '\u8a8d\u8a3c\u60c5\u5831\u304c\u8a18\u9332\u3068\u4e00\u81f4\u3057\u307e\u305b\u3093\u3002',\n    ]);\n}\n\n\/\/ \u30ed\u30b0\u30a2\u30a6\u30c8\u51e6\u7406\npublic function logout(Request $request)\n{\n    Auth::logout();\n    $request-&gt;session()-&gt;invalidate();\n    $request-&gt;session()-&gt;regenerateToken();\n    return redirect('\/');\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-56\">\u8a8d\u8a3c\u72b6\u614b\u306e\u78ba\u8a8d\u3068\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/h4>\n\n\n\n<p>\u8a8d\u8a3c\u72b6\u614b\u306b\u57fa\u3065\u304f\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\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=\"\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u8a8d\u8a3c\u30c1\u30a7\u30c3\u30af\npublic function __construct()\n{\n    $this-&gt;middleware('auth');\n}\n\n\/\/ Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u306e\u8a8d\u8a3c\u30c1\u30a7\u30c3\u30af\n@auth\n    &lt;!-- \u8a8d\u8a3c\u6e08\u307f\u30e6\u30fc\u30b6\u30fc\u5411\u3051\u30b3\u30f3\u30c6\u30f3\u30c4 --&gt;\n@else\n    &lt;!-- \u30b2\u30b9\u30c8\u5411\u3051\u30b3\u30f3\u30c6\u30f3\u30c4 --&gt;\n@endauth\n\n\/\/ \u8a8d\u8a3c\u6e08\u307f\u30e6\u30fc\u30b6\u30fc\u60c5\u5831\u3078\u306e\u30a2\u30af\u30bb\u30b9\n$user = Auth::user();\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-57\">\u8a8d\u53ef\uff08\u6a29\u9650\u7ba1\u7406\uff09\u306e\u57fa\u672c<\/h4>\n\n\n\n<p>Laravel \u3067\u306f\u3001\u8a8d\u8a3c\uff08\u8ab0\u3067\u3042\u308b\u304b\uff09\u3060\u3051\u3067\u306a\u304f\u3001\u8a8d\u53ef\uff08\u4f55\u304c\u3067\u304d\u308b\u304b\uff09\u306e\u6a5f\u80fd\u3082\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\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=\"\">\/\/ \u30dd\u30ea\u30b7\u30fc\u30af\u30e9\u30b9\u306e\u751f\u6210\nphp artisan make:policy PostPolicy --model=Post\n\n\/\/ \u30dd\u30ea\u30b7\u30fc\u30e1\u30bd\u30c3\u30c9\u306e\u4f8b\npublic function update(User $user, Post $post)\n{\n    return $user-&gt;id === $post-&gt;user_id;\n}\n\n\/\/ \u30dd\u30ea\u30b7\u30fc\u306e\u4f7f\u7528\nif ($user-&gt;can('update', $post)) {\n    \/\/ \u30a2\u30af\u30b7\u30e7\u30f3\u306e\u5b9f\u884c\n}\n\n\/\/ Blade\u3067\u306e\u30dd\u30ea\u30b7\u30fc\u30c1\u30a7\u30c3\u30af\n@can('update', $post)\n    &lt;!-- \u66f4\u65b0\u30dc\u30bf\u30f3\u306a\u3069 --&gt;\n@endcan\n<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u521d\u7d1a\u8005\u5411\u3051\u30c6\u30af\u30cb\u30c3\u30af\u3092\u8eab\u306b\u3064\u3051\u308c\u3070\u3001Laravel \u3092\u4f7f\u3063\u305f\u57fa\u672c\u7684\u306aWeb \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u5fc5\u8981\u306a\u30b9\u30ad\u30eb\u304c\u8eab\u306b\u3064\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0\u3084\u975e\u540c\u671f\u51e6\u7406\u306a\u3069\u3001\u4e2d\u7d1a\u30ec\u30d9\u30eb\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-58\">\u5b9f\u8df5\u7684\u306aLaravel\u30c6\u30af\u30cb\u30c3\u30af\uff1a\u4e2d\u7d1a\u7de8<\/h2>\n\n\n\n<p>\u521d\u7d1a\u7de8\u3067\u5b66\u3093\u3060\u57fa\u672c\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u8e0f\u307e\u3048\u3066\u3001\u3053\u3053\u3067\u306f\u3088\u308a\u9ad8\u5ea6\u306a Laravel \u306e\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u305f\u4e2d\u7d1a\u30ec\u30d9\u30eb\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3001\u975e\u540c\u671f\u51e6\u7406\u306e\u305f\u3081\u306e\u30ad\u30e5\u30fc\u30b7\u30b9\u30c6\u30e0\u3001\u30a4\u30d9\u30f3\u30c8\u3068\u30ea\u30b9\u30ca\u30fc\u306b\u3088\u308b\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u306e\u9023\u643a\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u5b66\u3073\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-59\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3092\u6d3b\u7528\u3057\u305f\u30c7\u30fc\u30bf\u30e2\u30c7\u30ea\u30f3\u30b0<\/h3>\n\n\n\n<p>Laravel \u306e Eloquent ORM \u306f\u3001\u69d8\u3005\u306a\u30bf\u30a4\u30d7\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3092\u6271\u3046\u305f\u3081\u306e\u76f4\u611f\u7684\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u9069\u5207\u306a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\u3082\u52b9\u7387\u7684\u306b\u8a2d\u8a08\u30fb\u64cd\u4f5c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-60\">\u4e3b\u8981\u306a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u30bf\u30a4\u30d7<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-61\">1:1\uff08\u4e00\u5bfe\u4e00\uff09\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7<\/h5>\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=\"\">\/\/ User\u306f1\u3064\u306eProfile\u3092\u6301\u3064\npublic function profile()\n{\n    return $this-&gt;hasOne(Profile::class);\n}\n\n\/\/ Profile\u306fUser\u306b\u5c5e\u3059\u308b\npublic function user()\n{\n    return $this-&gt;belongsTo(User::class);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$profile = User::find(1)-&gt;profile;\n$user = Profile::find(1)-&gt;user;\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-62\">1:N\uff08\u4e00\u5bfe\u591a\uff09\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7<\/h5>\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=\"\">\/\/ User\u306f\u8907\u6570\u306ePost\u3092\u6301\u3064\npublic function posts()\n{\n    return $this-&gt;hasMany(Post::class);\n}\n\n\/\/ Post\u306fUser\u306b\u5c5e\u3059\u308b\npublic function user()\n{\n    return $this-&gt;belongsTo(User::class);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$posts = User::find(1)-&gt;posts;\n$user = Post::find(1)-&gt;user;\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-63\">N:N\uff08\u591a\u5bfe\u591a\uff09\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7<\/h5>\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=\"\">\/\/ User\u306f\u8907\u6570\u306eRole\u3092\u6301\u3064\npublic function roles()\n{\n    return $this-&gt;belongsToMany(Role::class);\n}\n\n\/\/ Role\u306f\u8907\u6570\u306eUser\u306b\u5c5e\u3059\u308b\npublic function users()\n{\n    return $this-&gt;belongsToMany(User::class);\n}\n\n\/\/ \u4f7f\u7528\u4f8b\n$roles = User::find(1)-&gt;roles;\n$users = Role::find(1)-&gt;users;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-64\">\u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30c3\u30af\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7<\/h4>\n\n\n\n<p>\u7570\u306a\u308b\u8907\u6570\u306e\u30e2\u30c7\u30eb\u30bf\u30a4\u30d7\u3068\u95a2\u9023\u4ed8\u3051\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u4fbf\u5229\u3067\u3059\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=\"\">\/\/ Comment\u306f\u8907\u6570\u306e\u30e2\u30c7\u30eb\u306b\u5c5e\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\npublic function commentable()\n{\n    return $this-&gt;morphTo();\n}\n\n\/\/ Post\u306fComment\u3092\u6301\u3064\npublic function comments()\n{\n    return $this-&gt;morphMany(Comment::class, 'commentable');\n}\n\n\/\/ Video\u3082Comment\u3092\u6301\u3064\npublic function comments()\n{\n    return $this-&gt;morphMany(Comment::class, 'commentable');\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-65\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u9ad8\u5ea6\u306a\u64cd\u4f5c<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-66\">Eager Loading<\/h5>\n\n\n\n<p>N+1\u30af\u30a8\u30ea\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u624b\u6cd5\u3067\u3059\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=\"\">\/\/ \u60aa\u3044\u4f8b\uff08N+1\u554f\u984c\uff09\n$books = Book::all();\nforeach ($books as $book) {\n    echo $book-&gt;author-&gt;name;\n}\n\n\/\/ \u826f\u3044\u4f8b\uff08Eager Loading\uff09\n$books = Book::with('author')-&gt;get();\nforeach ($books as $book) {\n    echo $book-&gt;author-&gt;name;\n}\n\n\/\/ \u8907\u6570\u306e\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u30ed\u30fc\u30c9\n$books = Book::with(['author', 'publisher'])-&gt;get();\n\n\/\/ \u30cd\u30b9\u30c8\u3057\u305f\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30ed\u30fc\u30c9\n$books = Book::with('author.contacts')-&gt;get();\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-67\">\u6761\u4ef6\u4ed8\u304dEager Loading<\/h5>\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=\"\">\/\/ \u6761\u4ef6\u4ed8\u304dEager Loading\n$users = User::with(['posts' =&gt; function ($query) {\n    $query-&gt;where('active', 1);\n}])-&gt;get();\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-68\">\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5229\u7528\u3057\u305f\u30af\u30a8\u30ea<\/h5>\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=\"\">\/\/ \u6295\u7a3f\u304c\u3042\u308b\u30e6\u30fc\u30b6\u30fc\u3092\u691c\u7d22\n$users = User::has('posts')-&gt;get();\n\n\/\/ \u7279\u5b9a\u306e\u6761\u4ef6\u3092\u6e80\u305f\u3059\u6295\u7a3f\u3092\u6301\u3064\u30e6\u30fc\u30b6\u30fc\u3092\u691c\u7d22\n$users = User::whereHas('posts', function ($query) {\n    $query-&gt;where('active', 1);\n})-&gt;get();\n\n\/\/ \u9006\u306b\u3001\u6295\u7a3f\u304c\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u3092\u691c\u7d22\n$users = User::doesntHave('posts')-&gt;get();\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-69\">\u4e2d\u9593\u30c6\u30fc\u30d6\u30eb\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h5>\n\n\n\n<p>\u591a\u5bfe\u591a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u4e2d\u9593\u30c6\u30fc\u30d6\u30eb\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\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=\"\">\/\/ \u4e2d\u9593\u30c6\u30fc\u30d6\u30eb\u306b\u8ffd\u52a0\u30c7\u30fc\u30bf\npublic function roles()\n{\n    return $this-&gt;belongsToMany(Role::class)\n                -&gt;withPivot('expires_at')\n                -&gt;withTimestamps();\n}\n\n\/\/ \u4e2d\u9593\u30c6\u30fc\u30d6\u30eb\u3078\u306e\u30c7\u30fc\u30bf\u8ffd\u52a0\n$user-&gt;roles()-&gt;attach($roleId, ['expires_at' =&gt; $expiresAt]);\n\n\/\/ \u4e2d\u9593\u30c6\u30fc\u30d6\u30eb\u306e\u30c7\u30fc\u30bf\u66f4\u65b0\n$user-&gt;roles()-&gt;updateExistingPivot($roleId, ['expires_at' =&gt; $newExpiresAt]);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-70\">\u30ad\u30e5\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u975e\u540c\u671f\u51e6\u7406\u3092\u5b9f\u73fe\u3059\u308b<\/h3>\n\n\n\n<p>Laravel \u306e\u30ad\u30e5\u30fc\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u3046\u3068\u3001\u6642\u9593\u306e\u304b\u304b\u308b\u51e6\u7406\u3092\u975e\u540c\u671f\u3067\u5b9f\u884c\u3057\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\u3092\u77ed\u7e2e\u3067\u304d\u307e\u3059\u3002\u30e1\u30fc\u30eb\u9001\u4fe1\u3001\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u51e6\u7406\u3001\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3API\u9023\u643a\u306a\u3069\u3001\u69d8\u3005\u306a\u30bf\u30b9\u30af\u306e\u975e\u540c\u671f\u51e6\u7406\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-71\">\u30ad\u30e5\u30fc\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p><code>config\/queue.php<\/code> \u3067\u30ad\u30e5\u30fc\u30c9\u30e9\u30a4\u30d0\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u4e00\u822c\u7684\u306a\u30c9\u30e9\u30a4\u30d0\u306b\u306f\u4ee5\u4e0b\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-2b5994fa-1437-4910-814c-4f766be39668\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30c9\u30e9\u30a4\u30d0<\/th><th>\u7279\u5fb4<\/th><\/tr><\/thead><tbody><tr><td><strong>database<\/strong><\/td><td>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3059\u308b\u30b7\u30f3\u30d7\u30eb\u306a\u8a2d\u5b9a<\/td><\/tr><tr><td><strong>redis<\/strong><\/td><td>\u9ad8\u901f\u3067\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb<\/td><\/tr><tr><td><strong>sqs<\/strong><\/td><td>Amazon SQS\u3092\u4f7f\u7528<\/td><\/tr><tr><td><strong>beanstalkd<\/strong><\/td><td>\u8efd\u91cf\u3067\u52b9\u7387\u7684<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\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=\"\"># \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30ad\u30e5\u30fc\u306e\u5834\u5408\u3001\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\nphp artisan queue:table\nphp artisan migrate\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-72\">\u30b8\u30e7\u30d6\u30af\u30e9\u30b9\u306e\u4f5c\u6210\u3068\u4f7f\u7528<\/h4>\n\n\n\n<p>\u30ad\u30e5\u30fc\u306b\u6295\u5165\u3059\u308b\u30bf\u30b9\u30af\u306f\u3001\u30b8\u30e7\u30d6\u30af\u30e9\u30b9\u3068\u3057\u3066\u5b9a\u7fa9\u3057\u307e\u3059\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=\"\"># \u30b8\u30e7\u30d6\u30af\u30e9\u30b9\u306e\u751f\u6210\nphp artisan make:job ProcessPodcast\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\/Jobs\/ProcessPodcast.php\nclass ProcessPodcast implements ShouldQueue\n{\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n\n    protected $podcast;\n\n    public function __construct(Podcast $podcast)\n    {\n        $this-&gt;podcast = $podcast;\n    }\n\n    public function handle()\n    {\n        \/\/ \u6642\u9593\u306e\u304b\u304b\u308b\u51e6\u7406\n        \/\/ \u4f8b\uff1a\u30dd\u30c3\u30c9\u30ad\u30e3\u30b9\u30c8\u306e\u51e6\u7406\u3084\u30a8\u30f3\u30b3\u30fc\u30c9\n    }\n}\n<\/pre>\n\n\n\n<p>\u30b8\u30e7\u30d6\u306e\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\uff08\u30ad\u30e5\u30fc\u3078\u306e\u6295\u5165\uff09\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=\"\">\/\/ \u57fa\u672c\u7684\u306a\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\nProcessPodcast::dispatch($podcast);\n\n\/\/ \u9045\u5ef6\u5b9f\u884c\nProcessPodcast::dispatch($podcast)-&gt;delay(now()-&gt;addMinutes(10));\n\n\/\/ \u7279\u5b9a\u306e\u30ad\u30e5\u30fc\u306b\u6295\u5165\nProcessPodcast::dispatch($podcast)-&gt;onQueue('processing');\n\n\/\/ \u540c\u671f\u7684\u306b\u5b9f\u884c\uff08\u30c6\u30b9\u30c8\u7528\uff09\nProcessPodcast::dispatchSync($podcast);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-73\">\u30ad\u30e5\u30fc\u30ef\u30fc\u30ab\u30fc\u306e\u5b9f\u884c<\/h4>\n\n\n\n<p>\u30ad\u30e5\u30fc\u306b\u6295\u5165\u3055\u308c\u305f\u30b8\u30e7\u30d6\u3092\u51e6\u7406\u3059\u308b\u30ef\u30fc\u30ab\u30fc\u3092\u8d77\u52d5\u3057\u307e\u3059\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=\"\"># \u57fa\u672c\u7684\u306a\u30ef\u30fc\u30ab\u30fc\u8d77\u52d5\nphp artisan queue:work\n\n# \u7279\u5b9a\u306e\u30ad\u30e5\u30fc\u3092\u51e6\u7406\nphp artisan queue:work --queue=high,default\n\n# \u30c7\u30fc\u30e2\u30f3\u3068\u3057\u3066\u5b9f\u884c\uff08\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306b\u6ce8\u610f\uff09\nphp artisan queue:work --daemon\n\n# 1\u56de\u306e\u30b8\u30e7\u30d6\u51e6\u7406\u5f8c\u306b\u7d42\u4e86\nphp artisan queue:work --once\n<\/pre>\n\n\n\n<p>\u672c\u756a\u74b0\u5883\u3067\u306f\u3001Supervisor \u306a\u3069\u306e\u30d7\u30ed\u30bb\u30b9\u30e2\u30cb\u30bf\u3092\u4f7f\u3063\u3066\u30ef\u30fc\u30ab\u30fc\u3092\u7ba1\u7406\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-74\">\u30b8\u30e7\u30d6\u306e\u5931\u6557\u3068\u518d\u8a66\u884c<\/h4>\n\n\n\n<p>\u30b8\u30e7\u30d6\u306e\u5931\u6557\u51e6\u7406\u3068\u518d\u8a66\u884c\u306e\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=\"\">\/\/ \u518d\u8a66\u884c\u56de\u6570\u3068\u5f85\u6a5f\u6642\u9593\u306e\u8a2d\u5b9a\npublic $tries = 3;\npublic $backoff = 3; \/\/ \u79d2\u5358\u4f4d\n\n\/\/ \u5931\u6557\u3057\u305f\u3068\u304d\u306e\u51e6\u7406\npublic function failed($exception)\n{\n    \/\/ \u901a\u77e5\u3084\u8a18\u9332\u306a\u3069\u306e\u51e6\u7406\n}\n<\/pre>\n\n\n\n<p>\u5931\u6557\u3057\u305f\u30b8\u30e7\u30d6\u306e\u518d\u5b9f\u884c\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=\"\"># \u5931\u6557\u3057\u305f\u30b8\u30e7\u30d6\u3092\u518d\u5b9f\u884c\nphp artisan queue:retry all\n\n# \u7279\u5b9a\u306eID\u306e\u30b8\u30e7\u30d6\u3092\u518d\u5b9f\u884c\nphp artisan queue:retry 5\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-75\">\u30a4\u30d9\u30f3\u30c8\u3068\u30ea\u30b9\u30ca\u30fc\u3092\u4f7f\u3063\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u9593\u306e\u9023\u643a<\/h3>\n\n\n\n<p>Laravel \u306e\u30a4\u30d9\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u3046\u3068\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7570\u306a\u308b\u90e8\u5206\u3092\u758e\u7d50\u5408\u3067\u9023\u643a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30a4\u30d9\u30f3\u30c8\u3092\u767a\u884c\u3057\u3001\u305d\u308c\u306b\u8907\u6570\u306e\u30ea\u30b9\u30ca\u30fc\u304c\u53cd\u5fdc\u3059\u308b\u5f62\u3067\u51e6\u7406\u3092\u5206\u96e2\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-76\">\u30a4\u30d9\u30f3\u30c8\u3068\u30ea\u30b9\u30ca\u30fc\u306e\u4f5c\u6210<\/h4>\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=\"\"># \u30a4\u30d9\u30f3\u30c8\u306e\u751f\u6210\nphp artisan make:event OrderShipped\n\n# \u30ea\u30b9\u30ca\u30fc\u306e\u751f\u6210\nphp artisan make:listener SendOrderConfirmation --event=OrderShipped\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\/Events\/OrderShipped.php\nclass OrderShipped\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n\n    public $order;\n\n    public function __construct(Order $order)\n    {\n        $this-&gt;order = $order;\n    }\n}\n\n\/\/ app\/Listeners\/SendOrderConfirmation.php\nclass SendOrderConfirmation\n{\n    public function handle(OrderShipped $event)\n    {\n        \/\/ \u6ce8\u6587\u78ba\u8a8d\u30e1\u30fc\u30eb\u306e\u9001\u4fe1\u51e6\u7406\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-77\">\u30a4\u30d9\u30f3\u30c8\u3068\u30ea\u30b9\u30ca\u30fc\u306e\u767b\u9332<\/h4>\n\n\n\n<p><code>app\/Providers\/EventServiceProvider.php<\/code> \u3067\u30a4\u30d9\u30f3\u30c8\u3068\u30ea\u30b9\u30ca\u30fc\u3092\u95a2\u9023\u4ed8\u3051\u307e\u3059\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=\"\">protected $listen = [\n    OrderShipped::class =&gt; [\n        SendOrderConfirmation::class,\n        UpdateInventory::class,\n        NotifyAdminAboutOrder::class,\n    ],\n];\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-78\">\u30a4\u30d9\u30f3\u30c8\u306e\u767a\u884c\uff08\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\uff09<\/h4>\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\u5185\u304b\u3089\u30a4\u30d9\u30f3\u30c8\u3092\u767a\u884c\npublic function ship()\n{\n    \/\/ \u51fa\u8377\u51e6\u7406\n    $this-&gt;update(['shipped' =&gt; true]);\n    \n    \/\/ \u30a4\u30d9\u30f3\u30c8\u306e\u767a\u884c\n    event(new OrderShipped($this));\n}\n\n\/\/ \u307e\u305f\u306f\u76f4\u63a5\u30a4\u30d9\u30f3\u30c8\u3092\u30c7\u30a3\u30b9\u30d1\u30c3\u30c1\nOrderShipped::dispatch($order);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-79\">\u30a4\u30d9\u30f3\u30c8\u306e\u30b5\u30d6\u30b9\u30af\u30e9\u30a4\u30d0\u30fc<\/h4>\n\n\n\n<p>\u591a\u304f\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u5358\u4e00\u306e\u30af\u30e9\u30b9\u3067\u51e6\u7406\u3057\u305f\u3044\u5834\u5408\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=\"\">\/\/ app\/Listeners\/UserEventSubscriber.php\nclass UserEventSubscriber\n{\n    public function handleUserLogin($event)\n    {\n        \/\/ \u30ed\u30b0\u30a4\u30f3\u51e6\u7406\n    }\n\n    public function handleUserLogout($event)\n    {\n        \/\/ \u30ed\u30b0\u30a2\u30a6\u30c8\u51e6\u7406\n    }\n\n    public function subscribe($events)\n    {\n        $events-&gt;listen(\n            UserLogin::class,\n            [UserEventSubscriber::class, 'handleUserLogin']\n        );\n\n        $events-&gt;listen(\n            UserLogout::class,\n            [UserEventSubscriber::class, 'handleUserLogout']\n        );\n    }\n}\n<\/pre>\n\n\n\n<p>EventServiceProvider \u306b\u767b\u9332\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=\"\">protected $subscribe = [\n    UserEventSubscriber::class,\n];\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-80\">\u5b9f\u7528\u7684\u306a\u30a4\u30d9\u30f3\u30c8\u6d3b\u7528\u4f8b<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u5b8c\u4e86\u6642<\/strong>\uff1a\u30a6\u30a7\u30eb\u30ab\u30e0\u30e1\u30fc\u30eb\u9001\u4fe1\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u8a2d\u5b9a\u306e\u521d\u671f\u5316\u3001\u7ba1\u7406\u8005\u3078\u306e\u901a\u77e5<\/li>\n\n\n\n<li><strong>\u652f\u6255\u3044\u51e6\u7406\u5b8c\u4e86\u6642<\/strong>\uff1a\u9818\u53ce\u66f8\u751f\u6210\u3001\u5728\u5eab\u66f4\u65b0\u3001\u914d\u9001\u624b\u914d<\/li>\n\n\n\n<li><strong>\u30b7\u30b9\u30c6\u30e0\u30a8\u30e9\u30fc\u767a\u751f\u6642<\/strong>\uff1a\u30ed\u30b0\u8a18\u9332\u3001\u7ba1\u7406\u8005\u3078\u306e\u901a\u77e5\u3001\u81ea\u52d5\u5fa9\u65e7\u51e6\u7406<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001\u30a4\u30d9\u30f3\u30c8\u3068\u30ea\u30b9\u30ca\u30fc\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9\u3092\u3088\u308a\u5206\u5272\u3057\u3001\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u8cac\u4efb\u7bc4\u56f2\u3092\u660e\u78ba\u306b\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u65b0\u3057\u3044\u6a5f\u80fd\u3092\u8ffd\u52a0\u3059\u308b\u969b\u306b\u3082\u3001\u65e2\u5b58\u306e\u30b3\u30fc\u30c9\u3092\u5909\u66f4\u305b\u305a\u306b\u30ea\u30b9\u30ca\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u3060\u3051\u3067\u5bfe\u5fdc\u3067\u304d\u308b\u305f\u3081\u3001\u62e1\u5f35\u6027\u304c\u9ad8\u307e\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u4e2d\u7d1a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7fd2\u5f97\u3059\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u67d4\u8edf\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044 Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3055\u3089\u306b\u9ad8\u5ea6\u306a\u4e0a\u7d1a\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-81\">\u5b9f\u8df5\u7684\u306aLaravel\u30c6\u30af\u30cb\u30c3\u30af\uff1a\u4e0a\u7d1a\u7de8<\/h2>\n\n\n\n<p>Laravel \u306e\u57fa\u672c\u6a5f\u80fd\u3068\u4e2d\u7d1a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u30de\u30b9\u30bf\u30fc\u3057\u305f\u3089\u3001\u6b21\u306f\u3088\u308a\u9ad8\u5ea6\u306a\u4e0a\u7d1a\u30c6\u30af\u30cb\u30c3\u30af\u306b\u6311\u6226\u3057\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u306e\u4e2d\u6838\u3068\u306a\u308b\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u3068DI\uff08\u4f9d\u5b58\u6027\u6ce8\u5165\uff09\u306e\u6d3b\u7528\u6cd5\u3001\u30ab\u30b9\u30bf\u30e0\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4f5c\u6210\u3068\u516c\u958b\u3001\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\uff08TDD\uff09\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-82\">\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u3068DI\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>Laravel \u306e\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u4f9d\u5b58\u6027\u6ce8\u5165\uff08DI\uff09\u3092\u5b9f\u73fe\u3059\u308b\u305f\u3081\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3042\u308a\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e2d\u6838\u3068\u306a\u308b\u6a5f\u80fd\u3067\u3059\u3002\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u758e\u7d50\u5408\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-83\">\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u306e\u57fa\u672c\u6982\u5ff5<\/h4>\n\n\n\n<p>\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u306f\u3001\u30af\u30e9\u30b9\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u89e3\u6c7a\u3057\u3001\u5fc5\u8981\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u751f\u6210\u30fb\u63d0\u4f9b\u3059\u308b\u5f79\u5272\u3092\u62c5\u3044\u307e\u3059\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=\"\">\/\/ \u30b3\u30f3\u30c6\u30ca\u304b\u3089\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u53d6\u5f97\n$service = app(Service::class);\n\n\/\/ \u307e\u305f\u306f\u3001Make\u30d5\u30a1\u30b5\u30fc\u30c9\u3092\u4f7f\u7528\nuse Illuminate\\Support\\Facades\\App;\n$service = App::make(Service::class);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-84\">\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\uff08\u767b\u9332\uff09<\/h4>\n\n\n\n<p>\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u306b\u30af\u30e9\u30b9\u3084\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u767b\u9332\u3059\u308b\u65b9\u6cd5\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=\"\">\/\/ \u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306eregister\u30e1\u30bd\u30c3\u30c9\u5185\n\/\/ \u5177\u8c61\u30af\u30e9\u30b9\u306e\u30d0\u30a4\u30f3\u30c9\n$this-&gt;app-&gt;bind(Service::class, function ($app) {\n    return new Service($app-&gt;make(Dependency::class));\n});\n\n\/\/ \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3068\u5b9f\u88c5\u306e\u30d0\u30a4\u30f3\u30c9\n$this-&gt;app-&gt;bind(\n    \\App\\Contracts\\PaymentGateway::class,\n    \\App\\Services\\StripePaymentGateway::class\n);\n\n\/\/ \u30b7\u30f3\u30b0\u30eb\u30c8\u30f3\u3068\u3057\u3066\u30d0\u30a4\u30f3\u30c9\uff08\u5e38\u306b\u540c\u3058\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u8fd4\u3059\uff09\n$this-&gt;app-&gt;singleton(Service::class, function ($app) {\n    return new Service($app-&gt;make(Dependency::class));\n});\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-85\">\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<p>\u7279\u5b9a\u306e\u72b6\u6cc1\u4e0b\u3067\u7570\u306a\u308b\u5b9f\u88c5\u3092\u4f7f\u3044\u305f\u3044\u5834\u5408\u306b\u6709\u52b9\u3067\u3059\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=\"\">$this-&gt;app-&gt;when(PhotoController::class)\n          -&gt;needs(Filesystem::class)\n          -&gt;give(function () {\n              return new Filesystem(storage_path('photos'));\n          });\n\n$this-&gt;app-&gt;when(VideoController::class)\n          -&gt;needs(Filesystem::class)\n          -&gt;give(function () {\n              return new Filesystem(storage_path('videos'));\n          });\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-86\">\u30bf\u30b0\u4ed8\u3051\u3068\u30bf\u30b0\u306b\u3088\u308b\u89e3\u6c7a<\/h4>\n\n\n\n<p>\u95a2\u9023\u3059\u308b\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u30bf\u30b0\u3067\u30b0\u30eb\u30fc\u30d7\u5316\u3067\u304d\u307e\u3059\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=\"\">\/\/ \u30bf\u30b0\u306e\u8a2d\u5b9a\n$this-&gt;app-&gt;tag([\n    \\App\\Services\\Translator\\SpanishTranslator::class,\n    \\App\\Services\\Translator\\FrenchTranslator::class,\n    \\App\\Services\\Translator\\GermanTranslator::class,\n], 'translators');\n\n\/\/ \u30bf\u30b0\u306b\u3088\u308b\u89e3\u6c7a\n$translators = $this-&gt;app-&gt;tagged('translators');\nforeach ($translators as $translator) {\n    \/\/ \u5168\u3066\u306e\u7ffb\u8a33\u30b5\u30fc\u30d3\u30b9\u306b\u5bfe\u3059\u308b\u51e6\u7406\n}\n\n#### \u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u9ad8\u5ea6\u306a\u6d3b\u7528\n\n\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u3078\u306e\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u767b\u9332\u3068\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u521d\u671f\u5316\u3092\u62c5\u3044\u307e\u3059\uff1a\n\n```php\n\/\/ \u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u751f\u6210\nphp artisan make:provider PaymentServiceProvider\n\n\/\/ app\/Providers\/PaymentServiceProvider.php\nclass PaymentServiceProvider extends ServiceProvider\n{\n    \/\/ \u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u306e\u767b\u9332\uff08\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u306e\u6e96\u5099\u4e2d\u306b\u5b9f\u884c\uff09\n    public function register()\n    {\n        $this-&gt;app-&gt;bind(\n            \\App\\Contracts\\PaymentGateway::class,\n            function ($app) {\n                return new \\App\\Services\\StripePaymentGateway(\n                    config('services.stripe.secret')\n                );\n            }\n        );\n    }\n\n    \/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u521d\u671f\u5316\uff08\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u306e\u6e96\u5099\u5f8c\u306b\u5b9f\u884c\uff09\n    public function boot()\n    {\n        View::composer('checkout', function ($view) {\n            $view-&gt;with('paymentMethods', PaymentMethod::all());\n        });\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-87\">\u30d5\u30a1\u30b5\u30fc\u30c9\u306e\u5185\u90e8\u52d5\u4f5c\u3068\u30ab\u30b9\u30bf\u30e0\u30d5\u30a1\u30b5\u30fc\u30c9<\/h4>\n\n\n\n<p>\u30d5\u30a1\u30b5\u30fc\u30c9\u306f\u3001\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u306e\u6a5f\u80fd\u306b\u9759\u7684\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u4ed5\u7d44\u307f\u3067\u3059\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=\"\">\/\/ \u30ab\u30b9\u30bf\u30e0\u30d5\u30a1\u30b5\u30fc\u30c9\u306e\u4f5c\u6210\n\/\/ app\/Facades\/Payment.php\nnamespace App\\Facades;\n\nuse Illuminate\\Support\\Facades\\Facade;\n\nclass Payment extends Facade\n{\n    protected static function getFacadeAccessor()\n    {\n        return 'payment'; \/\/ \u307e\u305f\u306f\u30af\u30e9\u30b9\/\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u540d\n    }\n}\n\n\/\/ \u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u3067\u306e\u767b\u9332\n$this-&gt;app-&gt;bind('payment', function ($app) {\n    return new \\App\\Services\\PaymentService();\n});\n\n\/\/ \u4f7f\u7528\u4f8b\nuse App\\Facades\\Payment;\nPayment::process($order);\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-88\">\u30ab\u30b9\u30bf\u30e0\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4f5c\u6210\u3068Composer\u3067\u306e\u516c\u958b<\/h3>\n\n\n\n<p>Laravel \u306e\u6a5f\u80fd\u3092\u62e1\u5f35\u3057\u305f\u308a\u3001\u8907\u6570\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30fc\u30c9\u3092\u4f5c\u6210\u3057\u305f\u308a\u3059\u308b\u305f\u3081\u306b\u3001\u30ab\u30b9\u30bf\u30e0\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u958b\u767a\u306f\u975e\u5e38\u306b\u6709\u52b9\u3067\u3059\u3002\u3053\u3053\u3067\u306f\u3001Laravel \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4f5c\u6210\u304b\u3089\u516c\u958b\u307e\u3067\u306e\u6d41\u308c\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-89\">\u30d1\u30c3\u30b1\u30fc\u30b8\u958b\u767a\u306e\u57fa\u672c\u69cb\u9020<\/h4>\n\n\n\n<p>Laravel \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u57fa\u672c\u7684\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\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=\"\">your-package\/\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 YourPackageServiceProvider.php\n\u2502   \u251c\u2500\u2500 Facades\/\n\u2502   \u2502   \u2514\u2500\u2500 YourPackage.php\n\u2502   \u2514\u2500\u2500 YourPackageClass.php\n\u251c\u2500\u2500 config\/\n\u2502   \u2514\u2500\u2500 your-package.php\n\u251c\u2500\u2500 resources\/\n\u2502   \u251c\u2500\u2500 views\/\n\u2502   \u2514\u2500\u2500 lang\/\n\u251c\u2500\u2500 routes\/\n\u2502   \u2514\u2500\u2500 web.php\n\u251c\u2500\u2500 database\/\n\u2502   \u251c\u2500\u2500 migrations\/\n\u2502   \u2514\u2500\u2500 seeds\/\n\u251c\u2500\u2500 tests\/\n\u251c\u2500\u2500 composer.json\n\u2514\u2500\u2500 README.md\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-90\">\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u521d\u671f\u5316<\/h4>\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=\"\"># \u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u4f5c\u6210\nmkdir your-package &amp;&amp; cd your-package\n\n# Composer\u306e\u521d\u671f\u5316\ncomposer init\n<\/pre>\n\n\n\n<p><code>composer.json<\/code> \u306e\u8a2d\u5b9a\u4f8b\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    \"name\": \"your-vendor\/your-package\",\n    \"description\": \"Your package description\",\n    \"type\": \"library\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Your Name\",\n            \"email\": \"your.email@example.com\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^8.0\",\n        \"illuminate\/support\": \"^8.0|^9.0\"\n    },\n    \"require-dev\": {\n        \"orchestra\/testbench\": \"^6.0|^7.0\",\n        \"phpunit\/phpunit\": \"^9.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"YourVendor\\\\YourPackage\\\\\": \"src\/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"YourVendor\\\\YourPackage\\\\Tests\\\\\": \"tests\/\"\n        }\n    },\n    \"extra\": {\n        \"laravel\": {\n            \"providers\": [\n                \"YourVendor\\\\YourPackage\\\\YourPackageServiceProvider\"\n            ],\n            \"aliases\": {\n                \"YourPackage\": \"YourVendor\\\\YourPackage\\\\Facades\\\\YourPackage\"\n            }\n        }\n    },\n    \"minimum-stability\": \"dev\",\n    \"prefer-stable\": true\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-91\">\u30b5\u30fc\u30d3\u30b9\u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u5b9f\u88c5<\/h4>\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=\"\">\/\/ src\/YourPackageServiceProvider.php\nnamespace YourVendor\\YourPackage;\n\nuse Illuminate\\Support\\ServiceProvider;\n\nclass YourPackageServiceProvider extends ServiceProvider\n{\n    public function register()\n    {\n        \/\/ \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u30de\u30fc\u30b8\n        $this-&gt;mergeConfigFrom(\n            __DIR__.'\/..\/config\/your-package.php', 'your-package'\n        );\n\n        \/\/ \u30b5\u30fc\u30d3\u30b9\u306e\u30d0\u30a4\u30f3\u30c9\n        $this-&gt;app-&gt;singleton('your-package', function ($app) {\n            return new YourPackageClass($app-&gt;make('config')-&gt;get('your-package'));\n        });\n    }\n\n    public function boot()\n    {\n        \/\/ \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u516c\u958b\n        $this-&gt;publishes([\n            __DIR__.'\/..\/config\/your-package.php' =&gt; config_path('your-package.php'),\n        ], 'config');\n\n        \/\/ \u30d3\u30e5\u30fc\u306e\u767b\u9332\n        $this-&gt;loadViewsFrom(__DIR__.'\/..\/resources\/views', 'your-package');\n\n        \/\/ \u30d3\u30e5\u30fc\u306e\u516c\u958b\n        $this-&gt;publishes([\n            __DIR__.'\/..\/resources\/views' =&gt; resource_path('views\/vendor\/your-package'),\n        ], 'views');\n\n        \/\/ \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u767b\u9332\n        $this-&gt;loadMigrationsFrom(__DIR__.'\/..\/database\/migrations');\n\n        \/\/ \u30eb\u30fc\u30c8\u306e\u767b\u9332\n        $this-&gt;loadRoutesFrom(__DIR__.'\/..\/routes\/web.php');\n\n        \/\/ \u7ffb\u8a33\u30d5\u30a1\u30a4\u30eb\u306e\u767b\u9332\n        $this-&gt;loadTranslationsFrom(__DIR__.'\/..\/resources\/lang', 'your-package');\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-92\">\u30b3\u30f3\u30dd\u30fc\u30b6\u30d6\u30eb\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u958b\u767a<\/h4>\n\n\n\n<p>Laravel 8 \u4ee5\u964d\u3067\u306f\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u5185\u306b\u30de\u30af\u30ed\u3084\u30df\u30c3\u30af\u30b9\u30a4\u30f3\u3092\u63d0\u4f9b\u3059\u308b\u300c\u30b3\u30f3\u30dd\u30fc\u30b6\u30d6\u30eb\u300d\u30a2\u30d7\u30ed\u30fc\u30c1\u3082\u53ef\u80fd\u3067\u3059\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=\"\">\/\/ src\/YourPackageClass.php\nnamespace YourVendor\\YourPackage;\n\nclass YourPackageClass\n{\n    \/\/ \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4e3b\u8981\u306a\u30e1\u30bd\u30c3\u30c9\n    \n    \/\/ \u30df\u30c3\u30af\u30b9\u30a4\u30f3\u306e\u63d0\u4f9b\n    public static function mixin($mixin)\n    {\n        $methods = (new \\ReflectionClass($mixin))-&gt;getMethods(\n            \\ReflectionMethod::IS_PUBLIC | \\ReflectionMethod::IS_PROTECTED\n        );\n\n        foreach ($methods as $method) {\n            $method-&gt;setAccessible(true);\n            static::macro($method-&gt;name, $method-&gt;invoke($mixin));\n        }\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-93\">\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30c6\u30b9\u30c8<\/h4>\n\n\n\n<p>Orchestra Testbench \u3092\u4f7f\u3063\u305f\u30c6\u30b9\u30c8\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\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=\"\">\/\/ tests\/TestCase.php\nnamespace YourVendor\\YourPackage\\Tests;\n\nuse Orchestra\\Testbench\\TestCase as Orchestra;\nuse YourVendor\\YourPackage\\YourPackageServiceProvider;\n\nclass TestCase extends Orchestra\n{\n    protected function getPackageProviders($app)\n    {\n        return [\n            YourPackageServiceProvider::class,\n        ];\n    }\n\n    protected function getPackageAliases($app)\n    {\n        return [\n            'YourPackage' =&gt; \\YourVendor\\YourPackage\\Facades\\YourPackage::class,\n        ];\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-94\">\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u516c\u958b<\/h4>\n\n\n\n<p>\u30d1\u30c3\u30b1\u30fc\u30b8\u3092 Packagist.org \u306b\u516c\u958b\u3059\u308b\u30b9\u30c6\u30c3\u30d7\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>GitHub \u306a\u3069\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306b\u30b3\u30fc\u30c9\u3092\u30d7\u30c3\u30b7\u30e5<\/li>\n\n\n\n<li><a href=\"https:\/\/packagist.org\/\">Packagist<\/a> \u306b\u30a2\u30ab\u30a6\u30f3\u30c8\u767b\u9332<\/li>\n\n\n\n<li>\u30ea\u30dd\u30b8\u30c8\u30ea\u306e URL \u3092\u9001\u4fe1<\/li>\n\n\n\n<li>\u30a6\u30a7\u30d6\u30d5\u30c3\u30af\u3092\u8a2d\u5b9a\u3057\u3066\u81ea\u52d5\u66f4\u65b0<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-95\">\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\uff08TDD\uff09\u3068Laravel\u306e\u76f8\u6027<\/h3>\n\n\n\n<p>Laravel \u306f\u512a\u308c\u305f\u30c6\u30b9\u30c8\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\uff08TDD\uff09\u3068\u975e\u5e38\u306b\u76f8\u6027\u304c\u826f\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002TDD\u306f\u300c\u5148\u306b\u30c6\u30b9\u30c8\u3092\u66f8\u304d\u3001\u6b21\u306b\u305d\u306e\u30c6\u30b9\u30c8\u304c\u901a\u308b\u30b3\u30fc\u30c9\u3092\u5b9f\u88c5\u3059\u308b\u300d\u3068\u3044\u3046\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-96\">Laravel \u306e\u30c6\u30b9\u30c8\u74b0\u5883<\/h4>\n\n\n\n<p>Laravel \u3067\u306e\u30c6\u30b9\u30c8\u306f\u3001PHPUnit \u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u307e\u3059\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=\"\"># \u30c6\u30b9\u30c8\u306e\u5b9f\u884c\nphp artisan test\n\n# \u307e\u305f\u306f\u76f4\u63a5 PHPUnit \u3092\u5b9f\u884c\n.\/vendor\/bin\/phpunit\n<\/pre>\n\n\n\n<p>\u30c6\u30b9\u30c8\u30af\u30e9\u30b9\u306e\u751f\u6210\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=\"\"># \u57fa\u672c\u7684\u306a\u30c6\u30b9\u30c8\u30af\u30e9\u30b9\u306e\u751f\u6210\nphp artisan make:test UserTest\n\n# \u6a5f\u80fd\u30c6\u30b9\u30c8\u3068\u3057\u3066\u751f\u6210\nphp artisan make:test UserTest --unit\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-97\">\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8 vs \u6a5f\u80fd\u30c6\u30b9\u30c8<\/h4>\n\n\n\n<p>Laravel \u3067\u306f\u30012\u7a2e\u985e\u306e\u30c6\u30b9\u30c8\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-59c8bbd3-7e41-4200-961e-3d39a3d194c4\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30c6\u30b9\u30c8\u30bf\u30a4\u30d7<\/th><th>\u7126\u70b9<\/th><th>\u4f7f\u7528\u3059\u308b\u30d9\u30fc\u30b9\u30af\u30e9\u30b9<\/th><\/tr><\/thead><tbody><tr><td><strong>\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8<\/strong><\/td><td>\u5c0f\u3055\u306a\u6a5f\u80fd\u5358\u4f4d\u306e\u30c6\u30b9\u30c8<\/td><td><code>Tests\\Unit\\TestCase<\/code><\/td><\/tr><tr><td><strong>\u6a5f\u80fd\u30c6\u30b9\u30c8<\/strong><\/td><td>\u30e6\u30fc\u30b6\u30fc\u306e\u8996\u70b9\u304b\u3089\u306e\u30c6\u30b9\u30c8<\/td><td><code>Tests\\Feature\\TestCase<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\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\/Unit\/CalculatorTest.php\uff08\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\uff09\npublic function test_calculator_can_add_numbers()\n{\n    $calculator = new Calculator();\n    $result = $calculator-&gt;add(2, 3);\n    $this-&gt;assertEquals(5, $result);\n}\n\n\/\/ tests\/Feature\/UserRegistrationTest.php\uff08\u6a5f\u80fd\u30c6\u30b9\u30c8\uff09\npublic function test_user_can_register()\n{\n    $response = $this-&gt;post('\/register', [\n        'name' =&gt; 'Test User',\n        'email' =&gt; 'test@example.com',\n        'password' =&gt; 'password',\n        'password_confirmation' =&gt; 'password',\n    ]);\n\n    $response-&gt;assertRedirect('\/home');\n    $this-&gt;assertDatabaseHas('users', [\n        'email' =&gt; 'test@example.com',\n    ]);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-98\">\u30e2\u30c3\u30af\u3068\u30b9\u30bf\u30d6\u306e\u6d3b\u7528<\/h4>\n\n\n\n<p>\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3084\u91cd\u3044\u51e6\u7406\u3092\u30e2\u30c3\u30af\u5316\u3057\u3066\u30c6\u30b9\u30c8\u3092\u52b9\u7387\u5316\u3067\u304d\u307e\u3059\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=\"\">\/\/ \u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u306e\u30e2\u30c3\u30af\npublic function test_orders_can_be_processed()\n{\n    \/\/ \u652f\u6255\u3044\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u30e2\u30c3\u30af\n    $paymentGateway = $this-&gt;mock(PaymentGateway::class);\n    \n    \/\/ \u30e2\u30c3\u30af\u306e\u632f\u308b\u821e\u3044\u3092\u5b9a\u7fa9\n    $paymentGateway-&gt;shouldReceive('charge')\n                  -&gt;once()\n                  -&gt;with(100, 'token')\n                  -&gt;andReturn(true);\n    \n    \/\/ \u30c6\u30b9\u30c8\u5bfe\u8c61\u306e\u51e6\u7406\u3092\u5b9f\u884c\n    $orderProcessor = new OrderProcessor($paymentGateway);\n    $result = $orderProcessor-&gt;process(100, 'token');\n    \n    \/\/ \u7d50\u679c\u3092\u691c\u8a3c\n    $this-&gt;assertTrue($result);\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-99\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30b9\u30c8<\/h4>\n\n\n\n<p>\u30c6\u30b9\u30c8\u7528\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u6a5f\u80fd\u304c\u5145\u5b9f\u3057\u3066\u3044\u307e\u3059\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=\"\">\/\/ \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3068\u30b7\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u30ea\u30bb\u30c3\u30c8\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nclass ExampleTest extends TestCase\n{\n    use RefreshDatabase;\n    \n    public function test_database_contains_expected_users()\n    {\n        \/\/ \u30c6\u30b9\u30c8\u30c7\u30fc\u30bf\u306e\u4f5c\u6210\n        User::factory()-&gt;count(3)-&gt;create();\n        \n        \/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u691c\u8a3c\n        $this-&gt;assertDatabaseCount('users', 3);\n        \n        \/\/ \u7279\u5b9a\u306e\u30ec\u30b3\u30fc\u30c9\u306e\u691c\u8a3c\n        $this-&gt;assertDatabaseHas('users', [\n            'email' =&gt; 'test@example.com',\n        ]);\n        \n        \/\/ \u30ec\u30b3\u30fc\u30c9\u304c\u5b58\u5728\u3057\u306a\u3044\u3053\u3068\u306e\u691c\u8a3c\n        $this-&gt;assertDatabaseMissing('users', [\n            'email' =&gt; 'nonexistent@example.com',\n        ]);\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-100\">TDD\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u5b9f\u8df5\u4f8b<\/h4>\n\n\n\n<p>TDD\u306e\u30b5\u30a4\u30af\u30eb\uff08Red-Green-Refactor\uff09\u306b\u6cbf\u3063\u305f\u958b\u767a\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Red<\/strong>: \u5931\u6557\u3059\u308b\u30c6\u30b9\u30c8\u3092\u66f8\u304f <code>public function test_user_can_be_marked_as_verified() { $user = User::factory()-&gt;create(['verified' =&gt; false]); $this-&gt;assertFalse($user-&gt;isVerified()); $user-&gt;markAsVerified(); $this-&gt;assertTrue($user-&gt;isVerified()); }<\/code><\/li>\n\n\n\n<li><strong>Green<\/strong>: \u30c6\u30b9\u30c8\u304c\u901a\u308b\u3088\u3046\u306b\u6700\u5c0f\u9650\u306e\u5b9f\u88c5\u3092\u3059\u308b <code>\/\/ app\/Models\/User.php public function isVerified() { return (bool) $this-&gt;verified; } public function markAsVerified() { $this-&gt;verified = true; $this-&gt;save(); }<\/code><\/li>\n\n\n\n<li><strong>Refactor<\/strong>: \u30b3\u30fc\u30c9\u3092\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3059\u308b\uff08\u30c6\u30b9\u30c8\u304c\u901a\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u306a\u304c\u3089\uff09 <code>public function markAsVerified() { $this-&gt;forceFill(['verified' =&gt; true]); $this-&gt;save(); event(new UserVerified($this)); return $this; }<\/code><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-101\">\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306e\u5411\u4e0a<\/h4>\n\n\n\n<p>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306e\u6226\u7565\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u91cd\u8981\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u512a\u5148\u3059\u308b<\/strong>\uff1a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30a2\u3068\u306a\u308b\u6a5f\u80fd\u3092\u91cd\u70b9\u7684\u306b\u30c6\u30b9\u30c8<\/li>\n\n\n\n<li><strong>\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u3092\u8003\u616e\u3059\u308b<\/strong>\uff1a\u5883\u754c\u5024\u3084\u4f8b\u5916\u7684\u306a\u30b1\u30fc\u30b9\u306e\u30c6\u30b9\u30c8\u3092\u8ffd\u52a0<\/li>\n\n\n\n<li><strong>\u30ea\u30b0\u30ec\u30c3\u30b7\u30e7\u30f3\u30c6\u30b9\u30c8<\/strong>\uff1a\u30d0\u30b0\u4fee\u6b63\u6642\u306b\u306f\u3001\u305d\u306e\u30d0\u30b0\u306e\u518d\u767a\u3092\u9632\u3050\u30c6\u30b9\u30c8\u3092\u8ffd\u52a0<\/li>\n\n\n\n<li><strong>CI\/CD \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9<\/strong>\uff1a\u81ea\u52d5\u30c6\u30b9\u30c8\u3092\u7d99\u7d9a\u7684\u306b\u5b9f\u884c\u3059\u308b\u4ed5\u7d44\u307f\u3092\u6574\u3048\u308b<\/li>\n<\/ol>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u4e0a\u7d1a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u7fd2\u5f97\u3059\u308b\u3053\u3068\u3067\u3001Laravel \u306e\u771f\u306e\u529b\u3092\u5f15\u304d\u51fa\u3057\u3001\u3088\u308a\u5805\u7262\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u3068DI\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u306f Laravel \u306e\u6df1\u3044\u7406\u89e3\u306b\u3064\u306a\u304c\u308a\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u958b\u767a\u306f\u30b3\u30fc\u30c9\u518d\u5229\u7528\u306e\u53ef\u80fd\u6027\u3092\u5e83\u3052\u3001TDD \u306f\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u3068\u4fe1\u983c\u6027\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-102\">Laravel\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<p>\u9ad8\u54c1\u8cea\u306a Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u306b\u306f\u3001\u6a5f\u80fd\u6027\u3060\u3051\u3067\u306a\u304f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316\u3082\u91cd\u8981\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u901f\u5ea6\u3068\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316\u3001\u672c\u756a\u74b0\u5883\u3078\u306e\u30c7\u30d7\u30ed\u30a4\u6642\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\u306a\u3069\u3001\u5b9f\u8df5\u7684\u306a\u6700\u9069\u5316\u624b\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-103\">\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u9ad8\u901f\u5316\u3059\u308b<\/h3>\n\n\n\n<p>\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u3001\u8a08\u7b97\u30b3\u30b9\u30c8\u306e\u9ad8\u3044\u51e6\u7406\u306e\u7d50\u679c\u3092\u4e00\u6642\u7684\u306b\u4fdd\u5b58\u3057\u3001\u518d\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002Laravel \u306f\u69d8\u3005\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30c9\u30e9\u30a4\u30d0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001\u67d4\u8edf\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-104\">\u30ad\u30e3\u30c3\u30b7\u30e5\u30c9\u30e9\u30a4\u30d0\u306e\u9078\u629e\u3068\u8a2d\u5b9a<\/h4>\n\n\n\n<p>Laravel \u306f\u4ee5\u4e0b\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30c9\u30e9\u30a4\u30d0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-963166e6-fe8e-44ab-8c73-294dec8452c0\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30c9\u30e9\u30a4\u30d0<\/th><th>\u7279\u5fb4<\/th><th>\u7528\u9014<\/th><\/tr><\/thead><tbody><tr><td><strong>file<\/strong><\/td><td>\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u306b\u4fdd\u5b58<\/td><td>\u958b\u767a\u74b0\u5883\u3084\u5c0f\u898f\u6a21\u30a2\u30d7\u30ea<\/td><\/tr><tr><td><strong>redis<\/strong><\/td><td>\u30a4\u30f3\u30e1\u30e2\u30ea\u30c7\u30fc\u30bf\u30b9\u30c8\u30a2<\/td><td>\u9ad8\u901f\u3067\u9ad8\u5ea6\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u7ba1\u7406<\/td><\/tr><tr><td><strong>memcached<\/strong><\/td><td>\u5206\u6563\u30e1\u30e2\u30ea\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5<\/td><td>\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/td><\/tr><tr><td><strong>database<\/strong><\/td><td>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58<\/td><td>Redis\/Memcached\u304c\u4f7f\u3048\u306a\u3044\u74b0\u5883<\/td><\/tr><tr><td><strong>array<\/strong><\/td><td>PHP\u306e\u914d\u5217\u306b\u4fdd\u5b58\uff08\u30ea\u30af\u30a8\u30b9\u30c8\u5185\u306e\u307f\uff09<\/td><td>\u30c6\u30b9\u30c8\u74b0\u5883<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><code>config\/cache.php<\/code> \u3067\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a\u3092\u884c\u3044\u307e\u3059\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=\"\">\/\/ Redis \u3092\u4f7f\u7528\u3059\u308b\u8a2d\u5b9a\u4f8b\n'default' =&gt; env('CACHE_DRIVER', 'redis'),\n\n'stores' =&gt; [\n    'redis' =&gt; [\n        'driver' =&gt; 'redis',\n        'connection' =&gt; 'cache',\n        'lock_connection' =&gt; 'default',\n    ],\n],\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-105\">\u30c7\u30fc\u30bf\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u57fa\u672c<\/h4>\n\n\n\n<p>\u5358\u7d14\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8aad\u307f\u66f8\u304d\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=\"\">\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u3078\u306e\u66f8\u304d\u8fbc\u307f\uff0860\u5206\u9593\u6709\u52b9\uff09\nCache::put('key', 'value', 60);\n\n\/\/ \u30ad\u30fc\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306e\u307f\u66f8\u304d\u8fbc\u307f\nCache::add('key', 'value', 60);\n\n\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304b\u3089\u306e\u8aad\u307f\u53d6\u308a\n$value = Cache::get('key');\n\n\/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3092\u6307\u5b9a\u3057\u305f\u8aad\u307f\u53d6\u308a\n$value = Cache::get('key', 'default');\n\n\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u524a\u9664\nCache::forget('key');\n\n\/\/ \u5168\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u524a\u9664\nCache::flush();\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-106\">\u9ad8\u5ea6\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30d1\u30bf\u30fc\u30f3<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-107\">\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4f7f\u3063\u305f\u8a08\u7b97\u7d50\u679c\u306e\u4fdd\u5b58<\/h5>\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=\"\">\/\/ remember \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3063\u305f\u52b9\u7387\u7684\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30d1\u30bf\u30fc\u30f3\n$value = Cache::remember('users', 60, function () {\n    return DB::table('users')-&gt;get();\n});\n\n\/\/ \u6c38\u7d9a\u7684\u306b\u8a18\u61b6\uff08\u524a\u9664\u3059\u308b\u307e\u3067\u4fdd\u6301\uff09\n$value = Cache::rememberForever('users', function () {\n    return DB::table('users')-&gt;get();\n});\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-108\">\u30bf\u30b0\u4ed8\u304d\u30ad\u30e3\u30c3\u30b7\u30e5\uff08Redis\/Memcached \u306e\u307f\uff09<\/h5>\n\n\n\n<p>\u95a2\u9023\u3059\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\u30a8\u30f3\u30c8\u30ea\u3092\u30b0\u30eb\u30fc\u30d7\u5316\u3067\u304d\u307e\u3059\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=\"\">\/\/ \u30bf\u30b0\u4ed8\u304d\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u4fdd\u5b58\nCache::tags(['people', 'authors'])-&gt;put('John', $john, 60);\nCache::tags(['people', 'readers'])-&gt;put('Anne', $anne, 60);\n\n\/\/ \u30bf\u30b0\u3067\u7279\u5b9a\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u53d6\u5f97\n$john = Cache::tags(['people', 'authors'])-&gt;get('John');\n\n\/\/ \u7279\u5b9a\u306e\u30bf\u30b0\u3092\u6301\u3064\u5168\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u524a\u9664\nCache::tags('authors')-&gt;flush();\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-109\">\u30ec\u30b9\u30dd\u30f3\u30b9\u30ad\u30e3\u30c3\u30b7\u30e5<\/h4>\n\n\n\n<p>\u5b8c\u5168\u306aHTTP\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u65b9\u6cd5\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=\"\">\/\/ \u30eb\u30fc\u30c8\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\nRoute::get('\/user\/{id}\/profile', function ($id) {\n    \/\/ ...\n})-&gt;middleware('cache.headers:public;max_age=2628000;etag');\n\n\/\/ \u6761\u4ef6\u4ed8\u304d\u30ad\u30e3\u30c3\u30b7\u30e5\nclass UserProfileController extends Controller\n{\n    public function show($id)\n    {\n        $user = User::findOrFail($id);\n        \n        if (request()-&gt;header('If-Modified-Since') == $user-&gt;updated_at-&gt;toRfc7231String()) {\n            return response()-&gt;noContent(304);\n        }\n        \n        return response()-&gt;view('profile', compact('user'))\n                         -&gt;header('Last-Modified', $user-&gt;updated_at-&gt;toRfc7231String());\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-110\">\u30d3\u30e5\u30fc\u30ad\u30e3\u30c3\u30b7\u30e5<\/h4>\n\n\n\n<p>\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3057\u307e\u3059\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=\"\">\/\/ \u7279\u5b9a\u6642\u9593\u3060\u3051\u30d3\u30e5\u30fc\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\nreturn response()-&gt;view('user-profile', $data)\n                 -&gt;header('Cache-Control', 'public, max-age=60');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-111\">\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u30a6\u30a9\u30fc\u30e0\u30a2\u30c3\u30d7<\/h4>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5\u6642\u3084\u5b9a\u671f\u7684\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u4e8b\u524d\u306b\u751f\u6210\u3059\u308b\u6226\u7565\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=\"\">\/\/ app\/Console\/Commands\/WarmCache.php\nclass WarmCache extends Command\n{\n    protected $signature = 'cache:warm';\n    \n    public function handle()\n    {\n        \/\/ \u3088\u304f\u4f7f\u308f\u308c\u308b\u30c7\u30fc\u30bf\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\n        Cache::rememberForever('popular_products', function () {\n            return Product::where('is_popular', true)\n                          -&gt;with('categories', 'tags')\n                          -&gt;get();\n        });\n        \n        \/\/ \u305d\u306e\u4ed6\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30a6\u30a9\u30fc\u30e0\u30a2\u30c3\u30d7\u51e6\u7406\n    }\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-112\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316\u624b\u6cd5<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u306e\u30ec\u30b9\u30dd\u30f3\u30b9\u6642\u9593\u306b\u5927\u304d\u304f\u5f71\u97ff\u3057\u307e\u3059\u3002\u52b9\u7387\u7684\u306a\u30af\u30a8\u30ea\u3092\u66f8\u304d\u3001\u9069\u5207\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u51e6\u7406\u3092\u5927\u5e45\u306b\u9ad8\u901f\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-113\">\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u8a08\u753b\u3068\u5206\u6790<\/h4>\n\n\n\n<p>Laravel \u3067\u306f\u3001\u30af\u30a8\u30ea\u306e\u5b9f\u884c\u6642\u9593\u3068SQL\u3092\u78ba\u8a8d\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\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=\"\">\/\/ \u30af\u30a8\u30ea\u30ed\u30b0\u306e\u6709\u52b9\u5316\uff08\u958b\u767a\u74b0\u5883\u3067\u4f7f\u7528\uff09\nDB::enableQueryLog();\n\n\/\/ \u30af\u30a8\u30ea\u306e\u5b9f\u884c\n$users = User::where('active', 1)-&gt;get();\n\n\/\/ \u30ed\u30b0\u306e\u53d6\u5f97\u3068\u5206\u6790\n$queries = DB::getQueryLog();\ndump($queries);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-114\">Eloquent \u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-115\">\u30af\u30a8\u30ea\u306e\u52b9\u7387\u5316<\/h5>\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=\"\">\/\/ \u60aa\u3044\u4f8b\uff1aN+1\u30af\u30a8\u30ea\u554f\u984c\n$users = User::all();\nforeach ($users as $user) {\n    echo $user-&gt;profile-&gt;bio; \/\/ \u5404\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u5225\u30af\u30a8\u30ea\u304c\u767a\u751f\n}\n\n\/\/ \u826f\u3044\u4f8b\uff1aEager Loading\n$users = User::with('profile')-&gt;get();\nforeach ($users as $user) {\n    echo $user-&gt;profile-&gt;bio; \/\/ \u8ffd\u52a0\u30af\u30a8\u30ea\u306a\u3057\n}\n\n\/\/ \u5fc5\u8981\u306a\u30ab\u30e9\u30e0\u306e\u307f\u53d6\u5f97\n$users = User::select('id', 'name', 'email')-&gt;get();\n\n\/\/ \u30c1\u30e3\u30f3\u30af\u3092\u4f7f\u3063\u305f\u5927\u91cf\u30c7\u30fc\u30bf\u306e\u51e6\u7406\nUser::chunk(100, function ($users) {\n    foreach ($users as $user) {\n        \/\/ 100\u30ec\u30b3\u30fc\u30c9\u305a\u3064\u51e6\u7406\n    }\n});\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-116\">\u8aad\u307f\u53d6\u308a\/\u66f8\u304d\u8fbc\u307f\u306e\u5206\u96e2<\/h5>\n\n\n\n<p>\u30de\u30eb\u30c1\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u74b0\u5883\u3067\u306e\u6700\u9069\u5316\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=\"\">\/\/ \u8aad\u307f\u53d6\u308a\u7528\u306e\u30af\u30a8\u30ea\n$users = DB::connection('read')-&gt;table('users')-&gt;get();\n\n\/\/ \u66f8\u304d\u8fbc\u307f\u7528\u306e\u30af\u30a8\u30ea\nDB::connection('write')-&gt;table('users')-&gt;insert($userData);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-117\">\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>\u9069\u5207\u306a\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306f\u3001\u30af\u30a8\u30ea\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u307e\u3059\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=\"\">\/\/ \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u5b9a\u7fa9\nSchema::table('users', function (Blueprint $table) {\n    \/\/ \u5358\u4e00\u30ab\u30e9\u30e0\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n    $table-&gt;index('email');\n    \n    \/\/ \u8907\u5408\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n    $table-&gt;index(['last_name', 'first_name']);\n    \n    \/\/ \u30e6\u30cb\u30fc\u30af\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\n    $table-&gt;unique('username');\n    \n    \/\/ \u5916\u90e8\u30ad\u30fc\n    $table-&gt;foreign('role_id')-&gt;references('id')-&gt;on('roles');\n});\n<\/pre>\n\n\n\n<p>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u52b9\u679c\u7684\u306b\u4f7f\u3046\u305f\u3081\u306e\u30af\u30a8\u30ea\u30d1\u30bf\u30fc\u30f3\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=\"\">\/\/ \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u6d3b\u7528\u3059\u308b\u30af\u30a8\u30ea\u4f8b\nUser::where('email', 'like', 'john%')-&gt;orderBy('email')-&gt;get();\n\n\/\/ \u8907\u5408\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u6d3b\u7528\u3059\u308b\u30af\u30a8\u30ea\u4f8b\nUser::where('last_name', 'Doe')-&gt;orderBy('first_name')-&gt;get();\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-118\">\u6c34\u5e73\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3068\u30b7\u30e3\u30fc\u30c7\u30a3\u30f3\u30b0<\/h4>\n\n\n\n<p>\u5927\u898f\u6a21\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u305f\u3081\u306e\u6700\u9069\u5316\u6226\u7565\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ec\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>\uff1a\u8aad\u307f\u53d6\u308a\u5c02\u7528\u306e\u30ec\u30d7\u30ea\u30ab\u3092\u8ffd\u52a0<\/li>\n\n\n\n<li><strong>\u30b7\u30e3\u30fc\u30c7\u30a3\u30f3\u30b0<\/strong>\uff1a\u30c7\u30fc\u30bf\u3092\u8907\u6570\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u5206\u6563<\/li>\n<\/ol>\n\n\n\n<p>Laravel \u3067\u306e\u30b7\u30e3\u30fc\u30c7\u30a3\u30f3\u30b0\u5b9f\u88c5\u4f8b\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=\"\">\/\/ \u30e6\u30fc\u30b6\u30fcID\u306b\u57fa\u3065\u3044\u3066\u30b7\u30e3\u30fc\u30c9\u3092\u6c7a\u5b9a\n$shardId = $userId % 4; \/\/ 4\u3064\u306e\u30b7\u30e3\u30fc\u30c9\u304c\u3042\u308b\u5834\u5408\n\n\/\/ \u9069\u5207\u306a\u30b7\u30e3\u30fc\u30c9\u306b\u63a5\u7d9a\n$users = DB::connection(\"shard_{$shardId}\")-&gt;table('users')\n           -&gt;where('id', $userId)\n           -&gt;first();\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-119\">\u672c\u756a\u74b0\u5883\u30c7\u30d7\u30ed\u30a4\u6642\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h3>\n\n\n\n<p>\u672c\u756a\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308b\u524d\u306b\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3059\u308b\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u901f\u5ea6\u3068\u5b89\u5b9a\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-120\">\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u6700\u9069\u5316\u306e\u8a2d\u5b9a<\/h4>\n\n\n<div id=\"id-fee96fd9-74e6-435b-abd7-6ef4d04eddce\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9805\u76ee<\/th><th>\u8aac\u660e<\/th><th>\u30b3\u30de\u30f3\u30c9\/\u8a2d\u5b9a<\/th><\/tr><\/thead><tbody><tr><td><strong>\u8a2d\u5b9a\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<\/strong><\/td><td>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u5358\u4e00\u30d5\u30a1\u30a4\u30eb\u306b\u30b3\u30f3\u30d1\u30a4\u30eb<\/td><td><code>php artisan config:cache<\/code><\/td><\/tr><tr><td><strong>\u30eb\u30fc\u30c8\u306e\u30ad\u30e3\u30c3\u30b7\u30e5<\/strong><\/td><td>\u30eb\u30fc\u30c8\u767b\u9332\u3092\u30ad\u30e3\u30c3\u30b7\u30e5<\/td><td><code>php artisan route:cache<\/code><\/td><\/tr><tr><td><strong>\u30d3\u30e5\u30fc\u306e\u30b3\u30f3\u30d1\u30a4\u30eb<\/strong><\/td><td>Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4e8b\u524d\u30b3\u30f3\u30d1\u30a4\u30eb<\/td><td><code>php artisan view:cache<\/code><\/td><\/tr><tr><td><strong>\u30aa\u30fc\u30c8\u30ed\u30fc\u30c0\u306e\u6700\u9069\u5316<\/strong><\/td><td>Composer\u306e\u30aa\u30fc\u30c8\u30ed\u30fc\u30c0\u3092\u6700\u9069\u5316<\/td><td><code>composer install --optimize-autoloader --no-dev<\/code><\/td><\/tr><tr><td><strong>\u74b0\u5883\u5909\u6570<\/strong><\/td><td>\u672c\u756a\u7528\u306e\u74b0\u5883\u5909\u6570\u8a2d\u5b9a<\/td><td><code>APP_ENV=production<\/code>&lt;br&gt;<code>APP_DEBUG=false<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-121\">\u30a2\u30bb\u30c3\u30c8\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u30a2\u30bb\u30c3\u30c8\u306e\u6700\u9069\u5316\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=\"\"># Laravel Mix \u3092\u4f7f\u7528\u3057\u305f\u672c\u756a\u30d3\u30eb\u30c9\nnpm run production\n<\/pre>\n\n\n\n<p>\u3053\u306e\u51e6\u7406\u306b\u3088\u308a\u4ee5\u4e0b\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>JavaScript\u306e\u5727\u7e2e\u3068\u30df\u30cb\u30d5\u30a1\u30a4<\/li>\n\n\n\n<li>CSS\u306e\u5727\u7e2e\u3068\u30df\u30cb\u30d5\u30a1\u30a4<\/li>\n\n\n\n<li>\u30a2\u30bb\u30c3\u30c8\u306e\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\uff08\u30ad\u30e3\u30c3\u30b7\u30e5\u30d0\u30b9\u30c6\u30a3\u30f3\u30b0\uff09<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-122\">\u30b5\u30fc\u30d0\u30fc\u8a2d\u5b9a\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>Web\u30b5\u30fc\u30d0\u30fc\u30ec\u30d9\u30eb\u3067\u306e\u6700\u9069\u5316\uff1a<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-123\">Nginx \u306e\u8a2d\u5b9a\u4f8b<\/h5>\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=\"\"># \u9759\u7684\u30d5\u30a1\u30a4\u30eb\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3068gzip\u5727\u7e2e\nlocation ~* \\.(jpg|jpeg|png|gif|ico|css|js)$ {\n    expires 30d;\n    add_header Cache-Control \"public, no-transform\";\n}\n\n# gzip\u5727\u7e2e\u306e\u6709\u52b9\u5316\ngzip on;\ngzip_comp_level 5;\ngzip_min_length 256;\ngzip_proxied any;\ngzip_types\n    application\/javascript\n    application\/json\n    application\/xml\n    text\/css\n    text\/plain\n    text\/xml;\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-124\">PHP-FPM \u306e\u8a2d\u5b9a\u6700\u9069\u5316<\/h5>\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-fpm.conf\npm = dynamic\npm.max_children = 50\npm.start_servers = 10\npm.min_spare_servers = 5\npm.max_spare_servers = 15\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-125\">\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u91cf\u306e\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3068\u6700\u9069\u5316<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-126\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/h5>\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=\"\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u7d50\u679c\u306e\u30ab\u30fc\u30bd\u30eb\u5316\uff08\u30e1\u30e2\u30ea\u52b9\u7387\uff09\nforeach (User::cursor() as $user) {\n    \/\/ \u5404\u30e6\u30fc\u30b6\u30fc\u30921\u3064\u305a\u3064\u51e6\u7406\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-127\">\u30ad\u30e5\u30fc\u306e\u6700\u9069\u5316<\/h5>\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=\"\">\/\/ \u91cd\u3044\u30bf\u30b9\u30af\u306f\u30ad\u30e5\u30fc\u3067\u975e\u540c\u671f\u51e6\u7406\nProcessPodcast::dispatch($podcast)\n    -&gt;onQueue('processing')\n    -&gt;delay(now()-&gt;addMinutes(10));\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-128\">\u672c\u756a\u30c7\u30d7\u30ed\u30a4\u524d\u306e\u6700\u7d42\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h4>\n\n\n\n<p>\u30c7\u30d7\u30ed\u30a4\u524d\u306b\u4ee5\u4e0b\u306e\u9805\u76ee\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[ ] <strong>\u5168\u3066\u306e\u74b0\u5883\u5909\u6570\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/strong>\n<ul class=\"wp-block-list\">\n<li><code>APP_ENV=production<\/code><\/li>\n\n\n\n<li><code>APP_DEBUG=false<\/code><\/li>\n\n\n\n<li>\u6a5f\u5bc6\u60c5\u5831\u304c\u9069\u5207\u306b\u4fdd\u8b77\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>[ ] <strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u8a2d\u5b9a<\/strong>\n<ul class=\"wp-block-list\">\n<li><code>php artisan config:cache<\/code><\/li>\n\n\n\n<li><code>php artisan route:cache<\/code><\/li>\n\n\n\n<li><code>php artisan view:cache<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>[ ] <strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u6700\u9069\u5316<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u304c\u3059\u3079\u3066\u9069\u7528\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>\u672c\u756a\u74b0\u5883\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a8d\u8a3c\u60c5\u5831\u304c\u6b63\u3057\u3044\u304b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>[ ] <strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u3059\u3079\u3066\u306e\u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u65e2\u77e5\u306e\u8106\u5f31\u6027\u304c\u306a\u3044\u304b<\/li>\n\n\n\n<li>CSRF\u30c8\u30fc\u30af\u30f3\u304c\u9069\u5207\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>\u6a5f\u5bc6\u60c5\u5831\u304c\u9732\u51fa\u3057\u3066\u3044\u306a\u3044\u304b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>[ ] <strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c6\u30b9\u30c8<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u8ca0\u8377\u30c6\u30b9\u30c8\u3092\u5b9f\u65bd\u3057\u305f\u304b<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u304c\u306a\u3044\u304b<\/li>\n\n\n\n<li>N+1\u30af\u30a8\u30ea\u304c\u89e3\u6d88\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>[ ] <strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3068\u30ed\u30b0<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30ed\u30b0\u30ec\u30d9\u30eb\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u901a\u77e5\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-129\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<p>\u672c\u756a\u74b0\u5883\u306b\u30c7\u30d7\u30ed\u30a4\u5f8c\u3082\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u7d99\u7d9a\u7684\u306b\u76e3\u8996\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\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=\"\">\/\/ app\/Providers\/AppServiceProvider.php\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Log;\n\npublic function boot()\n{\n    if (app()-&gt;environment('production')) {\n        \/\/ \u30b9\u30ed\u30fc\u30af\u30a8\u30ea\u306e\u30ed\u30b0\u8a18\u9332\n        DB::listen(function ($query) {\n            if ($query-&gt;time &gt; 100) {\n                Log::channel('slow-queries')-&gt;info(\n                    $query-&gt;sql, \n                    ['bindings' =&gt; $query-&gt;bindings, 'time' =&gt; $query-&gt;time]\n                );\n            }\n        });\n    }\n}\n<\/pre>\n\n\n\n<p>\u5916\u90e8\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\u3068\u306e\u7d71\u5408\u3082\u691c\u8a0e\u3059\u308b\u3068\u826f\u3044\u3067\u3057\u3087\u3046\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>New Relic<\/li>\n\n\n\n<li>Blackfire<\/li>\n\n\n\n<li>Laravel Telescope\uff08\u958b\u767a\u74b0\u5883\u7528\uff09<\/li>\n\n\n\n<li>Laravel Horizon\uff08Redis\u30ad\u30e5\u30fc\u76e3\u8996\u7528\uff09<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-130\">CDN\u3068\u30a8\u30c3\u30b8\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/h4>\n\n\n\n<p>\u30b0\u30ed\u30fc\u30d0\u30eb\u306b\u5c55\u958b\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001CDN\uff08\u30b3\u30f3\u30c6\u30f3\u30c4\u30c7\u30ea\u30d0\u30ea\u30fc\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\uff09\u306e\u6d3b\u7528\u304c\u52b9\u679c\u7684\u3067\u3059\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=\"\">\/\/ config\/filesystems.php\n's3' =&gt; [\n    'driver' =&gt; 's3',\n    'key' =&gt; env('AWS_ACCESS_KEY_ID'),\n    'secret' =&gt; env('AWS_SECRET_ACCESS_KEY'),\n    'region' =&gt; env('AWS_DEFAULT_REGION'),\n    'bucket' =&gt; env('AWS_BUCKET'),\n    'url' =&gt; env('AWS_URL'),\n    'endpoint' =&gt; env('AWS_ENDPOINT'),\n    'use_path_style_endpoint' =&gt; env('AWS_USE_PATH_STYLE_ENDPOINT', false),\n],\n\n\/\/ \u4f7f\u7528\u4f8b\n$url = Storage::disk('s3')-&gt;url('profile-photos\/1.jpg');\n<\/pre>\n\n\n\n<p>Cloudflare \u306a\u3069\u306e\u30a8\u30c3\u30b8\u30ad\u30e3\u30c3\u30b7\u30e5\u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u9ad8\u901f\u914d\u4fe1<\/li>\n\n\n\n<li>DDoS\u653b\u6483\u304b\u3089\u306e\u4fdd\u8b77<\/li>\n\n\n\n<li>\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b7\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<p>Laravel \u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6210\u9577\u306b\u5408\u308f\u305b\u3066\u7d99\u7d9a\u7684\u306b\u884c\u3046\u3079\u304d\u6d3b\u52d5\u3067\u3059\u3002\u521d\u671f\u6bb5\u968e\u304b\u3089\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u610f\u8b58\u3057\u305f\u8a2d\u8a08\u3092\u884c\u3044\u3001\u5b9a\u671f\u7684\u306b\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u3092\u7279\u5b9a\u3057\u3066\u6539\u5584\u3059\u308b\u3053\u3068\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u306e\u5411\u4e0a\u3068\u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u5229\u7528\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u958b\u767a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-131\">Laravel\u958b\u767a\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30d1\u30bf\u30fc\u30f3<\/h2>\n\n\n\n<p>\u9ad8\u54c1\u8cea\u306a Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u9069\u5207\u306a\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04\u3084\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3092\u7406\u89e3\u3057\u3001\u5b9f\u8df5\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u958b\u767a\u306b\u304a\u3051\u308b\u4e3b\u8981\u306a\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3068\u30d1\u30bf\u30fc\u30f3\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-132\">\u30af\u30ea\u30fc\u30f3\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u305f\u3081\u306eLaravel\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04<\/h3>\n\n\n\n<p>\u30af\u30ea\u30fc\u30f3\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u306f\u3001\u9577\u671f\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6210\u529f\u306b\u4e0d\u53ef\u6b20\u3067\u3059\u3002Laravel \u958b\u767a\u306b\u304a\u3051\u308b\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04\u306e\u57fa\u672c\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-133\">PSR \u6a19\u6e96\u3078\u306e\u6e96\u62e0<\/h4>\n\n\n\n<p>Laravel \u306f PHP-FIG \u306b\u3088\u308b PSR \u6a19\u6e96\u306b\u6e96\u62e0\u3057\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u4ee5\u4e0b\u306e\u6a19\u6e96\u3092\u9075\u5b88\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PSR-1<\/strong>: \u57fa\u672c\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04<\/li>\n\n\n\n<li><strong>PSR-4<\/strong>: \u30aa\u30fc\u30c8\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u6a19\u6e96<\/li>\n\n\n\n<li><strong>PSR-12<\/strong>: \u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30b9\u30bf\u30a4\u30eb\u30ac\u30a4\u30c9<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ PSR-1 &amp; PSR-12 \u306b\u6e96\u62e0\u3057\u305f\u30af\u30e9\u30b9\u5b9a\u7fa9\nnamespace App\\Services;\n\nclass UserService\n{\n    public function getActiveUsers(): array\n    {\n        \/\/ \u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u88c5\n        return User::where('active', true)-&gt;get()-&gt;toArray();\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-134\">Laravel \u56fa\u6709\u306e\u547d\u540d\u898f\u5247<\/h4>\n\n\n\n<p>Laravel \u306e\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u5185\u3067\u4e00\u8cab\u6027\u3092\u4fdd\u3064\u305f\u3081\u306e\u547d\u540d\u898f\u5247\uff1a<\/p>\n\n\n<div id=\"id-95f8fde1-fe97-4f37-ac62-68bfa07d6aff\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u9805\u76ee<\/th><th>\u547d\u540d\u898f\u5247<\/th><th>\u4f8b<\/th><\/tr><\/thead><tbody><tr><td>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc<\/td><td>\u5358\u6570\u5f62\u3001PascalCase\u3001Controller\u30b5\u30d5\u30a3\u30c3\u30af\u30b9<\/td><td><code>UserController<\/code><\/td><\/tr><tr><td>\u30e2\u30c7\u30eb<\/td><td>\u5358\u6570\u5f62\u3001PascalCase<\/td><td><code>User<\/code>, <code>Article<\/code><\/td><\/tr><tr><td>\u30c6\u30fc\u30d6\u30eb<\/td><td>\u8907\u6570\u5f62\u3001snake_case<\/td><td><code>users<\/code>, <code>blog_posts<\/code><\/td><\/tr><tr><td>\u30d4\u30dc\u30c3\u30c8\u30c6\u30fc\u30d6\u30eb<\/td><td>\u5358\u6570\u5f62\u3001\u30a2\u30eb\u30d5\u30a1\u30d9\u30c3\u30c8\u9806\u3001\u30a2\u30f3\u30c0\u30fc\u30b9\u30b3\u30a2<\/td><td><code>article_user<\/code><\/td><\/tr><tr><td>\u30c6\u30fc\u30d6\u30eb\u30ab\u30e9\u30e0<\/td><td>snake_case<\/td><td><code>first_name<\/code><\/td><\/tr><tr><td>\u30e2\u30c7\u30eb\u30d7\u30ed\u30d1\u30c6\u30a3<\/td><td>snake_case<\/td><td><code>$model-&gt;created_at<\/code><\/td><\/tr><tr><td>\u5916\u90e8\u30ad\u30fc<\/td><td>\u5358\u6570\u5f62\u30e2\u30c7\u30eb\u540d_id<\/td><td><code>user_id<\/code><\/td><\/tr><tr><td>\u5909\u6570<\/td><td>camelCase<\/td><td><code>$userGroup<\/code><\/td><\/tr><tr><td>\u30e1\u30bd\u30c3\u30c9<\/td><td>camelCase<\/td><td><code>getAll()<\/code><\/td><\/tr><tr><td>\u95a2\u6570<\/td><td>snake_case<\/td><td><code>view()<\/code>, <code>config()<\/code><\/td><\/tr><tr><td>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/td><td>snake_case<\/td><td><code>web<\/code>, <code>api<\/code>, <code>auth:api<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-135\">SOLID \u539f\u5247\u306e\u9069\u7528<\/h4>\n\n\n\n<p>Laravel \u306f SOLID \u539f\u5247\u306b\u57fa\u3065\u3044\u3066\u8a2d\u8a08\u3055\u308c\u3066\u304a\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u3082\u540c\u69d8\u306e\u539f\u5247\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-136\">1. \u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247 (SRP)<\/h5>\n\n\n\n<p>\u4e00\u3064\u306e\u30af\u30e9\u30b9\u306f\u4e00\u3064\u306e\u8cac\u4efb\u306e\u307f\u3092\u6301\u3064\u3079\u304d\u3067\u3059\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=\"\">\/\/ \u60aa\u3044\u4f8b\uff1a\u8907\u6570\u306e\u8cac\u4efb\u3092\u6301\u3064\u30af\u30e9\u30b9\nclass User\n{\n    public function register() { \/* ... *\/ }\n    public function sendWelcomeEmail() { \/* ... *\/ }\n    public function generateReport() { \/* ... *\/ }\n}\n\n\/\/ \u826f\u3044\u4f8b\uff1a\u8cac\u4efb\u3092\u5206\u5272\nclass User\n{\n    public function register() { \/* ... *\/ }\n}\n\nclass UserMailer\n{\n    public function sendWelcomeEmail(User $user) { \/* ... *\/ }\n}\n\nclass ReportGenerator\n{\n    public function generateUserReport(User $user) { \/* ... *\/ }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-137\">2. \u30aa\u30fc\u30d7\u30f3\u30fb\u30af\u30ed\u30fc\u30ba\u30c9\u306e\u539f\u5247 (OCP)<\/h5>\n\n\n\n<p>\u62e1\u5f35\u306b\u5bfe\u3057\u3066\u306f\u30aa\u30fc\u30d7\u30f3\u306b\u3001\u4fee\u6b63\u306b\u5bfe\u3057\u3066\u306f\u30af\u30ed\u30fc\u30ba\u30c9\u3067\u3042\u308b\u3079\u304d\u3067\u3059\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=\"\">\/\/ \u826f\u3044\u4f8b\uff1a\u62e1\u5f35\u53ef\u80fd\u306a\u8a2d\u8a08\ninterface PaymentGateway\n{\n    public function processPayment(Order $order): bool;\n}\n\nclass StripeGateway implements PaymentGateway\n{\n    public function processPayment(Order $order): bool\n    {\n        \/\/ Stripe \u56fa\u6709\u306e\u51e6\u7406\n    }\n}\n\nclass PayPalGateway implements PaymentGateway\n{\n    public function processPayment(Order $order): bool\n    {\n        \/\/ PayPal \u56fa\u6709\u306e\u51e6\u7406\n    }\n}\n\n\/\/ \u65b0\u3057\u3044\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3092\u8ffd\u52a0\u3057\u3066\u3082 PaymentProcessor \u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u306f\u306a\u3044\nclass PaymentProcessor\n{\n    private $gateway;\n    \n    public function __construct(PaymentGateway $gateway)\n    {\n        $this-&gt;gateway = $gateway;\n    }\n    \n    public function process(Order $order): bool\n    {\n        return $this-&gt;gateway-&gt;processPayment($order);\n    }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-138\">3. \u30ea\u30b9\u30b3\u30d5\u306e\u7f6e\u63db\u539f\u5247 (LSP)<\/h5>\n\n\n\n<p>\u30b5\u30d6\u30bf\u30a4\u30d7\u306f\u305d\u306e\u57fa\u672c\u578b\u3068\u7f6e\u63db\u53ef\u80fd\u3067\u3042\u308b\u3079\u304d\u3067\u3059\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=\"\">\/\/ \u57fa\u672c\u30af\u30e9\u30b9\nclass Rectangle\n{\n    protected $width;\n    protected $height;\n    \n    public function setWidth($width)\n    {\n        $this-&gt;width = $width;\n    }\n    \n    public function setHeight($height)\n    {\n        $this-&gt;height = $height;\n    }\n    \n    public function getArea()\n    {\n        return $this-&gt;width * $this-&gt;height;\n    }\n}\n\n\/\/ \u30b5\u30d6\u30af\u30e9\u30b9\uff08LSP\u306b\u9055\u53cd\u3057\u306a\u3044\uff09\nclass Square extends Rectangle\n{\n    public function setWidth($width)\n    {\n        parent::setWidth($width);\n        parent::setHeight($width);\n    }\n    \n    public function setHeight($height)\n    {\n        parent::setWidth($height);\n        parent::setHeight($height);\n    }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-139\">4. \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u5206\u96e2\u306e\u539f\u5247 (ISP)<\/h5>\n\n\n\n<p>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u4f7f\u7528\u3057\u306a\u3044\u30e1\u30bd\u30c3\u30c9\u306b\u4f9d\u5b58\u3059\u308b\u3079\u304d\u3067\u306f\u3042\u308a\u307e\u305b\u3093\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=\"\">\/\/ \u60aa\u3044\u4f8b\uff1a\u5de8\u5927\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\ninterface Worker\n{\n    public function work();\n    public function eat();\n    public function sleep();\n}\n\n\/\/ \u826f\u3044\u4f8b\uff1a\u7279\u5316\u3057\u305f\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\ninterface Workable\n{\n    public function work();\n}\n\ninterface Eatable\n{\n    public function eat();\n}\n\ninterface Sleepable\n{\n    public function sleep();\n}\n\nclass HumanWorker implements Workable, Eatable, Sleepable\n{\n    public function work() { \/* ... *\/ }\n    public function eat() { \/* ... *\/ }\n    public function sleep() { \/* ... *\/ }\n}\n\nclass RobotWorker implements Workable\n{\n    public function work() { \/* ... *\/ }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-140\">5. \u4f9d\u5b58\u6027\u9006\u8ee2\u306e\u539f\u5247 (DIP)<\/h5>\n\n\n\n<p>\u4e0a\u4f4d\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u4e0b\u4f4d\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u4f9d\u5b58\u3059\u3079\u304d\u3067\u306f\u306a\u304f\u3001\u4e21\u65b9\u3068\u3082\u62bd\u8c61\u306b\u4f9d\u5b58\u3059\u3079\u304d\u3067\u3059\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=\"\">\/\/ \u60aa\u3044\u4f8b\uff1a\u5177\u8c61\u30af\u30e9\u30b9\u3078\u306e\u4f9d\u5b58\nclass UserController\n{\n    private $repository;\n    \n    public function __construct()\n    {\n        $this-&gt;repository = new UserRepository(); \/\/ \u76f4\u63a5\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5316\n    }\n}\n\n\/\/ \u826f\u3044\u4f8b\uff1a\u62bd\u8c61\u3078\u306e\u4f9d\u5b58\ninterface UserRepositoryInterface\n{\n    public function getAll();\n}\n\nclass UserRepository implements UserRepositoryInterface\n{\n    public function getAll() { \/* ... *\/ }\n}\n\nclass UserController\n{\n    private $repository;\n    \n    public function __construct(UserRepositoryInterface $repository)\n    {\n        $this-&gt;repository = $repository; \/\/ \u4f9d\u5b58\u6027\u6ce8\u5165\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-141\">Laravel \u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<p>Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u767a\u3059\u308b\u969b\u306e\u5177\u4f53\u7684\u306a\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d5\u30a1\u30c3\u30c8\u30e2\u30c7\u30eb\u30fb\u30b9\u30ad\u30cb\u30fc\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9<\/strong><ul><li>\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306f\u30e2\u30c7\u30eb\u3084\u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\u306b<\/li><li>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306f\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u3068\u5fdc\u7b54\u306e\u8fd4\u5374\u306b\u96c6\u4e2d<\/li><\/ul><code>\/\/ \u826f\u3044\u4f8b class OrderController extends Controller { public function store(OrderRequest $request) { $order = Order::create($request-&gt;validated()); $order-&gt;process(); \/\/ \u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306f\u30e2\u30c7\u30eb\u306b return redirect()-&gt;route('orders.show', $order) -&gt;with('success', '\u6ce8\u6587\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f'); } }<\/code><\/li>\n\n\n\n<li><strong>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306f\u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u3067<\/strong><ul><li>\u8907\u96d1\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30ed\u30b8\u30c3\u30af\u306f\u30d5\u30a9\u30fc\u30e0\u30ea\u30af\u30a8\u30b9\u30c8\u30af\u30e9\u30b9\u306b\u5206\u96e2\u3059\u308b<\/li><\/ul><code>\/\/ app\/Http\/Requests\/StoreOrderRequest.php class StoreOrderRequest extends FormRequest { public function rules() { return [ 'product_id' =&gt; 'required|exists:products,id', 'quantity' =&gt; 'required|integer|min:1', \/\/ ... ]; } }<\/code><\/li>\n\n\n\n<li><strong>\u8a2d\u5b9a\u5024\u306f config \u30d5\u30a1\u30a4\u30eb\u306b\u96c6\u7d04<\/strong><ul><li>\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3057\u305f\u5024\u3067\u306f\u306a\u304f\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u306e\u53d6\u5f97\u3092\u512a\u5148<\/li><\/ul><code>\/\/ config\/app.php \u306b\u8a2d\u5b9a\u3092\u8ffd\u52a0 'pagination' =&gt; [ 'perPage' =&gt; 20, ], \/\/ \u4f7f\u7528\u4f8b $perPage = config('app.pagination.perPage');<\/code><\/li>\n\n\n\n<li><strong>Facade \u3088\u308a\u3082\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u512a\u5148<\/strong><ul><li>\u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u306e\u5411\u4e0a\u306e\u305f\u3081\u3001\u53ef\u80fd\u306a\u9650\u308a\u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u4f7f\u7528<\/li><\/ul><code>\/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 public function __construct(UserRepository $users) { $this-&gt;users = $users; } \/\/ \u30e1\u30bd\u30c3\u30c9\u3067\u306e\u4f9d\u5b58\u6027\u6ce8\u5165 public function show(Request $request, $id, PostRepository $posts) { $post = $posts-&gt;findOrFail($id); \/\/ ... }<\/code><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-142\">\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u8a08\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u306a Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8a2d\u8a08\u3059\u308b\u969b\u306b\u306f\u3001\u521d\u671f\u6bb5\u968e\u304b\u3089\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u305f\u8a2d\u8a08\u3092\u884c\u3046\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u3067\u306f\u3001\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u8a08\u306e\u4e3b\u306a\u30dd\u30a4\u30f3\u30c8\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-143\">\u30c9\u30e1\u30a4\u30f3\u99c6\u52d5\u8a2d\u8a08\uff08DDD\uff09\u306e\u9069\u7528<\/h4>\n\n\n\n<p>\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u6301\u3064\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30c9\u30e1\u30a4\u30f3\u99c6\u52d5\u8a2d\u8a08\u306e\u8003\u3048\u65b9\u3092\u53d6\u308a\u5165\u308c\u308b\u3053\u3068\u304c\u52b9\u679c\u7684\u3067\u3059\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=\"\">app\/\n\u251c\u2500\u2500 Domain\/\n\u2502   \u251c\u2500\u2500 Users\/\n\u2502   \u2502   \u251c\u2500\u2500 Actions\/\n\u2502   \u2502   \u251c\u2500\u2500 DTOs\/\n\u2502   \u2502   \u251c\u2500\u2500 Events\/\n\u2502   \u2502   \u251c\u2500\u2500 Exceptions\/\n\u2502   \u2502   \u251c\u2500\u2500 Models\/\n\u2502   \u2502   \u251c\u2500\u2500 Repositories\/\n\u2502   \u2502   \u2514\u2500\u2500 Services\/\n\u2502   \u251c\u2500\u2500 Orders\/\n\u2502   \u2502   \u251c\u2500\u2500 ...\n\u2502   \u2514\u2500\u2500 Products\/\n\u2502       \u251c\u2500\u2500 ...\n\u251c\u2500\u2500 Http\/\n\u2502   \u251c\u2500\u2500 Controllers\/\n\u2502   \u251c\u2500\u2500 Middleware\/\n\u2502   \u2514\u2500\u2500 Requests\/\n\u251c\u2500\u2500 Infrastructure\/\n\u2502   \u251c\u2500\u2500 Logging\/\n\u2502   \u2514\u2500\u2500 Queue\/\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-144\">\u30ea\u30dd\u30b8\u30c8\u30ea\u30d1\u30bf\u30fc\u30f3\u306e\u6d3b\u7528<\/h4>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30a2\u30af\u30bb\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u30e2\u30c7\u30eb\u304b\u3089\u5206\u96e2\u3059\u308b\u30ea\u30dd\u30b8\u30c8\u30ea\u30d1\u30bf\u30fc\u30f3\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=\"\">\/\/ app\/Repositories\/Interfaces\/UserRepositoryInterface.php\ninterface UserRepositoryInterface\n{\n    public function getAll();\n    public function findById($id);\n    public function create(array $data);\n    public function update($id, array $data);\n    public function delete($id);\n}\n\n\/\/ app\/Repositories\/Eloquent\/UserRepository.php\nclass UserRepository implements UserRepositoryInterface\n{\n    protected $model;\n    \n    public function __construct(User $model)\n    {\n        $this-&gt;model = $model;\n    }\n    \n    public function getAll()\n    {\n        return $this-&gt;model-&gt;all();\n    }\n    \n    public function findById($id)\n    {\n        return $this-&gt;model-&gt;findOrFail($id);\n    }\n    \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            \\App\\Repositories\\Interfaces\\UserRepositoryInterface::class,\n            \\App\\Repositories\\Eloquent\\UserRepository::class\n        );\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-145\">\u30b5\u30fc\u30d3\u30b9\u30ec\u30a4\u30e4\u30fc\u306e\u5c0e\u5165<\/h4>\n\n\n\n<p>\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306f\u30b5\u30fc\u30d3\u30b9\u30af\u30e9\u30b9\u306b\u5206\u96e2\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3068\u30e2\u30c7\u30eb\u3092\u8efd\u91cf\u306b\u4fdd\u3066\u307e\u3059\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=\"\">\/\/ app\/Services\/OrderService.php\nclass OrderService\n{\n    protected $orders;\n    protected $products;\n    protected $mailer;\n    \n    public function __construct(\n        OrderRepository $orders,\n        ProductRepository $products,\n        MailService $mailer\n    ) {\n        $this-&gt;orders = $orders;\n        $this-&gt;products = $products;\n        $this-&gt;mailer = $mailer;\n    }\n    \n    public function createOrder(array $data, User $user)\n    {\n        \/\/ \u5728\u5eab\u30c1\u30a7\u30c3\u30af\n        $product = $this-&gt;products-&gt;findById($data['product_id']);\n        if (!$product-&gt;hasStock($data['quantity'])) {\n            throw new InsufficientStockException();\n        }\n        \n        \/\/ \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u51e6\u7406\n        DB::transaction(function () use ($data, $user, $product) {\n            \/\/ \u6ce8\u6587\u4f5c\u6210\n            $order = $this-&gt;orders-&gt;create([\n                'user_id' =&gt; $user-&gt;id,\n                'total' =&gt; $product-&gt;price * $data['quantity'],\n                \/\/ ...\n            ]);\n            \n            \/\/ \u6ce8\u6587\u8a73\u7d30\u306e\u4f5c\u6210\n            $order-&gt;items()-&gt;create([\n                'product_id' =&gt; $product-&gt;id,\n                'quantity' =&gt; $data['quantity'],\n                'price' =&gt; $product-&gt;price,\n            ]);\n            \n            \/\/ \u5728\u5eab\u306e\u66f4\u65b0\n            $product-&gt;decrementStock($data['quantity']);\n        });\n        \n        \/\/ \u30e1\u30fc\u30eb\u9001\u4fe1\n        $this-&gt;mailer-&gt;sendOrderConfirmation($order);\n        \n        return $order;\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-146\">\u30a4\u30d9\u30f3\u30c8\u3092\u6d3b\u7528\u3057\u305f\u758e\u7d50\u5408\u306a\u8a2d\u8a08<\/h4>\n\n\n\n<p>\u30b7\u30b9\u30c6\u30e0\u306e\u5404\u90e8\u5206\u3092\u758e\u7d50\u5408\u306b\u4fdd\u3064\u305f\u3081\u306e\u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u578b\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\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=\"\">\/\/ app\/Events\/OrderCreated.php\nclass OrderCreated\n{\n    use Dispatchable, InteractsWithSockets, SerializesModels;\n    \n    public $order;\n    \n    public function __construct(Order $order)\n    {\n        $this-&gt;order = $order;\n    }\n}\n\n\/\/ app\/Listeners\/SendOrderNotification.php\nclass SendOrderNotification\n{\n    public function handle(OrderCreated $event)\n    {\n        \/\/ \u6ce8\u6587\u901a\u77e5\u306e\u9001\u4fe1\n    }\n}\n\n\/\/ app\/Listeners\/UpdateInventory.php\nclass UpdateInventory\n{\n    public function handle(OrderCreated $event)\n    {\n        \/\/ \u5728\u5eab\u306e\u66f4\u65b0\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-147\">\u6c34\u5e73\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u305f\u3081\u306e\u30b9\u30c6\u30fc\u30c8\u30ec\u30b9\u8a2d\u8a08<\/h4>\n\n\n\n<p>\u8907\u6570\u30b5\u30fc\u30d0\u30fc\u3067\u306e\u5b9f\u884c\u3092\u524d\u63d0\u3068\u3057\u305f\u30b9\u30c6\u30fc\u30c8\u30ec\u30b9\u306a\u8a2d\u8a08\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u3092Redis\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306fS3\u306a\u3069\u306e\u5916\u90e8\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u4fdd\u5b58<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u306f\u5171\u6709\u53ef\u80fd\u306aRedis\u306a\u3069\u3092\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ config\/session.php\n'driver' =&gt; env('SESSION_DRIVER', 'redis'),\n\n\/\/ config\/cache.php\n'default' =&gt; env('CACHE_DRIVER', 'redis'),\n\n\/\/ config\/filesystems.php\n'default' =&gt; env('FILESYSTEM_DRIVER', 's3'),\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-148\">API \u8a2d\u8a08\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h4>\n\n\n\n<p>REST API\u3092\u8a2d\u8a08\u3059\u308b\u969b\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306aHTTP\u30e1\u30bd\u30c3\u30c9\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u7d71\u4e00\u3055\u308c\u305f\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u547d\u540d\u898f\u5247<\/li>\n\n\n\n<li>API \u30ea\u30bd\u30fc\u30b9\u30af\u30e9\u30b9\u306b\u3088\u308b\u30ec\u30b9\u30dd\u30f3\u30b9\u6574\u5f62<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Resources\/UserResource.php\nclass UserResource extends JsonResource\n{\n    public function toArray($request)\n    {\n        return [\n            'id' =&gt; $this-&gt;id,\n            'name' =&gt; $this-&gt;name,\n            'email' =&gt; $this-&gt;email,\n            'created_at' =&gt; $this-&gt;created_at-&gt;toIso8601String(),\n            'posts' =&gt; PostResource::collection($this-&gt;whenLoaded('posts')),\n        ];\n    }\n}\n\n\/\/ app\/Http\/Controllers\/API\/UserController.php\npublic function index()\n{\n    $users = User::with('posts')-&gt;paginate();\n    return UserResource::collection($users);\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-149\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5b9f\u88c5\u3068\u8106\u5f31\u6027\u5bfe\u7b56<\/h3>\n\n\n\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306f\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002Laravel \u306f\u591a\u304f\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3092\u6a19\u6e96\u3067\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u8ffd\u52a0\u306e\u5bfe\u7b56\u3092\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3055\u3089\u306b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5805\u7262\u5316\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-150\">\u57fa\u672c\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/h4>\n\n\n\n<p>Laravel \u304c\u6a19\u6e96\u3067\u63d0\u4f9b\u3059\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CSRF\u30d7\u30ed\u30c6\u30af\u30b7\u30e7\u30f3<\/strong> <code>\/\/ \u30d5\u30a9\u30fc\u30e0\u306bCSRF\u30c8\u30fc\u30af\u30f3\u3092\u542b\u3081\u308b &lt;form method=\"POST\" action=\"\/profile\"&gt; @csrf &lt;!-- \u30d5\u30a9\u30fc\u30e0\u30d5\u30a3\u30fc\u30eb\u30c9 --&gt; &lt;\/form&gt;<\/code><\/li>\n\n\n\n<li><strong>XSS\u5bfe\u7b56\uff08\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30b9\u30af\u30ea\u30d7\u30c6\u30a3\u30f3\u30b0\uff09<\/strong> <code>\/\/ Blade\u3067\u306e\u51fa\u529b\u306f\u81ea\u52d5\u3067\u30a8\u30b9\u30b1\u30fc\u30d7\u3055\u308c\u308b {{ $userInput }} \/\/ \u5b89\u5168 \/\/ \u30a8\u30b9\u30b1\u30fc\u30d7\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b\u5834\u5408\uff08\u4fe1\u983c\u3067\u304d\u308b\u5834\u5408\u306e\u307f\uff09 {!! $trustedHtml !!}<\/code><\/li>\n\n\n\n<li><strong>SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56<\/strong> <code>\/\/ \u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u3084Eloquent\u306f\u81ea\u52d5\u7684\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30d0\u30a4\u30f3\u30c9 User::where('email', $email)-&gt;first(); \/\/ \u5b89\u5168 \/\/ \u751f\u306eSQL\u30af\u30a8\u30ea\u3092\u4f7f\u3046\u5834\u5408\u306f\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\u3092\u4f7f\u7528 DB::select('SELECT * FROM users WHERE email = ?', [$email]); \/\/ \u5b89\u5168<\/code><\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-151\">\u8ffd\u52a0\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/h4>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u3055\u3089\u306b\u5805\u7262\u5316\u3059\u308b\u305f\u3081\u306e\u8ffd\u52a0\u5bfe\u7b56\uff1a<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-152\">HTTPS\u306e\u5f37\u5236<\/h5>\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 \u306e $middlewareGroups 'web' \u306b\u8ffd\u52a0\n\\App\\Http\\Middleware\\HttpsProtocol::class,\n\n\/\/ app\/Http\/Middleware\/HttpsProtocol.php\npublic function handle($request, Closure $next)\n{\n    if (!$request-&gt;secure() &amp;&amp; app()-&gt;environment('production')) {\n        return redirect()-&gt;secure($request-&gt;getRequestUri());\n    }\n    \n    return $next($request);\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-153\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d8\u30c3\u30c0\u306e\u8a2d\u5b9a<\/h5>\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\/SecurityHeaders.php\npublic function handle($request, Closure $next)\n{\n    $response = $next($request);\n    \n    $response-&gt;headers-&gt;set('X-Content-Type-Options', 'nosniff');\n    $response-&gt;headers-&gt;set('X-Frame-Options', 'SAMEORIGIN');\n    $response-&gt;headers-&gt;set('X-XSS-Protection', '1; mode=block');\n    \n    return $response;\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-154\">\u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30e5\u5316<\/h5>\n\n\n\n<p>Laravel \u306f\u81ea\u52d5\u7684\u306b\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30cf\u30c3\u30b7\u30e5\u5316\u3057\u307e\u3059\u304c\u3001\u30ab\u30b9\u30bf\u30e0\u5b9f\u88c5\u3059\u308b\u5834\u5408\u306f\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=\"\">\/\/ \u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30cf\u30c3\u30b7\u30e5\u5316\n$hashedPassword = Hash::make($password);\n\n\/\/ \u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u691c\u8a3c\nif (Hash::check($password, $hashedPassword)) {\n    \/\/ \u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e00\u81f4\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-155\">\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/h5>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u89b3\u70b9\u304b\u3089\u3082\u3001\u3059\u3079\u3066\u306e\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u3092\u53b3\u683c\u306b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\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=\"\">$validated = $request-&gt;validate([\n    'email' =&gt; 'required|email',\n    'password' =&gt; 'required|min:8|regex:\/^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).+$\/',\n    'content' =&gt; 'required|string|max:1000',\n]);\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-156\">\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/h5>\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=\"\">\/\/ \u30d5\u30a1\u30a4\u30eb\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\n$request-&gt;validate([\n    'document' =&gt; 'required|file|mimes:pdf,doc,docx|max:10240',\n]);\n\n\/\/ \u5b89\u5168\u306a\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u751f\u6210\n$filename = $file-&gt;hashName();\n\n\/\/ \u516c\u958b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u306f\u306a\u304f\u3001\u975e\u516c\u958b\u30b9\u30c8\u30ec\u30fc\u30b8\u306b\u4fdd\u5b58\n$path = $request-&gt;file('document')-&gt;store('documents');\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-157\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u76e3\u67fb\u3068\u30b9\u30ad\u30e3\u30f3<\/h5>\n\n\n\n<p>\u5b9a\u671f\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af\u306e\u305f\u3081\u306e\u30c4\u30fc\u30eb\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/enlightn\/laravel-security-checker\">Laravel Security Checker<\/a> \u2013 \u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u8106\u5f31\u6027\u3092\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li><a href=\"https:\/\/www.laravel-enlightn.com\/\">Enlightn<\/a> \u2013 Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3001\u4fe1\u983c\u6027\u306e\u554f\u984c\u3092\u81ea\u52d5\u7684\u306b\u691c\u51fa<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-158\">\u8a8d\u53ef\u3068\u30a2\u30af\u30bb\u30b9\u5236\u5fa1<\/h5>\n\n\n\n<p>\u304d\u3081\u7d30\u304b\u306a\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u306e\u305f\u3081\u306e\u30dd\u30ea\u30b7\u30fc\u3068\u30b2\u30fc\u30c8\u306e\u5b9f\u88c5\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=\"\">\/\/ \u30dd\u30ea\u30b7\u30fc\u306e\u5b9a\u7fa9\nclass PostPolicy\n{\n    public function update(User $user, Post $post)\n    {\n        return $user-&gt;id === $post-&gt;user_id;\n    }\n}\n\n\/\/ \u30b2\u30fc\u30c8\u306e\u5b9a\u7fa9\nGate::define('admin-access', function (User $user) {\n    return $user-&gt;isAdmin();\n});\n\n\/\/ \u4f7f\u7528\u4f8b\nif ($user-&gt;can('update', $post)) {\n    \/\/ \u66f4\u65b0\u6a29\u9650\u3042\u308a\n}\n\nif (Gate::allows('admin-access')) {\n    \/\/ \u7ba1\u7406\u8005\u6a29\u9650\u3042\u308a\n}\n<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3084\u30d1\u30bf\u30fc\u30f3\u3092\u9069\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4fdd\u5b88\u6027\u304c\u9ad8\u304f\u3001\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u3067\u3001\u5b89\u5168\u306a Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u8a2d\u8a08\u306e\u521d\u671f\u6bb5\u968e\u304b\u3089\u3053\u308c\u3089\u306e\u539f\u5247\u3092\u5ff5\u982d\u306b\u7f6e\u304f\u3053\u3068\u3067\u3001\u5c06\u6765\u306e\u62e1\u5f35\u3084\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u304c\u5bb9\u6613\u306b\u306a\u308a\u3001\u9577\u671f\u7684\u306a\u958b\u767a\u30b3\u30b9\u30c8\u3092\u524a\u6e1b\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002\u307e\u305f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3092\u5fb9\u5e95\u3059\u308b\u3053\u3068\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf\u3092\u5b88\u308a\u3001\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-159\">Laravel\u3068PHP\u306e\u4ed6\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u6bd4\u8f03<\/h2>\n\n\n\n<p>PHP \u306b\u306f Laravel \u4ee5\u5916\u306b\u3082\u591a\u304f\u306e\u512a\u308c\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6027\u8cea\u3084\u8981\u4ef6\u306b\u3088\u3063\u3066\u3001\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u7570\u306a\u308b\u305f\u3081\u3001\u4e3b\u8981\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u5fb4\u3068\u6bd4\u8f03\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u306f\u91cd\u8981\u3067\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u3068\u4ed6\u306e PHP \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u7279\u306b Symfony \u3068 CodeIgniter \u3068\u306e\u6bd4\u8f03\u3092\u884c\u3044\u3001\u9069\u5207\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u305f\u3081\u306e\u5224\u65ad\u57fa\u6e96\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-160\">Symfony\u3068Laravel\u306e\u9055\u3044\u3068\u9078\u629e\u57fa\u6e96<\/h3>\n\n\n\n<p>Symfony \u3068 Laravel \u306f\u3069\u3061\u3089\u3082\u9ad8\u54c1\u8cea\u306a PHP \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u304c\u3001\u8a2d\u8a08\u601d\u60f3\u3084\u4e3b\u306a\u7528\u9014\u306b\u304a\u3044\u3066\u9055\u3044\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-161\">\u57fa\u672c\u7684\u306a\u7279\u5fb4\u6bd4\u8f03<\/h4>\n\n\n<div id=\"id-583c54af-2a9b-4b6c-ba3a-e40902eabf0c\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u5fb4<\/th><th>Laravel<\/th><th>Symfony<\/th><\/tr><\/thead><tbody><tr><td><strong>\u521d\u30ea\u30ea\u30fc\u30b9<\/strong><\/td><td>2011\u5e74<\/td><td>2005\u5e74<\/td><\/tr><tr><td><strong>\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3<\/strong><\/td><td>Laravel 10.x<\/td><td>Symfony 6.x<\/td><\/tr><tr><td><strong>\u8a2d\u8a08\u601d\u60f3<\/strong><\/td><td>\u958b\u767a\u8005\u306e\u5e78\u798f\u5ea6\u3092\u91cd\u8996<\/td><td>\u5805\u7262\u6027\u3068\u67d4\u8edf\u6027\u3092\u91cd\u8996<\/td><\/tr><tr><td><strong>\u5b66\u7fd2\u66f2\u7dda<\/strong><\/td><td>\u6bd4\u8f03\u7684\u306a\u3060\u3089\u304b<\/td><td>\u6bd4\u8f03\u7684\u6025<\/td><\/tr><tr><td><strong>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u69cb\u9020<\/strong><\/td><td>\u30e2\u30ce\u30ea\u30b7\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\uff08\u63a8\u5968\u69cb\u6210\u3042\u308a\uff09<\/td><td>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\uff08\u5fc5\u8981\u306a\u3082\u306e\u3092\u9078\u629e\uff09<\/td><\/tr><tr><td><strong>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3<\/strong><\/td><td>\u521d\u5fc3\u8005\u306b\u3082\u5206\u304b\u308a\u3084\u3059\u3044<\/td><td>\u8a73\u7d30\u3060\u304c\u6280\u8853\u7684<\/td><\/tr><tr><td><strong>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3<\/strong><\/td><td>\u975e\u5e38\u306b\u6d3b\u767a\u3001\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u8c4a\u5bcc<\/td><td>\u5805\u5b9f\u3067\u4f01\u696d\u5c0e\u5165\u304c\u591a\u3044<\/td><\/tr><tr><td><strong>\u4e3b\u306a\u7528\u9014<\/strong><\/td><td>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001API\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u8907\u96d1\u306a\u30b7\u30b9\u30c6\u30e0<\/td><\/tr><tr><td><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong><\/td><td>\u512a\u308c\u3066\u3044\u308b\uff08\u6700\u9069\u5316\u304c\u5fc5\u8981\u306a\u5834\u5408\u3042\u308a\uff09<\/td><td>\u512a\u308c\u3066\u3044\u308b\uff08\u8a2d\u5b9a\u6b21\u7b2c\uff09<\/td><\/tr><tr><td><strong>\u958b\u767a\u901f\u5ea6<\/strong><\/td><td>\u9ad8\u901f\uff08\u898f\u7d04\u512a\u5148\uff09<\/td><td>\u3084\u3084\u6642\u9593\u304c\u304b\u304b\u308b\uff08\u67d4\u8edf\u6027\u91cd\u8996\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"i-162\">Laravel\u30de\u30b9\u30bf\u30fc\u3078\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/h2>\n\n\n\n<p>Laravel \u306e\u57fa\u672c\u304b\u3089\u5fdc\u7528\u307e\u3067\u5e45\u5e83\u304f\u5b66\u3093\u3067\u304d\u307e\u3057\u305f\u304c\u3001\u771f\u306e\u30de\u30b9\u30bf\u30fc\u3078\u306e\u9053\u306f\u307e\u3060\u7d9a\u3044\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Laravel \u306e\u30b9\u30ad\u30eb\u3092\u3055\u3089\u306b\u9ad8\u3081\u308b\u305f\u3081\u306e\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u3001\u304a\u3059\u3059\u3081\u306e\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3001\u6700\u65b0\u306e\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u7d71\u5408\u6280\u8853\u3001\u305d\u3057\u3066\u5b9f\u52d9\u3067\u6d3b\u304b\u305b\u308b\u30b9\u30ad\u30eb\u30a2\u30c3\u30d7\u6226\u7565\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-163\">\u304a\u3059\u3059\u3081\u306e\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3<\/h3>\n\n\n\n<p>Laravel \u306e\u5b66\u7fd2\u3092\u7d99\u7d9a\u3057\u3001\u6700\u65b0\u60c5\u5831\u3092\u30ad\u30e3\u30c3\u30c1\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306e\u512a\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-164\">\u516c\u5f0f\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>Laravel \u306e\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30ea\u30bd\u30fc\u30b9\u306f\u3001\u5e38\u306b\u6700\u65b0\u304b\u3064\u6b63\u78ba\u306a\u60c5\u5831\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/laravel.com\/docs\">Laravel \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5e38\u306b\u6700\u65b0\u7248\u3092\u53c2\u7167\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059<\/li>\n\n\n\n<li>API \u30ea\u30d5\u30a1\u30ec\u30f3\u30b9\u3082\u542b\u307e\u308c\u3066\u304a\u308a\u3001\u8a73\u7d30\u306a\u6a5f\u80fd\u4ed5\u69d8\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/laravel-news.com\/\">Laravel News<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>Laravel \u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u6700\u65b0\u30cb\u30e5\u30fc\u30b9<\/li>\n\n\n\n<li>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3084\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u7d39\u4ecb\u8a18\u4e8b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/forge.laravel.com\/\">Laravel Forge<\/a><\/strong> \u3068 <strong><a href=\"https:\/\/envoyer.io\/\">Laravel Envoyer<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30b5\u30fc\u30d0\u30fc\u7ba1\u7406\u3068\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u30c4\u30fc\u30eb<\/li>\n\n\n\n<li>\u5b9f\u904b\u7528\u74b0\u5883\u3067\u306e Laravel \u306e\u6d3b\u7528\u65b9\u6cd5\u3092\u5b66\u3079\u307e\u3059<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-165\">\u5b66\u7fd2\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/h4>\n\n\n\n<p>\u4f53\u7cfb\u7684\u306a\u5b66\u7fd2\u306e\u305f\u3081\u306e\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/laracasts.com\/\">Laracasts<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>Jeffrey Way \u306b\u3088\u308b\u8cea\u306e\u9ad8\u3044\u30d3\u30c7\u30aa\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/li>\n\n\n\n<li>\u521d\u5fc3\u8005\u304b\u3089\u4e0a\u7d1a\u8005\u307e\u3067\u5e45\u5e83\u3044\u30b3\u30f3\u30c6\u30f3\u30c4<\/li>\n\n\n\n<li>Laravel \u3060\u3051\u3067\u306a\u304f\u3001\u95a2\u9023\u6280\u8853\u3082\u591a\u6570\u30ab\u30d0\u30fc<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/laraveldaily.com\/\">Laravel Daily<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>Povilas Korop \u306b\u3088\u308b\u5b9f\u8df5\u7684\u306a\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/li>\n\n\n\n<li>\u5b9f\u52d9\u3067\u5f79\u7acb\u3064Tips\u3084\u5177\u4f53\u7684\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/spatie.be\/open-source\">Spatie<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u9ad8\u54c1\u8cea\u306a Laravel \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u591a\u6570\u516c\u958b<\/li>\n\n\n\n<li>\u30d6\u30ed\u30b0\u3067\u306f\u6df1\u3044\u6280\u8853\u30c8\u30d4\u30c3\u30af\u3092\u89e3\u8aac<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/course.testdrivenlaravel.com\/\">Test-Driven Laravel<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>Adam Wathan \u306b\u3088\u308b TDD \u3092\u4e2d\u5fc3\u3068\u3057\u305f Laravel \u958b\u767a\u306e\u5b66\u7fd2<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-166\">\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u4ea4\u6d41\u306e\u5834<\/h4>\n\n\n\n<p>Laravel \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3057\u3001\u4ed6\u306e\u958b\u767a\u8005\u3068\u4ea4\u6d41\u3059\u308b\u3053\u3068\u3067\u3001\u5b66\u7fd2\u3092\u52a0\u901f\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/laravel.io\/\">Laravel.io<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30a9\u30fc\u30e9\u30e0\u3068\u30e1\u30f3\u30bf\u30ea\u30f3\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/li>\n\n\n\n<li>\u8cea\u554f\u56de\u7b54\u3084\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u304c\u53ef\u80fd<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/www.reddit.com\/r\/laravel\/\">Reddit r\/laravel<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u6d3b\u767a\u306a\u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3\u30b3\u30df\u30e5\u30cb\u30c6\u30a3<\/li>\n\n\n\n<li>\u6700\u65b0\u306e\u30c8\u30ec\u30f3\u30c9\u3084\u8ab2\u984c\u306e\u5171\u6709<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/laracon.net\/\">Laracon<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>Laravel \u306e\u516c\u5f0f\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9<\/li>\n\n\n\n<li>\u9332\u753b\u30bb\u30c3\u30b7\u30e7\u30f3\u306f\u30aa\u30f3\u30e9\u30a4\u30f3\u3067\u8996\u8074\u53ef\u80fd<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/larachat.co\/\">Laravel Slack<\/a><\/strong> \u3068 <strong><a href=\"https:\/\/discord.gg\/laravel\">Discord<\/a><\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30c7\u30a3\u30b9\u30ab\u30c3\u30b7\u30e7\u30f3\u3068\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u7d4c\u9a13\u8c4a\u5bcc\u306a\u958b\u767a\u8005\u304b\u3089\u306e\u30a2\u30c9\u30d0\u30a4\u30b9\u304c\u5f97\u3089\u308c\u308b<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-167\">\u66f8\u7c4d\u3068\u30aa\u30f3\u30e9\u30a4\u30f3\u30b3\u30fc\u30b9<\/h4>\n\n\n\n<p>\u3088\u308a\u4f53\u7cfb\u7684\u306b\u5b66\u3076\u305f\u3081\u306e\u66f8\u7c4d\u3068\u30b3\u30fc\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Laravel \u5b9f\u8df5\u958b\u767a\u30ac\u30a4\u30c9<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u57fa\u672c\u304b\u3089\u5fdc\u7528\u307e\u3067\u30ab\u30d0\u30fc\u3057\u305f\u5165\u9580\u66f8<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Mastering Laravel<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u4e0a\u7d1a\u8005\u5411\u3051\u306e\u6df1\u3044\u77e5\u8b58\u3068\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/www.udemy.com\/\">Udemy<\/a><\/strong> \u3084 <strong><a href=\"https:\/\/www.pluralsight.com\/\">Pluralsight<\/a><\/strong> \u306e\u30b3\u30fc\u30b9\n<ul class=\"wp-block-list\">\n<li>\u5e45\u5e83\u3044\u30c8\u30d4\u30c3\u30af\u3068\u96e3\u6613\u5ea6\u306e\u30b3\u30fc\u30b9\u304c\u63c3\u3063\u3066\u3044\u308b<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-168\">Laravel\u3068Vue.js\/React.js\u306e\u7d71\u5408\u3067\u6700\u65b0\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u958b\u767a<\/h3>\n\n\n\n<p>\u73fe\u4ee3\u306e\u30a6\u30a7\u30d6\u958b\u767a\u3067\u306f\u3001Laravel \u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u30e2\u30c0\u30f3\u306aJavaScript\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u4e00\u822c\u7684\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001Laravel \u3068\u4e3b\u8981\u306a\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7d71\u5408\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-169\">Laravel \u3068 Vue.js \u306e\u7d71\u5408<\/h4>\n\n\n\n<p>Laravel \u306f\u6b74\u53f2\u7684\u306b Vue.js \u3068\u306e\u89aa\u548c\u6027\u304c\u9ad8\u304f\u3001\u7c21\u5358\u306b\u7d71\u5408\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-170\">\u57fa\u672c\u7684\u306a\u7d71\u5408\u65b9\u6cd5<\/h5>\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 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\nlaravel new my-project\n\n# Vue.js \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nnpm install vue@next\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=\"\">\/\/ resources\/js\/app.js\nimport { createApp } from 'vue';\nimport ExampleComponent from '.\/components\/ExampleComponent.vue';\n\nconst app = createApp({});\napp.component('example-component', ExampleComponent);\napp.mount('#app');\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=\"\">&lt;!-- Blade \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3067\u306e\u4f7f\u7528 --&gt;\n&lt;div id=\"app\"&gt;\n    &lt;example-component&gt;&lt;\/example-component&gt;\n&lt;\/div&gt;\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-171\">Laravel Jetstream \u3092\u4f7f\u3063\u305f\u7d71\u5408<\/h5>\n\n\n\n<p>Laravel Jetstream \u306f InertiaJS \u307e\u305f\u306f Livewire \u3092\u4f7f\u3063\u305f \u30e2\u30c0\u30f3\u306a UI \u30b9\u30bf\u30fc\u30bf\u30fc\u30ad\u30c3\u30c8\u3067\u3059\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=\"\"># Jetstream \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb (Inertia + Vue.js)\ncomposer require laravel\/jetstream\nphp artisan jetstream:install inertia\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-172\">\u5b9f\u7528\u7684\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u4f8b<\/h5>\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\/js\/Components\/DataTable.vue --&gt;\n&lt;template&gt;\n  &lt;div&gt;\n    &lt;table class=\"table\"&gt;\n      &lt;thead&gt;\n        &lt;tr&gt;\n          &lt;th v-for=\"column in columns\" :key=\"column\"&gt;{{ column }}&lt;\/th&gt;\n        &lt;\/tr&gt;\n      &lt;\/thead&gt;\n      &lt;tbody&gt;\n        &lt;tr v-for=\"(row, index) in data\" :key=\"index\"&gt;\n          &lt;td v-for=\"column in columns\" :key=\"column\"&gt;{{ row[column] }}&lt;\/td&gt;\n        &lt;\/tr&gt;\n      &lt;\/tbody&gt;\n    &lt;\/table&gt;\n    &lt;div class=\"pagination\"&gt;\n      &lt;!-- \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb --&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script&gt;\nexport default {\n  props: {\n    columns: Array,\n    endpoint: String\n  },\n  data() {\n    return {\n      data: [],\n      page: 1\n    }\n  },\n  methods: {\n    fetchData() {\n      axios.get(`${this.endpoint}?page=${this.page}`)\n        .then(response =&gt; {\n          this.data = response.data.data;\n        });\n    }\n  },\n  mounted() {\n    this.fetchData();\n  }\n}\n&lt;\/script&gt;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-173\">Laravel \u3068 React.js \u306e\u7d71\u5408<\/h4>\n\n\n\n<p>React.js \u3082\u307e\u305f Laravel \u3068\u5f37\u529b\u306b\u7d71\u5408\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-174\">\u57fa\u672c\u7684\u306a\u7d71\u5408\u65b9\u6cd5<\/h5>\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=\"\"># React \u3068\u95a2\u9023\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nnpm install react react-dom @babel\/preset-react\n<\/pre>\n\n\n\n<p>Webpack \u306e\u8a2d\u5b9a\uff08webpack.mix.js\uff09\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=\"\">\/\/ webpack.mix.js\nmix.js('resources\/js\/app.js', 'public\/js')\n   .react()\n   .sass('resources\/sass\/app.scss', 'public\/css');\n<\/pre>\n\n\n\n<p>React \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u4f5c\u6210\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=\"\">\/\/ resources\/js\/components\/Example.jsx\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nfunction Example() {\n    return (\n        &lt;div className=\"container\"&gt;\n            &lt;div className=\"row justify-content-center\"&gt;\n                &lt;div className=\"col-md-8\"&gt;\n                    &lt;div className=\"card\"&gt;\n                        &lt;div className=\"card-header\"&gt;Example Component&lt;\/div&gt;\n                        &lt;div className=\"card-body\"&gt;I'm a React component!&lt;\/div&gt;\n                    &lt;\/div&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    );\n}\n\nexport default Example;\n\nif (document.getElementById('example')) {\n    ReactDOM.render(&lt;Example \/&gt;, document.getElementById('example'));\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-175\">Laravel Breeze \u306e React \u30b9\u30bf\u30fc\u30bf\u30fc\u30ad\u30c3\u30c8<\/h5>\n\n\n\n<p>Laravel Breeze \u306f React.js \u7528\u306e\u30b9\u30bf\u30fc\u30bf\u30fc\u30ad\u30c3\u30c8\u3082\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\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=\"\">composer require laravel\/breeze --dev\nphp artisan breeze:install react\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-176\">SPA \u3068 API \u306e\u958b\u767a<\/h4>\n\n\n\n<p>Laravel \u3092 API \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066\u4f7f\u7528\u3057\u3001\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3092\u5b8c\u5168\u306b\u5206\u96e2\u3057\u305fSPA\uff08Single Page Application\uff09\u306e\u958b\u767a\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Laravel Sanctum \u3092\u4f7f\u3063\u305f\u8a8d\u8a3c<\/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=\"\">composer require laravel\/sanctum\nphp artisan vendor:publish --provider=\"Laravel\\Sanctum\\SanctumServiceProvider\"\nphp artisan migrate\n<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>API \u30eb\u30fc\u30c8\u306e\u5b9a\u7fa9<\/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=\"\">\/\/ routes\/api.php\nRoute::middleware('auth:sanctum')-&gt;group(function () {\n    Route::get('\/users', [UserController::class, 'index']);\n    Route::post('\/users', [UserController::class, 'store']);\n    \/\/ \u305d\u306e\u4ed6\u306eAPI\uc5d4\ub4dc\ud3ec\uc778\ud2b8\n});\n\nRoute::post('\/login', [AuthController::class, 'login']);\n<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u304b\u3089\u306eAPI\u547c\u3073\u51fa\u3057 (React\u4f8b)<\/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=\"\">\/\/ React \u3067\u306eAPI\u547c\u3073\u51fa\u3057\u4f8b\nimport axios from 'axios';\n\n\/\/ API\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8a2d\u5b9a\nconst api = axios.create({\n    baseURL: 'http:\/\/localhost:8000\/api',\n    withCredentials: true, \/\/ CSRF\u4fdd\u8b77\u306e\u305f\u3081\u306ecookie\u9001\u4fe1\n});\n\n\/\/ \u30ed\u30b0\u30a4\u30f3\u6a5f\u80fd\nconst login = async (email, password) =&gt; {\n    try {\n        \/\/ CSRF\u30c8\u30fc\u30af\u30f3\u306e\u53d6\u5f97\n        await axios.get('\/sanctum\/csrf-cookie');\n        \n        \/\/ \u30ed\u30b0\u30a4\u30f3\n        const response = await api.post('\/login', { email, password });\n        return response.data;\n    } catch (error) {\n        console.error('Login failed', error);\n        throw error;\n    }\n};\n\n\/\/ \u8a8d\u8a3c\u6e08\u307f\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u4f8b\nconst getUsers = async () =&gt; {\n    try {\n        const response = await api.get('\/users');\n        return response.data;\n    } catch (error) {\n        console.error('Failed to fetch users', error);\n        throw error;\n    }\n};\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-177\">\u5b9f\u52d9\u3067\u6d3b\u304b\u305b\u308bLaravel\u30b9\u30ad\u30eb\u30a2\u30c3\u30d7\u6226\u7565<\/h3>\n\n\n\n<p>\u5b9f\u52d9\u3067Laravel\u30b9\u30ad\u30eb\u3092\u6d3b\u304b\u3057\u3001\u3055\u3089\u306b\u30ad\u30e3\u30ea\u30a2\u30a2\u30c3\u30d7\u3059\u308b\u305f\u3081\u306e\u6226\u7565\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-178\">\u5b9f\u8df5\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7d4c\u9a13\u3092\u7a4d\u3080<\/h4>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u7d4c\u9a13\u3092\u7a4d\u3080\u3053\u3068\u304c\u6700\u3082\u52b9\u679c\u7684\u306a\u5b66\u7fd2\u65b9\u6cd5\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u500b\u4eba\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u958b\u767a<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30a4\u30c7\u30a2\u3092\u5f62\u306b\u3059\u308b\u5c0f\u301c\u4e2d\u898f\u6a21\u306e\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>GitHub \u306b\u516c\u958b\u3057\u3066\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u306b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3078\u306e\u8ca2\u732e<\/strong>\n<ul class=\"wp-block-list\">\n<li>Laravel \u95a2\u9023\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3084\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u8ca2\u732e<\/li>\n\n\n\n<li>\u30d0\u30b0\u4fee\u6b63\u3084\u6a5f\u80fd\u8ffd\u52a0\u304b\u3089\u59cb\u3081\u308b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30ef\u30fc\u30af\u3084\u696d\u52d9\u30b7\u30b9\u30c6\u30e0\u958b\u767a<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u969b\u306e\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u306b\u57fa\u3065\u3044\u305f\u958b\u767a\u7d4c\u9a13<\/li>\n\n\n\n<li>\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u7ba1\u7406\u3084\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u306e\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-179\">\u5c02\u9580\u5206\u91ce\u306e\u6df1\u6398\u308a<\/h4>\n\n\n\n<p>Laravel \u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u5185\u3067\u7279\u5b9a\u306e\u5c02\u9580\u5206\u91ce\u3092\u6df1\u6398\u308a\u3059\u308b\u3053\u3068\u3067\u3001\u5e0c\u5c11\u4fa1\u5024\u3092\u9ad8\u3081\u3089\u308c\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u30b9\u30da\u30b7\u30e3\u30ea\u30b9\u30c8<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u30c4\u30fc\u30eb\u306e\u7fd2\u719f<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3084\u30af\u30a8\u30ea\u6700\u9069\u5316\u306e\u5c02\u9580\u77e5\u8b58<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5c02\u9580\u5bb6<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u8106\u5f31\u6027\u8a3a\u65ad\u3068\u5bfe\u7b56<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30a2\u306a\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u624b\u6cd5\u306e\u7fd2\u5f97<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30c6\u30b9\u30c8\u81ea\u52d5\u5316\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8<\/strong>\n<ul class=\"wp-block-list\">\n<li>TDD\u306e\u6df1\u3044\u7406\u89e3\u3068\u5b9f\u8df5<\/li>\n\n\n\n<li>CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u8a08<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n\n\n\n<li>\u30c9\u30e1\u30a4\u30f3\u99c6\u52d5\u8a2d\u8a08(DDD)\u306e\u5b9f\u8df5<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-180\">\u8cc7\u683c\u3068\u30b9\u30ad\u30eb\u8a8d\u8a3c<\/h4>\n\n\n\n<p>\u30b9\u30ad\u30eb\u30ec\u30d9\u30eb\u3092\u5ba2\u89b3\u7684\u306b\u793a\u3059\u8cc7\u683c\u3084\u30b9\u30ad\u30eb\u8a8d\u8a3c\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>PHP \u95a2\u9023\u8cc7\u683c<\/strong>\n<ul class=\"wp-block-list\">\n<li>Zend PHP Certification<\/li>\n\n\n\n<li>Laravel Certification (\u73fe\u5728\u306f\u516c\u5f0f\u8a8d\u5b9a\u306f\u306a\u3044\u304c\u3001\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u63d0\u4f9b\u3042\u308a)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>AWS \u8a8d\u5b9a\u8cc7\u683c<\/strong>\n<ul class=\"wp-block-list\">\n<li>Laravel \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30d7\u30ed\u30a4\u3068\u904b\u7528\u306b\u5f79\u7acb\u3064<\/li>\n\n\n\n<li>Solutions Architect \u3084 Developer Associate<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30aa\u30f3\u30e9\u30a4\u30f3\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u306e\u30b9\u30ad\u30eb\u8a3c\u660e<\/strong>\n<ul class=\"wp-block-list\">\n<li>GitHub \u3067\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u8ca2\u732e<\/li>\n\n\n\n<li>Stack Overflow \u3067\u306e\u8cea\u554f\u56de\u7b54<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-181\">\u30ad\u30e3\u30ea\u30a2\u30d1\u30b9\u3068\u30b9\u30c6\u30c3\u30d7\u30a2\u30c3\u30d7<\/h4>\n\n\n\n<p>Laravel \u30b9\u30ad\u30eb\u3092\u6d3b\u304b\u3057\u305f\u30ad\u30e3\u30ea\u30a2\u30d1\u30b9\u3068\u6210\u9577\u6226\u7565\uff1a<\/p>\n\n\n<div id=\"id-8838de32-2192-4f27-87cf-5dc1b08cc2e0\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30ad\u30e3\u30ea\u30a2\u30ec\u30d9\u30eb<\/th><th>\u4e3b\u306a\u5f79\u5272\u3068\u8cac\u4efb<\/th><th>\u8eab\u306b\u3064\u3051\u308b\u3079\u304d\u30b9\u30ad\u30eb<\/th><\/tr><\/thead><tbody><tr><td><strong>\u521d\u7d1a\u958b\u767a\u8005<\/strong><\/td><td>\u30fb\u57fa\u672c\u7684\u306a\u6a5f\u80fd\u5b9f\u88c5&lt;br&gt;\u30fb\u30d0\u30b0\u4fee\u6b63&lt;br&gt;\u30fb\u5358\u4f53\u30c6\u30b9\u30c8<\/td><td>\u30fbLaravel \u57fa\u672c\u6a5f\u80fd\u306e\u7fd2\u719f&lt;br&gt;\u30fbGit \u64cd\u4f5c&lt;br&gt;\u30fb\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04<\/td><\/tr><tr><td><strong>\u4e2d\u7d1a\u958b\u767a\u8005<\/strong><\/td><td>\u30fb\u8907\u96d1\u306a\u6a5f\u80fd\u8a2d\u8a08\u3068\u5b9f\u88c5&lt;br&gt;\u30fb\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316&lt;br&gt;\u30fb\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc<\/td><td>\u30fb\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3&lt;br&gt;\u30fb\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a&lt;br&gt;\u30fbAPI\u8a2d\u8a08<\/td><\/tr><tr><td><strong>\u4e0a\u7d1a\u958b\u767a\u8005<\/strong><\/td><td>\u30fb\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08&lt;br&gt;\u30fb\u6280\u8853\u9078\u5b9a&lt;br&gt;\u30fb\u30c1\u30fc\u30e0\u6307\u5c0e<\/td><td>\u30fb\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u5bfe\u7b56&lt;br&gt;\u30fb\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56&lt;br&gt;\u30fb\u6700\u65b0\u6280\u8853\u30c8\u30ec\u30f3\u30c9<\/td><\/tr><tr><td><strong>\u30ea\u30fc\u30c9\u30a8\u30f3\u30b8\u30cb\u30a2<\/strong><\/td><td>\u30fb\u6280\u8853\u6226\u7565\u7b56\u5b9a&lt;br&gt;\u30fb\u30c1\u30fc\u30e0\u30de\u30cd\u30b8\u30e1\u30f3\u30c8&lt;br&gt;\u30fb\u54c1\u8cea\u7ba1\u7406<\/td><td>\u30fb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406&lt;br&gt;\u30fb\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08&lt;br&gt;\u30fb\u30c1\u30fc\u30e0\u30d3\u30eb\u30c7\u30a3\u30f3\u30b0<\/td><\/tr><tr><td><strong>\u30c6\u30c3\u30af\u30ea\u30fc\u30c9\/CTO<\/strong><\/td><td>\u30fb\u6280\u8853\u30d3\u30b8\u30e7\u30f3\u7b56\u5b9a&lt;br&gt;\u30fb\u6280\u8853\u9078\u5b9a&lt;br&gt;\u30fb\u793e\u5185\u6a19\u6e96\u5316<\/td><td>\u30fb\u30d3\u30b8\u30cd\u30b9\u6226\u7565\u7406\u89e3&lt;br&gt;\u30fb\u30ea\u30bd\u30fc\u30b9\u7ba1\u7406&lt;br&gt;\u30fb\u6280\u8853\u30c8\u30ec\u30f3\u30c9\u5206\u6790<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>","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-3460","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\/3460","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=3460"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3460\/revisions"}],"predecessor-version":[{"id":3462,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3460\/revisions\/3462"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3460"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3460"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}