{"id":442,"date":"2026-09-08T13:44:06","date_gmt":"2026-09-08T04:44:06","guid":{"rendered":"https:\/\/miginihitsuji.com\/prog\/?p=442"},"modified":"2026-09-08T13:44:08","modified_gmt":"2026-09-08T04:44:08","slug":"headless-wp-api-react-dev","status":"publish","type":"post","link":"https:\/\/miginihitsuji.com\/prog\/headless-wp-api-react-dev\/","title":{"rendered":"\u30d8\u30c3\u30c9\u30ec\u30b9WordPress+React\u3067\u30b5\u30a4\u30c8\u3092\u3064\u304f\u308b\u301c\u958b\u767a\u74b0\u5883\u69cb\u7bc9\u7de8\u301c"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u30b3\u30fc\u30dd\u30ec\u30fc\u30c8\u30b5\u30a4\u30c8\u306e\u30ea\u30cb\u30e5\u30fc\u30a2\u30eb\u306b\u3042\u305f\u308a\u3001\u300c\u30d8\u30c3\u30c9\u30ec\u30b9WordPress\u300d\u69cb\u6210\u3092\u691c\u8a0e\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\u3002WordPress\u3092CMS\/API\u3068\u3057\u3066\u4f7f\u3044\u3001\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306fReact\u3068\u3057\u307e\u3059\u3002\u691c\u8a0e\u306e\u305f\u3081\u306b\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3057\u3066\u307f\u305f\u306e\u3067\u3001\u5099\u5fd8\u9332\u3092\u517c\u306d\u3066\u305d\u306e\u624b\u9806\u3092\u307e\u3068\u3081\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p class=\"is-style-stitch wp-block-paragraph\"><span class=\"swl-fz u-fz-xs\">\u30b5\u30e0\u30cd\u30a4\u30eb\u753b\u50cf\u4f5c\u6210\u306e\u6642\u9593\u77ed\u7e2e\u306e\u305f\u3081\u306bAI\u751f\u6210\u3057\u3066\u307f\u307e\u3057\u305f\u304c\u3001\u4eca\u307e\u3067\u3068\u306f\u5168\u304f\u9055\u3046\u30c6\u30a4\u30b9\u30c8\u753b\u50cf\u306b\u306a\u308a\u3001\u3044\u304b\u306b\u3082AI\u3067\u3064\u304f\u3063\u305f\u306a\u3063\u3066\u3044\u3046\u611f\u3058(\u6c57<\/span><br><span class=\"swl-fz u-fz-xs\">\u307e\u3042\u3001\u6280\u8853\u30d6\u30ed\u30b0\u306a\u306e\u3067\u3054\u611b\u5b0c\u3068\u3044\u3046\u3053\u3068\u3067&#8230;<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u6210<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u63a1\u7528\u3057\u305f\u69cb\u6210\u306f\u4ee5\u4e0b\u306e\u3068\u304a\u308a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\uff1aWordPress\uff08\u6295\u7a3f\u7ba1\u7406\u3001\u30ab\u30b9\u30bf\u30e0\u6295\u7a3f\u3001ACF Pro\u3001REST API\u3001WPGraphQL\uff09<\/li>\n\n\n\n<li>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\uff1aVite + React + TypeScript + TailwindCSS v4<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u53d6\u5f97\uff1aSWR<\/li>\n\n\n\n<li>\u672c\u756a\u30b5\u30fc\u30d0\u30fc\uff1a\u30ec\u30f3\u30bf\u30eb\u30b5\u30fc\u30d0\u30fc\uff08\u30a8\u30c3\u30af\u30b9\u30b5\u30fc\u30d0\u30fc\uff09<\/li>\n\n\n\n<li>\u30ed\u30fc\u30ab\u30eb\u958b\u767a\uff1aWordPress\u5074\u306fwp-env\u3001React\u5074\u306fVite<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\"><code>corporate-site\/\n\u251c\u2500\u2500 cms\/                  # WordPress (wp-env)\n\u2502   \u251c\u2500\u2500 .wp-env.json\n\u2502   \u251c\u2500\u2500 package.json\n\u2502   \u2514\u2500\u2500 wp-content\/\n\u2502       \u251c\u2500\u2500 themes\/\n\u2502       \u2502   \u2514\u2500\u2500 headless-api\/  # API\u5c02\u7528\u30c6\u30fc\u30de\n\u2502       \u251c\u2500\u2500 plugins\/\n\u2502       \u2502   \u2514\u2500\u2500 cors-config\/   # CORS\u8a2d\u5b9a\u30d7\u30e9\u30b0\u30a4\u30f3\n\u2502       \u2514\u2500\u2500 uploads\/\n\u2514\u2500\u2500 web\/                  # React\n    \u251c\u2500\u2500 .env.local        # \u958b\u767a\u7528\n    \u251c\u2500\u2500 .env.production   # \u672c\u756a\u7528\n    \u251c\u2500\u2500 package.json\n    \u251c\u2500\u2500 vite.config.ts\n    \u251c\u2500\u2500 dist\/  # \u30d3\u30eb\u30c9\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u7fa4\u3092\u683c\u7d0d\n    \u2514\u2500\u2500 src\/   # \u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u683c\u7d0d<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u30c7\u30d7\u30ed\u30a4\u69cb\u6210\uff1a\u5b8c\u5168\u5206\u96e2\u30d1\u30bf\u30fc\u30f3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b5\u30d6\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u914d\u7f6e\u3084\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\u5171\u5b58\u3082\u691c\u8a0e\u3057\u307e\u3057\u305f\u304c\u3001\u6700\u7d42\u7684\u306b\u306fWordPress\u3068React\u3092\u5b8c\u5168\u306b\u5225\u30c9\u30e1\u30a4\u30f3\u3067\u5206\u96e2\u3059\u308b\u69cb\u6210\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\"><code>cms.example.com   \u2192 WordPress\uff08\u7ba1\u7406\u753b\u9762\u30fbAPI\u5c02\u7528\u3001\u30d5\u30ed\u30f3\u30c8\u8868\u793a\u306f\u7121\u52b9\u5316\uff09\nexample.com       \u2192 React\uff08\u516c\u958b\u30b5\u30a4\u30c8\u3001www\u4ed8\u304d\u306f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\uff09<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress\u306e\u30c6\u30fc\u30de\u5074\u3067\u3001\u7ba1\u7406\u753b\u9762\u3068API\u30ea\u30af\u30a8\u30b9\u30c8\u4ee5\u5916\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092 template_redirect \u30d5\u30c3\u30af\u3067\u30d6\u30ed\u30c3\u30af\u3057\u3001\u610f\u56f3\u7684\u306b\u300c\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3092\u6301\u305f\u306a\u3044CMS\u300d\u3068\u3057\u3066\u904b\u7528\u3059\u308b\u5f62\u306b\u3057\u3066\u3044\u307e\u3059\u3002URL\u306e\u91cd\u8907\u3084\u69cb\u9020\u306e\u6df7\u4e71\u3092\u907f\u3051\u3089\u308c\u308b\u306e\u304c\u30e1\u30ea\u30c3\u30c8\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WordPress\u958b\u767a\u74b0\u5883(wp-env)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u306e cms\/ \u5074\u304b\u3089\u69cb\u7bc9\u3057\u3066\u3044\u304d\u307e\u3059\u3002\u8981\u3059\u308b\u306b\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WordPress\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">package.json\u3068.wp-env.json\u30d5\u30a1\u30a4\u30eb\u3092\u6e96\u5099\u3057\u3066Wordpress\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-json\" data-file=\"package.json\" data-lang=\"JSON\"><code>{\n  &quot;name&quot;: &quot;corporate-cms&quot;,\n  &quot;scripts&quot;: {\n    &quot;start&quot;: &quot;wp-env start&quot;,\n    &quot;stop&quot;: &quot;wp-env stop&quot;,\n    &quot;clean&quot;: &quot;wp-env clean all&quot;\n  },\n  &quot;devDependencies&quot;: {\n    &quot;@wordpress\/env&quot;: &quot;^10.0.0&quot;\n  }\n}<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-json\" data-file=\".wp-env.json\" data-lang=\"JSON\"><code>{\n  &quot;core&quot;: &quot;https:\/\/ja.wordpress.org\/latest-ja.zip&quot;,\n  &quot;plugins&quot;: [\n    &quot;.\/wordpress\/plugins\/advanced-custom-fields-pro&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/taxonomy-terms-order.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/contact-form-7.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/duplicate-page.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/ewww-image-optimizer.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/flamingo.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/wp-multibyte-patch.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/wp-pagenavi.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/wp-graphql.latest-stable.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/all-in-one-seo-pack.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/siteguard.zip&quot;,\n    &quot;https:\/\/downloads.wordpress.org\/plugin\/wp-mail-smtp.zip&quot;\n  ],\n  &quot;config&quot;: {\n    &quot;WP_DEBUG&quot;: true,\n    &quot;WP_DEBUG_LOG&quot;: true,\n    &quot;WP_ENVIRONMENT_TYPE&quot;: &quot;local&quot;\n  },\n  &quot;mappings&quot;: {\n    &quot;wp-content\/uploads&quot;: &quot;.\/wordpress\/uploads&quot;,\n    &quot;wp-content\/themes&quot;: &quot;.\/wordpress\/themes&quot;,\n    &quot;wp-content\/plugins&quot;: &quot;.\/wordpress\/plugins&quot;\n  }\n}\n<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u79c1\u304c\u3088\u304f\u4f7f\u7528\u3057\u3066\u3044\u308b\u3082\u306e\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress\u30b3\u30a2\u3001\u30d7\u30e9\u30b0\u30a4\u30f3\u306f\u6700\u65b0\u3092\u53d6\u5f97\u3067\u304d\u308b\u8a18\u8ff0\u306b\u3057\u3066\u3044\u307e\u3059\u3002ADF PRO\u306f\u81ea\u52d5\u53d6\u5f97\u3067\u304d\u306a\u3044\u306e\u3067\u4e8b\u524d\u306b\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u3057\u3066\u304a\u304d\u3001.\/wordpress\/plugins \u306b\u914d\u7f6e\u3057\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ee5\u4e0b\u3092\u30de\u30c3\u30d4\u30f3\u30b0\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><\/td><td>\u30de\u30c3\u30d4\u30f3\u30b0\u5148<\/td><\/tr><tr><td>wp-content\/themes<\/td><td>.\/wordpress\/themes<\/td><\/tr><tr><td>wp-content\/plugins<\/td><td>.\/wordpress\/plugins<\/td><\/tr><tr><td>wp-content\/uploads<\/td><td>.\/wordpress\/uploads<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3053\u307e\u3067\u6e96\u5099\u3067\u304d\u305f\u3089\u3001\u4ee5\u4e0b\u3092\u5b9f\u884c\u3057\u3066\u3001\u3044\u3056\uff01\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>npm install\nnpm start<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">wp-env\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067admin \/ password \u3067\u7ba1\u7406\u8005\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u672c\u756a\u74b0\u5883\u3078\u306eDB\u4ee5\u964d\u3092\u898b\u636e\u3048\u3066\u3001\u521d\u56de\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u5b8c\u4e86\u5f8c\u3059\u3050\u306b\u30c7\u30d5\u30a9\u30eb\u30c8\u30e6\u30fc\u30b6\u30fc\u3092\u5909\u66f4\u3057\u3066\u304a\u304d\u307e\u3059\u3002<br>\u4e00\u5ea6\u3060\u3051\u5b9f\u884c\u3059\u308c\u3070OK\u3002DB\u306fDocker\u30dc\u30ea\u30e5\u30fc\u30e0\u306b\u6c38\u7d9a\u5316\u3055\u308c\u308b\u306e\u3067\u3001wp-env destroy \u3057\u306a\u3044\u9650\u308a\u518d\u5b9f\u884c\u4e0d\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>npx wp-env run cli wp db query &quot;UPDATE wp_users SET user_login=&#39;\u65b0\u30e6\u30fc\u30b6\u30fc\u540d&#39; WHERE ID=1&quot;\nnpx wp-env run cli wp user update 1 --user_email=&#39;\u65b0\u30e6\u30fc\u30b6\u30fc\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9&#39;\nnpx wp-env run cli wp user update 1 --user_pass=&#39;\u65b0\u30e6\u30fc\u30b6\u30fc\u30d1\u30b9\u30ef\u30fc\u30c9&#39;<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">\u30b7\u30a7\u30eb\u30b3\u30de\u30f3\u30c9\u3067\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u6271\u3046\u5834\u5408\u306f\u3001\u5fc5\u305a\u30b7\u30f3\u30b0\u30eb\u30af\u30a9\u30fc\u30c8\u3067\u56f2\u3080\uff01\uff08\u56f2\u307f\u5fd8\u308c\u308b\u3068 $ } { ! \u306a\u3069\u30b7\u30a7\u30eb\u306b\u3068\u3063\u3066\u610f\u5473\u3042\u308b\u8a18\u53f7\u304c\u5c55\u958b\u3055\u308c\u3066\u3057\u307e\u3044\u307e\u3059\uff09<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">React\u958b\u767a\u74b0\u5883\uff08Vite + TyepScript + Tailwind v4\uff09<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306f\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u958b\u767a\u74b0\u5883\u3092\u6e96\u5099\u3057\u307e\u3059\u3002\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u306e web\/ \u5074 \u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>npm create vite@latest web -- --template react-ts\n\n# Which linter to use?\n# ESLint\n# Install with npm and start now?\n# No<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>cd web\nnpm install\nnpm install react-router-dom swr\nnpm install tailwindcss @tailwindcss\/vite\nnpm install -D @types\/node<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Tailwind CSS v4 \u3067\u306f\u3001\u3053\u308c\u307e\u3067\u3068\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u65b9\u6cd5\u304c\u5909\u308f\u3063\u3066\u3044\u308b\u306e\u3067\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>@tailwindcss\/vite \u3092Vite\u30d7\u30e9\u30b0\u30a4\u30f3\u3068\u3057\u3066\u76f4\u63a5\u7d44\u307f\u8fbc\u3080<\/li>\n\n\n\n<li>tailwind.config.ts \u4e0d\u8981<\/li>\n\n\n\n<li>CSS\u3067\u30a4\u30f3\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-ts\" data-file=\"vite.config.ts\" data-lang=\"TypeScript\" data-line=\"3,7\"><code>import { defineConfig } from &quot;vite&quot;;\nimport react from &quot;@vitejs\/plugin-react&quot;;\nimport tailwindcss from &quot;@tailwindcss\/vite&quot;;\nimport path from &quot;path&quot;;\n\nexport default defineConfig({\n  plugins: [react(), tailwindcss()],\n  resolve: {\n    alias: {\n      &quot;@&quot;: path.resolve(__dirname, &quot;.\/src&quot;),\n    },\n  },\n  server: {\n    port: 5173,\n    open: true,\n  },\n  build: {\n    outDir: &quot;dist&quot;,\n    assetsDir: &quot;assets&quot;,\n    sourcemap: false,\n    rollupOptions: {\n      output: {\n        manualChunks: {\n          vendor: [&quot;react&quot;, &quot;react-dom&quot;, &quot;react-router-dom&quot;],\n          swr: [&quot;swr&quot;],\n        },\n      },\n    },\n  },\n});\n<\/code><\/pre><\/div>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-css\" data-lang=\"CSS\"><code>@import &quot;tailwindcss&quot;;<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u30ea\u30dd\u30b8\u30c8\u30ea\u69cb\u6210<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress\u5074(cms\/) \u3068 React\u5074(web\/) \u306f\u3001\u30c7\u30d7\u30ed\u30a4\u5148\u30c9\u30e1\u30a4\u30f3\u3082\u6280\u8853\u30b9\u30bf\u30c3\u30af\u3082\u7570\u306a\u308b\u305f\u3081\u3001Git\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u5206\u3051\u308b\u69cb\u6210\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\" data-show-lang=\"0\"><code>cms\/   \u2190 WordPress\u72ec\u7acb\u30ea\u30dd\u30b8\u30c8\u30ea\nweb\/   \u2190 React\u72ec\u7acb\u30ea\u30dd\u30b8\u30c8\u30ea<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">cms\/ \u5074\u3067\u306f\u57fa\u672c\u7684\u306a\u30d7\u30e9\u30b0\u30a4\u30f3\u306fURL\u304b\u3089\u306e\u81ea\u52d5\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306a\u306e\u3067\u3001Git\u7ba1\u7406\u5bfe\u8c61\u306f\u81ea\u4f5c\u306eCORS\u8a2d\u5b9a\u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u307f\u3068\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism off-numbers lang-plain\" data-show-lang=\"0\"><code>wordpress\/plugins\/*\n!wordpress\/plugins\/cors-config\/\n!wordpress\/plugins\/cors-config\/**<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u672c\u756a\u74b0\u5883\u3078\u30c7\u30d7\u30ed\u30a4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b8c\u5168\u5206\u96e2\u69cb\u6210\u306a\u306e\u3067\u3001WordPress\u3068React\u306f\u5225\u3005\u306b\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\uff08\u203b\u30c7\u30d7\u30ed\u30a4\u307e\u3067\u306f\u5b9f\u969b\u306b\u306f\u8a66\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u60f3\u5b9a\u3067\u66f8\u3044\u3066\u3044\u307e\u3059\u3002\u4e88\u3081\u3054\u4e86\u627f\u304f\u3060\u3055\u3044\u3002\uff09<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">WordPress\u5074 (cms.example.com)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b5\u30d6\u30c9\u30e1\u30a4\u30f3\u3092\u7528\u610f\u3057\u3066\u304a\u304d\u3001\u30a8\u30c3\u30af\u30b9\u30b5\u30fc\u30d0\u30fc\u306e\u300cWEordPress\u7c21\u5358\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u300d\u3092\u4f7f\u3063\u3066\u30b5\u30fc\u30d0\u30fc\u306bWordPress\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/li>\n\n\n\n<li>FTP\u3067\u30ed\u30fc\u30ab\u30eb\u306e\u4ee5\u4e0b\u3092\u305d\u308c\u305e\u308c\u8a72\u5f53\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\n<ol class=\"wp-block-list\">\n<li>wordpress\/theme<\/li>\n\n\n\n<li>wordpress\/plugins<\/li>\n\n\n\n<li>wordpress\/uploads<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>\u7ba1\u7406\u753b\u9762\u304b\u3089\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u6709\u52b9\u5316<\/li>\n\n\n\n<li>\u30c6\u30fc\u30de\u3092\u6709\u52b9\u5316<\/li>\n\n\n\n<li>\u30d1\u30fc\u30de\u30ea\u30f3\u30af\u8a2d\u5b9a\u3092\u300c\u6295\u7a3f\u540d\u300d\u306b\u5909\u66f4<\/li>\n\n\n\n<li>wp-config.php  \u306b\u672c\u756a\u7528\u306eURL\u3092\u8ffd\u8a18<\/li>\n<\/ol>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-php\" data-lang=\"PHP\"><code>define(&#39;WP_HOME&#39;, &#39;https:\/\/cms.example.com&#39;);\ndefine(&#39;WP_SITEURL&#39;, &#39;https:\/\/cms.example.com&#39;);\ndefine(&#39;WP_DEBUG&#39;, false);\ndefine(&#39;WP_ENVIRONMENT_TYPE&#39;, &#39;production&#39;);<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">CROS\u8a2d\u5b9a\u306f\u3001\u958b\u767a\u74b0\u5883\u7528\u306b\u4f5c\u3063\u305f cors-cxonfig \u30d7\u30e9\u30b0\u30a4\u30f3\u306e\u4e2d\u3067\u3001\u8a31\u53ef\u30aa\u30ea\u30b8\u30f3\u306e\u30ea\u30b9\u30c8\u306b\u672c\u756a\u30c9\u30e1\u30a4\u30f3\u3092\u542b\u3081\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-php\" data-lang=\"PHP\"><code>$allowed_origins = [\n    &#39;http:\/\/localhost:5173&#39;,\n    &#39;https:\/\/example.com&#39;,\n    &#39;https:\/\/www.example.com&#39;,\n];<\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">React\u5074(example.com)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u30ed\u30fc\u30ab\u30eb\u3067\u30d3\u30eb\u30c9\u3057\u3001\u9759\u7684\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>cd web\nnpm run build<\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">dist\/\u914d\u4e0b\u306e\u4e2d\u8eab\uff08index.html\u30fbassets\/\uff09\u3092\u3001example.com\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30eb\u30fc\u30c8\u76f4\u4e0b\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">.htaccess\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>RewriteEngine On\n\n# HTTPS\u5f37\u5236\nRewriteCond %{HTTPS} off\nRewriteRule ^(.*)$ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [R=301,L]\n\n# www \u2192 non-www \u30ea\u30c0\u30a4\u30ec\u30af\u30c8\nRewriteCond %{HTTP_HOST} ^www\\.example\\.com$ [NC]\nRewriteRule ^(.*)$ https:\/\/example.com\/$1 [R=301,L]\n\n# React SPA\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule ^.*$ \/index.html [L]<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress\u3092\u30d8\u30c3\u30c9\u30ec\u30b9CMS\u5316\u3057\u3066\u307f\u307e\u3057\u305f\u3002\u4eca\u56de\u306f\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306b Vite + React (CSR\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b5\u30a4\u30c9\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0)\u3092\u9078\u3073\u307e\u3057\u305f\u304c\u3001SEO\u3092\u8003\u3048\u308b\u3068Next.js\u306b\u3057\u3066SSR\uff08\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\uff09\u3084SSG\uff08\u9759\u7684\u30b5\u30a4\u30c8\u751f\u6210\uff09\u3092\u6d3b\u7528\u3057\u305f\u65b9\u304c\u826f\u304b\u3063\u305f\u3088\u3046\u306b\u601d\u3044\u307e\u3057\u305f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5225\u306e\u6a5f\u4f1a\u306bNext.js(App Router) + WordPress REST API \/ GraphQL \u3068\u3044\u3046\u7d44\u307f\u5408\u308f\u305b\u3067\u3084\u3063\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30b3\u30fc\u30dd\u30ec\u30fc\u30c8\u30b5\u30a4\u30c8\u306e\u30ea\u30cb\u30e5\u30fc\u30a2\u30eb\u306b\u3042\u305f\u308a\u3001\u300c\u30d8\u30c3\u30c9\u30ec\u30b9WordPress\u300d\u69cb\u6210\u3092\u691c\u8a0e\u3059\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3057\u305f\u3002WordPress\u3092CMS\/API\u3068\u3057\u3066\u4f7f\u3044\u3001\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306fReact\u3068\u3057\u307e\u3059\u3002\u691c\u8a0e\u306e\u305f\u3081\u306b\u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3057\u3066\u307f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":461,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":"","footnotes":""},"categories":[26,24],"tags":[29,41,15,11,28],"class_list":["post-442","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cms-wordpress","category-dev-env","tag-docker","tag-react","tag-vite","tag-wordpress","tag-wp-env"],"_links":{"self":[{"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/posts\/442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/comments?post=442"}],"version-history":[{"count":17,"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/posts\/442\/revisions"}],"predecessor-version":[{"id":463,"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/posts\/442\/revisions\/463"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/media\/461"}],"wp:attachment":[{"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/media?parent=442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/categories?post=442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/miginihitsuji.com\/prog\/wp-json\/wp\/v2\/tags?post=442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}