{"id":2518,"date":"2025-03-24T08:47:07","date_gmt":"2025-03-23T23:47:07","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=2518"},"modified":"2025-03-24T08:47:37","modified_gmt":"2025-03-23T23:47:37","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91laravel-breeze%e3%81%a7%e4%bd%9c%e3%82%8b%e6%9c%80%e5%bc%b7%e3%81%ae%e8%aa%8d%e8%a8%bc%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%ef%bc%81%e5%88%9d%e6%9c%9f","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=2518","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Laravel Breeze\u3067\u4f5c\u308b\u6700\u5f37\u306e\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\uff01\u521d\u671f\u8a2d\u5b9a\u304b\u3089\u5b9f\u8df5\u7684\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u307e\u3067\u5b8c\u5168\u89e3\u8aac"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Laravel Breeze\u3068\u306f\uff1f\u62bc\u3055\u3048\u308b\u3079\u304d\u57fa\u790e\u77e5\u8b58<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">Laravel Breeze\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u8ab2\u984c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u5f93\u6765\u306e\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u6c7a\u5b9a\u7684\u306a\u9055\u3044<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">Laravel Breeze\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3092\u5fb9\u5e95\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u74b0\u5883\u69cb\u7bc9\u3067\u5931\u6557\u3057\u306a\u3044\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">\u521d\u671f\u8a2d\u5b9a\u306e\u6700\u9069\u306a\u9032\u3081\u65b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">\u8a8d\u8a3c\u6a5f\u80fd\u306e\u5b9f\u88c5\u30b9\u30c6\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u6a5f\u80fd\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-9\">\u30ed\u30b0\u30a4\u30f3\u6a5f\u80fd\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u6a5f\u80fd\u306e\u8ffd\u52a0<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">Laravel Breeze\u306e\u5b9f\u8df5\u7684\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u8853<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u8a8d\u8a3c\u753b\u9762\u306e\u30c7\u30b6\u30a4\u30f3\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u30e6\u30fc\u30b6\u30fc\u30ed\u30fc\u30eb\u6a5f\u80fd\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u591a\u8981\u7d20\u8a8d\u8a3c\u306e\u8ffd\u52a0\u624b\u9806<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">Laravel Breeze\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-18\">Laravel Breeze\u3092\u4f7f\u3063\u305f\u5b9f\u8df5\u7684\u306a\u958b\u767a\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">EC\u30b5\u30a4\u30c8\u306e\u4f1a\u54e1\u30b7\u30b9\u30c6\u30e0\u5b9f\u88c5\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">SaaS\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u69cb\u7bc9<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-21\">Laravel Breeze\u306e\u904b\u7528\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-22\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u9069\u7528\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\">\u9577\u671f\u904b\u7528\u306e\u305f\u3081\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\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 Breeze\u3068\u306f\uff1f\u62bc\u3055\u3048\u308b\u3079\u304d\u57fa\u790e\u77e5\u8b58<\/h2>\n\n\n\n<p>Laravel Breeze\u306f\u3001Laravel\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u63d0\u4f9b\u3059\u308b\u8efd\u91cf\u306a\u8a8d\u8a3c\u30fb\u30b9\u30bf\u30fc\u30bf\u30fc\u30ad\u30c3\u30c8\u3067\u3059\u3002\u30e2\u30c0\u30f3\u306aPHP\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u30bb\u30ad\u30e5\u30a2\u3067\u52b9\u7387\u7684\u306a\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306e\u6700\u9069\u306a\u9078\u629e\u80a2\u3068\u3057\u3066\u6ce8\u76ee\u3092\u96c6\u3081\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">Laravel Breeze\u304c\u89e3\u6c7a\u3059\u308b3\u3064\u306e\u8ab2\u984c<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u69cb\u7bc9\u306e\u8907\u96d1\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f93\u6765\u306e\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u3084\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\u306e\u5b9f\u88c5\u306b\u591a\u5927\u306a\u6642\u9593\u3068\u52b4\u529b\u304c\u5fc5\u8981\u3067\u3057\u305f<\/li>\n\n\n\n<li>Breeze\u306f\u3001\u696d\u754c\u6a19\u6e96\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u57fa\u3065\u3044\u305f\u8a8d\u8a3c\u6a5f\u80fd\u3092\u3001\u6700\u5c0f\u9650\u306e\u30b3\u30fc\u30c9\u3067\u5b9f\u88c5\u53ef\u80fd\u306b\u3057\u307e\u3059<\/li>\n\n\n\n<li>\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u30b3\u30fc\u30c9\u3092\u81ea\u52d5\u751f\u6210\u3059\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u8005\u306f\u672c\u8cea\u7684\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306b\u96c6\u4e2d\u3067\u304d\u307e\u3059<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u6a5f\u80fd\u306e\u4fdd\u5b88\u6027\u3068\u62e1\u5f35\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u591a\u304f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u4fdd\u5b88\u3084\u6a5f\u80fd\u8ffd\u52a0\u304c\u6280\u8853\u7684\u8ca0\u50b5\u3068\u306a\u3063\u3066\u3044\u307e\u3057\u305f<\/li>\n\n\n\n<li>Breeze\u306f\u3001\u30af\u30ea\u30fc\u30f3\u3067\u30e2\u30c0\u30f3\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u63a1\u7528\u3057\u3001\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u307e\u3059<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30e9\u30fc\u8a2d\u8a08\u306b\u3088\u308a\u3001\u5fc5\u8981\u306a\u6a5f\u80fd\u306e\u307f\u3092\u9078\u629e\u7684\u306b\u5b9f\u88c5\u3067\u304d\u3001\u7121\u99c4\u306e\u306a\u3044\u30b7\u30b9\u30c6\u30e0\u69cb\u7bc9\u304c\u53ef\u80fd\u3067\u3059<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u7d71\u5408\u306e\u7169\u96d1\u3055<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3068\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u7d71\u5408\u306f\u3001\u591a\u304f\u306e\u5834\u5408\u3067\u5b9f\u88c5\u306e\u8907\u96d1\u3055\u3092\u5897\u5927\u3055\u305b\u3066\u3044\u307e\u3057\u305f<\/li>\n\n\n\n<li>Breeze\u306f\u3001BladeTemplates\u3084Inertia.js\u306a\u3069\u3001\u8907\u6570\u306e\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u30b9\u30bf\u30c3\u30af\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059<\/li>\n\n\n\n<li>API\u30d5\u30a1\u30fc\u30b9\u30c8\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308a\u3001\u30e2\u30c0\u30f3\u306aSPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u306e\u7d71\u5408\u3082\u5bb9\u6613\u3067\u3059<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u5f93\u6765\u306e\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u6c7a\u5b9a\u7684\u306a\u9055\u3044<\/h3>\n\n\n\n<p><strong>1. \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u6bd4\u8f03<\/strong><\/p>\n\n\n<div id=\"id-c3edf08a-370d-4db3-bbb1-c7af5343cea7\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd<\/th><th>Laravel Breeze<\/th><th>\u5f93\u6765\u306e\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0<\/th><\/tr><\/thead><tbody><tr><td>\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u6642\u9593<\/td><td>\u6570\u5206<\/td><td>\u6570\u6642\u9593\u301c\u6570\u65e5<\/td><\/tr><tr><td>\u30b3\u30fc\u30c9\u91cf<\/td><td>\u6700\u5c0f\u9650<\/td><td>\u5927\u91cf<\/td><\/tr><tr><td>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u6027<\/td><td>\u9ad8\u3044<\/td><td>\u8981\u5b9f\u88c5<\/td><\/tr><tr><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/td><td>\u6a19\u6e96\u88c5\u5099<\/td><td>\u500b\u5225\u5bfe\u5fdc\u5fc5\u8981<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><strong>2. \u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30bc\u30ed\u304b\u3089\u306e\u5b9f\u88c5\u3068\u6bd4\u8f03\u3057\u3066\u3001\u958b\u767a\u6642\u9593\u3092\u6700\u592780%\u524a\u6e1b\u53ef\u80fd<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u304c\u7d44\u307f\u8fbc\u307f\u6e08\u307f<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u7528\u306e\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u3082\u63d0\u4f9b\u3055\u308c\u3001\u54c1\u8cea\u62c5\u4fdd\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<p><strong>3. \u30e2\u30c0\u30f3\u306a\u6a5f\u80fd\u30bb\u30c3\u30c8<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Two Factor\u8a8d\u8a3c\u306e\u30cd\u30a4\u30c6\u30a3\u30d6\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>API\u30c8\u30fc\u30af\u30f3\u8a8d\u8a3c\u306e\u7d44\u307f\u8fbc\u307f<\/li>\n\n\n\n<li>\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u6a5f\u80fd\u306e\u6a19\u6e96\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30e1\u30fc\u30eb\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u81ea\u52d5\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/li>\n<\/ul>\n\n\n\n<p>Laravel Breeze\u306f\u3001\u7279\u306b\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u3084\u4e2d\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3044\u3066\u3001\u8fc5\u901f\u306a\u958b\u767a\u7acb\u3061\u4e0a\u3052\u3068\u9ad8\u54c1\u8cea\u306a\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u4e21\u7acb\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u601d\u60f3\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30bb\u30ad\u30e5\u30a2\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3092\u52b9\u7387\u7684\u306b\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">Laravel Breeze\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3092\u5fb9\u5e95\u89e3\u8aac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u74b0\u5883\u69cb\u7bc9\u3067\u5931\u6557\u3057\u306a\u3044\u91cd\u8981\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b7\u30b9\u30c6\u30e0\u8981\u4ef6\u306e\u78ba\u8a8d<\/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=\"\">   # \u5fc5\u8981\u306a\u74b0\u5883\u8981\u4ef6\n   PHP &gt;= 8.1\n   Composer\n   Node.js &gt;= 14.x\n   npm \u307e\u305f\u306f yarn<\/pre>\n\n\n\n<p>\u74b0\u5883\u69cb\u7bc9\u524d\u306e\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u78ba\u8a8d: <code>php -v<\/code><\/li>\n\n\n\n<li>Composer\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u72b6\u614b: <code>composer -V<\/code><\/li>\n\n\n\n<li>Node.js\u306e\u52d5\u4f5c\u78ba\u8a8d: <code>node -v<\/code><\/li>\n\n\n\n<li>npm\u306e\u78ba\u8a8d: <code>npm -v<\/code><\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MySQL\u307e\u305f\u306fPostgreSQL\u3092\u63a8\u5968<\/li>\n\n\n\n<li>.env\u30d5\u30a1\u30a4\u30eb\u3067\u306e\u6b63\u78ba\u306a\u63a5\u7d9a\u60c5\u5831\u306e\u8a2d\u5b9a\u304c\u91cd\u8981<\/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=\"\">   DB_CONNECTION=mysql\n   DB_HOST=127.0.0.1\n   DB_PORT=3306\n   DB_DATABASE=your_database\n   DB_USERNAME=your_username\n   DB_PASSWORD=your_password<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u8a2d\u5b9a<\/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=\"\">   # \u8a2d\u5b9a\u5909\u66f4\u5f8c\u306f\u5fc5\u305a\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30af\u30ea\u30a2\n   php artisan config:clear\n   php artisan cache:clear<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u65b0\u898fLaravel\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210<\/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 create-project laravel\/laravel your-project\n   cd your-project<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>Breeze\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/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\/breeze --dev<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>Breeze\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u521d\u671f\u8a2d\u5b9a<\/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=\"\">   # Blade\u30b9\u30bf\u30c3\u30af\u7528\n   php artisan breeze:install blade\n\n   # \u307e\u305f\u306f\u3001Vue\/React + Inertia\u7528\n   php artisan breeze:install vue # \u307e\u305f\u306f react\n\n   # API\u306e\u307f\u306e\u5834\u5408\n   php artisan breeze:install api<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/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=\"\">   npm install\n   npm run dev<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u521d\u671f\u8a2d\u5b9a\u306e\u6700\u9069\u306a\u9032\u3081\u65b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3<\/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=\"\">   php artisan migrate<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u95a2\u9023\u30d5\u30a1\u30a4\u30eb\u306e\u78ba\u8a8d<\/strong><br>\u4e3b\u8981\u306a\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\uff1a<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>config\/auth.php<\/code>: \u8a8d\u8a3c\u8a2d\u5b9a<\/li>\n\n\n\n<li><code>app\/Models\/User.php<\/code>: \u30e6\u30fc\u30b6\u30fc\u30e2\u30c7\u30eb<\/li>\n\n\n\n<li><code>routes\/web.php<\/code>: \u8a8d\u8a3c\u30eb\u30fc\u30c8<\/li>\n\n\n\n<li><code>resources\/views\/auth\/*<\/code>: \u8a8d\u8a3c\u753b\u9762\u306e\u30d3\u30e5\u30fc<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u30dd\u30a4\u30f3\u30c8\u306e\u628a\u63e1<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30eb\u30fc\u30c8\u5b9a\u7fa9\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">   \/\/ routes\/web.php\n   Route::middleware(['auth'])-&gt;group(function () {\n       \/\/ \u8a8d\u8a3c\u304c\u5fc5\u8981\u306a\u30eb\u30fc\u30c8\u3092\u3053\u3053\u306b\u5b9a\u7fa9\n   });<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u8a2d\u5b9a<\/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\/Kernel.php\n   protected $middlewareGroups = [\n       'web' =&gt; [\n           \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u8a2d\u5b9a\n       ],\n   ];<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u52d5\u4f5c\u78ba\u8a8d\u3068\u30c6\u30b9\u30c8<\/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=\"\">   # \u30c6\u30b9\u30c8\u306e\u5b9f\u884c\n   php artisan test\n\n   # \u958b\u767a\u30b5\u30fc\u30d0\u30fc\u306e\u8d77\u52d5\n   php artisan serve<\/pre>\n\n\n\n<p>\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u6642\u306e\u91cd\u8981\u306a\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5e38\u306b\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u3092\u4f7f\u7528\u3057\u3001\u5404\u30b9\u30c6\u30c3\u30d7\u3067\u30b3\u30df\u30c3\u30c8\u3092\u4f5c\u6210<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u95a2\u9023\u306e\u8a2d\u5b9a\u306f\u7279\u306b\u614e\u91cd\u306b\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u30ed\u30b0\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li>\u672c\u756a\u74b0\u5883\u3067\u306f\u5fc5\u305aHTTPS\u63a5\u7d9a\u3092\u5f37\u5236<\/li>\n<\/ul>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u9806\u5e8f\u3088\u304f\u5b9f\u65bd\u3059\u308b\u3053\u3068\u3067\u3001Laravel Breeze\u306e\u5805\u7262\u306a\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001\u74b0\u5883\u8981\u4ef6\u306e\u78ba\u8a8d\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a\u306b\u3064\u3044\u3066\u306f\u3001\u5f8c\u3005\u306e\u30c8\u30e9\u30d6\u30eb\u3092\u9632\u3050\u305f\u3081\u3001\u614e\u91cd\u306b\u9032\u3081\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">\u8a8d\u8a3c\u6a5f\u80fd\u306e\u5b9f\u88c5\u30b9\u30c6\u30c3\u30d7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u30e6\u30fc\u30b6\u30fc\u767b\u9332\u6a5f\u80fd\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30fc\u30e2\u30c7\u30eb\u306e\u8a2d\u5b9a<\/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=\"\">   \/\/ app\/Models\/User.php\n   class User extends Authenticatable\n   {\n       use HasFactory, Notifiable;\n\n       protected $fillable = [\n           'name',\n           'email',\n           'password',\n           'email_verified_at',\n       ];\n\n       protected $hidden = [\n           'password',\n           'remember_token',\n       ];\n\n       protected $casts = [\n           'email_verified_at' =&gt; 'datetime',\n       ];\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u8ffd\u52a0<\/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=\"\">   \/\/ app\/Http\/Requests\/Auth\/RegisterRequest.php\n   class RegisterRequest extends FormRequest\n   {\n       public function rules()\n       {\n           return [\n               'name' =&gt; ['required', 'string', 'max:255'],\n               'email' =&gt; ['required', 'string', 'email', 'max:255', 'unique:users'],\n               'password' =&gt; ['required', 'string', 'min:8', 'confirmed'],\n               'terms' =&gt; ['required', 'accepted'],\n           ];\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u767b\u9332\u51e6\u7406\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">   \/\/ app\/Http\/Controllers\/Auth\/RegisteredUserController.php\n   public function store(RegisterRequest $request)\n   {\n       $user = User::create([\n           'name' =&gt; $request-&gt;name,\n           'email' =&gt; $request-&gt;email,\n           'password' =&gt; Hash::make($request-&gt;password),\n       ]);\n\n       event(new Registered($user));\n       Auth::login($user);\n\n       return redirect(RouteServiceProvider::HOME);\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u30ed\u30b0\u30a4\u30f3\u6a5f\u80fd\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u8a2d\u5b9a\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">   \/\/ config\/auth.php\n   return [\n       'guards' =&gt; [\n           'web' =&gt; [\n               'driver' =&gt; 'session',\n               'provider' =&gt; 'users',\n           ],\n           'api' =&gt; [\n               'driver' =&gt; 'sanctum',\n               'provider' =&gt; 'users',\n           ],\n       ],\n   ];<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ed\u30b0\u30a4\u30f3\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u5b9f\u88c5<\/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=\"\">   \/\/ app\/Http\/Requests\/Auth\/LoginRequest.php\n   class LoginRequest extends FormRequest\n   {\n       public function rules()\n       {\n           return [\n               'email' =&gt; ['required', 'string', 'email'],\n               'password' =&gt; ['required', 'string'],\n           ];\n       }\n\n       public function authenticate()\n       {\n           if (!Auth::attempt($this-&gt;only('email', 'password'), $this-&gt;boolean('remember'))) {\n               throw ValidationException::withMessages([\n                   'email' =&gt; trans('auth.failed'),\n               ]);\n           }\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u5f37\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ app\/Http\/Middleware\/AuthenticateSession.php\n   class AuthenticateSession\n   {\n       public function handle($request, $next)\n       {\n           if (!$request-&gt;user()) {\n               return $next($request);\n           }\n\n           if ($this-&gt;shouldLogout($request)) {\n               Auth::logout();\n               return redirect()-&gt;route('login');\n           }\n\n           return $next($request);\n       }\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u6a5f\u80fd\u306e\u8ffd\u52a0<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30fc\u30eb\u901a\u77e5\u306e\u8a2d\u5b9a<\/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=\"\">   \/\/ app\/Notifications\/ResetPassword.php\n   class ResetPassword extends Notification\n   {\n       public function toMail($notifiable)\n       {\n           return (new MailMessage)\n               -&gt;subject('\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u306e\u304a\u77e5\u3089\u305b')\n               -&gt;line('\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u4ed8\u3051\u307e\u3057\u305f\u3002')\n               -&gt;action('\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8', url(route('password.reset', [\n                   'token' =&gt; $this-&gt;token,\n                   'email' =&gt; $notifiable-&gt;getEmailForPasswordReset(),\n               ])))\n               -&gt;line('\u3053\u306e\u30ea\u30f3\u30af\u306e\u6709\u52b9\u671f\u9650\u306f :count \u5206\u3067\u3059\u3002', ['count' =&gt; config('auth.passwords.users.expire')])\n               -&gt;line('\u30d1\u30b9\u30ef\u30fc\u30c9\u30ea\u30bb\u30c3\u30c8\u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u3053\u306e\u30e1\u30fc\u30eb\u3092\u7121\u8996\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\n       }\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ea\u30bb\u30c3\u30c8\u51e6\u7406\u306e\u5b9f\u88c5<\/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=\"\">   \/\/ app\/Http\/Controllers\/Auth\/NewPasswordController.php\n   public function store(Request $request)\n   {\n       $request-&gt;validate([\n           'token' =&gt; ['required'],\n           'email' =&gt; ['required', 'email'],\n           'password' =&gt; ['required', 'confirmed', 'min:8'],\n       ]);\n\n       $status = Password::reset(\n           $request-&gt;only('email', 'password', 'password_confirmation', 'token'),\n           function ($user) use ($request) {\n               $user-&gt;forceFill([\n                   'password' =&gt; Hash::make($request-&gt;password),\n                   'remember_token' =&gt; Str::random(60),\n               ])-&gt;save();\n\n               event(new PasswordReset($user));\n           }\n       );\n\n       return $status == Password::PASSWORD_RESET\n           ? redirect()-&gt;route('login')-&gt;with('status', __($status))\n           : back()-&gt;withInput($request-&gt;only('email'))\n                   -&gt;withErrors(['email' =&gt; __($status)]);\n   }<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30b9\u30ef\u30fc\u30c9\u30cf\u30c3\u30b7\u30e5\u5316\u306e\u78ba\u5b9f\u306a\u5b9f\u65bd<\/li>\n\n\n\n<li>CSRF\u5bfe\u7b56\u306e\u5fb9\u5e95<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u30cf\u30a4\u30b8\u30e3\u30c3\u30af\u5bfe\u7b56<\/li>\n\n\n\n<li>\u30d6\u30eb\u30fc\u30c8\u30d5\u30a9\u30fc\u30b9\u653b\u6483\u3078\u306e\u5bfe\u5fdc<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u8981\u4ef6<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5165\u529b\u5024\u306e\u53b3\u5bc6\u306a\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>XSS\u5bfe\u7b56\u306e\u5b9f\u65bd<\/li>\n\n\n\n<li>SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u9069\u5207\u306a\u8868\u793a<\/li>\n\n\n\n<li>\u8a8d\u8a3c\u72b6\u614b\u306e\u7dad\u6301\uff08Remember Me\u6a5f\u80fd\uff09<\/li>\n\n\n\n<li>\u591a\u8a00\u8a9e\u5bfe\u5fdc\u306e\u8003\u616e<\/li>\n<\/ul>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u30bb\u30ad\u30e5\u30a2\u3067\u4f7f\u3044\u3084\u3059\u3044\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u5404\u6a5f\u80fd\u306f\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u3067\u3001\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u62e1\u5f35\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">Laravel Breeze\u306e\u5b9f\u8df5\u7684\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u8853<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u8a8d\u8a3c\u753b\u9762\u306e\u30c7\u30b6\u30a4\u30f3\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">   \/\/ resources\/views\/auth\/login.blade.php\n   &lt;x-app-layout&gt;\n       &lt;div class=\"min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100\"&gt;\n           &lt;div class=\"w-full sm:max-w-md mt-6 px-6 py-4 bg-white shadow-md overflow-hidden sm:rounded-lg\"&gt;\n               &lt;!-- \u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30ed\u30b0\u30a4\u30f3\u30d5\u30a9\u30fc\u30e0 --&gt;\n               &lt;form method=\"POST\" action=\"{{ route('login') }}\" class=\"space-y-6\"&gt;\n                   @csrf\n                   &lt;!-- \u30ab\u30b9\u30bf\u30e0\u30b9\u30bf\u30a4\u30ea\u30f3\u30b0 --&gt;\n               &lt;\/form&gt;\n           &lt;\/div&gt;\n       &lt;\/div&gt;\n   &lt;\/x-app-layout&gt;<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>CSS\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">   # Tailwind\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u751f\u6210\n   npm install -D tailwindcss postcss autoprefixer\n   npx tailwindcss init<\/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=\"\">   \/\/ tailwind.config.js\n   module.exports = {\n       content: [\n           '.\/resources\/**\/*.blade.php',\n           '.\/resources\/**\/*.js',\n           '.\/resources\/**\/*.vue',\n       ],\n       theme: {\n           extend: {\n               colors: {\n                   'custom-primary': '#4F46E5',\n                   'custom-secondary': '#7C3AED',\n               },\n           },\n       },\n       plugins: [require('@tailwindcss\/forms')],\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba<\/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=\"\">   \/\/ app\/View\/Components\/CustomButton.php\n   class CustomButton extends Component\n   {\n       public function render()\n       {\n           return view('components.custom-button');\n       }\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30e6\u30fc\u30b6\u30fc\u30ed\u30fc\u30eb\u6a5f\u80fd\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30eb\u30c6\u30fc\u30d6\u30eb\u306e\u4f5c\u6210<\/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=\"\">   \/\/ database\/migrations\/create_roles_table.php\n   public function up()\n   {\n       Schema::create('roles', function (Blueprint $table) {\n           $table-&gt;id();\n           $table-&gt;string('name');\n           $table-&gt;string('slug')-&gt;unique();\n           $table-&gt;timestamps();\n       });\n\n       Schema::create('role_user', function (Blueprint $table) {\n           $table-&gt;foreignId('user_id')-&gt;constrained()-&gt;onDelete('cascade');\n           $table-&gt;foreignId('role_id')-&gt;constrained()-&gt;onDelete('cascade');\n           $table-&gt;primary(['user_id', 'role_id']);\n       });\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30eb\u7ba1\u7406\u306e\u30c8\u30ec\u30a4\u30c8\u5b9f\u88c5<\/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=\"\">   \/\/ app\/Traits\/HasRoles.php\n   trait HasRoles\n   {\n       public function roles()\n       {\n           return $this-&gt;belongsToMany(Role::class);\n       }\n\n       public function hasRole($role)\n       {\n           return $this-&gt;roles-&gt;contains('slug', $role);\n       }\n\n       public function assignRole($role)\n       {\n           $role = Role::where('slug', $role)-&gt;firstOrFail();\n           return $this-&gt;roles()-&gt;syncWithoutDetaching($role);\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/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=\"\">   \/\/ app\/Http\/Middleware\/CheckRole.php\n   class CheckRole\n   {\n       public function handle($request, Closure $next, $role)\n       {\n           if (!$request-&gt;user()-&gt;hasRole($role)) {\n               abort(403, '\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002');\n           }\n           return $next($request);\n       }\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u591a\u8981\u7d20\u8a8d\u8a3c\u306e\u8ffd\u52a0\u624b\u9806<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>2FA\u306e\u8a2d\u5b9a<\/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=\"\">   \/\/ config\/auth.php\n   'two_factor' =&gt; [\n       'enabled' =&gt; true,\n       'provider' =&gt; 'google',\n   ],<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>2FA\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u5b9f\u88c5<\/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=\"\">   \/\/ app\/Http\/Controllers\/Auth\/TwoFactorAuthController.php\n   class TwoFactorAuthController extends Controller\n   {\n       public function enable(Request $request)\n       {\n           $user = $request-&gt;user();\n\n           \/\/ Google Authenticator\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u30ad\u30fc\u751f\u6210\n           $google2fa = app('pragmarx.google2fa');\n           $secretKey = $google2fa-&gt;generateSecretKey();\n\n           $user-&gt;two_factor_secret = $secretKey;\n           $user-&gt;two_factor_enabled = true;\n           $user-&gt;save();\n\n           return response()-&gt;json([\n               'qr_code' =&gt; $google2fa-&gt;getQRCodeUrl(\n                   config('app.name'),\n                   $user-&gt;email,\n                   $secretKey\n               )\n           ]);\n       }\n\n       public function verify(Request $request)\n       {\n           $request-&gt;validate(['code' =&gt; 'required|string']);\n\n           $google2fa = app('pragmarx.google2fa');\n           $valid = $google2fa-&gt;verifyKey(\n               $request-&gt;user()-&gt;two_factor_secret,\n               $request-&gt;code\n           );\n\n           if (!$valid) {\n               throw ValidationException::withMessages([\n                   'code' =&gt; ['\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u7121\u52b9\u3067\u3059\u3002'],\n               ]);\n           }\n\n           return response()-&gt;json(['message' =&gt; '\u8a8d\u8a3c\u6210\u529f']);\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>2FA\u8a8d\u8a3c\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/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=\"\">   \/\/ app\/Http\/Middleware\/RequireTwoFactorAuth.php\n   class RequireTwoFactorAuth\n   {\n       public function handle($request, Closure $next)\n       {\n           $user = $request-&gt;user();\n\n           if ($user &amp;&amp; $user-&gt;two_factor_enabled &amp;&amp; !session('2fa_verified')) {\n               return redirect()-&gt;route('2fa.challenge');\n           }\n\n           return $next($request);\n       }\n   }<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>UI\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u518d\u5229\u7528\u6027\u3092\u8003\u616e<\/li>\n\n\n\n<li>\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u30c7\u30b6\u30a4\u30f3\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u3078\u306e\u914d\u616e<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30fc\u30eb\u7ba1\u7406\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u6a29\u9650\u306e\u7c92\u5ea6\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30ed\u30fc\u30eb\u306e\u968e\u5c64\u69cb\u9020\u306e\u8003\u616e<\/li>\n\n\n\n<li>\u6a29\u9650\u30c1\u30a7\u30c3\u30af\u306e\u52b9\u7387\u5316<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>2FA\u5b9f\u88c5\u306e\u6ce8\u610f\u70b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u30b3\u30fc\u30c9\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>\u30ea\u30ab\u30d0\u30ea\u30fc\u30d7\u30ed\u30bb\u30b9\u306e\u6574\u5099<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u9069\u5207\u306a\u5b9f\u88c5<\/li>\n\n\n\n<li>UX\u3078\u306e\u914d\u616e<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3088\u308a\u3001\u3088\u308a\u5805\u7262\u3067\u67d4\u8edf\u306a\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u6a5f\u80fd\u3092\u8ffd\u52a0\u30fb\u8abf\u6574\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">Laravel Breeze\u306e\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u305d\u306e\u89e3\u6c7a\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306e\u30a8\u30e9\u30fc<\/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=\"\">   # \u30a8\u30e9\u30fc: composer require laravel\/breeze --dev \u304c\u5931\u6557\u3059\u308b\n   composer clear-cache\n   rm -rf vendor\n   composer install\n   composer require laravel\/breeze --dev<\/pre>\n\n\n\n<p>\u5bfe\u51e6\u65b9\u6cd5\u4e00\u89a7\uff1a<\/p>\n\n\n<div id=\"id-0e078dcf-d06e-4f56-8fff-9a486feb6ed1\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30a8\u30e9\u30fc\u5185\u5bb9<\/th><th>\u539f\u56e0<\/th><th>\u89e3\u6c7a\u7b56<\/th><\/tr><\/thead><tbody><tr><td>\u30e1\u30e2\u30ea\u4e0d\u8db3<\/td><td>PHP\u306e\u30e1\u30e2\u30ea\u5236\u9650<\/td><td>memory_limit\u306e\u5897\u52a0<\/td><\/tr><tr><td>\u4f9d\u5b58\u95a2\u4fc2\u306e\u7af6\u5408<\/td><td>\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u975e\u4e92\u63db\u6027<\/td><td>composer\u306e\u66f4\u65b0\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30ea\u30a2<\/td><\/tr><tr><td>Node.js\u30a8\u30e9\u30fc<\/td><td>\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u4e0d\u4e00\u81f4<\/td><td>Node.js\u306e\u9069\u5207\u306a\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u66f4\u65b0<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8a8d\u8a3c\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/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=\"\">   \/\/ \u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u5931\u6557\u6642\u306e\u30c7\u30d0\u30c3\u30b0\n   Log::channel('auth')-&gt;info('\u8a8d\u8a3c\u5931\u6557', [\n       'email' =&gt; $request-&gt;email,\n       'ip' =&gt; $request-&gt;ip(),\n       'user_agent' =&gt; $request-&gt;userAgent()\n   ]);\n\n   \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u95a2\u9023\u306e\u554f\u984c\u89e3\u6c7a\n   php artisan session:table\n   php artisan migrate\n   php artisan config:clear<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u95a2\u9023\u306e\u30a8\u30e9\u30fc<\/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=\"\">   \/\/ \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u306e\u89e3\u6c7a\n   php artisan migrate:reset\n   php artisan migrate:fresh\n\n   \/\/ \u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u6642\u306e\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n   try {\n       DB::beginTransaction();\n       \/\/ \u51e6\u7406\n       DB::commit();\n   } catch (\\Exception $e) {\n       DB::rollback();\n       Log::error('\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a8\u30e9\u30fc: ' . $e-&gt;getMessage());\n       throw $e;\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u52b9\u679c\u7684\u306a\u5229\u7528\n   public function getUser($id)\n   {\n       return Cache::remember('user.'.$id, now()-&gt;addHours(24), function () use ($id) {\n           return User::with(['roles', 'permissions'])-&gt;find($id);\n       });\n   }\n\n   \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u306e\u6d3b\u7528\n   Cache::tags(['users', 'roles'])-&gt;put('user.permissions.'.$id, $permissions, 3600);<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ N+1\u554f\u984c\u306e\u89e3\u6c7a\n   $users = User::with(['roles', 'permissions'])-&gt;get();\n\n   \/\/ \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u8ffd\u52a0\n   Schema::table('users', function (Blueprint $table) {\n       $table-&gt;index(['email', 'status']);\n   });<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30c9\u30e9\u30a4\u30d0\u30fc\u306e\u8a2d\u5b9a\n   'session' =&gt; [\n       'driver' =&gt; env('SESSION_DRIVER', 'redis'),\n       'lifetime' =&gt; env('SESSION_LIFETIME', 120),\n       'expire_on_close' =&gt; false,\n   ]\n\n   \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30ac\u30d9\u30fc\u30b8\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\n   'gc_maxlifetime' =&gt; 7200,\n   'gc_probability' =&gt; 2,\n   'gc_divisor' =&gt; 100,<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30ec\u30d9\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d5\u30a3\u30b0\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u5229\u7528<\/li>\n\n\n\n<li>\u30d3\u30e5\u30fc\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u5316<\/li>\n\n\n\n<li>\u975e\u540c\u671f\u51e6\u7406\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30ec\u30d9\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30af\u30a8\u30ea\u30ed\u30b0\u306e\u5206\u6790<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d7\u30fc\u30ea\u30f3\u30b0\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30b9\u30ed\u30fc\u30af\u30a8\u30ea\u306e\u7279\u5b9a\u3068\u6539\u5584<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u30ec\u30d9\u30eb<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Redis\/Memcached\u306e\u9069\u5207\u306a\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6709\u52b9\u671f\u9650\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u30bf\u30b0\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528<\/li>\n\n\n\n<li>\u5206\u6563\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u691c\u8a0e<\/li>\n<\/ul>\n\n\n\n<p>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b7\u30b9\u30c6\u30de\u30c6\u30a3\u30c3\u30af\u306a\u30c7\u30d0\u30c3\u30b0\u624b\u6cd5<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ed\u30b0\u306e\u4f53\u7cfb\u7684\u306a\u53ce\u96c6<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30c8\u30ec\u30fc\u30b9\u306e\u5206\u6790<\/li>\n\n\n\n<li>\u74b0\u5883\u306b\u3088\u308b\u52d5\u4f5c\u306e\u9055\u3044\u306e\u78ba\u8a8d<\/li>\n\n\n\n<li>\u518d\u73fe\u6027\u306e\u30c6\u30b9\u30c8<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u91cd\u8981\u6027<\/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=\"\">   \/\/ \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5\n   use Illuminate\\Support\\Facades\\Log;\n\n   Log::channel('performance')-&gt;info('\u30af\u30a8\u30ea\u5b9f\u884c\u6642\u9593', [\n       'query' =&gt; $query-&gt;toSql(),\n       'bindings' =&gt; $query-&gt;getBindings(),\n       'time' =&gt; $executionTime\n   ]);<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u95a2\u9023\u306e\u6ce8\u610f\u70b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a8d\u8a3c\u8a66\u884c\u56de\u6570\u306e\u5236\u9650<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u30cf\u30a4\u30b8\u30e3\u30c3\u30af\u5bfe\u7b56<\/li>\n\n\n\n<li>XSS\u5bfe\u7b56\u306e\u5fb9\u5e95<\/li>\n\n\n\n<li>CSRF\u30c8\u30fc\u30af\u30f3\u306e\u9069\u5207\u306a\u7ba1\u7406<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5bfe\u7b56\u3068\u6700\u9069\u5316\u306b\u3088\u308a\u3001Laravel Breeze\u3092\u4f7f\u7528\u3057\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b89\u5b9a\u6027\u3068\u6027\u80fd\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u969b\u306f\u3001\u4e0a\u8a18\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u4f53\u7cfb\u7684\u306b\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306b\u89e3\u6c7a\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">Laravel Breeze\u3092\u4f7f\u3063\u305f\u5b9f\u8df5\u7684\u306a\u958b\u767a\u4f8b<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">EC\u30b5\u30a4\u30c8\u306e\u4f1a\u54e1\u30b7\u30b9\u30c6\u30e0\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f1a\u54e1\u30e9\u30f3\u30af\u5236\u5ea6\u306e\u5b9f\u88c5<\/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=\"\">   \/\/ app\/Models\/User.php\n   class User extends Authenticatable\n   {\n       public function membershipRank()\n       {\n           return $this-&gt;hasOne(MembershipRank::class);\n       }\n\n       public function calculateRank()\n       {\n           $totalPurchase = $this-&gt;orders()-&gt;sum('total_amount');\n\n           return match(true) {\n               $totalPurchase &gt;= 100000 =&gt; 'PLATINUM',\n               $totalPurchase &gt;= 50000 =&gt; 'GOLD',\n               $totalPurchase &gt;= 10000 =&gt; 'SILVER',\n               default =&gt; 'REGULAR'\n           };\n       }\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8cfc\u5165\u5c65\u6b74\u3068\u306e\u9023\u643a<\/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=\"\">   \/\/ app\/Http\/Controllers\/OrderController.php\n   class OrderController extends Controller\n   {\n       public function store(OrderRequest $request)\n       {\n           DB::transaction(function () use ($request) {\n               $order = Order::create([\n                   'user_id' =&gt; auth()-&gt;id(),\n                   'total_amount' =&gt; $request-&gt;total_amount,\n                   'status' =&gt; 'pending'\n               ]);\n\n               \/\/ \u30dd\u30a4\u30f3\u30c8\u4ed8\u4e0e\u51e6\u7406\n               $points = $this-&gt;calculatePoints($order);\n               auth()-&gt;user()-&gt;increment('points', $points);\n\n               \/\/ \u30e9\u30f3\u30af\u518d\u8a08\u7b97\n               $this-&gt;updateMembershipRank(auth()-&gt;user());\n           });\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30dd\u30a4\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5<\/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=\"\">   \/\/ app\/Services\/PointService.php\n   class PointService\n   {\n       public function calculatePoints(Order $order): int\n       {\n           $basePoints = floor($order-&gt;total_amount * 0.01);\n           $rankMultiplier = $this-&gt;getRankMultiplier($order-&gt;user-&gt;membershipRank);\n\n           return $basePoints * $rankMultiplier;\n       }\n\n       private function getRankMultiplier(string $rank): float\n       {\n           return match($rank) {\n               'PLATINUM' =&gt; 1.5,\n               'GOLD' =&gt; 1.3,\n               'SILVER' =&gt; 1.1,\n               default =&gt; 1.0\n           };\n       }\n   }<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">SaaS\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u69cb\u7bc9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u5b9f\u88c5<\/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=\"\">   \/\/ app\/Models\/Subscription.php\n   class Subscription extends Model\n   {\n       protected $fillable = [\n           'user_id',\n           'plan_id',\n           'status',\n           'trial_ends_at',\n           'ends_at'\n       ];\n\n       public function isActive(): bool\n       {\n           return $this-&gt;status === 'active' &amp;&amp; \n                  ($this-&gt;ends_at === null || $this-&gt;ends_at-&gt;isFuture());\n       }\n   }\n\n   \/\/ app\/Http\/Middleware\/CheckSubscription.php\n   class CheckSubscription\n   {\n       public function handle($request, Closure $next)\n       {\n           if (!$request-&gt;user()-&gt;subscription?-&gt;isActive()) {\n               return redirect()-&gt;route('subscription.expired');\n           }\n           return $next($request);\n       }\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8\u5bfe\u5fdc<\/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=\"\">   \/\/ app\/Models\/Team.php\n   class Team extends Model\n   {\n       public function users()\n       {\n           return $this-&gt;belongsToMany(User::class)\n                      -&gt;withPivot('role')\n                      -&gt;withTimestamps();\n       }\n\n       public function owner()\n       {\n           return $this-&gt;belongsTo(User::class, 'owner_id');\n       }\n   }\n\n   \/\/ app\/Http\/Middleware\/TeamsPermission.php\n   class TeamsPermission\n   {\n       public function handle($request, Closure $next)\n       {\n           $team = $request-&gt;route('team');\n           if (!$request-&gt;user()-&gt;teams-&gt;contains($team)) {\n               abort(403, '\u3053\u306e\u30c1\u30fc\u30e0\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002');\n           }\n           return $next($request);\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>API\u30c8\u30fc\u30af\u30f3\u7ba1\u7406<\/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=\"\">   \/\/ app\/Http\/Controllers\/Api\/TokenController.php\n   class TokenController extends Controller\n   {\n       public function create(Request $request)\n       {\n           $token = $request-&gt;user()-&gt;createToken($request-&gt;token_name, [\n               'read',\n               $request-&gt;user()-&gt;isAdmin() ? 'write' : '',\n           ]);\n\n           return response()-&gt;json([\n               'token' =&gt; $token-&gt;plainTextToken,\n               'expires_at' =&gt; now()-&gt;addDays(30)\n           ]);\n       }\n   }<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u6642\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>EC\u30b5\u30a4\u30c8\u5b9f\u88c5\u306e\u6ce8\u610f\u70b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u5fb9\u5e95<\/li>\n\n\n\n<li>\u30dd\u30a4\u30f3\u30c8\u8a08\u7b97\u306e\u6b63\u78ba\u6027\u78ba\u4fdd<\/li>\n\n\n\n<li>\u4f1a\u54e1\u30e9\u30f3\u30af\u306e\u81ea\u52d5\u66f4\u65b0<\/li>\n\n\n\n<li>\u8cfc\u5165\u5c65\u6b74\u306e\u9069\u5207\u306a\u4fdd\u8b77<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>SaaS\u5b9f\u88c5\u306e\u8003\u616e\u4e8b\u9805<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30b7\u30fc\u306e\u9069\u5207\u306a\u8a2d\u8a08<\/li>\n\n\n\n<li>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u78ba\u4fdd<\/li>\n\n\n\n<li>\u8ab2\u91d1\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u9023\u643a<\/li>\n\n\n\n<li>API\u8a8d\u8a3c\u306e\u5805\u7262\u6027<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5171\u901a\u306e\u5b9f\u88c5\u30dd\u30a4\u30f3\u30c8<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u5145\u5b9f<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5fb9\u5e95<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u306f\u3001\u5b9f\u969b\u306e\u30d3\u30b8\u30cd\u30b9\u30cb\u30fc\u30ba\u306b\u57fa\u3065\u3044\u305f\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9\u65b9\u6cd5\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u9069\u5207\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u3053\u3068\u3067\u3001\u5805\u7262\u3067\u4f7f\u3044\u3084\u3059\u3044\u30b7\u30b9\u30c6\u30e0\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">Laravel Breeze\u306e\u904b\u7528\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u9069\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9a\u671f\u7684\u306a\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u30c1\u30a7\u30c3\u30af<\/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=\"\">   # \u4f9d\u5b58\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u8106\u5f31\u6027\u30c1\u30a7\u30c3\u30af\n   composer audit\n\n   # \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u66f4\u65b0\u78ba\u8a8d\n   composer outdated\n\n   # \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u9069\u7528\n   composer update --with-dependencies<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u624b\u9806\u306e\u81ea\u52d5\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ app\/Console\/Commands\/SecurityCheck.php\n   class SecurityCheck extends Command\n   {\n       protected $signature = 'security:check';\n\n       public function handle()\n       {\n           \/\/ Composer\u306e\u66f4\u65b0\u30c1\u30a7\u30c3\u30af\n           $this-&gt;info('\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af\u3092\u958b\u59cb\u3057\u307e\u3059...');\n\n           $process = Process::fromShellCommandline('composer audit');\n           $process-&gt;run();\n\n           if ($process-&gt;isSuccessful()) {\n               $this-&gt;info('\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30a7\u30c3\u30af\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f');\n               \/\/ Slack\u306a\u3069\u3078\u306e\u901a\u77e5\n               Notification::route('slack', config('notifications.slack_webhook'))\n                   -&gt;notify(new SecurityCheckCompleted($process-&gt;getOutput()));\n           }\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5b9f\u88c5<\/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=\"\">   \/\/ config\/logging.php\n   'security' =&gt; [\n       'driver' =&gt; 'daily',\n       'path' =&gt; storage_path('logs\/security.log'),\n       'level' =&gt; 'debug',\n       'days' =&gt; 14,\n   ],\n\n   \/\/ app\/Providers\/EventServiceProvider.php\n   protected $listen = [\n       'Illuminate\\Auth\\Events\\Failed' =&gt; [\n           'App\\Listeners\\LogFailedAuthenticationAttempt',\n       ],\n       'Illuminate\\Auth\\Events\\Login' =&gt; [\n           'App\\Listeners\\LogSuccessfulLogin',\n       ],\n   ];<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u9577\u671f\u904b\u7528\u306e\u305f\u3081\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6226\u7565<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b9a\u671f\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u8a08\u753b<\/strong> \u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u9805\u76ee \u983b\u5ea6 \u91cd\u8981\u5ea6 \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8 \u90311\u56de \u6700\u91cd\u8981 \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30a7\u30c3\u30af \u67081\u56de \u91cd\u8981 \u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u691c\u8a3c \u67081\u56de \u91cd\u8981 \u30ed\u30b0\u5206\u6790 \u90311\u56de \u4e2d \u30e6\u30fc\u30b6\u30fc\u7d71\u8a08\u78ba\u8a8d \u67081\u56de \u4e2d<\/li>\n\n\n\n<li><strong>\u76e3\u8996\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9<\/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=\"\">   \/\/ app\/Services\/MonitoringService.php\n   class MonitoringService\n   {\n       public function checkSystemHealth(): array\n       {\n           return [\n               'database' =&gt; $this-&gt;checkDatabaseConnection(),\n               'cache' =&gt; $this-&gt;checkCacheAvailability(),\n               'session' =&gt; $this-&gt;checkSessionHandler(),\n               'storage' =&gt; $this-&gt;checkStorageSpace(),\n               'queue' =&gt; $this-&gt;checkQueueSystem(),\n           ];\n       }\n\n       private function checkDatabaseConnection(): bool\n       {\n           try {\n               DB::connection()-&gt;getPdo();\n               return true;\n           } catch (\\Exception $e) {\n               Log::error('\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u30a8\u30e9\u30fc: ' . $e-&gt;getMessage());\n               return false;\n           }\n       }\n   }<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u6226\u7565<\/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=\"\">   \/\/ config\/backup.php\n   return [\n       'backup' =&gt; [\n           'name' =&gt; env('APP_NAME', 'laravel-backup'),\n           'source' =&gt; [\n               'files' =&gt; [\n                   'include' =&gt; [\n                       base_path(),\n                   ],\n                   'exclude' =&gt; [\n                       base_path('vendor'),\n                       base_path('node_modules'),\n                   ],\n               ],\n               'databases' =&gt; [\n                   'mysql',\n               ],\n           ],\n       ],\n   ];<\/pre>\n\n\n\n<p>\u904b\u7528\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7d99\u7d9a\u7684\u306a\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8a8d\u8a3c\u8a66\u884c\u306e\u76e3\u8996<\/li>\n\n\n\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30e1\u30c8\u30ea\u30af\u30b9\u306e\u53ce\u96c6<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u5206\u6790<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30fc\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u306e\u8ffd\u8de1<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30f3\u30b7\u30c7\u30f3\u30c8\u5bfe\u5fdc\u624b\u9806<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30b9\u30ab\u30ec\u30fc\u30b7\u30e7\u30f3\u30d5\u30ed\u30fc\u306e\u78ba\u7acb<\/li>\n\n\n\n<li>\u30a4\u30f3\u30b7\u30c7\u30f3\u30c8\u8a18\u9332\u306e\u7dad\u6301<\/li>\n\n\n\n<li>\u5fa9\u65e7\u624b\u9806\u306e\u6587\u66f8\u5316<\/li>\n\n\n\n<li>\u4e8b\u5f8c\u5206\u6790\u306e\u5b9f\u65bd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   \/\/ app\/Console\/Commands\/OptimizeSystem.php\n   class OptimizeSystem extends Command\n   {\n       public function handle()\n       {\n           $this-&gt;call('config:cache');\n           $this-&gt;call('route:cache');\n           $this-&gt;call('view:cache');\n\n           \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6700\u9069\u5316\n           Cache::tags(['users', 'auth'])-&gt;flush();\n\n           \/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n           $this-&gt;cleanOldSessions();\n       }\n   }<\/pre>\n\n\n\n<p>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6642\u306e\u91cd\u8981\u306a\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8106\u5f31\u6027\u30b9\u30ad\u30e3\u30f3\u306e\u5b9f\u65bd<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d1\u30c3\u30c1\u306e\u9069\u7528<\/li>\n\n\n\n<li>\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u306e\u5b9a\u671f\u30ec\u30d3\u30e5\u30fc<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u76e3\u67fb\u30ed\u30b0\u306e\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7ba1\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u52b9\u7387\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u7387\u306e\u76e3\u8996<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5909\u66f4\u5c65\u6b74\u306e\u7ba1\u7406<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u60c5\u5831\u306e\u6587\u66f8\u5316<\/li>\n\n\n\n<li>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u30ac\u30a4\u30c9\u306e\u66f4\u65b0<\/li>\n\n\n\n<li>\u904b\u7528\u624b\u9806\u66f8\u306e\u7dad\u6301<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u904b\u7528\u30fb\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6226\u7565\u3092\u9069\u5207\u306b\u5b9f\u65bd\u3059\u308b\u3053\u3068\u3067\u3001Laravel Breeze\u3092\u4f7f\u7528\u3057\u305f\u30b7\u30b9\u30c6\u30e0\u306e\u9577\u671f\u7684\u306a\u5b89\u5b9a\u6027\u3068\u4fe1\u983c\u6027\u3092\u78ba\u4fdd\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u5b9a\u671f\u7684\u306a\u30ec\u30d3\u30e5\u30fc\u3068\u66f4\u65b0\u3092\u884c\u3044\u3001\u30b7\u30b9\u30c6\u30e0\u306e\u5065\u5168\u6027\u3092\u7dad\u6301\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":{"0":"post-2518","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2518","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=2518"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2518\/revisions"}],"predecessor-version":[{"id":2520,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/2518\/revisions\/2520"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}