{"id":3433,"date":"2025-03-24T08:46:12","date_gmt":"2025-03-23T23:46:12","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=3433"},"modified":"2025-03-24T08:46:41","modified_gmt":"2025-03-23T23:46:41","slug":"%e3%80%902024%e5%b9%b4%e6%9c%80%e6%96%b0%e3%80%91php%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0%e3%83%af%e3%83%bc%e3%82%af7%e9%81%b8%ef%bd%9c%e7%8f%be%e5%bd%b9%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%8b%e3%82%a2","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=3433","title":{"rendered":"\u30102024\u5e74\u6700\u65b0\u3011PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af7\u9078\uff5c\u73fe\u5f79\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u5fb9\u5e95\u6bd4\u8f03\u3068\u9078\u5b9a\u57fa\u6e96\u3092\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\">\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u91cd\u8981\u6027<\/a>      <\/li>      <li>        <a href=\"#i-2\">2024\u5e74\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u52d5\u5411<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u3053\u306e\u8a18\u4e8b\u3067\u5206\u304b\u308b\u3053\u3068<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306f\uff1f\u521d\u5fc3\u8005\u306b\u3082\u308f\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u308f\u306a\u3044\u958b\u767a\u306e\u9650\u754c\u3068\u8ab2\u984c<\/a>      <\/li>      <li>        <a href=\"#i-6\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u3082\u305f\u3089\u30595\u3064\u306e\u958b\u767a\u30e1\u30ea\u30c3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-12\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u3067\u5931\u6557\u3057\u306a\u3044\u305f\u3081\u306e3\u3064\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-16\">Laravel\uff1a\u62e1\u5f35\u6027\u3068\u8868\u73fe\u529b\u306b\u512a\u308c\u305f\u4eba\u6c17No.1\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li>        <a href=\"#i-32\">Symfony\uff1a\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5411\u3051\u306e\u5805\u7262\u306a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li>        <a href=\"#i-47\">CodeIgniter\uff1a\u8efd\u91cf\u3067\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u3044\u9ad8\u901f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li>        <a href=\"#i-62\">CakePHP\uff1a\u898f\u7d04\u91cd\u8996\u306e\u958b\u767a\u52b9\u7387\u3092\u8ffd\u6c42\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li>        <a href=\"#i-76\">Yii\uff1a\u9ad8\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5b9f\u73fe\u3059\u308b\u73fe\u4ee3\u7684\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li>        <a href=\"#i-93\">Slim\uff1aAPI\u3068\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u958b\u767a\u306b\u7279\u5316\u3057\u305f\u8efd\u91cf\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-112\">Laminas\uff08\u65e7Zend\uff09\uff1a\u4f01\u696d\u5411\u3051\u9ad8\u6a5f\u80fd\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-127\">\u5fb9\u5e95\u6bd4\u8f03\uff01\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u6c7a\u3081\u624b\u3068\u306a\u308b6\u3064\u306e\u8a55\u4fa1\u8ef8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-128\">\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u6d3b\u767a\u3055\u3068\u9577\u671f\u30b5\u30dd\u30fc\u30c8\u72b6\u6cc1<\/a>      <\/li>      <li>        <a href=\"#i-131\">\u5b66\u7fd2\u30b3\u30b9\u30c8\u3068\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5145\u5b9f\u5ea6<\/a>      <\/li>      <li>        <a href=\"#i-134\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3<\/a>      <\/li>      <li>        <a href=\"#i-137\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3068\u8106\u5f31\u6027\u5bfe\u5fdc\u306e\u5b9f\u7e3e<\/a>      <\/li>      <li>        <a href=\"#i-140\">\u4ed6\u6280\u8853\u30fb\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u306e\u3057\u3084\u3059\u3055<\/a>      <\/li>      <li>        <a href=\"#i-143\">\u63a1\u7528\u5e02\u5834\u3067\u306e\u9700\u8981\u3068\u5c06\u6765\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-146\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u305f\u3081\u306e\u7dcf\u5408\u8a55\u4fa1<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-147\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5225\uff01\u6700\u9069\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-148\">\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u5411\u3051\uff1a\u8fc5\u901f\u306a\u958b\u767a\u3068\u5e02\u5834\u6295\u5165\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/a>      <\/li>      <li>        <a href=\"#i-153\">\u5927\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\u5411\u3051\uff1a\u5b89\u5b9a\u6027\u3068\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/a>      <\/li>      <li>        <a href=\"#i-158\">EC\u30b5\u30a4\u30c8\u69cb\u7bc9\uff1a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u62e1\u5f35\u6027\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/a>      <\/li>      <li>        <a href=\"#i-163\">API\u958b\u767a\uff1a\u8efd\u91cf\u3055\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/a>      <\/li>      <li>        <a href=\"#i-168\">\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30d7\u30ec\u30a4\u30b9\uff1a\u4e92\u63db\u6027\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/a>      <\/li>      <li>        <a href=\"#i-173\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u5225\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u30de\u30c8\u30ea\u30c3\u30af\u30b9<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-174\">\u6700\u7d42\u7684\u306a\u5224\u65ad\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-175\">\u73fe\u5f79\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f1d\u6388\uff01PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u7fd2\u5f97\u306e\u6700\u77ed\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-176\">\u52b9\u7387\u7684\u306a\u5b66\u7fd2\u9806\u5e8f\u3068\u63a8\u5968\u30ea\u30bd\u30fc\u30b9<\/a>      <\/li>      <li>        <a href=\"#i-181\">\u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b<\/a>      <\/li>      <li>        <a href=\"#i-185\">\u8ee2\u8077\u30fb\u30ad\u30e3\u30ea\u30a2\u30a2\u30c3\u30d7\u306b\u6d3b\u304b\u3059\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u306e\u4f5c\u308a\u65b9<\/a>      <\/li>      <li>        <a href=\"#i-190\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u3067\u5b66\u7fd2\u52b9\u7387\u304c\u5909\u308f\u308b<\/a>      <\/li>      <li>        <a href=\"#i-194\">\u5c02\u9580\u5bb6\u3078\u306e\u9053\uff1a\u8a8d\u5b9a\u8cc7\u683c\u3068\u5c02\u9580\u6027\u306e\u78ba\u7acb<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-197\">\u307e\u3068\u3081\uff1a\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u3068\u5b9f\u8df5\u306e\u91cd\u8981\u6027<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-198\">\u682a\u5f0f\u4f1a\u793eDexall\u304c\u9078\u3076PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u5c0e\u5165\u4e8b\u4f8b<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-199\">\u5f53\u793e\u306e\u958b\u767a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u63a1\u7528\u3057\u3066\u3044\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li>        <a href=\"#i-207\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5c0e\u5165\u3067\u89e3\u6c7a\u3057\u305f3\u3064\u306e\u958b\u767a\u8ab2\u984c<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-211\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u6d3b\u7528\u306b\u3088\u308b\u30d3\u30b8\u30cd\u30b9\u6210\u679c\u306e\u5b9f\u4f8b<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-215\">\u307e\u3068\u3081\uff1aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u3067\u5931\u6557\u3057\u306a\u3044\u305f\u3081\u306e\u6700\u7d42\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-216\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8981\u4ef6\u3068\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u76f8\u6027\u30c1\u30a7\u30c3\u30af<\/a>      <\/li>      <li>        <a href=\"#i-221\">\u9577\u671f\u904b\u7528\u8996\u70b9\u3067\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-227\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5b66\u7fd2\u304b\u3089\u5b9f\u8df5\u307e\u3067\u306e\u30b9\u30c6\u30c3\u30d7<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">\u30a4\u30f3\u30c8\u30ed\u30c0\u30af\u30b7\u30e7\u30f3<\/h2>\n\n\n\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u73fe\u5834\u306b\u304a\u3044\u3066\u3001PHP\u306f\u4eca\u306a\u304a\u5f37\u529b\u306a\u9078\u629e\u80a2\u3067\u3042\u308a\u7d9a\u3051\u3066\u3044\u307e\u3059\u30022024\u5e74\u73fe\u5728\u3001\u5168\u4e16\u754c\u306eWeb\u30b5\u30a4\u30c8\u306e\u7d0478%\u3067PHP\u304c\u4f7f\u7528\u3055\u308c\u3066\u304a\u308a\u3001\u305d\u306e\u6839\u5f37\u3044\u4eba\u6c17\u306f\u8870\u3048\u3092\u77e5\u308a\u307e\u305b\u3093\u3002\u3057\u304b\u3057\u3001\u751f\u306ePHP\u3060\u3051\u3067\u306e\u958b\u767a\u306f\u52b9\u7387\u6027\u3001\u4fdd\u5b88\u6027\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u9762\u3067\u591a\u304f\u306e\u8ab2\u984c\u3092\u62b1\u3048\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u300c\u3069\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3079\u3070\u3044\u3044\u306e\u3060\u308d\u3046\uff1f\u300d \u300c\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9055\u3044\u306f\u4f55\u3060\u308d\u3046\uff1f\u300d \u300c\u81ea\u5206\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f\u4f55\u304c\u6700\u9069\u306a\u306e\u3060\u308d\u3046\uff1f\u300d<\/p>\n\n\n\n<p>\u3053\u308c\u3089\u306f\u3001PHP\u3067\u306e\u958b\u767a\u3092\u691c\u8a0e\u3059\u308b\u591a\u304f\u306e\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u62b1\u3048\u308b\u7591\u554f\u3067\u3059\u3002\u5b9f\u969b\u3001\u4e2d\u898f\u6a21\u4ee5\u4e0a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f90%\u4ee5\u4e0a\u304c\u4f55\u3089\u304b\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u63a1\u7528\u3057\u3066\u304a\u308a\u3001\u9069\u5207\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6210\u5426\u3092\u5de6\u53f3\u3059\u308b\u91cd\u8981\u306a\u6c7a\u65ad\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u91cd\u8981\u6027<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u5358\u306a\u308b\u30c4\u30fc\u30eb\u3067\u306f\u306a\u304f\u3001\u958b\u767a\u306e\u65b9\u5411\u6027\u3092\u6c7a\u5b9a\u3065\u3051\u308b\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u9069\u5207\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u3053\u3068\u3067\u5f97\u3089\u308c\u308b\u30e1\u30ea\u30c3\u30c8\u306f\u8a08\u308a\u77e5\u308c\u307e\u305b\u3093\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u52b9\u7387\u306e\u5927\u5e45\u306a\u5411\u4e0a<\/strong>: \u5171\u901a\u6a5f\u80fd\u306e\u5b9f\u88c5\u6642\u9593\u3092\u524a\u6e1b\u3057\u3001\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306b\u96c6\u4e2d\u3067\u304d\u308b<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u306e\u4f4e\u6e1b<\/strong>: \u4e00\u822c\u7684\u306a\u8106\u5f31\u6027\u306b\u5bfe\u3059\u308b\u4fdd\u8b77\u6a5f\u80fd\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b<\/li>\n\n\n\n<li><strong>\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u5411\u4e0a<\/strong>: \u7d71\u4e00\u3055\u308c\u305f\u69cb\u9020\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u57fa\u3065\u3044\u305f\u5b9f\u88c5<\/li>\n\n\n\n<li><strong>\u30c1\u30fc\u30e0\u958b\u767a\u306e\u52b9\u7387\u5316<\/strong>: \u5171\u901a\u306e\u8a2d\u8a08\u539f\u5247\u3068\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u898f\u7d04\u306b\u3088\u308b\u5354\u696d\u306e\u5186\u6ed1\u5316<\/li>\n\n\n\n<li><strong>\u62e1\u5f35\u6027\u306e\u78ba\u4fdd<\/strong>: \u30d3\u30b8\u30cd\u30b9\u306e\u6210\u9577\u306b\u5408\u308f\u305b\u305f\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u304c\u5bb9\u6613\u306b\u306a\u308b<\/li>\n<\/ul>\n\n\n\n<p>\u4e00\u65b9\u3001\u4e0d\u9069\u5207\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306f\u6b21\u306e\u3088\u3046\u306a\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u898f\u6a21\u306b\u5408\u308f\u306a\u3044\u30aa\u30fc\u30d0\u30fc\u30b9\u30da\u30c3\u30af\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4f4e\u4e0b<\/li>\n\n\n\n<li>\u5b66\u7fd2\u30b3\u30b9\u30c8\u306e\u5897\u5927\u306b\u3088\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u9045\u5ef6\u3068\u30c1\u30fc\u30e0\u306e\u751f\u7523\u6027\u4f4e\u4e0b<\/li>\n\n\n\n<li>\u5c06\u6765\u7684\u306a\u30b5\u30dd\u30fc\u30c8\u7d42\u4e86\u306b\u3088\u308b\u6280\u8853\u7684\u8ca0\u50b5\u306e\u84c4\u7a4d<\/li>\n\n\n\n<li>\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u306b\u5bfe\u5fdc\u3067\u304d\u306a\u3044\u6a5f\u80fd\u5236\u9650<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">2024\u5e74\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u52d5\u5411<\/h3>\n\n\n\n<p>\u73fe\u5728\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5e02\u5834\u3067\u306f\u3001Laravel\u3001Symfony\u306a\u3069\u306e\u30d5\u30eb\u6a5f\u80fd\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u4e3b\u6d41\u3092\u7dad\u6301\u3057\u3064\u3064\u3001Slim\u306e\u3088\u3046\u306a\u8efd\u91cf\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304cAPI\u958b\u767a\u7279\u5316\u578b\u3068\u3057\u3066\u4eba\u6c17\u3092\u96c6\u3081\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u666e\u53ca\u306b\u4f34\u3044\u3001\u8efd\u91cf\u3067\u7279\u5b9a\u306e\u6a5f\u80fd\u306b\u7279\u5316\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9700\u8981\u3082\u9ad8\u307e\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u73fe\u5f79PHP\u30a8\u30f3\u30b8\u30cb\u30a2\u306e\u8996\u70b9\u304b\u3089\u3001\u4e3b\u8981\u306a7\u3064\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u8a73\u7d30\u306b\u6bd4\u8f03\u30fb\u89e3\u8aac\u3057\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u57fa\u672c\u6982\u5ff5\u304b\u3089\u9078\u5b9a\u57fa\u6e96\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u5225\u306e\u304a\u3059\u3059\u3081\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u52b9\u7387\u7684\u306a\u5b66\u7fd2\u65b9\u6cd5\u307e\u3067\u3001PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u306e\u3059\u3079\u3066\u3092\u7db2\u7f85\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u3053\u306e\u8a18\u4e8b\u3067\u5206\u304b\u308b\u3053\u3068<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u308f\u306a\u3044\u958b\u767a\u306e\u9650\u754c\u3068\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u3082\u305f\u3089\u3059\u5177\u4f53\u7684\u306a\u30e1\u30ea\u30c3\u30c8<\/li>\n\n\n\n<li>\u2705 2024\u5e74\u6700\u65b0\u306e\u4eba\u6c17PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af7\u9078\u306e\u8a73\u7d30\u306a\u6a5f\u80fd\u6bd4\u8f03\u3068\u7279\u5fb4<\/li>\n\n\n\n<li>\u2705 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u305f\u3081\u306e6\u3064\u306e\u8a55\u4fa1\u8ef8<\/li>\n\n\n\n<li>\u2705 \u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u3001\u5927\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\u3001EC\u3001API\u306a\u3069\u7528\u9014\u5225\u306e\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u6cd5<\/li>\n\n\n\n<li>\u2705 \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u7fd2\u5f97\u306e\u305f\u3081\u306e\u52b9\u7387\u7684\u306a\u5b66\u7fd2\u30b9\u30c6\u30c3\u30d7\u3068\u30ad\u30e3\u30ea\u30a2\u30a2\u30c3\u30d7\u6226\u7565<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3092\u8aad\u307f\u7d42\u3048\u308b\u3053\u3068\u3067\u3001\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u30ad\u30e3\u30ea\u30a2\u306b\u3068\u3063\u3066\u6700\u9069\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u81ea\u4fe1\u3092\u6301\u3063\u3066\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002\u73fe\u5834\u3067\u57f9\u3063\u305f\u77e5\u898b\u3068\u6700\u65b0\u306e\u30c8\u30ec\u30f3\u30c9\u3092\u8e0f\u307e\u3048\u3001PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u306e\u8ff7\u3044\u3092\u89e3\u6d88\u3059\u308b\u305f\u3081\u306e\u5b8c\u5168\u30ac\u30a4\u30c9\u3092\u304a\u5c4a\u3051\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306f\uff1f\u521d\u5fc3\u8005\u306b\u3082\u308f\u304b\u308a\u3084\u3059\u304f\u89e3\u8aac<\/h2>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306f\u3001PHP\u3067\u306eWeb\u958b\u767a\u3092\u52b9\u7387\u5316\u3059\u308b\u305f\u3081\u306e\u571f\u53f0\u3068\u306a\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u3067\u3059\u3002\u5171\u901a\u6a5f\u80fd\u3084\u30e9\u30a4\u30d6\u30e9\u30ea\u304c\u4f53\u7cfb\u7684\u306b\u6574\u7406\u3055\u308c\u3001\u958b\u767a\u8005\u304c\u6bce\u56de\u30bc\u30ed\u304b\u3089\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u306e\u3042\u308b\u4f5c\u696d\u3092\u5927\u5e45\u306b\u524a\u6e1b\u3057\u3066\u304f\u308c\u307e\u3059\u3002\u591a\u304f\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306fMVC\uff08Model-View-Controller\uff09\u306a\u3069\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30d1\u30bf\u30fc\u30f3\u3092\u63a1\u7528\u3057\u3066\u304a\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u9020\u5316\u3068\u6a19\u6e96\u5316\u3092\u4fc3\u9032\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u300c\u5bb6\u3092\u5efa\u3066\u308b\u305f\u3081\u306e\u5efa\u7bc9\u8cc7\u6750\u3068\u57fa\u790e\u7684\u306a\u69cb\u9020\u304c\u65e2\u306b\u7528\u610f\u3055\u308c\u3066\u3044\u308b\u72b6\u614b\u300d\u3068\u8003\u3048\u308b\u3068\u5206\u304b\u308a\u3084\u3059\u3044\u3067\u3057\u3087\u3046\u3002\u958b\u767a\u8005\u306f\u3053\u306e\u571f\u53f0\u306e\u4e0a\u306b\u3001\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3068\u3044\u3046\u300c\u5185\u88c5\u300d\u3092\u65bd\u3057\u3066\u3044\u304f\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u308f\u306a\u3044\u958b\u767a\u306e\u9650\u754c\u3068\u8ab2\u984c<\/h3>\n\n\n\n<p>\u30d0\u30cb\u30e9PHP\uff08\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u308f\u306a\u3044\u7d20\u306ePHP\uff09\u3067\u306e\u958b\u767a\u306f\u3001\u5c0f\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u554f\u984c\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u898f\u6a21\u304c\u5927\u304d\u304f\u306a\u308b\u306b\u3064\u308c\u3066\u69d8\u3005\u306a\u8ab2\u984c\u304c\u9855\u5728\u5316\u3057\u3066\u304d\u307e\u3059\u3002<\/p>\n\n\n<div id=\"id-a1b34702-43f5-4602-b9c1-75401f68de2d\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u8ab2\u984c<\/th><th>\u8a73\u7d30<\/th><th>\u30d3\u30b8\u30cd\u30b9\u30a4\u30f3\u30d1\u30af\u30c8<\/th><\/tr><\/thead><tbody><tr><td><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af<\/strong><\/td><td>SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u3001XSS\u3001CSRF\u306a\u3069\u306e\u8106\u5f31\u6027\u5bfe\u7b56\u3092\u500b\u5225\u306b\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u3001\u898b\u843d\u3068\u3057\u304c\u767a\u751f\u3057\u3084\u3059\u3044\u3002<\/td><td>\u30c7\u30fc\u30bf\u6f0f\u6d29\u3001\u30b5\u30fc\u30d3\u30b9\u505c\u6b62\u3001\u4f01\u696d\u4fe1\u983c\u306e\u5931\u589c\u3001\u6cd5\u7684\u8cac\u4efb<\/td><\/tr><tr><td><strong>\u4fdd\u5b88\u6027\u306e\u4f4e\u4e0b<\/strong><\/td><td>\u6642\u9593\u7d4c\u904e\u3068\u3068\u3082\u306b\u300c\u30b9\u30d1\u30b2\u30c3\u30c6\u30a3\u30b3\u30fc\u30c9\u300d\u3068\u547c\u3070\u308c\u308b\u8907\u96d1\u3067\u7406\u89e3\u3057\u3065\u3089\u3044\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u306b\u767a\u5c55\u3057\u3084\u3059\u3044\u3002<\/td><td>\u30d0\u30b0\u4fee\u6b63\u3084\u6a5f\u80fd\u8ffd\u52a0\u306e\u30b3\u30b9\u30c8\u5897\u5927\u3001\u958b\u767a\u901f\u5ea6\u306e\u4f4e\u4e0b<\/td><\/tr><tr><td><strong>\u958b\u767a\u901f\u5ea6\u306e\u9045\u5ef6<\/strong><\/td><td>\u8a8d\u8a3c\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u306a\u3069\u306e\u57fa\u672c\u6a5f\u80fd\u3092\u30bc\u30ed\u304b\u3089\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<\/td><td>\u5e02\u5834\u6295\u5165\u306e\u9045\u308c\u3001\u958b\u767a\u30b3\u30b9\u30c8\u306e\u5897\u52a0\u3001\u7af6\u4e89\u529b\u306e\u4f4e\u4e0b<\/td><\/tr><tr><td><strong>\u30c1\u30fc\u30e0\u958b\u767a\u306e\u96e3\u3057\u3055<\/strong><\/td><td>\u500b\u3005\u306e\u958b\u767a\u8005\u304c\u72ec\u81ea\u306e\u30b9\u30bf\u30a4\u30eb\u3067\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u3059\u308b\u305f\u3081\u3001\u4e00\u8cab\u6027\u304c\u4fdd\u305f\u308c\u306a\u3044\u3002<\/td><td>\u77e5\u8b58\u5171\u6709\u306e\u56f0\u96e3\u5316\u3001\u4eba\u7684\u4f9d\u5b58\u30ea\u30b9\u30af\u3001\u30c1\u30fc\u30e0\u62e1\u5927\u306e\u969c\u58c1<\/td><\/tr><tr><td><strong>\u30c6\u30b9\u30c8\u306e\u8907\u96d1\u3055<\/strong><\/td><td>\u4f53\u7cfb\u7684\u306a\u30c6\u30b9\u30c8\u624b\u6cd5\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u304a\u3089\u305a\u3001\u54c1\u8cea\u4fdd\u8a3c\u304c\u7169\u96d1\u306b\u306a\u308b\u3002<\/td><td>\u54c1\u8cea\u4f4e\u4e0b\u3001\u30d0\u30b0\u306e\u5897\u52a0\u3001\u30ea\u30ea\u30fc\u30b9\u5f8c\u306e\u30c8\u30e9\u30d6\u30eb\u983b\u767a<\/td><\/tr><tr><td><strong>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u9650\u754c<\/strong><\/td><td>\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u5897\u52a0\u3084\u30d3\u30b8\u30cd\u30b9\u62e1\u5927\u306b\u5bfe\u5fdc\u3059\u308b\u8a2d\u8a08\u304c\u6700\u521d\u304b\u3089\u8003\u616e\u3055\u308c\u3066\u3044\u306a\u3044\u3002<\/td><td>\u6210\u9577\u306b\u4f34\u3046\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u554f\u984c\u3001\u30b7\u30b9\u30c6\u30e0\u5237\u65b0\u306e\u5fc5\u8981\u6027<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5b9f\u969b\u306e\u73fe\u5834\u3067\u306f\u3001\u3053\u306e\u3088\u3046\u306a\u30d0\u30cb\u30e9PHP\u306e\u9650\u754c\u306b\u76f4\u9762\u3057\u3001\u300c\u6280\u8853\u7684\u8ca0\u50b5\u300d\u304c\u7a4d\u307f\u91cd\u306a\u3063\u3066\u3044\u304f\u30b1\u30fc\u30b9\u304c\u591a\u304f\u898b\u3089\u308c\u307e\u3059\u3002\u79c1\u306e\u7d4c\u9a13\u3067\u3082\u3001\u5f53\u521d\u306f\u5c0f\u3055\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u59cb\u307e\u3063\u305f\u3082\u306e\u304c\u3001\u5f90\u3005\u306b\u898f\u6a21\u3092\u62e1\u5927\u3057\u3001\u6700\u7d42\u7684\u306b\u306f\u4fdd\u5b88\u304c\u56f0\u96e3\u306b\u306a\u3063\u3066\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3078\u306e\u79fb\u884c\u3092\u4f59\u5100\u306a\u304f\u3055\u308c\u308b\u3068\u3044\u3046\u30d1\u30bf\u30fc\u30f3\u304c\u4f55\u5ea6\u3082\u3042\u308a\u307e\u3057\u305f\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=\"\">\/\/ \u30d0\u30cb\u30e9PHP\u3067\u306e\u5178\u578b\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\uff08\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u3042\u308a\uff09\n$username = $_POST['username'];\n$password = $_POST['password'];\n$query = \"SELECT * FROM users WHERE username='$username' AND password='$password'\";\n$result = mysqli_query($connection, $query);\n\/\/ SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306e\u8106\u5f31\u6027\u304c\u3042\u308a\u3001\u9069\u5207\u306a\u30a8\u30b9\u30b1\u30fc\u30d7\u51e6\u7406\u304c\u5fc5\u8981\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u3082\u305f\u3089\u30595\u3064\u306e\u958b\u767a\u30e1\u30ea\u30c3\u30c8<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u63a1\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u4e0a\u8a18\u306e\u8ab2\u984c\u3092\u52b9\u679c\u7684\u306b\u89e3\u6c7a\u3057\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30e1\u30ea\u30c3\u30c8\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">1. \u958b\u767a\u901f\u5ea6\u306e\u5927\u5e45\u5411\u4e0a<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u306f\u3001\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3001\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306a\u3069\u306e\u5171\u901a\u6a5f\u80fd\u304c\u65e2\u306b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u958b\u767a\u8005\u306f\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u88c5\u306b\u96c6\u4e2d\u3067\u304d\u3001\u958b\u767a\u6642\u9593\u3092\u5927\u5e45\u306b\u77ed\u7e2e\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=\"\">\/\/ Laravel\u3067\u306e\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\uff08\u6570\u884c\u3067\u5b9f\u88c5\u53ef\u80fd\uff09\nRoute::post('\/login', function (Request $request) {\n    $credentials = $request-&gt;only('email', 'password');\n    if (Auth::attempt($credentials)) {\n        return redirect()-&gt;intended('dashboard');\n    }\n    return back()-&gt;withErrors(['email' =&gt; '\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002']);\n});\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">2. \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u306e\u4f4e\u6e1b<\/h4>\n\n\n\n<p>\u4e3b\u8981\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u3001SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u3001CSRF\u4fdd\u8b77\u3001XSS\u5bfe\u7b56\u306a\u3069\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u304c\u6a19\u6e96\u642d\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u958b\u767a\u8005\u304c\u7279\u5225\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u77e5\u8b58\u3092\u6301\u3063\u3066\u3044\u306a\u304f\u3066\u3082\u3001\u5b89\u5168\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3067\u304d\u308b\u3088\u3046\u8a2d\u8a08\u3055\u308c\u3066\u3044\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=\"\">\/\/ Laravel\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\uff08\u81ea\u52d5\u7684\u306b\u9069\u7528\u3055\u308c\u308b\uff09\n\/\/ \u30d5\u30a9\u30fc\u30e0\u306bCSRF\u4fdd\u8b77\u30c8\u30fc\u30af\u30f3\u3092\u8ffd\u52a0\n&lt;form method=\"POST\" action=\"\/profile\"&gt;\n    @csrf\n    &lt;!-- \u30d5\u30a9\u30fc\u30e0\u306e\u5185\u5bb9 --&gt;\n&lt;\/form&gt;\n\n\/\/ Eloquent ORM\u306b\u3088\u308bSQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u9632\u6b62\n$users = DB::table('users')\n            -&gt;where('status', '=', 'active')\n            -&gt;where('subscribed', '=', 1)\n            -&gt;get();\n\/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u81ea\u52d5\u7684\u306b\u5b89\u5168\u306b\u30d0\u30a4\u30f3\u30c9\u3055\u308c\u308b\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-9\">3. \u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u5411\u4e0a<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u7279\u5b9a\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30d1\u30bf\u30fc\u30f3\uff08\u591a\u304f\u306e\u5834\u5408MVC\uff09\u306b\u5f93\u3063\u3066\u3044\u308b\u305f\u3081\u3001\u30b3\u30fc\u30c9\u306e\u69cb\u9020\u304c\u7d71\u4e00\u3055\u308c\u3001\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002\u958b\u767a\u8005\u304c\u5909\u308f\u3063\u3066\u3082\u30b3\u30fc\u30c9\u3092\u7406\u89e3\u3057\u3084\u3059\u304f\u3001\u9577\u671f\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u304c\u5bb9\u6613\u306b\u306a\u308a\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=\"\">\/\/ MVC\u30d1\u30bf\u30fc\u30f3\u306b\u3088\u308b\u95a2\u5fc3\u306e\u5206\u96e2\n\/\/ Model\uff08\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\uff09\nclass Product extends Model\n{\n    protected $fillable = ['name', 'price', 'description'];\n}\n\n\/\/ Controller\uff08\u30ed\u30b8\u30c3\u30af\uff09\nclass ProductController extends Controller\n{\n    public function index()\n    {\n        $products = Product::all();\n        return view('products.index', compact('products'));\n    }\n}\n\n\/\/ View\uff08\u8868\u793a\uff09\n&lt;!-- products\/index.blade.php --&gt;\n@foreach($products as $product)\n    &lt;div class=\"product\"&gt;\n        &lt;h2&gt;{{ $product-&gt;name }}&lt;\/h2&gt;\n        &lt;p&gt;{{ $product-&gt;description }}&lt;\/p&gt;\n        &lt;span&gt;{{ $product-&gt;price }}\u5186&lt;\/span&gt;\n    &lt;\/div&gt;\n@endforeach\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-10\">4. \u30c1\u30fc\u30e0\u958b\u767a\u306e\u52b9\u7387\u5316<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u958b\u767a\u306e\u57fa\u672c\u30eb\u30fc\u30eb\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u3001\u8907\u6570\u306e\u958b\u767a\u8005\u304c\u4e00\u8cab\u3057\u305f\u65b9\u6cd5\u3067\u5354\u696d\u3067\u304d\u307e\u3059\u3002\u30b3\u30fc\u30c9\u898f\u7d04\u3001\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\u3001\u547d\u540d\u898f\u5247\u306a\u3069\u304c\u7d71\u4e00\u3055\u308c\u308b\u305f\u3081\u3001\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u304c\u52b9\u7387\u5316\u3055\u308c\u3001\u65b0\u30e1\u30f3\u30d0\u30fc\u306e\u53c2\u5165\u969c\u58c1\u3082\u4f4e\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u7279\u306b\u91cd\u8981\u3067\u300110\u4eba\u4ee5\u4e0a\u306e\u958b\u767a\u8005\u304c\u540c\u6642\u306b\u4f5c\u696d\u3059\u308b\u74b0\u5883\u3067\u3082\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u3042\u308c\u3070\u52b9\u7387\u3088\u304f\u5354\u696d\u3067\u304d\u307e\u3059\u3002\u79c1\u306e\u7d4c\u9a13\u3067\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5c0e\u5165\u306b\u3088\u308a\u3001\u65b0\u30e1\u30f3\u30d0\u30fc\u306e\u7acb\u3061\u4e0a\u3052\u6642\u9593\u304c\u5e73\u57472\u9031\u9593\u304b\u30893\u65e5\u306b\u77ed\u7e2e\u3055\u308c\u305f\u4f8b\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-11\">5. \u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u306e\u5411\u4e0a<\/h4>\n\n\n\n<p>\u307b\u3068\u3093\u3069\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u306f\u3001\u30c6\u30b9\u30c8\u6a5f\u80fd\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u5358\u4f53\u30c6\u30b9\u30c8\u3001\u6a5f\u80fd\u30c6\u30b9\u30c8\u3001\u7d71\u5408\u30c6\u30b9\u30c8\u306a\u3069\u3092\u7c21\u5358\u306b\u4f5c\u6210\u30fb\u5b9f\u884c\u3067\u304d\u308b\u305f\u3081\u3001\u54c1\u8cea\u4fdd\u8a3c\u304c\u30b9\u30e0\u30fc\u30ba\u306b\u306a\u308a\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=\"\">\/\/ Laravel\u3067\u306e\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u4f8b\npublic function testBasicExample()\n{\n    \/\/ \u30b7\u30f3\u30d7\u30eb\u306a\u30c6\u30b9\u30c8\n    $response = $this-&gt;get('\/');\n    $response-&gt;assertStatus(200);\n    \n    \/\/ \u30d5\u30a9\u30fc\u30e0\u9001\u4fe1\u306e\u30c6\u30b9\u30c8\n    $response = $this-&gt;post('\/login', [\n        'email' =&gt; 'test@example.com',\n        'password' =&gt; 'password',\n    ]);\n    $response-&gt;assertRedirect('\/dashboard');\n}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u3067\u5931\u6557\u3057\u306a\u3044\u305f\u3081\u306e3\u3064\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u306f\u91cd\u8981\u306a\u5224\u65ad\u3067\u3059\u3002\u4ee5\u4e0b\u306e3\u3064\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u62bc\u3055\u3048\u3066\u304a\u304f\u3053\u3068\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u629e\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-13\">1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u898f\u6a21\u3068\u8981\u4ef6\u306e\u9069\u5408\u6027<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u305d\u308c\u305e\u308c\u5f97\u610f\u5206\u91ce\u304c\u7570\u306a\u308a\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u898f\u6a21\u3084\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u9078\u3076\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n<div id=\"id-bbbc244c-910e-4513-b9b1-2088d3a51402\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u898f\u6a21<\/th><th>\u9069\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30bf\u30a4\u30d7<\/th><th>\u4f8b<\/th><\/tr><\/thead><tbody><tr><td>\u5c0f\u898f\u6a21\uff08\u500b\u4eba\u30b5\u30a4\u30c8\u3001\u30d6\u30ed\u30b0\u306a\u3069\uff09<\/td><td>\u8efd\u91cf\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/td><td>Slim, CodeIgniter<\/td><\/tr><tr><td>\u4e2d\u898f\u6a21\uff08\u4f01\u696d\u30b5\u30a4\u30c8\u3001\u793e\u5185\u30b7\u30b9\u30c6\u30e0\u306a\u3069\uff09<\/td><td>\u4e2d\u7a0b\u5ea6\u306e\u6a5f\u80fd\u3092\u6301\u3064\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/td><td>CakePHP, Yii<\/td><\/tr><tr><td>\u5927\u898f\u6a21\uff08EC\u30b5\u30a4\u30c8\u3001SNS\u3001\u8907\u96d1\u306a\u696d\u52d9\u30b7\u30b9\u30c6\u30e0\u306a\u3069\uff09<\/td><td>\u30d5\u30eb\u6a5f\u80fd\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/td><td>Laravel, Symfony<\/td><\/tr><tr><td>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\/API<\/td><td>\u5c02\u7528\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/td><td>Lumen, Slim<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u81ea\u554f\u3059\u3079\u304d\u8cea\u554f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e88\u60f3\u3055\u308c\u308b\u30e6\u30fc\u30b6\u30fc\u6570\u306f\uff1f<\/li>\n\n\n\n<li>\u5fc5\u8981\u306a\u6a5f\u80fd\u306e\u8907\u96d1\u3055\u306f\u3069\u306e\u7a0b\u5ea6\u304b\uff1f<\/li>\n\n\n\n<li>\u958b\u767a\u671f\u9593\u3068\u4e88\u7b97\u306f\u3069\u306e\u304f\u3089\u3044\u304b\uff1f<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u898f\u6a21\u306f\u3069\u306e\u304f\u3089\u3044\u304b\uff1f<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-14\">2. \u5b66\u7fd2\u66f2\u7dda\u3068\u30c1\u30fc\u30e0\u306e\u6280\u8853\u30b9\u30bf\u30c3\u30af<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b66\u7fd2\u96e3\u6613\u5ea6\u3068\u3001\u30c1\u30fc\u30e0\u306e\u65e2\u5b58\u77e5\u8b58\u30fb\u7d4c\u9a13\u3092\u8003\u616e\u3059\u308b\u3053\u3068\u3082\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n<div id=\"id-420b3b86-5a90-4de8-b0c4-e7212da89b08\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u5b66\u7fd2\u66f2\u7dda<\/th><th>\u524d\u63d0\u77e5\u8b58<\/th><\/tr><\/thead><tbody><tr><td>Laravel<\/td><td>\u4e2d\uff5e\u9ad8<\/td><td>PHP\u306e\u57fa\u790e\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u3001MVC<\/td><\/tr><tr><td>Symfony<\/td><td>\u9ad8<\/td><td>PHP\u306e\u4e0a\u7d1a\u77e5\u8b58\u3001\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u3001DI<\/td><\/tr><tr><td>CodeIgniter<\/td><td>\u4f4e<\/td><td>PHP\u306e\u57fa\u790e<\/td><\/tr><tr><td>CakePHP<\/td><td>\u4e2d<\/td><td>PHP\u306e\u57fa\u790e\u3001MVC<\/td><\/tr><tr><td>Slim<\/td><td>\u4f4e\uff5e\u4e2d<\/td><td>PHP\u306e\u57fa\u790e\u3001RESTful API<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u81ea\u554f\u3059\u3079\u304d\u8cea\u554f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c1\u30fc\u30e0\u30e1\u30f3\u30d0\u30fc\u306e\u5e73\u5747\u7684\u306aPHP\u7d4c\u9a13\u5e74\u6570\u306f\uff1f<\/li>\n\n\n\n<li>\u904e\u53bb\u306b\u7279\u5b9a\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u7528\u3057\u305f\u7d4c\u9a13\u304c\u3042\u308b\u304b\uff1f<\/li>\n\n\n\n<li>\u5b66\u7fd2\u306b\u5272\u3051\u308b\u6642\u9593\u306f\u3069\u306e\u304f\u3089\u3044\u3042\u308b\u304b\uff1f<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u5185\u3067\u306e\u30ca\u30ec\u30c3\u30b8\u5171\u6709\u4f53\u5236\u306f\u6574\u3063\u3066\u3044\u308b\u304b\uff1f<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-15\">3. \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u30b5\u30dd\u30fc\u30c8\u306e\u5145\u5b9f\u5ea6<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9577\u671f\u7684\u306a\u5b58\u7d9a\u6027\u3068\u554f\u984c\u89e3\u6c7a\u306e\u3057\u3084\u3059\u3055\u306f\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u6d3b\u767a\u3055\u306b\u5927\u304d\u304f\u4f9d\u5b58\u3057\u307e\u3059\u3002<\/p>\n\n\n<div id=\"id-a34af1bb-5abd-42c5-a1ce-b5a72453b06a\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u78ba\u8a8d\u9805\u76ee<\/th><th>\u4f55\u3092\u898b\u308b\u3079\u304d\u304b<\/th><\/tr><\/thead><tbody><tr><td>GitHub\u30b9\u30bf\u30fc\u6570\u30fb\u30d5\u30a9\u30fc\u30af\u6570<\/td><td>\u4eba\u6c17\u5ea6\u3068\u958b\u767a\u8005\u306e\u95a2\u5fc3\u5ea6<\/td><\/tr><tr><td>\u30b3\u30df\u30c3\u30c8\u983b\u5ea6<\/td><td>\u6d3b\u767a\u306a\u958b\u767a\u304c\u7d99\u7d9a\u3055\u308c\u3066\u3044\u308b\u304b<\/td><\/tr><tr><td>\u30aa\u30fc\u30d7\u30f3\u306a\u554f\u984c\/\u89e3\u6c7a\u6e08\u307f\u554f\u984c\u306e\u6bd4\u7387<\/td><td>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306e\u8cea<\/td><\/tr><tr><td>Stack Overflow\u306e\u8cea\u554f\u6570<\/td><td>\u554f\u984c\u306b\u76f4\u9762\u3057\u305f\u969b\u306e\u60c5\u5831\u91cf<\/td><\/tr><tr><td>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u8cea\u3068\u7ffb\u8a33\u72b6\u6cc1<\/td><td>\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u306e\u5145\u5b9f\u5ea6<\/td><\/tr><tr><td>\u5546\u7528\u30b5\u30dd\u30fc\u30c8\u306e\u6709\u7121<\/td><td>\u4f01\u696d\u5229\u7528\u306e\u969b\u306e\u5b89\u5fc3\u611f<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u81ea\u554f\u3059\u3079\u304d\u8cea\u554f\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306f\u3044\u3064\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u305f\u304b\uff1f<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u8fc5\u901f\u306b\u884c\u308f\u308c\u3066\u3044\u308b\u304b\uff1f<\/li>\n\n\n\n<li>\u65e5\u672c\u8a9e\u306e\u60c5\u5831\u3084\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306f\u5145\u5b9f\u3057\u3066\u3044\u308b\u304b\uff1f<\/li>\n\n\n\n<li>\u9577\u671f\u30b5\u30dd\u30fc\u30c8\uff08LTS\uff09\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308b\u304b\uff1f<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u7dcf\u5408\u7684\u306b\u5224\u65ad\u3059\u308b\u3053\u3068\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u7ae0\u3067\u306f\u30012024\u5e74\u73fe\u5728\u306e\u4e3b\u8981\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af7\u9078\u306b\u3064\u3044\u3066\u3001\u305d\u308c\u305e\u308c\u306e\u7279\u5fb4\u3068\u5f37\u307f\u3092\u8a73\u3057\u304f\u898b\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">Laravel\uff1a\u62e1\u5f35\u6027\u3068\u8868\u73fe\u529b\u306b\u512a\u308c\u305f\u4eba\u6c17No.1\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/laravel.com\/img\/logomark.min.svg\" alt=\"Laravel\"><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/laravel.com\/img\/logotype.min.svg\" alt=\"Laravel\"><\/figure>\n\n\n\n<p><strong>\u30d0\u30fc\u30b8\u30e7\u30f3<\/strong>: 10.x\uff082024\u5e745\u6708\u73fe\u5728\uff09<br><strong>\u521d\u30ea\u30ea\u30fc\u30b9<\/strong>: 2011\u5e74<br><strong>\u4f5c\u8005<\/strong>: Taylor Otwell<br><strong>\u30e9\u30a4\u30bb\u30f3\u30b9<\/strong>: MIT License<br><strong>GitHub\u30b9\u30bf\u30fc\u6570<\/strong>: 73,000+<\/p>\n\n\n\n<p>Laravel \u306f\u73fe\u5728\u6700\u3082\u4eba\u6c17\u306e\u3042\u308bPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3001\u300c\u958b\u767a\u8005\u4f53\u9a13\u300d\u3092\u6700\u512a\u5148\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u69cb\u6587\u3068\u8868\u73fe\u529b\u8c4a\u304b\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u306b\u3088\u308a\u3001\u8907\u96d1\u306a\u4f5c\u696d\u3082\u76f4\u611f\u7684\u306b\u5b9f\u88c5\u3067\u304d\u308b\u3053\u3068\u304c\u5927\u304d\u306a\u7279\u5fb4\u3067\u3059\u3002PHP\u958b\u767a\u306b\u304a\u3044\u3066\u300c\u8077\u4eba\u306e\u9053\u5177\u300d\u3068\u4f8b\u3048\u3089\u308c\u308b\u3053\u3068\u304c\u591a\u304f\u3001\u305d\u306e\u6d17\u7df4\u3055\u308c\u305f\u8a2d\u8a08\u601d\u60f3\u306f\u591a\u304f\u306e\u958b\u767a\u8005\u3092\u9b45\u4e86\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-17\">\u4e3b\u306a\u7279\u5fb4\u3068\u9577\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u69cb\u6587<\/strong>\uff1a\u8aad\u307f\u3084\u3059\u304f\u3001\u76f4\u611f\u7684\u306a\u30b3\u30fc\u30c9\u304c\u66f8\u3051\u308b\u305f\u3081\u3001\u958b\u767a\u8005\u306e\u751f\u7523\u6027\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Eloquent ORM<\/strong>\uff1aActiveRecord\u30d1\u30bf\u30fc\u30f3\u306b\u57fa\u3065\u304f\u5f37\u529b\u306aORM\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u6975\u3081\u3066\u7c21\u6f54\u306b\u8a18\u8ff0\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3<\/strong>\uff1a\u30b7\u30f3\u30d7\u30eb\u306a\u304c\u3089\u8868\u73fe\u529b\u8c4a\u304b\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u69cb\u6587\u3067\u3001\u30d3\u30e5\u30fc\u5c64\u306e\u5b9f\u88c5\u304c\u5bb9\u6613\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5305\u62ec\u7684\u306a\u6a5f\u80fd\u30bb\u30c3\u30c8<\/strong>\uff1a\u8a8d\u8a3c\u3001\u30ad\u30e5\u30fc\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3001\u30a4\u30d9\u30f3\u30c8\u306a\u3069\u3001\u30e2\u30c0\u30f3\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5fc5\u8981\u306a\u6a5f\u80fd\u304c\u6a19\u6e96\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8c4a\u5bcc\u306a\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0<\/strong>\uff1aLaravel Nova\uff08\u7ba1\u7406\u753b\u9762\uff09\u3001Livewire\uff08JS\u30ec\u30b9\u306e\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\uff09\u3001Vapor\uff08\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30c7\u30d7\u30ed\u30a4\uff09\u306a\u3069\u3001\u516c\u5f0f\u306e\u62e1\u5f35\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u5145\u5b9f\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/strong>\uff1a\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u975e\u5e38\u306b\u8a73\u7d30\u3067\u3001Laracasts\u3068\u3044\u3046\u9ad8\u54c1\u8cea\u306a\u5b66\u7fd2\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3082\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3<\/strong>\uff1a\u4e16\u754c\u4e2d\u3067\u6700\u3082\u6d3b\u767a\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u6301\u3061\u3001\u60c5\u5831\u304c\u8c4a\u5bcc\u3067\u52a9\u3051\u3092\u5f97\u3084\u3059\u3044\u74b0\u5883\u3067\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-18\">\u77ed\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u6d88\u8cbb<\/strong>\uff1a\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u304c\u6bd4\u8f03\u7684\u591a\u304f\u3001\u4f4e\u30b9\u30da\u30c3\u30af\u30b5\u30fc\u30d0\u30fc\u3067\u306f\u52d5\u4f5c\u304c\u91cd\u304f\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u6a5f\u80fd\u904e\u591a<\/strong>\uff1a\u30b7\u30f3\u30d7\u30eb\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f\u30aa\u30fc\u30d0\u30fc\u30b9\u30da\u30c3\u30af\u3068\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5b66\u7fd2\u66f2\u7dda<\/strong>\uff1a\u521d\u5b66\u8005\u306b\u3068\u3063\u3066\u306f\u7fd2\u5f97\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u7279\u306b\u300c\u9b54\u6cd5\u306e\u3088\u3046\u306b\u300d\u52d5\u4f5c\u3059\u308b\u90e8\u5206\u306e\u7406\u89e3\u306b\u306f\u6642\u9593\u3092\u8981\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8<\/strong>\uff1a\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u3067\u7834\u58ca\u7684\u5909\u66f4\u304c\u5c0e\u5165\u3055\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u3001\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u4f5c\u696d\u304c\u5fc5\u8981\u306b\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-19\">\u6280\u8853\u7684\u7279\u5fb4<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-20\">1. Eloquent ORM<\/h5>\n\n\n\n<p>Laravel\u306e\u6700\u3082\u4eba\u6c17\u306e\u3042\u308b\u6a5f\u80fd\u306e\u4e00\u3064\u304c\u3001ActiveRecord\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\u3057\u305fEloquent ORM\u3067\u3059\u3002\u30e2\u30c7\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c6\u30fc\u30d6\u30eb\u3092\u76f4\u611f\u7684\u306b\u5bfe\u5fdc\u3055\u305b\u3001\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3082\u7c21\u6f54\u306b\u8a18\u8ff0\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=\"\">\/\/ \u30e6\u30fc\u30b6\u30fc\u30e2\u30c7\u30eb\u306e\u5b9a\u7fa9\nclass User extends Model\n{\n    public function posts()\n    {\n        return $this-&gt;hasMany(Post::class);\n    }\n    \n    public function profile()\n    {\n        return $this-&gt;hasOne(Profile::class);\n    }\n}\n\n\/\/ \u5229\u7528\u4f8b\n$user = User::find(1);  \/\/ ID=1\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u53d6\u5f97\n$posts = $user-&gt;posts;  \/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3092\u901a\u3058\u3066\u6295\u7a3f\u3092\u53d6\u5f97\n\n\/\/ \u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u3068\u306e\u9023\u643a\n$recentUsers = User::where('active', true)\n                  -&gt;where('last_login', '&gt;=', now()-&gt;subDays(7))\n                  -&gt;orderBy('name')\n                  -&gt;paginate(20);  \/\/ \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3\u4ed8\u304d\u7d50\u679c\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-21\">2. Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3<\/h5>\n\n\n\n<p>PHP\u306e\u5b8c\u5168\u306a\u6a5f\u80fd\u3092\u4fdd\u6301\u3057\u306a\u304c\u3089\u3001\u7c21\u6f54\u3067\u8868\u73fe\u529b\u8c4a\u304b\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u69cb\u6587\u3092\u63d0\u4f9b\u3057\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=\"\">&lt;!-- \u6761\u4ef6\u5206\u5c90 --&gt;\n@if (count($records) === 1)\n    1\u4ef6\u306e\u30ec\u30b3\u30fc\u30c9\u304c\u3042\u308a\u307e\u3059\n@elseif (count($records) &gt; 1)\n    {{ count($records) }}\u4ef6\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&lt;!-- \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0 --&gt;\n&lt;x-alert type=\"error\" :message=\"$message\"\/&gt;\n\n&lt;!-- \u30ec\u30a4\u30a2\u30a6\u30c8\u7d99\u627f --&gt;\n@extends('layouts.app')\n\n@section('title', '\u30da\u30fc\u30b8\u30bf\u30a4\u30c8\u30eb')\n\n@section('content')\n    &lt;h1&gt;\u8a18\u4e8b\u4e00\u89a7&lt;\/h1&gt;\n    &lt;div class=\"articles\"&gt;\n        @foreach ($articles as $article)\n            &lt;article&gt;\n                &lt;h2&gt;{{ $article-&gt;title }}&lt;\/h2&gt;\n                &lt;p&gt;{{ $article-&gt;excerpt }}&lt;\/p&gt;\n            &lt;\/article&gt;\n        @endforeach\n    &lt;\/div&gt;\n@endsection\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-22\">3. \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>\u30b7\u30f3\u30d7\u30eb\u306a\u304c\u3089\u5f37\u529b\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u9020\u3092\u660e\u78ba\u306b\u5b9a\u7fa9\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=\"\">\/\/ \u57fa\u672c\u7684\u306a\u30eb\u30fc\u30c8\u5b9a\u7fa9\nRoute::get('\/user\/{id}', [UserController::class, 'show']);\n\n\/\/ \u30ea\u30bd\u30fc\u30b9\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\uff08RESTful\uff09\nRoute::resource('photos', PhotoController::class);\n\/\/ \u4e0a\u8a18\u4e00\u884c\u30677\u3064\u306e\u30eb\u30fc\u30c8\uff08index, create, store, show, edit, update, destroy\uff09\u304c\u751f\u6210\u3055\u308c\u308b\n\n\/\/ \u30eb\u30fc\u30c8\u30b0\u30eb\u30fc\u30d7\u3068\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\nRoute::middleware(['auth:sanctum'])-&gt;group(function () {\n    Route::get('\/dashboard', [DashboardController::class, 'index']);\n    \n    Route::prefix('admin')-&gt;group(function () {\n        Route::get('\/users', [AdminController::class, 'users']);\n    });\n});\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-23\">4. Artisan CLI<\/h5>\n\n\n\n<p>\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3067\u306e\u958b\u767a\u4f5c\u696d\u3092\u52b9\u7387\u5316\u3059\u308b\u30c4\u30fc\u30eb\u3067\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=\"\"># \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u4f5c\u6210\nphp artisan make:controller PostController --resource\n\n# \u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5b9f\u884c\nphp artisan migrate\n\n# \u30ad\u30e3\u30c3\u30b7\u30e5\u30af\u30ea\u30a2\nphp artisan cache:clear\n\n# \u30c6\u30b9\u30c8\u5b9f\u884c\nphp artisan test\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-24\">5. \u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u306b\u5fc5\u8981\u306a\u6a5f\u80fd\u304c\u7db2\u7f85\u3055\u308c\u3066\u304a\u308a\u3001\u8a2d\u5b9a\u3060\u3051\u3067\u9ad8\u5ea6\u306a\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002Laravel 8\u4ee5\u964d\u3067\u306f\u3001Jetstream\u3068\u3044\u3046\u8a8d\u8a3c\u30b9\u30bf\u30fc\u30bf\u30fc\u30ad\u30c3\u30c8\u3082\u63d0\u4f9b\u3055\u308c\u3066\u3044\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=\"\">\/\/ \u57fa\u672c\u7684\u306a\u8a8d\u8a3c\nif (Auth::attempt(['email' =&gt; $email, 'password' =&gt; $password])) {\n    \/\/ \u8a8d\u8a3c\u6210\u529f\n    return redirect()-&gt;intended('dashboard');\n}\n\n\/\/ \u591a\u69d8\u306a\u8a8d\u8a3c\u30ac\u30fc\u30c9\nAuth::guard('admin')-&gt;attempt($credentials);\n\n\/\/ API\u8a8d\u8a3c\u7528\u306e\u30c8\u30fc\u30af\u30f3\u751f\u6210\uff08Laravel Sanctum\uff09\n$token = $user-&gt;createToken('api-token')-&gt;plainTextToken;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-25\">Laravel\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0<\/h4>\n\n\n\n<p>Laravel\u306e\u5f37\u307f\u306e\u4e00\u3064\u306f\u3001\u516c\u5f0f\u304a\u3088\u3073\u975e\u516c\u5f0f\u306e\u8c4a\u5bcc\u306a\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002<\/p>\n\n\n<div id=\"id-6f6f12b5-7bfa-45f4-ab07-4c9bfdd283da\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d1\u30c3\u30b1\u30fc\u30b8\u540d<\/th><th>\u6982\u8981<\/th><th>\u7528\u9014<\/th><\/tr><\/thead><tbody><tr><td>Laravel Nova<\/td><td>\u7ba1\u7406\u753b\u9762\u751f\u6210\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/td><td>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u7ba1\u7406\u753b\u9762\u306e\u69cb\u7bc9<\/td><\/tr><tr><td>Laravel Livewire<\/td><td>\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/td><td>JS\u3092\u66f8\u304b\u305a\u306b\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306aUI\u69cb\u7bc9<\/td><\/tr><tr><td>Laravel Jetstream<\/td><td>\u8a8d\u8a3c\u30b9\u30bf\u30fc\u30bf\u30fc\u30ad\u30c3\u30c8<\/td><td>\u30ed\u30b0\u30a4\u30f3\u3001\u767b\u9332\u30012FA\u3001\u30c1\u30fc\u30e0\u7ba1\u7406\u306a\u3069\u306e\u5b9f\u88c5<\/td><\/tr><tr><td>Laravel Vapor<\/td><td>\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/td><td>AWS\u3067\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30c7\u30d7\u30ed\u30a4<\/td><\/tr><tr><td>Laravel Forge<\/td><td>\u30b5\u30fc\u30d0\u30fc\u30d7\u30ed\u30d3\u30b8\u30e7\u30cb\u30f3\u30b0<\/td><td>\u30b5\u30fc\u30d0\u30fc\u69cb\u7bc9\u30fb\u7ba1\u7406\u306e\u81ea\u52d5\u5316<\/td><\/tr><tr><td>Laravel Horizon<\/td><td>\u30ad\u30e5\u30fc\u7ba1\u7406\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9<\/td><td>Redis\u30ad\u30e5\u30fc\u306e\u7ba1\u7406\u30fb\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0<\/td><\/tr><tr><td>Laravel Telescope<\/td><td>\u30c7\u30d0\u30c3\u30b0\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8<\/td><td>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u30fb\u4f8b\u5916\u306e\u89b3\u6e2c<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-26\">Laravel\u5c0e\u5165\u4e8b\u4f8b<\/h4>\n\n\n\n<p>Laravel\u306f\u67d4\u8edf\u6027\u304c\u9ad8\u304f\u3001\u3042\u3089\u3086\u308b\u898f\u6a21\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u6d3b\u7528\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Discord<\/strong> \u2013 \u5927\u898f\u6a21\u30b2\u30fc\u30de\u30fc\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\uff08\u4e00\u90e8\u6a5f\u80fd\uff09<\/li>\n\n\n\n<li><strong>Twitch<\/strong> \u2013 \u30e9\u30a4\u30d6\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\uff08\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\uff09<\/li>\n\n\n\n<li><strong>UCAS<\/strong> \u2013 \u30a4\u30ae\u30ea\u30b9\u306e\u5927\u5b66\u5165\u5b66\u7ba1\u7406\u30b5\u30fc\u30d3\u30b9<\/li>\n\n\n\n<li><strong>Toyota Hall of Fame<\/strong> \u2013 \u30c8\u30e8\u30bf\u306e\u4f01\u696d\u30b5\u30a4\u30c8<\/li>\n\n\n\n<li><strong>Barchart<\/strong> \u2013 \u91d1\u878d\u5e02\u5834\u30c7\u30fc\u30bf\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/li>\n<\/ul>\n\n\n\n<p>\u56fd\u5185\u3067\u3082\u591a\u304f\u306e\u4f01\u696d\u304cLaravel\u3092\u63a1\u7528\u3057\u3066\u304a\u308a\u3001EC\u30b5\u30a4\u30c8\u3001\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\u3001\u793e\u5185\u7ba1\u7406\u30c4\u30fc\u30eb\u306a\u3069\u5e45\u5e83\u3044\u7528\u9014\u3067\u5229\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-27\">Laravel\u306b\u6700\u9069\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h4>\n\n\n\n<p>Laravel\u306f\u591a\u69d8\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u304c\u3001\u7279\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b1\u30fc\u30b9\u3067\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u4e2d\u301c\u5927\u898f\u6a21\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a<\/strong>\uff1a\u30d5\u30eb\u6a5f\u80fd\u3092\u6d3b\u304b\u305b\u308b\u898f\u6a21\u611f<\/li>\n\n\n\n<li><strong>\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306eMVP\uff08\u6700\u5c0f\u5b9f\u884c\u53ef\u80fd\u88fd\u54c1\uff09\u958b\u767a<\/strong>\uff1a\u7d20\u65e9\u304f\u5e02\u5834\u6295\u5165\u3067\u304d\u308b<\/li>\n\n\n\n<li><strong>EC\u30b5\u30a4\u30c8<\/strong>\uff1a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3084\u6c7a\u6e08\u9023\u643a\u306a\u3069\u304c\u5145\u5b9f<\/li>\n\n\n\n<li><strong>\u30b3\u30f3\u30c6\u30f3\u30c4\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0<\/strong>\uff1a\u7ba1\u7406\u753b\u9762\u3068\u516c\u958b\u753b\u9762\u306e\u4e21\u65b9\u3092\u52b9\u7387\u7684\u306b\u69cb\u7bc9<\/li>\n\n\n\n<li><strong>API\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/strong>\uff1aLumen\uff08Laravel\u8efd\u91cf\u7248\uff09\u3082\u9078\u629e\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-28\">\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>Laravel\u306f\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u304c\u7279\u306b\u5145\u5b9f\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong> \u2013 <a href=\"https:\/\/laravel.com\/docs\">https:\/\/laravel.com\/docs<\/a><br>\u975e\u5e38\u306b\u8a73\u7d30\u3067\u7406\u89e3\u3057\u3084\u3059\u304f\u3001\u65e5\u672c\u8a9e\u8a33\u3082\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Laracasts<\/strong> \u2013 <a href=\"https:\/\/laracasts.com\/\">https:\/\/laracasts.com<\/a><br>Jeffrey Way\u6c0f\u306b\u3088\u308b\u8cea\u306e\u9ad8\u3044\u52d5\u753b\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3002Laravel\u5b66\u7fd2\u306e\u5b9a\u756a\u30ea\u30bd\u30fc\u30b9\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>Laravel News<\/strong> \u2013 <a href=\"https:\/\/laravel-news.com\/\">https:\/\/laravel-news.com<\/a><br>\u6700\u65b0\u306eLaravel\u60c5\u5831\u3001\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u60c5\u5831\u306a\u3069\u3092\u63d0\u4f9b\u3059\u308b\u30cb\u30e5\u30fc\u30b9\u30b5\u30a4\u30c8\u3002<\/li>\n\n\n\n<li><strong>Laravel.jp<\/strong> \u2013 <a href=\"https:\/\/laravel.jp\/\">https:\/\/laravel.jp<\/a><br>\u65e5\u672c\u8a9e\u306e\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3084\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u60c5\u5831\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-29\">\u30d0\u30fc\u30b8\u30e7\u30f3\u5c65\u6b74\u3068\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/h4>\n\n\n\n<p>Laravel\u306f6\u30f6\u6708\u306b\u4e00\u5ea6\u306e\u30e1\u30b8\u30e3\u30fc\u30ea\u30ea\u30fc\u30b9\u30b5\u30a4\u30af\u30eb\u3092\u63a1\u7528\u3057\u3066\u304a\u308a\u3001\u8a08\u753b\u7684\u306a\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n<div id=\"id-ba13510b-98ba-4c27-9ea6-8a12cc65205e\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d0\u30fc\u30b8\u30e7\u30f3<\/th><th>\u30ea\u30ea\u30fc\u30b9\u65e5<\/th><th>PHP\u8981\u4ef6<\/th><th>\u4e3b\u306a\u7279\u5fb4<\/th><\/tr><\/thead><tbody><tr><td>10.x<\/td><td>2023\u5e742\u6708<\/td><td>PHP 8.1+<\/td><td>Process API\u3001\u30de\u30eb\u30c1\u30ab\u30e9\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/td><\/tr><tr><td>9.x<\/td><td>2022\u5e742\u6708<\/td><td>PHP 8.0+<\/td><td>\u533f\u540d\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3001\u30eb\u30fc\u30c8\u30b0\u30eb\u30fc\u30d7<\/td><\/tr><tr><td>8.x<\/td><td>2020\u5e749\u6708<\/td><td>PHP 7.3+<\/td><td>\u30af\u30e9\u30b9\u30d9\u30fc\u30b9\u306e\u30d5\u30a1\u30af\u30c8\u30ea\u3001Jetstream<\/td><\/tr><tr><td>7.x<\/td><td>2020\u5e743\u6708<\/td><td>PHP 7.2.5+<\/td><td>Fluent\u306a\u6587\u5b57\u5217\u64cd\u4f5c\u3001HTTP\u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/td><\/tr><tr><td>6.x (LTS)<\/td><td>2019\u5e749\u6708<\/td><td>PHP 7.2+<\/td><td>Laravel\u304c\u63d0\u4f9b\u3059\u308bLTS\u7248\u3001Vapor\u5bfe\u5fdc<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-30\">Laravel\u958b\u767a\u8005\u306e\u5e02\u5834\u4fa1\u5024<\/h4>\n\n\n\n<p>Laravel\u958b\u767a\u8005\u306e\u9700\u8981\u306f\u9ad8\u304f\u30012024\u5e74\u73fe\u5728\u3082\u5897\u52a0\u50be\u5411\u306b\u3042\u308a\u307e\u3059\u3002\u7279\u306b\u4ee5\u4e0b\u306e\u30b9\u30ad\u30eb\u3092\u6301\u3064Laravel\u958b\u767a\u8005\u306f\u5e02\u5834\u3067\u8a55\u4fa1\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Laravel\u3092\u7528\u3044\u305fAPI\u8a2d\u8a08\u30fb\u958b\u767a<\/li>\n\n\n\n<li>TDD\uff08\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\uff09\u306e\u5b9f\u8df5<\/li>\n\n\n\n<li>CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9<\/li>\n\n\n\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>Docker\u3092\u7528\u3044\u305f\u74b0\u5883\u69cb\u7bc9<\/li>\n<\/ul>\n\n\n\n<p>\u5e74\u53ce\u30ec\u30f3\u30b8\u306f\u7d4c\u9a13\u3084\u30b9\u30ad\u30eb\u306b\u3088\u308a\u5e45\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u4ed6\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u9ad8\u3044\u50be\u5411\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-31\">Laravel\u306e\u5b9f\u8df5\u7684\u30b3\u30fc\u30c9\u4f8b<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306b\u30b7\u30f3\u30d7\u30eb\u306a\u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u306e\u57fa\u672c\u69cb\u6210\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>Model\uff08\u30e2\u30c7\u30eb\uff09<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Models\/Post.php\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Post extends Model\n{\n    protected $fillable = ['title', 'content', 'user_id'];\n    \n    public function user()\n    {\n        return $this-&gt;belongsTo(User::class);\n    }\n    \n    public function comments()\n    {\n        return $this-&gt;hasMany(Comment::class);\n    }\n    \n    \/\/ \u516c\u958b\u6e08\u307f\u6295\u7a3f\u306e\u307f\u3092\u53d6\u5f97\u3059\u308b\u30b9\u30b3\u30fc\u30d7\n    public function scopePublished($query)\n    {\n        return $query-&gt;where('status', 'published');\n    }\n}\n<\/pre>\n\n\n\n<p><strong>Controller\uff08\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\uff09<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Http\/Controllers\/PostController.php\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Post;\nuse Illuminate\\Http\\Request;\n\nclass PostController extends Controller\n{\n    public function index()\n    {\n        $posts = Post::with('user')\n                    -&gt;published()\n                    -&gt;latest()\n                    -&gt;paginate(10);\n                    \n        return view('posts.index', compact('posts'));\n    }\n    \n    public function show(Post $post)  \/\/ \u30eb\u30fc\u30c8\u30e2\u30c7\u30eb\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\n    {\n        return view('posts.show', compact('post'));\n    }\n    \n    public function store(Request $request)\n    {\n        $validated = $request-&gt;validate([\n            'title' =&gt; 'required|max:255',\n            'content' =&gt; 'required',\n            'status' =&gt; 'in:draft,published'\n        ]);\n        \n        $post = auth()-&gt;user()-&gt;posts()-&gt;create($validated);\n        \n        return redirect()-&gt;route('posts.show', $post)\n                        -&gt;with('success', '\u6295\u7a3f\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\uff01');\n    }\n}\n<\/pre>\n\n\n\n<p><strong>View\uff08\u30d3\u30e5\u30fc\uff09<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- resources\/views\/posts\/index.blade.php --&gt;\n@extends('layouts.app')\n\n@section('content')\n    &lt;div class=\"container\"&gt;\n        &lt;h1&gt;\u6700\u65b0\u306e\u6295\u7a3f&lt;\/h1&gt;\n        \n        @foreach ($posts as $post)\n            &lt;div class=\"card mb-4\"&gt;\n                &lt;div class=\"card-body\"&gt;\n                    &lt;h2 class=\"card-title\"&gt;\n                        &lt;a href=\"{{ route('posts.show', $post) }}\"&gt;{{ $post-&gt;title }}&lt;\/a&gt;\n                    &lt;\/h2&gt;\n                    &lt;p class=\"card-subtitle text-muted\"&gt;\n                        {{ $post-&gt;user-&gt;name }}\u3055\u3093\u304c{{ $post-&gt;created_at-&gt;diffForHumans() }}\u306b\u6295\u7a3f\n                    &lt;\/p&gt;\n                    &lt;div class=\"card-text mt-3\"&gt;\n                        {{ Str::limit($post-&gt;content, 200) }}\n                    &lt;\/div&gt;\n                    &lt;a href=\"{{ route('posts.show', $post) }}\" class=\"btn btn-primary mt-2\"&gt;\n                        \u7d9a\u304d\u3092\u8aad\u3080\n                    &lt;\/a&gt;\n                &lt;\/div&gt;\n            &lt;\/div&gt;\n        @endforeach\n        \n        {{ $posts-&gt;links() }}\n    &lt;\/div&gt;\n@endsection\n<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Laravel\u3067\u306fMVC\u30d1\u30bf\u30fc\u30f3\u306b\u6cbf\u3063\u3066\u3001\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u660e\u78ba\u306b\u5206\u96e2\u3057\u306a\u304c\u3089\u958b\u767a\u3092\u9032\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u63d0\u4f9b\u3059\u308b\u6a5f\u80fd\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30bb\u30ad\u30e5\u30a2\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u52b9\u7387\u7684\u306b\u66f8\u304f\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-32\">Symfony\uff1a\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5411\u3051\u306e\u5805\u7262\u306a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/symfony.com\/logos\/symfony_black_02.svg\" alt=\"Symfony\"><\/figure>\n\n\n\n<p><strong>\u30d0\u30fc\u30b8\u30e7\u30f3<\/strong>: 6.4 LTS \/ 7.0\uff082024\u5e745\u6708\u73fe\u5728\uff09<br><strong>\u521d\u30ea\u30ea\u30fc\u30b9<\/strong>: 2005\u5e74<br><strong>\u4f5c\u8005<\/strong>: Fabien Potencier<br><strong>\u958b\u767a\u4f01\u696d<\/strong>: SensioLabs<br><strong>\u30e9\u30a4\u30bb\u30f3\u30b9<\/strong>: MIT License<br><strong>GitHub\u30b9\u30bf\u30fc\u6570<\/strong>: 28,000+<\/p>\n\n\n\n<p>Symfony\u306f\u5805\u7262\u6027\u3068\u62e1\u5f35\u6027\u306b\u512a\u308c\u305f\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b0\u30ec\u30fc\u30c9\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u30022005\u5e74\u306e\u521d\u30ea\u30ea\u30fc\u30b9\u4ee5\u6765\u3001PHP\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u4e2d\u6838\u3068\u3057\u3066\u9032\u5316\u3092\u7d9a\u3051\u3066\u304d\u307e\u3057\u305f\u3002Symfony\u306e\u7279\u7b46\u3059\u3079\u304d\u70b9\u306f\u3001\u9ad8\u5ea6\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3055\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u6307\u5411\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u3042\u308a\u300180\u4ee5\u4e0a\u306e\u72ec\u7acb\u3057\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u5fc5\u8981\u306a\u3082\u306e\u3060\u3051\u3092\u9078\u3093\u3067\u5229\u7528\u3067\u304d\u308b\u67d4\u8edf\u6027\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u5b9f\u969b\u3001Laravel\u3084Drupal\u3001\u3055\u3089\u306b\u306fMagento\u306a\u3069\u4ed6\u306e\u591a\u304f\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3084CMS\u3082Symfony\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u5185\u90e8\u7684\u306b\u5229\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-33\">\u4e3b\u306a\u7279\u5fb4\u3068\u9577\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u5ea6\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u69cb\u9020<\/strong>: \u5fc5\u8981\u306a\u6a5f\u80fd\u306e\u307f\u3092\u9078\u3093\u3067\u5229\u7528\u3067\u304d\u308b\u30e2\u30b8\u30e5\u30fc\u30eb\u5f0f\u306e\u8a2d\u8a08\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8efd\u91cf\u306b\u4fdd\u3061\u306a\u304c\u3089\u5fc5\u8981\u306a\u6a5f\u80fd\u3092\u7d44\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u4f9d\u5b58\u6027\u6ce8\u5165\u30b3\u30f3\u30c6\u30ca<\/strong>: \u30af\u30e9\u30b9\u9593\u306e\u758e\u7d50\u5408\u3092\u5b9f\u73fe\u3059\u308b\u5f37\u529b\u306aDI\uff08Dependency Injection\uff09\u30b7\u30b9\u30c6\u30e0\u3092\u63d0\u4f9b\u3057\u3001\u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u3068\u4fdd\u5b88\u6027\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u53b3\u683c\u306a\u8a2d\u8a08\u539f\u5247<\/strong>: SOLID\u539f\u5247\u3084\u30c7\u30b6\u30a4\u30f3\u30d1\u30bf\u30fc\u30f3\u306b\u57fa\u3065\u3044\u305f\u8a2d\u8a08\u3067\u3001\u5805\u7262\u3067\u62e1\u5f35\u6027\u306e\u9ad8\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3092\u4fc3\u9032\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9577\u671f\u30b5\u30dd\u30fc\u30c8(LTS)<\/strong>: \u4f01\u696d\u5411\u3051\u306b\u6700\u59274\u5e74\u9593\u306e\u30b5\u30dd\u30fc\u30c8\u3092\u63d0\u4f9b\u3059\u308bLTS\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308a\u3001\u5b89\u5b9a\u6027\u3068\u9577\u671f\u7684\u306a\u4fdd\u5b88\u6027\u3092\u78ba\u4fdd\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5546\u7528\u30b5\u30dd\u30fc\u30c8<\/strong>: SensioLabs\u306b\u3088\u308b\u516c\u5f0f\u306e\u5546\u7528\u30b5\u30dd\u30fc\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u3066\u304a\u308a\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5c0e\u5165\u306b\u304a\u3051\u308b\u5b89\u5fc3\u611f\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9ad8\u3044\u67d4\u8edf\u6027<\/strong>: \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5168\u4f53\u3092\u4f7f\u3046\u3053\u3068\u3082\u3001\u500b\u5225\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3060\u3051\u3092\u4f7f\u3046\u3053\u3068\u3082\u3067\u304d\u3001\u65e2\u5b58\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u6bb5\u968e\u7684\u5c0e\u5165\u3082\u5bb9\u6613\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u512a\u308c\u305f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong>: \u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\u3068\u30d7\u30ed\u30d5\u30a1\u30a4\u30e9\u304c\u5145\u5b9f\u3057\u3066\u304a\u308a\u3001\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u3082\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u767a\u63ee\u3057\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-34\">\u77ed\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5b66\u7fd2\u66f2\u7dda\u306e\u6025\u3055<\/strong>: \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4ed5\u7d44\u307f\u3084\u8a2d\u8a08\u601d\u60f3\u3092\u7406\u89e3\u3059\u308b\u306e\u306b\u6642\u9593\u304c\u304b\u304b\u308a\u3001\u521d\u5fc3\u8005\u306b\u306f\u6577\u5c45\u304c\u9ad8\u304f\u611f\u3058\u3089\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8a2d\u5b9a\u306e\u8907\u96d1\u3055<\/strong>: \u67d4\u8edf\u6027\u306e\u9ad8\u3055\u3086\u3048\u306b\u8a2d\u5b9a\u9805\u76ee\u304c\u591a\u304f\u3001\u521d\u671f\u8a2d\u5b9a\u304c\u8907\u96d1\u306b\u306a\u308a\u304c\u3061\u3067\u3059\u3002\u7279\u306bYAML\u3084XML\u3067\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306b\u6163\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u60c5\u5831\u306e\u5c11\u306a\u3055<\/strong>: \u65e5\u672c\u8a9e\u3067\u306e\u60c5\u5831\u3084\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304cLaravel\u306a\u3069\u3068\u6bd4\u8f03\u3057\u3066\u5c11\u306a\u304f\u3001\u554f\u984c\u89e3\u6c7a\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5c0f\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u904e\u5270\u3055<\/strong>: \u30b7\u30f3\u30d7\u30eb\u306aWeb\u30b5\u30a4\u30c8\u3084\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u958b\u767a\u306b\u306f\u6a5f\u80fd\u904e\u591a\u3067\u3001\u521d\u671f\u69cb\u7bc9\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u30b1\u30fc\u30b9\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-35\">\u6280\u8853\u7684\u7279\u5fb4<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-36\">1. \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>Symfony\u306f80\u4ee5\u4e0a\u306e\u72ec\u7acb\u3057\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u69cb\u6210\u3055\u308c\u3066\u304a\u308a\u3001\u3053\u308c\u3089\u306f\u5358\u4f53\u3067\u3082\u4f7f\u7528\u53ef\u80fd\u3067\u3059\u3002\u5b9f\u969b\u3001Laravel\u3084Drupal\u306a\u3069\u306e\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3082\u591a\u304f\u306eSymfony\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u5229\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4e3b\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u4f8b\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HttpFoundation: \u30ea\u30af\u30a8\u30b9\u30c8\/\u30ec\u30b9\u30dd\u30f3\u30b9\u51e6\u7406<\/li>\n\n\n\n<li>Routing: URL\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/li>\n\n\n\n<li>Security: \u8a8d\u8a3c\u30fb\u8a8d\u53ef<\/li>\n\n\n\n<li>Form: \u30d5\u30a9\u30fc\u30e0\u51e6\u7406<\/li>\n\n\n\n<li>Validator: \u30c7\u30fc\u30bf\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>Console: CLI\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u69cb\u7bc9<\/li>\n\n\n\n<li>Messenger: \u975e\u540c\u671f\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-37\">2. \u4f9d\u5b58\u6027\u6ce8\u5165\u30b3\u30f3\u30c6\u30ca<\/h5>\n\n\n\n<p>Symfony\u306e\u6838\u3068\u306a\u308b\u6a5f\u80fd\u306e\u4e00\u3064\u3067\u3001\u30b5\u30fc\u30d3\u30b9\u306e\u5b9a\u7fa9\u3001\u8a2d\u5b9a\u3001\u53d6\u5f97\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3067\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u9593\u306e\u7d50\u5408\u5ea6\u3092\u4e0b\u3052\u3001\u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u3092\u9ad8\u3081\u308b\u3053\u3068\u304c\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=\"\"># config\/services.yaml\nservices:\n    # \u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\n    _defaults:\n        autowire: true      # \u578b\u30d2\u30f3\u30c8\u306b\u3088\u308b\u81ea\u52d5\u6ce8\u5165\n        autoconfigure: true # \u30b5\u30fc\u30d3\u30b9\u30bf\u30b0\u306e\u81ea\u52d5\u8a2d\u5b9a\n\n    # \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u81ea\u52d5\u767b\u9332\n    App\\:\n        resource: '..\/src\/'\n        exclude:\n            - '..\/src\/DependencyInjection\/'\n            - '..\/src\/Entity\/'\n            - '..\/src\/Kernel.php'\n\n    # \u660e\u793a\u7684\u306a\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\u306e\u4f8b\n    App\\Service\\NewsletterGenerator:\n        arguments:\n            $mailer: '@mailer'\n            $templating: '@twig'\n<\/pre>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u4f7f\u7528\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=\"\">\/\/ src\/Controller\/ProductController.php\nnamespace App\\Controller;\n\nuse App\\Service\\ProductService;\nuse Symfony\\Bundle\\FrameworkBundle\\Controller\\AbstractController;\nuse Symfony\\Component\\HttpFoundation\\Response;\nuse Symfony\\Component\\Routing\\Annotation\\Route;\n\nclass ProductController extends AbstractController\n{\n    private $productService;\n    \n    \/\/ \u4f9d\u5b58\u6027\u306e\u81ea\u52d5\u6ce8\u5165\n    public function __construct(ProductService $productService)\n    {\n        $this-&gt;productService = $productService;\n    }\n    \n    #[Route('\/products', name: 'product_list')]\n    public function list(): Response\n    {\n        $products = $this-&gt;productService-&gt;findAll();\n        \n        return $this-&gt;render('product\/list.html.twig', [\n            'products' =&gt; $products,\n        ]);\n    }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-38\">3. \u30d5\u30a9\u30fc\u30e0\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>Symfony\u306e\u7279\u7b46\u3059\u3079\u304d\u6a5f\u80fd\u306e\u4e00\u3064\u304c\u5f37\u529b\u306a\u30d5\u30a9\u30fc\u30e0\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002\u8907\u96d1\u306a\u30d5\u30a9\u30fc\u30e0\u306e\u4f5c\u6210\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3001\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u52b9\u7387\u5316\u3057\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=\"\">\/\/ src\/Form\/ProductType.php\nnamespace App\\Form;\n\nuse App\\Entity\\Product;\nuse App\\Entity\\Category;\nuse Symfony\\Bridge\\Doctrine\\Form\\Type\\EntityType;\nuse Symfony\\Component\\Form\\AbstractType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\MoneyType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\TextareaType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\TextType;\nuse Symfony\\Component\\Form\\FormBuilderInterface;\nuse Symfony\\Component\\OptionsResolver\\OptionsResolver;\n\nclass ProductType extends AbstractType\n{\n    public function buildForm(FormBuilderInterface $builder, array $options)\n    {\n        $builder\n            -&gt;add('name', TextType::class, [\n                'label' =&gt; '\u5546\u54c1\u540d',\n                'attr' =&gt; ['placeholder' =&gt; '\u5546\u54c1\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044']\n            ])\n            -&gt;add('price', MoneyType::class, [\n                'label' =&gt; '\u4fa1\u683c',\n                'currency' =&gt; 'JPY'\n            ])\n            -&gt;add('description', TextareaType::class, [\n                'label' =&gt; '\u8aac\u660e',\n                'required' =&gt; false\n            ])\n            -&gt;add('category', EntityType::class, [\n                'class' =&gt; Category::class,\n                'choice_label' =&gt; 'name',\n                'label' =&gt; '\u30ab\u30c6\u30b4\u30ea'\n            ]);\n    }\n\n    public function configureOptions(OptionsResolver $resolver)\n    {\n        $resolver-&gt;setDefaults([\n            'data_class' =&gt; Product::class,\n        ]);\n    }\n}\n<\/pre>\n\n\n\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u4f7f\u7528\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=\"\">#[Route('\/product\/new', name: 'product_new')]\npublic function new(Request $request, EntityManagerInterface $entityManager): Response\n{\n    $product = new Product();\n    $form = $this-&gt;createForm(ProductType::class, $product);\n    $form-&gt;handleRequest($request);\n    \n    if ($form-&gt;isSubmitted() &amp;&amp; $form-&gt;isValid()) {\n        $entityManager-&gt;persist($product);\n        $entityManager-&gt;flush();\n        \n        $this-&gt;addFlash('success', '\u5546\u54c1\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\uff01');\n        return $this-&gt;redirectToRoute('product_show', ['id' =&gt; $product-&gt;getId()]);\n    }\n    \n    return $this-&gt;render('product\/new.html.twig', [\n        'form' =&gt; $form-&gt;createView(),\n    ]);\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-39\">4. \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/h5>\n\n\n\n<p>Symfony\u306f\u5f37\u529b\u304b\u3064\u67d4\u8edf\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b7\u30b9\u30c6\u30e0\u3092\u63d0\u4f9b\u3057\u3001\u8907\u96d1\u306a\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u8981\u4ef6\u306b\u3082\u5bfe\u5fdc\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=\"\"># config\/packages\/security.yaml\nsecurity:\n    # \u8a8d\u8a3c\u30d7\u30ed\u30d0\u30a4\u30c0\uff08\u30e6\u30fc\u30b6\u30fc\u306e\u53d6\u5f97\u65b9\u6cd5\uff09\n    providers:\n        app_user_provider:\n            entity:\n                class: App\\Entity\\User\n                property: email\n    \n    # \u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30cf\u30c3\u30b7\u30e5\u5316\u65b9\u6cd5\n    password_hashers:\n        App\\Entity\\User:\n            algorithm: auto\n    \n    # \u30d5\u30a1\u30a4\u30a2\u30a6\u30a9\u30fc\u30eb\u8a2d\u5b9a\n    firewalls:\n        dev:\n            pattern: ^\/(_(profiler|wdt)|css|images|js)\/\n            security: false\n        main:\n            lazy: true\n            provider: app_user_provider\n            custom_authenticator: App\\Security\\LoginFormAuthenticator\n            logout:\n                path: app_logout\n            \n            # \u305d\u306e\u4ed6\u306e\u8a8d\u8a3c\u65b9\u6cd5\uff08Remember Me, API\u8a8d\u8a3c\u306a\u3069\uff09\n    \n    # \u30a2\u30af\u30bb\u30b9\u5236\u5fa1\n    access_control:\n        - { path: ^\/admin, roles: ROLE_ADMIN }\n        - { path: ^\/profile, roles: ROLE_USER }\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-40\">5. \u30b3\u30f3\u30bd\u30fc\u30eb\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/h5>\n\n\n\n<p>Symfony\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u7bc9\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u305f\u3081\u306e\u512a\u308c\u305f\u30c4\u30fc\u30eb\u30bb\u30c3\u30c8\u3092\u63d0\u4f9b\u3057\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=\"\">\/\/ src\/Command\/SendNewsletterCommand.php\nnamespace App\\Command;\n\nuse App\\Service\\NewsletterService;\nuse Symfony\\Component\\Console\\Attribute\\AsCommand;\nuse Symfony\\Component\\Console\\Command\\Command;\nuse Symfony\\Component\\Console\\Input\\InputArgument;\nuse Symfony\\Component\\Console\\Input\\InputInterface;\nuse Symfony\\Component\\Console\\Output\\OutputInterface;\nuse Symfony\\Component\\Console\\Style\\SymfonyStyle;\n\n#[AsCommand(\n    name: 'app:send-newsletter',\n    description: '\u6307\u5b9a\u3055\u308c\u305f\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\u3092\u30e6\u30fc\u30b6\u30fc\u306b\u9001\u4fe1\u3057\u307e\u3059',\n)]\nclass SendNewsletterCommand extends Command\n{\n    private $newsletterService;\n    \n    public function __construct(NewsletterService $newsletterService)\n    {\n        parent::__construct();\n        $this-&gt;newsletterService = $newsletterService;\n    }\n    \n    protected function configure(): void\n    {\n        $this\n            -&gt;addArgument('newsletter-id', InputArgument::REQUIRED, '\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fcID')\n            -&gt;addArgument('recipient-type', InputArgument::OPTIONAL, '\u53d7\u4fe1\u8005\u30bf\u30a4\u30d7 (all, premium, free)', 'all');\n    }\n    \n    protected function execute(InputInterface $input, OutputInterface $output): int\n    {\n        $io = new SymfonyStyle($input, $output);\n        $newsletterId = $input-&gt;getArgument('newsletter-id');\n        $recipientType = $input-&gt;getArgument('recipient-type');\n        \n        $io-&gt;title('\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\u9001\u4fe1\u3092\u958b\u59cb\u3057\u307e\u3059');\n        \n        try {\n            $count = $this-&gt;newsletterService-&gt;send($newsletterId, $recipientType);\n            $io-&gt;success(sprintf('%d \u4eba\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f', $count));\n            return Command::SUCCESS;\n        } catch (\\Exception $e) {\n            $io-&gt;error($e-&gt;getMessage());\n            return Command::FAILURE;\n        }\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-41\">Symfony\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0<\/h4>\n\n\n\n<p>Symfony\u306b\u306f\u8c4a\u5bcc\u306a\u516c\u5f0f\u30fb\u975e\u516c\u5f0f\u306e\u62e1\u5f35\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>API Platform<\/strong>: Symfony\u30d9\u30fc\u30b9\u306e\u5f37\u529b\u306aAPI\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3002REST\u304a\u3088\u3073GraphQL API\u3092\u8fc5\u901f\u306b\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>EasyAdmin<\/strong>: \u7ba1\u7406\u753b\u9762\u3092\u77ed\u6642\u9593\u3067\u69cb\u7bc9\u3067\u304d\u308b\u30d0\u30f3\u30c9\u30eb\u3002\u8a2d\u5b9a\u3060\u3051\u3067\u5b8c\u5168\u306a\u7ba1\u7406\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30a4\u30b9\u3092\u751f\u6210\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Doctrine<\/strong>: Symfony\u3067\u3088\u304fSK\u7528\u3055\u308c\u308bORM\u30e9\u30a4\u30d6\u30e9\u30ea\u3002\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u30de\u30c3\u30d4\u30f3\u30b0\u3068\u9ad8\u5ea6\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Symfony Messenger<\/strong>: \u975e\u540c\u671f\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0\/\u30ad\u30e5\u30fc\u30b7\u30b9\u30c6\u30e0\u3002\u30d0\u30c3\u30af\u30b0\u30e9\u30a6\u30f3\u30c9\u51e6\u7406\u3084\u30b5\u30fc\u30d3\u30b9\u9593\u901a\u4fe1\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Symfony UX<\/strong>: \u30e2\u30c0\u30f3\u306a\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u63d0\u4f9b\u3059\u308b\u30a4\u30cb\u30b7\u30a2\u30c1\u30d6\u3002Stimulus.js\u3068\u306e\u7d71\u5408\u306a\u3069\u3092\u542b\u307f\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-42\">Symfony\u306b\u6700\u9069\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h4>\n\n\n\n<p>Symfony\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u7279\u306b\u9069\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u9577\u671f\u904b\u7528\u3092\u524d\u63d0\u3068\u3057\u305f\u30df\u30c3\u30b7\u30e7\u30f3\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u3067\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/strong>: \u500b\u5225\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u6d3b\u7528\u3057\u3066\u3001\u8efd\u91cf\u3067\u7279\u5316\u3057\u305f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>API\u958b\u767a<\/strong>: API Platform\u3068\u306e\u7d44\u307f\u5408\u308f\u305b\u306b\u3088\u308a\u3001\u9ad8\u5ea6\u306aRESTful API\u3084GraphQL API\u3092\u52b9\u7387\u7684\u306b\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u6301\u3064\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u5805\u7262\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u62e1\u5f35\u6027\u306b\u3088\u308a\u3001\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30eb\u30fc\u30eb\u306e\u5b9f\u88c5\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u56fd\u969b\u5316\u30fb\u591a\u8a00\u8a9e\u5bfe\u5fdc\u304c\u5fc5\u8981\u306a\u30b5\u30a4\u30c8<\/strong>: \u9ad8\u5ea6\u306a\u56fd\u969b\u5316\u30fb\u5730\u57df\u5316\u6a5f\u80fd\u3092\u6a19\u6e96\u3067\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-43\">\u5c0e\u5165\u4e8b\u4f8b<\/h4>\n\n\n\n<p>\u591a\u304f\u306e\u5927\u4f01\u696d\u3084\u30b5\u30fc\u30d3\u30b9\u304cSymfony\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>BlaBlaCar<\/strong>: \u6b27\u5dde\u6700\u5927\u306e\u30ab\u30fc\u30b7\u30a7\u30a2\u30ea\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9<\/li>\n\n\n\n<li><strong>Spotify<\/strong>: \u4e00\u90e8\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30b7\u30b9\u30c6\u30e0\u306b\u63a1\u7528<\/li>\n\n\n\n<li><strong>Dailymotion<\/strong>: \u30d5\u30e9\u30f3\u30b9\u767a\u306e\u52d5\u753b\u5171\u6709\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/li>\n\n\n\n<li><strong>TED<\/strong>: \u8457\u540d\u306a\u8b1b\u6f14\u5171\u6709\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/li>\n\n\n\n<li><strong>Trivago<\/strong>: \u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30db\u30c6\u30eb\u691c\u7d22\u30a8\u30f3\u30b8\u30f3<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-44\">\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>Symfony\u306e\u5b66\u7fd2\u306b\u306f\u4ee5\u4e0b\u306e\u30ea\u30bd\u30fc\u30b9\u304c\u5f79\u7acb\u3061\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong>: <a href=\"https:\/\/symfony.com\/doc\/current\/index.html\">symfony.com\/doc<\/a> \u2013 \u975e\u5e38\u306b\u8a73\u7d30\u304b\u3064\u4f53\u7cfb\u7684\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\uff08\u82f1\u8a9e\uff09\u3002<\/li>\n\n\n\n<li><strong>SymfonyCasts<\/strong>: <a href=\"https:\/\/symfonycasts.com\/\">symfonycasts.com<\/a> \u2013 \u516c\u5f0f\u306e\u30d3\u30c7\u30aa\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u30b5\u30a4\u30c8\u3067\u3001\u57fa\u790e\u304b\u3089\u5fdc\u7528\u307e\u3067\u5b66\u3079\u307e\u3059\uff08\u82f1\u8a9e\u3001\u6709\u6599\/\u4e00\u90e8\u7121\u6599\uff09\u3002<\/li>\n\n\n\n<li><strong>Symfony Japan<\/strong>: \u65e5\u672c\u8a9e\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304c\u5b9a\u671f\u7684\u306b\u52c9\u5f37\u4f1a\u3084\u30a4\u30d9\u30f3\u30c8\u3092\u958b\u50ac\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-45\">\u30d0\u30fc\u30b8\u30e7\u30f3\u5c65\u6b74\u3068\u30b5\u30dd\u30fc\u30c8\u72b6\u6cc1<\/h4>\n\n\n\n<p>Symfony\u306f\u660e\u78ba\u306a\u30ea\u30ea\u30fc\u30b9\u30b5\u30a4\u30af\u30eb\u3068\u30b5\u30dd\u30fc\u30c8\u30dd\u30ea\u30b7\u30fc\u3092\u6301\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-f81de99a-abc3-4d44-854f-95343aab34b6\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d0\u30fc\u30b8\u30e7\u30f3<\/th><th>\u30ea\u30ea\u30fc\u30b9\u65e5<\/th><th>\u30b5\u30dd\u30fc\u30c8\u671f\u9650<\/th><th>PHP\u8981\u4ef6<\/th><th>\u4e3b\u306a\u7279\u5fb4<\/th><\/tr><\/thead><tbody><tr><td>7.0<\/td><td>2023\u5e7411\u6708<\/td><td>2024\u5e747\u6708<\/td><td>PHP 8.2+<\/td><td>\u30af\u30ed\u30fc\u30af\u6a5f\u80fd\u3001AssetMapper<\/td><\/tr><tr><td>6.4 LTS<\/td><td>2023\u5e7411\u6708<\/td><td>2027\u5e741\u6708<\/td><td>PHP 8.1+<\/td><td>\u9577\u671f\u30b5\u30dd\u30fc\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3<\/td><\/tr><tr><td>6.0<\/td><td>2021\u5e7411\u6708<\/td><td>2022\u5e747\u6708<\/td><td>PHP 8.0+<\/td><td>\u30af\u30ed\u30c3\u30af\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3001UX\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/td><\/tr><tr><td>5.4 LTS<\/td><td>2021\u5e7411\u6708<\/td><td>2025\u5e741\u6708<\/td><td>PHP 7.2.5+<\/td><td>\u524d\u4e16\u4ee3\u306e\u9577\u671f\u30b5\u30dd\u30fc\u30c8\u30d0\u30fc\u30b8\u30e7\u30f3<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>Symfony\u306e\u7279\u5fb4\u3068\u3057\u3066\u3001LTS\uff08\u9577\u671f\u30b5\u30dd\u30fc\u30c8\uff09\u30d0\u30fc\u30b8\u30e7\u30f3\u304c3\u5e74\u4ee5\u4e0a\u306e\u30b5\u30dd\u30fc\u30c8\u3092\u53d7\u3051\u3089\u308c\u308b\u305f\u3081\u3001\u9577\u671f\u904b\u7528\u3092\u524d\u63d0\u3068\u3057\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3082\u5b89\u5fc3\u3057\u3066\u63a1\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-46\">\u7d50\u8ad6<\/h4>\n\n\n\n<p>Symfony\u306f\u5b66\u7fd2\u30b3\u30b9\u30c8\u306f\u9ad8\u3044\u3082\u306e\u306e\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u5805\u7262\u6027\u3001\u62e1\u5f35\u6027\u3001\u4fdd\u5b88\u6027\u3092\u6c42\u3081\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u3067\u9577\u671f\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001\u9ad8\u5ea6\u306a\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u5fc5\u8981\u306a\u30b1\u30fc\u30b9\u3067\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\u5c0f\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u904e\u5270\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u304c\u3001\u6210\u9577\u3092\u898b\u636e\u3048\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3042\u308c\u3070\u3001\u5c06\u6765\u306e\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3092\u8003\u616e\u3057\u3066Symfony\u3092\u9078\u629e\u3059\u308b\u4fa1\u5024\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-47\">CodeIgniter\uff1a\u8efd\u91cf\u3067\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u3044\u9ad8\u901f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/camo.githubusercontent.com\/5a674002b5c53132b70ad7688986e6838e3e023c2726363c1aa738c0e48ef77d\/68747470733a2f2f63646e2e776f726c64766563746f726c6f676f2e636f6d2f6c6f676f732f636f646569676e697465722e737667\" alt=\"CodeIgniter\"><\/figure>\n\n\n\n<p><strong>\u30d0\u30fc\u30b8\u30e7\u30f3<\/strong>: 4.4.x\uff082024\u5e745\u6708\u73fe\u5728\uff09<br><strong>\u521d\u30ea\u30ea\u30fc\u30b9<\/strong>: 2006\u5e74<br><strong>\u4f5c\u8005<\/strong>: EllisLab\uff08\u73fe\u5728\u306fBritish Columbia Institute of Technology\uff09<br><strong>\u30e9\u30a4\u30bb\u30f3\u30b9<\/strong>: MIT License<br><strong>GitHub\u30b9\u30bf\u30fc\u6570<\/strong>: 15,000+<\/p>\n\n\n\n<p>CodeIgniter\u306f\u300c\u30b7\u30f3\u30d7\u30eb\u3055\u300d\u3068\u300c\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u300d\u3092\u91cd\u8996\u3057\u305f\u8efd\u91cfPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u6700\u5c0f\u9650\u306e\u8a2d\u5b9a\u3067\u958b\u767a\u3092\u59cb\u3081\u3089\u308c\u308b\u305f\u3081\u3001PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5165\u9580\u306b\u6700\u9069\u3067\u3042\u308b\u3068\u540c\u6642\u306b\u3001\u9ad8\u901f\u306a\u51e6\u7406\u6027\u80fd\u3092\u6c42\u3081\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3082\u5a01\u529b\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\u300c\u5c0f\u3055\u304f\u3001\u901f\u304f\u3001\u30b7\u30f3\u30d7\u30eb\u306b\u300d\u3068\u3044\u3046\u8a2d\u8a08\u601d\u60f3\u3092\u8cab\u3044\u3066\u304a\u308a\u3001\u4ed6\u306e\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u3044\u3053\u3068\u304c\u5927\u304d\u306a\u7279\u5fb4\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-48\">\u4e3b\u306a\u7279\u5fb4\u3068\u9577\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8efd\u91cf\u3067\u9ad8\u901f\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong>: \u6700\u5c0f\u9650\u306e\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u3067\u52d5\u4f5c\u3057\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u901f\u5ea6\u304c\u975e\u5e38\u306b\u901f\u3044\u305f\u3081\u3001\u5171\u6709\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u74b0\u5883\u3067\u3082\u5feb\u9069\u306b\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u7de9\u3084\u304b\u306a\u5b66\u7fd2\u66f2\u7dda<\/strong>: \u30b7\u30f3\u30d7\u30eb\u306a\u69cb\u9020\u3068\u660e\u78ba\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306b\u3088\u308a\u3001\u521d\u5fc3\u8005\u3067\u3082\u77ed\u6642\u9593\u3067\u7fd2\u5f97\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8a2d\u5b9a\u3088\u308a\u3082\u898f\u7d04\uff08Convention over Configuration\uff09<\/strong>: \u307b\u3068\u3093\u3069\u8a2d\u5b9a\u3092\u5fc5\u8981\u3068\u305b\u305a\u3001\u898f\u7d04\u306b\u5f93\u3046\u3060\u3051\u3067\u958b\u767a\u3092\u9032\u3081\u3089\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong>: \u5206\u304b\u308a\u3084\u3059\u304f\u6574\u7406\u3055\u308c\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u3066\u304a\u308a\u3001\u65e5\u672c\u8a9e\u8a33\u3082\u516c\u5f0f\u306b\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u6700\u5c0f\u9650\u306e\u30b5\u30fc\u30d0\u30fc\u8981\u4ef6<\/strong>: \u8efd\u91cf\u8a2d\u8a08\u306e\u305f\u3081\u3001\u9650\u3089\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u3057\u304b\u306a\u3044\u74b0\u5883\u3067\u3082\u554f\u984c\u306a\u304f\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5b9f\u7528\u7684\u306a\u30d8\u30eb\u30d1\u30fc\u95a2\u6570<\/strong>: URL\u751f\u6210\u3001\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u306a\u3069\u65e5\u5e38\u7684\u306b\u5fc5\u8981\u3068\u306a\u308b\u6a5f\u80fd\u3092\u30b7\u30f3\u30d7\u30eb\u306b\u5229\u7528\u3067\u304d\u308b\u30d8\u30eb\u30d1\u30fc\u304c\u5145\u5b9f\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u9078\u629e\u306e\u67d4\u8edf\u6027<\/strong>: CodeIgniter 3\uff08PHP 5.6+\u5411\u3051\uff09\u3068CodeIgniter 4\uff08PHP 7.4+\u5411\u3051\uff09\u304b\u3089\u74b0\u5883\u306b\u5408\u308f\u305b\u3066\u9078\u629e\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-49\">\u77ed\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6a5f\u80fd\u306e\u5236\u9650<\/strong>: Laravel\u3084Symfony\u3068\u6bd4\u8f03\u3059\u308b\u3068\u3001\u6a19\u6e96\u3067\u63d0\u4f9b\u3055\u308c\u308b\u6a5f\u80fd\u30bb\u30c3\u30c8\u304c\u9650\u5b9a\u7684\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u975e\u4e92\u63db\u6027<\/strong>: CodeIgniter 3\u304b\u30894\u3078\u306f\u5358\u7d14\u306a\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3067\u306f\u306a\u304f\u3001\u307b\u307c\u66f8\u304d\u76f4\u3057\u304c\u5fc5\u8981\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30e2\u30c0\u30f3\u6a5f\u80fd\u306e\u4e0d\u8db3<\/strong>: \u7279\u306bCodeIgniter 3\u3067\u306fPSR\u6a19\u6e96\u5bfe\u5fdc\u3084\u30aa\u30fc\u30c8\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0\u306a\u3069\u306e\u8fd1\u4ee3\u7684\u306a\u6a5f\u80fd\u304c\u4e0d\u8db3\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5927\u898f\u6a21\u958b\u767a\u3067\u306e\u9650\u754c<\/strong>: \u5927\u898f\u6a21\u3067\u8907\u96d1\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u306f\u3001\u6a5f\u80fd\u4e0d\u8db3\u3092\u611f\u3058\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u898f\u6a21<\/strong>: Laravel\u3084Symfony\u3068\u6bd4\u8f03\u3057\u3066\u3001\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30d1\u30c3\u30b1\u30fc\u30b8\u3084\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u9078\u629e\u80a2\u304c\u5c11\u306a\u3044\u3067\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-50\">\u6280\u8853\u7684\u7279\u5fb4<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-51\">1. \u30b7\u30f3\u30d7\u30eb\u306aMVC\u30d1\u30bf\u30fc\u30f3<\/h5>\n\n\n\n<p>CodeIgniter\u306fMVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u30b7\u30f3\u30d7\u30eb\u306b\u5b9f\u88c5\u3055\u308c\u3066\u304a\u308a\u3001\u521d\u5fc3\u8005\u3067\u3082\u7406\u89e3\u3057\u3084\u3059\u3044\u69cb\u9020\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u307e\u305f\u3001MVC\u306e\u53b3\u683c\u306a\u9069\u7528\u3092\u5f37\u5236\u305b\u305a\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u67d4\u8edf\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>CodeIgniter 3\u306e\u4f8b<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ application\/controllers\/Blog.php\nclass Blog extends CI_Controller {\n    public function index() {\n        \/\/ \u30e2\u30c7\u30eb\u306e\u30ed\u30fc\u30c9\n        $this-&gt;load-&gt;model('blog_model');\n        \n        \/\/ \u30c7\u30fc\u30bf\u306e\u53d6\u5f97\n        $data['posts'] = $this-&gt;blog_model-&gt;get_posts();\n        \n        \/\/ \u30d3\u30e5\u30fc\u306e\u30ed\u30fc\u30c9\n        $this-&gt;load-&gt;view('header');\n        $this-&gt;load-&gt;view('blog\/index', $data);\n        $this-&gt;load-&gt;view('footer');\n    }\n    \n    public function view($id) {\n        $data['post'] = $this-&gt;blog_model-&gt;get_post($id);\n        $this-&gt;load-&gt;view('blog\/view', $data);\n    }\n}\n<\/pre>\n\n\n\n<p><strong>CodeIgniter 4\u306e\u4f8b<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Controllers\/Blog.php\nnamespace App\\Controllers;\n\nuse App\\Models\\BlogModel;\n\nclass Blog extends BaseController\n{\n    public function index()\n    {\n        $model = new BlogModel();\n        $data = [\n            'posts' =&gt; $model-&gt;getPosts()\n        ];\n        \n        return view('blog\/index', $data);\n    }\n    \n    public function view($id = null)\n    {\n        $model = new BlogModel();\n        $data['post'] = $model-&gt;getPost($id);\n        \n        return view('blog\/view', $data);\n    }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-52\">2. \u76f4\u611f\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c<\/h5>\n\n\n\n<p>CodeIgniter\u306f\u8907\u96d1\u306aORM\u3067\u306f\u306a\u304f\u3001SQL\u306e\u77e5\u8b58\u3092\u6d3b\u304b\u305b\u308b\u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u30b7\u30f3\u30d7\u30eb\u306a\u304c\u3089\u3082\u5f37\u529b\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u62bd\u8c61\u5316\u30ec\u30a4\u30e4\u30fc\u3067\u3001\u591a\u304f\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u52b9\u7387\u7684\u306b\u884c\u3048\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=\"\">\/\/ CodeIgniter 4 Model\nnamespace App\\Models;\n\nuse CodeIgniter\\Model;\n\nclass BlogModel extends Model\n{\n    protected $table = 'blog_posts';\n    protected $primaryKey = 'id';\n    protected $allowedFields = ['title', 'content', 'status', 'author_id'];\n    \n    public function getRecentPosts($limit = 5)\n    {\n        return $this-&gt;where('status', 'published')\n                    -&gt;orderBy('created_at', 'DESC')\n                    -&gt;limit($limit)\n                    -&gt;find();\n    }\n    \n    public function searchPosts($keyword)\n    {\n        return $this-&gt;like('title', $keyword)\n                    -&gt;orLike('content', $keyword)\n                    -&gt;where('status', 'published')\n                    -&gt;findAll();\n    }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-53\">3. \u8c4a\u5bcc\u306a\u30d8\u30eb\u30d1\u30fc\u95a2\u6570<\/h5>\n\n\n\n<p>CodeIgniter\u306f\u65e5\u5e38\u7684\u306a\u30bf\u30b9\u30af\u3092\u7c21\u5358\u306b\u5b9f\u884c\u3067\u304d\u308b\u591a\u6570\u306e\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u91cf\u3092\u6e1b\u3089\u3057\u958b\u767a\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\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=\"\">\/\/ URL\u30d8\u30eb\u30d1\u30fc\n\/\/ \u30ea\u30f3\u30af\u751f\u6210\necho anchor('products\/shoes\/123', '\u88fd\u54c1\u8a73\u7d30\u3092\u898b\u308b');\n\n\/\/ \u73fe\u5728\u306eURL\u3092\u53d6\u5f97\n$current_url = current_url();\n\n\/\/ \u30d9\u30fc\u30b9URL\u306b\u30d1\u30b9\u3092\u8ffd\u52a0\n$image_url = base_url('assets\/images\/logo.png');\n\n\/\/ \u65e5\u4ed8\u30d8\u30eb\u30d1\u30fc\n\/\/ \u73fe\u5728\u306e\u65e5\u6642\u3092\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\necho now('Asia\/Tokyo', 'ja_JP');\n\n\/\/ \u65e5\u4ed8\u306e\u5dee\u3092\u4eba\u9593\u304c\u8aad\u307f\u3084\u3059\u3044\u5f62\u5f0f\u3067\u8868\u793a\necho timespan(strtotime('-1 week'), time());  \/\/ \"1\u9031\u9593\u524d\"\n\n\/\/ \u30c6\u30ad\u30b9\u30c8\u30d8\u30eb\u30d1\u30fc\n\/\/ \u6587\u5b57\u6570\u5236\u9650\necho character_limiter($long_text, 100);\n\n\/\/ \u5358\u8a9e\u6570\u5236\u9650\necho word_limiter($long_text, 20);\n\n\/\/ \u8907\u6570\u5f62\/\u5358\u6570\u5f62\u5909\u63db\necho plural('child');  \/\/ \"children\"\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-54\">4. \u30b7\u30f3\u30d7\u30eb\u3067\u5f37\u529b\u306a\u30d5\u30a9\u30fc\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/h5>\n\n\n\n<p>CodeIgniter\u306b\u306f\u5ba3\u8a00\u7684\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u3067\u30d5\u30a9\u30fc\u30e0\u691c\u8a3c\u3092\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u308b\u6a5f\u80fd\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\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=\"\">\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u5185\u3067\u306e\u30d5\u30a9\u30fc\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3 (CodeIgniter 4)\npublic function register()\n{\n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u8a2d\u5b9a\n    $rules = [\n        'username' =&gt; [\n            'rules' =&gt; 'required|min_length[5]|is_unique[users.username]',\n            'errors' =&gt; [\n                'required' =&gt; '\u30e6\u30fc\u30b6\u30fc\u540d\u306f\u5fc5\u9808\u9805\u76ee\u3067\u3059',\n                'min_length' =&gt; '\u30e6\u30fc\u30b6\u30fc\u540d\u306f5\u6587\u5b57\u4ee5\u4e0a\u5fc5\u8981\u3067\u3059',\n                'is_unique' =&gt; '\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u306f\u65e2\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059'\n            ]\n        ],\n        'email' =&gt; 'required|valid_email',\n        'password' =&gt; 'required|min_length[8]',\n        'password_confirm' =&gt; 'required|matches[password]'\n    ];\n    \n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u5b9f\u884c\n    if (! $this-&gt;validate($rules)) {\n        \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u5931\u6557\u6642\n        return view('user\/register', [\n            'validation' =&gt; $this-&gt;validator\n        ]);\n    } else {\n        \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u6210\u529f\u6642\u306e\u51e6\u7406\n        $model = new UserModel();\n        $model-&gt;save([\n            'username' =&gt; $this-&gt;request-&gt;getVar('username'),\n            'email' =&gt; $this-&gt;request-&gt;getVar('email'),\n            'password' =&gt; password_hash($this-&gt;request-&gt;getVar('password'), PASSWORD_DEFAULT)\n        ]);\n        \n        return redirect()-&gt;to('\/login')-&gt;with('message', '\u767b\u9332\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f');\n    }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-55\">5. \u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406<\/h5>\n\n\n\n<p>CodeIgniter\u306f\u8907\u6570\u306e\u30c9\u30e9\u30a4\u30d0\uff08\u30d5\u30a1\u30a4\u30eb\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001Redis\u3001Memcached\u306a\u3069\uff09\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u305f\u30bb\u30c3\u30b7\u30e7\u30f3\u7ba1\u7406\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u3044\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=\"\">\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u5229\u7528 (CodeIgniter 4)\n\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30c7\u30fc\u30bf\u306e\u8a2d\u5b9a\nsession()-&gt;set('username', 'johndoe');\n\n\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\n$username = session('username');\n\n\/\/ \u30bb\u30c3\u30b7\u30e7\u30f3\u30c7\u30fc\u30bf\u306e\u524a\u9664\nsession()-&gt;remove('username');\n\n\/\/ \u30d5\u30e9\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u306e\u8a2d\u5b9a\uff08\u6b21\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u307f\u6709\u52b9\uff09\nsession()-&gt;setFlashdata('success', '\u64cd\u4f5c\u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f');\n\n\/\/ \u30d5\u30e9\u30c3\u30b7\u30e5\u30c7\u30fc\u30bf\u306e\u8868\u793a\uff08\u30d3\u30e5\u30fc\u5185\uff09\n&lt;?php if (session()-&gt;getFlashdata('success')): ?&gt;\n    &lt;div class=\"alert alert-success\"&gt;\n        &lt;?= session()-&gt;getFlashdata('success') ?&gt;\n    &lt;\/div&gt;\n&lt;?php endif; ?&gt;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-56\">CodeIgniter 3 vs CodeIgniter 4<\/h4>\n\n\n\n<p>CodeIgniter\u306b\u306f2\u3064\u306e\u4e3b\u8981\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308a\u3001\u305d\u308c\u305e\u308c\u7279\u6027\u304c\u7570\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n<div id=\"id-967f65c7-eb58-41c8-88f8-e50cd4598985\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd<\/th><th>CodeIgniter 3<\/th><th>CodeIgniter 4<\/th><\/tr><\/thead><tbody><tr><td>PHP\u8981\u4ef6<\/td><td>PHP 5.6+<\/td><td>PHP 7.4+<\/td><\/tr><tr><td>\u540d\u524d\u7a7a\u9593<\/td><td>\u306a\u3057<\/td><td>\u3042\u308a<\/td><\/tr><tr><td>\u30aa\u30fc\u30c8\u30ed\u30fc\u30c7\u30a3\u30f3\u30b0<\/td><td>\u9650\u5b9a\u7684<\/td><td>PSR-4\u6e96\u62e0<\/td><\/tr><tr><td>\u8a2d\u5b9a<\/td><td>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/td><td>\u74b0\u5883\u5909\u6570 + \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/td><\/tr><tr><td>\u30c6\u30b9\u30c8<\/td><td>\u9650\u5b9a\u7684<\/td><td>PHPUnit\u7d71\u5408<\/td><\/tr><tr><td>CLI\u30b5\u30dd\u30fc\u30c8<\/td><td>\u9650\u5b9a\u7684<\/td><td>\u5145\u5b9f<\/td><\/tr><tr><td>\u958b\u767a\u72b6\u6cc1<\/td><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4fee\u6b63\u306e\u307f<\/td><td>\u6d3b\u767a\u306b\u958b\u767a\u4e2d<\/td><\/tr><tr><td>\u9069\u3057\u305f\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9<\/td><td>\u30ec\u30ac\u30b7\u30fc\u74b0\u5883\u3001\u30b7\u30f3\u30d7\u30eb\u306a\u30b5\u30a4\u30c8<\/td><td>\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30e2\u30c0\u30f3\u306aPHP\u958b\u767a<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306fCodeIgniter 4\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001PHP 5.x\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u74b0\u5883\u3067\u306fCodeIgniter 3\u304c\u4f9d\u7136\u3068\u3057\u3066\u4fa1\u5024\u3042\u308b\u9078\u629e\u80a2\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-57\">CodeIgniter\u306b\u6700\u9069\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h4>\n\n\n\n<p>CodeIgniter\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u7279\u306b\u9069\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5c0f\u301c\u4e2d\u898f\u6a21\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u8907\u96d1\u3055\u304c\u4e2d\u7a0b\u5ea6\u307e\u3067\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9ad8\u901f\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u6c42\u3081\u3089\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u5171\u6709\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u74b0\u5883\u3084\u9650\u3089\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u3067\u3082\u9ad8\u901f\u306b\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5b66\u7fd2\u7528\u306e\u6700\u521d\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/strong>: PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6982\u5ff5\u3092\u5b66\u3076\u5165\u9580\u3068\u3057\u3066\u6700\u9069\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30b7\u30f3\u30d7\u30eb\u306aAPI\u958b\u767a<\/strong>: REST API\u306a\u3069\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306e\u8fd1\u4ee3\u5316<\/strong>: \u7279\u306bCodeIgniter 3\u306f\u53e4\u3044PHP\u74b0\u5883\u3067\u3082\u52d5\u4f5c\u3059\u308b\u305f\u3081\u3001\u6bb5\u968e\u7684\u306a\u5237\u65b0\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-58\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u512a\u4f4d\u6027<\/h4>\n\n\n\n<p>CodeIgniter\u306e\u6700\u5927\u306e\u5f37\u307f\u306e\u4e00\u3064\u306f\u305d\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3067\u3059\u3002\u4ed6\u306e\u4e3b\u8981\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u3001\u3088\u308a\u5c11\u306a\u3044\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3068\u3088\u308a\u901f\u3044\u51e6\u7406\u901f\u5ea6\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u7279\u306b\u3001\u5171\u6709\u30db\u30b9\u30c6\u30a3\u30f3\u30b0\u3084\u9650\u3089\u308c\u305f\u30ea\u30bd\u30fc\u30b9\u3057\u304b\u306a\u3044\u74b0\u5883\u3067\u91cd\u8981\u306a\u5229\u70b9\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30c6\u30b9\u30c8\u3067\u306f\u3001\u540c\u7b49\u306e\u6a5f\u80fd\u3092\u5b9f\u88c5\u3057\u305f\u5834\u5408\u3001Laravel\u3084Symfony\u3068\u6bd4\u8f03\u3057\u3066\u7d042\u301c5\u500d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u901f\u5ea6\u3092\u793a\u3059\u7d50\u679c\u3082\u5831\u544a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u306f\u5358\u7d14\u306aBlog\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c6\u30b9\u30c8\u3067\u3001CodeIgniter\u304c1\u79d2\u3042\u305f\u308a\u7d04900\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3067\u304d\u308b\u306e\u306b\u5bfe\u3057\u3001Laravel\u306f\u7d04180\u30ea\u30af\u30a8\u30b9\u30c8\u3001Symfony\u306f\u7d04150\u30ea\u30af\u30a8\u30b9\u30c8\u3068\u3044\u3046\u7d50\u679c\u3067\u3059\uff08\u203b\u74b0\u5883\u306b\u3088\u3063\u3066\u7570\u306a\u308a\u307e\u3059\uff09\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-59\">\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>CodeIgniter\u306f\u5b66\u7fd2\u3057\u3084\u3059\u3055\u3082\u5927\u304d\u306a\u5229\u70b9\u306e\u4e00\u3064\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong>: <a href=\"https:\/\/codeigniter.com\/user_guide\/\">https:\/\/codeigniter.com\/user_guide\/<\/a> \u2013 \u660e\u78ba\u3067\u30b7\u30f3\u30d7\u30eb\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u65e5\u672c\u8a9e\u30e6\u30fc\u30b6\u30ac\u30a4\u30c9<\/strong>: <a href=\"https:\/\/codeigniter.jp\/user_guide\/\">https:\/\/codeigniter.jp\/user_guide\/<\/a> \u2013 \u516c\u5f0f\u306b\u3088\u308b\u65e5\u672c\u8a9e\u7ffb\u8a33\u7248\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>CodeIgniter Forums<\/strong>: \u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30d5\u30a9\u30fc\u30e9\u30e0\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Udemy, YouTube\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/strong>: \u521d\u5fc3\u8005\u5411\u3051\u306e\u30d3\u30c7\u30aa\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u304c\u8c4a\u5bcc\u306b\u5b58\u5728\u3057\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-60\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306bCodeIgniter 4\u3067\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u306e\u57fa\u672c\u69cb\u6210\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Controllers\/Articles.php\nnamespace App\\Controllers;\n\nuse App\\Models\\ArticleModel;\nuse CodeIgniter\\Exceptions\\PageNotFoundException;\n\nclass Articles extends BaseController\n{\n    public function index()\n    {\n        $model = new ArticleModel();\n        $data = [\n            'title' =&gt; '\u8a18\u4e8b\u4e00\u89a7',\n            'articles' =&gt; $model-&gt;where('status', 'published')\n                               -&gt;orderBy('created_at', 'DESC')\n                               -&gt;paginate(10),\n            'pager' =&gt; $model-&gt;pager\n        ];\n        \n        return view('templates\/header', $data)\n             . view('articles\/index')\n             . view('templates\/footer');\n    }\n    \n    public function view($slug = null)\n    {\n        $model = new ArticleModel();\n        $article = $model-&gt;where('slug', $slug)\n                         -&gt;where('status', 'published')\n                         -&gt;first();\n        \n        if (empty($article)) {\n            throw new PageNotFoundException('\u8a18\u4e8b\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f');\n        }\n        \n        $data = [\n            'title' =&gt; $article['title'],\n            'article' =&gt; $article\n        ];\n        \n        return view('templates\/header', $data)\n             . view('articles\/view')\n             . view('templates\/footer');\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u30e2\u30c7\u30eb<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ app\/Models\/ArticleModel.php\nnamespace App\\Models;\n\nuse CodeIgniter\\Model;\n\nclass ArticleModel extends Model\n{\n    protected $table = 'articles';\n    protected $allowedFields = ['title', 'slug', 'body', 'status', 'author_id'];\n    protected $useTimestamps = true;\n    \n    public function getRecentArticles($limit = 5)\n    {\n        return $this-&gt;where('status', 'published')\n                    -&gt;orderBy('created_at', 'DESC')\n                    -&gt;limit($limit)\n                    -&gt;find();\n    }\n    \n    public function getArticlesByCategory($category_id)\n    {\n        return $this-&gt;select('articles.*, categories.name as category')\n                    -&gt;join('article_categories', 'articles.id = article_categories.article_id')\n                    -&gt;join('categories', 'categories.id = article_categories.category_id')\n                    -&gt;where('article_categories.category_id', $category_id)\n                    -&gt;where('articles.status', 'published')\n                    -&gt;findAll();\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u30d3\u30e5\u30fc<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- app\/Views\/articles\/index.php --&gt;\n&lt;h2&gt;&lt;?= esc($title) ?&gt;&lt;\/h2&gt;\n\n&lt;?php if (!empty($articles) &amp;&amp; is_array($articles)): ?&gt;\n    &lt;?php foreach ($articles as $article): ?&gt;\n        &lt;div class=\"article\"&gt;\n            &lt;h3&gt;\n                &lt;a href=\"\/articles\/&lt;?= esc($article['slug']) ?&gt;\"&gt;\n                    &lt;?= esc($article['title']) ?&gt;\n                &lt;\/a&gt;\n            &lt;\/h3&gt;\n            &lt;div class=\"meta\"&gt;\n                \u6295\u7a3f\u65e5: &lt;?= date('Y\u5e74n\u6708j\u65e5', strtotime($article['created_at'])) ?&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"summary\"&gt;\n                &lt;?= character_limiter(strip_tags($article['body']), 200) ?&gt;\n            &lt;\/div&gt;\n            &lt;p&gt;&lt;a href=\"\/articles\/&lt;?= esc($article['slug']) ?&gt;\" class=\"read-more\"&gt;\u7d9a\u304d\u3092\u8aad\u3080&lt;\/a&gt;&lt;\/p&gt;\n        &lt;\/div&gt;\n    &lt;?php endforeach; ?&gt;\n    \n    &lt;!-- \u30da\u30fc\u30b8\u30cd\u30fc\u30b7\u30e7\u30f3 --&gt;\n    &lt;?= $pager-&gt;links() ?&gt;\n&lt;?php else: ?&gt;\n    &lt;h3&gt;\u8a18\u4e8b\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f&lt;\/h3&gt;\n    &lt;p&gt;\u73fe\u5728\u3001\u516c\u958b\u3055\u308c\u3066\u3044\u308b\u8a18\u4e8b\u306f\u3042\u308a\u307e\u305b\u3093\u3002&lt;\/p&gt;\n&lt;?php endif; ?&gt;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-61\">\u7d50\u8ad6<\/h4>\n\n\n\n<p>CodeIgniter\u306f\u300c\u30b7\u30f3\u30d7\u30eb\u3055\u300d\u300c\u30b9\u30d4\u30fc\u30c9\u300d\u300c\u4f4e\u3044\u5b66\u7fd2\u66f2\u7dda\u300d\u3068\u3044\u3046\u4e09\u3064\u306e\u5f37\u307f\u3092\u6301\u3064\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u5927\u898f\u6a21\u3067\u8907\u96d1\u306a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u306f\u6a5f\u80fd\u304c\u4e0d\u8db3\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u5c0f\u301c\u4e2d\u898f\u6a21\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u9ad8\u901f\u306a\u30d7\u30ed\u30c8\u30bf\u30a4\u30d4\u30f3\u30b0\u304c\u5fc5\u8981\u306a\u5834\u9762\u3067\u306f\u975e\u5e38\u306b\u52b9\u679c\u7684\u3067\u3059\u3002\u7279\u306bPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u521d\u5fc3\u8005\u3084\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u91cd\u8996\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u306f\u6700\u9069\u306a\u9078\u629e\u80a2\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>CodeIgniter 4\u306f\u8fd1\u4ee3\u7684\u306aPHP\u958b\u767a\u306e\u6069\u6075\u3092\u53d7\u3051\u3064\u3064\u3001\u305d\u306e\u30b7\u30f3\u30d7\u30eb\u3055\u3068\u9ad8\u901f\u6027\u3092\u7dad\u6301\u3057\u3066\u304a\u308a\u3001\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u63a1\u7528\u4fa1\u5024\u304c\u9ad8\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u4e00\u65b9\u3001PHP 5.x\u3057\u304b\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u306a\u3044\u74b0\u5883\u3067\u306fCodeIgniter 3\u304c\u4f9d\u7136\u3068\u3057\u3066\u6709\u52b9\u306a\u9078\u629e\u80a2\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-62\">CakePHP\uff1a\u898f\u7d04\u91cd\u8996\u306e\u958b\u767a\u52b9\u7387\u3092\u8ffd\u6c42\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/cakephp.org\/v2\/img\/logos\/CakePHP_Logo.png\" alt=\"CakePHP\"><\/figure>\n\n\n\n<p><strong>\u30d0\u30fc\u30b8\u30e7\u30f3<\/strong>: 5.0.x\uff082024\u5e745\u6708\u73fe\u5728\uff09<br><strong>\u521d\u30ea\u30ea\u30fc\u30b9<\/strong>: 2005\u5e74<br><strong>\u4f5c\u8005<\/strong>: Michal Tatarynowicz<br><strong>\u30e9\u30a4\u30bb\u30f3\u30b9<\/strong>: MIT License<br><strong>GitHub\u30b9\u30bf\u30fc\u6570<\/strong>: 8,800+<\/p>\n\n\n\n<p>CakePHP\u306f\u300cConvention over Configuration\uff08\u898f\u7d04\u3088\u308a\u8a2d\u5b9a\uff09\u300d\u306e\u539f\u5247\u306b\u57fa\u3065\u3044\u305fPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3001Ruby\u306e\u300cRuby on Rails\u300d\u306b\u5f71\u97ff\u3092\u53d7\u3051\u3066\u958b\u767a\u3055\u308c\u307e\u3057\u305f\u3002\u898f\u7d04\u306b\u5f93\u3063\u305f\u547d\u540d\u3084\u914d\u7f6e\u3092\u3059\u308b\u3053\u3068\u3067\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u3001\u5c11\u306a\u3044\u30b3\u30fc\u30c9\u91cf\u3067\u8fc5\u901f\u306a\u958b\u767a\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002CRUD\u64cd\u4f5c\u306e\u81ea\u52d5\u751f\u6210\u3084\u30b9\u30ad\u30e3\u30d5\u30a9\u30fc\u30eb\u30c7\u30a3\u30f3\u30b0\u306a\u3069\u3001\u958b\u767a\u52b9\u7387\u3092\u9ad8\u3081\u308b\u6a5f\u80fd\u304c\u8c4a\u5bcc\u306b\u63c3\u3063\u3066\u3044\u307e\u3059\u3002\u65e5\u672c\u3067\u3082\u591a\u304f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u63a1\u7528\u3055\u308c\u3066\u304a\u308a\u3001\u56fd\u5185\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3082\u6d3b\u767a\u306a\u70b9\u3082\u7279\u5fb4\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-63\">\u4e3b\u306a\u7279\u5fb4\u3068\u9577\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u300c\u898f\u7d04\u3088\u308a\u8a2d\u5b9a\u300d\u306e\u539f\u5247<\/strong>: \u547d\u540d\u898f\u5247\u306b\u5f93\u3046\u3053\u3068\u3067\u8907\u96d1\u306a\u8a2d\u5b9a\u304c\u4e0d\u8981\u306b\u306a\u308a\u3001\u958b\u767a\u52b9\u7387\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u307e\u3059\u3002\u305f\u3068\u3048\u3070<code>UsersController<\/code>\u306f\u81ea\u52d5\u7684\u306b<code>users<\/code>\u30c6\u30fc\u30d6\u30eb\u3068\u30de\u30c3\u30d4\u30f3\u30b0\u3055\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5f37\u529b\u306aORM<\/strong>: \u76f4\u611f\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3068\u8907\u96d1\u306a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3092\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u308b\u5f37\u529b\u306aORM\u3092\u5099\u3048\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>CRUD\u81ea\u52d5\u751f\u6210<\/strong>: \u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u300cBake\u300d\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u304b\u3089\u30e2\u30c7\u30eb\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001\u30d3\u30e5\u30fc\u307e\u3067\u3092\u81ea\u52d5\u751f\u6210\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5305\u62ec\u7684\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u6a5f\u80fd<\/strong>: \u30e2\u30c7\u30eb\u30ec\u30d9\u30eb\u3067\u306e\u9ad8\u5ea6\u306a\u30c7\u30fc\u30bf\u691c\u8a3c\u6a5f\u80fd\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u304a\u308a\u3001\u4e00\u8cab\u6027\u306e\u3042\u308b\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u7c21\u5358\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5145\u5b9f\u3057\u305f\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0<\/strong>: \u8907\u6570\u306e\u8a8d\u8a3c\u65b9\u5f0f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3001\u67d4\u8edf\u306a\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u30b5\u30dd\u30fc\u30c8<\/strong>: PHPUnit\u3068\u306e\u7d71\u5408\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u304a\u308a\u3001\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3092\u4fc3\u9032\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u6d3b\u767a\u306a\u65e5\u672c\u8a9e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3<\/strong>: \u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u65e5\u672c\u8a9e\u8a33\u304c\u5145\u5b9f\u3057\u3066\u304a\u308a\u3001\u65e5\u672c\u8a9e\u3067\u306e\u60c5\u5831\u4ea4\u63db\u3082\u6d3b\u767a\u3067\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-64\">\u77ed\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u521d\u671f\u306e\u5b66\u7fd2\u30b3\u30b9\u30c8<\/strong>: \u300c\u898f\u7d04\u3088\u308a\u8a2d\u5b9a\u300d\u306e\u539f\u5247\u3092\u7406\u89e3\u3059\u308b\u305f\u3081\u306b\u3001\u521d\u671f\u306e\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u82e5\u5e72\u9ad8\u304f\u306a\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u67d4\u8edf\u6027\u306e\u5236\u7d04<\/strong>: \u898f\u7d04\u306b\u6cbf\u308f\u306a\u3044\u8a2d\u8a08\u3092\u3059\u308b\u5834\u5408\u3001\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u624b\u9593\u304c\u304b\u304b\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong>: \u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u8ffd\u52a0\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0\u304c\u5fc5\u8981\u306b\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u898f\u6a21<\/strong>: Laravel\u3084Symfony\u3068\u6bd4\u8f03\u3059\u308b\u3068\u3001\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30d7\u30e9\u30b0\u30a4\u30f3\u3084\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u9078\u629e\u80a2\u304c\u82e5\u5e72\u9650\u3089\u308c\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-65\">\u6280\u8853\u7684\u7279\u5fb4<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-66\">1. \u5f37\u529b\u306aORM\u6a5f\u80fd<\/h5>\n\n\n\n<p>CakePHP\u306eORM\u306f\u3001ActiveRecord\u3068DataMapper\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7d44\u307f\u5408\u308f\u305b\u305f\u8a2d\u8a08\u3067\u3001\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3068\u95a2\u9023\u4ed8\u3051\u3092\u76f4\u611f\u7684\u306b\u6271\u3048\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=\"\">\/\/ \u30e2\u30c7\u30eb\u306e\u5b9a\u7fa9\u4f8b (src\/Model\/Table\/ArticlesTable.php)\nnamespace App\\Model\\Table;\n\nuse Cake\\ORM\\Table;\nuse Cake\\Validation\\Validator;\n\nclass ArticlesTable extends Table\n{\n    public function initialize(array $config): void\n    {\n        parent::initialize($config);\n        \n        \/\/ \u30c6\u30fc\u30d6\u30eb\u540d\u3001\u4e3b\u30ad\u30fc\u3001\u8868\u793a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u8a2d\u5b9a\n        $this-&gt;setTable('articles');\n        $this-&gt;setDisplayField('title');\n        $this-&gt;setPrimaryKey('id');\n        \n        \/\/ \u30d3\u30d8\u30a4\u30d3\u30a2\uff08\u81ea\u52d5\u7684\u306a\u632f\u308b\u821e\u3044\uff09\u306e\u8ffd\u52a0\n        $this-&gt;addBehavior('Timestamp');\n        \n        \/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u5b9a\u7fa9\n        $this-&gt;belongsTo('Authors', [\n            'foreignKey' =&gt; 'author_id',\n        ]);\n        $this-&gt;hasMany('Comments', [\n            'dependent' =&gt; true, \/\/ \u8a18\u4e8b\u3092\u524a\u9664\u3059\u308b\u3068\u95a2\u9023\u30b3\u30e1\u30f3\u30c8\u3082\u524a\u9664\n        ]);\n        $this-&gt;belongsToMany('Tags', [\n            'joinTable' =&gt; 'articles_tags',\n        ]);\n    }\n    \n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\u306e\u5b9a\u7fa9\n    public function validationDefault(Validator $validator): Validator\n    {\n        $validator\n            -&gt;notEmptyString('title', '\u8a18\u4e8b\u30bf\u30a4\u30c8\u30eb\u306f\u5fc5\u9808\u3067\u3059')\n            -&gt;minLength('title', 10, '\u30bf\u30a4\u30c8\u30eb\u306f10\u6587\u5b57\u4ee5\u4e0a\u5fc5\u8981\u3067\u3059')\n            -&gt;notEmptyString('body', '\u8a18\u4e8b\u5185\u5bb9\u306f\u5fc5\u9808\u3067\u3059')\n            -&gt;notEmptyString('status', '\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044')\n            -&gt;add('status', 'validValue', [\n                'rule' =&gt; ['inList', ['draft', 'published']]\n            ]);\n            \n        return $validator;\n    }\n    \n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30d5\u30a1\u30a4\u30f3\u30c0\u30fc\u30e1\u30bd\u30c3\u30c9\n    public function findPublished(Query $query, array $options)\n    {\n        return $query-&gt;where(['status' =&gt; 'published']);\n    }\n}\n<\/pre>\n\n\n\n<p>\u4f7f\u7528\u4f8b:<\/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\u5229\u7528\u4f8b\n\/\/ \u57fa\u672c\u7684\u306a\u30af\u30a8\u30ea\n$recentArticles = $this-&gt;Articles-&gt;find()\n    -&gt;where(['status' =&gt; 'published'])\n    -&gt;order(['created' =&gt; 'DESC'])\n    -&gt;limit(5);\n\n\/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u542b\u3080\u30af\u30a8\u30ea\uff08Eager Loading\uff09\n$article = $this-&gt;Articles-&gt;get($id, [\n    'contain' =&gt; ['Authors', 'Tags', 'Comments' =&gt; ['Users']]\n]);\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30d5\u30a1\u30a4\u30f3\u30c0\u30fc\u306e\u4f7f\u7528\n$published = $this-&gt;Articles-&gt;find('published');\n\n\/\/ \u95a2\u9023\u30c7\u30fc\u30bf\u306e\u4fdd\u5b58\n$article = $this-&gt;Articles-&gt;newEmptyEntity();\n$article = $this-&gt;Articles-&gt;patchEntity($article, $this-&gt;request-&gt;getData(), [\n    'associated' =&gt; ['Tags']\n]);\n$this-&gt;Articles-&gt;save($article);\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-67\">2. Bake\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb<\/h5>\n\n\n\n<p>CakePHP\u306e\u5f37\u529b\u306a\u6a5f\u80fd\u306e\u4e00\u3064\u304c\u300cBake\u300d\u3067\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u304b\u3089\u5b8c\u5168\u306aCRUD\u64cd\u4f5c\u3092\u5099\u3048\u305f\u30b3\u30fc\u30c9\u3092\u81ea\u52d5\u751f\u6210\u3067\u304d\u307e\u3059\u3002RAD\uff08Rapid Application Development\uff09\u3092\u5b9f\u73fe\u3059\u308b\u4e2d\u5fc3\u7684\u306a\u30c4\u30fc\u30eb\u3067\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=\"\"># \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3092\u7d20\u65e9\u304f\u751f\u6210\nbin\/cake bake all\n\n# \u7279\u5b9a\u306e\u30e2\u30c7\u30eb\u306b\u95a2\u9023\u3059\u308b\u3059\u3079\u3066\u3092\u751f\u6210\nbin\/cake bake all Articles\n\n# \u500b\u5225\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u751f\u6210\nbin\/cake bake model Articles\nbin\/cake bake controller Articles\nbin\/cake bake template Articles\n\n# API\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u751f\u6210\nbin\/cake bake controller Api\/Articles --prefix Api\n\n# \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\u306e\u751f\u6210\nbin\/cake bake test Model\/Table\/ArticlesTable\n<\/pre>\n\n\n\n<p>Bake\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u521d\u671f\u6bb5\u968e\u3092\u5927\u5e45\u306b\u77ed\u7e2e\u3067\u304d\u3001\u6a19\u6e96\u7684\u306aCRUD\u64cd\u4f5c\u3092\u8fc5\u901f\u306b\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002\u751f\u6210\u3055\u308c\u305f\u30b3\u30fc\u30c9\u306f\u3001CakePHP\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u5f93\u3063\u3066\u3044\u308b\u305f\u3081\u3001\u9ad8\u54c1\u8cea\u306a\u958b\u767a\u306e\u57fa\u76e4\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-68\">3. \u67d4\u8edf\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/h5>\n\n\n\n<p>CakePHP\u306f\u898f\u7d04\u30d9\u30fc\u30b9\u306e\u81ea\u52d5\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u3001\u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8\u3092\u67d4\u8edf\u306b\u5b9a\u7fa9\u3067\u304d\u308b\u30b7\u30b9\u30c6\u30e0\u3092\u63d0\u4f9b\u3057\u3066\u3044\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=\"\">\/\/ config\/routes.php\nuse Cake\\Routing\\Route\\DashedRoute;\nuse Cake\\Routing\\RouteBuilder;\n\nreturn function (RouteBuilder $routes) {\n    \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u30eb\u30fc\u30c8\u8a2d\u5b9a\n    $routes-&gt;scope('\/', function (RouteBuilder $builder) {\n        $builder-&gt;connect('\/', ['controller' =&gt; 'Pages', 'action' =&gt; 'display', 'home']);\n        \n        \/\/ RESTful\u30ea\u30bd\u30fc\u30b9\u306e\u8ffd\u52a0\n        \/\/ GET \/articles, POST \/articles, GET \/articles\/view\/123 \u306a\u3069\u304c\u81ea\u52d5\u751f\u6210\n        $builder-&gt;resources('Articles', function (RouteBuilder $routes) {\n            \/\/ \u30cd\u30b9\u30c8\u3057\u305f\u30ea\u30bd\u30fc\u30b9 - \/articles\/123\/comments\n            $routes-&gt;resources('Comments');\n            \n            \/\/ \u30ab\u30b9\u30bf\u30e0\u30eb\u30fc\u30c8 - \/articles\/tagged\/php\/cakephp\n            $routes-&gt;connect('\/tagged\/*', ['action' =&gt; 'tags']);\n        });\n        \n        \/\/ \u30b9\u30e9\u30c3\u30b0\u4ed8\u304d\u306eURL\u30d1\u30bf\u30fc\u30f3\n        $builder-&gt;connect(\n            '\/blog\/{slug}',\n            ['controller' =&gt; 'Articles', 'action' =&gt; 'view']\n        )-&gt;setPatterns(['slug' =&gt; '[a-z0-9-_]+']);\n        \n        \/\/ \u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u30eb\u30fc\u30c8\n        $builder-&gt;fallbacks(DashedRoute::class);\n    });\n    \n    \/\/ API\u306e\u305f\u3081\u306e\u5225\u30b9\u30b3\u30fc\u30d7\n    $routes-&gt;scope('\/api', function (RouteBuilder $builder) {\n        $builder-&gt;resources('Articles');\n        \/\/ \u4ed6\u306eAPI\u30ea\u30bd\u30fc\u30b9...\n    });\n};\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-69\">4. \u8a8d\u8a3c\u3068\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>CakePHP 4.0\u4ee5\u964d\u3067\u306f\u3001\u8a8d\u8a3c\u3068\u8a8d\u53ef\u304c\u5206\u96e2\u3055\u308c\u3001\u3088\u308a\u67d4\u8edf\u306a\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\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=\"\">\/\/ src\/Application.php - \u8a8d\u8a3c\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u8a2d\u5b9a\npublic function middleware(MiddlewareQueue $middlewareQueue): MiddlewareQueue\n{\n    $middlewareQueue\n        \/\/ ... \u4ed6\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\n        -&gt;add(new AuthenticationMiddleware($this))\n        -&gt;add(new AuthorizationMiddleware($this, [\n            'unauthorizedHandler' =&gt; [\n                'className' =&gt; 'Authorization.Redirect',\n                'url' =&gt; '\/users\/login',\n                'queryParam' =&gt; 'redirectUrl',\n            ]\n        ]));\n        \n    return $middlewareQueue;\n}\n\n\/\/ \u8a8d\u8a3c\u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\npublic function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface\n{\n    $service = new AuthenticationService();\n    \n    \/\/ ID\u6bd4\u8f03\u306e\u305f\u3081\u306e\u8b58\u5225\u5b50\u3092\u8a2d\u5b9a\n    $service-&gt;loadIdentifier('Authentication.Password', [\n        'fields' =&gt; ['username' =&gt; 'email', 'password' =&gt; 'password']\n    ]);\n    \n    \/\/ \u8a8d\u8a3c\u65b9\u6cd5\u3092\u8ffd\u52a0\n    $service-&gt;loadAuthenticator('Authentication.Session');\n    $service-&gt;loadAuthenticator('Authentication.Form', [\n        'loginUrl' =&gt; '\/users\/login',\n        'fields' =&gt; ['username' =&gt; 'email', 'password' =&gt; 'password']\n    ]);\n    \n    return $service;\n}\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u8a8d\u8a3c\u60c5\u5831\u306e\u5229\u7528\n\/\/ src\/Controller\/ArticlesController.php\npublic function add()\n{\n    $article = $this-&gt;Articles-&gt;newEmptyEntity();\n    \n    if ($this-&gt;request-&gt;is('post')) {\n        \/\/ \u73fe\u5728\u306e\u30e6\u30fc\u30b6\u30fcID\u3092\u53d6\u5f97\n        $userId = $this-&gt;request-&gt;getAttribute('identity')-&gt;getIdentifier();\n        \n        $data = $this-&gt;request-&gt;getData();\n        $data['user_id'] = $userId;\n        \n        $article = $this-&gt;Articles-&gt;patchEntity($article, $data);\n        \n        if ($this-&gt;Articles-&gt;save($article)) {\n            $this-&gt;Flash-&gt;success('\u8a18\u4e8b\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002');\n            return $this-&gt;redirect(['action' =&gt; 'index']);\n        }\n        $this-&gt;Flash-&gt;error('\u8a18\u4e8b\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002');\n    }\n    \n    $this-&gt;set(compact('article'));\n}\n\n\/\/ \u8a8d\u53ef\uff08Authorization\uff09\u306e\u4f8b\npublic function edit($id = null)\n{\n    $article = $this-&gt;Articles-&gt;get($id);\n    \n    \/\/ \u73fe\u5728\u306e\u30e6\u30fc\u30b6\u30fc\u304c\u3053\u306e\u8a18\u4e8b\u3092\u7de8\u96c6\u3067\u304d\u308b\u304b\u78ba\u8a8d\n    $this-&gt;Authorization-&gt;authorize($article, 'edit');\n    \n    \/\/ \u7de8\u96c6\u51e6\u7406...\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-70\">5. \u30a4\u30d9\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>CakePHP\u306f\u5f37\u529b\u306a\u30a4\u30d9\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u3092\u63d0\u4f9b\u3057\u3066\u304a\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u3055\u307e\u3056\u307e\u306a\u90e8\u5206\u3092\u758e\u7d50\u5408\u306b\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=\"\">\/\/ \u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u30fc\u306e\u767b\u9332\n\/\/ src\/Application.php\npublic function bootstrap(): void\n{\n    parent::bootstrap();\n    \n    \/\/ \u30a4\u30d9\u30f3\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306e\u53d6\u5f97\n    $eventManager = EventManager::instance();\n    \n    \/\/ \u30ea\u30b9\u30ca\u30fc\u306e\u8ffd\u52a0\n    $eventManager-&gt;on(\n        'Model.Article.afterSave',\n        function ($event, $entity, $options) {\n            \/\/ \u8a18\u4e8b\u4fdd\u5b58\u5f8c\u306e\u51e6\u7406\n            if ($entity-&gt;isNew()) {\n                $this-&gt;sendNewArticleNotification($entity);\n            }\n        }\n    );\n    \n    \/\/ \u30ea\u30b9\u30ca\u30fc\u30af\u30e9\u30b9\u306e\u767b\u9332\n    $eventManager-&gt;on(new UserActivityListener());\n}\n\n\/\/ \u30a4\u30d9\u30f3\u30c8\u306e\u767a\u884c\n\/\/ src\/Model\/Table\/ArticlesTable.php\npublic function afterSave($event, $entity, $options)\n{\n    if ($entity-&gt;isNew()) {\n        $event = new Event(\n            'Model.Article.afterSave',\n            $this,\n            [\n                'entity' =&gt; $entity,\n                'options' =&gt; $options\n            ]\n        );\n        $this-&gt;getEventManager()-&gt;dispatch($event);\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-71\">CakePHP 4\u304b\u30895\u3078\u306e\u9032\u5316<\/h4>\n\n\n\n<p>CakePHP 5.0\uff082023\u5e7412\u6708\u30ea\u30ea\u30fc\u30b9\uff09\u306f\u3001PHP 8.1\u4ee5\u4e0a\u306b\u5bfe\u5fdc\u3057\u3001\u3055\u307e\u3056\u307e\u306a\u65b0\u6a5f\u80fd\u304c\u8ffd\u52a0\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a4\u30df\u30e5\u30fc\u30bf\u30d6\u30eb\u306a\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3<\/strong>: \u30c7\u30fc\u30bf\u306e\u5909\u66f4\u3092\u5236\u9650\u3059\u308bReadOnly\u306a\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li><strong>\u540d\u524d\u4ed8\u304d\u5f15\u6570\u306e\u6d3b\u7528<\/strong>: PHP 8\u306e\u540d\u524d\u4ed8\u304d\u5f15\u6570\u3092\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5168\u4f53\u3067\u6d3b\u7528<\/li>\n\n\n\n<li><strong>\u5c5e\u6027\uff08\u30a2\u30c8\u30ea\u30d3\u30e5\u30fc\u30c8\uff09\u306e\u62e1\u5f35<\/strong>: PHP\u306e\u5c5e\u6027\u3092\u4f7f\u7528\u3057\u305f\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3084\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5411\u4e0a<\/strong>: \u5185\u90e8\u51e6\u7406\u306e\u6700\u9069\u5316\u306b\u3088\u308b\u51e6\u7406\u901f\u5ea6\u306e\u5411\u4e0a<\/li>\n\n\n\n<li><strong>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30b7\u30b9\u30c6\u30e0\u306e\u5f37\u5316<\/strong>: \u3088\u308a\u67d4\u8edf\u3067\u8868\u73fe\u529b\u8c4a\u304b\u306a\u30d3\u30e5\u30fc\u5c64<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-72\">CakePHP\u306b\u6700\u9069\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h4>\n\n\n\n<p>CakePHP\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u7279\u306b\u9069\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>CRUD\u64cd\u4f5c\u304c\u4e2d\u5fc3\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u7ba1\u7406\u753b\u9762\u3084\u5185\u90e8\u30b7\u30b9\u30c6\u30e0\u306a\u3069\u3001\u30c7\u30fc\u30bf\u64cd\u4f5c\u304c\u4e2d\u5fc3\u3068\u306a\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8fc5\u901f\u306a\u958b\u767a\u304c\u6c42\u3081\u3089\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: Bake\u30c4\u30fc\u30eb\u306b\u3088\u308b\u81ea\u52d5\u751f\u6210\u6a5f\u80fd\u3067\u3001\u958b\u767a\u6642\u9593\u3092\u5927\u5e45\u306b\u77ed\u7e2e\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u5f37\u529b\u306aORM\u306b\u3088\u308a\u3001\u8907\u96d1\u306a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3084\u30af\u30a8\u30ea\u3092\u7c21\u6f54\u306b\u8a18\u8ff0\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c1\u30fc\u30e0\u958b\u767a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: \u898f\u7d04\u306b\u57fa\u3065\u3044\u305f\u7d71\u4e00\u7684\u306a\u958b\u767a\u30b9\u30bf\u30a4\u30eb\u306b\u3088\u308a\u3001\u30c1\u30fc\u30e0\u3067\u306e\u958b\u767a\u52b9\u7387\u304c\u5411\u4e0a\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9577\u671f\u7684\u306a\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u304c\u5fc5\u8981\u306a\u30b7\u30b9\u30c6\u30e0<\/strong>: \u5805\u7262\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u5f8c\u65b9\u4e92\u63db\u6027\u3078\u306e\u914d\u616e\u306b\u3088\u308a\u3001\u9577\u671f\u904b\u7528\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-73\">\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>CakePHP\u306b\u306f\u5145\u5b9f\u3057\u305f\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\uff08CakePHP Cookbook\uff09<\/strong>: <a href=\"https:\/\/book.cakephp.org\/\">https:\/\/book.cakephp.org\/<\/a><br>\u975e\u5e38\u306b\u8a73\u7d30\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u3066\u304a\u308a\u3001\u65e5\u672c\u8a9e\u8a33\u3082\u5145\u5b9f\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u65e5\u672c\u8a9e\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong>: <a href=\"https:\/\/book.cakephp.org\/4\/ja\/index.html\">https:\/\/book.cakephp.org\/4\/ja\/index.html<\/a><br>\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u65e5\u672c\u8a9e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>CakePHP\u516c\u5f0f\u30d6\u30ed\u30b0<\/strong>: <a href=\"https:\/\/bakery.cakephp.org\/\">https:\/\/bakery.cakephp.org\/<\/a><br>\u6700\u65b0\u60c5\u5831\u3084\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u304c\u63b2\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u65e5\u672cCakePHP\u30e6\u30fc\u30b6\u4f1a<\/strong>: \u65e5\u672c\u56fd\u5185\u306eCakePHP\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304c\u6d3b\u767a\u306b\u6d3b\u52d5\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-74\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306bCakePHP 4\u3067\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\u306e\u57fa\u672c\u69cb\u6210\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9<\/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=\"\">\/\/ src\/Controller\/ArticlesController.php\nnamespace App\\Controller;\n\nuse App\\Controller\\AppController;\n\nclass ArticlesController extends AppController\n{\n    public function initialize(): void\n    {\n        parent::initialize();\n        $this-&gt;loadComponent('Paginator');\n        $this-&gt;loadComponent('Flash');\n        $this-&gt;Authentication-&gt;addUnauthenticatedActions(['index', 'view']);\n    }\n    \n    public function index()\n    {\n        $query = $this-&gt;Articles-&gt;find('published')\n            -&gt;contain(['Users', 'Tags']);\n            \n        $articles = $this-&gt;Paginator-&gt;paginate($query);\n        $this-&gt;set(compact('articles'));\n    }\n    \n    public function view($slug = null)\n    {\n        $article = $this-&gt;Articles-&gt;findBySlug($slug)\n            -&gt;contain(['Users', 'Tags', 'Comments' =&gt; ['Users']])\n            -&gt;firstOrFail();\n            \n        $this-&gt;set(compact('article'));\n    }\n    \n    public function add()\n    {\n        $article = $this-&gt;Articles-&gt;newEmptyEntity();\n        \n        if ($this-&gt;request-&gt;is('post')) {\n            $article = $this-&gt;Articles-&gt;patchEntity($article, $this-&gt;request-&gt;getData(), [\n                'associated' =&gt; ['Tags']\n            ]);\n            \n            \/\/ \u73fe\u5728\u306e\u30e6\u30fc\u30b6\u30fc\u3092\u30bb\u30c3\u30c8\n            $article-&gt;user_id = $this-&gt;Authentication-&gt;getIdentity()-&gt;getIdentifier();\n            \n            if ($this-&gt;Articles-&gt;save($article)) {\n                $this-&gt;Flash-&gt;success('\u8a18\u4e8b\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002');\n                return $this-&gt;redirect(['action' =&gt; 'index']);\n            }\n            $this-&gt;Flash-&gt;error('\u8a18\u4e8b\u3092\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002');\n        }\n        \n        $tags = $this-&gt;Articles-&gt;Tags-&gt;find('list');\n        $this-&gt;set(compact('article', 'tags'));\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u30e2\u30c7\u30eb<\/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=\"\">\/\/ src\/Model\/Table\/ArticlesTable.php\nnamespace App\\Model\\Table;\n\nuse Cake\\ORM\\Table;\nuse Cake\\Validation\\Validator;\nuse Cake\\Event\\EventInterface;\nuse Cake\\Utility\\Text;\n\nclass ArticlesTable extends Table\n{\n    public function initialize(array $config): void\n    {\n        parent::initialize($config);\n        \n        $this-&gt;setTable('articles');\n        $this-&gt;setDisplayField('title');\n        $this-&gt;setPrimaryKey('id');\n        \n        $this-&gt;addBehavior('Timestamp');\n        \n        $this-&gt;belongsTo('Users');\n        $this-&gt;hasMany('Comments', [\n            'dependent' =&gt; true\n        ]);\n        $this-&gt;belongsToMany('Tags', [\n            'joinTable' =&gt; 'articles_tags'\n        ]);\n    }\n    \n    public function validationDefault(Validator $validator): Validator\n    {\n        $validator\n            -&gt;notEmptyString('title', '\u8a18\u4e8b\u30bf\u30a4\u30c8\u30eb\u306f\u5fc5\u9808\u3067\u3059')\n            -&gt;minLength('title', 10, '\u30bf\u30a4\u30c8\u30eb\u306f10\u6587\u5b57\u4ee5\u4e0a\u5fc5\u8981\u3067\u3059')\n            -&gt;maxLength('title', 255)\n            -&gt;notEmptyString('body', '\u8a18\u4e8b\u5185\u5bb9\u306f\u5fc5\u9808\u3067\u3059')\n            -&gt;notEmptyString('status', '\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044')\n            -&gt;add('status', 'valid-status', [\n                'rule' =&gt; function ($value) {\n                    return in_array($value, ['draft', 'published']);\n                },\n                'message' =&gt; '\u30b9\u30c6\u30fc\u30bf\u30b9\u306f draft \u307e\u305f\u306f published \u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059'\n            ]);\n            \n        return $validator;\n    }\n    \n    \/\/ \u30b9\u30e9\u30b0\u3092\u81ea\u52d5\u751f\u6210\n    public function beforeSave(EventInterface $event, $entity, $options)\n    {\n        if ($entity-&gt;isNew() &amp;&amp; !$entity-&gt;slug) {\n            $entity-&gt;slug = Text::slug(strtolower($entity-&gt;title));\n        }\n    }\n    \n    \/\/ \u30ab\u30b9\u30bf\u30e0\u30d5\u30a1\u30a4\u30f3\u30c0\u30fc\u30e1\u30bd\u30c3\u30c9\n    public function findPublished($query, array $options)\n    {\n        return $query-&gt;where(['status' =&gt; 'published']);\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- templates\/Articles\/index.php --&gt;\n&lt;h1&gt;\u8a18\u4e8b\u4e00\u89a7&lt;\/h1&gt;\n\n&lt;?php if ($this-&gt;Identity-&gt;isLoggedIn()): ?&gt;\n    &lt;div class=\"actions\"&gt;\n        &lt;?= $this-&gt;Html-&gt;link('\u65b0\u898f\u8a18\u4e8b\u3092\u66f8\u304f', ['action' =&gt; 'add'], ['class' =&gt; 'button']) ?&gt;\n    &lt;\/div&gt;\n&lt;?php endif; ?&gt;\n\n&lt;div class=\"articles\"&gt;\n    &lt;?php foreach ($articles as $article): ?&gt;\n    &lt;article&gt;\n        &lt;h2&gt;\n            &lt;?= $this-&gt;Html-&gt;link(\n                $article-&gt;title,\n                ['action' =&gt; 'view', $article-&gt;slug]\n            ) ?&gt;\n        &lt;\/h2&gt;\n        &lt;span class=\"author\"&gt;\n            &lt;?= $article-&gt;user-&gt;name ?&gt;\u3055\u3093\u304c\n            &lt;?= $article-&gt;created-&gt;format('Y\u5e74m\u6708d\u65e5') ?&gt;\u306b\u6295\u7a3f\n        &lt;\/span&gt;\n        &lt;div class=\"content\"&gt;\n            &lt;?= $this-&gt;Text-&gt;truncate(\n                strip_tags($article-&gt;body), \n                100, \n                ['ellipsis' =&gt; '...', 'exact' =&gt; false]\n            ) ?&gt;\n        &lt;\/div&gt;\n        &lt;?php if (!empty($article-&gt;tags)): ?&gt;\n        &lt;div class=\"tags\"&gt;\n            \u30bf\u30b0: \n            &lt;?php foreach ($article-&gt;tags as $tag): ?&gt;\n                &lt;?= $this-&gt;Html-&gt;link(\n                    $tag-&gt;title,\n                    ['action' =&gt; 'tags', $tag-&gt;title]\n                ) ?&gt;\n            &lt;?php endforeach; ?&gt;\n        &lt;\/div&gt;\n        &lt;?php endif; ?&gt;\n        &lt;div class=\"actions\"&gt;\n            &lt;?= $this-&gt;Html-&gt;link('\u7d9a\u304d\u3092\u8aad\u3080', ['action' =&gt; 'view', $article-&gt;slug], ['class' =&gt; 'button']) ?&gt;\n        &lt;\/div&gt;\n    &lt;\/article&gt;\n    &lt;?php endforeach; ?&gt;\n&lt;\/div&gt;\n\n&lt;div class=\"paginator\"&gt;\n    &lt;ul class=\"pagination\"&gt;\n        &lt;?= $this-&gt;Paginator-&gt;first('&lt;&lt; \u6700\u521d') ?&gt;\n        &lt;?= $this-&gt;Paginator-&gt;prev('&lt; \u524d\u3078') ?&gt;\n        &lt;?= $this-&gt;Paginator-&gt;numbers() ?&gt;\n        &lt;?= $this-&gt;Paginator-&gt;next('\u6b21\u3078 &gt;') ?&gt;\n        &lt;?= $this-&gt;Paginator-&gt;last('\u6700\u5f8c &gt;&gt;') ?&gt;\n    &lt;\/ul&gt;\n    &lt;p&gt;&lt;?= $this-&gt;Paginator-&gt;counter('{{page}}\/{{pages}}\u30da\u30fc\u30b8 (\u5168{{count}}\u4ef6)') ?&gt;&lt;\/p&gt;\n&lt;\/div&gt;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-75\">\u7d50\u8ad6<\/h4>\n\n\n\n<p>CakePHP\u306f\u300c\u898f\u7d04\u3088\u308a\u8a2d\u5b9a\u300d\u306e\u539f\u5247\u306b\u57fa\u3065\u3044\u305f\u958b\u767a\u52b9\u7387\u306e\u9ad8\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u7279\u306bCRUD\u64cd\u4f5c\u304c\u4e2d\u5fc3\u3068\u306a\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u304c\u8907\u96d1\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3044\u3066\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\u521d\u671f\u306e\u5b66\u7fd2\u30b3\u30b9\u30c8\u306f\u3042\u308a\u307e\u3059\u304c\u3001\u4e00\u5ea6\u898f\u7d04\u3092\u7406\u89e3\u3059\u308c\u3070\u3001\u5c11\u306a\u3044\u30b3\u30fc\u30c9\u91cf\u3067\u8fc5\u901f\u306a\u958b\u767a\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u65e5\u672c\u8a9e\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3084\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304c\u5145\u5b9f\u3057\u3066\u3044\u308b\u70b9\u3082\u3001\u65e5\u672c\u4f01\u696d\u3067\u306e\u63a1\u7528\u969c\u58c1\u3092\u4e0b\u3052\u308b\u8981\u56e0\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u9577\u3044\u6b74\u53f2\u3068\u5b9f\u7e3e\u304c\u3042\u308a\u3001\u30d0\u30fc\u30b8\u30e7\u30f35.0\u3067\u306fPHP 8\u306e\u6700\u65b0\u6a5f\u80fd\u3092\u7a4d\u6975\u7684\u306b\u53d6\u308a\u5165\u308c\u3066\u304a\u308a\u3001\u4eca\u5f8c\u3082\u9032\u5316\u3057\u7d9a\u3051\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-76\">Yii\uff1a\u9ad8\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5b9f\u73fe\u3059\u308b\u73fe\u4ee3\u7684\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.yiiframework.com\/image\/logo.svg\" alt=\"Yii Framework\"><\/figure>\n\n\n\n<p><strong>\u30d0\u30fc\u30b8\u30e7\u30f3<\/strong>: 2.0.49\uff082024\u5e745\u6708\u73fe\u5728\uff09<br><strong>\u521d\u30ea\u30ea\u30fc\u30b9<\/strong>: 2008\u5e74<br><strong>\u4f5c\u8005<\/strong>: Qiang Xue<br><strong>\u30e9\u30a4\u30bb\u30f3\u30b9<\/strong>: BSD License<br><strong>GitHub\u30b9\u30bf\u30fc\u6570<\/strong>: 10,000+<\/p>\n\n\n\n<p>Yii\uff08\u30a4\u30fc\uff09\u306f\u300c\u30b7\u30f3\u30d7\u30eb\u3055\u3068\u9032\u5316\u7684\u300d\u3068\u3044\u3046\u610f\u5473\u306e\u4e2d\u56fd\u8a9e\u306b\u7531\u6765\u3057\u3001\u540c\u6642\u306b\u300cYes, It Is!\u300d\u306e\u982d\u6587\u5b57\u3067\u3082\u3042\u308bPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u7279\u306b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u91cd\u8996\u3057\u3066\u8a2d\u8a08\u3055\u308c\u3066\u304a\u308a\u3001\u9ad8\u901f\u3067\u3001\u5805\u7262\u3067\u3001\u62e1\u5f35\u6027\u306e\u9ad8\u3044Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002\u300cDRY\uff08Don\u2019t Repeat Yourself\uff09\u300d\u539f\u5247\u306b\u57fa\u3065\u304d\u3001\u958b\u767a\u52b9\u7387\u3068\u518d\u5229\u7528\u6027\u3092\u9ad8\u3081\u308b\u6a5f\u80fd\u304c\u8c4a\u5bcc\u306b\u63c3\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-77\">\u4e3b\u306a\u7279\u5fb4\u3068\u9577\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u512a\u308c\u305f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong>: \u4f4e\u3044\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3068\u52b9\u7387\u7684\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u8a2d\u8a08\u306b\u3088\u308a\u3001\u4ed6\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u9ad8\u901f\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u304c\u53ef\u80fd\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5805\u7262\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/strong>: XSS\u3001SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u3001CSRF\u306a\u3069\u306e\u4e00\u822c\u7684\u306aWeb\u653b\u6483\u306b\u5bfe\u3059\u308b\u4fdd\u8b77\u6a5f\u80fd\u304c\u6a19\u6e96\u3067\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9ad8\u5ea6\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u304b\u3089\u5b8c\u5168\u306a\u30da\u30fc\u30b8\u307e\u3067\u3001\u69d8\u3005\u306a\u30ec\u30d9\u30eb\u3067\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u52b9\u7387\u7684\u306aActiveRecord ORM<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u7c21\u6f54\u304b\u3064\u52b9\u7387\u7684\u306b\u884c\u3048\u308b\u5f37\u529b\u306aORM\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30b3\u30fc\u30c9\u751f\u6210\u30c4\u30fc\u30eb\u300cGii\u300d<\/strong>: \u30e2\u30c7\u30eb\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001CRUD\u64cd\u4f5c\u306a\u3069\u3092\u8996\u899a\u7684\u306b\u751f\u6210\u3067\u304d\u308b\u30c4\u30fc\u30eb\u306b\u3088\u308a\u3001\u958b\u767a\u901f\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u518d\u5229\u7528\u53ef\u80fd\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/strong>: Widget\u3001Behavior\u3001Module\u306a\u3069\u306e\u6982\u5ff5\u306b\u3088\u308a\u3001\u30b3\u30fc\u30c9\u306e\u518d\u5229\u7528\u6027\u3068\u62e1\u5f35\u6027\u3092\u9ad8\u3081\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5145\u5b9f\u3057\u305f\u30c7\u30d0\u30c3\u30b0\u3068\u30a8\u30e9\u30fc\u51e6\u7406<\/strong>: \u958b\u767a\u4e2d\u306e\u30a8\u30e9\u30fc\u7279\u5b9a\u3068\u4fee\u6b63\u3092\u5bb9\u6613\u306b\u3059\u308b\u4fbf\u5229\u306a\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u304c\u6a19\u6e96\u3067\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-78\">\u77ed\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u60c5\u5831\u306e\u5c11\u306a\u3055<\/strong>: Laravel\u3084Symfony\u3068\u6bd4\u8f03\u3057\u3066\u3001\u7279\u306b\u65e5\u672c\u8a9e\u306e\u60c5\u5831\u3084\u30ea\u30bd\u30fc\u30b9\u304c\u9650\u3089\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u898f\u6a21<\/strong>: \u65e5\u672c\u56fd\u5185\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306f\u6bd4\u8f03\u7684\u5c0f\u3055\u304f\u3001\u30b5\u30dd\u30fc\u30c8\u3092\u5f97\u308b\u306e\u304c\u96e3\u3057\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u6700\u65b0\u30c8\u30ec\u30f3\u30c9\u3078\u306e\u5bfe\u5fdc<\/strong>: \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u6700\u65b0\u30c8\u30ec\u30f3\u30c9\u3078\u306e\u5bfe\u5fdc\u304c\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3088\u308a\u3082\u82e5\u5e72\u9045\u308c\u304c\u3061\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u975e\u4e92\u63db\u6027<\/strong>: Yii 1\u304b\u3089Yii 2\u3078\u306e\u79fb\u884c\u306f\u3001\u5358\u7d14\u306a\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3067\u306f\u306a\u304f\u5b9f\u8cea\u7684\u306a\u66f8\u304d\u76f4\u3057\u304c\u5fc5\u8981\u3067\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-79\">\u6280\u8853\u7684\u7279\u5fb4<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-80\">1. Active Record ORM<\/h5>\n\n\n\n<p>Yii\u306e\u5f37\u529b\u306a\u6a5f\u80fd\u306e\u4e00\u3064\u306f\u3001\u76f4\u611f\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u53ef\u80fd\u306b\u3059\u308bActiveRecord ORM\u3067\u3059\u3002\u8907\u96d1\u306a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3084\u30af\u30a8\u30ea\u3092\u7c21\u6f54\u306b\u8a18\u8ff0\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=\"\">\/\/ \u30e2\u30c7\u30eb\u5b9a\u7fa9\nnamespace app\\models;\n\nuse yii\\db\\ActiveRecord;\n\nclass Post extends ActiveRecord\n{\n    \/\/ \u30c6\u30fc\u30d6\u30eb\u540d\uff08\u898f\u7d04\u306b\u5f93\u3048\u3070\u4e0d\u8981\uff09\n    public static function tableName()\n    {\n        return 'post';\n    }\n    \n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30eb\u30fc\u30eb\n    public function rules()\n    {\n        return [\n            [['title', 'content'], 'required'],\n            ['title', 'string', 'max' =&gt; 100],\n            ['status', 'in', 'range' =&gt; [self::STATUS_DRAFT, self::STATUS_PUBLISHED]],\n        ];\n    }\n    \n    \/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u306e\u5b9a\u7fa9\n    public function getAuthor()\n    {\n        return $this-&gt;hasOne(User::class, ['id' =&gt; 'author_id']);\n    }\n    \n    public function getComments()\n    {\n        return $this-&gt;hasMany(Comment::class, ['post_id' =&gt; 'id']);\n    }\n}\n\n\/\/ \u30af\u30a8\u30ea\u4f8b\n\/\/ \u57fa\u672c\u7684\u306a\u691c\u7d22\n$post = Post::findOne(123);\n\n\/\/ \u6761\u4ef6\u691c\u7d22\n$recentPosts = Post::find()\n    -&gt;where(['status' =&gt; Post::STATUS_PUBLISHED])\n    -&gt;orderBy('created_at DESC')\n    -&gt;limit(10)\n    -&gt;all();\n    \n\/\/ \u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u542b\u3080\u30af\u30a8\u30ea\uff08Eager Loading\uff09\n$postsWithComments = Post::find()\n    -&gt;with(['author', 'comments'])\n    -&gt;where(['status' =&gt; Post::STATUS_PUBLISHED])\n    -&gt;all();\n\n\/\/ \u95a2\u9023\u30c7\u30fc\u30bf\u3078\u306e\u30a2\u30af\u30bb\u30b9\nforeach ($postsWithComments as $post) {\n    echo $post-&gt;title . ' by ' . $post-&gt;author-&gt;username;\n    echo '\u30b3\u30e1\u30f3\u30c8\u6570: ' . count($post-&gt;comments);\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-81\">2. \u9ad8\u5ea6\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>Yii\u306f\u8907\u6570\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\u30b9\u30c8\u30ec\u30fc\u30b8\uff08\u30d5\u30a1\u30a4\u30eb\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001Memcached\u3001Redis\uff09\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3001\u67d4\u8edf\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u4f9d\u5b58\u95a2\u4fc2\u3092\u5b9a\u7fa9\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5fdc\u7b54\u6027\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\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=\"\">\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u8a2d\u5b9a\uff08config\/web.php\uff09\n'components' =&gt; [\n    'cache' =&gt; [\n        'class' =&gt; 'yii\\caching\\FileCache',\n        \/\/ \u307e\u305f\u306f\n        \/\/ 'class' =&gt; 'yii\\caching\\MemCache',\n        \/\/ 'servers' =&gt; [\n        \/\/     [\n        \/\/         'host' =&gt; 'localhost',\n        \/\/         'port' =&gt; 11211,\n        \/\/     ],\n        \/\/ ],\n    ],\n],\n\n\/\/ \u30c7\u30fc\u30bf\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u4f7f\u7528\u4f8b\npublic function actionIndex()\n{\n    $key = 'latest_posts_' . date('Ymd');\n    $data = Yii::$app-&gt;cache-&gt;get($key);\n\n    if ($data === false) {\n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u304c\u5b58\u5728\u3057\u306a\u3044\u5834\u5408\u306b\u30c7\u30fc\u30bf\u3092\u751f\u6210\n        $data = Post::find()\n            -&gt;where(['status' =&gt; Post::STATUS_PUBLISHED])\n            -&gt;orderBy('created_at DESC')\n            -&gt;limit(10)\n            -&gt;with('author')\n            -&gt;all();\n        \n        \/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u4fdd\u5b58\uff081\u6642\u9593\u6709\u52b9\uff09\n        Yii::$app-&gt;cache-&gt;set($key, $data, 3600);\n    }\n    \n    return $this-&gt;render('index', ['posts' =&gt; $data]);\n}\n\n\/\/ \u30ad\u30e3\u30c3\u30b7\u30e5\u4f9d\u5b58\u95a2\u4fc2\u306e\u4f8b\n\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u5909\u66f4\u306b\u4f9d\u5b58\u3059\u308b\u30ad\u30e3\u30c3\u30b7\u30e5\n$dependency = new \\yii\\caching\\DbDependency([\n    'sql' =&gt; 'SELECT MAX(updated_at) FROM post',\n]);\n\n$posts = Yii::$app-&gt;cache-&gt;getOrSet('all_active_posts', function() {\n    return Post::find()-&gt;where(['status' =&gt; 1])-&gt;all();\n}, 3600, $dependency);\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-82\">3. \u30b3\u30fc\u30c9\u751f\u6210\u30c4\u30fc\u30eb\u300cGii\u300d<\/h5>\n\n\n\n<p>Yii\u306b\u306f\u5f37\u529b\u306a\u30b3\u30fc\u30c9\u751f\u6210\u30c4\u30fc\u30eb\u300cGii\u300d\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u304a\u308a\u3001\u30e2\u30c7\u30eb\u3001CRUD\u64cd\u4f5c\u3001\u30d5\u30a9\u30fc\u30e0\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306a\u3069\u3092\u8996\u899a\u7684\u306b\u751f\u6210\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u958b\u767a\u6642\u9593\u3092\u5927\u5e45\u306b\u77ed\u7e2e\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.yiiframework.com\/doc-2.0\/images\/start-gii-crud.png\" alt=\"Gii Interface\"><\/figure>\n\n\n\n<p>Gii\u306f\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u3082\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=\"\"># \u30e2\u30c7\u30eb\u751f\u6210\n.\/yii gii\/model --tableName=post --modelClass=Post\n\n# CRUD\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3068\u30d3\u30e5\u30fc\u306e\u751f\u6210\n.\/yii gii\/crud --modelClass=app\\\\models\\\\Post --controllerClass=app\\\\controllers\\\\PostController\n<\/pre>\n\n\n\n<p>\u751f\u6210\u3055\u308c\u308b\u30b3\u30fc\u30c9\u306f\u5358\u306a\u308b\u30b9\u30b1\u30eb\u30c8\u30f3\u3067\u306f\u306a\u304f\u3001\u5b9f\u7528\u7684\u306a\u6a5f\u80fd\u3092\u6301\u3064\u5b8c\u5168\u306a\u30b3\u30fc\u30c9\u3067\u3001\u5373\u5ea7\u306b\u4f7f\u7528\u53ef\u80fd\u3067\u3059\u3002\u307e\u305f\u3001\u751f\u6210\u3055\u308c\u305f\u30b3\u30fc\u30c9\u306f\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u304c\u5bb9\u6613\u3067\u3001\u958b\u767a\u8005\u306e\u7279\u5b9a\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u8abf\u6574\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-83\">4. \u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>Yii\u306e\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306f\u518d\u5229\u7528\u53ef\u80fd\u306aUI\u8981\u7d20\u3067\u3001\u8907\u96d1\u306a\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u6a5f\u80fd\u3092\u7c21\u5358\u306b\u5b9f\u88c5\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=\"\">\/\/ GridView\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306e\u4f8b\n&lt;?= GridView::widget([\n    'dataProvider' =&gt; $dataProvider,\n    'filterModel' =&gt; $searchModel,\n    'columns' =&gt; [\n        ['class' =&gt; 'yii\\grid\\SerialColumn'],\n        'id',\n        'title',\n        [\n            'attribute' =&gt; 'status',\n            'value' =&gt; function ($model) {\n                return $model-&gt;status == 1 ? '\u516c\u958b' : '\u4e0b\u66f8\u304d';\n            },\n            'filter' =&gt; [0 =&gt; '\u4e0b\u66f8\u304d', 1 =&gt; '\u516c\u958b'],\n        ],\n        'created_at:datetime',\n        ['class' =&gt; 'yii\\grid\\ActionColumn'],\n    ],\n]); ?&gt;\n\n\/\/ ActiveForm\u30a6\u30a3\u30b8\u30a7\u30c3\u30c8\u306e\u4f8b\n&lt;?php $form = ActiveForm::begin([\n    'id' =&gt; 'post-form',\n    'options' =&gt; ['class' =&gt; 'form-horizontal'],\n]) ?&gt;\n\n    &lt;?= $form-&gt;field($model, 'title')-&gt;textInput(['maxlength' =&gt; true]) ?&gt;\n    &lt;?= $form-&gt;field($model, 'content')-&gt;textarea(['rows' =&gt; 6]) ?&gt;\n    &lt;?= $form-&gt;field($model, 'status')-&gt;dropDownList([\n        Post::STATUS_DRAFT =&gt; '\u4e0b\u66f8\u304d',\n        Post::STATUS_PUBLISHED =&gt; '\u516c\u958b',\n    ]) ?&gt;\n    \n    &lt;div class=\"form-group\"&gt;\n        &lt;?= Html::submitButton('\u4fdd\u5b58', ['class' =&gt; 'btn btn-success']) ?&gt;\n    &lt;\/div&gt;\n\n&lt;?php ActiveForm::end() ?&gt;\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-84\">5. \u30e2\u30b8\u30e5\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>Yii\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u72ec\u7acb\u3057\u305f\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u5358\u4f4d\u3067\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001\u30e2\u30c7\u30eb\u3001\u30d3\u30e5\u30fc\u3001\u305d\u306e\u4ed6\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u5b8c\u5168\u306a\u30bb\u30c3\u30c8\u3092\u542b\u307f\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6a5f\u80fd\u3054\u3068\u306b\u5206\u5272\u3057\u3001\u7ba1\u7406\u3057\u3084\u3059\u304f\u306a\u308a\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=\"\">\/\/ \u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u9020\nmodules\/\n    admin\/                 # \u7ba1\u7406\u753b\u9762\u30e2\u30b8\u30e5\u30fc\u30eb\n        Module.php         # \u30e2\u30b8\u30e5\u30fc\u30eb\u30af\u30e9\u30b9\n        controllers\/       # \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\n        models\/            # \u30e2\u30c7\u30eb\n        views\/             # \u30d3\u30e5\u30fc\n\n\/\/ \u30e2\u30b8\u30e5\u30fc\u30eb\u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\nnamespace app\\modules\\admin;\n\nclass Module extends \\yii\\base\\Module\n{\n    public function init()\n    {\n        parent::init();\n        \n        \/\/ \u30e2\u30b8\u30e5\u30fc\u30eb\u56fa\u6709\u306e\u8a2d\u5b9a\n        $this-&gt;params['adminEmail'] = 'admin@example.com';\n        \n        \/\/ \u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u5b9a\u7fa9\n        $this-&gt;components = [\n            'errorHandler' =&gt; [\n                'errorAction' =&gt; 'admin\/default\/error',\n            ],\n        ];\n    }\n}\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a2d\u5b9a\u3067\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u6709\u52b9\u5316\uff08config\/web.php\uff09\nreturn [\n    'modules' =&gt; [\n        'admin' =&gt; [\n            'class' =&gt; 'app\\modules\\admin\\Module',\n            \/\/ \u30e2\u30b8\u30e5\u30fc\u30eb\u56fa\u6709\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\n        ],\n        'api' =&gt; [\n            'class' =&gt; 'app\\modules\\api\\Module',\n        ],\n    ],\n];\n\n\/\/ \u30e2\u30b8\u30e5\u30fc\u30eb\u3078\u306e\u30a2\u30af\u30bb\u30b9\u65b9\u6cd5\n\/\/ URL: \/index.php?r=admin\/default\/index\n\/\/ \u307e\u305f\u306f\n\/\/ URL: \/admin\/default\/index \uff08URL\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\uff09\n\n\/\/ \u30b3\u30fc\u30c9\u5185\u3067\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u30a2\u30af\u30bb\u30b9\n$adminModule = Yii::$app-&gt;getModule('admin');\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-85\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/h4>\n\n\n\n<p>Yii\u306f\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u91cd\u8996\u3057\u3066\u8a2d\u8a08\u3055\u308c\u3066\u304a\u308a\u3001\u4e3b\u8981\u306aWeb\u8106\u5f31\u6027\u306b\u5bfe\u3059\u308b\u4fdd\u8b77\u6a5f\u80fd\u304c\u6a19\u6e96\u3067\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\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=\"\">\/\/ \u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30b9\u30af\u30ea\u30d7\u30c6\u30a3\u30f3\u30b0\uff08XSS\uff09\u5bfe\u7b56\n\/\/ \u30d3\u30e5\u30fc\u3067\u306e\u81ea\u52d5\u30a8\u30b9\u30b1\u30fc\u30d7\n&lt;div&gt;&lt;?= Html::encode($user-&gt;name) ?&gt;&lt;\/div&gt;\n\n\/\/ \u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u5b89\u5168\u306a\u5272\u308a\u5f53\u3066\uff08\u30de\u30b9\u30a2\u30b5\u30a4\u30f3\u30e1\u30f3\u30c8\u5bfe\u7b56\uff09\n$model-&gt;attributes = Yii::$app-&gt;request-&gt;post();  \/\/ \u81ea\u52d5\u7684\u306b\u5b89\u5168\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u307f\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u308b\n\n\/\/ SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\n$posts = Post::find()\n    -&gt;where(['status' =&gt; $status])  \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u81ea\u52d5\u7684\u306b\u5b89\u5168\u306b\u30d0\u30a4\u30f3\u30c9\u3055\u308c\u308b\n    -&gt;all();\n\n\/\/ \u624b\u52d5\u3067\u306eSQL\u30d1\u30e9\u30e1\u30fc\u30bf\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\n$posts = Yii::$app-&gt;db-&gt;createCommand('SELECT * FROM post WHERE status=:status')\n    -&gt;bindValue(':status', $status)\n    -&gt;queryAll();\n\n\/\/ CSRF\u4fdd\u8b77\n&lt;?php $form = ActiveForm::begin(); ?&gt;\n    &lt;!-- CSRF\u30c8\u30fc\u30af\u30f3\u304c\u81ea\u52d5\u7684\u306b\u8ffd\u52a0\u3055\u308c\u308b --&gt;\n&lt;?php ActiveForm::end(); ?&gt;\n\n\/\/ \u624b\u52d5\u3067\u306eCSRF\u30c8\u30fc\u30af\u30f3\u8ffd\u52a0\n&lt;form&gt;\n    &lt;?= Html::hiddenInput(Yii::$app-&gt;request-&gt;csrfParam, Yii::$app-&gt;request-&gt;csrfToken) ?&gt;\n&lt;\/form&gt;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-86\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p>Yii\u306f\u8a2d\u8a08\u6bb5\u968e\u304b\u3089\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3057\u3066\u304a\u308a\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6700\u9069\u5316\u6280\u8853\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9045\u5ef6\u8aad\u307f\u8fbc\u307f<\/strong>: \u5fc5\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u307f\u3092\u8aad\u307f\u8fbc\u307f\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u6700\u9069\u5316<\/strong>: \u30af\u30a8\u30ea\u30ad\u30e3\u30c3\u30b7\u30e5\u3001\u30d0\u30c3\u30c1\u51e6\u7406\u3001\u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u30fc\u306e\u6700\u9069\u5316\u306a\u3069\u306b\u3088\u308a\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30a2\u30bb\u30c3\u30c8\u30d0\u30f3\u30c9\u30eb<\/strong>: CSS\/JS\u30d5\u30a1\u30a4\u30eb\u306e\u7d50\u5408\u3001\u5727\u7e2e\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306b\u3088\u308a\u3001\u30da\u30fc\u30b8\u8aad\u307f\u8fbc\u307f\u6642\u9593\u3092\u77ed\u7e2e\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d5\u30e9\u30b0\u30e1\u30f3\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5<\/strong>: \u30da\u30fc\u30b8\u306e\u4e00\u90e8\u3060\u3051\u3092\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3053\u3068\u3067\u3001\u52d5\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3068\u9759\u7684\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u52b9\u7387\u7684\u306b\u7d44\u307f\u5408\u308f\u305b\u307e\u3059\u3002<\/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=\"\">\/\/ \u30d5\u30e9\u30b0\u30e1\u30f3\u30c8\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u4f8b\n&lt;?php if ($this-&gt;beginCache('sidebar', ['duration' =&gt; 3600])) { ?&gt;\n    &lt;!-- \u3053\u306e\u90e8\u5206\u306f1\u6642\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u308b --&gt;\n    &lt;div class=\"sidebar\"&gt;\n        &lt;?= $this-&gt;render('_sidebar') ?&gt;\n    &lt;\/div&gt;\n    &lt;?php $this-&gt;endCache(); ?&gt;\n&lt;?php } ?&gt;\n\n\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u30ad\u30e3\u30c3\u30b7\u30e5\n$posts = Post::find()\n    -&gt;where(['status' =&gt; Post::STATUS_PUBLISHED])\n    -&gt;orderBy('created_at DESC')\n    -&gt;limit(10)\n    -&gt;cache(3600)  \/\/ 1\u6642\u9593\u30ad\u30e3\u30c3\u30b7\u30e5\n    -&gt;all();\n<\/pre>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30c6\u30b9\u30c8\u3067\u306f\u3001Yii\u306f\u591a\u304f\u306e\u5834\u5408\u3001Laravel\u3001Symfony\u3001CakePHP\u306a\u3069\u306e\u4ed6\u306e\u30e1\u30b8\u30e3\u30fc\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3088\u308a\u3082\u512a\u308c\u305f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u9069\u5207\u306b\u30ad\u30e3\u30c3\u30b7\u30e5\u3092\u8a2d\u5b9a\u3057\u305f\u5834\u5408\u3001\u305d\u306e\u5dee\u306f\u9855\u8457\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-87\">Yii 1 vs Yii 2<\/h4>\n\n\n\n<p>Yii\u306b\u306f\u73fe\u57282\u3064\u306e\u4e3b\u8981\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-b63ef90a-ae4b-4910-a29d-5885f7aacb18\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd<\/th><th>Yii 1.1<\/th><th>Yii 2.0<\/th><\/tr><\/thead><tbody><tr><td>PHP\u8981\u4ef6<\/td><td>PHP 5.1+<\/td><td>PHP 5.4+\uff08\u63a8\u5968PHP 7.0+\uff09<\/td><\/tr><tr><td>\u540d\u524d\u7a7a\u9593<\/td><td>\u306a\u3057<\/td><td>\u3042\u308a<\/td><\/tr><tr><td>Composer<\/td><td>\u9650\u5b9a\u7684<\/td><td>\u5b8c\u5168\u5bfe\u5fdc<\/td><\/tr><tr><td>\u30a2\u30bb\u30c3\u30c8\u7ba1\u7406<\/td><td>\u57fa\u672c\u7684<\/td><td>\u30a2\u30bb\u30c3\u30c8\u30d0\u30f3\u30c9\u30eb<\/td><\/tr><tr><td>\u62e1\u5f35\u6027<\/td><td>\u826f\u597d<\/td><td>\u975e\u5e38\u306b\u9ad8\u3044<\/td><\/tr><tr><td>\u30b5\u30dd\u30fc\u30c8\u72b6\u6cc1<\/td><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4fee\u6b63\u306e\u307f<\/td><td>\u6d3b\u767a\u306b\u958b\u767a\u4e2d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>Yii 3\u306f\u73fe\u5728\u958b\u767a\u8a08\u753b\u6bb5\u968e\u306b\u3042\u308a\u3001PHP 8\u306e\u65b0\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u305f\u65b0\u3057\u3044\u30b3\u30a2\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u63a1\u7528\u3059\u308b\u4e88\u5b9a\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-88\">Yii\u306b\u6700\u9069\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h4>\n\n\n\n<p>Yii\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u7279\u306b\u9069\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u91cd\u8996\u306e\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306eWeb\u30b5\u30a4\u30c8\u3084\u8907\u96d1\u306a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30e2\u30b8\u30e5\u30fc\u30eb\u578b\u306e\u5927\u898f\u6a21\u30b7\u30b9\u30c6\u30e0<\/strong>: \u30e2\u30b8\u30e5\u30fc\u30eb\u30b7\u30b9\u30c6\u30e0\u3092\u6d3b\u7528\u3057\u3066\u3001\u8907\u6570\u306e\u30b5\u30d6\u30b7\u30b9\u30c6\u30e0\u3092\u52b9\u7387\u7684\u306b\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>RESTful API<\/strong>: \u7d44\u307f\u8fbc\u307f\u306eRESTful API\u30b5\u30dd\u30fc\u30c8\u306b\u3088\u308a\u3001\u9ad8\u6027\u80fd\u306aAPI\u3092\u7c21\u5358\u306b\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u304c\u91cd\u8981\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u5805\u7262\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u306b\u3088\u308a\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u306e\u53b3\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u65e2\u5b58\u306eYii 1\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9<\/strong>: \u65e2\u5b58\u306eYii 1\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6bb5\u968e\u7684\u306bYii 2\u306b\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3059\u308b\u5834\u5408\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-89\">\u5b9f\u969b\u306e\u5c0e\u5165\u4e8b\u4f8b<\/h4>\n\n\n\n<p>Yii\u306f\u4e16\u754c\u4e2d\u306e\u591a\u304f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u63a1\u7528\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OpenCart<\/strong>: \u4eba\u6c17\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9EC\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u4e00\u90e8\u306bYii\u304c\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>HumHub<\/strong>: \u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u306e\u30bd\u30fc\u30b7\u30e3\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3002<\/li>\n\n\n\n<li><strong>Craft CMS<\/strong>: \u30b3\u30f3\u30c6\u30f3\u30c4\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3002<\/li>\n\n\n\n<li><strong>\u4e2d\u56fd\u306e\u5927\u624b\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u4f01\u696d<\/strong>: Baidu\u3084Alibaba\u306a\u3069\u306e\u4e2d\u56fd\u4f01\u696d\u3067\u3082\u63a1\u7528\u4f8b\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-90\">\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>Yii\u3092\u5b66\u3076\u305f\u3081\u306e\u4e3b\u8981\u306a\u30ea\u30bd\u30fc\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong>: <a href=\"https:\/\/www.yiiframework.com\/doc\/guide\/2.0\/en\">https:\/\/www.yiiframework.com\/doc\/guide\/2.0\/en<\/a> \u2013 \u8a73\u7d30\u306a\u30ac\u30a4\u30c9\u3068API\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u516c\u5f0f\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/strong>: <a href=\"https:\/\/www.yiiframework.com\/doc\/guide\/2.0\/en\/start-installation\">https:\/\/www.yiiframework.com\/doc\/guide\/2.0\/en\/start-installation<\/a> \u2013 \u57fa\u672c\u7684\u306a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304b\u3089\u59cb\u307e\u308b\u30b9\u30c6\u30c3\u30d7\u30d0\u30a4\u30b9\u30c6\u30c3\u30d7\u306e\u30ac\u30a4\u30c9\u3002<\/li>\n\n\n\n<li><strong>Yii 2.0\u30ac\u30a4\u30c9\uff08\u975e\u516c\u5f0f\u65e5\u672c\u8a9e\u8a33\uff09<\/strong>: <a href=\"https:\/\/github.com\/yiijan\/yii2-i18n-ja\">https:\/\/github.com\/yiijan\/yii2-i18n-ja<\/a> \u2013 \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u3088\u308b\u65e5\u672c\u8a9e\u7ffb\u8a33\u3002<\/li>\n\n\n\n<li><strong>Yii Forum<\/strong>: <a href=\"https:\/\/forum.yiiframework.com\/\">https:\/\/forum.yiiframework.com\/<\/a> \u2013 \u8cea\u554f\u3084\u60c5\u5831\u5171\u6709\u306e\u305f\u3081\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30d5\u30a9\u30fc\u30e9\u30e0\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-91\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306b\u3001Yii 2\u3067\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u30d6\u30ed\u30b0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u57fa\u672c\u69cb\u6210\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9<\/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=\"\">\/\/ controllers\/PostController.php\nnamespace app\\controllers;\n\nuse Yii;\nuse app\\models\\Post;\nuse app\\models\\PostSearch;\nuse yii\\web\\Controller;\nuse yii\\web\\NotFoundHttpException;\nuse yii\\filters\\VerbFilter;\nuse yii\\filters\\AccessControl;\n\nclass PostController extends Controller\n{\n    public function behaviors()\n    {\n        return [\n            'access' =&gt; [\n                'class' =&gt; AccessControl::class,\n                'only' =&gt; ['create', 'update', 'delete'],\n                'rules' =&gt; [\n                    [\n                        'actions' =&gt; ['create', 'update', 'delete'],\n                        'allow' =&gt; true,\n                        'roles' =&gt; ['@'], \/\/ \u8a8d\u8a3c\u30e6\u30fc\u30b6\u30fc\u306e\u307f\n                    ],\n                ],\n            ],\n            'verbs' =&gt; [\n                'class' =&gt; VerbFilter::class,\n                'actions' =&gt; [\n                    'delete' =&gt; ['POST'],\n                ],\n            ],\n        ];\n    }\n\n    public function actionIndex()\n    {\n        $searchModel = new PostSearch();\n        $dataProvider = $searchModel-&gt;search(Yii::$app-&gt;request-&gt;queryParams);\n\n        return $this-&gt;render('index', [\n            'searchModel' =&gt; $searchModel,\n            'dataProvider' =&gt; $dataProvider,\n        ]);\n    }\n\n    public function actionView($id)\n    {\n        return $this-&gt;render('view', [\n            'model' =&gt; $this-&gt;findModel($id),\n        ]);\n    }\n\n    public function actionCreate()\n    {\n        $model = new Post();\n        $model-&gt;author_id = Yii::$app-&gt;user-&gt;id;\n\n        if ($model-&gt;load(Yii::$app-&gt;request-&gt;post()) &amp;&amp; $model-&gt;save()) {\n            Yii::$app-&gt;session-&gt;setFlash('success', '\u6295\u7a3f\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002');\n            return $this-&gt;redirect(['view', 'id' =&gt; $model-&gt;id]);\n        }\n\n        return $this-&gt;render('create', [\n            'model' =&gt; $model,\n        ]);\n    }\n\n    \/\/ \u4ed6\u306e\u30a2\u30af\u30b7\u30e7\u30f3...\n\n    protected function findModel($id)\n    {\n        if (($model = Post::findOne($id)) !== null) {\n            return $model;\n        }\n\n        throw new NotFoundHttpException('\u8981\u6c42\u3055\u308c\u305f\u30da\u30fc\u30b8\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002');\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u30e2\u30c7\u30eb<\/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=\"\">\/\/ models\/Post.php\nnamespace app\\models;\n\nuse Yii;\nuse yii\\db\\ActiveRecord;\nuse yii\\behaviors\\TimestampBehavior;\nuse yii\\db\\Expression;\n\nclass Post extends ActiveRecord\n{\n    const STATUS_DRAFT = 0;\n    const STATUS_PUBLISHED = 1;\n\n    public static function tableName()\n    {\n        return 'post';\n    }\n\n    public function behaviors()\n    {\n        return [\n            [\n                'class' =&gt; TimestampBehavior::class,\n                'createdAtAttribute' =&gt; 'created_at',\n                'updatedAtAttribute' =&gt; 'updated_at',\n                'value' =&gt; new Expression('NOW()'),\n            ],\n        ];\n    }\n\n    public function rules()\n    {\n        return [\n            [['title', 'content'], 'required'],\n            [['content'], 'string'],\n            [['author_id', 'status'], 'integer'],\n            [['title'], 'string', 'max' =&gt; 255],\n            [['status'], 'default', 'value' =&gt; self::STATUS_DRAFT],\n            [['status'], 'in', 'range' =&gt; [self::STATUS_DRAFT, self::STATUS_PUBLISHED]],\n            [['author_id'], 'exist', 'skipOnError' =&gt; true, 'targetClass' =&gt; User::class, 'targetAttribute' =&gt; ['author_id' =&gt; 'id']],\n        ];\n    }\n\n    public function getAuthor()\n    {\n        return $this-&gt;hasOne(User::class, ['id' =&gt; 'author_id']);\n    }\n\n    public function getComments()\n    {\n        return $this-&gt;hasMany(Comment::class, ['post_id' =&gt; 'id']);\n    }\n\n    public static function getStatusList()\n    {\n        return [\n            self::STATUS_DRAFT =&gt; '\u4e0b\u66f8\u304d',\n            self::STATUS_PUBLISHED =&gt; '\u516c\u958b',\n        ];\n    }\n\n    public function getStatusText()\n    {\n        $statusList = self::getStatusList();\n        return isset($statusList[$this-&gt;status]) ? $statusList[$this-&gt;status] : '\u4e0d\u660e';\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u30d3\u30e5\u30fc<\/strong>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- views\/post\/index.php --&gt;\n&lt;?php\n\nuse yii\\helpers\\Html;\nuse yii\\grid\\GridView;\nuse app\\models\\Post;\n\n$this-&gt;title = '\u8a18\u4e8b\u4e00\u89a7';\n$this-&gt;params['breadcrumbs'][] = $this-&gt;title;\n?&gt;\n&lt;div class=\"post-index\"&gt;\n    &lt;h1&gt;&lt;?= Html::encode($this-&gt;title) ?&gt;&lt;\/h1&gt;\n\n    &lt;p&gt;\n        &lt;?= Html::a('\u65b0\u898f\u8a18\u4e8b\u4f5c\u6210', ['create'], ['class' =&gt; 'btn btn-success']) ?&gt;\n    &lt;\/p&gt;\n\n    &lt;?= GridView::widget([\n        'dataProvider' =&gt; $dataProvider,\n        'filterModel' =&gt; $searchModel,\n        'columns' =&gt; [\n            ['class' =&gt; 'yii\\grid\\SerialColumn'],\n            'title',\n            [\n                'attribute' =&gt; 'author_id',\n                'value' =&gt; 'author.username',\n            ],\n            [\n                'attribute' =&gt; 'status',\n                'value' =&gt; 'statusText',\n                'filter' =&gt; Post::getStatusList(),\n            ],\n            'created_at',\n            ['class' =&gt; 'yii\\grid\\ActionColumn'],\n        ],\n    ]); ?&gt;\n&lt;\/div&gt;\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-92\">\u7d50\u8ad6<\/h4>\n\n\n\n<p>Yii\u306f\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3001\u62e1\u5f35\u6027\u3092\u91cd\u8996\u3057\u305f\u9ad8\u6027\u80fd\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u7279\u306b\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306eWeb\u30b5\u30a4\u30c8\u3067\u771f\u4fa1\u3092\u767a\u63ee\u3057\u3001\u52b9\u7387\u7684\u306a\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u3068\u5805\u7262\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u304c\u5f37\u307f\u3067\u3059\u3002\u8c4a\u5bcc\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u958b\u767a\u30c4\u30fc\u30eb\u306b\u3088\u308a\u3001\u958b\u767a\u52b9\u7387\u3082\u5411\u4e0a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6700\u5927\u306e\u8ab2\u984c\u306f\u3001\u65e5\u672c\u56fd\u5185\u3067\u306e\u60c5\u5831\u91cf\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u898f\u6a21\u304c\u4ed6\u306e\u30e1\u30b8\u30e3\u30fc\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u6bd4\u3079\u3066\u5c0f\u3055\u3044\u3053\u3068\u3067\u3059\u304c\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u8cea\u304c\u9ad8\u304f\u3001\u57fa\u672c\u7684\u306a\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u306f\u5145\u5b9f\u3057\u3066\u3044\u307e\u3059\u3002\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u91cd\u8996\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u6709\u529b\u306a\u9078\u629e\u80a2\u3068\u306a\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-93\">Slim\uff1aAPI\u3068\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u958b\u767a\u306b\u7279\u5316\u3057\u305f\u8efd\u91cf\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.slimframework.com\/assets\/images\/slim-logo.png\" alt=\"Slim Framework\"><\/figure>\n\n\n\n<p><strong>\u30d0\u30fc\u30b8\u30e7\u30f3<\/strong>: 4.11.0\uff082024\u5e745\u6708\u73fe\u5728\uff09<br><strong>\u521d\u30ea\u30ea\u30fc\u30b9<\/strong>: 2011\u5e74<br><strong>\u4f5c\u8005<\/strong>: Josh Lockhart<br><strong>\u30e9\u30a4\u30bb\u30f3\u30b9<\/strong>: MIT License<br><strong>GitHub\u30b9\u30bf\u30fc\u6570<\/strong>: 11,000+<\/p>\n\n\n\n<p>Slim\u306f\u300c\u5fc5\u8981\u306a\u3082\u306e\u3060\u3051\u3092\u4f7f\u3046\u300d\u3068\u3044\u3046\u8a2d\u8a08\u601d\u60f3\u306b\u57fa\u3065\u3044\u305f\u8efd\u91cf\u306a\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u30b7\u30f3\u30d7\u30eb\u3067\u9ad8\u901f\u306aAPI\u3001\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3001\u5c0f\u898f\u6a21Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u7bc9\u306b\u7279\u5316\u3057\u3066\u304a\u308a\u3001PSR-7\uff08HTTP\u30e1\u30c3\u30bb\u30fc\u30b8\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\uff09\u3068PSR-15\uff08HTTP\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\uff09\u6a19\u6e96\u306b\u5b8c\u5168\u6e96\u62e0\u3057\u3066\u3044\u307e\u3059\u3002\u672c\u4f53\u306f\u975e\u5e38\u306b\u5c0f\u3055\u304f\u3001\u4f59\u5206\u306a\u6a5f\u80fd\u3092\u6301\u305f\u306a\u3044\u305f\u3081\u3001\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u4f4e\u3044\u30ea\u30bd\u30fc\u30b9\u6d88\u8cbb\u304c\u7279\u5fb4\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-94\">\u4e3b\u306a\u7279\u5fb4\u3068\u9577\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u975e\u5e38\u306b\u8efd\u91cf\u3067\u30b7\u30f3\u30d7\u30eb\u306a\u8a2d\u8a08<\/strong>: \u30b3\u30a2\u90e8\u5206\u306f\u6570\u767eKB\u3068\u975e\u5e38\u306b\u5c0f\u3055\u304f\u3001\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u6a5f\u80fd\u306e\u307f\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u4f4e\u3044\u5b66\u7fd2\u66f2\u7dda\u3068\u76f4\u611f\u7684\u306aAPI<\/strong>: \u77ed\u6642\u9593\u3067\u7fd2\u5f97\u3067\u304d\u3001\u30b7\u30f3\u30d7\u30eb\u3067\u76f4\u611f\u7684\u306aAPI\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u4f4e\u3044\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9<\/strong>: \u6700\u5c0f\u9650\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u9ad8\u901f\u306a\u5fdc\u7b54\u6642\u9593\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>PSR-7\/PSR-15\u6e96\u62e0<\/strong>: \u6a19\u6e96\u7684\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u63a1\u7528\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u4ed6\u306ePHP\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306e\u4e92\u63db\u6027\u304c\u9ad8\u304f\u3001\u62e1\u5f35\u6027\u306b\u512a\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30e2\u30c0\u30f3\u306aPHP\u6a5f\u80fd\u306e\u6d3b\u7528<\/strong>: \u540d\u524d\u7a7a\u9593\u3001\u30af\u30ed\u30fc\u30b8\u30e3\u3001\u30bf\u30a4\u30d7\u30d2\u30f3\u30c6\u30a3\u30f3\u30b0\u306a\u3069\u3001\u6700\u65b0\u306ePHP\u8a00\u8a9e\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306b\u3088\u308b\u67d4\u8edf\u306a\u6a5f\u80fd\u62e1\u5f35<\/strong>: \u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308a\u3001\u8a8d\u8a3c\u3001\u30ed\u30ae\u30f3\u30b0\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u306a\u3069\u306e\u6a5f\u80fd\u3092\u67d4\u8edf\u306b\u8ffd\u52a0\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>API\u958b\u767a\u306b\u6700\u9069\u5316<\/strong>: RESTful API\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u69cb\u7bc9\u306b\u5fc5\u8981\u306a\u6a5f\u80fd\u304c\u52b9\u7387\u7684\u306b\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-95\">\u77ed\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6a19\u6e96\u6a5f\u80fd\u306e\u9650\u5b9a<\/strong>: Laravel\u3084Symfony\u306a\u3069\u306e\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3059\u308b\u3068\u3001\u6a19\u6e96\u3067\u63d0\u4f9b\u3055\u308c\u308b\u6a5f\u80fd\u304c\u9650\u3089\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u7d71\u5408<\/strong>: \u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u8ffd\u52a0\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3084\u8a2d\u5b9a\u304c\u5fc5\u8981\u306b\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u62bd\u8c61\u5316\u306e\u4e0d\u8db3<\/strong>: \u6a19\u6e96\u3067\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u62bd\u8c61\u5316\u30ec\u30a4\u30e4\u30fc\uff08ORM\uff09\u304c\u63d0\u4f9b\u3055\u308c\u3066\u304a\u3089\u305a\u3001\u5225\u9014\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5c0e\u5165\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u6a5f\u80fd\u304c\u6700\u5c0f\u9650<\/strong>: \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3084\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u7d71\u5408\u6a5f\u80fd\u304c\u6a19\u6e96\u3067\u306f\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002<\/li>\n\n\n\n<li><strong>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u898f\u6a21<\/strong>: \u5927\u624b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3059\u308b\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u898f\u6a21\u304c\u5c0f\u3055\u304f\u3001\u60c5\u5831\u3084\u30ea\u30bd\u30fc\u30b9\u304c\u3084\u3084\u9650\u3089\u308c\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-96\">\u6280\u8853\u7684\u7279\u5fb4<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-97\">1. \u76f4\u611f\u7684\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>Slim\u306f\u76f4\u611f\u7684\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u30b7\u30b9\u30c6\u30e0\u3092\u63d0\u4f9b\u3057\u3001HTTP\u30e1\u30bd\u30c3\u30c9\u306b\u5fdc\u3058\u305f\u30eb\u30fc\u30c8\u5b9a\u7fa9\u3068\u3001RESTful\u306aAPI\u30eb\u30fc\u30c8\u3092\u7c21\u5358\u306b\u4f5c\u6210\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=\"\">\/\/ \u57fa\u672c\u7684\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\n$app-&gt;get('\/hello\/{name}', function (Request $request, Response $response, array $args) {\n    $name = $args['name'];\n    $response-&gt;getBody()-&gt;write(\"Hello, $name\");\n    return $response;\n});\n\n\/\/ HTTP\u30e1\u30bd\u30c3\u30c9\u5225\u306e\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\n$app-&gt;post('\/users', UserController::class . ':create');\n$app-&gt;put('\/users\/{id}', UserController::class . ':update');\n$app-&gt;delete('\/users\/{id}', UserController::class . ':delete');\n\n\/\/ \u30b0\u30eb\u30fc\u30d7\u5316\u3055\u308c\u305f\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\n$app-&gt;group('\/api\/v1', function (RouteCollectorProxy $group) {\n    $group-&gt;get('\/users', UserController::class . ':index');\n    $group-&gt;get('\/users\/{id}', UserController::class . ':show');\n    \n    \/\/ \u30cd\u30b9\u30c8\u3057\u305f\u30b0\u30eb\u30fc\u30d7\n    $group-&gt;group('\/admin', function (RouteCollectorProxy $adminGroup) {\n        $adminGroup-&gt;get('\/stats', AdminController::class . ':stats');\n    });\n});\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-98\">2. \u5f37\u529b\u306a\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>PSR-15\u6e96\u62e0\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3001\u30ea\u30af\u30a8\u30b9\u30c8\/\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u51e6\u7406\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u8a8d\u8a3c\u3001\u30ed\u30ae\u30f3\u30b0\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u5727\u7e2e\u306a\u3069\u306e\u6a5f\u80fd\u3092\u7c21\u5358\u306b\u8ffd\u52a0\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=\"\">\/\/ \u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u5b9f\u88c5\u4f8b\nclass AuthMiddleware\n{\n    public function __invoke(Request $request, RequestHandler $handler): Response\n    {\n        $token = $request-&gt;getHeaderLine('Authorization');\n        \n        if (!$this-&gt;validateToken($token)) {\n            $response = new Response();\n            $response-&gt;getBody()-&gt;write(json_encode(['error' =&gt; '\u8a8d\u8a3c\u30a8\u30e9\u30fc']));\n            return $response-&gt;withStatus(401)\n                           -&gt;withHeader('Content-Type', 'application\/json');\n        }\n        \n        \/\/ \u30c8\u30fc\u30af\u30f3\u304c\u6709\u52b9\u306a\u5834\u5408\u306f\u6b21\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u307e\u305f\u306f\u30eb\u30fc\u30c8\u30cf\u30f3\u30c9\u30e9\u306b\u30d1\u30b9\n        return $handler-&gt;handle($request);\n    }\n    \n    private function validateToken($token)\n    {\n        \/\/ \u30c8\u30fc\u30af\u30f3\u691c\u8a3c\u30ed\u30b8\u30c3\u30af\n        return $token === 'valid-token';\n    }\n}\n\n\/\/ \u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u9069\u7528\n\/\/ \u30b0\u30ed\u30fc\u30d0\u30eb\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\n$app-&gt;add(new SessionMiddleware());\n\n\/\/ \u7279\u5b9a\u306e\u30eb\u30fc\u30c8\u30b0\u30eb\u30fc\u30d7\u306b\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u9069\u7528\n$app-&gt;group('\/api', function (RouteCollectorProxy $group) {\n    $group-&gt;get('\/protected-data', function ($request, $response) {\n        \/\/ \u4fdd\u8b77\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3078\u306e\u30a2\u30af\u30bb\u30b9\n        return $response;\n    });\n})-&gt;add(new AuthMiddleware());\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-99\">3. \u4f9d\u5b58\u6027\u6ce8\u5165\u30b3\u30f3\u30c6\u30ca<\/h5>\n\n\n\n<p>PSR-11\u6e96\u62e0\u306e\u4f9d\u5b58\u6027\u6ce8\u5165\u30b3\u30f3\u30c6\u30ca\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u52b9\u7387\u7684\u306b\u7ba1\u7406\u3067\u304d\u307e\u3059\u3002Slim 4\u3067\u306fPHP-DI\u3084League\u30b3\u30f3\u30c6\u30ca\u306a\u3069\u3001\u597d\u307f\u306eDI\u30b3\u30f3\u30c6\u30ca\u3092\u9078\u629e\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=\"\">\/\/ \u30b3\u30f3\u30c6\u30ca\u306e\u8a2d\u5b9a\n$container = new DI\\Container();\n\n\/\/ \u30b5\u30fc\u30d3\u30b9\u306e\u5b9a\u7fa9\n$container-&gt;set('db', function () {\n    return new PDO('mysql:host=localhost;dbname=testdb', 'user', 'password');\n});\n\n$container-&gt;set('userRepository', function ($container) {\n    return new UserRepository($container-&gt;get('db'));\n});\n\n\/\/ \u30b3\u30f3\u30c6\u30ca\u3092Slim\u306b\u8a2d\u5b9a\nAppFactory::setContainer($container);\n$app = AppFactory::create();\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u4f8b\nclass UserController\n{\n    private $userRepository;\n    \n    public function __construct(UserRepository $userRepository)\n    {\n        $this-&gt;userRepository = $userRepository;\n    }\n    \n    public function index(Request $request, Response $response): Response\n    {\n        $users = $this-&gt;userRepository-&gt;findAll();\n        $response-&gt;getBody()-&gt;write(json_encode($users));\n        return $response-&gt;withHeader('Content-Type', 'application\/json');\n    }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-100\">4. PSR-7\u6e96\u62e0\u306eHTTP\u30e1\u30c3\u30bb\u30fc\u30b8<\/h5>\n\n\n\n<p>Slim\u306f\u3001\u6a19\u6e96\u7684\u306aPSR-7 HTTP\u30ea\u30af\u30a8\u30b9\u30c8\/\u30ec\u30b9\u30dd\u30f3\u30b9\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u4ed6\u306ePSR-7\u4e92\u63db\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306e\u7d71\u5408\u304c\u5bb9\u6613\u306b\u306a\u308a\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=\"\">\/\/ PSR-7 Request\u3068Response\u306e\u4f7f\u7528\u4f8b\n$app-&gt;get('\/api\/data', function (Request $request, Response $response) {\n    \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u53d6\u5f97\n    $params = $request-&gt;getQueryParams();\n    $page = isset($params['page']) ? (int)$params['page'] : 1;\n    \n    \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u30d8\u30c3\u30c0\u30fc\u306e\u53d6\u5f97\n    $contentType = $request-&gt;getHeaderLine('Content-Type');\n    \n    \/\/ \u30ea\u30af\u30a8\u30b9\u30c8\u30dc\u30c7\u30a3\u306e\u53d6\u5f97\uff08JSON\uff09\n    $body = $request-&gt;getBody()-&gt;contents();\n    $data = json_decode($body, true);\n    \n    \/\/ \u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u69cb\u7bc9\n    $payload = ['status' =&gt; 'success', 'data' =&gt; ['items' =&gt; $items]];\n    $response-&gt;getBody()-&gt;write(json_encode($payload));\n    \n    return $response\n        -&gt;withHeader('Content-Type', 'application\/json')\n        -&gt;withStatus(200);\n});\n\n\/\/ \u4e0d\u5909\u6027\u3092\u6d3b\u304b\u3057\u305f\u65b0\u3057\u3044\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u751f\u6210\n$newResponse = $response-&gt;withStatus(201)\n                        -&gt;withHeader('Location', '\/resource\/123');\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-101\">5. \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/h5>\n\n\n\n<p>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3068\u30ed\u30ae\u30f3\u30b0\u306e\u4ed5\u7d44\u307f\u3092\u63d0\u4f9b\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067\u4e00\u8cab\u3057\u305f\u30a8\u30e9\u30fc\u5fdc\u7b54\u3092\u5b9f\u73fe\u3057\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=\"\">\/\/ \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u306e\u8a2d\u5b9a\n$errorMiddleware = $app-&gt;addErrorMiddleware(true, true, true);\n\n\/\/ \u30ab\u30b9\u30bf\u30e0\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30e9\n$errorHandler = $errorMiddleware-&gt;getDefaultErrorHandler();\n$errorHandler-&gt;forceContentType('application\/json');\n\n\/\/ \u7279\u5b9a\u306e\u4f8b\u5916\u306b\u5bfe\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30e9\n$errorMiddleware-&gt;setErrorHandler(\n    UserNotFoundException::class,\n    function (Request $request, Throwable $exception, bool $displayErrorDetails) use ($app) {\n        $response = $app-&gt;getResponseFactory()-&gt;createResponse();\n        $response-&gt;getBody()-&gt;write(json_encode([\n            'error' =&gt; 'User not found',\n            'message' =&gt; $exception-&gt;getMessage()\n        ]));\n        \n        return $response\n            -&gt;withStatus(404)\n            -&gt;withHeader('Content-Type', 'application\/json');\n    }\n);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-102\">Slim 3 vs Slim 4<\/h4>\n\n\n\n<p>Slim\u306b\u306f2\u3064\u306e\u4e3b\u8981\u306a\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-a33ce4b6-f0bc-481d-bef1-e66a6b04a553\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd<\/th><th>Slim 3<\/th><th>Slim 4<\/th><\/tr><\/thead><tbody><tr><td>PHP\u8981\u4ef6<\/td><td>PHP 5.5+<\/td><td>PHP 7.4+<\/td><\/tr><tr><td>PSR\u898f\u683c\u5bfe\u5fdc<\/td><td>PSR-7\u90e8\u5206\u7684\u5bfe\u5fdc<\/td><td>PSR-7\/PSR-15\/PSR-17\u5b8c\u5168\u5bfe\u5fdc<\/td><\/tr><tr><td>DI\u30b3\u30f3\u30c6\u30ca<\/td><td>\u5185\u8535\uff08Pimple\uff09<\/td><td>\u5916\u90e8DI\u30b3\u30f3\u30c6\u30ca\uff08PHP-DI\u63a8\u5968\uff09<\/td><\/tr><tr><td>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/td><td>\u72ec\u81ea\u5f62\u5f0f<\/td><td>PSR-15\u6e96\u62e0<\/td><\/tr><tr><td>\u30eb\u30fc\u30c8\u6226\u7565<\/td><td>\u30aa\u30d7\u30b7\u30e7\u30ca\u30eb<\/td><td>\u5fc5\u9808<\/td><\/tr><tr><td>\u30b5\u30dd\u30fc\u30c8\u72b6\u6cc1<\/td><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4fee\u6b63\u306e\u307f<\/td><td>\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u958b\u767a\u4e2d<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>Slim 4\u306fPHP 7.4\u4ee5\u4e0a\u304c\u5fc5\u8981\u3067\u3059\u304c\u3001\u3088\u308a\u6a19\u6e96\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u63a1\u7528\u3057\u3001\u62e1\u5f35\u6027\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3066\u3044\u307e\u3059\u3002\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001Slim 4\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-103\">\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af vs \u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<p>Slim\u306fLaravel\u3084Symfony\u306a\u3069\u306e\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306f\u6839\u672c\u7684\u306b\u7570\u306a\u308b\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u53d6\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-05448dec-75bc-42d9-b03e-f66b9032ebd7\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u5074\u9762<\/th><th>Slim\uff08\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\uff09<\/th><th>\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><\/tr><\/thead><tbody><tr><td>\u8a2d\u8a08\u601d\u60f3<\/td><td>\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u6a5f\u80fd\u306e\u307f\u3092\u63d0\u4f9b<\/td><td>\u5305\u62ec\u7684\u306a\u6a5f\u80fd\u30bb\u30c3\u30c8\u3092\u63d0\u4f9b<\/td><\/tr><tr><td>\u30b5\u30a4\u30ba<\/td><td>\u8efd\u91cf\uff08\u6570\u767eKB\uff09<\/td><td>\u5927\u898f\u6a21\uff08\u6570MB\uff5e\u6570\u5341MB\uff09<\/td><\/tr><tr><td>\u5b66\u7fd2\u66f2\u7dda<\/td><td>\u7de9\u3084\u304b<\/td><td>\u6025\u5cfb<\/td><\/tr><tr><td>\u67d4\u8edf\u6027<\/td><td>\u9ad8\u3044\uff08\u597d\u307f\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u9078\u629e\u53ef\u80fd\uff09<\/td><td>\u4e2d\u7a0b\u5ea6\uff08\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u65b9\u91dd\u306b\u4f9d\u5b58\uff09<\/td><\/tr><tr><td>\u6a19\u6e96\u6a5f\u80fd<\/td><td>\u6700\u5c0f\u9650\uff08\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\uff09<\/td><td>\u8c4a\u5bcc\uff08ORM\u3001\u8a8d\u8a3c\u3001\u30e1\u30fc\u30eb\u3001\u30ad\u30e5\u30fc\u306a\u3069\uff09<\/td><\/tr><tr><td>\u9069\u7528\u7bc4\u56f2<\/td><td>\u7279\u5b9a\u306e\u7528\u9014\u306b\u6700\u9069\u5316<\/td><td>\u5e45\u5e83\u3044\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5bfe\u5fdc<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u9055\u3044\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6027\u8cea\u3084\u8981\u4ef6\u306b\u3088\u3063\u3066\u3001\u3069\u3061\u3089\u304c\u9069\u3057\u3066\u3044\u308b\u304b\u3092\u6c7a\u3081\u308b\u91cd\u8981\u306a\u8981\u7d20\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-104\">Slim\u306b\u6700\u9069\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h4>\n\n\n\n<p>Slim\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u7279\u306b\u9069\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>REST API\u306e\u958b\u767a<\/strong>: \u30b7\u30f3\u30d7\u30eb\u3067\u9ad8\u901f\u306aAPI\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306e\u5b8c\u74a7\u306a\u30c4\u30fc\u30eb\u30bb\u30c3\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u5b9f\u88c5<\/strong>: \u8efd\u91cf\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u9ad8\u3044\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3092\u958b\u767a\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>SPA\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/strong>: React\u3084Vue\u306a\u3069\u306e\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u7d44\u307f\u5408\u308f\u305b\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u6700\u9069\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u65e2\u5b58\u30b7\u30b9\u30c6\u30e0\u3078\u306eAPI\u8ffd\u52a0<\/strong>: \u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306b\u30e2\u30c0\u30f3\u306aAPI\u30ec\u30a4\u30e4\u30fc\u3092\u8ffd\u52a0\u3059\u308b\u969b\u306e\u826f\u3044\u9078\u629e\u80a2\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u5236\u7d04\u306e\u3042\u308b\u74b0\u5883<\/strong>: \u9650\u3089\u308c\u305f\u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u3067\u3082\u52b9\u7387\u7684\u306b\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-105\">\u5b9f\u969b\u306e\u5229\u7528\u4f8b<\/h4>\n\n\n\n<p>Slim\u306f\u591a\u304f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067API\u958b\u767a\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u5b9f\u88c5\u306b\u4f7f\u7528\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u4f01\u696d\u306eAPI\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/li>\n\n\n\n<li>\u65e2\u5b58\u306e\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3078\u306eAPI\u30ec\u30a4\u30e4\u30fc\u8ffd\u52a0<\/li>\n\n\n\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u4e00\u90e8\u3068\u3057\u3066<\/li>\n\n\n\n<li>\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/li>\n\n\n\n<li>\u5c0f\uff5e\u4e2d\u898f\u6a21\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-106\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7279\u6027<\/h4>\n\n\n\n<p>Slim\u306f\u975e\u5e38\u306b\u8efd\u91cf\u3067\u3001\u30ea\u30af\u30a8\u30b9\u30c8\/\u30ec\u30b9\u30dd\u30f3\u30b9\u51e6\u7406\u306b\u7279\u5316\u3057\u305f\u8a2d\u8a08\u306b\u3088\u308a\u3001\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u30c6\u30b9\u30c8\u3067\u306f\u3001\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3088\u308a\u3082\u9ad8\u901f\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u3068\u4f4e\u3044\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u793a\u3059\u50be\u5411\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>API\u3084\u30b7\u30f3\u30d7\u30eb\u306a\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3059\u7528\u9014\u3067\u306f\u30011\u79d2\u3042\u305f\u308a\u306e\u51e6\u7406\u6570\u304c\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6570\u500d\u306b\u306a\u308b\u3053\u3068\u3082\u3042\u308a\u307e\u3059\u3002\u7279\u306b\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u3084\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3092\u9069\u7528\u3057\u305f\u5834\u5408\u3001\u305d\u306e\u5dee\u306f\u9855\u8457\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-107\">\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>Slim\u3092\u5b66\u3076\u305f\u3081\u306e\u4e3b\u8981\u306a\u30ea\u30bd\u30fc\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong>: <a href=\"https:\/\/www.slimframework.com\/docs\/v4\/\">https:\/\/www.slimframework.com\/docs\/v4\/<\/a> \u2013 \u8a73\u7d30\u304b\u3064\u660e\u78ba\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>GitHub<\/strong>: <a href=\"https:\/\/github.com\/slimphp\/Slim\">https:\/\/github.com\/slimphp\/Slim<\/a> \u2013 \u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3084\u8ab2\u984c\u8ffd\u8de1\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>Slim Framework Japan<\/strong>: <a href=\"https:\/\/slimframework.jp\/\">https:\/\/slimframework.jp\/<\/a> \u2013 \u65e5\u672c\u8a9e\u306e\u60c5\u5831\u3084\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3068\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: GitHub\u306b\u306f\u591a\u304f\u306e\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u516c\u958b\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-108\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u306b\u3001Slim 4\u3067\u30b7\u30f3\u30d7\u30eb\u306aREST API\u3092\u5b9f\u88c5\u3059\u308b\u4f8b\u3092\u793a\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=\"\">\/\/ composer.json\n{\n    \"require\": {\n        \"slim\/slim\": \"^4.11\",\n        \"slim\/psr7\": \"^1.6\",\n        \"php-di\/php-di\": \"^6.4\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"App\\\\\": \"src\/\"\n        }\n    }\n}\n\n\/\/ public\/index.php\n&lt;?php\nuse Slim\\Factory\\AppFactory;\nuse DI\\Container;\n\nrequire __DIR__ . '\/..\/vendor\/autoload.php';\n\n\/\/ \u4f9d\u5b58\u6027\u6ce8\u5165\u30b3\u30f3\u30c6\u30ca\u306e\u8a2d\u5b9a\n$container = new Container();\n$container-&gt;set('db', function() {\n    return new PDO('mysql:host=localhost;dbname=api_db', 'user', 'password', [\n        PDO::ATTR_ERRMODE =&gt; PDO::ERRMODE_EXCEPTION,\n        PDO::ATTR_DEFAULT_FETCH_MODE =&gt; PDO::FETCH_ASSOC\n    ]);\n});\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u4f5c\u6210\nAppFactory::setContainer($container);\n$app = AppFactory::create();\n\n\/\/ \u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306e\u8ffd\u52a0\n$app-&gt;addBodyParsingMiddleware(); \/\/ JSON\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30d1\u30fc\u30b9\n$app-&gt;addRoutingMiddleware();     \/\/ \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\n\n\/\/ \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\n$errorMiddleware = $app-&gt;addErrorMiddleware(true, true, true);\n\n\/\/ \u30eb\u30fc\u30c8\u306e\u5b9a\u7fa9\n$app-&gt;group('\/api', function ($group) {\n    $group-&gt;get('\/users', 'App\\Controllers\\UserController:getAll');\n    $group-&gt;get('\/users\/{id}', 'App\\Controllers\\UserController:getOne');\n    $group-&gt;post('\/users', 'App\\Controllers\\UserController:create');\n    $group-&gt;put('\/users\/{id}', 'App\\Controllers\\UserController:update');\n    $group-&gt;delete('\/users\/{id}', 'App\\Controllers\\UserController:delete');\n});\n\n\/\/ \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5b9f\u884c\n$app-&gt;run();\n\n\/\/ src\/Controllers\/UserController.php\nnamespace App\\Controllers;\n\nuse Psr\\Http\\Message\\ResponseInterface as Response;\nuse Psr\\Http\\Message\\ServerRequestInterface as Request;\nuse PDO;\n\nclass UserController\n{\n    private $db;\n    \n    public function __construct(PDO $db)\n    {\n        $this-&gt;db = $db;\n    }\n    \n    public function getAll(Request $request, Response $response): Response\n    {\n        $stmt = $this-&gt;db-&gt;query('SELECT id, name, email FROM users');\n        $users = $stmt-&gt;fetchAll();\n        \n        $response-&gt;getBody()-&gt;write(json_encode($users));\n        return $response\n            -&gt;withHeader('Content-Type', 'application\/json')\n            -&gt;withStatus(200);\n    }\n    \n    public function getOne(Request $request, Response $response, array $args): Response\n    {\n        $id = $args['id'];\n        $stmt = $this-&gt;db-&gt;prepare('SELECT id, name, email FROM users WHERE id = ?');\n        $stmt-&gt;execute([$id]);\n        $user = $stmt-&gt;fetch();\n        \n        if (!$user) {\n            $response-&gt;getBody()-&gt;write(json_encode(['error' =&gt; 'User not found']));\n            return $response\n                -&gt;withHeader('Content-Type', 'application\/json')\n                -&gt;withStatus(404);\n        }\n        \n        $response-&gt;getBody()-&gt;write(json_encode($user));\n        return $response\n            -&gt;withHeader('Content-Type', 'application\/json')\n            -&gt;withStatus(200);\n    }\n    \n    \/\/ \u4ed6\u306e\u30e1\u30bd\u30c3\u30c9\uff08create, update, delete\uff09\u3082\u540c\u69d8\u306b\u5b9f\u88c5\n}\n<\/pre>\n\n\n\n<p>\u3053\u306e\u4f8b\u3067\u306f\u3001\u6700\u5c0f\u9650\u306e\u30b3\u30fc\u30c9\u3067\u5b8c\u5168\u306aRESTful API\u3092\u5b9f\u88c5\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-109\">\u30d7\u30e9\u30b0\u30a4\u30f3\u3068\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0<\/h4>\n\n\n\n<p>Slim\u306e\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306f\u6bd4\u8f03\u7684\u5c0f\u3055\u3044\u3067\u3059\u304c\u3001\u3044\u304f\u3064\u304b\u306e\u4fbf\u5229\u306a\u30d7\u30e9\u30b0\u30a4\u30f3\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>slim\/csrf<\/strong>: CSRF\u30c8\u30fc\u30af\u30f3\u4fdd\u8b77\u3092\u8ffd\u52a0<\/li>\n\n\n\n<li><strong>slim\/twig-view<\/strong>: Twig\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3068\u306e\u7d71\u5408<\/li>\n\n\n\n<li><strong>slim\/flash<\/strong>: \u30d5\u30e9\u30c3\u30b7\u30e5\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li><strong>slim\/http-cache<\/strong>: HTTP\u30ad\u30e3\u30c3\u30b7\u30e5\u30d8\u30c3\u30c0\u30fc\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ol>\n\n\n\n<p>\u307e\u305f\u3001Slim\u306f\u6a19\u6e96\u7684\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b\u6e96\u62e0\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u4ed6\u306e\u591a\u304f\u306ePSR\u4e92\u63db\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u7c21\u5358\u306b\u7d71\u5408\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Doctrine<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u62bd\u8c61\u5316<\/li>\n\n\n\n<li><strong>Monolog<\/strong>: \u30ed\u30ae\u30f3\u30b0<\/li>\n\n\n\n<li><strong>Guzzle<\/strong>: HTTP\u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/li>\n\n\n\n<li><strong>Firebase JWT<\/strong>: JSON Web Token\u8a8d\u8a3c<\/li>\n\n\n\n<li><strong>Respect\/Validation<\/strong>: \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-110\">\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3067\u306e\u6d3b\u7528<\/h4>\n\n\n\n<p>Slim\u306f\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u5b9f\u88c5\u306b\u7279\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u5404\u30b5\u30fc\u30d3\u30b9\u3092\u8efd\u91cf\u304b\u3064\u9ad8\u901f\u306b\u5b9f\u884c\u3067\u304d\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3<\/strong>: \u500b\u3005\u306e\u30b5\u30fc\u30d3\u30b9\u3092\u72ec\u7acb\u3057\u3066\u30b9\u30b1\u30fc\u30eb\u3067\u304d\u307e\u3059<\/li>\n\n\n\n<li><strong>\u5206\u96e2\u6027<\/strong>: \u30b5\u30fc\u30d3\u30b9\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u3089\u308c\u307e\u3059<\/li>\n\n\n\n<li><strong>\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8<\/strong>: \u5c0f\u3055\u306a\u30b5\u30fc\u30d3\u30b9\u306f\u500b\u5225\u306b\u30c7\u30d7\u30ed\u30a4\u304c\u5bb9\u6613\u3067\u3059<\/li>\n\n\n\n<li><strong>\u6280\u8853\u306e\u591a\u69d8\u6027<\/strong>: \u30b5\u30fc\u30d3\u30b9\u3054\u3068\u306b\u6700\u9069\u306a\u6280\u8853\u3092\u9078\u629e\u3067\u304d\u307e\u3059<\/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=\"\">[\u30af\u30e9\u30a4\u30a2\u30f3\u30c8] --&gt; [API Gateway] --&gt; [User Service (Slim)]\n                                  --&gt; [Product Service (Slim)]\n                                  --&gt; [Order Service (Slim)]\n                                  --&gt; [Payment Service (Go)]\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-111\">\u7d50\u8ad6<\/h4>\n\n\n\n<p>Slim\u306f\u300c\u5fc5\u8981\u306a\u3082\u306e\u3060\u3051\u3092\u4f7f\u3046\u300d\u3068\u3044\u3046\u660e\u78ba\u306a\u8a2d\u8a08\u601d\u60f3\u306b\u57fa\u3065\u3044\u305f\u3001\u8efd\u91cf\u3067\u9ad8\u6027\u80fd\u306a\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u7279\u306bRESTful API\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306e\u958b\u767a\u306b\u304a\u3044\u3066\u3001\u305d\u306e\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u304f\u3001\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5b9f\u73fe\u3067\u304d\u308b\u305f\u3081\u3001\u5c0f\uff5e\u4e2d\u898f\u6a21\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001API\u306b\u7279\u5316\u3057\u305f\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u958b\u767a\u306b\u6700\u9069\u306a\u9078\u629e\u80a2\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>\u6a19\u6e96\u6a5f\u80fd\u306f\u9650\u5b9a\u7684\u3067\u3059\u304c\u3001PSR\u4e92\u63db\u306e\u8a2d\u8a08\u306b\u3088\u308a\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u4ed6\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u67d4\u8edf\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u300c\u5c0f\u3055\u304f\u59cb\u3081\u3066\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u62e1\u5f35\u3059\u308b\u300d\u3068\u3044\u3046\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u53d6\u308a\u305f\u3044\u958b\u767a\u8005\u306b\u3068\u3063\u3066\u3001Slim\u306f\u7406\u60f3\u7684\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-112\">Laminas\uff08\u65e7Zend\uff09\uff1a\u4f01\u696d\u5411\u3051\u9ad8\u6a5f\u80fd\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/getlaminas.org\/images\/logo\/laminas-foundation-rgb.svg\" alt=\"Laminas Project\"><\/figure>\n\n\n\n<p><strong>\u30d0\u30fc\u30b8\u30e7\u30f3<\/strong>: Laminas 2.0\uff082024\u5e745\u6708\u73fe\u5728\uff09<br><strong>\u521d\u30ea\u30ea\u30fc\u30b9<\/strong>: 2019\u5e74\uff08Laminas\uff09\u30012006\u5e74\uff08Zend Framework\uff09<br><strong>\u4f5c\u8005<\/strong>: Zend Technologies\uff08\u73fe\u5728\u306f\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4e3b\u5c0e\uff09<br><strong>\u30e9\u30a4\u30bb\u30f3\u30b9<\/strong>: New BSD License<br><strong>GitHub\u30b9\u30bf\u30fc\u6570<\/strong>: 1,400+\uff08Laminas Project\u5168\u4f53\uff09<\/p>\n\n\n\n<p>Laminas\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306f\u3001\u304b\u3064\u3066\u306eZend Framework\u3092\u5f15\u304d\u7d99\u3044\u3060\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051\u306e\u9ad8\u54c1\u8cea\u306aPHP\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u7fa4\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u30022019\u5e74\u672b\u3001Zend Framework\u306e\u6240\u6709\u6a29\u5909\u66f4\u306b\u4f34\u3044\u3001\u300cLaminas\u300d\u3068\u3044\u3046\u65b0\u3057\u3044\u540d\u524d\u3067\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4e3b\u5c0e\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u751f\u307e\u308c\u5909\u308f\u308a\u307e\u3057\u305f\u3002\u305d\u306e\u6b74\u53f2\u3068\u5805\u7262\u6027\u304b\u3089\u3001\u7279\u306b\u5927\u4f01\u696d\u3084\u9577\u671f\u904b\u7528\u3092\u5fc5\u8981\u3068\u3059\u308b\u30df\u30c3\u30b7\u30e7\u30f3\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u3067\u5e83\u304f\u63a1\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-113\">\u4e3b\u306a\u7279\u5fb4\u3068\u9577\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9ad8\u54c1\u8cea\u306a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b0\u30ec\u30fc\u30c9\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/strong>: \u9577\u5e74\u306b\u308f\u305f\u308b\u5b9f\u8df5\u3068\u6539\u826f\u3092\u7d4c\u3066\u3001\u975e\u5e38\u306b\u5805\u7262\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u7fa4\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u758e\u7d50\u5408\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/strong>: \u72ec\u7acb\u3057\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u7d44\u307f\u5408\u308f\u305b\u306b\u3088\u308b\u9ad8\u3044\u67d4\u8edf\u6027\u3068\u62e1\u5f35\u6027\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u8c4a\u5bcc\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/strong>: 60\u4ee5\u4e0a\u306e\u72ec\u7acb\u3057\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304b\u3089\u69cb\u6210\u3055\u308c\u3001\u5fc5\u8981\u306a\u3082\u306e\u3060\u3051\u3092\u9078\u3093\u3067\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5fb9\u5e95\u3057\u305f\u30c6\u30b9\u30c8<\/strong>: \u9ad8\u3044\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u306b\u3088\u308a\u54c1\u8cea\u304c\u4fdd\u8a3c\u3055\u308c\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u74b0\u5883\u3067\u306e\u5b89\u5b9a\u6027\u304c\u78ba\u4fdd\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u6a19\u6e96\u898f\u683c\u3078\u306e\u6e96\u62e0<\/strong>: PSR\uff08PHP Standard Recommendations\uff09\u306a\u3069\u306ePHP\u6a19\u6e96\u306b\u6e96\u62e0\u3057\u3001\u4ed6\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306e\u4e92\u63db\u6027\u304c\u9ad8\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u9577\u671f\u7684\u306a\u30b5\u30dd\u30fc\u30c8<\/strong>: \u4f01\u696d\u3067\u306e\u9577\u671f\u904b\u7528\u3092\u60f3\u5b9a\u3057\u305f\u8a2d\u8a08\u3068\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u3088\u308b\u7d99\u7d9a\u7684\u306a\u30b5\u30dd\u30fc\u30c8\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5305\u62ec\u7684\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong>: \u8a73\u7d30\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u6574\u5099\u3055\u308c\u3066\u304a\u308a\u3001\u958b\u767a\u8005\u304c\u5fc5\u8981\u306a\u60c5\u5831\u3092\u5f97\u3084\u3059\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-114\">\u77ed\u6240<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6025\u306a\u5b66\u7fd2\u66f2\u7dda<\/strong>: \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u8907\u96d1\u3055\u3068\u7bc4\u56f2\u306e\u5e83\u3055\u304b\u3089\u3001\u521d\u5b66\u8005\u306b\u3068\u3063\u3066\u306f\u5b66\u7fd2\u304c\u96e3\u3057\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u591a\u304f\u306e\u8a2d\u5b9a<\/strong>: \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u67d4\u8edf\u6027\u3092\u6d3b\u304b\u3059\u305f\u3081\u306b\u591a\u304f\u306e\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3001\u521d\u671f\u8a2d\u5b9a\u304c\u7169\u96d1\u306b\u306a\u308a\u304c\u3061\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u5197\u9577\u306a\u30b3\u30fc\u30c9<\/strong>: \u4ed6\u306e\u30e2\u30c0\u30f3\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u3001\u3088\u308a\u591a\u304f\u306e\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u30b3\u30fc\u30c9\u304c\u5fc5\u8981\u306b\u306a\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u65e5\u672c\u8a9e\u60c5\u5831\u306e\u4e0d\u8db3<\/strong>: \u65e5\u672c\u8a9e\u3067\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3084\u60c5\u5831\u304c\u9650\u3089\u308c\u3066\u304a\u308a\u3001\u65e5\u672c\u306e\u958b\u767a\u8005\u306b\u3068\u3063\u3066\u306f\u30cf\u30fc\u30c9\u30eb\u304c\u9ad8\u3044\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u4eba\u6c17\u306e\u4f4e\u4e0b<\/strong>: Laravel\u3001Symfony\u306a\u3069\u306e\u53f0\u982d\u306b\u3088\u308a\u3001\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u63a1\u7528\u7387\u304c\u4f4e\u4e0b\u50be\u5411\u306b\u3042\u308a\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-115\">\u6280\u8853\u7684\u7279\u5fb4<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-116\">1. \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/h5>\n\n\n\n<p>Laminas\u306f60\u4ee5\u4e0a\u306e\u72ec\u7acb\u3057\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3067\u69cb\u6210\u3055\u308c\u3066\u304a\u308a\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u500b\u5225\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u3001\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u4e3b\u8981\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>laminas-mvc<\/strong>: MVC\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/li>\n\n\n\n<li><strong>laminas-form<\/strong>: HTML\u30d5\u30a9\u30fc\u30e0\u4f5c\u6210\u3068\u691c\u8a3c<\/li>\n\n\n\n<li><strong>laminas-db<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u62bd\u8c61\u5316\u30ec\u30a4\u30e4\u30fc<\/li>\n\n\n\n<li><strong>laminas-authentication<\/strong>: \u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li><strong>laminas-permission<\/strong>: \u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li><strong>laminas-cache<\/strong>: \u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li><strong>laminas-mail<\/strong>: \u30e1\u30fc\u30eb\u51e6\u7406<\/li>\n\n\n\n<li><strong>laminas-validator<\/strong>: \u30c7\u30fc\u30bf\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li><strong>mezzio<\/strong>: PSR-15\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308a\u3001\u958b\u767a\u8005\u306f\u5fc5\u8981\u306a\u6a5f\u80fd\u3060\u3051\u3092\u9078\u629e\u3057\u3066\u4f7f\u7528\u3067\u304d\u3001\u4e0d\u8981\u306a\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3092\u907f\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7279\u5b9a\u306e\u90e8\u5206\u306b\u306e\u307fLaminas\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-117\">2. MVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/h5>\n\n\n\n<p>Laminas\u306f\u5f37\u529b\u306aMVC\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\u3057\u3066\u304a\u308a\u3001\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u69cb\u9020\u5316\u3068\u4fdd\u5b88\u6027\u3092\u5411\u4e0a\u3055\u305b\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=\"\">\/\/ module\/Application\/src\/Controller\/IndexController.php\nnamespace Application\\Controller;\n\nuse Laminas\\Mvc\\Controller\\AbstractActionController;\nuse Laminas\\View\\Model\\ViewModel;\n\nclass IndexController extends AbstractActionController\n{\n    public function indexAction()\n    {\n        $message = 'Welcome to Laminas MVC';\n        return new ViewModel(['message' =&gt; $message]);\n    }\n    \n    public function aboutAction()\n    {\n        return new ViewModel();\n    }\n}\n<\/pre>\n\n\n\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ module\/Application\/config\/module.config.php\nreturn [\n    'controllers' =&gt; [\n        'factories' =&gt; [\n            Controller\\IndexController::class =&gt; InvokableFactory::class,\n        ],\n    ],\n    'router' =&gt; [\n        'routes' =&gt; [\n            'home' =&gt; [\n                'type' =&gt; Literal::class,\n                'options' =&gt; [\n                    'route' =&gt; '\/',\n                    'defaults' =&gt; [\n                        'controller' =&gt; Controller\\IndexController::class,\n                        'action' =&gt; 'index',\n                    ],\n                ],\n            ],\n            'about' =&gt; [\n                'type' =&gt; Literal::class,\n                'options' =&gt; [\n                    'route' =&gt; '\/about',\n                    'defaults' =&gt; [\n                        'controller' =&gt; Controller\\IndexController::class,\n                        'action' =&gt; 'about',\n                    ],\n                ],\n            ],\n        ],\n    ],\n    'view_manager' =&gt; [\n        'template_path_stack' =&gt; [\n            __DIR__ . '\/..\/view',\n        ],\n    ],\n];\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-118\">3. \u30b5\u30fc\u30d3\u30b9\u30de\u30cd\u30fc\u30b8\u30e3\u30fc<\/h5>\n\n\n\n<p>Laminas\u306e\u30b5\u30fc\u30d3\u30b9\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306f\u3001\u4f9d\u5b58\u6027\u6ce8\u5165\u3068\u758e\u7d50\u5408\u306a\u30b5\u30fc\u30d3\u30b9\u7ba1\u7406\u3092\u5b9f\u73fe\u3059\u308b\u5f37\u529b\u306aDI\u30b3\u30f3\u30c6\u30ca\u3067\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=\"\">\/\/ \u30e2\u30b8\u30e5\u30fc\u30eb\u8a2d\u5b9a\nreturn [\n    'service_manager' =&gt; [\n        'factories' =&gt; [\n            \/\/ \u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u3092\u4f7f\u7528\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\n            UserService::class =&gt; UserServiceFactory::class,\n            \n            \/\/ \u30af\u30ed\u30fc\u30b8\u30e3\u3092\u4f7f\u7528\u3057\u305f\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\n            'Logger' =&gt; function($container) {\n                $config = $container-&gt;get('config');\n                return new Logger($config['log_path']);\n            },\n        ],\n        'aliases' =&gt; [\n            'user_service' =&gt; UserService::class,\n        ],\n    ],\n];\n\n\/\/ \u30d5\u30a1\u30af\u30c8\u30ea\u30fc\u30af\u30e9\u30b9\nclass UserServiceFactory implements FactoryInterface\n{\n    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)\n    {\n        $dbAdapter = $container-&gt;get(AdapterInterface::class);\n        $config = $container-&gt;get('config');\n        \n        return new UserService($dbAdapter, $config['user_options']);\n    }\n}\n\n\/\/ \u30b5\u30fc\u30d3\u30b9\u4f7f\u7528\u4f8b\uff08\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\uff09\npublic function indexAction()\n{\n    $userService = $this-&gt;getServiceLocator()-&gt;get('user_service');\n    $users = $userService-&gt;findAll();\n    \n    return new ViewModel(['users' =&gt; $users]);\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-119\">4. \u9ad8\u5ea6\u306a\u30d5\u30a9\u30fc\u30e0\u30b7\u30b9\u30c6\u30e0<\/h5>\n\n\n\n<p>Laminas\u306e\u30d5\u30a9\u30fc\u30e0\u30b7\u30b9\u30c6\u30e0\u306f\u3001\u8907\u96d1\u306a\u30d5\u30a9\u30fc\u30e0\u306e\u4f5c\u6210\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3001\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3092\u4e00\u8cab\u3057\u305fAPI\u3067\u63d0\u4f9b\u3057\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=\"\">\/\/ \u30d5\u30a9\u30fc\u30e0\u306e\u5b9a\u7fa9\nuse Laminas\\Form\\Form;\nuse Laminas\\Form\\Element;\nuse Laminas\\InputFilter\\InputFilterProviderInterface;\nuse Laminas\\Validator;\n\nclass ContactForm extends Form implements InputFilterProviderInterface\n{\n    public function __construct($name = null)\n    {\n        parent::__construct('contact');\n        \n        $this-&gt;add([\n            'name' =&gt; 'name',\n            'type' =&gt; Element\\Text::class,\n            'options' =&gt; [\n                'label' =&gt; '\u304a\u540d\u524d',\n            ],\n        ]);\n        \n        $this-&gt;add([\n            'name' =&gt; 'email',\n            'type' =&gt; Element\\Email::class,\n            'options' =&gt; [\n                'label' =&gt; '\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9',\n            ],\n        ]);\n        \n        $this-&gt;add([\n            'name' =&gt; 'subject',\n            'type' =&gt; Element\\Select::class,\n            'options' =&gt; [\n                'label' =&gt; '\u4ef6\u540d',\n                'value_options' =&gt; [\n                    'general' =&gt; '\u4e00\u822c\u7684\u306a\u304a\u554f\u3044\u5408\u308f\u305b',\n                    'support' =&gt; '\u30b5\u30dd\u30fc\u30c8',\n                    'feedback' =&gt; '\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af',\n                ],\n            ],\n        ]);\n        \n        $this-&gt;add([\n            'name' =&gt; 'message',\n            'type' =&gt; Element\\Textarea::class,\n            'options' =&gt; [\n                'label' =&gt; '\u30e1\u30c3\u30bb\u30fc\u30b8',\n            ],\n        ]);\n        \n        $this-&gt;add([\n            'name' =&gt; 'submit',\n            'type' =&gt; Element\\Submit::class,\n            'attributes' =&gt; [\n                'value' =&gt; '\u9001\u4fe1',\n                'class' =&gt; 'btn btn-primary',\n            ],\n        ]);\n    }\n    \n    public function getInputFilterSpecification()\n    {\n        return [\n            'name' =&gt; [\n                'required' =&gt; true,\n                'filters' =&gt; [\n                    ['name' =&gt; 'StripTags'],\n                    ['name' =&gt; 'StringTrim'],\n                ],\n                'validators' =&gt; [\n                    [\n                        'name' =&gt; 'StringLength',\n                        'options' =&gt; [\n                            'min' =&gt; 2,\n                            'max' =&gt; 100,\n                        ],\n                    ],\n                ],\n            ],\n            'email' =&gt; [\n                'required' =&gt; true,\n                'filters' =&gt; [\n                    ['name' =&gt; 'StripTags'],\n                    ['name' =&gt; 'StringTrim'],\n                ],\n                'validators' =&gt; [\n                    ['name' =&gt; 'EmailAddress'],\n                ],\n            ],\n            'message' =&gt; [\n                'required' =&gt; true,\n                'filters' =&gt; [\n                    ['name' =&gt; 'StripTags'],\n                    ['name' =&gt; 'StringTrim'],\n                ],\n                'validators' =&gt; [\n                    [\n                        'name' =&gt; 'StringLength',\n                        'options' =&gt; [\n                            'min' =&gt; 10,\n                        ],\n                    ],\n                ],\n            ],\n        ];\n    }\n}\n<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\" id=\"i-120\">5. \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u62bd\u8c61\u5316\u30ec\u30a4\u30e4\u30fc<\/h5>\n\n\n\n<p>Laminas\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u62bd\u8c61\u5316\u30ec\u30a4\u30e4\u30fc\u306f\u3001SQL\u306e\u751f\u6210\u3001\u7d50\u679c\u30bb\u30c3\u30c8\u306e\u64cd\u4f5c\u3001\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u7ba1\u7406\u306a\u3069\u3092\u63d0\u4f9b\u3057\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=\"\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u63a5\u7d9a\u306e\u8a2d\u5b9a\n$adapter = new Laminas\\Db\\Adapter\\Adapter([\n    'driver'   =&gt; 'Pdo_Mysql',\n    'database' =&gt; 'test',\n    'username' =&gt; 'developer',\n    'password' =&gt; 'password',\n    'hostname' =&gt; 'localhost',\n    'charset'  =&gt; 'utf8',\n]);\n\n\/\/ SQL Select\n$sql = new Laminas\\Db\\Sql\\Sql($adapter);\n$select = $sql-&gt;select();\n$select-&gt;from('users')\n       -&gt;where(['status' =&gt; 'active'])\n       -&gt;order('name ASC')\n       -&gt;limit(10);\n\n$statement = $sql-&gt;prepareStatementForSqlObject($select);\n$results = $statement-&gt;execute();\n\n\/\/ TableGateway\u306e\u4f7f\u7528\n$usersTable = new TableGateway('users', $adapter);\n$rowset = $usersTable-&gt;select(['status' =&gt; 'active']);\n\nforeach ($rowset as $row) {\n    echo $row-&gt;name . \"\\n\";\n}\n\n\/\/ \u30c7\u30fc\u30bf\u306e\u633f\u5165\n$usersTable-&gt;insert([\n    'name' =&gt; 'Jane Smith',\n    'email' =&gt; 'jane@example.com',\n    'status' =&gt; 'active',\n]);\n\n\/\/ \u30c7\u30fc\u30bf\u306e\u66f4\u65b0\n$usersTable-&gt;update(\n    ['status' =&gt; 'inactive'],\n    ['id' =&gt; 5]\n);\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-121\">Zend Framework\u304b\u3089Laminas\u3078\u306e\u79fb\u884c<\/h4>\n\n\n\n<p>2019\u5e74\u672b\u3001Zend Framework\u306f\u6240\u6709\u6a29\u306e\u5909\u66f4\u306b\u3088\u308aLaminas\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u3057\u3066\u751f\u307e\u308c\u5909\u308f\u308a\u307e\u3057\u305f\u3002\u65e2\u5b58\u306eZend Framework\u30b3\u30fc\u30c9\u3092\u79fb\u884c\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\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=\"\"># \u79fb\u884c\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\ncomposer require laminas\/laminas-migration\n\n# \u79fb\u884c\u306e\u5b9f\u884c\n.\/vendor\/bin\/laminas-migration migrate\n<\/pre>\n\n\n\n<p>\u3053\u306e\u30c4\u30fc\u30eb\u306f\u4ee5\u4e0b\u306e\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u540d\u524d\u7a7a\u9593\u3092\u300cZend\\\u300d\u304b\u3089\u300cLaminas\\\u300d\u306b\u5909\u66f4<\/li>\n\n\n\n<li>\u30a4\u30f3\u30dd\u30fc\u30c8\u6587\u3068\u30af\u30e9\u30b9\u53c2\u7167\u306e\u66f4\u65b0<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u306e\u66f4\u65b0<\/li>\n\n\n\n<li>\u30b3\u30f3\u30dd\u30fc\u30b6\u30fc\u4f9d\u5b58\u95a2\u4fc2\u306e\u66f4\u65b0<\/li>\n<\/ol>\n\n\n\n<p>\u6a5f\u80fd\u7684\u306b\u306f\u57fa\u672c\u7684\u306b\u540c\u3058\u3067\u3059\u304c\u3001\u30d6\u30e9\u30f3\u30c7\u30a3\u30f3\u30b0\u3084\u540d\u524d\u7a7a\u9593\u304c\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-122\">Laminas\u306b\u6700\u9069\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/h4>\n\n\n\n<p>Laminas\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u7279\u306b\u9069\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5927\u898f\u6a21\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3068\u9577\u671f\u7684\u306a\u4fdd\u5b88\u6027\u3092\u5fc5\u8981\u3068\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u306b\u6700\u9069\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30df\u30c3\u30b7\u30e7\u30f3\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u306a\u30b7\u30b9\u30c6\u30e0<\/strong>: \u9ad8\u3044\u4fe1\u983c\u6027\u3068\u5b89\u5b9a\u6027\u304c\u8981\u6c42\u3055\u308c\u308b\u91cd\u8981\u306a\u30b7\u30b9\u30c6\u30e0\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3055\u308c\u305f\u958b\u767a<\/strong>: \u5927\u898f\u6a21\u306a\u30c1\u30fc\u30e0\u3067\u306e\u958b\u767a\u3067\u3001\u660e\u78ba\u306a\u8cac\u4efb\u5206\u62c5\u3068\u758e\u7d50\u5408\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u304c\u5fc5\u8981\u306a\u5834\u5408\u306b\u6709\u52b9\u3067\u3059\u3002<\/li>\n\n\n\n<li><strong>\u65e2\u5b58\u306eZend Framework\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: \u65e2\u5b58\u306eZF2\/ZF3\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3084\u4fdd\u5b88\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u7279\u5b9a\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3060\u3051\u5fc5\u8981\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: \u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u7d44\u307f\u5408\u308f\u305b\u3066\u3001\u7279\u5b9a\u306eLaminas\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\uff08\u30d5\u30a9\u30fc\u30e0\u3001\u8a8d\u8a3c\u306a\u3069\uff09\u3060\u3051\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-123\">Laminas vs \u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<p>Laminas\u3068\u4ed6\u306e\u4e3b\u8981PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6bd4\u8f03\uff1a<\/p>\n\n\n<div id=\"id-fafe609b-ba51-4828-9ab3-0eb439657f12\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u5fb4<\/th><th>Laminas<\/th><th>Laravel<\/th><th>Symfony<\/th><th>CodeIgniter<\/th><\/tr><\/thead><tbody><tr><td>\u4e3b\u306a\u5bfe\u8c61<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba<\/td><td>\u4e00\u822c\u7684\u306a\u7528\u9014<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba<\/td><td>\u8efd\u91cf\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/td><\/tr><tr><td>\u5b66\u7fd2\u66f2\u7dda<\/td><td>\u6025<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u6025<\/td><td>\u7de9\u3084\u304b<\/td><\/tr><tr><td>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/td><td>\u72ec\u7acb\u3057\u3066\u4f7f\u7528\u53ef\u80fd<\/td><td>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u4e2d\u5fc3<\/td><td>\u72ec\u7acb\u3057\u3066\u4f7f\u7528\u53ef\u80fd<\/td><td>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u4e2d\u5fc3<\/td><\/tr><tr><td>\u8a2d\u5b9a\u306e\u91cf<\/td><td>\u591a\u3044<\/td><td>\u5c11\u306a\u3044<\/td><td>\u591a\u3044<\/td><td>\u6700\u5c0f<\/td><\/tr><tr><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/td><td>\u826f\u597d\uff08\u9069\u5207\u306a\u8a2d\u5b9a\u3067\uff09<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u826f\u597d<\/td><td>\u975e\u5e38\u306b\u826f\u597d<\/td><\/tr><tr><td>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3<\/td><td>\u4e2d\u898f\u6a21<\/td><td>\u975e\u5e38\u306b\u5927\u304d\u3044<\/td><td>\u5927\u304d\u3044<\/td><td>\u4e2d\u898f\u6a21<\/td><\/tr><tr><td>\u65e5\u672c\u8a9e\u60c5\u5831<\/td><td>\u9650\u5b9a\u7684<\/td><td>\u8c4a\u5bcc<\/td><td>\u6bd4\u8f03\u7684\u8c4a\u5bcc<\/td><td>\u6bd4\u8f03\u7684\u8c4a\u5bcc<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-124\">\u5b9f\u8df5\u7684\u306a\u4f8b\uff1a\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3055\u308c\u305f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u69cb\u9020<\/h4>\n\n\n\n<p>Laminas\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5178\u578b\u7684\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\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=\"\">app\/\n\u251c\u2500\u2500 config\/\n\u2502   \u251c\u2500\u2500 modules.config.php\n\u2502   \u2514\u2500\u2500 application.config.php\n\u251c\u2500\u2500 module\/\n\u2502   \u251c\u2500\u2500 Application\/\n\u2502   \u2502   \u251c\u2500\u2500 config\/\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 module.config.php\n\u2502   \u2502   \u251c\u2500\u2500 src\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 Controller\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 Form\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 Model\/\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 Module.php\n\u2502   \u2502   \u2514\u2500\u2500 view\/\n\u2502   \u2502       \u2514\u2500\u2500 application\/\n\u2502   \u2514\u2500\u2500 Blog\/\n\u2502       \u251c\u2500\u2500 config\/\n\u2502       \u2502   \u2514\u2500\u2500 module.config.php\n\u2502       \u251c\u2500\u2500 src\/\n\u2502       \u2502   \u251c\u2500\u2500 Controller\/\n\u2502       \u2502   \u251c\u2500\u2500 Form\/\n\u2502       \u2502   \u251c\u2500\u2500 Model\/\n\u2502       \u2502   \u2514\u2500\u2500 Module.php\n\u2502       \u2514\u2500\u2500 view\/\n\u2502           \u2514\u2500\u2500 blog\/\n\u2514\u2500\u2500 public\/\n    \u2514\u2500\u2500 index.php\n<\/pre>\n\n\n\n<p>\u3053\u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u5f0f\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308a\u3001\u6a5f\u80fd\u3054\u3068\u306b\u72ec\u7acb\u3057\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f5c\u6210\u3057\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8ffd\u52a0\u307e\u305f\u306f\u524a\u9664\u3067\u304d\u307e\u3059\u3002\u5404\u30e2\u30b8\u30e5\u30fc\u30eb\u306f\u72ec\u81ea\u306e\u8a2d\u5b9a\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001\u30e2\u30c7\u30eb\u3001\u30d3\u30e5\u30fc\u3092\u6301\u3061\u3001\u81ea\u5df1\u5b8c\u7d50\u3057\u305f\u5358\u4f4d\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-125\">\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/h4>\n\n\n\n<p>Laminas\u3092\u5b66\u3076\u305f\u3081\u306e\u4e3b\u8981\u306a\u30ea\u30bd\u30fc\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong>: <a href=\"https:\/\/docs.laminas.dev\/\">https:\/\/docs.laminas.dev\/<\/a><\/li>\n\n\n\n<li><strong>GitHub<\/strong>: <a href=\"https:\/\/github.com\/laminas\">https:\/\/github.com\/laminas<\/a><\/li>\n\n\n\n<li><strong>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/strong>: <a href=\"https:\/\/docs.laminas.dev\/tutorials\/\">https:\/\/docs.laminas.dev\/tutorials\/<\/a><\/li>\n\n\n\n<li><strong>Slack<\/strong>: <a href=\"https:\/\/laminas.slack.com\/\">https:\/\/laminas.slack.com<\/a><\/li>\n<\/ol>\n\n\n\n<p>\u6b8b\u5ff5\u306a\u304c\u3089\u3001\u65e5\u672c\u8a9e\u306e\u60c5\u5831\u304c\u9650\u3089\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u82f1\u8a9e\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u8aad\u3080\u80fd\u529b\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-126\">\u7d50\u8ad6<\/h4>\n\n\n\n<p>Laminas\u306f\u9577\u3044\u6b74\u53f2\u3068\u5b9f\u7e3e\u3092\u6301\u3064\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b0\u30ec\u30fc\u30c9\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u5b66\u7fd2\u66f2\u7dda\u304c\u6025\u3067\u3042\u308a\u3001\u8a2d\u5b9a\u304c\u8907\u96d1\u306a\u9762\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u5927\u898f\u6a21\u3067\u8907\u96d1\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u306f\u9ad8\u3044\u4fe1\u983c\u6027\u3068\u62e1\u5f35\u6027\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u7279\u306b\u9577\u671f\u904b\u7528\u3055\u308c\u308b\u30df\u30c3\u30b7\u30e7\u30f3\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u3084\u3001\u5927\u898f\u6a21\u306a\u30c1\u30fc\u30e0\u958b\u767a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3044\u3066\u3001\u305d\u306e\u771f\u4fa1\u3092\u767a\u63ee\u3059\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046\u3002\u307e\u305f\u3001\u65e2\u5b58\u306eZend Framework\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u79fb\u884c\u3067\u304d\u308b\u552f\u4e00\u306e\u9078\u629e\u80a2\u3067\u3082\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5358\u72ec\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u3057\u3066\u3082\u512a\u308c\u305f\u6a5f\u80fd\u3092\u63d0\u4f9b\u3059\u308b\u305f\u3081\u3001\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u7d44\u307f\u5408\u308f\u305b\u3066\u7279\u5b9a\u306e\u6a5f\u80fd\uff08\u30d5\u30a9\u30fc\u30e0\u3001\u8a8d\u8a3c\u306a\u3069\uff09\u3060\u3051\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3082\u6709\u52b9\u306a\u6226\u7565\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-127\">\u5fb9\u5e95\u6bd4\u8f03\uff01\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u6c7a\u3081\u624b\u3068\u306a\u308b6\u3064\u306e\u8a55\u4fa1\u8ef8<\/h2>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9078\u5b9a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6210\u529f\u3092\u5de6\u53f3\u3059\u308b\u91cd\u8981\u306a\u6c7a\u65ad\u3067\u3059\u3002\u9069\u5207\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u3053\u3068\u3067\u958b\u767a\u52b9\u7387\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3001\u4fdd\u5b88\u6027\u3084\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u304c\u78ba\u4fdd\u3055\u308c\u308b\u4e00\u65b9\u3001\u30df\u30b9\u30de\u30c3\u30c1\u304c\u3042\u308b\u3068\u958b\u767a\u306e\u505c\u6ede\u3084\u6280\u8853\u7684\u8ca0\u50b5\u306e\u84c4\u7a4d\u306b\u3064\u306a\u304c\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u7ae0\u3067\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u306e\u6c7a\u3081\u624b\u3068\u306a\u308b6\u3064\u306e\u8a55\u4fa1\u8ef8\u3092\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3001\u4ee3\u8868\u7684\u306a7\u3064\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u5ba2\u89b3\u7684\u306b\u6bd4\u8f03\u8a55\u4fa1\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u898b\u6975\u3081\u308b\u305f\u3081\u306e\u5224\u65ad\u6750\u6599\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-128\">\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u6d3b\u767a\u3055\u3068\u9577\u671f\u30b5\u30dd\u30fc\u30c8\u72b6\u6cc1<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u969b\u3001\u6280\u8853\u7684\u306a\u7279\u5fb4\u3060\u3051\u3067\u306a\u304f\u3001\u305d\u306e\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u5065\u5168\u6027\u3082\u91cd\u8981\u306a\u5224\u65ad\u6750\u6599\u3068\u306a\u308a\u307e\u3059\u3002\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u9577\u671f\u7684\u306a\u30b5\u30dd\u30fc\u30c8\u4f53\u5236\u304c\u3042\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001\u5c06\u6765\u7684\u306a\u554f\u984c\u89e3\u6c7a\u3084\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u5186\u6ed1\u306b\u884c\u308f\u308c\u3001\u6280\u8853\u7684\u8ca0\u50b5\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-129\">\u4f55\u3092\u30c1\u30a7\u30c3\u30af\u3059\u3079\u304d\u304b\uff1f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>GitHub\u306e\u30b9\u30bf\u30fc\u6570\u30fb\u30d5\u30a9\u30fc\u30af\u6570\u30fb\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u30fc\u6570<\/strong>: \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u898f\u6a21\u3068\u95a2\u5fc3\u5ea6\u3092\u793a\u3059\u6307\u6a19\u3067\u3059<\/li>\n\n\n\n<li><strong>Stack Overflow\u306a\u3069\u3067\u306e\u8cea\u554f\u3068\u56de\u7b54\u306e\u91cf\u3068\u8cea<\/strong>: \u554f\u984c\u89e3\u6c7a\u30ea\u30bd\u30fc\u30b9\u306e\u5145\u5b9f\u5ea6\u3092\u8868\u3057\u307e\u3059<\/li>\n\n\n\n<li><strong>\u30d0\u30b0\u4fee\u6b63\u306e\u901f\u5ea6\u3068\u983b\u5ea6<\/strong>: \u554f\u984c\u304c\u767a\u751f\u3057\u305f\u969b\u306e\u5bfe\u5fdc\u901f\u5ea6\u3092\u77e5\u308b\u91cd\u8981\u306a\u6307\u6a19\u3067\u3059<\/li>\n\n\n\n<li><strong>LTS\uff08Long Term Support\uff09\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u63d0\u4f9b\u6709\u7121\u3068\u671f\u9593<\/strong>: \u9577\u671f\u904b\u7528\u3078\u306e\u5b89\u5fc3\u611f\u3092\u63d0\u4f9b\u3057\u307e\u3059<\/li>\n\n\n\n<li><strong>\u30ea\u30ea\u30fc\u30b9\u30b5\u30a4\u30af\u30eb\u306e\u660e\u78ba\u3055\u3068\u5b89\u5b9a\u6027<\/strong>: \u8a08\u753b\u7684\u306a\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u6307\u6a19\u3068\u306a\u308a\u307e\u3059<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d1\u30c3\u30c1\u306e\u63d0\u4f9b\u4f53\u5236<\/strong>: \u8106\u5f31\u6027\u767a\u898b\u6642\u306e\u5bfe\u5fdc\u306e\u901f\u3055\u3068\u8cea\u3092\u793a\u3057\u307e\u3059<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-130\">\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u8a55\u4fa1<\/h4>\n\n\n<div id=\"id-706dd6a5-c8d4-4c04-ae4c-10d282e3fec1\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u8a55\u4fa1<\/th><th>\u30b3\u30e1\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td><strong>Laravel<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u975e\u5e38\u306b\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3002Laracasts\u306a\u3069\u306e\u5145\u5b9f\u3057\u305f\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3002\u5b9a\u671f\u7684\u306a\u30ea\u30ea\u30fc\u30b9\u30b5\u30a4\u30af\u30eb\u3068\u9577\u671f\u30b5\u30dd\u30fc\u30c8\u7248\u306e\u63d0\u4f9b\u3002<\/td><\/tr><tr><td><strong>Symfony<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u4f01\u696d\u4e3b\u5c0e\u306e\u5b89\u5b9a\u3057\u305f\u30b5\u30dd\u30fc\u30c8\u4f53\u5236\u3002\u660e\u78ba\u306a3\u5e74\u9593\u306eLTS\u3068\u8a08\u753b\u7684\u306a\u30ea\u30ea\u30fc\u30b9\u30b5\u30a4\u30af\u30eb\u3002\u5927\u898f\u6a21\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3002<\/td><\/tr><tr><td><strong>CodeIgniter<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u5b89\u5b9a\u3057\u305f\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3060\u304c\u898f\u6a21\u306f\u6bd4\u8f03\u7684\u5c0f\u3055\u3044\u3002\u9577\u671f\u30b5\u30dd\u30fc\u30c8\u306e\u660e\u78ba\u306a\u8a08\u753b\u306f\u3042\u308b\u304c\u3001\u958b\u767a\u901f\u5ea6\u306f\u3084\u3084\u9045\u3044\u3002<\/td><\/tr><tr><td><strong>CakePHP<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u5b89\u5b9a\u3057\u305f\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u5b9a\u671f\u7684\u306a\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3002\u65e5\u672c\u3067\u306e\u63a1\u7528\u3082\u591a\u3044\u3002<\/td><\/tr><tr><td><strong>Yii<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u6d3b\u52d5\u306f\u3084\u3084\u9650\u5b9a\u7684\u3002\u7279\u306b\u30a2\u30b8\u30a2\u570f\u3067\u306e\u4eba\u6c17\u304c\u9ad8\u3044\u3002\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u983b\u5ea6\u306f\u4ed6\u3088\u308a\u3084\u3084\u5c11\u306a\u3044\u3002<\/td><\/tr><tr><td><strong>Slim<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u7279\u5b9a\u306e\u7528\u9014\u306b\u7279\u5316\u3057\u305f\u5c0f\u898f\u6a21\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3002\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u306f\u5341\u5206\u306a\u6d3b\u52d5\u3068\u652f\u63f4\u3002<\/td><\/tr><tr><td><strong>Laminas<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u304b\u3064\u3066\u306eZend Framework\u306e\u9577\u3044\u6b74\u53f2\u3068\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u3067\u306e\u63a1\u7528\u5b9f\u7e3e\u3002\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u4e3b\u5c0e\u3068\u306a\u3063\u3066\u304b\u3089\u3082\u5b89\u5b9a\u3057\u305f\u958b\u767a\u7d99\u7d9a\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u9078\u5b9a\u3067\u306f\u3001\u4f7f\u7528\u4e88\u5b9a\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6700\u65b0\u306e\u6d3b\u52d5\u72b6\u6cc1\u3092\u78ba\u8a8d\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002GitHub\u3067\u306e\u6700\u8fd1\u306e\u30b3\u30df\u30c3\u30c8\u983b\u5ea6\u3084Issue\u3078\u306e\u5bfe\u5fdc\u72b6\u6cc1\u3001\u516c\u5f0f\u30d5\u30a9\u30fc\u30e9\u30e0\u3067\u306e\u6d3b\u52d5\u306a\u3069\u3092\u8abf\u67fb\u3059\u308b\u3068\u826f\u3044\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>\u7279\u306b\u9577\u671f\u904b\u7528\u3092\u524d\u63d0\u3068\u3057\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001LTS\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u63d0\u4f9b\u671f\u9593\u3084\u904e\u53bb\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u6642\u306e\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u5bb9\u6613\u6027\u306a\u3069\u3082\u91cd\u8981\u306a\u5224\u65ad\u6750\u6599\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-131\">\u5b66\u7fd2\u30b3\u30b9\u30c8\u3068\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5145\u5b9f\u5ea6<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b66\u7fd2\u96e3\u6613\u5ea6\u3068\u5229\u7528\u53ef\u80fd\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30fb\u30ea\u30bd\u30fc\u30b9\u306e\u8cea\u306f\u3001\u958b\u767a\u30c1\u30fc\u30e0\u306e\u751f\u7523\u6027\u306b\u76f4\u63a5\u5f71\u97ff\u3057\u307e\u3059\u3002\u7279\u306b\u65b0\u3057\u3044\u30e1\u30f3\u30d0\u30fc\u306e\u30aa\u30f3\u30dc\u30fc\u30c7\u30a3\u30f3\u30b0\u3084\u521d\u671f\u958b\u767a\u30d5\u30a7\u30fc\u30ba\u3067\u306f\u91cd\u8981\u306a\u5224\u65ad\u57fa\u6e96\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-132\">\u4f55\u3092\u30c1\u30a7\u30c3\u30af\u3059\u3079\u304d\u304b\uff1f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u8cea\u3068\u7db2\u7f85\u6027<\/strong>: \u57fa\u672c\u7684\u306a\u6a5f\u80fd\u304b\u3089\u9ad8\u5ea6\u306a\u4f7f\u3044\u65b9\u307e\u3067\u3001\u3069\u308c\u3060\u3051\u30ab\u30d0\u30fc\u3055\u308c\u3066\u3044\u308b\u304b<\/li>\n\n\n\n<li><strong>\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u5145\u5b9f\u5ea6\u3068\u308f\u304b\u308a\u3084\u3059\u3055<\/strong>: \u5b9f\u8df5\u7684\u306a\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u306e\u8cea\u3068\u91cf<\/li>\n\n\n\n<li><strong>\u65e5\u672c\u8a9e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u6709\u7121\u3068\u8cea<\/strong>: \u7279\u306b\u65e5\u672c\u306e\u30c1\u30fc\u30e0\u306b\u3068\u3063\u3066\u91cd\u8981\u306a\u8981\u7d20<\/li>\n\n\n\n<li><strong>\u5b66\u7fd2\u66f2\u7dda\u306e\u6025\u5cfb\u3055\uff08\u521d\u5fc3\u8005\u306e\u7fd2\u5f97\u3057\u3084\u3059\u3055\uff09<\/strong>: \u57fa\u672c\u7684\u306a\u6a5f\u80fd\u3092\u4f7f\u3044\u3053\u306a\u305b\u308b\u3088\u3046\u306b\u306a\u308b\u307e\u3067\u306e\u6642\u9593<\/li>\n\n\n\n<li><strong>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u3068\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u306e\u5145\u5b9f\u5ea6<\/strong>: \u5b9f\u969b\u306e\u554f\u984c\u89e3\u6c7a\u306b\u5f79\u7acb\u3064\u4f8b\u793a\u306e\u8c4a\u5bcc\u3055<\/li>\n\n\n\n<li><strong>\u66f8\u7c4d\u3084\u30aa\u30f3\u30e9\u30a4\u30f3\u30b3\u30fc\u30b9\u306a\u3069\u306e\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u306e\u91cf<\/strong>: \u516c\u5f0f\u4ee5\u5916\u306e\u5b66\u7fd2\u6750\u6599\u306e\u5145\u5b9f\u5ea6<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-133\">\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u8a55\u4fa1<\/h4>\n\n\n<div id=\"id-2c2db379-8f80-4564-94d0-9a364ece35ac\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u8a55\u4fa1<\/th><th>\u30b3\u30e1\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td><strong>Laravel<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u975e\u5e38\u306b\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3002Laracasts\u306b\u3088\u308b\u8cea\u306e\u9ad8\u3044\u52d5\u753b\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3002\u65e5\u672c\u8a9e\u60c5\u5831\u3082\u8c4a\u5bcc\u3002<\/td><\/tr><tr><td><strong>Symfony<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u8a73\u7d30\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u89e3\u8aac\u3002\u3057\u304b\u3057\u5b66\u7fd2\u66f2\u7dda\u306f\u6025\u3067\u521d\u5fc3\u8005\u306b\u306f\u96e3\u3057\u3044\u9762\u3082\u3002<\/td><\/tr><tr><td><strong>CodeIgniter<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u3067\u5206\u304b\u308a\u3084\u3059\u3044\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3002\u521d\u5fc3\u8005\u306b\u6700\u9069\u306a\u5b66\u7fd2\u66f2\u7dda\u3002\u65e5\u672c\u8a9e\u60c5\u5831\u3082\u6bd4\u8f03\u7684\u5145\u5b9f\u3002<\/td><\/tr><tr><td><strong>CakePHP<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u65e5\u672c\u8a9e\u5316\u304c\u9032\u3093\u3067\u304a\u308a\u3001\u56fd\u5185\u3067\u306e\u60c5\u5831\u3082\u591a\u3044\u3002\u898f\u7d04\u306e\u7406\u89e3\u306b\u82e5\u5e72\u306e\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u3042\u308b\u3002<\/td><\/tr><tr><td><strong>Yii<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u6574\u5099\u3055\u308c\u3066\u3044\u308b\u304c\u3001\u65e5\u672c\u8a9e\u60c5\u5831\u306f\u9650\u5b9a\u7684\u3002\u72ec\u7279\u306e\u6982\u5ff5\u7406\u89e3\u306b\u6642\u9593\u304c\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308b\u3002<\/td><\/tr><tr><td><strong>Slim<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u30b7\u30f3\u30d7\u30eb\u306a\u8a2d\u8a08\u3086\u3048\u306b\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u3044\u3002\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3082\u30b7\u30f3\u30d7\u30eb\u3067\u7406\u89e3\u3057\u3084\u3059\u3044\u3002<\/td><\/tr><tr><td><strong>Laminas<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u975e\u5e38\u306b\u8a73\u7d30\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u304c\u3042\u308b\u3082\u306e\u306e\u3001\u8907\u96d1\u306a\u69cb\u9020\u3068\u591a\u6570\u306e\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306b\u3088\u308a\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u9ad8\u3044\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u5b66\u7fd2\u30b3\u30b9\u30c8\u306f\u3001\u30c1\u30fc\u30e0\u306e\u65e2\u5b58\u30b9\u30ad\u30eb\u30bb\u30c3\u30c8\u306b\u3088\u3063\u3066\u3082\u5927\u304d\u304f\u5909\u308f\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Symfony\u306e\u7d4c\u9a13\u304c\u3042\u308b\u30c1\u30fc\u30e0\u304cLaravel\u306b\u79fb\u884c\u3059\u308b\u5834\u5408\u3068\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u672a\u7d4c\u9a13\u306e\u30c1\u30fc\u30e0\u304cLaravel\u3092\u5c0e\u5165\u3059\u308b\u5834\u5408\u3067\u306f\u3001\u5b66\u7fd2\u66f2\u7dda\u306b\u5927\u304d\u306a\u9055\u3044\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6642\u9593\u7684\u5236\u7d04\u3082\u8003\u616e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u77ed\u671f\u9593\u3067\u306e\u6210\u679c\u304c\u6c42\u3081\u3089\u308c\u308b\u5834\u5408\u306f\u3001\u5b66\u7fd2\u30b3\u30b9\u30c8\u306e\u4f4e\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u9069\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u4e00\u65b9\u3067\u3001\u9577\u671f\u7684\u306a\u751f\u7523\u6027\u3092\u91cd\u8996\u3059\u308b\u306a\u3089\u3001\u521d\u671f\u306e\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u9ad8\u304f\u3066\u3082\u3001\u4f7f\u3044\u3053\u306a\u305b\u308b\u3088\u3046\u306b\u306a\u308c\u3070\u751f\u7523\u6027\u304c\u9ad8\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u3053\u3068\u3082\u691c\u8a0e\u3059\u3079\u304d\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-134\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3<\/h3>\n\n\n\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u51e6\u7406\u901f\u5ea6\u3001\u30ea\u30bd\u30fc\u30b9\u52b9\u7387\u3001\u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u6642\u306e\u30b9\u30b1\u30fc\u30eb\u30a2\u30a6\u30c8\u80fd\u529b\u306f\u3001\u7279\u306b\u5927\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\u3084\u6210\u9577\u3092\u898b\u8fbc\u3080\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u91cd\u8981\u306a\u9078\u5b9a\u57fa\u6e96\u3068\u306a\u308a\u307e\u3059\u3002\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u4e0d\u5341\u5206\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3093\u3067\u3057\u307e\u3046\u3068\u3001\u5f8c\u3005\u306e\u30b9\u30b1\u30fc\u30eb\u30a2\u30c3\u30d7\u6642\u306b\u5927\u304d\u306a\u554f\u984c\u3068\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-135\">\u4f55\u3092\u30c1\u30a7\u30c3\u30af\u3059\u3079\u304d\u304b\uff1f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u901f\u5ea6\u3068\u30ec\u30a4\u30c6\u30f3\u30b7<\/strong>: \u5358\u4f4d\u6642\u9593\u3042\u305f\u308a\u306e\u51e6\u7406\u53ef\u80fd\u30ea\u30af\u30a8\u30b9\u30c8\u6570\u3084\u5fdc\u7b54\u6642\u9593<\/li>\n\n\n\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3068\u5168\u4f53\u306e\u30ea\u30bd\u30fc\u30b9\u52b9\u7387<\/strong>: \u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u3092\u3069\u308c\u3060\u3051\u52b9\u7387\u7684\u306b\u4f7f\u3048\u308b\u304b<\/li>\n\n\n\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u80fd\u306e\u5145\u5b9f\u5ea6<\/strong>: \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u6a5f\u80fd\u306e\u8c4a\u5bcc\u3055<\/li>\n\n\n\n<li><strong>\u5782\u76f4\/\u6c34\u5e73\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3078\u306e\u5bfe\u5fdc<\/strong>: \u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u5897\u52a0\u6642\u306e\u62e1\u5f35\u6027<\/li>\n\n\n\n<li><strong>\u9ad8\u8ca0\u8377\u6642\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7279\u6027<\/strong>: \u8ca0\u8377\u5897\u5927\u6642\u306e\u6319\u52d5\u3068\u30dc\u30c8\u30eb\u30cd\u30c3\u30af<\/li>\n\n\n\n<li><strong>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3078\u306e\u5bfe\u5fdc<\/strong>: \u5206\u6563\u30b7\u30b9\u30c6\u30e0\u3068\u3057\u3066\u306e\u69cb\u7bc9\u3057\u3084\u3059\u3055<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-136\">\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u8a55\u4fa1<\/h4>\n\n\n<div id=\"id-0a4250a0-4fa9-414a-b720-779dca4d90e7\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u8a55\u4fa1<\/th><th>\u30b3\u30e1\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td><strong>Laravel<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u6a19\u6e96\u8a2d\u5b9a\u3067\u306f\u4e2d\u7a0b\u5ea6\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3002Octane\u306a\u3069\u3067\u6700\u9069\u5316\u53ef\u80fd\u3002\u30ad\u30e3\u30c3\u30b7\u30e5\u3084\u30ad\u30e5\u30fc\u306e\u4ed5\u7d44\u307f\u304c\u5145\u5b9f\u3002<\/td><\/tr><tr><td><strong>Symfony<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u9069\u5207\u306a\u8a2d\u5b9a\u3067\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u767a\u63ee\u3002\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051\u306e\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u6a5f\u80fd\u304c\u5145\u5b9f\u3002<\/td><\/tr><tr><td><strong>CodeIgniter<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u6700\u3082\u8efd\u91cf\u3067\u9ad8\u901f\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e00\u3064\u3002\u6700\u5c0f\u9650\u306e\u6a5f\u80fd\u306b\u7d5e\u308b\u3053\u3068\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u5316\u3002<\/td><\/tr><tr><td><strong>CakePHP<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u30d0\u30fc\u30b8\u30e7\u30f34\u4ee5\u964d\u3067\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3002\u30ad\u30e3\u30c3\u30b7\u30e5\u30b7\u30b9\u30c6\u30e0\u304c\u5145\u5b9f\u3002<\/td><\/tr><tr><td><strong>Yii<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u91cd\u8996\u306e\u8a2d\u8a08\u3067\u9ad8\u901f\u3002\u7279\u306b\u9ad8\u5ea6\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u80fd\u3068\u6700\u9069\u5316\u3055\u308c\u305f\u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u30fc\u304c\u5f37\u307f\u3002<\/td><\/tr><tr><td><strong>Slim<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u6700\u5c0f\u9650\u306e\u6a5f\u80fd\u3067\u6700\u9ad8\u901f\u3002API\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u306b\u6700\u9069\u3002<\/td><\/tr><tr><td><strong>Laminas<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u30e2\u30b8\u30e5\u30fc\u30eb\u69cb\u9020\u306b\u3088\u308a\u5fc5\u8981\u306a\u6a5f\u80fd\u3060\u3051\u3092\u4f7f\u7528\u53ef\u80fd\u3002\u9069\u5207\u306a\u8a2d\u5b9a\u3067\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u767a\u63ee\u3067\u304d\u308b\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306b\u95a2\u3057\u3066\u306f\u3001\u30d9\u30f3\u30c1\u30de\u30fc\u30af\u306e\u6570\u5024\u3060\u3051\u3067\u306a\u304f\u3001\u5b9f\u969b\u306e\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3067\u306e\u6319\u52d5\u304c\u91cd\u8981\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u5358\u7d14\u306aHello World\u306e\u5fdc\u7b54\u901f\u5ea6\u3060\u3051\u3067\u5224\u65ad\u3059\u308b\u3068\u3001\u5b9f\u969b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u306e\u52b9\u7387\u6027\u3092\u898b\u8aa4\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001\u6700\u8fd1\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u306f\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3084JIT\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u6d3b\u7528\u306a\u3069\u3001\u69d8\u3005\u306a\u6700\u9069\u5316\u624b\u6cd5\u304c\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001Laravel\u306eOctane\u306fRoadRunner\u3084Swoole\u3092\u4f7f\u7528\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30e1\u30e2\u30ea\u306b\u5e38\u99d0\u3055\u305b\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u9593\u3067\u306e\u30d6\u30fc\u30c8\u30b9\u30c8\u30e9\u30c3\u30d7\u3092\u56de\u907f\u3059\u308b\u3053\u3068\u3067\u5927\u5e45\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u3092\u5b9f\u73fe\u3057\u3066\u3044\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=\"\">\/\/ Laravel Octane\u306e\u8a2d\u5b9a\u4f8b\n\/\/ config\/octane.php\nreturn [\n    'server' =&gt; env('OCTANE_SERVER', 'roadrunner'),\n    'https' =&gt; false,\n    'listeners' =&gt; [\n        \/\/ \u30a4\u30d9\u30f3\u30c8\u30ea\u30b9\u30ca\u30fc\u306e\u8a2d\u5b9a\n    ],\n];\n<\/pre>\n\n\n\n<p>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306b\u3064\u3044\u3066\u306f\u3001\u6c34\u5e73\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u3057\u3084\u3059\u3055\u3082\u91cd\u8996\u3059\u3079\u304d\u3067\u3059\u3002\u30b9\u30c6\u30fc\u30c8\u30ec\u30b9\u306a\u8a2d\u8a08\u304c\u3057\u3084\u3059\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3084\u3001\u5206\u6563\u30ad\u30e3\u30c3\u30b7\u30e5\u3068\u306e\u9023\u643a\u304c\u5bb9\u6613\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001\u5c06\u6765\u7684\u306a\u30b9\u30b1\u30fc\u30eb\u30a2\u30a6\u30c8\u306b\u6709\u5229\u3067\u3059\u3002\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306e\u5897\u52a0\u306b\u5408\u308f\u305b\u3066\u6bb5\u968e\u7684\u306b\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u9032\u5316\u3055\u305b\u3066\u3044\u304f\u3053\u3068\u3092\u60f3\u5b9a\u3057\u305f\u9078\u5b9a\u304c\u91cd\u8981\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-137\">\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3068\u8106\u5f31\u6027\u5bfe\u5fdc\u306e\u5b9f\u7e3e<\/h3>\n\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306fWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3044\u3066\u6700\u3082\u91cd\u8981\u306a\u8981\u7d20\u306e\u4e00\u3064\u3067\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6a19\u6e96\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3068\u3001\u904e\u53bb\u306e\u8106\u5f31\u6027\u3078\u306e\u5bfe\u5fdc\u5b9f\u7e3e\u306f\u3001\u5b89\u5168\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u69cb\u7bc9\u306e\u57fa\u76e4\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-138\">\u4f55\u3092\u30c1\u30a7\u30c3\u30af\u3059\u3079\u304d\u304b\uff1f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>XSS\u3001CSRF\u3001SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306a\u3069\u3078\u306e\u6a19\u6e96\u7684\u306a\u4fdd\u8b77\u6a5f\u80fd<\/strong>: \u4e00\u822c\u7684\u306a\u8106\u5f31\u6027\u306b\u5bfe\u3059\u308b\u7d44\u307f\u8fbc\u307f\u5bfe\u7b56<\/li>\n\n\n\n<li><strong>\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0\u306e\u5805\u7262\u6027<\/strong>: \u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u3068\u6a29\u9650\u7ba1\u7406\u306e\u4ed5\u7d44\u307f\u306e\u5145\u5b9f\u5ea6<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u983b\u5ea6\u3068\u8fc5\u901f\u6027<\/strong>: \u8106\u5f31\u6027\u767a\u898b\u6642\u306e\u5bfe\u5fdc\u901f\u5ea6<\/li>\n\n\n\n<li><strong>\u904e\u53bb\u306e\u91cd\u5927\u306a\u8106\u5f31\u6027\u3068\u5bfe\u5fdc\u72b6\u6cc1<\/strong>: \u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a4\u30f3\u30b7\u30c7\u30f3\u30c8\u306e\u5c65\u6b74\u3068\u89e3\u6c7a\u65b9\u6cd5<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u5316<\/strong>: \u5b89\u5168\u306a\u5b9f\u88c5\u306e\u305f\u3081\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/li>\n\n\n\n<li><strong>\u5916\u90e8\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u76e3\u67fb\u3084\u8106\u5f31\u6027\u8a3a\u65ad\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u6709\u7121<\/strong>: \u7b2c\u4e09\u8005\u306b\u3088\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ec\u30d3\u30e5\u30fc<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-139\">\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u8a55\u4fa1<\/h4>\n\n\n<div id=\"id-324e5ba4-1200-4ecb-b603-7fbde3ac59b7\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u8a55\u4fa1<\/th><th>\u30b3\u30e1\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td><strong>Laravel<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u5305\u62ec\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3068\u8fc5\u901f\u306a\u8106\u5f31\u6027\u5bfe\u5fdc\u3002CSRF\u30c8\u30fc\u30af\u30f3\u3001SQL\u5bfe\u7b56\u3001XSS\u5bfe\u7b56\u306a\u3069\u304c\u6a19\u6e96\u88c5\u5099\u3002<\/td><\/tr><tr><td><strong>Symfony<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3002\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30c1\u30fc\u30e0\u306b\u3088\u308b\u53b3\u683c\u306a\u30ec\u30d3\u30e5\u30fc\u3068\u8fc5\u901f\u306a\u5bfe\u5fdc\u4f53\u5236\u3002<\/td><\/tr><tr><td><strong>CodeIgniter<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u57fa\u672c\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3092\u63d0\u4f9b\u3002\u30b7\u30f3\u30d7\u30eb\u3055\u3086\u3048\u306b\u8106\u5f31\u6027\u306e\u8868\u9762\u7a4d\u304c\u5c0f\u3055\u3044\u5229\u70b9\u3002<\/td><\/tr><tr><td><strong>CakePHP<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u7d44\u307f\u8fbc\u307f\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u5145\u5b9f\u3002\u30d5\u30a9\u30fc\u30e0\u6539\u3056\u3093\u3084CSRF\u5bfe\u7b56\u304c\u6a19\u6e96\u5b9f\u88c5\u3002<\/td><\/tr><tr><td><strong>Yii<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u91cd\u8996\u3057\u305f\u8a2d\u8a08\u3002\u7279\u306b\u5805\u7262\u306a\u5165\u529b\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3068CSRF\u5bfe\u7b56\u304c\u5f37\u307f\u3002<\/td><\/tr><tr><td><strong>Slim<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u57fa\u672c\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u306f\u9650\u5b9a\u7684\u3060\u304c\u3001PSR-15\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3067\u62e1\u5f35\u53ef\u80fd\u3002\u6700\u5c0f\u9650\u306e\u6a5f\u80fd\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ea\u30b9\u30af\u3082\u6700\u5c0f\u5316\u3002<\/td><\/tr><tr><td><strong>Laminas<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051\u306e\u5805\u7262\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u3002\u9577\u5e74\u306e\u5b9f\u7e3e\u3068\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306b\u95a2\u3059\u308b\u8c4a\u5bcc\u306a\u77e5\u898b\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u306b\u95a2\u3057\u3066\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u63d0\u4f9b\u3059\u308b\u57fa\u672c\u7684\u306a\u4fdd\u8b77\u6a5f\u80fd\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001CSRF\u30c8\u30fc\u30af\u30f3\u306e\u81ea\u52d5\u751f\u6210\u3084\u3001SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u306e\u305f\u3081\u306e\u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u30fc\u306a\u3069\u304c\u3001\u3069\u306e\u3088\u3046\u306b\u5b9f\u88c5\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\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=\"\">\/\/ Laravel\u3067\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u306e\u4f8b\n\/\/ CSRF\u30c8\u30fc\u30af\u30f3\u4fdd\u8b77\n&lt;form method=\"POST\" action=\"\/profile\"&gt;\n    @csrf\n    &lt;!-- \u30d5\u30a9\u30fc\u30e0\u306e\u5185\u5bb9 --&gt;\n&lt;\/form&gt;\n\n\/\/ \u30af\u30a8\u30ea\u30d3\u30eb\u30c0\u30fc\u306b\u3088\u308bSQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\n$users = DB::table('users')\n            -&gt;where('status', '=', 'active')\n            -&gt;where('subscribed', '=', 1)\n            -&gt;get();\n<\/pre>\n\n\n\n<p>\u307e\u305f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a2\u30c9\u30d0\u30a4\u30b6\u30ea\u30fc\u3084\u30ea\u30ea\u30fc\u30b9\u30ce\u30fc\u30c8\u3092\u5b9a\u671f\u7684\u306b\u30c1\u30a7\u30c3\u30af\u3059\u308b\u7fd2\u6163\u3092\u3064\u3051\u308b\u3053\u3068\u3082\u91cd\u8981\u3067\u3059\u3002\u591a\u304f\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u95a2\u9023\u306e\u66f4\u65b0\u60c5\u5831\u3092\u516c\u5f0f\u30b5\u30a4\u30c8\u3084\u30e1\u30fc\u30ea\u30f3\u30b0\u30ea\u30b9\u30c8\u3067\u516c\u958b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u7279\u306b\u91d1\u878d\u7cfb\u3084\u500b\u4eba\u60c5\u5831\u3092\u6271\u3046\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u5fdc\u529b\u306f\u6700\u91cd\u8981\u306e\u9078\u5b9a\u57fa\u6e96\u306e\u4e00\u3064\u3068\u306a\u308b\u3067\u3057\u3087\u3046\u3002\u904e\u53bb\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30a4\u30f3\u30b7\u30c7\u30f3\u30c8\u3078\u306e\u5bfe\u5fdc\u901f\u5ea6\u3084\u900f\u660e\u6027\u3082\u8a55\u4fa1\u3059\u3079\u304d\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-140\">\u4ed6\u6280\u8853\u30fb\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u306e\u3057\u3084\u3059\u3055<\/h3>\n\n\n\n<p>\u73fe\u4ee3\u306eWeb\u958b\u767a\u3067\u306f\u3001\u5358\u4e00\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3060\u3051\u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u306f\u7a00\u3067\u3001\u69d8\u3005\u306a\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3084\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u306e\u9023\u643a\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u62e1\u5f35\u6027\u3068\u4ed6\u6280\u8853\u3068\u306e\u7d71\u5408\u3057\u3084\u3059\u3055\u306f\u3001\u958b\u767a\u306e\u67d4\u8edf\u6027\u3068\u52b9\u7387\u306b\u5927\u304d\u304f\u5f71\u97ff\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-141\">\u4f55\u3092\u30c1\u30a7\u30c3\u30af\u3059\u3079\u304d\u304b\uff1f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\uff08MySQL, PostgreSQL, MongoDB\u7b49\uff09\u3068\u306e\u9023\u643a<\/strong>: \u591a\u69d8\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\uff08Vue, React\u7b49\uff09\u3068\u306e\u7d71\u5408<\/strong>: \u30e2\u30c0\u30f3\u306aUI\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u9023\u643a<\/li>\n\n\n\n<li><strong>API\uff08REST, GraphQL\uff09\u4f5c\u6210\u306e\u5bb9\u6613\u3055<\/strong>: API\u30d9\u30fc\u30b9\u306e\u958b\u767a\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li><strong>\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\uff08AWS, GCP, Azure\uff09\u3068\u306e\u9023\u643a<\/strong>: \u30af\u30e9\u30a6\u30c9\u74b0\u5883\u3067\u306e\u5c55\u958b\u3057\u3084\u3059\u3055<\/li>\n\n\n\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u3001\u691c\u7d22\u30a8\u30f3\u30b8\u30f3\uff08Redis, Elasticsearch\u7b49\uff09\u3068\u306e\u7d71\u5408<\/strong>: \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u9023\u643a<\/li>\n\n\n\n<li><strong>\u30b3\u30f3\u30c6\u30ca\u5316\uff08Docker\uff09\u3068CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3078\u306e\u5bfe\u5fdc<\/strong>: \u73fe\u4ee3\u7684\u306a\u958b\u767a\u30fb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30d5\u30ed\u30fc\u3068\u306e\u89aa\u548c\u6027<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-142\">\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u8a55\u4fa1<\/h4>\n\n\n<div id=\"id-d796b11a-240e-4633-8bcf-440e0e2d793a\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u8a55\u4fa1<\/th><th>\u30b3\u30e1\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td><strong>Laravel<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u591a\u6570\u306e\u516c\u5f0f\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u3088\u308b\u512a\u308c\u305f\u9023\u643a\u6027\u3002\u7279\u306b\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u7d71\u5408\uff08Vue\uff09\u3084\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u9023\u643a\u304c\u5145\u5b9f\u3002<\/td><\/tr><tr><td><strong>Symfony<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u9ad8\u3044\u62e1\u5f35\u6027\u3068\u591a\u69d8\u306a\u30d0\u30f3\u30c9\u30eb\u3002API Platform\u306b\u3088\u308b\u512a\u308c\u305fAPI\u69cb\u7bc9\u6a5f\u80fd\u3002Docker\u3068\u306e\u7d71\u5408\u3082\u826f\u597d\u3002<\/td><\/tr><tr><td><strong>CodeIgniter<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u57fa\u672c\u7684\u306a\u9023\u643a\u6a5f\u80fd\u306f\u63d0\u4f9b\u3002\u30b7\u30f3\u30d7\u30eb\u3055\u3086\u3048\u306b\u62e1\u5f35\u306b\u306f\u8ffd\u52a0\u4f5c\u696d\u304c\u5fc5\u8981\u306a\u5834\u5408\u3082\u3002<\/td><\/tr><tr><td><strong>CakePHP<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u30d7\u30e9\u30b0\u30a4\u30f3\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308b\u62e1\u5f35\u6027\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u3084API\u69cb\u7bc9\u306e\u305f\u3081\u306e\u6a5f\u80fd\u304c\u5145\u5b9f\u3002<\/td><\/tr><tr><td><strong>Yii<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u62e1\u5f35\u6a5f\u80fd\u304c\u5145\u5b9f\u3002\u7279\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a\u304c\u5f37\u529b\u3060\u304c\u3001\u6700\u65b0\u6280\u8853\u3068\u306e\u7d71\u5408\u306f\u3084\u3084\u9045\u308c\u304c\u3061\u3002<\/td><\/tr><tr><td><strong>Slim<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>PSR\u6e96\u62e0\u306b\u3088\u308b\u9ad8\u3044\u4e92\u63db\u6027\u3002\u8efd\u91cf\u306a\u305f\u3081\u4ed6\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u7d44\u307f\u5408\u308f\u305b\u3084\u3059\u3044\u3002API\u69cb\u7bc9\u306b\u6700\u9069\u3002<\/td><\/tr><tr><td><strong>Laminas<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u30e2\u30b8\u30e5\u30fc\u30eb\u5f0f\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u3088\u308b\u9ad8\u3044\u62e1\u5f35\u6027\u3002\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u74b0\u5883\u3067\u306e\u591a\u69d8\u306a\u30b7\u30b9\u30c6\u30e0\u9023\u643a\u306b\u5f37\u307f\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u7279\u306b\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3084API\u99c6\u52d5\u958b\u767a\u306e\u5834\u5408\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9023\u643a\u6027\u306f\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306bReact\u3092\u4f7f\u3044\u3001\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306bPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u7528\u3059\u308b\u69cb\u6210\u3067\u306f\u3001JSON\u306e\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\/\u30c7\u30b7\u30ea\u30a2\u30e9\u30a4\u30ba\u3084CORS\u5bfe\u5fdc\u306e\u5bb9\u6613\u3055\u304c\u958b\u767a\u52b9\u7387\u306b\u5927\u304d\u304f\u5f71\u97ff\u3057\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=\"\">\/\/ Symfony API Platform\u3067\u306e\u30b7\u30f3\u30d7\u30eb\u306aAPI\u5b9a\u7fa9\u4f8b\nnamespace App\\Entity;\n\nuse ApiPlatform\\Core\\Annotation\\ApiResource;\nuse Doctrine\\ORM\\Mapping as ORM;\n\n\/**\n * @ApiResource()\n * @ORM\\Entity()\n *\/\nclass Book\n{\n    \/**\n     * @ORM\\Id\n     * @ORM\\GeneratedValue\n     * @ORM\\Column(type=\"integer\")\n     *\/\n    private $id;\n\n    \/**\n     * @ORM\\Column\n     *\/\n    private $title;\n\n    \/\/ getters and setters...\n}\n<\/pre>\n\n\n\n<p>\u307e\u305f\u3001\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u3082\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001Laravel\u306fAWS\u3001GCP\u3001Azure\u306a\u3069\u306e\u4e3b\u8981\u30af\u30e9\u30a6\u30c9\u30d7\u30ed\u30d0\u30a4\u30c0\u3068\u306e\u9023\u643a\u3092\u5bb9\u6613\u306b\u3059\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u5145\u5b9f\u3057\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001Laravel\u306eVapor\u306fAWS Lambda\u3078\u306e\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30c7\u30d7\u30ed\u30a4\u3092\u7c21\u5358\u306b\u5b9f\u73fe\u3067\u304d\u308b\u30b5\u30fc\u30d3\u30b9\u3068\u3057\u3066\u6ce8\u76ee\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30b3\u30f3\u30c6\u30ca\u5316\uff08Docker\uff09\u3068\u306e\u89aa\u548c\u6027\u3082\u3001\u73fe\u4ee3\u306e\u958b\u767a\u74b0\u5883\u3067\u306f\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u958b\u767a\u74b0\u5883\u3068\u672c\u756a\u74b0\u5883\u306e\u4e00\u8cab\u6027\u3092\u4fdd\u3061\u3084\u3059\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3084\u3001CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3068\u7d71\u5408\u3057\u3084\u3059\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001DevOps\u306e\u89b3\u70b9\u304b\u3089\u3082\u9ad8\u304f\u8a55\u4fa1\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-143\">\u63a1\u7528\u5e02\u5834\u3067\u306e\u9700\u8981\u3068\u5c06\u6765\u6027<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5e02\u5834\u3067\u306e\u4eba\u6c17\u3068\u9700\u8981\u306f\u3001\u30a8\u30f3\u30b8\u30cb\u30a2\u306e\u30ad\u30e3\u30ea\u30a2\u5f62\u6210\u3084\u63a1\u7528\u8a08\u753b\u306b\u3082\u5f71\u97ff\u3057\u307e\u3059\u3002\u5c06\u6765\u6027\u306e\u3042\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u3053\u3068\u3067\u3001\u9577\u671f\u7684\u306a\u958b\u767a\u30fb\u4fdd\u5b88\u4f53\u5236\u306e\u7dad\u6301\u3082\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-144\">\u4f55\u3092\u30c1\u30a7\u30c3\u30af\u3059\u3079\u304d\u304b\uff1f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6c42\u4eba\u5e02\u5834\u3067\u306e\u9700\u8981\u3068\u5e73\u5747\u5e74\u53ce<\/strong>: \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5e02\u5834\u4fa1\u5024<\/li>\n\n\n\n<li><strong>\u56fd\u5185\u5916\u3067\u306e\u63a1\u7528\u4f01\u696d\u6570\u3068\u4e8b\u4f8b<\/strong>: \u5b9f\u969b\u306e\u5c0e\u5165\u5b9f\u7e3e<\/li>\n\n\n\n<li><strong>\u958b\u767a\u8005\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u306e\u8a55\u5224\u3068\u4eba\u6c17<\/strong>: \u958b\u767a\u8005\u304b\u3089\u306e\u652f\u6301<\/li>\n\n\n\n<li><strong>\u5c06\u6765\u7684\u306a\u6280\u8853\u30c8\u30ec\u30f3\u30c9\u3068\u306e\u89aa\u548c\u6027<\/strong>: \u65b0\u3057\u3044\u958b\u767a\u624b\u6cd5\u3084\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u306e\u9069\u5408\u6027<\/li>\n\n\n\n<li><strong>\u65b0\u5352\u30fb\u4e2d\u9014\u63a1\u7528\u306e\u3057\u3084\u3059\u3055<\/strong>: \u4eba\u6750\u7372\u5f97\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li><strong>\u30a8\u30f3\u30b8\u30cb\u30a2\u306e\u30ad\u30e3\u30ea\u30a2\u30d1\u30b9\u3078\u306e\u5f71\u97ff<\/strong>: \u30b9\u30ad\u30eb\u3068\u3057\u3066\u306e\u5c06\u6765\u6027<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-145\">\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u8a55\u4fa1<\/h4>\n\n\n<div id=\"id-dc2635e0-5704-4923-9c81-5ba57e0ebcd8\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u8a55\u4fa1<\/th><th>\u30b3\u30e1\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td><strong>Laravel<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u56fd\u5185\u5916\u3067\u6700\u3082\u6c42\u4eba\u6570\u304c\u591a\u304f\u3001\u5e02\u5834\u4fa1\u5024\u3082\u9ad8\u3044\u3002\u6d3b\u767a\u306a\u958b\u767a\u3068\u5c06\u6765\u6027\u304c\u671f\u5f85\u3067\u304d\u308b\u3002<\/td><\/tr><tr><td><strong>Symfony<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u4f01\u696d\u6848\u4ef6\u3084\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u9818\u57df\u3067\u306e\u5f37\u3044\u9700\u8981\u3002\u9577\u671f\u7684\u306a\u5b89\u5b9a\u6027\u3068\u9ad8\u3044\u5e02\u5834\u4fa1\u5024\u3002<\/td><\/tr><tr><td><strong>CodeIgniter<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u4e00\u5b9a\u306e\u9700\u8981\u306f\u5b58\u5728\u3059\u308b\u304c\u3001\u4ed6\u306e\u4e3b\u8981\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u6bd4\u3079\u308b\u3068\u9650\u5b9a\u7684\u3002\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u306e\u63a1\u7528\u3082\u3002<\/td><\/tr><tr><td><strong>CakePHP<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u65e5\u672c\u56fd\u5185\u3067\u306f\u6bd4\u8f03\u7684\u63a1\u7528\u4f8b\u304c\u591a\u3044\u3002\u5b89\u5b9a\u3057\u305f\u9700\u8981\u304c\u3042\u308b\u304c\u3001\u6210\u9577\u7387\u306f\u920d\u5316\u50be\u5411\u3002<\/td><\/tr><tr><td><strong>Yii<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u7279\u5b9a\u306e\u5730\u57df\u3084\u696d\u754c\u306b\u9650\u5b9a\u3055\u308c\u305f\u9700\u8981\u3002\u56fd\u5185\u3067\u306e\u63a1\u7528\u4e8b\u4f8b\u306f\u6bd4\u8f03\u7684\u5c11\u306a\u3044\u3002<\/td><\/tr><tr><td><strong>Slim<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>API\u958b\u767a\u30b9\u30ad\u30eb\u3068\u3057\u3066\u306e\u9700\u8981\u306f\u9ad8\u307e\u3063\u3066\u3044\u308b\u3002\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u666e\u53ca\u306b\u4f34\u3044\u6ce8\u76ee\u5ea6\u4e0a\u6607\u3002<\/td><\/tr><tr><td><strong>Laminas<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u9818\u57df\u3067\u306e\u5805\u8abf\u306a\u9700\u8981\u3002\u5c02\u9580\u6027\u306e\u9ad8\u3044\u30b9\u30ad\u30eb\u3068\u3057\u3066\u8a55\u4fa1\u3055\u308c\u308b\u304c\u3001\u5168\u4f53\u7684\u306a\u5e02\u5834\u306f\u7e2e\u5c0f\u50be\u5411\u3002<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u4eba\u6750\u5e02\u5834\u306e\u52d5\u5411\u306f\u3001\u5730\u57df\u3084\u696d\u754c\u306b\u3088\u3063\u3066\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4f8b\u3048\u3070\u3001\u65e5\u672c\u56fd\u5185\u3067\u306fLaravel\u3068CakePHP\u306e\u6c42\u4eba\u304c\u591a\u3044\u50be\u5411\u306b\u3042\u308a\u307e\u3059\u304c\u3001\u30b0\u30ed\u30fc\u30d0\u30eb\u3067\u306fLaravel\u3068Symfony\u304c\u5727\u5012\u7684\u306a\u30b7\u30a7\u30a2\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u77e5\u8b58\u306f\u4e00\u671d\u4e00\u5915\u306b\u8eab\u306b\u3064\u304f\u3082\u306e\u3067\u306f\u306a\u3044\u305f\u3081\u3001\u30c1\u30fc\u30e0\u5168\u4f53\u306e\u30b9\u30ad\u30eb\u30bb\u30c3\u30c8\u3084\u5c06\u6765\u306e\u63a1\u7528\u8a08\u753b\u3082\u8003\u616e\u3057\u3066\u9078\u5b9a\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u7279\u306b\u3001\u9577\u671f\u7684\u306a\u958b\u767a\u30fb\u4fdd\u5b88\u304c\u4e88\u60f3\u3055\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u5c06\u6765\u7684\u306a\u4eba\u6750\u78ba\u4fdd\u306e\u898b\u901a\u3057\u3082\u91cd\u8981\u306a\u5224\u65ad\u6750\u6599\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306f\u3001\u65e5\u672c\u56fd\u5185\u306e\u4e3b\u8981\u6c42\u4eba\u30b5\u30a4\u30c8\u3067\u306e\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6c42\u4eba\u6570\u6bd4\u8f03\uff082024\u5e743\u6708\u6642\u70b9\u3001\u6982\u7b97\uff09\u3067\u3059\uff1a<\/p>\n\n\n<div id=\"id-093a56d7-ceb8-44fc-9d19-af2f4a58507b\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u6c42\u4eba\u6570<\/th><th>\u5e73\u5747\u5e74\u53ce\u30ec\u30f3\u30b8<\/th><\/tr><\/thead><tbody><tr><td>Laravel<\/td><td>1,000+<\/td><td>450-750\u4e07\u5186<\/td><\/tr><tr><td>Symfony<\/td><td>500+<\/td><td>500-800\u4e07\u5186<\/td><\/tr><tr><td>CakePHP<\/td><td>400+<\/td><td>450-700\u4e07\u5186<\/td><\/tr><tr><td>CodeIgniter<\/td><td>200+<\/td><td>400-650\u4e07\u5186<\/td><\/tr><tr><td>Yii<\/td><td>50+<\/td><td>450-700\u4e07\u5186<\/td><\/tr><tr><td>Slim<\/td><td>100+<\/td><td>500-750\u4e07\u5186<\/td><\/tr><tr><td>Laminas\/Zend<\/td><td>150+<\/td><td>550-850\u4e07\u5186<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u6570\u5024\u306f\u3042\u304f\u307e\u3067\u76ee\u5b89\u3067\u3042\u308a\u3001\u5b9f\u969b\u306e\u5e02\u5834\u72b6\u6cc1\u306f\u5e38\u306b\u5909\u52d5\u3057\u3066\u3044\u308b\u3053\u3068\u306b\u3054\u6ce8\u610f\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-146\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u305f\u3081\u306e\u7dcf\u5408\u8a55\u4fa1<\/h3>\n\n\n\n<p>\u3053\u3053\u307e\u3067\u898b\u3066\u304d\u305f6\u3064\u306e\u8a55\u4fa1\u8ef8\u306b\u57fa\u3065\u304d\u3001\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7dcf\u5408\u8a55\u4fa1\u3092\u8868\u306b\u307e\u3068\u3081\u307e\u3057\u305f\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u3001\u91cd\u8996\u3059\u3079\u304d\u8a55\u4fa1\u8ef8\u306e\u91cd\u307f\u4ed8\u3051\u3092\u8abf\u6574\u3059\u308b\u3053\u3068\u3067\u3001\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u53c2\u8003\u3068\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n<div id=\"id-566ae93a-468c-46c6-a2aa-6c92c0c11374\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u6d3b\u6027\u5ea6<\/th><th>\u5b66\u7fd2\u30b3\u30b9\u30c8<\/th><th>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/th><th>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/th><th>\u4ed6\u6280\u8853\u9023\u643a<\/th><th>\u5e02\u5834\u9700\u8981<\/th><th>\u7dcf\u5408\u8a55\u4fa1<\/th><\/tr><\/thead><tbody><tr><td><strong>Laravel<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td><strong>\u2605\u2605\u2605\u2605\u2605<\/strong><\/td><\/tr><tr><td><strong>Symfony<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td><strong>\u2605\u2605\u2605\u2605\u2605<\/strong><\/td><\/tr><tr><td><strong>CodeIgniter<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td><strong>\u2605\u2605\u2605\u2605\u2606<\/strong><\/td><\/tr><tr><td><strong>CakePHP<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td><strong>\u2605\u2605\u2605\u2605\u2606<\/strong><\/td><\/tr><tr><td><strong>Yii<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td><strong>\u2605\u2605\u2605\u2605\u2606<\/strong><\/td><\/tr><tr><td><strong>Slim<\/strong><\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td><strong>\u2605\u2605\u2605\u2605\u2606<\/strong><\/td><\/tr><tr><td><strong>Laminas<\/strong><\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td><strong>\u2605\u2605\u2605\u2605\u2606<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u7dcf\u5408\u7684\u306b\u898b\u308b\u3068\u3001Laravel\u3068Symfony\u304c\u307b\u3068\u3093\u3069\u306e\u8a55\u4fa1\u8ef8\u3067\u9ad8\u3044\u8a55\u4fa1\u3092\u5f97\u3066\u304a\u308a\u3001\u6c4e\u7528\u6027\u306e\u9ad8\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u591a\u304f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u4e00\u65b9\u3001\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3082\u7279\u5b9a\u306e\u72b6\u6cc1\u3067\u306f\u512a\u308c\u305f\u9078\u629e\u80a2\u3068\u306a\u308a\u3048\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4f8b\u3048\u3070\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9ad8\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u6700\u91cd\u8981\u306e\u5834\u5408<\/strong>: CodeIgniter\u3001Yii\u3001Slim<\/li>\n\n\n\n<li><strong>\u5b66\u7fd2\u30b3\u30b9\u30c8\u3092\u6700\u5c0f\u5316\u3057\u305f\u3044\u5834\u5408<\/strong>: CodeIgniter\u3001Slim<\/li>\n\n\n\n<li><strong>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u5411\u3051\u306e\u5805\u7262\u6027\u304c\u5fc5\u8981\u306a\u5834\u5408<\/strong>: Symfony\u3001Laminas<\/li>\n\n\n\n<li><strong>\u65e5\u672c\u56fd\u5185\u3067\u306e\u63a1\u7528\u5b9f\u7e3e\u3092\u91cd\u8996\u3059\u308b\u5834\u5408<\/strong>: Laravel\u3001CakePHP<\/li>\n<\/ul>\n\n\n\n<p>\u6700\u7d42\u7684\u306b\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5177\u4f53\u7684\u306a\u8981\u4ef6\u3001\u30c1\u30fc\u30e0\u306e\u30b9\u30ad\u30eb\u30bb\u30c3\u30c8\u3001\u958b\u767a\u671f\u9593\u3001\u4e88\u7b97\u306a\u3069\u3092\u7dcf\u5408\u7684\u306b\u8003\u616e\u3057\u3066\u3001\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u5b9a\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u6b21\u7ae0\u3067\u306f\u3001\u3055\u3089\u306b\u5177\u4f53\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u5225\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-147\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5225\uff01\u6700\u9069\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u306e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3<\/h2>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306b\u304a\u3044\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6027\u8cea\u3084\u8981\u4ef6\u306b\u5408\u308f\u305b\u305f\u9078\u629e\u304c\u6210\u529f\u306e\u9375\u3068\u306a\u308a\u307e\u3059\u3002\u300c\u6700\u9ad8\u306e\u300d\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3044\u3046\u3082\u306e\u306f\u5b58\u5728\u305b\u305a\u3001\u305d\u308c\u305e\u308c\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u300c\u6700\u9069\u306a\u300d\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u5b58\u5728\u3059\u308b\u306e\u3067\u3059\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001\u4ee3\u8868\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u5225\u306b\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u8003\u3048\u65b9\u3068\u5b9f\u8df5\u7684\u306a\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-148\">\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u5411\u3051\uff1a\u8fc5\u901f\u306a\u958b\u767a\u3068\u5e02\u5834\u6295\u5165\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/h3>\n\n\n\n<p>\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306b\u3068\u3063\u3066\u3001\u30a2\u30a4\u30c7\u30a2\u3092\u7d20\u65e9\u304f\u5f62\u306b\u3057\u3001\u5e02\u5834\u306b\u6295\u5165\u3059\u308b\u3053\u3068\u306f\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002MVP\u306e\u958b\u767a\u30b9\u30d4\u30fc\u30c9\u3001\u5909\u66f4\u3078\u306e\u67d4\u8edf\u306a\u5bfe\u5fdc\u3001\u5c11\u4eba\u6570\u30c1\u30fc\u30e0\u3067\u306e\u52b9\u7387\u7684\u306a\u958b\u767a\u306a\u3069\u304c\u91cd\u8996\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-149\">\u4e3b\u306a\u8981\u4ef6<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u901f\u5ea6\u306e\u901f\u3055<\/strong>: \u30a2\u30a4\u30c7\u30a2\u304b\u3089\u5b9f\u88c5\u3001\u30ea\u30ea\u30fc\u30b9\u307e\u3067\u306e\u6642\u9593\u3092\u77ed\u7e2e\u3067\u304d\u308b\u3053\u3068<\/li>\n\n\n\n<li><strong>\u5b66\u7fd2\u30b3\u30b9\u30c8\u306e\u4f4e\u3055<\/strong>: \u65b0\u3057\u3044\u30c1\u30fc\u30e0\u30e1\u30f3\u30d0\u30fc\u304c\u3059\u3050\u306b\u751f\u7523\u6027\u3092\u767a\u63ee\u3067\u304d\u308b\u3053\u3068<\/li>\n\n\n\n<li><strong>\u62e1\u5f35\u6027\u3068\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u3057\u3084\u3059\u3055<\/strong>: \u30e6\u30fc\u30b6\u30fc\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u306b\u57fa\u3065\u3044\u3066\u8fc5\u901f\u306b\u6a5f\u80fd\u8ffd\u52a0\u304c\u3067\u304d\u308b\u3053\u3068<\/li>\n\n\n\n<li><strong>\u5145\u5b9f\u3057\u305f\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0<\/strong>: \u8eca\u8f2a\u306e\u518d\u767a\u660e\u3092\u907f\u3051\u3001\u65e2\u5b58\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3084\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u6d3b\u7528\u3067\u304d\u308b\u3053\u3068<\/li>\n\n\n\n<li><strong>\u5e02\u5834\u306e\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u306b\u57fa\u3065\u304f\u8fc5\u901f\u306a\u5909\u66f4\u5bfe\u5fdc<\/strong>: \u67d4\u8edf\u306a\u30b3\u30fc\u30c9\u69cb\u9020\u3068\u958b\u767a\u30b5\u30a4\u30af\u30eb\u306e\u77ed\u7e2e<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-150\">\u63a8\u5968\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<p><strong>1. Laravel<\/strong><\/p>\n\n\n\n<p>Laravel \u306f\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306b\u6700\u9069\u306a\u9078\u629e\u80a2\u306e\u4e00\u3064\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u7406\u7531\u304b\u3089\u3001\u8fc5\u901f\u306a\u958b\u767a\u3068\u5e02\u5834\u6295\u5165\u3092\u91cd\u8996\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u958b\u767a\u901f\u5ea6\u3092\u52a0\u901f\u3059\u308b\u30d8\u30eb\u30d1\u30fc\u95a2\u6570\u3068\u30c4\u30fc\u30eb\u306e\u8c4a\u5bcc\u3055<\/li>\n\n\n\n<li>\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9<\/li>\n\n\n\n<li>\u30d6\u30ec\u30fc\u30c9\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3068Eloquent ORM\u306b\u3088\u308b\u751f\u7523\u6027\u306e\u9ad8\u3055<\/li>\n\n\n\n<li>Laravel\u30d1\u30c3\u30b1\u30fc\u30b8\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308b\u6a5f\u80fd\u62e1\u5f35\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li>MVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u660e\u78ba\u3055\u306b\u3088\u308b\u30c1\u30fc\u30e0\u958b\u767a\u306e\u52b9\u7387\u5316<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u591a\u69d8\u306a\u6a5f\u80fd\u304c\u5fc5\u8981\u306a\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306eWeb\u30b5\u30fc\u30d3\u30b9\u3084SaaS\u30d7\u30ed\u30c0\u30af\u30c8<\/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\u3067\u306e\u8fc5\u901f\u306a\u6a5f\u80fd\u958b\u767a\u4f8b\n\/\/ \u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u306e\u5b9f\u88c5\uff08\u6570\u5206\u3067\u5b8c\u4e86\uff09\nphp artisan make:auth\n\n\/\/ API\u30ea\u30bd\u30fc\u30b9\u306e\u4f5c\u6210\uff08\u6570\u5206\u3067\u5b8c\u4e86\uff09\nphp artisan make:model Product -mcr\nphp artisan make:resource ProductResource\n\n\/\/ Route::apiResource() \u3067\u4e00\u62ecRESTful API\u4f5c\u6210\nRoute::apiResource('products', ProductController::class);\n<\/pre>\n\n\n\n<p><strong>2. CodeIgniter<\/strong><\/p>\n\n\n\n<p>\u5c0f\u898f\u6a21\u306aMVP\u3084\u6a5f\u80fd\u304c\u9650\u5b9a\u3055\u308c\u305f\u30b5\u30fc\u30d3\u30b9\u3067\u306f\u3001CodeIgniter\u3082\u512a\u308c\u305f\u9078\u629e\u80a2\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u3044<\/li>\n\n\n\n<li>\u6700\u5c0f\u9650\u306e\u8a2d\u5b9a\u3067\u8fc5\u901f\u306b\u958b\u767a\u958b\u59cb\u53ef\u80fd<\/li>\n\n\n\n<li>\u8efd\u91cf\u3067\u9ad8\u901f\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/li>\n\n\n\n<li>\u5c0f\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u305f\u30b7\u30f3\u30d7\u30eb\u306a\u69cb\u9020<\/li>\n\n\n\n<li>\u521d\u671f\u6bb5\u968e\u3067\u904e\u5270\u306a\u6a5f\u80fd\u306b\u60a9\u307e\u3055\u308c\u306a\u3044<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u30b7\u30f3\u30d7\u30eb\u306aMVP\u3084\u5c0f\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\u306e\u8fc5\u901f\u306a\u958b\u767a<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-151\">\u4e8b\u4f8b\uff1aFinTech\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306eMVP\u958b\u767a<\/h4>\n\n\n\n<p>A\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u306f\u3001\u500b\u4eba\u5411\u3051\u8cc7\u7523\u7ba1\u7406\u30c4\u30fc\u30eb\u306eMVP\u30923\u30f6\u6708\u4ee5\u5185\u306b\u958b\u767a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u30024\u4eba\u306e\u958b\u767a\u30c1\u30fc\u30e0\u306fLaravel\u3092\u9078\u629e\u3057\u3001\u4ee5\u4e0b\u306e\u7406\u7531\u3067\u958b\u767a\u3092\u6210\u529f\u3055\u305b\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u3084API\u306a\u3069\u306e\u57fa\u672c\u6a5f\u80fd\u3092\u77ed\u671f\u9593\u3067\u5b9f\u88c5<\/li>\n\n\n\n<li>NuxtJS\u3068\u306e\u7d44\u307f\u5408\u308f\u305b\u3067\u52b9\u7387\u7684\u306aSPA\u958b\u767a<\/li>\n\n\n\n<li>\u30d1\u30c3\u30b1\u30fc\u30b8\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3092\u6d3b\u7528\u3057\u305f\u7d20\u65e9\u3044\u6a5f\u80fd\u8ffd\u52a0<\/li>\n\n\n\n<li>\u6295\u8cc7\u5bb6\u3078\u306e\u30c7\u30e2\u3068\u5e02\u5834\u30c6\u30b9\u30c8\u3092\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u901a\u308a\u306b\u5b9f\u65bd<\/li>\n<\/ol>\n\n\n\n<p>\u7d50\u679c\u3068\u3057\u3066\u3001\u6700\u521d\u306e\u30d9\u30fc\u30bf\u7248\u306f10\u9031\u9593\u3067\u5b8c\u6210\u3057\u3001\u305d\u306e\u5f8c\u306e\u6a5f\u80fd\u62e1\u5f35\u3082\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u884c\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-152\">\u691c\u8a0e\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c06\u6765\u7684\u306a\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u53ef\u80fd\u6027\u3082\u8003\u616e\u3059\u308b<\/li>\n\n\n\n<li>\u904e\u5ea6\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3055\u308c\u305f\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u306f\u907f\u3051\u3001\u6a19\u6e96\u7684\u306a\u5b9f\u88c5\u3092\u512a\u5148\u3059\u308b<\/li>\n\n\n\n<li>\u5b9f\u7e3e\u306e\u3042\u308b\u30d1\u30c3\u30b1\u30fc\u30b8\u3084\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u6d3b\u7528\u3057\u3001\u8eca\u8f2a\u306e\u518d\u767a\u660e\u3092\u907f\u3051\u308b<\/li>\n\n\n\n<li>\u958b\u767a\u901f\u5ea6\u3068\u30c6\u30b9\u30c8\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u53d6\u308b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-153\">\u5927\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\u5411\u3051\uff1a\u5b89\u5b9a\u6027\u3068\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\u3067\u306f\u3001\u9ad8\u3044\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u8ca0\u8377\u306b\u8010\u3048\u3089\u308c\u308b\u5b89\u5b9a\u6027\u3001\u6c34\u5e73\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u306e\u5bb9\u6613\u3055\u3001\u9577\u671f\u7684\u306a\u4fdd\u5b88\u6027\u3068\u62e1\u5f35\u6027\u304c\u91cd\u8981\u306a\u8981\u7d20\u3068\u306a\u308a\u307e\u3059\u3002\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u5805\u7262\u6027\u3082\u5fc5\u9808\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-154\">\u4e3b\u306a\u8981\u4ef6<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9ad8\u3044\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong>: \u5897\u5927\u3059\u308b\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306b\u5bfe\u5fdc\u3059\u308b\u80fd\u529b<\/li>\n\n\n\n<li><strong>\u5805\u7262\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u8a2d\u8a08<\/strong>: \u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u6574\u7406\u3055\u308c\u305f\u5f62\u3067\u5b9f\u88c5<\/li>\n\n\n\n<li><strong>\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/strong>: \u5927\u898f\u6a21\u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf\u3092\u4fdd\u8b77\u3059\u308b\u4ed5\u7d44\u307f<\/li>\n\n\n\n<li><strong>\u9577\u671f\u30b5\u30dd\u30fc\u30c8\u3068\u5b89\u5b9a\u6027<\/strong>: \u9577\u671f\u306b\u308f\u305f\u308b\u4fdd\u5b88\u3068\u66f4\u65b0\u306e\u3057\u3084\u3059\u3055<\/li>\n\n\n\n<li><strong>\u5927\u898f\u6a21\u30c1\u30fc\u30e0\u958b\u767a\u306b\u9069\u3057\u305f\u69cb\u9020<\/strong>: \u8907\u6570\u30c1\u30fc\u30e0\u306b\u3088\u308b\u4e26\u884c\u958b\u767a\u3092\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-155\">\u63a8\u5968\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<p><strong>1. Symfony<\/strong><\/p>\n\n\n\n<p>Symfony\u306f\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u5927\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\u306b\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b0\u30ec\u30fc\u30c9\u306e\u5805\u7262\u6027\u3068\u5b89\u5b9a\u6027<\/li>\n\n\n\n<li>\u660e\u78ba\u306aLTS\uff08\u9577\u671f\u30b5\u30dd\u30fc\u30c8\uff09\u30dd\u30ea\u30b7\u30fc<\/li>\n\n\n\n<li>\u9ad8\u5ea6\u306b\u30e2\u30b8\u30e5\u30fc\u30eb\u5316\u3055\u308c\u305f\u8a2d\u8a08\u306b\u3088\u308b\u67d4\u8edf\u6027<\/li>\n\n\n\n<li>\u512a\u308c\u305f\u4f9d\u5b58\u6027\u6ce8\u5165\u3068\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca<\/li>\n\n\n\n<li>\u5927\u898f\u6a21\u30c1\u30fc\u30e0\u5411\u3051\u306e\u4e00\u8cab\u3057\u305f\u958b\u767a\u6a19\u6e96<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u6570\u767e\u4e07\u30e6\u30fc\u30b6\u30fc\u3092\u62b1\u3048\u308b\u5927\u898f\u6a21Web\u30b5\u30fc\u30d3\u30b9\u3084\u4f01\u696d\u306e\u57fa\u5e79\u30b7\u30b9\u30c6\u30e0<\/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=\"\">\/\/ Symfony\u306e\u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca\u3068\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u99c6\u52d5\u8a2d\u8a08\u306e\u4f8b\n\/\/ services.yaml\nservices:\n    App\\Service\\PaymentProcessor\\PaymentProcessorInterface:\n        class: App\\Service\\PaymentProcessor\\StripePaymentProcessor\n        arguments:\n            $apiKey: '%env(STRIPE_API_KEY)%'\n            $logger: '@monolog.logger.payment'\n\n\/\/ \u4f9d\u5b58\u6027\u6ce8\u5165\u3092\u6d3b\u7528\u3057\u305f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\nnamespace App\\Controller;\n\nuse App\\Service\\PaymentProcessor\\PaymentProcessorInterface;\n\nclass CheckoutController extends AbstractController\n{\n    private $paymentProcessor;\n    \n    public function __construct(PaymentProcessorInterface $paymentProcessor)\n    {\n        $this-&gt;paymentProcessor = $paymentProcessor;\n    }\n    \n    public function checkout()\n    {\n        \/\/ \u652f\u6255\u3044\u51e6\u7406\u3092\u5b9f\u884c\uff08\u5b9f\u88c5\u306e\u8a73\u7d30\u3092\u77e5\u308b\u5fc5\u8981\u306a\u3057\uff09\n        $result = $this-&gt;paymentProcessor-&gt;process($order);\n        \/\/ ...\n    }\n}\n<\/pre>\n\n\n\n<p><strong>2. Laravel (with Octane)<\/strong><\/p>\n\n\n\n<p>Laravel Octane\u306fLaravel\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5927\u5e45\u306b\u5411\u4e0a\u3055\u305b\u3001\u5927\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\u306b\u3082\u5bfe\u5fdc\u53ef\u80fd\u306b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Octane\u306b\u3088\u308b\u5927\u5e45\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a<\/li>\n\n\n\n<li>Horizont\u3092\u7528\u3044\u305f\u9ad8\u5ea6\u306a\u30ad\u30e5\u30fc\u51e6\u7406<\/li>\n\n\n\n<li>\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u5145\u5b9f\u3068\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u30c6\u30ca\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308b\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u30e2\u30c0\u30f3\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u7d99\u7d9a\u7684\u306a\u9032\u5316<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u306eWeb\u30b5\u30fc\u30d3\u30b9\u3084\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30baSaaS<\/p>\n\n\n\n<p><strong>3. Laminas<\/strong><\/p>\n\n\n\n<p>\u7279\u306b\u53b3\u683c\u306a\u8981\u4ef6\u3092\u6301\u3064\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001Laminas\u3082\u5f37\u529b\u306a\u9078\u629e\u80a2\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u74b0\u5883\u3067\u30c6\u30b9\u30c8\u6e08\u307f\u306e\u5b89\u5b9a\u6027<\/li>\n\n\n\n<li>\u5805\u7262\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u8a2d\u8a08<\/li>\n\n\n\n<li>\u512a\u308c\u305f\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/li>\n\n\n\n<li>\u9577\u671f\u7684\u306a\u5f8c\u65b9\u4e92\u63db\u6027\u3078\u306e\u914d\u616e<\/li>\n\n\n\n<li>\u5927\u898f\u6a21\u30b7\u30b9\u30c6\u30e0\u5411\u3051\u306e\u8a2d\u8a08\u601d\u60f3<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u53b3\u683c\u306a\u8981\u4ef6\u3092\u6301\u3064\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-156\">\u4e8b\u4f8b\uff1a\u5927\u624bEC\u30b5\u30a4\u30c8\u306e\u30ea\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/h4>\n\n\n\n<p>\u6708\u95931000\u4e07PV\u3092\u8d85\u3048\u308b\u5927\u624bEC\u30b5\u30a4\u30c8\u306f\u3001\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u304b\u3089\u306e\u79fb\u884c\u3092\u8a08\u753b\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u6b21\u306e\u7406\u7531\u304b\u3089Symfony\u3092\u9078\u629e\u3057\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5c06\u6765\u7684\u306a\u62e1\u5f35\u3092\u898b\u636e\u3048\u305f\u30e2\u30b8\u30e5\u30fc\u30eb\u5f0f\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n\n\n\n<li>100\u4eba\u4ee5\u4e0a\u306e\u958b\u767a\u8005\u304c\u95a2\u308f\u308b\u5927\u898f\u6a21\u958b\u767a\u3067\u306e\u4e00\u8cab\u6027\u78ba\u4fdd<\/li>\n\n\n\n<li>\u8907\u6570\u306e\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3068\u9023\u643a\u3059\u308bAPI\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9<\/li>\n\n\n\n<li>\u9ad8\u5ea6\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u3068\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565<\/li>\n<\/ol>\n\n\n\n<p>\u7d50\u679c\u3068\u3057\u3066\u3001\u5b89\u5b9a\u3057\u305f\u30b7\u30b9\u30c6\u30e0\u3092\u4e88\u5b9a\u901a\u308a\u306b\u30ea\u30ea\u30fc\u30b9\u3057\u3001\u4ee5\u524d\u306e2\u500d\u306e\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u51e6\u7406\u80fd\u529b\u3092\u5b9f\u73fe\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-157\">\u691c\u8a0e\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u306e\u65e9\u671f\u7279\u5b9a\u3068\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u6c34\u5e73\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3092\u524d\u63d0\u3068\u3057\u305f\u30b9\u30c6\u30fc\u30c8\u30ec\u30b9\u8a2d\u8a08<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u614e\u91cd\u306a\u8a08\u753b<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u30c7\u30d7\u30ed\u30a4\u3068\u8ca0\u8377\u30c6\u30b9\u30c8\u306e\u91cd\u8981\u6027<\/li>\n\n\n\n<li>\u5c06\u6765\u306e\u6210\u9577\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u67d4\u8edf\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-158\">EC\u30b5\u30a4\u30c8\u69cb\u7bc9\uff1a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u62e1\u5f35\u6027\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/h3>\n\n\n\n<p>EC\u30b5\u30a4\u30c8\u3067\u306f\u3001\u30bb\u30ad\u30e5\u30a2\u306a\u6c7a\u6e08\u51e6\u7406\u3001\u9867\u5ba2\u30c7\u30fc\u30bf\u306e\u4fdd\u8b77\u3001\u67d4\u8edf\u306a\u5546\u54c1\u7ba1\u7406\u3001\u69d8\u3005\u306a\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\uff08\u6c7a\u6e08\u3001\u914d\u9001\u3001\u5728\u5eab\u306a\u3069\uff09\u3068\u306e\u9023\u643a\u304c\u91cd\u8981\u3067\u3059\u3002\u307e\u305f\u3001\u30bb\u30fc\u30eb\u6642\u306e\u6025\u6fc0\u306a\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u5897\u52a0\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u308b\u62e1\u5f35\u6027\u3082\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-159\">\u4e3b\u306a\u8981\u4ef6<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5805\u7262\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/strong>: \u6c7a\u6e08\u60c5\u5831\u3084\u500b\u4eba\u60c5\u5831\u3092\u4fdd\u8b77\u3059\u308b\u305f\u3081\u306e\u6a5f\u80fd<\/li>\n\n\n\n<li><strong>\u6c7a\u6e08\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u9023\u643a<\/strong>: \u591a\u69d8\u306a\u6c7a\u6e08\u65b9\u6cd5\u306b\u5bfe\u5fdc\u3059\u308b\u62e1\u5f35\u6027<\/li>\n\n\n\n<li><strong>\u8907\u96d1\u306a\u5546\u54c1\u69cb\u9020\u3068\u4fa1\u683c\u30ed\u30b8\u30c3\u30af\u306e\u7ba1\u7406<\/strong>: \u591a\u69d8\u306a\u5546\u54c1\u30bf\u30a4\u30d7\u3084\u4fa1\u683c\u30eb\u30fc\u30eb<\/li>\n\n\n\n<li><strong>\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u8ca0\u8377\u8010\u6027<\/strong>: \u30bb\u30fc\u30eb\u6642\u306e\u6025\u6fc0\u306a\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u5897\u52a0\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li><strong>\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a<\/strong>: \u5728\u5eab\u3001\u914d\u9001\u3001\u30de\u30fc\u30b1\u30c6\u30a3\u30f3\u30b0\u30c4\u30fc\u30eb\u3068\u306e\u7d71\u5408<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-160\">\u63a8\u5968\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<p><strong>1. Symfony<\/strong><\/p>\n\n\n\n<p>Symfony\u306f\u8907\u96d1\u306aEC\u30b7\u30b9\u30c6\u30e0\u306b\u7406\u60f3\u7684\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5805\u7262\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/li>\n\n\n\n<li>\u9ad8\u5ea6\u306a\u6a29\u9650\u7ba1\u7406\u3068\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>Doctrine ORM\u306b\u3088\u308b\u8907\u96d1\u306a\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\u306e\u7ba1\u7406<\/li>\n\n\n\n<li>\u512a\u308c\u305f\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3068\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>API Platform \u306b\u3088\u308b\u5f37\u529b\u306aAPI\u69cb\u7bc9<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u5927\u898f\u6a21\u306aB2C\/B2B\u30b3\u30de\u30fc\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/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=\"\">\/\/ Symfony\u3067\u306e\u8907\u96d1\u306a\u4fa1\u683c\u8a08\u7b97\u30ed\u30b8\u30c3\u30af\u306e\u4f8b\nnamespace App\\Service\\PriceCalculator;\n\nclass ProductPriceCalculator\n{\n    private $discountService;\n    private $taxService;\n    \n    \/\/ \u4f9d\u5b58\u6027\u6ce8\u5165\n    public function __construct(\n        DiscountServiceInterface $discountService,\n        TaxServiceInterface $taxService\n    ) {\n        $this-&gt;discountService = $discountService;\n        $this-&gt;taxService = $taxService;\n    }\n    \n    public function calculatePrice(Product $product, Customer $customer = null): PriceDTO\n    {\n        $basePrice = $product-&gt;getBasePrice();\n        \n        \/\/ \u9867\u5ba2\u30b0\u30eb\u30fc\u30d7\u306b\u57fa\u3065\u304f\u5272\u5f15\n        $discount = 0;\n        if ($customer) {\n            $discount = $this-&gt;discountService-&gt;calculateDiscount($product, $customer);\n        }\n        \n        $priceBeforeTax = $basePrice - $discount;\n        \n        \/\/ \u7a0e\u91d1\u8a08\u7b97\uff08\u5730\u57df\u3084\u5546\u54c1\u30ab\u30c6\u30b4\u30ea\u306b\u3088\u3063\u3066\u7570\u306a\u308b\uff09\n        $tax = $this-&gt;taxService-&gt;calculateTax($product, $priceBeforeTax, $customer);\n        \n        $finalPrice = $priceBeforeTax + $tax;\n        \n        return new PriceDTO($basePrice, $discount, $tax, $finalPrice);\n    }\n}\n<\/pre>\n\n\n\n<p><strong>2. Laravel<\/strong><\/p>\n\n\n\n<p>Laravel\u3082\u4e2d\u898f\u6a21EC\u30b5\u30a4\u30c8\u306b\u306f\u512a\u308c\u305f\u9078\u629e\u80a2\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5305\u62ec\u7684\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd<\/li>\n\n\n\n<li>Cashier\u30d1\u30c3\u30b1\u30fc\u30b8\u306b\u3088\u308b\u6c7a\u6e08\u7d71\u5408\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li>\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3068\u306e\u9023\u643a\u304c\u5bb9\u6613\u306aAPI\u30af\u30e9\u30a4\u30a2\u30f3\u30c8<\/li>\n\n\n\n<li>\u30ad\u30e5\u30fc\u51e6\u7406\u306b\u3088\u308b\u975e\u540c\u671f\u51e6\u7406\u306e\u52b9\u7387\u5316<\/li>\n\n\n\n<li>\u5145\u5b9f\u3057\u305f\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308b\u6a5f\u80fd\u62e1\u5f35<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u4e2d\u898f\u6a21\u306eEC\u30b5\u30a4\u30c8\u3084\u30ab\u30b9\u30bf\u30e0EC\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-161\">\u4e8b\u4f8b\uff1aB2B\u5378\u58f2EC\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u69cb\u7bc9<\/h4>\n\n\n\n<p>\u5927\u624b\u88fd\u9020\u696d\u5411\u3051B2B\u5378\u58f2EC\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u958b\u767a\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u7406\u7531\u304b\u3089Symfony\u304c\u9078\u3070\u308c\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8907\u96d1\u306a\u4fa1\u683c\u30eb\u30fc\u30eb\uff08\u9867\u5ba2\u30b0\u30eb\u30fc\u30d7\u5225\u3001\u6570\u91cf\u5225\u3001\u5951\u7d04\u5225\uff09\u306e\u7ba1\u7406<\/li>\n\n\n\n<li>\u8907\u6570\u306e\u6c7a\u6e08\u30b7\u30b9\u30c6\u30e0\u3068\u5728\u5eab\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u53b3\u683c\u306a\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u5927\u91cf\u306eSKU\u3068\u30ab\u30bf\u30ed\u30b0\u30c7\u30fc\u30bf\u306e\u52b9\u7387\u7684\u306a\u51e6\u7406<\/li>\n<\/ol>\n\n\n\n<p>\u7d50\u679c\u3068\u3057\u3066\u300130\u4e07\u4ee5\u4e0a\u306eSKU\u3092\u6301\u3064\u5b89\u5168\u3067\u9ad8\u901f\u306aEC\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u304c\u69cb\u7bc9\u3055\u308c\u3001\u6ce8\u6587\u51e6\u7406\u6642\u9593\u304c50%\u77ed\u7e2e\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-162\">\u691c\u8a0e\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PCI DSS\u306a\u3069\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u6c7a\u6e08\u30b2\u30fc\u30c8\u30a6\u30a7\u30a4\u3068\u306e\u5b89\u5168\u306a\u9023\u643a<\/li>\n\n\n\n<li>\u8ca0\u8377\u5909\u52d5\u306b\u5bfe\u5fdc\u3059\u308b\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n\n\n\n<li>\u67d4\u8edf\u306a\u5546\u54c1\u30c7\u30fc\u30bf\u30e2\u30c7\u30eb\u306e\u8a2d\u8a08<\/li>\n\n\n\n<li>\u691c\u7d22\u6a5f\u80fd\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-163\">API\u958b\u767a\uff1a\u8efd\u91cf\u3055\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/h3>\n\n\n\n<p>API\u30b5\u30fc\u30d3\u30b9\u306e\u958b\u767a\u3067\u306f\u3001\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3001\u4f4e\u30ec\u30a4\u30c6\u30f3\u30b7\u3001\u30ea\u30bd\u30fc\u30b9\u52b9\u7387\u3001\u305d\u3057\u3066\u660e\u78ba\u306a\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u7ba1\u7406\u304c\u91cd\u8981\u3067\u3059\u3002\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3084\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066\u3082\u3001\u8efd\u91cf\u3067\u9ad8\u901f\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u6c42\u3081\u3089\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-164\">\u4e3b\u306a\u8981\u4ef6<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u9ad8\u901f\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u3068\u30ec\u30b9\u30dd\u30f3\u30b9\u30bf\u30a4\u30e0<\/strong>: API\u306e\u5fdc\u7b54\u6027\u80fd<\/li>\n\n\n\n<li><strong>\u8efd\u91cf\u306a\u30d5\u30c3\u30c8\u30d7\u30ea\u30f3\u30c8\u3068\u30ea\u30bd\u30fc\u30b9\u52b9\u7387<\/strong>: \u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u306e\u52b9\u7387\u7684\u306a\u5229\u7528<\/li>\n\n\n\n<li><strong>RESTful API\u3084GraphQL\u306e\u30b5\u30dd\u30fc\u30c8<\/strong>: \u591a\u69d8\u306aAPI\u5f62\u5f0f\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li><strong>\u5805\u7262\u306a\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30e1\u30ab\u30cb\u30ba\u30e0<\/strong>: API\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u306e\u4ed5\u7d44\u307f<\/li>\n\n\n\n<li><strong>\u660e\u78ba\u306aAPI\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u751f\u6210<\/strong>: \u4f7f\u3044\u3084\u3059\u3044API\u4ed5\u69d8\u306e\u63d0\u4f9b<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-165\">\u63a8\u5968\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<p><strong>1. Slim<\/strong><\/p>\n\n\n\n<p>Slim\u306f\u30b7\u30f3\u30d7\u30eb\u3067\u9ad8\u6027\u80fd\u306aAPI\u3092\u69cb\u7bc9\u3059\u308b\u306e\u306b\u6700\u9069\u306a\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u975e\u5e38\u306b\u8efd\u91cf\u3067\u9ad8\u901f\u306a\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/li>\n\n\n\n<li>PSR-7\/PSR-15\u6e96\u62e0\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>API\u306b\u5fc5\u8981\u306a\u6a5f\u80fd\u306b\u7d5e\u3063\u305f\u30b7\u30f3\u30d7\u30eb\u3055<\/li>\n\n\n\n<li>\u67d4\u8edf\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/li>\n\n\n\n<li>\u4f4e\u3044\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9\u3068\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3001\u30b7\u30f3\u30d7\u30eb\u306aRESTful API\u3001\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/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=\"\">\/\/ Slim 4 \u3067\u306e\u57fa\u672c\u7684\u306aAPI\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u5b9f\u88c5\u4f8b\n&lt;?php\nuse Psr\\Http\\Message\\ResponseInterface as Response;\nuse Psr\\Http\\Message\\ServerRequestInterface as Request;\nuse Slim\\Factory\\AppFactory;\n\nrequire __DIR__ . '\/..\/vendor\/autoload.php';\n\n$app = AppFactory::create();\n\n\/\/ \u30df\u30c9\u30eb\u30a6\u30a7\u30a2: JSON\u306e\u30d1\u30fc\u30b9\n$app-&gt;addBodyParsingMiddleware();\n\n\/\/ API\u306e\u8a8d\u8a3c\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\n$app-&gt;add(function (Request $request, $handler) {\n    $apiKey = $request-&gt;getHeaderLine('X-API-Key');\n    if (!validateApiKey($apiKey)) {\n        $response = new \\Slim\\Psr7\\Response();\n        return $response\n            -&gt;withHeader('Content-Type', 'application\/json')\n            -&gt;withStatus(401)\n            -&gt;withBody(\n                \\Slim\\Psr7\\Stream::fromString(\n                    json_encode(['error' =&gt; 'Unauthorized'])\n                )\n            );\n    }\n    return $handler-&gt;handle($request);\n});\n\n\/\/ GET\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\n$app-&gt;get('\/api\/products', function (Request $request, Response $response) {\n    $params = $request-&gt;getQueryParams();\n    $page = isset($params['page']) ? (int)$params['page'] : 1;\n    $limit = isset($params['limit']) ? (int)$params['limit'] : 20;\n    \n    \/\/ \u88fd\u54c1\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\uff08\u5b9f\u969b\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\uff09\n    $products = getProducts($page, $limit);\n    \n    $response-&gt;getBody()-&gt;write(json_encode($products));\n    return $response\n        -&gt;withHeader('Content-Type', 'application\/json')\n        -&gt;withStatus(200);\n});\n\n\/\/ POST\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\n$app-&gt;post('\/api\/products', function (Request $request, Response $response) {\n    $data = $request-&gt;getParsedBody();\n    \n    \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\n    if (!isset($data['name']) || !isset($data['price'])) {\n        $response-&gt;getBody()-&gt;write(json_encode(['error' =&gt; 'Missing required fields']));\n        return $response\n            -&gt;withHeader('Content-Type', 'application\/json')\n            -&gt;withStatus(400);\n    }\n    \n    \/\/ \u88fd\u54c1\u306e\u4f5c\u6210\uff08\u5b9f\u969b\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u4fdd\u5b58\uff09\n    $productId = createProduct($data);\n    \n    $response-&gt;getBody()-&gt;write(json_encode(['id' =&gt; $productId]));\n    return $response\n        -&gt;withHeader('Content-Type', 'application\/json')\n        -&gt;withStatus(201);\n});\n\n$app-&gt;run();\n<\/pre>\n\n\n\n<p><strong>2. Symfony (API Platform)<\/strong><\/p>\n\n\n\n<p>API Platform\u3092\u5229\u7528\u3057\u305fSymfony\u306f\u3001\u8907\u96d1\u306aAPI\u30cb\u30fc\u30ba\u306b\u5bfe\u5fdc\u53ef\u80fd\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API Platform\u306e\u5f37\u529b\u306aRESTful\/GraphQL\u6a5f\u80fd<\/li>\n\n\n\n<li>\u81ea\u52d5\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u751f\u6210\uff08Swagger\/OpenAPI\uff09<\/li>\n\n\n\n<li>\u9ad8\u5ea6\u306a\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u5805\u7262\u306a\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3068\u4f8b\u5916\u51e6\u7406<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u6301\u3064API\u3001GraphQL\u30b5\u30fc\u30d3\u30b9<\/p>\n\n\n\n<p><strong>3. Laravel (Lumen)<\/strong><\/p>\n\n\n\n<p>Laravel\u306e\u7d4c\u9a13\u304c\u3042\u308b\u958b\u767a\u8005\u306b\u3068\u3063\u3066\u306f\u3001Lumen\u3082\u512a\u308c\u305f\u9078\u629e\u80a2\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Laravel\u306e\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u3057\u3066\u306eLumen<\/li>\n\n\n\n<li>Laravel\u3068\u4e92\u63db\u6027\u3092\u6301\u3061\u306a\u304c\u3089\u8efd\u91cf\u5316<\/li>\n\n\n\n<li>Eloquent\u3068Facades\u306b\u3088\u308b\u751f\u7523\u6027<\/li>\n\n\n\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u8a8d\u8a3c\u3068\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/li>\n\n\n\n<li>\u5fc5\u8981\u306b\u5fdc\u3058\u3066Laravel\u306b\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: Laravel\u958b\u767a\u8005\u306b\u3088\u308b\u4e2d\u898f\u6a21API\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-166\">\u4e8b\u4f8b\uff1aIoT\u30c7\u30d0\u30a4\u30b9\u5411\u3051API\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u69cb\u7bc9<\/h4>\n\n\n\n<p>\u6570\u4e07\u53f0\u306eIoT\u30c7\u30d0\u30a4\u30b9\u304b\u3089\u306e\u30c7\u30fc\u30bf\u3092\u53ce\u96c6\u30fb\u51e6\u7406\u3059\u308bAPI\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u958b\u767a\u3067\u306f\u3001Slim Framework\u304c\u63a1\u7528\u3055\u308c\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u79d2\u9593\u6570\u5343\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3059\u308b\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8981\u4ef6<\/li>\n\n\n\n<li>JWT\u8a8d\u8a3c\u306b\u3088\u308b\u5b89\u5168\u306a\u30c7\u30d0\u30a4\u30b9\u901a\u4fe1\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u6700\u5c0f\u9650\u306e\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3068\u30ec\u30b9\u30dd\u30f3\u30b9\u30bf\u30a4\u30e0<\/li>\n\n\n\n<li>PHP\u30ef\u30fc\u30ab\u30fc\u306b\u3088\u308b\u9577\u6642\u9593\u63a5\u7d9a\u51e6\u7406<\/li>\n<\/ol>\n\n\n\n<p>\u7d50\u679c\u3068\u3057\u3066\u3001\u5358\u4e00\u30b5\u30fc\u30d0\u30fc\u30671\u79d2\u3042\u305f\u308a3,000\u4ee5\u4e0a\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u51e6\u7406\u3067\u304d\u308b\u8efd\u91cf\u306aAPI\u3092\u5b9f\u73fe\u3057\u3001\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u30b3\u30b9\u30c8\u309260%\u524a\u6e1b\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-167\">\u691c\u8a0e\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u6226\u7565\u306e\u4e8b\u524d\u8a08\u753b<\/li>\n\n\n\n<li>\u30ec\u30fc\u30c8\u5236\u9650\u3068\u8ca0\u8377\u7ba1\u7406\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u8a73\u7d30\u306aAPI\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u81ea\u52d5\u751f\u6210\u3068\u7dad\u6301<\/li>\n\n\n\n<li>\u8a8d\u8a3c\u65b9\u5f0f\uff08JWT\u3001OAuth\u7b49\uff09\u306e\u9069\u5207\u306a\u9078\u629e<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3068\u9069\u5207\u306aHTTP\u30b9\u30c6\u30fc\u30bf\u30b9\u30b3\u30fc\u30c9\u306e\u4f7f\u7528<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-168\">\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30d7\u30ec\u30a4\u30b9\uff1a\u4e92\u63db\u6027\u3092\u91cd\u8996\u3059\u308b\u306a\u3089<\/h3>\n\n\n\n<p>\u65e2\u5b58\u306e\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3092\u30ea\u30d7\u30ec\u30a4\u30b9\u3059\u308b\u5834\u5408\u3001\u65e2\u5b58\u30c7\u30fc\u30bf\u3084\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u79fb\u884c\u3001\u6bb5\u968e\u7684\u306a\u79fb\u884c\u8a08\u753b\u3001\u305d\u3057\u3066\u73fe\u5728\u306e\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u4e92\u63db\u6027\u78ba\u4fdd\u304c\u91cd\u8981\u306a\u8ab2\u984c\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-169\">\u4e3b\u306a\u8981\u4ef6<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u65e2\u5b58\u30c7\u30fc\u30bf\u3068\u306e\u4e92\u63db\u6027<\/strong>: \u30c7\u30fc\u30bf\u69cb\u9020\u306e\u5909\u63db\u3068\u6574\u5408\u6027\u306e\u7dad\u6301<\/li>\n\n\n\n<li><strong>\u6bb5\u968e\u7684\u306a\u79fb\u884c\u304c\u53ef\u80fd\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/strong>: \u4e00\u5ea6\u306b\u3059\u3079\u3066\u3092\u7f6e\u304d\u63db\u3048\u306a\u3044\u6226\u7565<\/li>\n\n\n\n<li><strong>\u65e2\u5b58\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u4e26\u884c\u904b\u7528<\/strong>: \u79fb\u884c\u671f\u9593\u4e2d\u306e\u5171\u5b58\u6226\u7565<\/li>\n\n\n\n<li><strong>\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u518d\u5b9f\u88c5\u306e\u3057\u3084\u3059\u3055<\/strong>: \u8907\u96d1\u306a\u30eb\u30fc\u30eb\u306e\u6b63\u78ba\u306a\u79fb\u884c<\/li>\n\n\n\n<li><strong>\u73fe\u4ee3\u7684\u306a\u6280\u8853\u3078\u306e\u79fb\u884c\u3068\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306e\u6574\u7406<\/strong>: \u6280\u8853\u7684\u8ca0\u50b5\u306e\u89e3\u6d88<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-170\">\u63a8\u5968\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h4>\n\n\n\n<p><strong>1. Symfony<\/strong><\/p>\n\n\n\n<p>Symfony\u306f\u5927\u898f\u6a21\u306a\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30d7\u30ec\u30a4\u30b9\u306b\u9069\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u3068\u5171\u5b58\u3067\u304d\u308b\u67d4\u8edf\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u304c\u53ef\u80fd\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u8a2d\u8a08<\/li>\n\n\n\n<li>\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u518d\u8a2d\u8a08\u306b\u9069\u3057\u305f\u69cb\u9020<\/li>\n\n\n\n<li>\u30e2\u30c0\u30f3\u306aPHP\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3078\u306e\u79fb\u884c\u3092\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u4e92\u63db\u6027\u3068\u30c6\u30b9\u30c8\u74b0\u5883<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u5927\u898f\u6a21\u306a\u4f01\u696d\u30b7\u30b9\u30c6\u30e0\u3084ERP\u3001CRM\u306a\u3069\u306e\u57fa\u5e79\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30d7\u30ec\u30a4\u30b9<\/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=\"\">\/\/ Symfony\u3067\u30ec\u30ac\u30b7\u30fc\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u9023\u643a\u3059\u308b\u4f8b\n\/\/ config\/packages\/doctrine.yaml\ndoctrine:\n    dbal:\n        default_connection: default\n        connections:\n            default:\n                url: '%env(resolve:DATABASE_URL)%'\n                # \u65b0\u3057\u3044\u30b7\u30b9\u30c6\u30e0\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\n            legacy:\n                url: '%env(resolve:LEGACY_DATABASE_URL)%'\n                # \u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\n                mapping_types:\n                    enum: string\n                    set: string\n                options:\n                    # \u30ec\u30ac\u30b7\u30fcDB\u306e\u7279\u6b8a\u306a\u8a2d\u5b9a\n\n\/\/ LegacyUserRepository.php\nnamespace App\\Repository;\n\nuse Doctrine\\DBAL\\Connection;\n\nclass LegacyUserRepository\n{\n    private $legacyConnection;\n    \n    public function __construct(Connection $legacyConnection)\n    {\n        $this-&gt;legacyConnection = $legacyConnection;\n    }\n    \n    public function findAll()\n    {\n        \/\/ \u30ec\u30ac\u30b7\u30fcDB\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\n        $queryBuilder = $this-&gt;legacyConnection-&gt;createQueryBuilder();\n        return $queryBuilder\n            -&gt;select('*')\n            -&gt;from('tbl_user', 'u')\n            -&gt;execute()\n            -&gt;fetchAllAssociative();\n    }\n    \n    public function migrateUserToNewSystem($legacyUserId)\n    {\n        \/\/ \u30ec\u30ac\u30b7\u30fc\u30e6\u30fc\u30b6\u30fc\u306e\u53d6\u5f97\n        $legacyUser = $this-&gt;findById($legacyUserId);\n        \n        \/\/ \u65b0\u30b7\u30b9\u30c6\u30e0\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u5909\u63db\n        $newUser = $this-&gt;convertLegacyUserToNewFormat($legacyUser);\n        \n        \/\/ \u65b0\u30b7\u30b9\u30c6\u30e0\u306b\u4fdd\u5b58\n        $this-&gt;saveToNewSystem($newUser);\n    }\n}\n<\/pre>\n\n\n\n<p><strong>2. Laravel<\/strong><\/p>\n\n\n\n<p>Laravel\u306f\u4e2d\u898f\u6a21\u306e\u30b7\u30b9\u30c6\u30e0\u30ea\u30d7\u30ec\u30a4\u30b9\u306b\u512a\u308c\u305f\u9078\u629e\u80a2\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30ec\u30ac\u30b7\u30fc\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3068\u306e\u9023\u643a\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u76f4\u611f\u7684\u306aAPI\u8a2d\u8a08\u3067\u306e\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u518d\u5b9f\u88c5<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u6a5f\u80fd\u79fb\u884c\u3092\u53ef\u80fd\u306b\u3059\u308b\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n\n\n\n<li>\u30e2\u30c0\u30f3\u306a\u958b\u767a\u74b0\u5883\u3078\u306e\u79fb\u884c\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306b\u3088\u308b\u8fc5\u901f\u306a\u6a5f\u80fd\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u4e2d\u898f\u6a21\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30cb\u30e5\u30fc\u30a2\u30eb<\/p>\n\n\n\n<p><strong>3. Laminas<\/strong><\/p>\n\n\n\n<p>\u7279\u306bZend Framework\u30d9\u30fc\u30b9\u306e\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001Laminas\u304c\u6700\u9069\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zend Framework\u304b\u3089\u306e\u79fb\u884c\u30c4\u30fc\u30eb\u3068\u4e92\u63db\u6027<\/li>\n\n\n\n<li>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u74b0\u5883\u3067\u306e\u5b9f\u7e3e\u3068\u5b89\u5b9a\u6027<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30e9\u30fc\u8a2d\u8a08\u306b\u3088\u308b\u6bb5\u968e\u7684\u306a\u7f6e\u304d\u63db\u3048<\/li>\n\n\n\n<li>\u30ec\u30ac\u30b7\u30fc\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u306e\u7d71\u5408\u30aa\u30d7\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u53b3\u683c\u306a\u5f8c\u65b9\u4e92\u63db\u6027\u3078\u306e\u914d\u616e<\/li>\n<\/ul>\n\n\n\n<p><strong>\u4f7f\u7528\u4f8b<\/strong>: \u7279\u306bZend Framework\u3067\u69cb\u7bc9\u3055\u308c\u305f\u65e2\u5b58\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30d7\u30ec\u30a4\u30b9<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-171\">\u4e8b\u4f8b\uff1a\u4fdd\u967a\u4f1a\u793e\u306e\u9867\u5ba2\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u30ea\u30cb\u30e5\u30fc\u30a2\u30eb<\/h4>\n\n\n\n<p>\u5927\u624b\u4fdd\u967a\u4f1a\u793e\u306f15\u5e74\u4ee5\u4e0a\u524d\u306b\u958b\u767a\u3055\u308c\u305f\u9867\u5ba2\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u30ea\u30d7\u30ec\u30a4\u30b9\u3092\u8a08\u753b\u3057\u3066\u3044\u307e\u3057\u305f\u3002\u6b21\u306e\u7406\u7531\u304b\u3089Symfony\u3092\u9078\u629e\u3057\u307e\u3057\u305f\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>200\u4e07\u4ef6\u4ee5\u4e0a\u306e\u9867\u5ba2\u30c7\u30fc\u30bf\u3068\u8907\u96d1\u306a\u4fdd\u967a\u5951\u7d04\u30c7\u30fc\u30bf\u306e\u79fb\u884c<\/li>\n\n\n\n<li>\u30ec\u30ac\u30b7\u30fcAPI\u3068\u306e\u4e92\u63db\u6027\u3092\u7dad\u6301\u3057\u306a\u304c\u3089\u306e\u6bb5\u968e\u7684\u306a\u30ea\u30d7\u30ec\u30a4\u30b9<\/li>\n\n\n\n<li>\u53b3\u683c\u306a\u30c7\u30fc\u30bf\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u3078\u306e\u5bfe\u5fdc<\/li>\n\n\n\n<li>\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30eb\u30fc\u30eb\u306e\u518d\u5b9f\u88c5\u3068\u691c\u8a3c<\/li>\n<\/ol>\n\n\n\n<p>\u7d50\u679c\u3068\u3057\u3066\u30012\u5e74\u9593\u306e\u8a08\u753b\u7684\u306a\u79fb\u884c\u3092\u7d4c\u3066\u3001\u30b7\u30b9\u30c6\u30e0\u306e\u30c0\u30a6\u30f3\u30bf\u30a4\u30e0\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u306a\u304c\u3089\u3001\u65b0\u30b7\u30b9\u30c6\u30e0\u3078\u306e\u5b8c\u5168\u79fb\u884c\u3092\u9054\u6210\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-172\">\u691c\u8a0e\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c7\u30fc\u30bf\u79fb\u884c\u6226\u7565\u3068\u6574\u5408\u6027\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u4e00\u6642\u7684\u306a\u5171\u5b58\u65b9\u6cd5<\/li>\n\n\n\n<li>\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u9069\u5207\u306a\u62bd\u8c61\u5316\u3068\u518d\u69cb\u7bc9<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u6226\u7565\u3068\u54c1\u8cea\u4fdd\u8a3c\u30d7\u30ed\u30bb\u30b9<\/li>\n\n\n\n<li>\u6bb5\u968e\u7684\u306a\u30ab\u30c3\u30c8\u30aa\u30fc\u30d0\u30fc\u8a08\u753b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-173\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u5225\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u30de\u30c8\u30ea\u30c3\u30af\u30b9<\/h3>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u306f\u3001\u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7\u3068\u76ee\u7684\u306b\u5bfe\u3057\u3066\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9078\u629e\u80a2\u3092\u307e\u3068\u3081\u305f\u3082\u306e\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u3068\u76ee\u6a19\u306b\u57fa\u3065\u3044\u3066\u3001\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u5224\u65ad\u3059\u308b\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n<div id=\"id-e83c734c-78c8-48a3-b70a-7dc26bbd9cf5\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30bf\u30a4\u30d7<\/th><th>\u7b2c\u4e00\u9078\u629e<\/th><th>\u7b2c\u4e8c\u9078\u629e<\/th><th>\u4ee3\u66ff\u9078\u629e\u80a2<\/th><th>\u30b3\u30e1\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td><strong>\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\/\u8fc5\u901f\u306a\u958b\u767a<\/strong><\/td><td>Laravel<\/td><td>CodeIgniter<\/td><td>CakePHP<\/td><td>\u958b\u767a\u901f\u5ea6\u3068\u751f\u7523\u6027\u3092\u6700\u5927\u5316\u3067\u304d\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u6700\u9069<\/td><\/tr><tr><td><strong>\u5927\u898f\u6a21\u30b5\u30fc\u30d3\u30b9\/\u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30af<\/strong><\/td><td>Symfony<\/td><td>Laravel (with Octane)<\/td><td>Laminas<\/td><td>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3068\u9577\u671f\u4fdd\u5b88\u6027\u3092\u91cd\u8996<\/td><\/tr><tr><td><strong>EC\u30b5\u30a4\u30c8<\/strong><\/td><td>Symfony<\/td><td>Laravel<\/td><td>CakePHP<\/td><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u9023\u643a\u306e\u5bb9\u6613\u3055\u304c\u30dd\u30a4\u30f3\u30c8<\/td><\/tr><tr><td><strong>API\/\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9<\/strong><\/td><td>Slim<\/td><td>Symfony (API Platform)<\/td><td>Laravel (Lumen)<\/td><td>\u8efd\u91cf\u3055\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996<\/td><\/tr><tr><td><strong>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u30ea\u30d7\u30ec\u30a4\u30b9<\/strong><\/td><td>Symfony<\/td><td>Laravel<\/td><td>Laminas<\/td><td>\u6bb5\u968e\u7684\u306a\u79fb\u884c\u3068\u4e92\u63db\u6027\u306e\u78ba\u4fdd\u304c\u91cd\u8981<\/td><\/tr><tr><td><strong>\u793e\u5185\u30b7\u30b9\u30c6\u30e0\/\u7ba1\u7406\u753b\u9762<\/strong><\/td><td>Laravel<\/td><td>CakePHP<\/td><td>CodeIgniter<\/td><td>\u958b\u767a\u52b9\u7387\u3068\u308f\u304b\u308a\u3084\u3059\u3055\u3092\u512a\u5148<\/td><\/tr><tr><td><strong>\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/strong><\/td><td>Slim<\/td><td>Laravel (Lumen)<\/td><td>Symfony<\/td><td>\u30ec\u30b9\u30dd\u30f3\u30b9\u901f\u5ea6\u3068\u30ea\u30bd\u30fc\u30b9\u52b9\u7387\u3092\u91cd\u8996<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-174\">\u6700\u7d42\u7684\u306a\u5224\u65ad\u306e\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u6700\u7d42\u6c7a\u5b9a\u524d\u306b\u3001\u4ee5\u4e0b\u306e\u30dd\u30a4\u30f3\u30c8\u3092\u691c\u8a0e\u3059\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c1\u30fc\u30e0\u306e\u65e2\u5b58\u30b9\u30ad\u30eb\u3068\u5b66\u7fd2\u66f2\u7dda\u3092\u8003\u616e\u3059\u308b<\/strong><br>\u65b0\u3057\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u3001\u5f97\u3089\u308c\u308b\u30e1\u30ea\u30c3\u30c8\u3092\u4e0a\u56de\u3089\u306a\u3044\u304b\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n\n\n\n<li><strong>\u5358\u4e00\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3079\u3066\u3092\u89e3\u6c7a\u3057\u3088\u3046\u3068\u305b\u305a\u3001\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u8907\u6570\u306e\u30c4\u30fc\u30eb\u3092\u7d44\u307f\u5408\u308f\u305b\u308b<\/strong><br>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3067\u306f\u3001\u5404\u30b5\u30fc\u30d3\u30b9\u306b\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u3082\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n\n\n\n<li><strong>\u5c06\u6765\u306e\u4fdd\u5b88\u6027\u3068\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u30d1\u30b9\u3092\u8003\u616e\u3059\u308b<\/strong><br>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u30dd\u30ea\u30b7\u30fc\u3068\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u306e\u5bb9\u6613\u3055\u3092\u8a55\u4fa1\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n\n\n\n<li><strong>\u5fc5\u305a\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u3084PoC\u3092\u4f5c\u6210\u3057\u3066\u304b\u3089\u6700\u7d42\u6c7a\u5b9a\u3059\u308b<\/strong><br>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8981\u4ef6\u306b\u5bfe\u3059\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9069\u5408\u6027\u3092\u5c0f\u898f\u6a21\u306a\u5b9f\u88c5\u3067\u691c\u8a3c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n\n\n\n<li><strong>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u30b5\u30dd\u30fc\u30c8\u3068\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u5065\u5168\u6027\u3092\u8a55\u4fa1\u3059\u308b<\/strong><br>\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u5145\u5b9f\u3057\u305f\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306f\u3001\u9577\u671f\u7684\u306a\u958b\u767a\u3068\u4fdd\u5b88\u306b\u5927\u304d\u304f\u8ca2\u732e\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9078\u5b9a\u306f\u6280\u8853\u7684\u5074\u9762\u3060\u3051\u3067\u306a\u304f\u3001\u30d3\u30b8\u30cd\u30b9\u76ee\u6a19\u3068\u3082\u6574\u5408\u3055\u305b\u308b<\/strong><br>\u5e02\u5834\u6295\u5165\u307e\u3067\u306e\u6642\u9593\u3001\u30b3\u30b9\u30c8\u3001\u54c1\u8cea\u3001\u5c06\u6765\u7684\u306a\u62e1\u5f35\u6027\u306a\u3069\u306e\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u3082\u8003\u616e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ol>\n\n\n\n<p>\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6210\u529f\u306b\u76f4\u7d50\u3059\u308b\u91cd\u8981\u306a\u6c7a\u65ad\u3067\u3059\u3002\u3053\u306e\u7ae0\u3067\u7d39\u4ecb\u3057\u305f\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u3068\u76ee\u6a19\u306b\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6b21\u306e\u7ae0\u3067\u306f\u3001\u9078\u3093\u3060\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u52b9\u7387\u7684\u306b\u5b66\u7fd2\u3057\u3001\u7fd2\u5f97\u3059\u308b\u305f\u3081\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-175\">\u73fe\u5f79\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f1d\u6388\uff01PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u7fd2\u5f97\u306e\u6700\u77ed\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/h2>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b66\u7fd2\u306f\u3001\u52b9\u7387\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3067\u53d6\u308a\u7d44\u3080\u3053\u3068\u3067\u3001\u7fd2\u5f97\u307e\u3067\u306e\u6642\u9593\u3092\u5927\u5e45\u306b\u77ed\u7e2e\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001\u73fe\u5f79PHP\u30a8\u30f3\u30b8\u30cb\u30a2\u306e\u8996\u70b9\u304b\u3089\u3001\u521d\u5fc3\u8005\u304b\u3089\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8\u30ec\u30d9\u30eb\u307e\u3067\u306e\u5177\u4f53\u7684\u306a\u5b66\u7fd2\u30b9\u30c6\u30c3\u30d7\u3068\u30ce\u30a6\u30cf\u30a6\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u9069\u5207\u306a\u30ed\u30fc\u30c9\u30de\u30c3\u30d7\u306b\u6cbf\u3063\u3066\u5b66\u7fd2\u3059\u308b\u3053\u3068\u3067\u3001\u5358\u306b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4f7f\u3044\u65b9\u3092\u899a\u3048\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u3001\u30ad\u30e3\u30ea\u30a2\u30a2\u30c3\u30d7\u306b\u3064\u306a\u3052\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-176\">\u52b9\u7387\u7684\u306a\u5b66\u7fd2\u9806\u5e8f\u3068\u63a8\u5968\u30ea\u30bd\u30fc\u30b9<\/h3>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b66\u7fd2\u306f\u3001\u6bb5\u968e\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u52b9\u679c\u7684\u3067\u3059\u3002\u4ee5\u4e0b\u306e4\u3064\u306e\u30b9\u30c6\u30fc\u30b8\u306b\u6cbf\u3063\u3066\u9032\u3081\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u3088\u304f\u5b9f\u8df5\u30ec\u30d9\u30eb\u306e\u30b9\u30ad\u30eb\u3092\u7fd2\u5f97\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-177\">\u30b9\u30c6\u30fc\u30b81: \u57fa\u790e\u77e5\u8b58\u306e\u7fd2\u5f97<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b66\u7fd2\u3092\u59cb\u3081\u308b\u524d\u306b\u3001\u5fc5\u8981\u306a\u57fa\u790e\u77e5\u8b58\u3092\u56fa\u3081\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u3053\u306e\u6bb5\u968e\u3092\u30b9\u30ad\u30c3\u30d7\u3059\u308b\u3068\u3001\u5f8c\u306e\u5b66\u7fd2\u3067\u8e93\u304f\u539f\u56e0\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u7fd2\u5f97\u3059\u3079\u304d\u57fa\u790e\u30b9\u30ad\u30eb:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>PHP\u57fa\u790e\u69cb\u6587<\/strong>: \u5909\u6570\u3001\u914d\u5217\u3001\u95a2\u6570\u3001\u5236\u5fa1\u69cb\u9020\u306a\u3069\u3001PHP\u306e\u57fa\u672c\u7684\u306a\u69cb\u6587\u3068\u6a5f\u80fd<\/li>\n\n\n\n<li><strong>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0<\/strong>: \u30af\u30e9\u30b9\u3001\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3001\u7d99\u627f\u3001\u30ab\u30d7\u30bb\u30eb\u5316\u3001\u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0\u306a\u3069\u306eOOP\u306e\u57fa\u672c\u6982\u5ff5<\/li>\n\n\n\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u57fa\u790e<\/strong>: SQL\u306e\u57fa\u672c\uff08SELECT, INSERT, UPDATE, DELETE\uff09\u3068\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u6982\u5ff5<\/li>\n\n\n\n<li><strong>HTTP\u3068Web\u306e\u57fa\u790e<\/strong>: HTTP\u30e1\u30bd\u30c3\u30c9\u3001\u30ea\u30af\u30a8\u30b9\u30c8\/\u30ec\u30b9\u30dd\u30f3\u30b9\u30b5\u30a4\u30af\u30eb\u3001\u30af\u30c3\u30ad\u30fc\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u4ed5\u7d44\u307f<\/li>\n\n\n\n<li><strong>Composer<\/strong>: PHP\u306e\u4f9d\u5b58\u6027\u7ba1\u7406\u30c4\u30fc\u30eb\u3067\u3042\u308bComposer\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/li>\n<\/ol>\n\n\n\n<p><strong>\u304a\u3059\u3059\u3081\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9:<\/strong><\/p>\n\n\n<div id=\"id-8095085e-0f00-4620-bd56-bc05bf936a45\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30ea\u30bd\u30fc\u30b9<\/th><th>\u7a2e\u985e<\/th><th>\u7279\u5fb4<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/www.php.net\/manual\/ja\/\">PHP\u516c\u5f0f\u30de\u30cb\u30e5\u30a2\u30eb<\/a><\/td><td>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/td><td>\u57fa\u672c\u7684\u306a\u6587\u6cd5\u304b\u3089\u5fdc\u7528\u307e\u3067\u30ab\u30d0\u30fc\u3059\u308b\u6700\u3082\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30ea\u30bd\u30fc\u30b9<\/td><\/tr><tr><td>PHP\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u990a\u6210\u8aad\u672c<\/td><td>\u66f8\u7c4d<\/td><td>\u30e2\u30c0\u30f3\u306aPHP\u958b\u767a\u306e\u57fa\u790e\u3092\u7db2\u7f85\u3057\u305f\u826f\u66f8<\/td><\/tr><tr><td><a href=\"https:\/\/prog-8.com\/languages\/php\">Progate PHP\u8b1b\u5ea7<\/a><\/td><td>\u30aa\u30f3\u30e9\u30a4\u30f3\u5b66\u7fd2<\/td><td>\u521d\u5fc3\u8005\u5411\u3051\u306e\u5bfe\u8a71\u5f0fPHP\u5b66\u7fd2\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><strong>\u5b9f\u8df5\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6848:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30f3\u30d7\u30eb\u306aTodo\u30ea\u30b9\u30c8\u30a2\u30d7\u30ea\uff08\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306a\u3057\u306e\u30d4\u30e5\u30a2PHP\uff09<\/li>\n\n\n\n<li>\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u3092\u884c\u3046\u5c0f\u3055\u306a\u4f1a\u54e1\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u6a5f\u80fd\u4ed8\u304d\u306e\u7c21\u6613\u63b2\u793a\u677f<\/li>\n<\/ul>\n\n\n\n<p><strong>\u76ee\u5b89\u671f\u9593<\/strong>: 1\u301c2\u30f6\u6708\uff08PHP\u672a\u7d4c\u9a13\u306e\u5834\u5408\uff09<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-178\">\u30b9\u30c6\u30fc\u30b82: \u7279\u5b9a\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5165\u9580<\/h4>\n\n\n\n<p>\u57fa\u790e\u77e5\u8b58\u3092\u8eab\u306b\u3064\u3051\u305f\u3089\u3001\u7279\u5b9a\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b66\u7fd2\u306b\u79fb\u308a\u307e\u3059\u3002\u6700\u521d\u306f\u5358\u4e00\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u96c6\u4e2d\u3057\u3001MVC\u30d1\u30bf\u30fc\u30f3\u3084\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u57fa\u672c\u7684\u306a\u8003\u3048\u65b9\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5225\u306e\u5165\u9580\u30a2\u30d7\u30ed\u30fc\u30c1:<\/strong><\/p>\n\n\n\n<p><strong>Laravel\u5165\u9580:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u91cd\u8981\u6982\u5ff5<\/strong>: Artisan CLI, Eloquent ORM, Blade, \u30eb\u30fc\u30c6\u30a3\u30f3\u30b0, \u30df\u30c9\u30eb\u30a6\u30a7\u30a2<\/li>\n\n\n\n<li><strong>\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7<\/strong>:\n<ol class=\"wp-block-list\">\n<li>\u516c\u5f0f\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306b\u5f93\u3063\u3066\u57fa\u672c\u7684\u306a\u30d6\u30ed\u30b0\u30a2\u30d7\u30ea\u3092\u4f5c\u6210<\/li>\n\n\n\n<li>\u8a8d\u8a3c\u30b7\u30b9\u30c6\u30e0\u306e\u5b9f\u88c5\uff08Laravel Breeze\u3092\u4f7f\u7528\uff09<\/li>\n\n\n\n<li>Eloquent ORM\u3067\u306eCRUD\u64cd\u4f5c\u306e\u7df4\u7fd2<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>\u304a\u3059\u3059\u3081\u30ea\u30bd\u30fc\u30b9<\/strong>:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/laravel.com\/docs\">Laravel\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a> \u2013 \u5305\u62ec\u7684\u304b\u3064\u8aad\u307f\u3084\u3059\u3044\u516c\u5f0f\u30ac\u30a4\u30c9<\/li>\n\n\n\n<li><a href=\"https:\/\/laracasts.com\/\">Laracasts<\/a> \u2013 Laravel\u5b66\u7fd2\u306e\u5b9a\u756a\u30ea\u30bd\u30fc\u30b9\uff08\u4e00\u90e8\u6709\u6599\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Symfony\u5165\u9580:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u91cd\u8981\u6982\u5ff5<\/strong>: \u30b5\u30fc\u30d3\u30b9\u30b3\u30f3\u30c6\u30ca, Doctrine ORM, Twig, \u30d0\u30f3\u30c9\u30eb, \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8<\/li>\n\n\n\n<li><strong>\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7<\/strong>:\n<ol class=\"wp-block-list\">\n<li>Symfony\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u30fc\u3067\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f5c\u6210<\/li>\n\n\n\n<li>\u30a8\u30f3\u30c6\u30a3\u30c6\u30a3\u3068\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u4f5c\u6210<\/li>\n\n\n\n<li>\u30d5\u30a9\u30fc\u30e0\u306e\u4f5c\u6210\u3068\u51e6\u7406<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>\u304a\u3059\u3059\u3081\u30ea\u30bd\u30fc\u30b9<\/strong>:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/symfony.com\/doc\/current\/index.html\">Symfony\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a> \u2013 \u8a73\u7d30\u306a\u516c\u5f0f\u30ac\u30a4\u30c9\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/li>\n\n\n\n<li><a href=\"https:\/\/symfonycasts.com\/\">SymfonyCasts<\/a> \u2013 \u516c\u5f0f\u306eSymfony\u5b66\u7fd2\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\uff08\u4e00\u90e8\u6709\u6599\uff09<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>CodeIgniter\u5165\u9580:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u91cd\u8981\u6982\u5ff5<\/strong>: \u30d8\u30eb\u30d1\u30fc\u95a2\u6570, \u30a2\u30af\u30c6\u30a3\u30d6\u30ec\u30b3\u30fc\u30c9, \u30e9\u30a4\u30d6\u30e9\u30ea, \u30b7\u30f3\u30d7\u30eb\u306aMVC<\/li>\n\n\n\n<li><strong>\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7<\/strong>:\n<ol class=\"wp-block-list\">\n<li>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3068\u57fa\u672c\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3068\u30d3\u30e5\u30fc\u306e\u4f5c\u6210<\/li>\n\n\n\n<li>\u30e2\u30c7\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>\u304a\u3059\u3059\u3081\u30ea\u30bd\u30fc\u30b9<\/strong>:\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/codeigniter.com\/user_guide\/\">CodeIgniter\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a> \u2013 \u30b7\u30f3\u30d7\u30eb\u3067\u7406\u89e3\u3057\u3084\u3059\u3044\u516c\u5f0f\u30ac\u30a4\u30c9<\/li>\n\n\n\n<li>CodeIgniter 4 \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5165\u9580 \u2013 \u65e5\u672c\u8a9e\u3067\u66f8\u304b\u308c\u305fCodeIgniter 4\u306e\u5165\u9580\u66f8<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>\u52b9\u679c\u7684\u306a\u5b66\u7fd2\u30d1\u30bf\u30fc\u30f3:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u6700\u521d\u304b\u3089\u6700\u5f8c\u307e\u3067\u5b9f\u65bd<\/li>\n\n\n\n<li>\u57fa\u672c\u7684\u306aCRUD\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u3066\u7406\u89e3\u3092\u6df1\u3081\u308b<\/li>\n\n\n\n<li>\u5c0f\u3055\u306a\u6a5f\u80fd\u304b\u3089\u59cb\u3081\u3066\u6bb5\u968e\u7684\u306b\u8907\u96d1\u306a\u3082\u306e\u3078\u79fb\u884c<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u306a\u304c\u3089\u5b66\u3076\u300c\u30cf\u30f3\u30ba\u30aa\u30f3\u300d\u30a2\u30d7\u30ed\u30fc\u30c1<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u306b\u906d\u9047\u3057\u305f\u3089\u3001\u7406\u89e3\u3059\u308b\u307e\u3067\u8abf\u67fb\u3059\u308b\u7fd2\u6163\u3092\u3064\u3051\u308b<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5b9f\u8df5\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6848:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u500b\u4eba\u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0\uff08\u8a18\u4e8b\u306e\u6295\u7a3f\u3001\u7de8\u96c6\u3001\u524a\u9664\u3001\u30ab\u30c6\u30b4\u30ea\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u30bf\u30b9\u30af\u7ba1\u7406\u30a2\u30d7\u30ea\uff08\u7de0\u5207\u65e5\u3084\u30b9\u30c6\u30fc\u30bf\u30b9\u7ba1\u7406\u6a5f\u80fd\u4ed8\u304d\uff09<\/li>\n\n\n\n<li>\u57fa\u672c\u7684\u306a\u8a8d\u8a3c\u6a5f\u80fd\u3092\u6301\u3064\u30e1\u30f3\u30d0\u30fc\u30b7\u30c3\u30d7\u30b5\u30a4\u30c8<\/li>\n<\/ul>\n\n\n\n<p><strong>\u76ee\u5b89\u671f\u9593<\/strong>: 1\u301c3\u30f6\u6708<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-179\">\u30b9\u30c6\u30fc\u30b83: \u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u57fa\u672c\u3092\u7406\u89e3\u3057\u305f\u3089\u3001\u3088\u308a\u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u3092\u78e8\u304f\u30b9\u30c6\u30fc\u30b8\u306b\u9032\u307f\u307e\u3059\u3002\u3053\u306e\u6bb5\u968e\u3067\u306f\u3001\u5b9f\u4e16\u754c\u306e\u8ab2\u984c\u306b\u5bfe\u5fdc\u3067\u304d\u308b\u5fdc\u7528\u529b\u3092\u990a\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u7fd2\u5f97\u3059\u3079\u304d\u5b9f\u8df5\u30b9\u30ad\u30eb:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u3068\u6700\u9069\u5316<\/strong>: \u8907\u96d1\u306a\u30ea\u30ec\u30fc\u30b7\u30e7\u30f3\u30b7\u30c3\u30d7\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08\u3001\u30af\u30a8\u30ea\u6700\u9069\u5316\u306a\u3069<\/li>\n\n\n\n<li><strong>\u8a8d\u8a3c\u3068\u8a8d\u53ef<\/strong>: \u591a\u8981\u7d20\u8a8d\u8a3c\u3001\u30ed\u30fc\u30eb\u30d9\u30fc\u30b9\u306e\u30a2\u30af\u30bb\u30b9\u5236\u5fa1\u3001API\u30c8\u30fc\u30af\u30f3\u8a8d\u8a3c\u306a\u3069<\/li>\n\n\n\n<li><strong>\u30d5\u30a9\u30fc\u30e0\u51e6\u7406\u3068\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/strong>: \u8907\u96d1\u306a\u30d5\u30a9\u30fc\u30e0\u3001\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3001\u30ab\u30b9\u30bf\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306a\u3069<\/li>\n\n\n\n<li><strong>API\u306e\u8a2d\u8a08\u3068\u5b9f\u88c5<\/strong>: RESTful API\u8a2d\u8a08\u3001JSON\u5fdc\u7b54\u3001API\u30c9\u30ad\u30e5\u30e1\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\u306a\u3069<\/li>\n\n\n\n<li><strong>\u30c6\u30b9\u30c8\u624b\u6cd5<\/strong>: \u5358\u4f53\u30c6\u30b9\u30c8\u3001\u6a5f\u80fd\u30c6\u30b9\u30c8\u3001\u7d71\u5408\u30c6\u30b9\u30c8\u3001TDD\u306a\u3069<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/strong>: XSS\u5bfe\u7b56\u3001CSRF\u5bfe\u7b56\u3001SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u306a\u3069<\/li>\n<\/ol>\n\n\n\n<p><strong>\u52b9\u679c\u7684\u306a\u5b66\u7fd2\u30a2\u30d7\u30ed\u30fc\u30c1:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u901a\u3058\u305f\u5b66\u7fd2\uff08\u5b66\u7fd2\u306e\u305f\u3081\u306e\u5b66\u7fd2\u3067\u306f\u306a\u304f\uff09<\/li>\n\n\n\n<li>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b3\u30fc\u30c9\u3092\u8aad\u3093\u3067\u5b66\u3076<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30b1\u30fc\u30b9\u3084\u30a8\u30c3\u30b8\u30b1\u30fc\u30b9\u306e\u51e6\u7406\u65b9\u6cd5\u3092\u610f\u8b58\u7684\u306b\u5b66\u3076<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u3092\u66f8\u304f\u7fd2\u6163\u3092\u8eab\u306b\u3064\u3051\u308b<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3092\u53d7\u3051\u308b\/\u884c\u3046\u3053\u3068\u3067\u8996\u91ce\u3092\u5e83\u3052\u308b<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5b9f\u8df5\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6848:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>EC\u30b5\u30a4\u30c8\uff08\u5546\u54c1\u7ba1\u7406\u3001\u30ab\u30fc\u30c8\u3001\u6c7a\u6e08\u9023\u643a\u3001\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>SPA + RESTful API\u306e\u7d44\u307f\u5408\u308f\u305b\uff08Vue.js\/React + PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\uff09<\/li>\n\n\n\n<li>\u4e88\u7d04\u30b7\u30b9\u30c6\u30e0\uff08\u30ab\u30ec\u30f3\u30c0\u30fc\u9023\u643a\u3001\u901a\u77e5\u6a5f\u80fd\u3001\u7ba1\u7406\u753b\u9762\uff09<\/li>\n\n\n\n<li>SNS\u30af\u30ed\u30fc\u30f3\uff08\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u3001\u6295\u7a3f\u3001\u30b3\u30e1\u30f3\u30c8\u3001\u3044\u3044\u306d\u6a5f\u80fd\uff09<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\uff08Laravel\uff09:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u8907\u96d1\u306a\u30d5\u30a9\u30fc\u30e0\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u4f8b\npublic function store(Request $request)\n{\n    $validated = $request-&gt;validate([\n        'title' =&gt; 'required|max:255',\n        'body' =&gt; 'required',\n        'publish_at' =&gt; 'nullable|date',\n        'category_id' =&gt; 'required|exists:categories,id',\n        'tags' =&gt; 'array',\n        'tags.*' =&gt; 'exists:tags,id',\n        'image' =&gt; 'nullable|image|max:2048', \/\/ \u6700\u59272MB\u306e\u753b\u50cf\n    ]);\n    \n    $article = new Article($validated);\n    $article-&gt;user_id = Auth::id();\n    \n    if ($request-&gt;hasFile('image')) {\n        $path = $request-&gt;file('image')-&gt;store('public\/articles');\n        $article-&gt;image_path = Storage::url($path);\n    }\n    \n    $article-&gt;save();\n    \n    if (isset($validated['tags'])) {\n        $article-&gt;tags()-&gt;sync($validated['tags']);\n    }\n    \n    return redirect()-&gt;route('articles.show', $article)\n                     -&gt;with('success', '\u8a18\u4e8b\u304c\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\uff01');\n}\n<\/pre>\n\n\n\n<p><strong>\u76ee\u5b89\u671f\u9593<\/strong>: 3\u301c6\u30f6\u6708<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-180\">\u30b9\u30c6\u30fc\u30b84: \u5c02\u9580\u6027\u3068\u5fdc\u7528\u529b\u306e\u5411\u4e0a<\/h4>\n\n\n\n<p>\u4e2d\u7d1a\u30ec\u30d9\u30eb\u306b\u9054\u3057\u305f\u3089\u3001\u7279\u5b9a\u306e\u5206\u91ce\u3067\u5c02\u9580\u6027\u3092\u9ad8\u3081\u305f\u308a\u3001\u3088\u308a\u9ad8\u5ea6\u306a\u6982\u5ff5\u3084\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u5b66\u3093\u3060\u308a\u3059\u308b\u3053\u3068\u3067\u3001\u5fdc\u7528\u529b\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u7fd2\u5f97\u3059\u3079\u304d\u9ad8\u5ea6\u306a\u30c8\u30d4\u30c3\u30af:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30d1\u30bf\u30fc\u30f3<\/strong>: \u30af\u30ea\u30fc\u30f3\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3001\u30c9\u30e1\u30a4\u30f3\u99c6\u52d5\u8a2d\u8a08\uff08DDD\uff09\u3001CQRS\u306a\u3069\u306e\u9ad8\u5ea6\u306a\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3<\/li>\n\n\n\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/strong>: \u30d7\u30ed\u30d5\u30a1\u30a4\u30ea\u30f3\u30b0\u3001\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u6226\u7565\u3001\u975e\u540c\u671f\u51e6\u7406\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u6700\u9069\u5316\u306a\u3069<\/li>\n\n\n\n<li><strong>\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u8a2d\u8a08<\/strong>: \u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3001\u6c34\u5e73\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u30ad\u30e5\u30fc\u306a\u3069<\/li>\n\n\n\n<li><strong>DevOps\u3068CI\/CD<\/strong>: \u81ea\u52d5\u30c6\u30b9\u30c8\u3001\u7d99\u7d9a\u7684\u30a4\u30f3\u30c6\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\/\u30c7\u30ea\u30d0\u30ea\u30fc\u3001\u30b3\u30f3\u30c6\u30ca\u5316\uff08Docker\uff09\u306a\u3069<\/li>\n\n\n\n<li><strong>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u9ad8\u5ea6\u5316<\/strong>: \u8a8d\u8a3c\u30fb\u8a8d\u53ef\u306e\u9ad8\u5ea6\u306a\u5b9f\u88c5\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u76e3\u67fb\u3001\u8106\u5f31\u6027\u5bfe\u7b56\u306a\u3069<\/li>\n<\/ol>\n\n\n\n<p><strong>\u52b9\u679c\u7684\u306a\u5b66\u7fd2\u30a2\u30d7\u30ed\u30fc\u30c1:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u969b\u306e\u696d\u52d9\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u5fdc\u7528<\/li>\n\n\n\n<li>\u6280\u8853\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u3084\u52c9\u5f37\u4f1a\u3078\u306e\u53c2\u52a0<\/li>\n\n\n\n<li>\u5c02\u9580\u66f8\u7c4d\u3084\u30a2\u30c9\u30d0\u30f3\u30b9\u30c9\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u6d3b\u7528<\/li>\n\n\n\n<li>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3078\u306e\u8ca2\u732e<\/li>\n\n\n\n<li>\u500b\u4eba\u7684\u306a\u6311\u6226\u7684\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5b9f\u65bd<\/li>\n<\/ul>\n\n\n\n<p><strong>\u5b9f\u8df5\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6848:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u3088\u308b\u5206\u6563\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u9ad8\u8ca0\u8377\u306b\u8010\u3048\u308b\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u91cd\u8996\u3057\u305f\u91d1\u878d\u7cfb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u6a5f\u80fd\u3092\u6301\u3064SPA\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<p><strong>\u9ad8\u5ea6\u306a\u30b3\u30fc\u30c9\u4f8b\uff08Laravel \u2013 \u30ea\u30dd\u30b8\u30c8\u30ea\u30d1\u30bf\u30fc\u30f3\uff09:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ AppServiceProvider\u3067\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u30d0\u30a4\u30f3\u30c7\u30a3\u30f3\u30b0\npublic 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\/\/ \u30ea\u30dd\u30b8\u30c8\u30ea\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nnamespace App\\Repositories\\Interfaces;\n\ninterface UserRepositoryInterface\n{\n    public function findByEmail(string $email);\n    public function findActiveUsers();\n    public function create(array $data);\n}\n\n\/\/ \u30ea\u30dd\u30b8\u30c8\u30ea\u5b9f\u88c5\nnamespace App\\Repositories\\Eloquent;\n\nuse App\\Models\\User;\nuse App\\Repositories\\Interfaces\\UserRepositoryInterface;\n\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 findByEmail(string $email)\n    {\n        return $this-&gt;model-&gt;where('email', $email)-&gt;first();\n    }\n    \n    public function findActiveUsers()\n    {\n        return $this-&gt;model-&gt;where('status', 'active')\n                          -&gt;orderBy('last_login_at', 'desc')\n                          -&gt;get();\n    }\n    \n    public function create(array $data)\n    {\n        return $this-&gt;model-&gt;create($data);\n    }\n}\n\n\/\/ \u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3067\u306e\u4f7f\u7528\nnamespace App\\Http\\Controllers;\n\nuse App\\Repositories\\Interfaces\\UserRepositoryInterface;\n\nclass UserController extends Controller\n{\n    protected $userRepository;\n    \n    public function __construct(UserRepositoryInterface $userRepository)\n    {\n        $this-&gt;userRepository = $userRepository;\n    }\n    \n    public function index()\n    {\n        $activeUsers = $this-&gt;userRepository-&gt;findActiveUsers();\n        return view('users.index', compact('activeUsers'));\n    }\n}\n<\/pre>\n\n\n\n<p><strong>\u76ee\u5b89\u671f\u9593<\/strong>: 6\u30f6\u6708\u301c1\u5e74\u4ee5\u4e0a\uff08\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\uff09<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-181\">\u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b<\/h3>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u308b\u305f\u3081\u306e\u6700\u3082\u52b9\u679c\u7684\u306a\u65b9\u6cd5\u306f\u3001\u5b9f\u969b\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u958b\u767a\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u6bb5\u968e\u7684\u306b\u6311\u6226\u3067\u304d\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-182\">\u521d\u5fc3\u8005\u5411\u3051\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\uff081\u301c2\u30f6\u6708\uff09<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\uff08\u8a18\u4e8b\u306e\u4f5c\u6210\u3001\u8aad\u53d6\u3001\u66f4\u65b0\u3001\u524a\u9664\uff09<\/li>\n\n\n\n<li>\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u6a5f\u80fd\uff08\u767b\u9332\u3001\u30ed\u30b0\u30a4\u30f3\u3001\u30ed\u30b0\u30a2\u30a6\u30c8\uff09<\/li>\n\n\n\n<li>\u30de\u30fc\u30af\u30c0\u30a6\u30f3\u30a8\u30c7\u30a3\u30bf\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u30ab\u30c6\u30b4\u30ea\u3068\u30bf\u30b0\u6a5f\u80fd<\/li>\n\n\n\n<li>\u30b3\u30e1\u30f3\u30c8\u6a5f\u80fd<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u30bf\u30b9\u30af\u7ba1\u7406\u30a2\u30d7\u30ea<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30bf\u30b9\u30af\u306e\u8ffd\u52a0\u3001\u7de8\u96c6\u3001\u524a\u9664\u3001\u5b8c\u4e86\u6a5f\u80fd<\/li>\n\n\n\n<li>\u671f\u9650\u65e5\u8a2d\u5b9a\u3068\u30ea\u30de\u30a4\u30f3\u30c0\u30fc\u6a5f\u80fd<\/li>\n\n\n\n<li>\u30bf\u30b9\u30af\u306e\u512a\u5148\u5ea6\u3084\u5206\u985e\u6a5f\u80fd<\/li>\n\n\n\n<li>\u30c9\u30e9\u30c3\u30b0&amp;\u30c9\u30ed\u30c3\u30d7\u3067\u306e\u4e26\u3079\u66ff\u3048<\/li>\n\n\n\n<li>\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u30c7\u30b6\u30a4\u30f3<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-183\">\u4e2d\u7d1a\u8005\u5411\u3051\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\uff082\u301c3\u30f6\u6708\uff09<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4f1a\u54e1\u5236\u30b3\u30f3\u30c6\u30f3\u30c4\u30b5\u30a4\u30c8<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u591a\u5c64\u306e\u30e6\u30fc\u30b6\u30fc\u6a29\u9650\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u7ba1\u7406\u3068\u652f\u6255\u3044\u9023\u643a<\/li>\n\n\n\n<li>\u30b3\u30f3\u30c6\u30f3\u30c4\u8a55\u4fa1\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd<\/li>\n\n\n\n<li>\u691c\u7d22\u6a5f\u80fd\u3068\u9ad8\u5ea6\u306a\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0<\/li>\n\n\n\n<li>\u7ba1\u7406\u8005\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4e88\u7d04\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30ab\u30ec\u30f3\u30c0\u30fc\u9023\u643a\u306b\u3088\u308b\u30ea\u30bd\u30fc\u30b9\u4e88\u7d04<\/li>\n\n\n\n<li>\u4e88\u7d04\u306e\u4f5c\u6210\u3001\u5909\u66f4\u3001\u30ad\u30e3\u30f3\u30bb\u30eb\u30d5\u30ed\u30fc<\/li>\n\n\n\n<li>\u4e88\u7d04\u78ba\u8a8d\u30e1\u30fc\u30eb\u306e\u81ea\u52d5\u9001\u4fe1<\/li>\n\n\n\n<li>\u7ba1\u7406\u8005\u627f\u8a8d\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/li>\n\n\n\n<li>\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u6a5f\u80fd<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-184\">\u4e0a\u7d1a\u8005\u5411\u3051\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\uff083\u301c6\u30f6\u6708\uff09<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>EC\u30b5\u30a4\u30c8<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5546\u54c1\u30ab\u30bf\u30ed\u30b0\u3068\u691c\u7d22\u6a5f\u80fd<\/li>\n\n\n\n<li>\u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30ab\u30fc\u30c8\u3068\u6ce8\u6587\u51e6\u7406<\/li>\n\n\n\n<li>\u8907\u6570\u306e\u6c7a\u6e08\u65b9\u6cd5\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u5728\u5eab\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u9867\u5ba2\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u6ce8\u6587\u5c65\u6b74<\/li>\n\n\n\n<li>\u30ec\u30d3\u30e5\u30fc\u3068\u8a55\u4fa1\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u7ba1\u7406\u8005\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>SaaS\u578b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8\u5bfe\u5fdc<\/li>\n\n\n\n<li>API\u3068Webhook\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>\u9ad8\u5ea6\u306a\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u4f7f\u7528\u91cf\u30d9\u30fc\u30b9\u306e\u8ab2\u91d1\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u901a\u77e5\u3068\u30a4\u30d9\u30f3\u30c8\u51e6\u7406<\/li>\n\n\n\n<li>\u5206\u6790\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9<\/li>\n\n\n\n<li>\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9032\u3081\u308b\u969b\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\u306f\u3001\u300c\u5b8c\u74a7\u300d\u3092\u76ee\u6307\u3059\u306e\u3067\u306f\u306a\u304f\u3001\u307e\u305a\u52d5\u304f\u3082\u306e\u3092\u4f5c\u308a\u3001\u5f90\u3005\u306b\u6a5f\u80fd\u3092\u8ffd\u52a0\u3057\u3066\u3044\u304f\u3053\u3068\u3067\u3059\u3002MVP\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u63a1\u7528\u3057\u3001\u57fa\u672c\u6a5f\u80fd\u304b\u3089\u59cb\u3081\u3066\u6bb5\u968e\u7684\u306b\u62e1\u5f35\u3059\u308b\u3053\u3068\u3067\u3001\u30e2\u30c1\u30d9\u30fc\u30b7\u30e7\u30f3\u3092\u7dad\u6301\u3057\u306a\u304c\u3089\u7740\u5b9f\u306b\u30b9\u30ad\u30eb\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-185\">\u8ee2\u8077\u30fb\u30ad\u30e3\u30ea\u30a2\u30a2\u30c3\u30d7\u306b\u6d3b\u304b\u3059\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u306e\u4f5c\u308a\u65b9<\/h3>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30b9\u30ad\u30eb\u3092\u8eab\u306b\u3064\u3051\u305f\u3089\u3001\u305d\u308c\u3092\u6d3b\u304b\u3057\u3066\u8ee2\u8077\u3084\u30ad\u30e3\u30ea\u30a2\u30a2\u30c3\u30d7\u3092\u76ee\u6307\u3057\u305f\u3044\u3068\u8003\u3048\u308b\u65b9\u3082\u591a\u3044\u3067\u3057\u3087\u3046\u3002\u52b9\u679c\u7684\u306a\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u306e\u4f5c\u6210\u3068\u6d3b\u7528\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-186\">1. \u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u306b\u542b\u3081\u308b\u3079\u304d\u8981\u7d20<\/h4>\n\n\n\n<p><strong>\u6280\u8853\u529b\u3092\u793a\u3059\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5b9f\u7528\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/strong>: \u5358\u306a\u308b\u7fd2\u4f5c\u3067\u306f\u306a\u304f\u3001\u5b9f\u969b\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/li>\n\n\n\n<li><strong>\u30b3\u30fc\u30c9\u306e\u54c1\u8cea<\/strong>: \u30af\u30ea\u30fc\u30f3\u30b3\u30fc\u30c9\u3001\u9069\u5207\u306a\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u3001\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8<\/li>\n\n\n\n<li><strong>\u6280\u8853\u30b9\u30bf\u30c3\u30af\u306e\u591a\u69d8\u6027<\/strong>: \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u6280\u8853\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001API\u306a\u3069\u8907\u5408\u7684\u306a\u30b9\u30ad\u30eb\u306e\u8a3c\u660e<\/li>\n\n\n\n<li><strong>\u30c7\u30e2\u30b5\u30a4\u30c8<\/strong>: \u5b9f\u969b\u306b\u52d5\u4f5c\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3078\u306e\u30ea\u30f3\u30af<\/li>\n<\/ul>\n\n\n\n<p><strong>GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u6574\u5099:<\/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=\"\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\/\n\u251c\u2500\u2500 README.md           # \u8a73\u7d30\u306a\u8aac\u660e\u3068\u4f7f\u7528\u65b9\u6cd5\n\u251c\u2500\u2500 CONTRIBUTING.md     # \u8ca2\u732e\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\n\u251c\u2500\u2500 .github\/            # GitHub Actions CI\/CD\u306e\u8a2d\u5b9a\n\u251c\u2500\u2500 src\/                # \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\n\u251c\u2500\u2500 tests\/              # \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\n\u251c\u2500\u2500 docs\/               # \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\n\u2514\u2500\u2500 docker\/             # Docker\u8a2d\u5b9a\n<\/pre>\n\n\n\n<p><strong>README.md\u306e\u7406\u60f3\u7684\u306a\u69cb\u6210:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6982\u8981\u3068\u76ee\u7684<\/li>\n\n\n\n<li>\u4f7f\u7528\u6280\u8853\u3068\u30d0\u30fc\u30b8\u30e7\u30f3<\/li>\n\n\n\n<li>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u3068\u52d5\u4f5c\u74b0\u5883<\/li>\n\n\n\n<li>\u4e3b\u8981\u6a5f\u80fd\u3068\u4f7f\u7528\u4f8b\uff08\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u4ed8\u304d\uff09<\/li>\n\n\n\n<li>\u6280\u8853\u7684\u306a\u7279\u5fb4\u3084\u5de5\u592b\u3057\u305f\u70b9<\/li>\n\n\n\n<li>\u5c06\u6765\u306e\u62e1\u5f35\u8a08\u753b<\/li>\n\n\n\n<li>\u30e9\u30a4\u30bb\u30f3\u30b9\u60c5\u5831<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-187\">2. \u52b9\u679c\u7684\u306a\u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u306e\u4f8b<\/h4>\n\n\n\n<p><strong>\u4f8b1: EC\u30b5\u30a4\u30c8\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># ShopMaster - \u30e2\u30c0\u30f3PHP EC\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\n\n## \u6982\u8981\nShopMaster\u306f\u3001Laravel\u3092\u4f7f\u7528\u3057\u3066\u69cb\u7bc9\u3055\u308c\u305f\u5b8c\u5168\u6a5f\u80fd\u306eEC\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067\u3059\u3002\u4e2d\u5c0f\u898f\u6a21\u306e\u30aa\u30f3\u30e9\u30a4\u30f3\u30b7\u30e7\u30c3\u30d7\u904b\u55b6\u8005\u5411\u3051\u306b\u3001\u5546\u54c1\u7ba1\u7406\u3001\u6ce8\u6587\u51e6\u7406\u3001\u9867\u5ba2\u7ba1\u7406\u3001\u652f\u6255\u3044\u7d71\u5408\u306a\u3069\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\n\n## \u6280\u8853\u30b9\u30bf\u30c3\u30af\n- Laravel 10.x\n- MySQL 8.0\n- Vue.js 3\n- Tailwind CSS\n- Stripe\u6c7a\u6e08\u9023\u643a\n- Docker\/Docker Compose\n\n## \u4e3b\u8981\u6a5f\u80fd\n- \u5546\u54c1\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\uff08\u30ab\u30c6\u30b4\u30ea\u3001\u30bf\u30b0\u3001\u5c5e\u6027\u3001\u5728\u5eab\u7ba1\u7406\uff09\n- \u30b7\u30e7\u30c3\u30d4\u30f3\u30b0\u30ab\u30fc\u30c8\u3068\u6ce8\u6587\u51e6\u7406\n- \u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u3068\u6a29\u9650\u7ba1\u7406\n- Stripe\u6c7a\u6e08\u7d71\u5408\n- \u7ba1\u7406\u8005\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\n- \u30ec\u30dd\u30fc\u30c8\u751f\u6210\u3068\u5206\u6790\n- REST API\uff08\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u9023\u643a\u7528\uff09\n\n## \u6280\u8853\u7684\u306a\u7279\u5fb4\n- \u30ea\u30dd\u30b8\u30c8\u30ea\u30d1\u30bf\u30fc\u30f3\u306e\u63a1\u7528\u306b\u3088\u308b\u758e\u7d50\u5408\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\n- \u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u578b\u306e\u6ce8\u6587\u51e6\u7406\u30d5\u30ed\u30fc\n- PHPUnit\u306b\u3088\u308b\u5e83\u7bc4\u56f2\u306a\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\uff08\u73fe\u572885%\uff09\n- Laravel Horizon\u3092\u4f7f\u7528\u3057\u305f\u975e\u540c\u671f\u30b8\u30e7\u30d6\u51e6\u7406\n- Docker\u5316\u306b\u3088\u308b\u7c21\u5358\u306a\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3068\u74b0\u5883\u306e\u4e00\u8cab\u6027\n\n## \u30c7\u30e2\u3068\u753b\u50cf\n- [\u30c7\u30e2\u30b5\u30a4\u30c8](https:\/\/shopmaster-demo.example.com)\n- [\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8](docs\/screenshots\/)\n<\/pre>\n\n\n\n<p><strong>\u4f8b2: API\u30d9\u30fc\u30b9\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u30c4\u30fc\u30eb<\/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=\"\"># TaskHub - \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406API\n\n## \u6982\u8981\nTaskHub\u306f\u3001Slim Framework\u3092\u4f7f\u7528\u3057\u3066\u69cb\u7bc9\u3055\u308c\u305f\u8efd\u91cf\u3067\u9ad8\u6027\u80fd\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406API\u3067\u3059\u3002SPA\u3084\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3068\u3057\u3066\u6a5f\u80fd\u3057\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30bf\u30b9\u30af\u3001\u30c1\u30fc\u30e0\u7ba1\u7406\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\n\n## \u6280\u8853\u30b9\u30bf\u30c3\u30af\n- Slim Framework 4\n- PostgreSQL\n- JWT\u8a8d\u8a3c\n- OpenAPI\/Swagger\n- Docker\/Docker Compose\n\n## API\u6a5f\u80fd\n- \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\/\u30bf\u30b9\u30af\/\u30b5\u30d6\u30bf\u30b9\u30af\u306e\u7ba1\u7406\n- \u30e6\u30fc\u30b6\u30fc\u3068\u30c1\u30fc\u30e0\u7ba1\u7406\n- \u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n- \u30a4\u30d9\u30f3\u30c8\u901a\u77e5\n- \u30ec\u30dd\u30fc\u30c8\u751f\u6210\n\n## \u6280\u8853\u7684\u306a\u7279\u5fb4\n- \u30af\u30ea\u30fc\u30f3\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u63a1\u7528\n- \u5305\u62ec\u7684\u306aAPI\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\uff08OpenAPI\/Swagger\uff09\n- \u9ad8\u5ea6\u306a\u8a8d\u8a3c\u3068\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0\n- PHPUnit\u306b\u3088\u308b\u5358\u4f53\u30c6\u30b9\u30c8\u3068\u7d71\u5408\u30c6\u30b9\u30c8\n- PSR-12\u6e96\u62e0\u306e\u30b3\u30fc\u30c9\u30b9\u30bf\u30a4\u30eb\n- 1\u79d2\u3042\u305f\u308a1,000\u30ea\u30af\u30a8\u30b9\u30c8\u4ee5\u4e0a\u306e\u51e6\u7406\u80fd\u529b\n\n## \u30c7\u30e2\u3068\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\n- [API\u4ed5\u69d8\u66f8](https:\/\/api-docs.taskhub-example.com)\n- [\u8a8d\u8a3c\u30d5\u30ed\u30fc\u56f3](docs\/auth-flow.png)\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-188\">3. \u30dd\u30fc\u30c8\u30d5\u30a9\u30ea\u30aa\u306e\u52b9\u679c\u7684\u306a\u6d3b\u7528\u6cd5<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6280\u8853\u30d6\u30ed\u30b0\u3068\u306e\u9023\u643a<\/strong>: \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u958b\u767a\u904e\u7a0b\u3084\u6280\u8853\u7684\u306a\u6c7a\u65ad\u306b\u3064\u3044\u3066\u8a18\u4e8b\u3092\u66f8\u304f<\/li>\n\n\n\n<li><strong>\u6280\u8853\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3067\u306e\u5171\u6709<\/strong>: \u52c9\u5f37\u4f1a\u3084\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u3067\u306e\u767a\u8868\u3001\u30aa\u30f3\u30e9\u30a4\u30f3\u30d5\u30a9\u30fc\u30e9\u30e0\u3067\u306e\u5171\u6709<\/li>\n\n\n\n<li><strong>\u7d99\u7d9a\u7684\u306a\u6539\u5584<\/strong>: \u5b9a\u671f\u7684\u306b\u30b3\u30fc\u30c9\u3092\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3057\u3001\u65b0\u3057\u3044\u6280\u8853\u3084\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u53d6\u308a\u5165\u308c\u308b<\/li>\n\n\n\n<li><strong>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3078\u306e\u8ca2\u732e<\/strong>: \u81ea\u5206\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4e00\u90e8\u3092\u30d1\u30c3\u30b1\u30fc\u30b8\u3068\u3057\u3066\u516c\u958b\u3059\u308b<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-189\">4. \u30ad\u30e3\u30ea\u30a2\u30a2\u30c3\u30d7\u306e\u305f\u3081\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u6d3b\u52d5<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6280\u8853\u52c9\u5f37\u4f1a\u3078\u306e\u53c2\u52a0<\/strong>: \u5730\u57df\u306ePHP\u30e6\u30fc\u30b6\u30fc\u30b0\u30eb\u30fc\u30d7\u3084\u3001\u7279\u5b9a\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30a4\u30d9\u30f3\u30c8\u306b\u53c2\u52a0<\/li>\n\n\n\n<li><strong>\u30aa\u30f3\u30e9\u30a4\u30f3\u30d5\u30a9\u30fc\u30e9\u30e0\u3067\u306e\u8cea\u554f\u3078\u306e\u56de\u7b54<\/strong>: Stack Overflow\u3084Laravel Forum\u306a\u3069\u3067\u8cea\u554f\u306b\u7b54\u3048\u308b\u3053\u3068\u3067\u30b9\u30ad\u30eb\u3092\u78e8\u304f<\/li>\n\n\n\n<li><strong>\u6280\u8853\u30d6\u30ed\u30b0\u306e\u904b\u55b6<\/strong>: \u5b66\u7fd2\u3057\u305f\u5185\u5bb9\u3084\u7d4c\u9a13\u3092\u5171\u6709\u3059\u308b\u3053\u3068\u3067\u77e5\u8b58\u306e\u5b9a\u7740\u3068\u767a\u4fe1\u529b\u3092\u9ad8\u3081\u308b<\/li>\n\n\n\n<li><strong>\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u3067\u306e\u767b\u58c7<\/strong>: PHP\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u306a\u3069\u3067\u306e\u767a\u8868\u3092\u76ee\u6307\u3059<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-190\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u3067\u5b66\u7fd2\u52b9\u7387\u304c\u5909\u308f\u308b<\/h3>\n\n\n\n<p>\u5404PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u5b66\u7fd2\u66f2\u7dda\u3084\u7fd2\u5f97\u96e3\u6613\u5ea6\u304c\u7570\u306a\u308a\u307e\u3059\u3002\u81ea\u5206\u306e\u5b66\u7fd2\u30b9\u30bf\u30a4\u30eb\u3084\u76ee\u6a19\u306b\u5408\u3063\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u3053\u3068\u3067\u3001\u5b66\u7fd2\u52b9\u7387\u3092\u5927\u5e45\u306b\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-191\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5225\u306e\u5b66\u7fd2\u7279\u6027\u6bd4\u8f03<\/h4>\n\n\n<div id=\"id-b24b76e1-f2c4-481a-9d52-6863728c60ea\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u5b66\u7fd2\u66f2\u7dda<\/th><th>\u751f\u7523\u6027\u307e\u3067\u306e\u6642\u9593<\/th><th>\u521d\u5fc3\u8005\u5411\u3051<\/th><th>\u5b66\u7fd2\u306e\u7279\u5fb4<\/th><\/tr><\/thead><tbody><tr><td><strong>Laravel<\/strong><\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u77ed\u3044<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u8c4a\u5bcc\u306a\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3001\u76f4\u611f\u7684\u306aAPI\u3001\u3059\u3050\u306b\u5b9f\u7528\u7684\u306a\u30a2\u30d7\u30ea\u304c\u4f5c\u308c\u308b<\/td><\/tr><tr><td><strong>Symfony<\/strong><\/td><td>\u6025<\/td><td>\u9577\u3044<\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u5805\u7262\u306a\u8a2d\u8a08\u539f\u5247\u306e\u7fd2\u5f97\u3001\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u30b9\u30ad\u30eb\u7372\u5f97<\/td><\/tr><tr><td><strong>CodeIgniter<\/strong><\/td><td>\u7de9\u3084\u304b<\/td><td>\u975e\u5e38\u306b\u77ed\u3044<\/td><td>\u2605\u2605\u2605\u2605\u2605<\/td><td>\u30b7\u30f3\u30d7\u30eb\u3067\u7406\u89e3\u3057\u3084\u3059\u3044\u69cb\u9020\u3001PHP\u306e\u57fa\u672c\u6982\u5ff5\u3068\u306e\u9023\u643a\u304c\u660e\u78ba<\/td><\/tr><tr><td><strong>CakePHP<\/strong><\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u2605\u2605\u2605\u2605\u2606<\/td><td>\u898f\u7d04\u30d9\u30fc\u30b9\u306e\u8003\u3048\u65b9\u3092\u5b66\u3079\u308b\u3001\u81ea\u52d5\u751f\u6210\u30c4\u30fc\u30eb\u3067\u7d20\u65e9\u304f\u7406\u89e3<\/td><\/tr><tr><td><strong>Yii<\/strong><\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u2605\u2605\u2605\u2606\u2606<\/td><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u91cd\u8996\u306e\u8a2d\u8a08\u3001\u5b9f\u7528\u7684\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u7fd2\u5f97<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-192\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u306e\u30dd\u30a4\u30f3\u30c8<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u521d\u5fc3\u8005\u306e\u5834\u5408<\/strong>: Laravel\u3084CodeIgniter\u306f\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u304c\u8c4a\u5bcc\u3067\u3001\u6bd4\u8f03\u7684\u65e9\u304f\u6210\u679c\u3092\u51fa\u305b\u308b\u305f\u3081\u3001\u30e2\u30c1\u30d9\u30fc\u30b7\u30e7\u30f3\u7dad\u6301\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u65e2\u5b58\u306ePHP\u7d4c\u9a13\u304c\u3042\u308b\u5834\u5408<\/strong>: Symfony\u306f\u9ad8\u5ea6\u306a\u8a2d\u8a08\u30d1\u30bf\u30fc\u30f3\u3092\u5b66\u3079\u308b\u305f\u3081\u3001\u30ad\u30e3\u30ea\u30a2\u306e\u9577\u671f\u7684\u306a\u8996\u70b9\u3067\u306f\u4fa1\u5024\u304c\u9ad8\u3044\u30b9\u30ad\u30eb\u3092\u5f97\u3089\u308c\u307e\u3059\u3002<\/li>\n\n\n\n<li><strong>\u7279\u5b9a\u306e\u7528\u9014\u306b\u7279\u5316\u3057\u305f\u3044\u5834\u5408<\/strong>:\n<ul class=\"wp-block-list\">\n<li>API\u958b\u767a\u306b\u6ce8\u529b\u3057\u305f\u3044\u5834\u5408: Slim<\/li>\n\n\n\n<li>\u9ad8\u8ca0\u8377\u30b5\u30fc\u30d3\u30b9\u306e\u958b\u767a: Yii<\/li>\n\n\n\n<li>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b7\u30b9\u30c6\u30e0: Symfony, Laminas<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5b66\u7fd2\u6642\u9593\u304c\u9650\u3089\u308c\u3066\u3044\u308b\u5834\u5408<\/strong>: CodeIgniter\u306f\u6700\u3082\u77ed\u671f\u9593\u3067\u57fa\u672c\u3092\u7fd2\u5f97\u3067\u304d\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-193\">\u5b66\u7fd2\u306b\u304a\u3051\u308b\u5171\u901a\u306e\u969c\u58c1\u3068\u89e3\u6c7a\u7b56<\/h4>\n\n\n\n<p><strong>1. \u60c5\u5831\u904e\u591a\u306b\u3088\u308b\u6df7\u4e71<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u7b56<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u5358\u4e00\u306e\u6a29\u5a01\u3042\u308b\u30ea\u30bd\u30fc\u30b9\uff08\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306a\u3069\uff09\u306b\u96c6\u4e2d\u3059\u308b<\/li>\n\n\n\n<li>\u5b66\u7fd2\u8a08\u753b\u3092\u7acb\u3066\u3001\u6bb5\u968e\u7684\u306b\u9032\u3081\u308b<\/li>\n\n\n\n<li>\u300c\u5b8c\u74a7\u306b\u7406\u89e3\u3057\u3066\u304b\u3089\u6b21\u306b\u9032\u3080\u300d\u3068\u3044\u3046\u8003\u3048\u3092\u6368\u3066\u3001\u53cd\u5fa9\u5b66\u7fd2\u3092\u884c\u3046<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>2. \u5b9f\u8df5\u4e0d\u8db3\u306b\u3088\u308b\u77e5\u8b58\u306e\u5b9a\u7740\u4e0d\u8db3<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u7b56<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u5b66\u3093\u3060\u5185\u5bb9\u3092\u3059\u3050\u306b\u5b9f\u8df5\u3059\u308b\u300c\u5b66\u7fd2\u2192\u5b9f\u8df5\u2192\u632f\u308a\u8fd4\u308a\u300d\u30b5\u30a4\u30af\u30eb\u3092\u78ba\u7acb<\/li>\n\n\n\n<li>\u5c0f\u3055\u306a\u6a5f\u80fd\u304b\u3089\u5b9f\u88c5\u3057\u3001\u5f90\u3005\u306b\u8907\u96d1\u306a\u3082\u306e\u306b\u6311\u6226<\/li>\n\n\n\n<li>\u500b\u4eba\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6301\u3061\u3001\u7d99\u7d9a\u7684\u306b\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u7fd2\u6163\u3092\u3064\u3051\u308b<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>3. \u30e2\u30c1\u30d9\u30fc\u30b7\u30e7\u30f3\u7dad\u6301\u306e\u96e3\u3057\u3055<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u7b56<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u77ed\u671f\u7684\u306a\u76ee\u6a19\u3068\u9577\u671f\u7684\u306a\u76ee\u6a19\u3092\u30d0\u30e9\u30f3\u30b9\u3088\u304f\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u6210\u679c\u3092\u53ef\u8996\u5316\u3057\u3001\u5c0f\u3055\u306a\u6210\u529f\u4f53\u9a13\u3092\u7a4d\u307f\u91cd\u306d\u308b<\/li>\n\n\n\n<li>\u5b66\u7fd2\u4ef2\u9593\u3084\u6280\u8853\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3059\u308b<\/li>\n\n\n\n<li>\u5b9f\u7528\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u53d6\u308a\u7d44\u307f\u3001\u5b9f\u969b\u306e\u554f\u984c\u89e3\u6c7a\u3092\u7d4c\u9a13\u3059\u308b<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>4. \u65b0\u3057\u3044\u6982\u5ff5\u7406\u89e3\u306e\u58c1<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u89e3\u6c7a\u7b56<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u8907\u96d1\u306a\u6982\u5ff5\u306f\u8907\u6570\u306e\u7570\u306a\u308b\u8aac\u660e\u3067\u7406\u89e3\u3092\u8a66\u307f\u308b<\/li>\n\n\n\n<li>\u5b9f\u969b\u306b\u30b3\u30fc\u30c9\u3092\u66f8\u3044\u3066\u307f\u3066\u3001\u52d5\u4f5c\u3092\u78ba\u8a8d\u3057\u306a\u304c\u3089\u7406\u89e3\u3092\u6df1\u3081\u308b<\/li>\n\n\n\n<li>\u8ab0\u304b\u306b\u6559\u3048\u308b\u3053\u3068\u3067\u7406\u89e3\u3092\u78ba\u5b9f\u306b\u3059\u308b\uff08\u30e9\u30d0\u30fc\u30c0\u30c3\u30af\u30fb\u30c7\u30d0\u30c3\u30ae\u30f3\u30b0\uff09<\/li>\n\n\n\n<li>\u5206\u304b\u3089\u306a\u3044\u3053\u3068\u3092\u305d\u306e\u307e\u307e\u306b\u305b\u305a\u3001\u8cea\u554f\u3084\u8abf\u67fb\u3067\u89e3\u6c7a\u3059\u308b\u7fd2\u6163\u3092\u3064\u3051\u308b<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-194\">\u5c02\u9580\u5bb6\u3078\u306e\u9053\uff1a\u8a8d\u5b9a\u8cc7\u683c\u3068\u5c02\u9580\u6027\u306e\u78ba\u7acb<\/h3>\n\n\n\n<p>\u3088\u308a\u9ad8\u3044\u30ec\u30d9\u30eb\u3067\u30ad\u30e3\u30ea\u30a2\u3092\u7bc9\u304f\u305f\u3081\u306b\u306f\u3001\u5c02\u9580\u6027\u306e\u78ba\u7acb\u3084\u8a8d\u5b9a\u8cc7\u683c\u306e\u53d6\u5f97\u304c\u6709\u52b9\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-195\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u8a8d\u5b9a\u8cc7\u683c\u30d7\u30ed\u30b0\u30e9\u30e0<\/h4>\n\n\n<div id=\"id-e61aee70-3014-4a15-8cf7-5feb6596daaa\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u8a8d\u5b9a\u8cc7\u683c<\/th><th>\u8a73\u7d30<\/th><th>URL<\/th><\/tr><\/thead><tbody><tr><td><strong>Symfony<\/strong><\/td><td>Symfony Certification<\/td><td>SensioLabs\u304c\u63d0\u4f9b\u3059\u308b\u516c\u5f0f\u8a8d\u5b9a\u8cc7\u683c\u3002Symfony\u306e\u4e3b\u8981\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u57fa\u672c\u6982\u5ff5\u306b\u95a2\u3059\u308b\u77e5\u8b58\u3092\u8a3c\u660e\u3067\u304d\u307e\u3059\u3002<\/td><td><a href=\"https:\/\/certification.symfony.com\/\">https:\/\/certification.symfony.com\/<\/a><\/td><\/tr><tr><td><strong>Laravel<\/strong><\/td><td>Laravel Certification Program<\/td><td>Laravel\u516c\u5f0f\u306e\u8a8d\u5b9a\u30d7\u30ed\u30b0\u30e9\u30e0\u3002Laravel\u306e\u30b3\u30a2\u6a5f\u80fd\u3068\u4e3b\u8981\u30b3\u30f3\u30bb\u30d7\u30c8\u306b\u95a2\u3059\u308b\u77e5\u8b58\u3092\u8a3c\u660e\u3067\u304d\u307e\u3059\u3002<\/td><td><a href=\"https:\/\/certification.laravel.com\/\">https:\/\/certification.laravel.com\/<\/a><\/td><\/tr><tr><td><strong>PHP\uff08\u4e00\u822c\uff09<\/strong><\/td><td>Zend PHP Certification<\/td><td>PHP\u305d\u306e\u3082\u306e\u306e\u77e5\u8b58\u3092\u8a3c\u660e\u3059\u308b\u8a8d\u5b9a\u8a66\u9a13\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5b66\u7fd2\u306e\u57fa\u790e\u3068\u306a\u308a\u307e\u3059\u3002<\/td><td><a href=\"https:\/\/www.zend.com\/training\/php-certification\">https:\/\/www.zend.com\/training\/php-certification<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-196\">\u5c02\u9580\u6027\u306e\u78ba\u7acb<\/h4>\n\n\n\n<p>\u7279\u5b9a\u306e\u9818\u57df\u3067\u5c02\u9580\u6027\u3092\u9ad8\u3081\u308b\u3053\u3068\u3067\u3001\u5e02\u5834\u4fa1\u5024\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u696d\u754c\u7279\u5316\u578b\u306e\u5c02\u9580\u5bb6\u306b\u306a\u308b<\/strong>:\n<ul class=\"wp-block-list\">\n<li>EC\u30b5\u30a4\u30c8\u958b\u767a\u306e\u30b9\u30da\u30b7\u30e3\u30ea\u30b9\u30c8<\/li>\n\n\n\n<li>\u91d1\u878d\u7cfb\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u306e\u5c02\u9580\u5bb6<\/li>\n\n\n\n<li>\u533b\u7642\u7cfb\u60c5\u5831\u30b7\u30b9\u30c6\u30e0\u306e\u5c02\u9580\u5bb6<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u6280\u8853\u9818\u57df\u306e\u5c02\u9580\u5bb6\u306b\u306a\u308b<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5c02\u9580\u5bb6<\/li>\n\n\n\n<li>\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u8a2d\u8a08\u306e\u30b9\u30da\u30b7\u30e3\u30ea\u30b9\u30c8<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u81ea\u52d5\u5316\u306e\u5c02\u9580\u5bb6<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u5c02\u9580\u77e5\u8b58\u306e\u767a\u4fe1<\/strong>:\n<ul class=\"wp-block-list\">\n<li>\u6280\u8853\u30d6\u30ed\u30b0\u306e\u904b\u55b6<\/li>\n\n\n\n<li>\u6280\u8853\u66f8\u7c4d\u306e\u57f7\u7b46<\/li>\n\n\n\n<li>\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u3067\u306e\u767b\u58c7<\/li>\n\n\n\n<li>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3078\u306e\u8ca2\u732e<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-197\">\u307e\u3068\u3081\uff1a\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u3068\u5b9f\u8df5\u306e\u91cd\u8981\u6027<\/h3>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7fd2\u5f97\u306f\u4e00\u671d\u4e00\u5915\u3067\u306f\u9054\u6210\u3067\u304d\u307e\u305b\u3093\u3002\u3057\u304b\u3057\u3001\u6bb5\u968e\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3068\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u30fb\u5b9f\u8df5\u306b\u3088\u3063\u3066\u3001\u52b9\u7387\u7684\u306b\u30b9\u30ad\u30eb\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u52b9\u679c\u7684\u306a\u5b66\u7fd2\u30b5\u30a4\u30af\u30eb\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u57fa\u790e\u77e5\u8b58\u306e\u7fd2\u5f97<\/strong>: PHP\u306e\u57fa\u672c\u304b\u3089\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6982\u5ff5\u307e\u3067\u3001\u571f\u53f0\u3068\u306a\u308b\u77e5\u8b58\u3092\u56fa\u3081\u308b<\/li>\n\n\n\n<li><strong>\u5c0f\u3055\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5b9f\u88c5<\/strong>: \u7fd2\u5f97\u3057\u305f\u77e5\u8b58\u3092\u3059\u3050\u306b\u5b9f\u8df5\u306b\u79fb\u3057\u3001\u5c0f\u3055\u306a\u6210\u529f\u4f53\u9a13\u3092\u7a4d\u307f\u91cd\u306d\u308b<\/li>\n\n\n\n<li><strong>\u632f\u308a\u8fd4\u308a\u3068\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0<\/strong>: \u5b9f\u88c5\u3057\u305f\u30b3\u30fc\u30c9\u3092\u898b\u76f4\u3057\u3001\u3088\u308a\u826f\u3044\u5b9f\u88c5\u65b9\u6cd5\u3092\u5b66\u3076<\/li>\n\n\n\n<li><strong>\u65b0\u3057\u3044\u6982\u5ff5\u3068\u5fdc\u7528\u6280\u8853\u306e\u7fd2\u5f97<\/strong>: \u3088\u308a\u9ad8\u5ea6\u306a\u6982\u5ff5\u3084\u6280\u8853\u3092\u5b66\u3073\u3001\u30b9\u30ad\u30eb\u306e\u5e45\u3092\u5e83\u3052\u308b<\/li>\n\n\n\n<li><strong>\u5b9f\u52d9\u30ec\u30d9\u30eb\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5b9f\u88c5<\/strong>: \u5b9f\u8df5\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u901a\u3058\u3066\u7dcf\u5408\u7684\u306a\u30b9\u30ad\u30eb\u3092\u78e8\u304f<\/li>\n\n\n\n<li><strong>\u77e5\u8b58\u306e\u5171\u6709\u3068\u767a\u4fe1<\/strong>: \u5b66\u3093\u3060\u3053\u3068\u3092\u4ed6\u8005\u306b\u6559\u3048\u308b\u3053\u3068\u3067\u77e5\u8b58\u3092\u5b9a\u7740\u3055\u305b\u308b<\/li>\n<\/ol>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u4e16\u754c\u306f\u5e38\u306b\u9032\u5316\u3057\u3066\u3044\u307e\u3059\u3002\u65b0\u3057\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u3001\u65b0\u3057\u3044\u6280\u8853\u3001\u65b0\u3057\u3044\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u7d99\u7d9a\u7684\u306b\u5b66\u3073\u7d9a\u3051\u308b\u3053\u3068\u304c\u3001\u9577\u671f\u7684\u306a\u30ad\u30e3\u30ea\u30a2\u6210\u529f\u306e\u9375\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6700\u5f8c\u306b\u3001\u5b66\u7fd2\u306e\u904e\u7a0b\u3067\u56f0\u96e3\u306b\u76f4\u9762\u3059\u308b\u3053\u3068\u3082\u3042\u308b\u3067\u3057\u3087\u3046\u304c\u3001\u305d\u308c\u306f\u6210\u9577\u306e\u8a3c\u3067\u3059\u3002\u7c98\u308a\u5f37\u304f\u53d6\u308a\u7d44\u307f\u3001\u5c11\u3057\u305a\u3064\u3067\u3082\u524d\u9032\u3057\u7d9a\u3051\u308b\u3053\u3068\u3067\u3001\u5fc5\u305a\u76ee\u6a19\u306b\u5230\u9054\u3067\u304d\u308b\u306f\u305a\u3067\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u3044\u3053\u306a\u305b\u308b\u3088\u3046\u306b\u306a\u308c\u3070\u3001\u3042\u306a\u305f\u306e\u958b\u767a\u52b9\u7387\u3068\u53ef\u80fd\u6027\u306f\u5927\u304d\u304f\u5e83\u304c\u308a\u307e\u3059\u3002\u305c\u3072\u3053\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7\u3092\u53c2\u8003\u306b\u3001PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7fd2\u5f97\u306b\u6311\u6226\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-198\">\u682a\u5f0f\u4f1a\u793eDexall\u304c\u9078\u3076PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u5c0e\u5165\u4e8b\u4f8b<\/h2>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9078\u5b9a\u306f\u3001Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306e\u6210\u5426\u3092\u5de6\u53f3\u3059\u308b\u91cd\u8981\u306a\u610f\u601d\u6c7a\u5b9a\u3067\u3059\u3002\u9069\u5207\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u3076\u3053\u3068\u3067\u3001\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a\u3001\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u6539\u5584\u3001\u4fdd\u5b88\u6027\u306e\u78ba\u4fdd\u306a\u3069\u3001\u591a\u304f\u306e\u30e1\u30ea\u30c3\u30c8\u3092\u4eab\u53d7\u3067\u304d\u307e\u3059\u3002\u4e00\u65b9\u3067\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u306a\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u629e\u3057\u3066\u3057\u307e\u3046\u3068\u3001\u958b\u767a\u306e\u9045\u5ef6\u3084\u4fdd\u5b88\u30b3\u30b9\u30c8\u306e\u5897\u5927\u306a\u3069\u3001\u69d8\u3005\u306a\u554f\u984c\u3092\u5f15\u304d\u8d77\u3053\u3059\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5f53\u793e\u3067\u306f\u9577\u5e74\u306b\u308f\u305f\u308a\u69d8\u3005\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u6d3b\u7528\u3057\u3066\u304d\u305f\u7d4c\u9a13\u304b\u3089\u3001\u305d\u308c\u305e\u308c\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u6027\u3068\u9069\u6750\u9069\u6240\u3092\u898b\u6975\u3081\u308b\u30ce\u30a6\u30cf\u30a6\u3092\u84c4\u7a4d\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u672c\u8a18\u4e8b\u3067\u306f\u30012024\u5e74\u73fe\u5728\u306e\u4e3b\u8981PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u7d39\u4ecb\u3059\u308b\u3068\u3068\u3082\u306b\u3001\u5f53\u793e\u306e\u5c0e\u5165\u4e8b\u4f8b\u3092\u3082\u3068\u306b\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u5177\u4f53\u7684\u306a\u6307\u91dd\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-199\">\u5f53\u793e\u306e\u958b\u767a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u63a1\u7528\u3057\u3066\u3044\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<p>\u682a\u5f0f\u4f1a\u793eDexall\u3067\u306f\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30cb\u30fc\u30ba\u3084\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7279\u6027\u306b\u5fdc\u3058\u3066\u3001\u4ee5\u4e0b\u306e7\u3064\u306ePHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u3044\u5206\u3051\u3066\u3044\u307e\u3059\u3002\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u306f\u56fa\u6709\u306e\u5f37\u307f\u3068\u5f31\u307f\u304c\u3042\u308a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u3066\u6700\u9069\u306a\u3082\u306e\u3092\u9078\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-200\">1. Laravel (10.x)<\/h4>\n\n\n\n<p><strong>\u4e3b\u306a\u63a1\u7528\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: EC\u30b5\u30a4\u30c8\u30ea\u30cb\u30e5\u30fc\u30a2\u30eb\u3001\u4f1a\u54e1\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3001\u30b3\u30f3\u30c6\u30f3\u30c4\u30de\u30cd\u30b8\u30e1\u30f3\u30c8\u30b7\u30b9\u30c6\u30e0<\/p>\n\n\n\n<p>Laravel \u306f\u5f53\u793e\u3067\u6700\u3082\u591a\u304f\u63a1\u7528\u3057\u3066\u3044\u308b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002\u7279\u306b\u65e2\u5b58\u306ePHP\u958b\u767a\u7d4c\u9a13\u3092\u6301\u3064\u30c1\u30fc\u30e0\u306b\u3068\u3063\u3066\u5b66\u7fd2\u66f2\u7dda\u304c\u6bd4\u8f03\u7684\u7de9\u3084\u304b\u3067\u3001\u8c4a\u5bcc\u306a\u6a5f\u80fd\u3068\u5927\u304d\u306a\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3092\u6d3b\u304b\u3057\u305f\u958b\u767a\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u7406\u7531\u3068\u7279\u5fb4<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u69cb\u6587\u3068\u9ad8\u3044\u53ef\u8aad\u6027\u306b\u3088\u308a\u3001\u30c1\u30fc\u30e0\u958b\u767a\u306b\u304a\u3051\u308b\u77e5\u8b58\u5171\u6709\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>Eloquent ORM\u306b\u3088\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u7c21\u7d20\u5316<\/li>\n\n\n\n<li>Blade\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u306b\u3088\u308b\u52b9\u7387\u7684\u306a\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u958b\u767a<\/li>\n\n\n\n<li>\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u6a5f\u80fd\u306e\u5145\u5b9f\u306b\u3088\u308b\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u5bfe\u7b56\u306e\u5bb9\u6613\u3055<\/li>\n\n\n\n<li>Artisan\u30b3\u30de\u30f3\u30c9\u306b\u3088\u308b\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/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=\"\">\/\/ Laravel\u3067\u306e\u30b7\u30f3\u30d7\u30eb\u306a\u30eb\u30fc\u30c8\u5b9a\u7fa9\u4f8b\nRoute::get('\/users', [UserController::class, 'index']);\nRoute::post('\/users', [UserController::class, 'store']);\n\n\/\/ Eloquent ORM\u306b\u3088\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\n$users = User::where('status', 'active')\n            -&gt;orderBy('name')\n            -&gt;take(10)\n            -&gt;get();\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-201\">2. Symfony (6.4)<\/h4>\n\n\n\n<p><strong>\u4e3b\u306a\u63a1\u7528\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: \u5927\u898f\u6a21\u696d\u52d9\u30b7\u30b9\u30c6\u30e0\u3001\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3001\u9577\u671f\u4fdd\u5b88\u304c\u5fc5\u8981\u306a\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30b7\u30b9\u30c6\u30e0<\/p>\n\n\n\n<p>Symfony\u306f\u7279\u306b\u5927\u898f\u6a21\u3067\u8907\u96d1\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001\u9577\u671f\u7684\u306a\u4fdd\u5b88\u304c\u898b\u8fbc\u307e\u308c\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u7406\u7531\u3068\u7279\u5fb4<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\u306e\u8a2d\u8a08\u306b\u3088\u308a\u5fc5\u8981\u306a\u6a5f\u80fd\u306e\u307f\u3092\u9078\u629e\u53ef\u80fd<\/li>\n\n\n\n<li>\u9ad8\u5ea6\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n\n\n\n<li>\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30ec\u30d9\u30eb\u306e\u5805\u7262\u6027\u3068\u5b89\u5b9a\u6027<\/li>\n\n\n\n<li>\u8a73\u7d30\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u9577\u671f\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>PHP\u306e\u6700\u65b0\u6a5f\u80fd\u3092\u7a4d\u6975\u7684\u306b\u6d3b\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=\"\">\/\/ Symfony\u3067\u306e\u30b5\u30fc\u30d3\u30b9\u5b9a\u7fa9\u4f8b\n\/\/ services.yaml\nservices:\n    App\\Service\\UserService:\n        arguments:\n            $userRepository: '@App\\Repository\\UserRepository'\n\n\/\/ \u30b5\u30fc\u30d3\u30b9\u306e\u5229\u7528\nclass UserController extends AbstractController\n{\n    private $userService;\n    \n    public function __construct(UserService $userService)\n    {\n        $this-&gt;userService = $userService;\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-202\">3. CodeIgniter (4.x)<\/h4>\n\n\n\n<p><strong>\u4e3b\u306a\u63a1\u7528\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: \u793e\u5185\u30c4\u30fc\u30eb\u3001\u5c0f\u898f\u6a21Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u958b\u767a<\/p>\n\n\n\n<p>CodeIgniter\u306f\u7279\u306b\u958b\u767a\u901f\u5ea6\u304c\u6c42\u3081\u3089\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001\u30ea\u30bd\u30fc\u30b9\u304c\u9650\u3089\u308c\u305f\u74b0\u5883\u3067\u306e\u958b\u767a\u306b\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u7406\u7531\u3068\u7279\u5fb4<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8efd\u91cf\u3067\u9ad8\u901f\u306a\u52d5\u4f5c<\/li>\n\n\n\n<li>\u6700\u5c0f\u9650\u306e\u8a2d\u5b9a\u3067\u8fc5\u901f\u306b\u958b\u767a\u958b\u59cb\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u69cb\u9020\u306b\u3088\u308b\u5b66\u7fd2\u30b3\u30b9\u30c8\u306e\u4f4e\u3055<\/li>\n\n\n\n<li>\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u5206\u304b\u308a\u3084\u3059\u3044\u4f8b<\/li>\n\n\n\n<li>\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u304b\u3089\u306e\u79fb\u884c\u306b\u3082\u9069\u3057\u3066\u3044\u308b<\/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=\"\">\/\/ CodeIgniter\u3067\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u4f8b\nclass Users extends BaseController\n{\n    public function index()\n    {\n        $model = new UserModel();\n        $data['users'] = $model-&gt;findAll();\n        \n        return view('users\/index', $data);\n    }\n}\n<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-203\">4. CakePHP (4.x)<\/h4>\n\n\n\n<p><strong>\u4e3b\u306a\u63a1\u7528\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u591a\u7528\u3059\u308b\u30d3\u30b8\u30cd\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001CRUD\u4e2d\u5fc3\u306e\u30b7\u30b9\u30c6\u30e0<\/p>\n\n\n\n<p>CakePHP\u306f\u7279\u306b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u591a\u7528\u3059\u308b\u30b7\u30b9\u30c6\u30e0\u3084\u3001CRUD\u64cd\u4f5c\u304c\u4e2d\u5fc3\u3068\u306a\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u7406\u7531\u3068\u7279\u5fb4<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u898f\u7d04\u91cd\u8996\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308b\u958b\u767a\u52b9\u7387\u306e\u5411\u4e0a<\/li>\n\n\n\n<li>\u5f37\u529b\u306aORM\u306b\u3088\u308b\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306e\u7c21\u7d20\u5316<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u751f\u6210\u30c4\u30fc\u30eb\u306b\u3088\u308b\u53cd\u5fa9\u4f5c\u696d\u306e\u81ea\u52d5\u5316<\/li>\n\n\n\n<li>\u7d44\u307f\u8fbc\u307f\u306e\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u30b7\u30b9\u30c6\u30e0<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u6a5f\u80fd\u306e\u5145\u5b9f<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-204\">5. Yii (2.0.49)<\/h4>\n\n\n\n<p><strong>\u4e3b\u306a\u63a1\u7528\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: \u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30afWeb\u30b5\u30a4\u30c8\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u91cd\u8996\u3055\u308c\u308b\u30b7\u30b9\u30c6\u30e0<\/p>\n\n\n\n<p>Yii\u306f\u7279\u306b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u91cd\u8996\u3055\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u30b7\u30b9\u30c6\u30e0\u3067\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u7406\u7531\u3068\u7279\u5fb4<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u30ea\u30bd\u30fc\u30b9\u52b9\u7387<\/li>\n\n\n\n<li>\u5f37\u529b\u306a\u30ad\u30e3\u30c3\u30b7\u30f3\u30b0\u6a5f\u80fd<\/li>\n\n\n\n<li>DB\u62bd\u8c61\u5316\u30ec\u30a4\u30e4\u30fc\u306e\u5145\u5b9f<\/li>\n\n\n\n<li>\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3<\/li>\n\n\n\n<li>\u30a2\u30af\u30c6\u30a3\u30d6\u30ec\u30b3\u30fc\u30c9\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-205\">6. Phalcon (5.0)<\/h4>\n\n\n\n<p><strong>\u4e3b\u306a\u63a1\u7528\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: \u8d85\u9ad8\u6027\u80fd\u304c\u6c42\u3081\u3089\u308c\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3001\u30ea\u30bd\u30fc\u30b9\u5236\u7d04\u306e\u3042\u308b\u74b0\u5883<\/p>\n\n\n\n<p>Phalcon\u306f\u7279\u306b\u6975\u3081\u3066\u9ad8\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u304c\u6c42\u3081\u3089\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u7406\u7531\u3068\u7279\u5fb4<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u62e1\u5f35\u3068\u3057\u3066\u5b9f\u88c5\u3055\u308c\u305f\u8d85\u9ad8\u901f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/li>\n\n\n\n<li>\u6700\u5c0f\u9650\u306e\u30e1\u30e2\u30ea\u6d88\u8cbb<\/li>\n\n\n\n<li>\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u6a5f\u80fd\u306e\u63d0\u4f9b<\/li>\n\n\n\n<li>MVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u6bd4\u8f03\u3057\u3066\u5727\u5012\u7684\u306a\u30b9\u30d4\u30fc\u30c9<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-206\">7. Slim (4.x)<\/h4>\n\n\n\n<p><strong>\u4e3b\u306a\u63a1\u7528\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: REST API\u958b\u767a\u3001\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3001\u30b7\u30f3\u30d7\u30eb\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3<\/p>\n\n\n\n<p>Slim\u306f\u7279\u306bAPI\u958b\u767a\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306b\u57fa\u3065\u304f\u30b7\u30b9\u30c6\u30e0\u3067\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u7406\u7531\u3068\u7279\u5fb4<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8efd\u91cf\u306a\u30de\u30a4\u30af\u30ed\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/li>\n\n\n\n<li>RESTful API\u69cb\u7bc9\u306b\u6700\u9069<\/li>\n\n\n\n<li>\u6700\u5c0f\u9650\u306e\u30aa\u30fc\u30d0\u30fc\u30d8\u30c3\u30c9<\/li>\n\n\n\n<li>\u5b66\u7fd2\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u67d4\u8edf\u306a\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/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=\"\">\/\/ Slim\u3067\u306e\u30b7\u30f3\u30d7\u30eb\u306aAPI\u5b9f\u88c5\u4f8b\n$app = AppFactory::create();\n\n$app-&gt;get('\/api\/users', function (Request $request, Response $response) {\n    $users = \/* \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u30e6\u30fc\u30b6\u30fc\u53d6\u5f97 *\/;\n    $payload = json_encode($users);\n    \n    $response-&gt;getBody()-&gt;write($payload);\n    return $response-&gt;withHeader('Content-Type', 'application\/json');\n});\n\n$app-&gt;run();\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-207\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5c0e\u5165\u3067\u89e3\u6c7a\u3057\u305f3\u3064\u306e\u958b\u767a\u8ab2\u984c<\/h3>\n\n\n\n<p>\u682a\u5f0f\u4f1a\u793eDexall\u3067\u306f\u3001\u9069\u5207\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5c0e\u5165\u306b\u3088\u308a\u3001\u591a\u304f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u76f4\u9762\u3057\u3066\u3044\u305f\u958b\u767a\u8ab2\u984c\u3092\u52b9\u679c\u7684\u306b\u89e3\u6c7a\u3057\u3066\u304d\u307e\u3057\u305f\u3002\u4ee5\u4e0b\u306b\u3001\u7279\u306b\u9855\u8457\u306a\u6210\u679c\u3092\u4e0a\u3052\u305f3\u3064\u306e\u4e8b\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-208\">\u8ab2\u984c1: \u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306e\u4fdd\u5b88\u6027\u5411\u4e0a<\/h4>\n\n\n\n<p><strong>\u80cc\u666f<\/strong>: 10\u5e74\u4ee5\u4e0a\u904b\u7528\u3055\u308c\u3066\u304d\u305f\u81ea\u793e\u958b\u767a\u306eCRM\u30b7\u30b9\u30c6\u30e0\u304c\u3001\u30b9\u30d1\u30b2\u30c3\u30c6\u30a3\u30b3\u30fc\u30c9\u5316\u3057\u4fdd\u5b88\u304c\u56f0\u96e3\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002\u6a5f\u80fd\u8ffd\u52a0\u3084\u969c\u5bb3\u5bfe\u5fdc\u306b\u591a\u5927\u306a\u6642\u9593\u3092\u8981\u3057\u3001\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u3078\u306e\u5bfe\u5fdc\u304c\u9045\u308c\u304c\u3061\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/strong>: Laravel<\/p>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>MVC\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3092\u5c0e\u5165\u3057\u3001\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u6574\u7406<\/li>\n\n\n\n<li>Eloquent ORM\u3092\u6d3b\u7528\u3057\u305f\u76f4\u611f\u7684\u306a\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u306b\u79fb\u884c<\/li>\n\n\n\n<li>\u30e2\u30b8\u30e5\u30fc\u30eb\u5358\u4f4d\u3067\u306e\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u3092\u5b9f\u65bd<\/li>\n\n\n\n<li>\u81ea\u52d5\u30c6\u30b9\u30c8\u306e\u5c0e\u5165<\/li>\n<\/ol>\n\n\n\n<p><strong>\u52b9\u679c<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u7406\u89e3\u30fb\u628a\u63e1\u306b\u304b\u304b\u308b\u6642\u9593\u304c60%\u6e1b\u5c11<\/li>\n\n\n\n<li>\u30d0\u30b0\u4fee\u6b63\u6642\u9593\u304c\u5e73\u574750%\u77ed\u7e2e<\/li>\n\n\n\n<li>\u65b0\u6a5f\u80fd\u8ffd\u52a0\u304c3\u500d\u901f\u304f\u5b9f\u88c5\u53ef\u80fd\u306b<\/li>\n\n\n\n<li>\u30c1\u30fc\u30e0\u9593\u306e\u77e5\u8b58\u5171\u6709\u304c\u5186\u6ed1\u306b\u306a\u308a\u3001\u5c5e\u4eba\u5316\u304c\u89e3\u6d88<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-209\">\u8ab2\u984c2: \u958b\u767a\u30b9\u30d4\u30fc\u30c9\u3068\u54c1\u8cea\u306e\u30d0\u30e9\u30f3\u30b9\u6539\u5584<\/h4>\n\n\n\n<p><strong>\u80cc\u666f<\/strong>: \u77ed\u7d0d\u671f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u5897\u52a0\u3057\u3001\u958b\u767a\u30b9\u30d4\u30fc\u30c9\u3068\u54c1\u8cea\u306e\u30d0\u30e9\u30f3\u30b9\u304c\u8ab2\u984c\u306b\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002\u8fc5\u901f\u306a\u958b\u767a\u3092\u512a\u5148\u3059\u308b\u3068\u54c1\u8cea\u304c\u4f4e\u4e0b\u3057\u3001\u5f8c\u5de5\u7a0b\u3067\u306e\u624b\u623b\u308a\u304c\u767a\u751f\u3057\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/strong>: CakePHP<\/p>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u898f\u7d04\u30d9\u30fc\u30b9\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308b\u30b3\u30fc\u30c9\u6a19\u6e96\u5316<\/li>\n\n\n\n<li>CRUD\u81ea\u52d5\u751f\u6210\u6a5f\u80fd\u306e\u6d3b\u7528\u306b\u3088\u308b\u57fa\u672c\u6a5f\u80fd\u306e\u8fc5\u901f\u306a\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u6a19\u6e96\u5316\u3068\u81ea\u52d5\u5316<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u751f\u6210\u30c4\u30fc\u30eb\u3068\u9023\u643a\u3057\u305f\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u306e\u81ea\u52d5\u5316<\/li>\n<\/ol>\n\n\n\n<p><strong>\u52b9\u679c<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u65b0\u6a5f\u80fd\u958b\u767a\u671f\u9593\u304c40%\u77ed\u7e2e<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u6a19\u6e96\u5316\u306b\u3088\u308b\u54c1\u8cea\u5411\u4e0a\u3068\u30ec\u30d3\u30e5\u30fc\u52b9\u7387\u306e\u6539\u5584<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b880%\u4ee5\u4e0a\u3092\u7dad\u6301\u3057\u306a\u304c\u3089\u306e\u958b\u767a\u304c\u53ef\u80fd\u306b<\/li>\n\n\n\n<li>\u30d0\u30b0\u306e\u65e9\u671f\u767a\u898b\u7387\u304c65%\u5411\u4e0a<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-210\">\u8ab2\u984c3: \u30b7\u30b9\u30c6\u30e0\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u6700\u9069\u5316<\/h4>\n\n\n\n<p><strong>\u80cc\u666f<\/strong>: \u9867\u5ba2\u5411\u3051\u30dd\u30fc\u30bf\u30eb\u30b5\u30a4\u30c8\u306e\u30a2\u30af\u30bb\u30b9\u5897\u52a0\u306b\u4f34\u3044\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u4f4e\u4e0b\u3084\u30b5\u30fc\u30d0\u30fc\u8ca0\u8377\u306e\u5897\u5927\u304c\u554f\u984c\u3068\u306a\u3063\u3066\u3044\u307e\u3057\u305f\u3002\u30b9\u30b1\u30fc\u30eb\u30a2\u30a6\u30c8\u306b\u3088\u308b\u30b3\u30b9\u30c8\u5897\u5927\u3092\u907f\u3051\u3064\u3064\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6539\u5584\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p><strong>\u63a1\u7528\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/strong>: Phalcon<\/p>\n\n\n\n<p><strong>\u89e3\u6c7a\u7b56<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>C\u62e1\u5f35\u3067\u5b9f\u88c5\u3055\u308c\u305fPhalcon\u3078\u306e\u79fb\u884c<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u30ad\u30e3\u30c3\u30b7\u30e5\u6226\u7565\u306e\u898b\u76f4\u3057\u3068\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316\u3068\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u8a2d\u8a08\u306e\u6539\u5584<\/li>\n<\/ol>\n\n\n\n<p><strong>\u52b9\u679c<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30da\u30fc\u30b8\u30ed\u30fc\u30c9\u6642\u9593\u304c\u5e73\u574770%\u6e1b\u5c11<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30ea\u30bd\u30fc\u30b9\u4f7f\u7528\u91cf\u304c60%\u524a\u6e1b<\/li>\n\n\n\n<li>\u30d4\u30fc\u30af\u6642\u306e\u30b7\u30b9\u30c6\u30e0\u5b89\u5b9a\u6027\u304c\u5927\u5e45\u306b\u5411\u4e0a<\/li>\n\n\n\n<li>\u65e2\u5b58\u306e\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\u3067\u30e6\u30fc\u30b6\u30fc\u65703\u500d\u5897\u52a0\u306b\u3082\u5bfe\u5fdc\u53ef\u80fd\u306b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-211\">\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u6d3b\u7528\u306b\u3088\u308b\u30d3\u30b8\u30cd\u30b9\u6210\u679c\u306e\u5b9f\u4f8b<\/h3>\n\n\n\n<p>\u9069\u5207\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9078\u5b9a\u3068\u6d3b\u7528\u306f\u3001\u6280\u8853\u7684\u306a\u8ab2\u984c\u89e3\u6c7a\u3060\u3051\u3067\u306a\u304f\u3001\u30d3\u30b8\u30cd\u30b9\u6210\u679c\u306b\u3082\u76f4\u7d50\u3057\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u5f53\u793e\u304c\u652f\u63f4\u3057\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u5177\u4f53\u7684\u306a\u6210\u529f\u4e8b\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-212\">EC\u30b5\u30a4\u30c8\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306e\u5237\u65b0 (Laravel)<\/h4>\n\n\n\n<p>\u5927\u624b\u30a2\u30d1\u30ec\u30eb\u30d6\u30e9\u30f3\u30c9\u306eEC\u30b5\u30a4\u30c8\u3092Laravel\u3092\u7528\u3044\u3066\u5168\u9762\u30ea\u30cb\u30e5\u30fc\u30a2\u30eb\u3057\u307e\u3057\u305f\u3002\u30ec\u30b9\u30dd\u30f3\u30b7\u30d6\u30c7\u30b6\u30a4\u30f3\u3001\u9ad8\u901f\u306a\u691c\u7d22\u6a5f\u80fd\u3001\u30d1\u30fc\u30bd\u30ca\u30e9\u30a4\u30ba\u3055\u308c\u305f\u30ec\u30b3\u30e1\u30f3\u30c7\u30fc\u30b7\u30e7\u30f3\u306a\u3069\u3092\u5b9f\u88c5\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p><strong>\u4e3b\u306a\u6210\u679c<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b5\u30a4\u30c8\u8a2a\u554f\u304b\u3089\u30b3\u30f3\u30d0\u30fc\u30b8\u30e7\u30f3\u307e\u3067\u306e\u5c0e\u7dda\u6700\u9069\u5316\u306b\u3088\u308a\u58f2\u4e0a\u304c20%\u5897\u52a0<\/li>\n\n\n\n<li>\u30da\u30fc\u30b8\u30ed\u30fc\u30c9\u6642\u9593\u306e\u77ed\u7e2e\u3068UI\u6539\u5584\u306b\u3088\u308a\u9867\u5ba2\u6e80\u8db3\u5ea6\u304c15\u30dd\u30a4\u30f3\u30c8\u5411\u4e0a<\/li>\n\n\n\n<li>\u7ba1\u7406\u753b\u9762\u306e\u4f7f\u3044\u3084\u3059\u3055\u5411\u4e0a\u3068\u81ea\u52d5\u5316\u306b\u3088\u308a\u904b\u7528\u30b3\u30b9\u30c8\u304c35%\u524a\u6e1b<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-213\">\u91d1\u878d\u6a5f\u95a2\u306e\u696d\u52d9\u30b7\u30b9\u30c6\u30e0\u518d\u69cb\u7bc9 (Symfony)<\/h4>\n\n\n\n<p>\u5730\u65b9\u9280\u884c\u306e\u57fa\u5e79\u696d\u52d9\u30b7\u30b9\u30c6\u30e0\u3092Symfony\u3092\u7528\u3044\u3066\u518d\u69cb\u7bc9\u3057\u307e\u3057\u305f\u3002\u30ec\u30ac\u30b7\u30fc\u30b7\u30b9\u30c6\u30e0\u304b\u3089\u306e\u79fb\u884c\u3068\u3001\u6700\u65b0\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8981\u4ef6\u3078\u306e\u5bfe\u5fdc\u304c\u4e3b\u306a\u8ab2\u984c\u3067\u3057\u305f\u3002<\/p>\n\n\n\n<p><strong>\u4e3b\u306a\u6210\u679c<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u696d\u52d9\u51e6\u7406\u6642\u9593\u304c\u5e73\u574765%\u77ed\u7e2e<\/li>\n\n\n\n<li>\u30b7\u30b9\u30c6\u30e0\u30a8\u30e9\u30fc\u7387\u304c90%\u6e1b\u5c11<\/li>\n\n\n\n<li>\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u5bfe\u5fdc\u5de5\u6570\u304c70%\u524a\u6e1b<\/li>\n\n\n\n<li>\u30b7\u30b9\u30c6\u30e0\u62e1\u5f35\u6027\u306e\u5411\u4e0a\u306b\u3088\u308a\u65b0\u898f\u91d1\u878d\u5546\u54c1\u306e\u5c0e\u5165\u30ea\u30fc\u30c9\u30bf\u30a4\u30e0\u304c1\/3\u306b<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-214\">SaaS\u578b\u696d\u52d9\u7ba1\u7406\u30c4\u30fc\u30eb\u306e\u958b\u767a (Yii)<\/h4>\n\n\n\n<p>\u4e2d\u5c0f\u4f01\u696d\u5411\u3051\u306e\u696d\u52d9\u7ba1\u7406\u30c4\u30fc\u30eb\u3092Yii\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u7528\u3044\u3066\u958b\u767a\u3057\u307e\u3057\u305f\u3002\u9ad8\u901f\u306a\u30c7\u30fc\u30bf\u51e6\u7406\u3068\u62e1\u5f35\u6027\u306e\u9ad8\u3044\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u304c\u6c42\u3081\u3089\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3057\u305f\u3002<\/p>\n\n\n\n<p><strong>\u4e3b\u306a\u6210\u679c<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b5\u30fc\u30d3\u30b9\u30ed\u30fc\u30f3\u30c1\u5f8c\u534a\u5e74\u3067\u65b0\u898f\u5951\u7d04\u6570\u304c30%\u5897\u52a0<\/li>\n\n\n\n<li>\u76f4\u611f\u7684\u306aUI\u3068\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u9ad8\u901f\u5316\u306b\u3088\u308a\u89e3\u7d04\u7387\u304c50%\u6e1b\u5c11<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30de\u30fc\u30b5\u30dd\u30fc\u30c8\u3078\u306e\u554f\u3044\u5408\u308f\u305b\u304c40%\u6e1b\u5c11<\/li>\n\n\n\n<li>\u30b5\u30fc\u30d0\u30fc\u30b3\u30b9\u30c8\u3092\u6291\u3048\u306a\u304c\u30893\u500d\u306e\u30e6\u30fc\u30b6\u30fc\u6570\u306b\u5bfe\u5fdc\u53ef\u80fd\u306a\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3092\u5b9f\u73fe<\/li>\n<\/ul>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u4e8b\u4f8b\u304b\u3089\u3082\u5206\u304b\u308b\u3088\u3046\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7279\u6027\u306b\u5408\u3063\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u5b9a\u3057\u3001\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u6280\u8853\u9762\u3060\u3051\u3067\u306a\u304f\u30d3\u30b8\u30cd\u30b9\u9762\u3067\u3082\u5927\u304d\u306a\u6210\u679c\u3092\u751f\u307f\u51fa\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u3046\u3057\u305f\u7d4c\u9a13\u3092\u3082\u3068\u306b\u3001PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u3067\u5931\u6557\u3057\u306a\u3044\u305f\u3081\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-215\">\u307e\u3068\u3081\uff1aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u3073\u3067\u5931\u6557\u3057\u306a\u3044\u305f\u3081\u306e\u6700\u7d42\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8<\/h2>\n\n\n\n<p>PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9078\u629e\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6210\u529f\u3092\u5de6\u53f3\u3059\u308b\u91cd\u8981\u306a\u610f\u601d\u6c7a\u5b9a\u3067\u3059\u3002\u3053\u308c\u307e\u3067\u682a\u5f0f\u4f1a\u793eDexall\u304c\u624b\u304c\u3051\u3066\u304d\u305f\u6570\u3005\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7d4c\u9a13\u304b\u3089\u5c0e\u304d\u51fa\u3057\u305f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u3067\u5931\u6557\u3057\u306a\u3044\u305f\u3081\u306e\u5b9f\u8df5\u7684\u306a\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-216\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8981\u4ef6\u3068\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u76f8\u6027\u30c1\u30a7\u30c3\u30af<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306b\u304a\u3044\u3066\u6700\u3082\u91cd\u8981\u306a\u306e\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7279\u6027\u304c\u5408\u81f4\u3057\u3066\u3044\u308b\u304b\u3069\u3046\u304b\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u5b9a\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-217\">1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7279\u6027\u306e\u660e\u78ba\u5316<\/h4>\n\n\n\n<p>\u307e\u305a\u306f\u3001\u81ea\u793e\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7279\u6027\u3092\u6b63\u78ba\u306b\u628a\u63e1\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u9805\u76ee\u306b\u3064\u3044\u3066\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8981\u4ef6\u3092\u660e\u78ba\u306b\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n<div id=\"id-df45c85a-546a-4bc5-b911-daa0c7d14227\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30c1\u30a7\u30c3\u30af\u9805\u76ee<\/th><th>\u8003\u616e\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u898f\u6a21<\/td><td>\u5c0f\u898f\u6a21\uff08\u301c\u6570\u9031\u9593\uff09\u3001\u4e2d\u898f\u6a21\uff08\u6570\u30f6\u6708\uff09\u3001\u5927\u898f\u6a21\uff08\u534a\u5e74\u4ee5\u4e0a\uff09\u306e\u3069\u308c\u306b\u8a72\u5f53\u3059\u308b\u304b<\/td><\/tr><tr><td>\u958b\u767a\u671f\u9593\u306e\u5236\u7d04<\/td><td>\u77ed\u671f\u9593\u3067\u306e\u958b\u767a\u304c\u6c42\u3081\u3089\u308c\u308b\u304b\u3001\u3058\u3063\u304f\u308a\u958b\u767a\u3067\u304d\u308b\u304b<\/td><\/tr><tr><td>\u30c1\u30fc\u30e0\u306e\u7d4c\u9a13\u30ec\u30d9\u30eb<\/td><td>PHP\u7d4c\u9a13\u3001\u5bfe\u8c61\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u7d4c\u9a13\u5024\u306f\u3069\u306e\u7a0b\u5ea6\u304b<\/td><\/tr><tr><td>\u30b7\u30b9\u30c6\u30e0\u5bff\u547d<\/td><td>\u77ed\u671f\u5229\u7528\u304b\u3001\u9577\u671f\u904b\u7528\u3092\u524d\u63d0\u3068\u3059\u308b\u304b<\/td><\/tr><tr><td>\u8ca0\u8377\u8981\u4ef6<\/td><td>\u540c\u6642\u30a2\u30af\u30bb\u30b9\u6570\u3001\u30c7\u30fc\u30bf\u51e6\u7406\u91cf\u306a\u3069\u306e\u4e88\u60f3<\/td><\/tr><tr><td>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3<\/td><td>\u5c06\u6765\u7684\u306a\u6a5f\u80fd\u62e1\u5f35\u3084\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u5897\u52a0\u3078\u306e\u5bfe\u5fdc\u5fc5\u8981\u6027<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-218\">2. \u6280\u8853\u8981\u4ef6\u3068\u306e\u9069\u5408\u6027<\/h4>\n\n\n\n<p>\u6b21\u306b\u3001\u6280\u8853\u7684\u306a\u8981\u4ef6\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6a5f\u80fd\u3092\u7167\u3089\u3057\u5408\u308f\u305b\u307e\u3059\u3002<\/p>\n\n\n<div id=\"id-fc8af79e-ecaa-4624-85cb-46de7684a22f\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u6a5f\u80fd\u30ab\u30c6\u30b4\u30ea<\/th><th>\u30c1\u30a7\u30c3\u30af\u30dd\u30a4\u30f3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u9023\u643a<\/td><td>ORM\u6a5f\u80fd\u306e\u5145\u5b9f\u5ea6\u3001\u8907\u96d1\u306a\u30af\u30a8\u30ea\u3078\u306e\u5bfe\u5fdc\u529b<\/td><\/tr><tr><td>\u8a8d\u8a3c\u30fb\u8a8d\u53ef<\/td><td>\u6a19\u6e96\u6a5f\u80fd\u306e\u6709\u7121\u3001\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306e\u5bb9\u6613\u3055<\/td><\/tr><tr><td>API\u958b\u767a<\/td><td>RESTful API\u69cb\u7bc9\u306e\u3057\u3084\u3059\u3055\u3001JSON\u5bfe\u5fdc<\/td><\/tr><tr><td>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u9023\u643a<\/td><td>JS\/CSS\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u89aa\u548c\u6027\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3<\/td><\/tr><tr><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/td><td>\u51e6\u7406\u901f\u5ea6\u3001\u30e1\u30e2\u30ea\u52b9\u7387\u3001\u30ad\u30e3\u30c3\u30b7\u30e5\u6a5f\u69cb<\/td><\/tr><tr><td>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3<\/td><td>CSRF\u5bfe\u7b56\u3001XSS\u5bfe\u7b56\u3001SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56\u306e\u6a19\u6e96\u5b9f\u88c5<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-219\">3. \u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u76f8\u6027\u65e9\u898b\u8868<\/h4>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8981\u4ef6\u5225\u306e\u5404\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3068\u306e\u76f8\u6027\u3092\u4ee5\u4e0b\u306e\u8868\u306b\u307e\u3068\u3081\u307e\u3057\u305f\u3002\u25ce\u306f\u6700\u9069\u3001\u25cb\u306f\u9069\u3057\u3066\u3044\u308b\u3001\u25b3\u306f\u6761\u4ef6\u4ed8\u304d\u3067\u9069\u3057\u3066\u3044\u308b\u3001\u00d7\u306f\u9069\u3055\u306a\u3044\u3053\u3068\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n<div id=\"id-34403757-718c-4419-b80d-8811ddded494\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8981\u4ef6<\/th><th>Laravel<\/th><th>Symfony<\/th><th>CodeIgniter<\/th><th>CakePHP<\/th><th>Yii<\/th><th>Phalcon<\/th><th>Slim<\/th><\/tr><\/thead><tbody><tr><td>\u77ed\u671f\u958b\u767a\u30fb\u7d20\u65e9\u3044\u30d7\u30ed\u30c8\u30bf\u30a4\u30d4\u30f3\u30b0<\/td><td>\u25cb<\/td><td>\u25b3<\/td><td>\u25ce<\/td><td>\u25cb<\/td><td>\u25b3<\/td><td>\u25b3<\/td><td>\u25ce<\/td><\/tr><tr><td>\u5927\u898f\u6a21\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u30a2\u30d7\u30ea<\/td><td>\u25ce<\/td><td>\u25ce<\/td><td>\u00d7<\/td><td>\u25cb<\/td><td>\u25cb<\/td><td>\u25b3<\/td><td>\u00d7<\/td><\/tr><tr><td>API\u4e2d\u5fc3\u306e\u958b\u767a<\/td><td>\u25ce<\/td><td>\u25cb<\/td><td>\u25cb<\/td><td>\u25b3<\/td><td>\u25cb<\/td><td>\u25cb<\/td><td>\u25ce<\/td><\/tr><tr><td>\u9ad8\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u30b5\u30a4\u30c8<\/td><td>\u25cb*<\/td><td>\u25cb<\/td><td>\u25cb<\/td><td>\u25b3<\/td><td>\u25ce<\/td><td>\u25ce<\/td><td>\u25cb<\/td><\/tr><tr><td>\u5927\u898f\u6a21\u30c1\u30fc\u30e0\u958b\u767a<\/td><td>\u25ce<\/td><td>\u25ce<\/td><td>\u25cb<\/td><td>\u25cb<\/td><td>\u25cb<\/td><td>\u25b3<\/td><td>\u25b3<\/td><\/tr><tr><td>PHP\u521d\u5fc3\u8005\u30c1\u30fc\u30e0<\/td><td>\u25cb<\/td><td>\u00d7<\/td><td>\u25ce<\/td><td>\u25cb<\/td><td>\u25b3<\/td><td>\u00d7<\/td><td>\u25cb<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>*\u6700\u9069\u5316\u304c\u5fc5\u8981<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-220\">4. \u5c0e\u5165\u30b3\u30b9\u30c8\u3068\u5b66\u7fd2\u66f2\u7dda<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5c0e\u5165\u306b\u306f\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u3064\u304d\u3082\u306e\u3067\u3059\u3002\u30c1\u30fc\u30e0\u72b6\u6cc1\u306b\u5fdc\u3058\u305f\u73fe\u5b9f\u7684\u306a\u5224\u65ad\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n<div id=\"id-72734cd7-a91e-4181-b21e-cbb6c06d923c\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>\u5b66\u7fd2\u96e3\u6613\u5ea6<\/th><th>\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u306e\u5145\u5b9f\u5ea6<\/th><th>\u7fd2\u5f97\u76ee\u5b89\u671f\u9593<\/th><\/tr><\/thead><tbody><tr><td>Laravel<\/td><td>\u4e2d\u301c\u9ad8<\/td><td>\u975e\u5e38\u306b\u8c4a\u5bcc<\/td><td>1\u301c2\u30f6\u6708<\/td><\/tr><tr><td>Symfony<\/td><td>\u9ad8<\/td><td>\u8c4a\u5bcc<\/td><td>2\u301c3\u30f6\u6708<\/td><\/tr><tr><td>CodeIgniter<\/td><td>\u4f4e<\/td><td>\u5341\u5206<\/td><td>2\u9031\u9593\u301c1\u30f6\u6708<\/td><\/tr><tr><td>CakePHP<\/td><td>\u4e2d<\/td><td>\u5341\u5206<\/td><td>1\u301c2\u30f6\u6708<\/td><\/tr><tr><td>Yii<\/td><td>\u4e2d\u301c\u9ad8<\/td><td>\u3084\u3084\u5c11\u306a\u3044<\/td><td>1\u301c2\u30f6\u6708<\/td><\/tr><tr><td>Phalcon<\/td><td>\u9ad8<\/td><td>\u9650\u5b9a\u7684<\/td><td>2\u301c3\u30f6\u6708<\/td><\/tr><tr><td>Slim<\/td><td>\u4f4e<\/td><td>\u5341\u5206<\/td><td>1\u9031\u9593\u301c1\u30f6\u6708<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-221\">\u9577\u671f\u904b\u7528\u8996\u70b9\u3067\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u77ed\u671f\u7684\u306a\u958b\u767a\u52b9\u7387\u3060\u3051\u3067\u306a\u304f\u3001\u9577\u671f\u904b\u7528\u3092\u898b\u636e\u3048\u305f\u9078\u5b9a\u3082\u91cd\u8981\u3067\u3059\u3002\u4ee5\u4e0b\u306e5\u3064\u306e\u30dd\u30a4\u30f3\u30c8\u306f\u3001\u9577\u671f\u904b\u7528\u3092\u524d\u63d0\u3068\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u306b\u304a\u3044\u3066\u7279\u306b\u91cd\u8996\u3059\u3079\u304d\u9805\u76ee\u3067\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-222\">1. \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u6d3b\u767a\u3055\u3068\u5c06\u6765\u6027<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9577\u671f\u7684\u306a\u5065\u5168\u6027\u3092\u6e2c\u308b\u306b\u306f\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u6d3b\u767a\u3055\u304c\u91cd\u8981\u306a\u6307\u6a19\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u78ba\u8a8d\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitHub\u3067\u306e\u30b9\u30bf\u30fc\u6570\u3001\u30b3\u30df\u30c3\u30c8\u983b\u5ea6\u3001\u30b3\u30f3\u30c8\u30ea\u30d3\u30e5\u30fc\u30bf\u30fc\u6570<\/li>\n\n\n\n<li>\u76f4\u8fd16\u30f6\u6708\u9593\u306eIssue\u89e3\u6c7a\u7387\u3068\u5bfe\u5fdc\u30b9\u30d4\u30fc\u30c9<\/li>\n\n\n\n<li>Stack Overflow\u3067\u306e\u8cea\u554f\u6570\u3068\u56de\u7b54\u7387<\/li>\n\n\n\n<li>\u516c\u5f0f\u30d5\u30a9\u30fc\u30e9\u30e0\u30fbSlack\u30c1\u30e3\u30f3\u30cd\u30eb\u306a\u3069\u306e\u6d3b\u767a\u3055<\/li>\n<\/ul>\n\n\n\n<p>2024\u5e74\u6642\u70b9\u3067\u306e\u4e3b\u8981\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u72b6\u6cc1\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059:<\/p>\n\n\n<div id=\"id-ffaabc3b-1990-4c67-bf20-8625b6c9c555\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/th><th>GitHub Stars<\/th><th>\u76f4\u8fd1\u306e\u66f4\u65b0\u983b\u5ea6<\/th><th>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u6d3b\u767a\u5ea6<\/th><th>\u5927\u624b\u4f01\u696d\u63a1\u7528\u4f8b<\/th><\/tr><\/thead><tbody><tr><td>Laravel<\/td><td>75,000+<\/td><td>\u975e\u5e38\u306b\u9ad8\u3044<\/td><td>\u975e\u5e38\u306b\u6d3b\u767a<\/td><td>X, Y, Z\u793e\u306a\u3069<\/td><\/tr><tr><td>Symfony<\/td><td>29,000+<\/td><td>\u9ad8\u3044<\/td><td>\u6d3b\u767a<\/td><td>A, B, C\u793e\u306a\u3069<\/td><\/tr><tr><td>CodeIgniter<\/td><td>15,000+<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u3084\u3084\u6d3b\u767a<\/td><td>D, E\u793e\u306a\u3069<\/td><\/tr><tr><td>CakePHP<\/td><td>8,500+<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u3084\u3084\u6d3b\u767a<\/td><td>F, G\u793e\u306a\u3069<\/td><\/tr><tr><td>Yii<\/td><td>10,000+<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u3084\u3084\u6d3b\u767a<\/td><td>H, I\u793e\u306a\u3069<\/td><\/tr><tr><td>Phalcon<\/td><td>10,500+<\/td><td>\u4f4e\u3044<\/td><td>\u3042\u307e\u308a\u6d3b\u767a\u3067\u306a\u3044<\/td><td>J\u793e\u306a\u3069<\/td><\/tr><tr><td>Slim<\/td><td>12,000+<\/td><td>\u4e2d\u7a0b\u5ea6<\/td><td>\u6d3b\u767a<\/td><td>K, L\u793e\u306a\u3069<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h4 class=\"wp-block-heading\" id=\"i-223\">2. \u9577\u671f\u30b5\u30dd\u30fc\u30c8(LTS)\u3068\u30d0\u30fc\u30b8\u30e7\u30cb\u30f3\u30b0\u30dd\u30ea\u30b7\u30fc<\/h4>\n\n\n\n<p>\u9577\u671f\u904b\u7528\u3092\u8003\u3048\u308b\u5834\u5408\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u30b5\u30dd\u30fc\u30c8\u30dd\u30ea\u30b7\u30fc\u306f\u975e\u5e38\u306b\u91cd\u8981\u3067\u3059\u3002\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d1\u30c3\u30c1\u3084\u30d0\u30b0\u4fee\u6b63\u304c\u3069\u308c\u3060\u3051\u306e\u671f\u9593\u63d0\u4f9b\u3055\u308c\u308b\u304b\u3092\u78ba\u8a8d\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p><strong>\u78ba\u8a8d\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LTS\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u6709\u7121\u3068\u30b5\u30dd\u30fc\u30c8\u671f\u9593<\/li>\n\n\n\n<li>\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u66f4\u65b0\u983b\u5ea6\u3068\u4e92\u63db\u6027\u65b9\u91dd<\/li>\n\n\n\n<li>\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30d1\u30c3\u30c1\u306e\u30b5\u30dd\u30fc\u30c8\u671f\u9593<\/li>\n\n\n\n<li>\u904e\u53bb\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u79fb\u884c\u96e3\u6613\u5ea6<\/li>\n<\/ul>\n\n\n\n<p>\u4f8b\u3048\u3070\u3001Laravel\u3068Symfony\u306f\u660e\u78ba\u306aLTS\u30dd\u30ea\u30b7\u30fc\u3092\u6301\u3063\u3066\u304a\u308a\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u4fee\u6b63\u306f\u9577\u671f\u9593\u63d0\u4f9b\u3055\u308c\u307e\u3059\u3002\u4e00\u65b9\u3067\u3001\u4e00\u90e8\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306fLTS\u7248\u3092\u63d0\u4f9b\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u983b\u7e41\u306a\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u5fc5\u8981\u3068\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-224\">3. \u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3068\u62e1\u5f35\u6027<\/h4>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u81ea\u4f53\u306e\u6a5f\u80fd\u3060\u3051\u3067\u306a\u304f\u3001\u5468\u8fba\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u306e\u5145\u5b9f\u5ea6\u3082\u9577\u671f\u904b\u7528\u306b\u304a\u3044\u3066\u306f\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>\u8a55\u4fa1\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d1\u30c3\u30b1\u30fc\u30b8\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3068\u305d\u306e\u5145\u5b9f\u5ea6<\/li>\n\n\n\n<li>\u5229\u7528\u53ef\u80fd\u306a\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u6570\u3068\u8cea<\/li>\n\n\n\n<li>\u30d7\u30e9\u30b0\u30a4\u30f3\/\u62e1\u5f35\u6a5f\u69cb\u306e\u67d4\u8edf\u6027<\/li>\n\n\n\n<li>\u958b\u767a\u30c4\u30fc\u30eb\uff08CLI\u3001\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u306a\u3069\uff09\u306e\u5145\u5b9f\u5ea6<\/li>\n<\/ul>\n\n\n\n<p>Laravel\u306e\u5834\u5408\u3001\u516c\u5f0f\u30d1\u30c3\u30b1\u30fc\u30b8\uff08Laravel Nova, Jetstream, Horizon\u7b49\uff09\u3084\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\uff08Livewire, Inertia.js\u7b49\uff09\u304c\u975e\u5e38\u306b\u5145\u5b9f\u3057\u3066\u304a\u308a\u3001\u69d8\u3005\u306a\u30cb\u30fc\u30ba\u306b\u5bfe\u5fdc\u3067\u304d\u307e\u3059\u3002Symfony\u3082\u540c\u69d8\u306b\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u518d\u5229\u7528\u6027\u304c\u9ad8\u304f\u3001\u4ed6\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3082\u5229\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-225\">4. \u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u306e\u5bb9\u6613\u3055<\/h4>\n\n\n\n<p>\u9577\u671f\u904b\u7528\u306b\u304a\u3051\u308b\u30b3\u30b9\u30c8\u8981\u56e0\u306e\u3072\u3068\u3064\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u30a2\u30c3\u30d7\u306b\u4f34\u3046\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u30b3\u30b9\u30c8\u3067\u3059\u3002<\/p>\n\n\n\n<p><strong>\u8a55\u4fa1\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3\u9593\u306e\u7834\u58ca\u7684\u5909\u66f4\u306e\u983b\u5ea6<\/li>\n\n\n\n<li>\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u30ac\u30a4\u30c9\u306e\u5145\u5b9f\u5ea6<\/li>\n\n\n\n<li>\u81ea\u52d5\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u30c4\u30fc\u30eb\u306e\u6709\u7121<\/li>\n\n\n\n<li>\u5f8c\u65b9\u4e92\u63db\u6027\u3078\u306e\u914d\u616e<\/li>\n<\/ul>\n\n\n\n<p>Symfony\u306f\u7279\u306b\u5f8c\u65b9\u4e92\u63db\u6027\u306b\u6ce8\u610f\u3092\u6255\u3063\u3066\u304a\u308a\u3001\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u30d1\u30b9\u304c\u660e\u78ba\u3067\u3059\u3002Laravel\u3082\u6bd4\u8f03\u7684\u79fb\u884c\u304c\u5bb9\u6613\u3067\u3059\u304c\u3001\u30e1\u30b8\u30e3\u30fc\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306f\u4e00\u90e8\u4e92\u63db\u6027\u306e\u306a\u3044\u5909\u66f4\u304c\u542b\u307e\u308c\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-226\">5. \u4eba\u6750\u78ba\u4fdd\u306e\u5bb9\u6613\u3055<\/h4>\n\n\n\n<p>\u9577\u671f\u904b\u7528\u3092\u8003\u3048\u308b\u4e0a\u3067\u898b\u843d\u3068\u3057\u304c\u3061\u306a\u306e\u304c\u3001\u5c06\u6765\u306e\u4eba\u6750\u78ba\u4fdd\u306e\u554f\u984c\u3067\u3059\u3002\u30de\u30a4\u30ca\u30fc\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u63a1\u7528\u3059\u308b\u3068\u3001\u5c06\u6765\u7684\u306b\u958b\u767a\u30fb\u4fdd\u5b88\u304c\u3067\u304d\u308b\u4eba\u6750\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u56f0\u96e3\u306b\u306a\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u8003\u616e\u3059\u3079\u304d\u30dd\u30a4\u30f3\u30c8:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6c42\u4eba\u5e02\u5834\u3067\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9700\u8981<\/li>\n\n\n\n<li>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u30b5\u30a4\u30ba\u3068\u6d3b\u767a\u3055<\/li>\n\n\n\n<li>\u6559\u80b2\u30ea\u30bd\u30fc\u30b9\u306e\u5165\u624b\u3057\u3084\u3059\u3055<\/li>\n\n\n\n<li>\u56fd\u5185\u3067\u306e\u666e\u53ca\u5ea6<\/li>\n<\/ul>\n\n\n\n<p>\u305f\u3068\u3048\u3070\u3001Laravel\u3084Symfony\u306f\u6c42\u4eba\u5e02\u5834\u3067\u3082\u9700\u8981\u304c\u9ad8\u304f\u3001\u4eba\u6750\u78ba\u4fdd\u304c\u6bd4\u8f03\u7684\u5bb9\u6613\u3067\u3059\u3002\u4e00\u65b9\u3001Phalcon\u306e\u3088\u3046\u306a\u5c02\u9580\u6027\u306e\u9ad8\u3044\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306f\u3001\u5bfe\u5fdc\u3067\u304d\u308b\u4eba\u6750\u304c\u9650\u3089\u308c\u308b\u50be\u5411\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-227\">PHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u5b66\u7fd2\u304b\u3089\u5b9f\u8df5\u307e\u3067\u306e\u30b9\u30c6\u30c3\u30d7<\/h3>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u5b9a\u3057\u305f\u5f8c\u306f\u3001\u5b9f\u969b\u306b\u30c1\u30fc\u30e0\u3067\u5b66\u7fd2\u3057\u3001\u5b9f\u8df5\u306b\u79fb\u3057\u3066\u3044\u304f\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u52b9\u7387\u7684\u306a\u5b66\u7fd2\u304b\u3089\u5b9f\u8df5\u307e\u3067\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-228\">1. \u57fa\u790e\u77e5\u8b58\u306e\u7fd2\u5f97\uff082\u9031\u9593\u301c1\u30f6\u6708\uff09<\/h4>\n\n\n\n<p>\u307e\u305a\u306f\u9078\u5b9a\u3057\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u57fa\u672c\u6982\u5ff5\u3068\u4f7f\u3044\u65b9\u3092\u7406\u89e3\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u53d6\u308a\u7d44\u3080\u3079\u304d\u3053\u3068:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306e\u5b8c\u4e86<\/li>\n\n\n\n<li>MVC\u30d1\u30bf\u30fc\u30f3\u306e\u7406\u89e3<\/li>\n\n\n\n<li>\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u3001\u30e2\u30c7\u30eb\u3001\u30d3\u30e5\u30fc\u306e\u57fa\u672c\u3092\u5b66\u3076<\/li>\n\n\n\n<li>\u74b0\u5883\u69cb\u7bc9\u3068\u57fa\u672c\u7684\u306a\u52d5\u4f5c\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<p><strong>\u304a\u3059\u3059\u3081\u30ea\u30bd\u30fc\u30b9:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/li>\n\n\n\n<li>Laracasts\uff08Laravel\uff09<\/li>\n\n\n\n<li>SymfonyCasts\uff08Symfony\uff09<\/li>\n\n\n\n<li>Udemy\/Pluralsight\u306e\u5165\u9580\u30b3\u30fc\u30b9<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-229\">2. \u5c0f\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u5b9f\u8df5\uff081\u301c2\u30f6\u6708\uff09<\/h4>\n\n\n\n<p>\u5b66\u3093\u3060\u77e5\u8b58\u3092\u5c0f\u898f\u6a21\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5b9f\u8df5\u3057\u3001\u7406\u89e3\u3092\u6df1\u3081\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u53d6\u308a\u7d44\u3080\u3079\u304d\u3053\u3068:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>TODO\u30a2\u30d7\u30ea\u3084\u30d6\u30ed\u30b0\u306a\u3069\u306e\u5c0f\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a<\/li>\n\n\n\n<li>\u57fa\u672c\u7684\u306aCRUD\u64cd\u4f5c\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u8a8d\u8a3c\u30fb\u8a8d\u53ef\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u8a08\u3068\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3<\/li>\n<\/ul>\n\n\n\n<p><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b7\u30f3\u30d7\u30eb\u306a\u30bf\u30b9\u30af\u7ba1\u7406\u30a2\u30d7\u30ea<\/li>\n\n\n\n<li>\u793e\u5185\u30c4\u30fc\u30eb\u306e\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7<\/li>\n\n\n\n<li>\u500b\u4eba\u30d6\u30ed\u30b0\u30b7\u30b9\u30c6\u30e0<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-230\">3. \u672c\u683c\u7684\u306a\u958b\u767a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3078\u306e\u9069\u7528\uff083\u30f6\u6708\u301c\uff09<\/h4>\n\n\n\n<p>\u5b9f\u969b\u306e\u30d3\u30b8\u30cd\u30b9\u8981\u4ef6\u306b\u57fa\u3065\u3044\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9069\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u53d6\u308a\u7d44\u3080\u3079\u304d\u3053\u3068:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u3088\u308a\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u5b9f\u88c5<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u306e\u5c0e\u5165<\/li>\n\n\n\n<li>CI\/CD\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306e\u5171\u6709<\/li>\n<\/ul>\n\n\n\n<p><strong>\u6210\u529f\u306e\u30dd\u30a4\u30f3\u30c8:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6bb5\u968e\u7684\u306a\u6a5f\u80fd\u5b9f\u88c5<\/li>\n\n\n\n<li>\u5b9a\u671f\u7684\u306a\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc<\/li>\n\n\n\n<li>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u5316\u306e\u7fd2\u6163\u5316<\/li>\n\n\n\n<li>\u7d99\u7d9a\u7684\u306a\u5b66\u7fd2\u3068\u77e5\u8b58\u5171\u6709<\/li>\n<\/ul>\n\n\n\n<p>\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b66\u7fd2\u306f\u4e00\u671d\u4e00\u5915\u306b\u306f\u3044\u304d\u307e\u305b\u3093\u304c\u3001\u4f53\u7cfb\u7684\u306b\u9032\u3081\u308b\u3053\u3068\u3067\u52b9\u7387\u3088\u304f\u7fd2\u5f97\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u7d4c\u9a13\u304c\u6700\u3082\u6709\u52b9\u306a\u5b66\u7fd2\u65b9\u6cd5\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0a\u306e\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\u3068\u30b9\u30c6\u30c3\u30d7\u3092\u53c2\u8003\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306aPHP\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u9078\u5b9a\u3057\u3001\u52b9\u679c\u7684\u306b\u5c0e\u5165\u30fb\u6d3b\u7528\u3057\u3066\u3044\u305f\u3060\u3051\u308c\u3070\u5e78\u3044\u3067\u3059\u3002\u682a\u5f0f\u4f1a\u793eDexall\u3067\u306f\u3001\u304a\u5ba2\u69d8\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8981\u4ef6\u306b\u5408\u308f\u305b\u305f\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u304b\u3089\u3001\u958b\u767a\u30fb\u4fdd\u5b88\u307e\u3067\u30c8\u30fc\u30bf\u30eb\u3067\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u9078\u5b9a\u3067\u304a\u60a9\u307f\u306e\u969b\u306f\u3001\u305c\u3072\u3054\u76f8\u8ac7\u304f\u3060\u3055\u3044\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-3433","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\/3433","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=3433"}],"version-history":[{"count":2,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3433\/revisions"}],"predecessor-version":[{"id":3435,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/3433\/revisions\/3435"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3433"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3433"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3433"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}