<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>hiro&#039;s note</title>
	<atom:link href="https://hiro60.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://hiro60.com</link>
	<description>たぶん日本で一番ビジネスが下手な ヒロ60 が日々の勉強のアウトプットや思ったことなどを書くためのサイトです。</description>
	<lastBuildDate>Thu, 19 Feb 2026 03:48:21 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://hiro60.com/wp-content/uploads/2022/06/cropped-profile_e3f19c1de5bed100f3d35f6c160a265b-1-32x32.webp</url>
	<title>hiro&#039;s note</title>
	<link>https://hiro60.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>PCでは無効・スマホでは有効にする電話リンクの作り方（CSSだけで対応）</title>
		<link>https://hiro60.com/site_production/1629/</link>
					<comments>https://hiro60.com/site_production/1629/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Thu, 19 Feb 2026 03:48:18 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[スニペット]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1629</guid>

					<description><![CDATA[<p>Webサイトに電話番号を載せるとき、スマホではタップして電話できると便利ですよね。 ただ一方で、PC表示のときに・クリックしても意味がない・誤ってクリックされる・リンク色や下線が不自然と感じたことはないでしょうか。 この [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1629/">PCでは無効・スマホでは有効にする電話リンクの作り方（CSSだけで対応）</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Webサイトに電話番号を載せるとき、<br>スマホではタップして電話できると便利ですよね。</p>



<p>ただ一方で、PC表示のときに<br>・クリックしても意味がない<br>・誤ってクリックされる<br>・リンク色や下線が不自然<br>と感じたことはないでしょうか。</p>



<p>この記事では、<br>「スマホでは電話リンクを有効にし、PCでは無効にする方法」をHTMLは変えず、CSSだけで実現する方法を解説します。</p>



<p>※コードに関するご質問や修正の依頼はお受けいたしかねます。<br>　もし、修正が必要ならChatGPTに聞くのが良いです。</p>



<h2 class="wp-block-heading">やりたいことの整理</h2>



<p>まず、今回実現したい状態を整理します。</p>



<p>・スマホ表示<br>　→ 電話番号をタップすると発信できる</p>



<p>・PC表示<br>　→ 電話番号は表示されるが、クリックできない<br>　→ 見た目も普通の文字と同じにする</p>



<p>この条件を満たす方法を考えます。</p>



<h2 class="wp-block-heading">HTML</h2>



<p>HTMLは、よくある電話リンクの形です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&lt;a class="tel-number" href="tel:09000000000">090-0000-0000&lt;/a></textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #ADBAC7">&lt;</span><span style="color: #8DDB8C">a</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">class</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;tel-number&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">href</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;tel:09000000000&quot;</span><span style="color: #ADBAC7">&gt;090-0000-0000&lt;/</span><span style="color: #8DDB8C">a</span><span style="color: #ADBAC7">&gt;</span></span></code></pre></div>



<p>ポイントは、<br>class に tel-number を付けていることです。</p>



<p>この class を目印にして、CSSで制御します。</p>



<h2 class="wp-block-heading">CSS</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>/* PC表示のときだけ電話リンクを無効化 */
@media screen and (min-width: 768px) {
  a.tel-number {
    pointer-events: none;   /* クリック無効 */
    color: inherit;         /* 文字色を通常の文字と同じに */
    text-decoration: none;  /* 下線を消す */
    cursor: default;        /* マウスカーソルを普通に */
  }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">/* PC表示のときだけ電話リンクを無効化 */</span></span>
<span class="line"><span style="color: #F47067">@media</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">screen</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">and</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">min-width</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">768</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #8DDB8C">a</span><span style="color: #6CB6FF">.tel-number</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">pointer-events</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">none</span><span style="color: #ADBAC7">;   </span><span style="color: #768390">/* クリック無効 */</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">color</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">inherit</span><span style="color: #ADBAC7">;         </span><span style="color: #768390">/* 文字色を通常の文字と同じに */</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">text-decoration</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">none</span><span style="color: #ADBAC7">;  </span><span style="color: #768390">/* 下線を消す */</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">cursor</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">default</span><span style="color: #ADBAC7">;        </span><span style="color: #768390">/* マウスカーソルを普通に */</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<h3 class="wp-block-heading">CSSの内容をひとつずつ解説</h3>



<p>min-width: 768px<br>→ 画面幅が768px以上のとき（PC・タブレット想定）だけ適用されます。</p>



<p>pointer-events: none<br>→ クリックやタップを受け付けなくします。<br>　これにより、PCでは電話リンクが無効になります。</p>



<p>color: inherit<br>→ 親要素と同じ文字色にします。<br>　リンク特有の青色を消すためです。</p>



<p>text-decoration: none<br>→ リンクの下線を消します。</p>



<p>cursor: default<br>→ マウスを乗せたとき、指マークではなく通常の矢印にします。</p>



<h2 class="wp-block-heading">考え方（なぜCSSでできるのか）</h2>



<p>スマホとPCの違いは「画面の横幅」です。</p>



<p>CSSには<br>「画面幅が〇px以上のときだけ、このスタイルを適用する」<br>という指定ができます。</p>



<p>この仕組み（メディアクエリ）を使えば、</p>



<p>・画面が小さい → スマホ想定<br>・画面が大きい → PC想定</p>



<p>として、見た目や挙動を切り替えられます。</p>



<h2 class="wp-block-heading">スマホではどうなるのか</h2>



<p>このCSSは<br>「画面幅が768px以上のときだけ」効きます。</p>



<p>そのため、</p>



<p>・スマホ表示<br>　→ CSSは適用されない<br>　→ tel:リンクはそのまま有効</p>



<p>という状態になります。</p>



<p>HTMLを分けたり、JavaScriptを使う必要はありません。</p>



<h2 class="wp-block-heading">画面幅の調整について</h2>



<p>768px は一例です。</p>



<p>例えば、<br>・PCのみを対象にしたい場合 → 1024px<br>・タブレットも含めたい場合 → 768px</p>



<p>など、サイトに合わせて調整できます。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>・HTMLはそのまま<br>・CSSだけでスマホとPCの挙動を切り替え可能<br>・スマホでは電話リンク有効<br>・PCではクリック無効＆見た目も自然</p>



<p>電話番号を安心して掲載したい場合、<br>シンプルで使いやすい方法なのでおすすめです。</p>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1629"
					data-ulike-nonce="039848bdc5"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1629"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1629/">PCでは無効・スマホでは有効にする電話リンクの作り方（CSSだけで対応）</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1629/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>特定の位置で「LINEに送るブロック」を表示</title>
		<link>https://hiro60.com/site_production/1620/</link>
					<comments>https://hiro60.com/site_production/1620/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Wed, 26 Nov 2025 07:33:24 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[スニペット]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1620</guid>

					<description><![CDATA[<p>作成したものの実際には使わなかったコードをスニペットとして残しておきます。 必要な方がいらっしゃいましたらお気軽にご利用ください。 動作としては、特定のidに差し掛かったら自動的に表示されるという動きです。 ※コードに関 [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1620/">特定の位置で「LINEに送るブロック」を表示</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>作成したものの実際には使わなかったコードをスニペットとして残しておきます。</p>



<p>必要な方がいらっしゃいましたらお気軽にご利用ください。</p>



<p>動作としては、特定のidに差し掛かったら自動的に表示されるという動きです。</p>



<p>※コードに関するご質問や修正の依頼はお受けいたしかねます。<br>　もし、修正が必要ならChatGPTに聞くのが良いです。</p>



<h2 class="wp-block-heading">実際の動き</h2>



<p>右側の部分をスクロールすると、セクション２に差し掛かったタイミングでLINEに送るためのブロックが表示されます。</p>



<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="VYaQBLb" data-pen-title="Untitled" data-user="-hiro60" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
      <span>See the Pen <a href="https://codepen.io/-hiro60/pen/VYaQBLb">
  Untitled</a> by sakabonji (<a href="https://codepen.io/-hiro60">@-hiro60</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
      </p>
      <script async src="https://public.codepenassets.com/embed/index.js"></script>



<h2 class="wp-block-heading">HTML</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="&lt;!--  LINEに送る  --&gt;
    &lt;div class=&quot;line-reminder line-reminder--mobile&quot;&gt;
        &lt;button type=&quot;button&quot; class=&quot;line-reminder__close&quot; aria-label=&quot;このメッセージを閉じる&quot;&gt;×&lt;/button&gt;
        &lt;p class=&quot;line-reminder__title&quot;&gt;
            見出し的な部分
        &lt;/p&gt;
        &lt;p class=&quot;line-reminder__text&quot;&gt;
            説明的な部分
        &lt;/p&gt;
        &lt;a
                href=&quot;LINEのシェアURL&quot;
                class=&quot;line-reminder__button&quot;
                target=&quot;_blank&quot;
                rel=&quot;noopener&quot;
        &gt;
            LINEで自分に送る
        &lt;/a&gt;
        &lt;p class=&quot;line-reminder__note&quot;&gt;
            ※ご自身のLINEに、このページのURLだけが送信されます。こちらから営業メッセージが届くことはありませんのでご安心ください。
        &lt;/p&gt;
    &lt;/div&gt;" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">&lt;!--  LINEに送る  --&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">    &lt;</span><span style="color: #8DDB8C">div</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">class</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;line-reminder line-reminder--mobile&quot;</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;</span><span style="color: #8DDB8C">button</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">type</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;button&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">class</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;line-reminder__close&quot;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">aria-label</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;このメッセージを閉じる&quot;</span><span style="color: #ADBAC7">&gt;×&lt;/</span><span style="color: #8DDB8C">button</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;</span><span style="color: #8DDB8C">p</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">class</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;line-reminder__title&quot;</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">            見出し的な部分</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;/</span><span style="color: #8DDB8C">p</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;</span><span style="color: #8DDB8C">p</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">class</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;line-reminder__text&quot;</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">            説明的な部分</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;/</span><span style="color: #8DDB8C">p</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;</span><span style="color: #8DDB8C">a</span></span>
<span class="line"><span style="color: #ADBAC7">                </span><span style="color: #6CB6FF">href</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;LINEのシェアURL&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">                </span><span style="color: #6CB6FF">class</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;line-reminder__button&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">                </span><span style="color: #6CB6FF">target</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;_blank&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">                </span><span style="color: #6CB6FF">rel</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;noopener&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">        &gt;</span></span>
<span class="line"><span style="color: #ADBAC7">            LINEで自分に送る</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;/</span><span style="color: #8DDB8C">a</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;</span><span style="color: #8DDB8C">p</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">class</span><span style="color: #ADBAC7">=</span><span style="color: #96D0FF">&quot;line-reminder__note&quot;</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">            ※ご自身のLINEに、このページのURLだけが送信されます。こちらから営業メッセージが届くことはありませんのでご安心ください。</span></span>
<span class="line"><span style="color: #ADBAC7">        &lt;/</span><span style="color: #8DDB8C">p</span><span style="color: #ADBAC7">&gt;</span></span>
<span class="line"><span style="color: #ADBAC7">    &lt;/</span><span style="color: #8DDB8C">div</span><span style="color: #ADBAC7">&gt;</span></span></code></pre></div>



<h2 class="wp-block-heading">CSS</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/* =====================
 LINEに送る
 ===================== */
/* 基本は非表示にしておく（PCなど） */
.line-reminder {
    display: none;
}

/* スマホでだけ表示 */
@media (max-width: 768px) {
    .line-reminder--mobile {
        display: block;
        padding: 14px 16px 12px;
        background-color: #fff;
        border-radius: 12px;
        border: 1px solid #e5e5e5;
        box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
        font-size: 13px;
        line-height: 1.6;
        box-sizing: border-box;
        opacity: 0;
        transform: translateY(20px);
        pointer-events: none;
    }

    .line-reminder__title {
        margin: 0 0 6px;
        font-size: 14px;
        font-weight: 600;
    }

    .line-reminder__button {
        display: block;
        padding: 10px 14px;
        text-align: center;
        font-size: 13px;
        font-weight: 600;
        text-decoration: none;
        border-radius: 999px;
        background-color: #06c755; /* LINEっぽいグリーン */
        color: #ffffff;
        box-shadow: 0 3px 8px rgba(0, 0, 0, 0.12);
    }

    .line-reminder__button:hover {
        opacity: 0.95;
    }

    .line-reminder__button:active {
        transform: translateY(1px);
        box-shadow: 0 2px 5px rgba(0, 0, 0, 0.16) inset;
    }

    .line-reminder__note {
        margin: 0;
        font-size: 11px;
        color: #777777;
    }

    .line-reminder__close {
        position: absolute;
        top: 6px;
        right: 8px;
        border: none;
        background: transparent;
        font-size: 16px;
        line-height: 1;
        padding: 0;
        color: #999;
    }

    .line-reminder__close:active {
        transform: scale(0.95);
    }

    /* is-floating 状態では position: fixed で画面下に固定される */
    .line-reminder--mobile.is-floating {
        position: fixed;
        left: 12px;
        right: 12px;
        bottom: 12px;
        margin: 0;
        z-index: 50;
        opacity: 0;
        transform: translateY(16px);
        transition: opacity 1.00s ease, transform 1.00s ease;
        pointer-events: none;
    }

    .line-reminder--mobile.is-floating.is-visible {
        opacity: 1;
        transform: translateY(0);
        pointer-events: auto;
    }
}" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">/* =====================</span></span>
<span class="line"><span style="color: #768390"> LINEに送る</span></span>
<span class="line"><span style="color: #768390"> ===================== */</span></span>
<span class="line"><span style="color: #768390">/* 基本は非表示にしておく（PCなど） */</span></span>
<span class="line"><span style="color: #6CB6FF">.line-reminder</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">display</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">none</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #768390">/* スマホでだけ表示 */</span></span>
<span class="line"><span style="color: #F47067">@media</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">max-width</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">768</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder--mobile</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">display</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">block</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">padding</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">14</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">16</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">12</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">background-color</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">#fff</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">border-radius</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">12</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">border</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">1</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">solid</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">#e5e5e5</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">box-shadow</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">4</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">12</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">rgba</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0.08</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">font-size</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">13</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">line-height</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">1.6</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">box-sizing</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">border-box</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">opacity</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">transform</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">translateY</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">20</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">pointer-events</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">none</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder__title</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">margin</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">6</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">font-size</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">14</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">font-weight</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">600</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder__button</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">display</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">block</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">padding</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">10</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">14</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">text-align</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">center</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">font-size</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">13</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">font-weight</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">600</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">text-decoration</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">none</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">border-radius</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">999</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">background-color</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">#06c755</span><span style="color: #ADBAC7">; </span><span style="color: #768390">/* LINEっぽいグリーン */</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">color</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">#ffffff</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">box-shadow</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">3</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">8</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">rgba</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0.12</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder__button:hover</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">opacity</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0.95</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder__button:active</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">transform</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">translateY</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">1</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">box-shadow</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">2</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">5</span><span style="color: #F47067">px</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">rgba</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">0.16</span><span style="color: #ADBAC7">) </span><span style="color: #6CB6FF">inset</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder__note</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">margin</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">font-size</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">11</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">color</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">#777777</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder__close</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">position</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">absolute</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">top</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">6</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">right</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">8</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">border</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">none</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">background</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">transparent</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">font-size</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">16</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">line-height</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">padding</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">color</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">#999</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder__close:active</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">transform</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">scale</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0.95</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">/* is-floating 状態では position: fixed で画面下に固定される */</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder--mobile.is-floating</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">position</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">fixed</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">left</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">12</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">right</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">12</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">bottom</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">12</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">margin</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">z-index</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">opacity</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">transform</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">translateY</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">16</span><span style="color: #F47067">px</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">transition</span><span style="color: #ADBAC7">: opacity </span><span style="color: #6CB6FF">1.00</span><span style="color: #F47067">s</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">ease</span><span style="color: #ADBAC7">, transform </span><span style="color: #6CB6FF">1.00</span><span style="color: #F47067">s</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">ease</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">pointer-events</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">none</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">.line-reminder--mobile.is-floating.is-visible</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">opacity</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">1</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">transform</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">translateY</span><span style="color: #ADBAC7">(</span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #6CB6FF">pointer-events</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">auto</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span></code></pre></div>



<h2 class="wp-block-heading">JavaScript</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// LINEに送るブロック
document.addEventListener('DOMContentLoaded', function () {

    const reminder = document.querySelector('.line-reminder--mobile');
    const trigger = document.getElementById('表示基準となるid名');

    // 安全チェック
    if (!reminder || !trigger) return;

    // スマホのみ
    if (window.innerWidth &gt; 768) return;

    // まず固定表示モードにする（透明）
    reminder.classList.add('is-floating');

    let shown = false;

    function checkShow() {
        if (shown) return;

        const triggerRect = trigger.getBoundingClientRect();
        const winHeight = window.innerHeight;

        // 表示基準となるid名の上部が画面内に少し入ったら表示
        if (triggerRect.top &lt; winHeight - 50) {
            reminder.classList.add('is-visible');
            shown = true;
        }
    }

    // スクロール時にチェック
    window.addEventListener('scroll', checkShow, { passive: true });

    // リロード後の位置でもチェック
    checkShow();

    // ×ボタンで閉じる
    const closeBtn = reminder.querySelector('.line-reminder__close');
    if (closeBtn) {
        closeBtn.addEventListener('click', function (e) {
            e.preventDefault();
            reminder.classList.remove('is-visible');
        });
    }
});" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">// LINEに送るブロック</span></span>
<span class="line"><span style="color: #ADBAC7">document.</span><span style="color: #DCBDFB">addEventListener</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;DOMContentLoaded&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #F47067">function</span><span style="color: #ADBAC7"> () {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">reminder</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> document.</span><span style="color: #DCBDFB">querySelector</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;.line-reminder--mobile&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">trigger</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> document.</span><span style="color: #DCBDFB">getElementById</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;表示基準となるid名&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// 安全チェック</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #ADBAC7">reminder </span><span style="color: #F47067">||</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">!</span><span style="color: #ADBAC7">trigger) </span><span style="color: #F47067">return</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// スマホのみ</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (window.innerWidth </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">768</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">return</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// まず固定表示モードにする（透明）</span></span>
<span class="line"><span style="color: #ADBAC7">    reminder.classList.</span><span style="color: #DCBDFB">add</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;is-floating&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">let</span><span style="color: #ADBAC7"> shown </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">false</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">function</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">checkShow</span><span style="color: #ADBAC7">() {</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (shown) </span><span style="color: #F47067">return</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">triggerRect</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> trigger.</span><span style="color: #DCBDFB">getBoundingClientRect</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">winHeight</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> window.innerHeight;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #768390">// 表示基準となるid名の上部が画面内に少し入ったら表示</span></span>
<span class="line"><span style="color: #ADBAC7">        </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (triggerRect.top </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> winHeight </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">50</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">            reminder.classList.</span><span style="color: #DCBDFB">add</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;is-visible&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">            shown </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">true</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">        }</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// スクロール時にチェック</span></span>
<span class="line"><span style="color: #ADBAC7">    window.</span><span style="color: #DCBDFB">addEventListener</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;scroll&#39;</span><span style="color: #ADBAC7">, checkShow, { passive: </span><span style="color: #6CB6FF">true</span><span style="color: #ADBAC7"> });</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// リロード後の位置でもチェック</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">checkShow</span><span style="color: #ADBAC7">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">// ×ボタンで閉じる</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">const</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">closeBtn</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> reminder.</span><span style="color: #DCBDFB">querySelector</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;.line-reminder__close&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (closeBtn) {</span></span>
<span class="line"><span style="color: #ADBAC7">        closeBtn.</span><span style="color: #DCBDFB">addEventListener</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;click&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #F47067">function</span><span style="color: #ADBAC7"> (</span><span style="color: #F69D50">e</span><span style="color: #ADBAC7">) {</span></span>
<span class="line"><span style="color: #ADBAC7">            e.</span><span style="color: #DCBDFB">preventDefault</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">            reminder.classList.</span><span style="color: #DCBDFB">remove</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;is-visible&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">        });</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">});</span></span></code></pre></div>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1620"
					data-ulike-nonce="4003d0a98a"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1620"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1620/">特定の位置で「LINEに送るブロック」を表示</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1620/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>投稿をあらかじめ決まった日付で非表示にする（プラグイン使用なし）</title>
		<link>https://hiro60.com/site_production/1610/</link>
					<comments>https://hiro60.com/site_production/1610/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Mon, 29 Sep 2025 07:31:14 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[スニペット]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1610</guid>

					<description><![CDATA[<p>WordPressを使った会社サイトで、キャンペーン情報などを投稿しているとき、キャンペーン期間が終了したら自動的に投稿を削除したいことってありますよね？ プラグインでできる作業ではありますが、何かしら制限で導入できない [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1610/">投稿をあらかじめ決まった日付で非表示にする（プラグイン使用なし）</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>WordPressを使った会社サイトで、キャンペーン情報などを投稿しているとき、キャンペーン期間が終了したら自動的に投稿を削除したいことってありますよね？</p>



<p>プラグインでできる作業ではありますが、何かしら制限で導入できない場合は、自分でPHPで実装する必要があります。</p>



<p>ChatGPTに確認しながらコードを実装したので備忘録として残しておきます。</p>



<p>もし、同じ状況にある人でPHPで実装する必要がある場合は参考になると嬉しいです。</p>



<h2 class="wp-block-heading">できること</h2>



<ul class="wp-block-list">
<li>投稿の編集画面に「キャンペーン終了日」を入力する欄が出ます。</li>



<li>その日時になると<strong>自動で非公開（private）</strong>に切り替わります。</li>



<li>ついでにタイトルの末尾へ「（YYYYMMDD非公開）」を一度だけ追記します。<br>例）多言語化について（20251227非公開）</li>
</ul>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="750" height="551" src="https://hiro60.com/wp-content/uploads/2025/09/image-1.png" alt="" class="wp-image-1612" srcset="https://hiro60.com/wp-content/uploads/2025/09/image-1.png 750w, https://hiro60.com/wp-content/uploads/2025/09/image-1-300x220.png 300w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption class="wp-element-caption">投稿画面のサイドバーにブロックが追加されます。（初期値は一番下）</figcaption></figure>



<h2 class="wp-block-heading">前提と注意</h2>



<p><strong>テーマの子テーマ</strong>の <code>functions.php</code> に追記して使います<br>もし、親テーマに直書きする場合はアップデートで消えます。<br>特に理由がなければ子テーマで実装してください。</p>



<p>WordPressの<strong>タイムゾーン</strong>は「設定 → 一般」で正しく設定（日本なら東京）。</p>



<p><strong>WP-Cron</strong>を使用。<br>これはあらかじめ予定していたイベントを「誰かがサイトへアクセスしたとき」に動かす仕組み。<br>確実にしたいならサーバーのcronで <code>wp-cron.php</code> を定期実行する必要があるそうです。</p>



<p>キャッシュ系プラグイン（WP Super Cache）を使っていたのですが、<strong>一覧に古い表示が残る</strong>ことがありました。<br>設定で記事の更新のタイミングで<strong>キャッシュ削除</strong>を行うように変更しました。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="750" height="309" src="https://hiro60.com/wp-content/uploads/2025/09/image.png" alt="" class="wp-image-1611" srcset="https://hiro60.com/wp-content/uploads/2025/09/image.png 750w, https://hiro60.com/wp-content/uploads/2025/09/image-300x124.png 300w" sizes="(max-width: 750px) 100vw, 750px" /></figure>



<h2 class="wp-block-heading">完成コード（コピペOK・子テーマの <code>functions.php</code> に貼る）</h2>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="/**
 * キャンペーン投稿の自動非公開化 &amp; タイトル自動追記
 *
 * 概要:
 *  - 投稿編集画面に「キャンペーン終了日（datetime）」メタボックスを追加します。
 *  - 保存時に終了日時を投稿メタへ保存し、WP-Cron の単発イベントをスケジュールします。
 *  - 終了日時に達したら自動的に該当投稿を「非公開 (private)」へ変更し、
 *    タイトル末尾に「（YYYYMMDD非公開）」を一度だけ付与します（重複追記を防止）。
 *  - 終了日時が過去の場合は保存直後に即時処理されます。
 *
 * 主なフック:
 *  - add_meta_boxes: 終了日時入力UI（メタボックス）を追加
 *  - save_post: 終了日時の保存／WP-Cron 単発ジョブの登録・置き換え
 *  - campaign_expire_post（カスタムフック）: 期限到来時の非公開化＆タイトル更新を実行
 *
 * 使い方:
 *  1) 本コードをテーマの functions.php またはサイト専用プラグインに配置します。
 *  2) 投稿編集画面のサイドバーに出る「キャンペーン終了日」を設定して更新します。
 *  3) 期限に達すると自動で非公開化され、タイトル末尾に日付付きの注記が追加されます。
 *
 * 注意事項:
 *  - サイトのタイムゾーン（一般設定）に基づいて処理します。日本時間ならそのまま入力でOK。
 *  - WP-Cron を無効化している環境では、OSの cron から wp-cron.php を定期実行してください。
 *  - 対象は post（投稿）のみ。必要に応じて post_type 条件を調整してください。
 */
// 終了日時メタボックスを追加
add_action('add_meta_boxes', function () {
  add_meta_box('campaign_expiry', 'キャンペーン終了日', function ($post) {
    $ts = (int) get_post_meta($post-&gt;ID, 'campaign_expiry', true);
    $val = $ts ? wp_date('Y-m-d\TH:i', $ts, wp_timezone()) : '';
    wp_nonce_field('save_campaign_expiry', 'campaign_expiry_nonce');
    echo '&lt;p&gt;&lt;label for=&quot;campaign_expiry_input&quot;&gt;終了日時&lt;/label&gt;&lt;br&gt;';
    echo '&lt;input type=&quot;datetime-local&quot; id=&quot;campaign_expiry_input&quot; name=&quot;campaign_expiry&quot; value=&quot;' . esc_attr($val) . '&quot; /&gt;&lt;/p&gt;';
    echo '&lt;p&gt;&lt;small&gt;この日時を過ぎると自動で&lt;strong&gt;非公開&lt;/strong&gt;になります。&lt;/small&gt;&lt;/p&gt;';
  }, 'post', 'side', 'default');
});

add_action('save_post', function ($post_id, $post, $update) {
  if (!isset($_POST['campaign_expiry_nonce']) || !wp_verify_nonce($_POST['campaign_expiry_nonce'], 'save_campaign_expiry')) return;
  if (defined('DOING_AUTOSAVE') &amp;&amp; DOING_AUTOSAVE) return;
  if ($post-&gt;post_type !== 'post') return;

  // 既存ジョブを一旦解除
  if ($ts = wp_next_scheduled('campaign_expire_post', [$post_id])) {
    wp_unschedule_event($ts, 'campaign_expire_post', [$post_id]);
  }

  // 入力 → サイトのタイムゾーンでタイムスタンプ化
  $timestamp = 0;
  if (!empty($_POST['campaign_expiry'])) {
    $dt = date_create(wp_unslash($_POST['campaign_expiry']), wp_timezone());
    if ($dt) $timestamp = $dt-&gt;getTimestamp();
  }

  if ($timestamp) {
    update_post_meta($post_id, 'campaign_expiry', $timestamp);
    if ($timestamp &gt; time()) {
      wp_schedule_single_event($timestamp, 'campaign_expire_post', [$post_id]); // 期限に実行
    } else {
      // すでに過去なら即時で非公開処理
      campaign_expire_post_callback($post_id);
    }
  } else {
    delete_post_meta($post_id, 'campaign_expiry');
  }
}, 10, 3);

add_action('campaign_expire_post', 'campaign_expire_post_callback');
function campaign_expire_post_callback($post_id) {
  $expiry = (int) get_post_meta($post_id, 'campaign_expiry', true);
  if (!$expiry || time() &lt; $expiry) return;

  $p = get_post($post_id);
  if (!$p) return;

  // 1) タイトル末尾に（YYYYMMDD非公開）を付与（重複防止）
  $date_str = wp_date('Ymd', $expiry, wp_timezone());
  $title    = preg_replace('/（\d{8}[^）]*）\s*$/u', '', $p-&gt;post_title); // 既存の似た括弧表記を除去
  $title   .= '（' . $date_str . '非公開）';

  // 2) 非公開化 &amp; タイトル更新（スラッグはそのまま）
  wp_update_post([
    'ID'          =&gt; $post_id,
    'post_status' =&gt; 'private',
    'post_title'  =&gt; $title,
  ]);
}
" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #768390">/**</span></span>
<span class="line"><span style="color: #768390"> * キャンペーン投稿の自動非公開化 &amp; タイトル自動追記</span></span>
<span class="line"><span style="color: #768390"> *</span></span>
<span class="line"><span style="color: #768390"> * 概要:</span></span>
<span class="line"><span style="color: #768390"> *  - 投稿編集画面に「キャンペーン終了日（datetime）」メタボックスを追加します。</span></span>
<span class="line"><span style="color: #768390"> *  - 保存時に終了日時を投稿メタへ保存し、WP-Cron の単発イベントをスケジュールします。</span></span>
<span class="line"><span style="color: #768390"> *  - 終了日時に達したら自動的に該当投稿を「非公開 (private)」へ変更し、</span></span>
<span class="line"><span style="color: #768390"> *    タイトル末尾に「（YYYYMMDD非公開）」を一度だけ付与します（重複追記を防止）。</span></span>
<span class="line"><span style="color: #768390"> *  - 終了日時が過去の場合は保存直後に即時処理されます。</span></span>
<span class="line"><span style="color: #768390"> *</span></span>
<span class="line"><span style="color: #768390"> * 主なフック:</span></span>
<span class="line"><span style="color: #768390"> *  - add_meta_boxes: 終了日時入力UI（メタボックス）を追加</span></span>
<span class="line"><span style="color: #768390"> *  - save_post: 終了日時の保存／WP-Cron 単発ジョブの登録・置き換え</span></span>
<span class="line"><span style="color: #768390"> *  - campaign_expire_post（カスタムフック）: 期限到来時の非公開化＆タイトル更新を実行</span></span>
<span class="line"><span style="color: #768390"> *</span></span>
<span class="line"><span style="color: #768390"> * 使い方:</span></span>
<span class="line"><span style="color: #768390"> *  1) 本コードをテーマの functions.php またはサイト専用プラグインに配置します。</span></span>
<span class="line"><span style="color: #768390"> *  2) 投稿編集画面のサイドバーに出る「キャンペーン終了日」を設定して更新します。</span></span>
<span class="line"><span style="color: #768390"> *  3) 期限に達すると自動で非公開化され、タイトル末尾に日付付きの注記が追加されます。</span></span>
<span class="line"><span style="color: #768390"> *</span></span>
<span class="line"><span style="color: #768390"> * 注意事項:</span></span>
<span class="line"><span style="color: #768390"> *  - サイトのタイムゾーン（一般設定）に基づいて処理します。日本時間ならそのまま入力でOK。</span></span>
<span class="line"><span style="color: #768390"> *  - WP-Cron を無効化している環境では、OSの cron から wp-cron.php を定期実行してください。</span></span>
<span class="line"><span style="color: #768390"> *  - 対象は post（投稿）のみ。必要に応じて post_type 条件を調整してください。</span></span>
<span class="line"><span style="color: #768390"> */</span></span>
<span class="line"><span style="color: #768390">// 終了日時メタボックスを追加</span></span>
<span class="line"><span style="color: #DCBDFB">add_action</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;add_meta_boxes&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #F47067">function</span><span style="color: #ADBAC7"> () {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">add_meta_box</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;campaign_expiry&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&#39;キャンペーン終了日&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #F47067">function</span><span style="color: #ADBAC7"> ($post) {</span></span>
<span class="line"><span style="color: #ADBAC7">    $ts </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">int</span><span style="color: #ADBAC7">) </span><span style="color: #DCBDFB">get_post_meta</span><span style="color: #ADBAC7">($post</span><span style="color: #F47067">-&gt;</span><span style="color: #ADBAC7">ID, </span><span style="color: #96D0FF">&#39;campaign_expiry&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">true</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    $val </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> $ts </span><span style="color: #F47067">?</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">wp_date</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;Y-m-d\TH:i&#39;</span><span style="color: #ADBAC7">, $ts, </span><span style="color: #DCBDFB">wp_timezone</span><span style="color: #ADBAC7">()) </span><span style="color: #F47067">:</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;&#39;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">wp_nonce_field</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;save_campaign_expiry&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&#39;campaign_expiry_nonce&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">echo</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;&lt;p&gt;&lt;label for=&quot;campaign_expiry_input&quot;&gt;終了日時&lt;/label&gt;&lt;br&gt;&#39;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">echo</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;&lt;input type=&quot;datetime-local&quot; id=&quot;campaign_expiry_input&quot; name=&quot;campaign_expiry&quot; value=&quot;&#39;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">.</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">esc_attr</span><span style="color: #ADBAC7">($val) </span><span style="color: #F47067">.</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;&quot; /&gt;&lt;/p&gt;&#39;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #6CB6FF">echo</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;&lt;p&gt;&lt;small&gt;この日時を過ぎると自動で&lt;strong&gt;非公開&lt;/strong&gt;になります。&lt;/small&gt;&lt;/p&gt;&#39;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  }, </span><span style="color: #96D0FF">&#39;post&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&#39;side&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&#39;default&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCBDFB">add_action</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;save_post&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #F47067">function</span><span style="color: #ADBAC7"> ($post_id, $post, $update) {</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #6CB6FF">isset</span><span style="color: #ADBAC7">($_POST[</span><span style="color: #96D0FF">&#39;campaign_expiry_nonce&#39;</span><span style="color: #ADBAC7">]) </span><span style="color: #F47067">||</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">!</span><span style="color: #DCBDFB">wp_verify_nonce</span><span style="color: #ADBAC7">($_POST[</span><span style="color: #96D0FF">&#39;campaign_expiry_nonce&#39;</span><span style="color: #ADBAC7">], </span><span style="color: #96D0FF">&#39;save_campaign_expiry&#39;</span><span style="color: #ADBAC7">)) </span><span style="color: #F47067">return</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #6CB6FF">defined</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;DOING_AUTOSAVE&#39;</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">&amp;&amp;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">DOING_AUTOSAVE</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">return</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ($post</span><span style="color: #F47067">-&gt;</span><span style="color: #ADBAC7">post_type </span><span style="color: #F47067">!==</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;post&#39;</span><span style="color: #ADBAC7">) </span><span style="color: #F47067">return</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// 既存ジョブを一旦解除</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ($ts </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">wp_next_scheduled</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;campaign_expire_post&#39;</span><span style="color: #ADBAC7">, [$post_id])) {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">wp_unschedule_event</span><span style="color: #ADBAC7">($ts, </span><span style="color: #96D0FF">&#39;campaign_expire_post&#39;</span><span style="color: #ADBAC7">, [$post_id]);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// 入力 → サイトのタイムゾーンでタイムスタンプ化</span></span>
<span class="line"><span style="color: #ADBAC7">  $timestamp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">0</span><span style="color: #ADBAC7">;</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #6CB6FF">empty</span><span style="color: #ADBAC7">($_POST[</span><span style="color: #96D0FF">&#39;campaign_expiry&#39;</span><span style="color: #ADBAC7">])) {</span></span>
<span class="line"><span style="color: #ADBAC7">    $dt </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">date_create</span><span style="color: #ADBAC7">(</span><span style="color: #DCBDFB">wp_unslash</span><span style="color: #ADBAC7">($_POST[</span><span style="color: #96D0FF">&#39;campaign_expiry&#39;</span><span style="color: #ADBAC7">]), </span><span style="color: #DCBDFB">wp_timezone</span><span style="color: #ADBAC7">());</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ($dt) $timestamp </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> $dt</span><span style="color: #F47067">-&gt;</span><span style="color: #DCBDFB">getTimestamp</span><span style="color: #ADBAC7">();</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ($timestamp) {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">update_post_meta</span><span style="color: #ADBAC7">($post_id, </span><span style="color: #96D0FF">&#39;campaign_expiry&#39;</span><span style="color: #ADBAC7">, $timestamp);</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> ($timestamp </span><span style="color: #F47067">&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">time</span><span style="color: #ADBAC7">()) {</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #DCBDFB">wp_schedule_single_event</span><span style="color: #ADBAC7">($timestamp, </span><span style="color: #96D0FF">&#39;campaign_expire_post&#39;</span><span style="color: #ADBAC7">, [$post_id]); </span><span style="color: #768390">// 期限に実行</span></span>
<span class="line"><span style="color: #ADBAC7">    } </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #768390">// すでに過去なら即時で非公開処理</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #DCBDFB">campaign_expire_post_callback</span><span style="color: #ADBAC7">($post_id);</span></span>
<span class="line"><span style="color: #ADBAC7">    }</span></span>
<span class="line"><span style="color: #ADBAC7">  } </span><span style="color: #F47067">else</span><span style="color: #ADBAC7"> {</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #DCBDFB">delete_post_meta</span><span style="color: #ADBAC7">($post_id, </span><span style="color: #96D0FF">&#39;campaign_expiry&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  }</span></span>
<span class="line"><span style="color: #ADBAC7">}, </span><span style="color: #6CB6FF">10</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">3</span><span style="color: #ADBAC7">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCBDFB">add_action</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;campaign_expire_post&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&#39;campaign_expire_post_callback&#39;</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #F47067">function</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">campaign_expire_post_callback</span><span style="color: #ADBAC7">($post_id) {</span></span>
<span class="line"><span style="color: #ADBAC7">  $expiry </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">int</span><span style="color: #ADBAC7">) </span><span style="color: #DCBDFB">get_post_meta</span><span style="color: #ADBAC7">($post_id, </span><span style="color: #96D0FF">&#39;campaign_expiry&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #6CB6FF">true</span><span style="color: #ADBAC7">);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #ADBAC7">$expiry </span><span style="color: #F47067">||</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">time</span><span style="color: #ADBAC7">() </span><span style="color: #F47067">&lt;</span><span style="color: #ADBAC7"> $expiry) </span><span style="color: #F47067">return</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  $p </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">get_post</span><span style="color: #ADBAC7">($post_id);</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">if</span><span style="color: #ADBAC7"> (</span><span style="color: #F47067">!</span><span style="color: #ADBAC7">$p) </span><span style="color: #F47067">return</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// 1) タイトル末尾に（YYYYMMDD非公開）を付与（重複防止）</span></span>
<span class="line"><span style="color: #ADBAC7">  $date_str </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #DCBDFB">wp_date</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;Ymd&#39;</span><span style="color: #ADBAC7">, $expiry, </span><span style="color: #DCBDFB">wp_timezone</span><span style="color: #ADBAC7">());</span></span>
<span class="line"><span style="color: #ADBAC7">  $title    </span><span style="color: #F47067">=</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">preg_replace</span><span style="color: #ADBAC7">(</span><span style="color: #96D0FF">&#39;/（</span><span style="color: #8DDB8C; font-weight: bold">\d</span><span style="color: #96D0FF">{8}[^）]</span><span style="color: #F47067">*</span><span style="color: #96D0FF">）</span><span style="color: #8DDB8C; font-weight: bold">\s</span><span style="color: #F47067">*$</span><span style="color: #96D0FF">/u&#39;</span><span style="color: #ADBAC7">, </span><span style="color: #96D0FF">&#39;&#39;</span><span style="color: #ADBAC7">, $p</span><span style="color: #F47067">-&gt;</span><span style="color: #ADBAC7">post_title); </span><span style="color: #768390">// 既存の似た括弧表記を除去</span></span>
<span class="line"><span style="color: #ADBAC7">  $title   </span><span style="color: #F47067">.=</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;（&#39;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">.</span><span style="color: #ADBAC7"> $date_str </span><span style="color: #F47067">.</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;非公開）&#39;</span><span style="color: #ADBAC7">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #768390">// 2) 非公開化 &amp; タイトル更新（スラッグはそのまま）</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #DCBDFB">wp_update_post</span><span style="color: #ADBAC7">([</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #96D0FF">&#39;ID&#39;</span><span style="color: #ADBAC7">          </span><span style="color: #F47067">=&gt;</span><span style="color: #ADBAC7"> $post_id,</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #96D0FF">&#39;post_status&#39;</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">=&gt;</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&#39;private&#39;</span><span style="color: #ADBAC7">,</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #96D0FF">&#39;post_title&#39;</span><span style="color: #ADBAC7">  </span><span style="color: #F47067">=&gt;</span><span style="color: #ADBAC7"> $title,</span></span>
<span class="line"><span style="color: #ADBAC7">  ]);</span></span>
<span class="line"><span style="color: #ADBAC7">}</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading">使い方</h2>



<ol class="wp-block-list">
<li>子テーマの <code>functions.php</code> に<strong>上のコードを貼る</strong></li>



<li>投稿の編集画面 → 右側に「<strong>キャンペーン終了日</strong>」が出るので、日時を入力して更新</li>



<li>期限が来ると<strong>自動で非公開</strong>になり、<strong>タイトル末尾</strong>に日付が付く</li>
</ol>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="540" height="374" data-id="1613" src="https://hiro60.com/wp-content/uploads/2025/09/CleanShot-2025-09-29-at-16.25.34@2x.png" alt="" class="wp-image-1613" srcset="https://hiro60.com/wp-content/uploads/2025/09/CleanShot-2025-09-29-at-16.25.34@2x.png 540w, https://hiro60.com/wp-content/uploads/2025/09/CleanShot-2025-09-29-at-16.25.34@2x-300x208.png 300w" sizes="(max-width: 540px) 100vw, 540px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="750" height="366" data-id="1614" src="https://hiro60.com/wp-content/uploads/2025/09/CleanShot-2025-09-29-at-16.26.57@2x.png" alt="" class="wp-image-1614" srcset="https://hiro60.com/wp-content/uploads/2025/09/CleanShot-2025-09-29-at-16.26.57@2x.png 750w, https://hiro60.com/wp-content/uploads/2025/09/CleanShot-2025-09-29-at-16.26.57@2x-300x146.png 300w" sizes="(max-width: 750px) 100vw, 750px" /></figure>
</figure>



<h2 class="wp-block-heading">どう動いているか</h2>



<ul class="wp-block-list">
<li><strong>終了日を保存</strong>するたびに、「〇月〇日〇時になったらこの投稿を処理してね」という<strong>1回きりの予約</strong>を入れます。</li>



<li>時間が来ると、WordPressの「<strong>WP-Cron</strong>」がそれを見つけて<strong>非公開へ変更</strong>し、<strong>タイトルに日付を追記</strong>します。</li>



<li>予約を入れ直す時は、<strong>前の予約を必ずキャンセル</strong>してから新しい予約を入れるので、<strong>二重実行</strong>になりません。</li>



<li>不正な保存（外部からの勝手送信）を防ぐために、<strong>nonce（1回限りの合言葉）</strong>をチェックしています。</li>
</ul>



<h2 class="wp-block-heading">ちょいカスタマイズ</h2>



<ul class="wp-block-list">
<li>非公開ではなく<strong>下書きに戻す</strong>：<code>'post_status' =&gt; 'draft'</code> に変更</li>



<li><strong>固定ページやカスタム投稿</strong>にも使う：<code>add_meta_box()</code> と <code>save_post</code> の投稿タイプ条件を追加</li>



<li>タイトル追記の<strong>表記を変える</strong>：<code>'（' . $date_str . '非公開）'</code> を好みの文言に</li>
</ul>



<h2 class="wp-block-heading">免責事項</h2>



<p>自己責任でお願いします。<br>利用する場合も、まずは検証環境で試してから本番へどうぞ。</p>



<p><strong>各自のサイト状況（プラグインやキャッシュ構成）</strong>で動作が変わることがあります。</p>



<h2 class="wp-block-heading">まとめ</h2>



<ul class="wp-block-list">
<li>functions.phpだけで<strong>期日で自動非公開</strong>は十分実現できました。</li>



<li>仕組みは「<strong>期日の単発予約 → 到達したら非公開＋タイトル追記</strong>」。</li>



<li>実運用では<strong>キャッシュとWP-Cron</strong>だけ意識しておけばOK。</li>
</ul>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-blue-background-color">
<p><strong>サイト制作に関するご相談・お見積りなどお気軽にご相談ください。</strong></p>



<p>新規サイト制作では、提案・制作から公開後の保守・運用・更新までトータルで、あなたのお力になります。</p>



<p>既存のサイトでも、簡易な修正や機能追加、更新のお手伝いやレッスンなど、幅広く対応させていただきます。</p>



<p>まずは、お気軽に今お持ちのお悩みをお聞かせください。</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://hiro60.com/contact/" class="btn has-background has-green-background-color" target="_self">お問い合わせフォーム</a></div>
</div>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1610"
					data-ulike-nonce="8367d4b2fc"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1610"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1610/">投稿をあらかじめ決まった日付で非表示にする（プラグイン使用なし）</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1610/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GTMを使ってGA4でクリックイベントを計測する</title>
		<link>https://hiro60.com/know-how/1607/</link>
					<comments>https://hiro60.com/know-how/1607/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Fri, 08 Aug 2025 04:42:17 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[ノウハウ]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1607</guid>

					<description><![CDATA[<p>LPに新たに動的ボタンを追加したので、これがどれだけクリックされるかを計測したくなりました。 GTMやGA4は利用してアクセス数などは見る方法は知っていますが、クリックイベントを設定する方法がよくわからなかったので、以下 [&#8230;]</p>
<p>The post <a href="https://hiro60.com/know-how/1607/">GTMを使ってGA4でクリックイベントを計測する</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>LPに新たに動的ボタンを追加したので、これがどれだけクリックされるかを計測したくなりました。</p>



<p>GTMやGA4は利用してアクセス数などは見る方法は知っていますが、クリックイベントを設定する方法がよくわからなかったので、以下のサイトを参考に設定しました。</p>





<a rel="noopener" href="https://blog.siteanatomy.com/ga4-clickevent" title="GA4でクリックイベントを計測する方法｜計測設定から探索レポートでの確認方法まで解説 | GTMの設定 | やさしいGoogleアナリティクスブログ" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://blog.siteanatomy.com/wp-content/uploads/2023/05/101.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="99" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">GA4でクリックイベントを計測する方法｜計測設定から探索レポートでの確認方法まで解説 | GTMの設定 | やさしいGoogleアナリティクスブログ</div><div class="blogcard-snippet external-blogcard-snippet">Googleアナリティクス4（GA4）でクリックイベントを計測する方法、計測したクリックイベントを探索レポートで確認する方法を解説した記事です。拡張計測機能による離脱クリックやファイルダウンロードの計測、GTM (Google Tag Ma...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://blog.siteanatomy.com/ga4-clickevent" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">blog.siteanatomy.com</div></div></div></div></a>




<p>概ね手順通りでうまくいきましたが、一箇所だけうまくいかないところがあったので備忘としてメモを残しておきます。</p>



<p>その場所とは「トリガー」設定の「クリック」についてです。</p>



<p>手順では以下のようになっていたので、『リンクのみ』としました。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="「リンクのみ」を選択する　
※対象のボタンやリンクがaタグ、areaタグでない場合は「すべての要素」を選択してください。" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #ADBAC7">「リンクのみ」を選択する　</span></span>
<span class="line"><span style="color: #ADBAC7">※対象のボタンやリンクがaタグ、areaタグでない場合は「すべての要素」を選択してください。</span></span></code></pre></div>



<p>一応、aタグのクラス名を指定して設定を行っているので良いかと思ったのですが、発火テストの時点でボタンをクリックしてもタグが配信されませんでした。</p>



<p>調べたところ、aタグはdivタグの中に存在しているのですが、クリックが <code>&lt;a></code> に届いていない可能性があるとのことでした。</p>



<p>そのため、「クリック」を『すべての要素』としたところ、正常にタグが配信されるようになりました。</p>



<p>もし、同じくタグが配信されないで悩んでいる方は、トリガーの設定を見直すと良いかもしれません。</p>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1607"
					data-ulike-nonce="c403f81882"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1607"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/know-how/1607/">GTMを使ってGA4でクリックイベントを計測する</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/know-how/1607/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>サイト作成前の準備！ドメイン取得のススメ</title>
		<link>https://hiro60.com/site_production/1594/</link>
					<comments>https://hiro60.com/site_production/1594/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Thu, 26 Jun 2025 01:02:33 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1594</guid>

					<description><![CDATA[<p>「ホームページを作りたいけど、まだ早いかな…」と思っている場合でも、ドメインだけを先に取っておくことをオススメします。 本記事では、ドメインを先に取得することで得られる3つの大きなメリットや、それをした方がよい人、注意点 [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1594/">サイト作成前の準備！ドメイン取得のススメ</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>「ホームページを作りたいけど、まだ早いかな…」と思っている場合でも、ドメインだけを先に取っておくことをオススメします。</p>



<p>本記事では、ドメインを先に取得することで得られる3つの大きなメリットや、それをした方がよい人、注意点までわかりやすく解説します。</p>



<p>難しい用語は使わず、初心者でも理解できるように書きますので、参考になれば幸いです。</p>



<p>なお、以降は「ホームページ」ではなく、「サイト」という表現を使います。</p>



<p>ちなみに、２つの言葉の意味は以下のようになります。</p>



<figure class="wp-block-table is-style-regular"><table><tbody><tr><td><strong>ホームページ</strong></td><td>サイトの“最初のページ（トップページ）”だけを指す言葉</td></tr><tr><td><strong>サイト（ウェブサイト）</strong></td><td>トップページ＋その他すべてのページを含む「全体」</td></tr></tbody></table></figure>



<p>『本』に例えると、サイトは“本そのもの”で、ホームページはその“表紙”と考えるとわかりやすいです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">サイトを作る前にドメインだけ取得するのはアリ？</h2>



<h3 class="wp-block-heading">サイトをまだ作らない人が抱えるよくある疑問</h3>



<p>「まだサイトを作る予定はないけど、ドメインだけ先に取っておく意味ってあるのかな？」 </p>



<p>そう思ったことがある方は意外と多いのではないでしょうか。</p>



<p>ホームページやブログを始めようと思っても、すぐに作業に入れないこともありますよね。</p>



<p>時間が取れなかったり、まだ内容が決まっていなかったり…でも名前だけは決まっている！ということも。</p>



<p>そんなときに「ドメイン（URL）だけ先に取っておく」という選択は、とても現実的でメリットのある判断なんです。</p>



<p>実際、「サイトがなくてもドメインって取得していいの？」「取ったあと放置しても大丈夫？」という声もよく聞きます。</p>



<p>この記事では、そうした不安をひとつひとつ解消していきます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">初心者が知っておきたいドメインの基本知識</h3>



<p>まずは、ドメインってそもそも何でしょうか？</p>



<p>ドメインとは、インターネット上の住所のようなものです。</p>



<p>たとえば「example.com」や「sample.jp」のような形で、あなたのサイトにアクセスするためのURLに使われます。</p>



<p>ホームページは建てる（作る）のに時間がかかるかもしれませんが、住所（ドメイン）は先に決めておけるんです。</p>



<p>そして、<strong><span class="marker">ドメインは早い者勝ち。</span></strong></p>



<p>誰かが先に取得してしまうと、<strong><span class="marker-red">同じ名前は使えません。</span></strong></p>



<p>たとえサイトの中身がまだなくても、将来的に使う予定があるなら早めに取っておくのが安心です。</p>



<p>ちなみに「ドメインだけ持ってて、サイトがない状態」もまったく問題ありません。</p>



<p>運用開始は後からで大丈夫です。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="500" src="https://hiro60.com/wp-content/uploads/2025/06/image.jpg" alt="ドメイン＝住所
サイト＝建物
ドメインだけ先に取っておくのはOK" class="wp-image-1598" srcset="https://hiro60.com/wp-content/uploads/2025/06/image.jpg 750w, https://hiro60.com/wp-content/uploads/2025/06/image-300x200.jpg 300w" sizes="(max-width: 750px) 100vw, 750px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">ドメインを先に取っておく3つのメリット</h2>



<h3 class="wp-block-heading">希望する名前を確実に確保できる</h3>



<p>最大の理由はこれ。</p>



<p><strong><span class="marker">「欲しい名前は早い者勝ち」</span></strong>です。</p>



<p>「fight.com」「sample.jp」など、短くて覚えやすいドメインはとても人気があります。</p>



<p>あとで考えてもすでに誰かが取得してしまっていた…というのはよくあること。</p>



<p>ブランド名や活動名、屋号、SNSアカウント名などと統一されたドメインは、印象にも残りやすく、信頼感もアップします。</p>



<p>特に将来、教室やサービスを広げていきたい方なら、ドメインの「名前取り」は早めに済ませておきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">SEOにも有利になる可能性がある</h3>



<p>Googleなどの検索エンジンは、ドメインが「どれだけ長く存在しているか」をひとつの信頼指標としています。</p>



<p>つまり、今のうちにドメインを取得しておいて、ちょっとしたブログ投稿や更新を始めておくだけで、将来のSEO（検索で上位に表示されること）にプラスになる可能性があるんです。</p>



<p>これは<strong><span class="marker-blue">「ドメインエイジ」</span></strong>と呼ばれる考え方。</p>



<p>特に競合が多い分野では、小さな積み重ねが後で大きな差になることも。</p>



<p>まだ本格的なサイトは作れなくても、「少しだけ動かしておく」ことが未来につながります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">後からサイトを作るときの準備がスムーズ</h3>



<p>ドメインが決まっていると、サイトのデザインや構成を考えるときにもブレが出にくくなります。</p>



<p>名刺やSNSプロフィールにも先に記載できるので、全体のブランディングが整いやすくなります。</p>



<p>また、ドメインがあればメールアドレスも先に使えるようになります。 </p>



<p>たとえば「 info@sample.com 」など、自分専用のアドレスで連絡が取れると、信頼感もアップしますよね。</p>



<p>ホームページはまだでも、こうした準備だけでも一歩前進です。</p>



<h2 class="wp-block-heading">どんな人が「ドメインだけ取得」に向いているのか</h2>



<h3 class="wp-block-heading">まだ事業や活動を始めていない人</h3>



<p>「まだ準備中だけど、いずれは何か始めたい」と考えている方にとって、ドメインだけ取得しておくのはとても有効です。</p>



<p>たとえば、語学教室を開きたい、ネットショップを始めたい、オンラインで講座をしたい…そんな方は、今すぐサイトを作らなくても「自分の名前やブランドに合うドメイン」を確保しておくことで、安心して準備を進めることができます。</p>



<p>実際の作業に取りかかれるのは半年後でも1年後でも構いません。ドメインさえ取っておけば、「名前が使えなくなっていた！」というリスクは避けられます。</p>



<p>ただし、取得費用と年単位の更新費用はかかりますので、その点は注意が必要です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">サイト制作を自作・外注か迷っている人</h3>



<p>ホームページを自分で作るか、誰かに依頼するか悩んでいる場合でも、ドメインだけは先に決めておくとスムーズです。</p>



<p>というのも、ドメインが決まっていれば、制作を外注する際に業者へ伝える情報がクリアになりますし、自作する場合でもテンプレートやテーマを選ぶ判断軸ができます。</p>



<p>また、ドメイン取得は制作とは別の手続きなので、悩んでいる期間中にも“確保”だけは済ませられるのが強みです。</p>



<p>自分でやれば数千円で済む作業も、業者に依頼をすれば人が動くことになるため、<strong><span class="marker-red">数倍のコスト</span></strong>がかかるのは当たり前です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">ブログやSNSを先に始めている人</h3>



<p>すでにInstagramやYouTube、X（旧Twitter）などで発信を始めている人は、活動名と一致するドメインを持つことで、より強いブランドが築けます。</p>



<p>たとえば「example」という名前でYouTubeをやっているなら、「example.com」というドメインを持っておくことで、将来サイトを開設したときに違和感なくつながります。</p>



<p>また、SNSのプロフィール欄にリンクを貼ることもでき、そこから将来のホームページや簡易ブログに誘導することができます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">ドメインだけ取得しておくときの注意点</h2>



<h3 class="wp-block-heading">取得には費用がかかることを理解しておこう</h3>



<p>ドメインを取得するには、少額ながら<strong><span class="marker-red">費用が発生する</span></strong>ことを知っておきましょう。</p>



<p>一般的に、.comや.netなどのドメインは年間1,000円〜2,000円程度、.jpなどの日本向けドメインはやや高めで3,000円〜4,000円ほどかかることがあります。</p>



<p>費用は「ドメインの種類（トップレベルドメイン）」や「取得先のサービス（レジストラ）」によって異なります。</p>



<p>また、レジストラによってはキャンペーンでドメイン取得費用が無料または割引になることもあります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">放置せず最低限の活用を</h3>



<p>ドメインを取得しただけで安心して、そのまま放置してしまうのはもったいないです。</p>



<p>もちろん、本格的なサイトをすぐに作る必要はありませんが、最低限「簡単なブログを作って月に1回更新する」「SNSリンクだけ貼った簡易ページにする」など、少しだけでも動かしておくと、SEOや検索の信頼性が上がります。</p>



<p>Googleも「全く使われていないドメイン」より「少しでも更新されているページ」を好む傾向があります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">毎年の維持費や更新を忘れずに</h3>



<p>ドメインには年単位での更新費用がかかります。</p>



<p>一般的には年間1,000円〜3,000円程度が相場です（.comや.jpなどによって異なります）。</p>



<p>大切なのは、「更新を忘れて失効してしまうと、他人に取られてしまう可能性がある」という点。</p>



<p>そのため、クレジットカードでの自動更新を設定しておくか、更新時期が近づいたら通知メールを見落とさないようにするのが大事です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">取得先（レジストラ）選びも重要</h3>



<p>ドメインを取得するサービス（レジストラ）は多数あります。</p>



<p>有名どころでは「<a rel="nofollow noopener" href="https://www.onamae.com/" target="_blank" title="">お名前.com</a>」「<a rel="nofollow noopener" href="https://muumuu-domain.com/" target="_blank" title="">ムームードメイン</a>」「<a rel="nofollow noopener" href="https://www.xdomain.ne.jp/" target="_blank" title="Xserverドメイン">Xserverドメイン</a>」などがありますが、選ぶ際は料金だけでなく、サポート体制や管理画面の使いやすさも考慮するとよいでしょう。</p>



<p>特に初心者の方には「料金が明瞭で、余計なオプションに自動で申し込まれない」サービスを選ぶのがおすすめです。</p>



<p>個人的にオススメするのは「<a rel="nofollow noopener" href="https://www.xdomain.ne.jp/" target="_blank" title="">Xserverドメイン</a>」です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">よくある質問（Q&amp;A）</h2>



<h3 class="wp-block-heading">Q1. ドメインを取ったのに使わなかったらどうなりますか？</h3>



<p>A. 取得したドメインを使わなくても、特に問題はありません。</p>



<p>ただし、使わない期間も維持費は毎年発生します。</p>



<p>更新を忘れて期限が切れると、他人に再取得されてしまうこともあるため、管理は必要です。</p>



<p>「将来使うかも」と思っているなら、簡単なページを表示させておくのもおすすめです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Q2. サイトを持っていない状態でドメインだけ持っていると、信用が下がったりしませんか？</h3>



<p>A. 基本的に信用が下がることはありません。</p>



<p>ただし、外部からリンクを貼るなどの用途がある場合、何も表示されないと「アクセスできないサイト」と思われてしまう可能性があります。</p>



<p>トップページだけでも「準備中」「近日公開予定」などの表示をしておくと、印象は良くなります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Q3. どのタイミングで本格的にサイトを作り始めるのがベストですか？</h3>



<p>A. 明確なタイミングは人それぞれですが、目安として「サービスの方向性が定まり始めたとき」や「SNSなどでの活動が軌道に乗り始めたとき」がおすすめです。</p>



<p>その頃には発信したい内容や見せたい雰囲気も具体化してきているので、スムーズに制作に移行できます。</p>



<p>焦らず、今できる準備から始めましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">まとめ</h2>



<ul class="wp-block-list">
<li>希望の名前を取っておくことが一番の価値</li>



<li>放置ではなく“軽く動かしておく”ことで将来に活かせる</li>



<li>迷っている人こそ、まずは一歩踏み出して</li>
</ul>



<p>「まだサイトを作る予定はないけれど…」という方でも、ドメインだけ先に取得しておくことにはしっかり意味があります。</p>



<p>希望の名前を確保できるだけでなく、将来的にサイトを立ち上げる際の土台にもなります。</p>



<p>更新や活用方法に気をつけながら、今できる一歩から始めてみましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-related">

<a href="https://hiro60.com/site_production/1592/" title="超初心者向け｜ドメイン移管基礎知識" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="99" src="https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-1-160x99.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-1-160x99.jpg 160w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-1-300x188.jpg 300w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-1-120x74.jpg 120w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-1-320x198.jpg 320w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-1-376x232.jpg 376w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-1.jpg 750w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">超初心者向け｜ドメイン移管基礎知識</div><div class="blogcard-snippet internal-blogcard-snippet">「ドメイン移管って聞いたことあるけど、実際何をどうすればいいの？」そんな疑問を抱えていませんか？この記事では、初心者でも安心して理解できるように、ドメイン移管の意味や考え方を中心に、サーバー移転との違いなどを解説しています。やり方などは他の...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://hiro60.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">hiro60.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.06.24</div></div></div></div></a>
</div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-blue-background-color">
<p><strong>サイト制作に関するご相談・お見積りなどお気軽にご相談ください。</strong></p>



<p>新規サイト制作では、提案・制作から公開後の保守・運用・更新までトータルで、あなたのお力になります。</p>



<p>既存のサイトでも、簡易な修正や機能追加、更新のお手伝いやレッスンなど、幅広く対応させていただきます。</p>



<p>まずは、お気軽に今お持ちのお悩みをお聞かせください。</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://hiro60.com/contact/" class="btn has-background has-green-background-color" target="_self">お問い合わせフォーム</a></div>
</div>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1594"
					data-ulike-nonce="98ce7e9443"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1594"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1594/">サイト作成前の準備！ドメイン取得のススメ</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1594/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>超初心者向け｜ドメイン移管基礎知識</title>
		<link>https://hiro60.com/site_production/1592/</link>
					<comments>https://hiro60.com/site_production/1592/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Tue, 24 Jun 2025 09:32:52 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1592</guid>

					<description><![CDATA[<p>「ドメイン移管って聞いたことあるけど、実際何をどうすればいいの？」 そんな疑問を抱えていませんか？ この記事では、初心者でも安心して理解できるように、ドメイン移管の意味や考え方を中心に、サーバー移転との違いなどを解説して [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1592/">超初心者向け｜ドメイン移管基礎知識</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>「ドメイン移管って聞いたことあるけど、実際何をどうすればいいの？」</p>



<p>そんな疑問を抱えていませんか？</p>



<p>この記事では、初心者でも安心して理解できるように、ドメイン移管の意味や考え方を中心に、サーバー移転との違いなどを解説しています。</p>



<p>やり方などは他のサイトで読んだけど、そもそも書かれている意味が理解できない。という方は、まずはこの記事から始めることをオススメします。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">ドメイン移管とは何か？基本のキ</h2>



<p>ドメイン移管とは、今使っているドメイン（例：www.example.com）を、別の会社に管理を移すことです。</p>



<p>たとえば、お名前.comからエックスサーバーにドメインの管理先を変えるといったことがこれに当たります。</p>



<p>これは「サーバーを引っ越す」のとは違い、<strong><span class="marker">ドメインという“住所”の管理者を変えること</span></strong>です。</p>



<p>難しそうに聞こえますが、基本の流れを押さえれば初心者でも十分に対応できます。</p>



<p>この章では、まず「ドメイン移管ってなに？」という基本から、似た言葉との違いまでを優しく解説していきます。</p>



<h3 class="wp-block-heading">サーバー移転との違いとは</h3>



<p>「ドメイン移管」と「サーバー移転」はよく混同されがちですが、実はまったく別のことです。</p>



<ul class="wp-block-list">
<li>ドメイン移管：ドメインの管理を行う会社（レジストラ）を変更すること</li>



<li>サーバー移転：ホームページの中身（ファイルやデータベース）を引っ越すこと</li>
</ul>



<p><strong><span class="marker-blue">ドメインは「住所」、サーバーは「建物」</span></strong>と考えるとわかりやすいです。</p>



<p>住所の管理先を変えても、建物そのものには影響しません。</p>



<p>この違いを理解することで、移管時の混乱を避けられます。</p>



<h3 class="wp-block-heading">ドメインとサイトのサーバーが別ってどういうこと？</h3>



<p>ドメインを管理しているサーバーと、サイトを管理しているサーバー。<br>実はこの2つ、役割も場所も違う別物です。</p>



<p>まず、「ドメインを管理しているサーバー」は、あなたが持っているURL（たとえばwww.example.com）を管理しているサーバーのことです。</p>



<p>これは、ドメイン登録業者（レジストラ）が用意しているもので、DNS情報（インターネット上で住所のようなもの）を保存しておく場所です。</p>



<p>一方、「サイトを管理しているサーバー」は、あなたのホームページの中身（文章、画像、プログラムなど）を保管している場所です。</p>



<p>実際にページが表示されるためのデータがここに入っています。</p>



<p>つまり、</p>



<ul class="wp-block-list">
<li><strong>ドメインのサーバーは「住所録」</strong></li>



<li><strong>サイトのサーバーは「家の中身」</strong></li>
</ul>



<p>と考えると、とてもわかりやすいです。</p>



<h3 class="wp-block-heading">サーバーが違う場合の例</h3>



<ul class="wp-block-list">
<li>ドメインは「<a rel="nofollow noopener" href="https://www.onamae.com/" target="_blank" title="">お名前.com</a>」などのドメイン業者が管理</li>



<li>サイトは「<a rel="nofollow noopener" href="https://www.xserver.ne.jp/" target="_blank" title="">エックスサーバー</a>」や「<a rel="nofollow noopener" href="https://www.sakura.ad.jp/" target="_blank" title="">さくらインターネット</a>」などのレンタルサーバーが管理</li>
</ul>



<p>というように、別会社で管理されていることがあります。</p>



<p>この場合は、ドメインの新規取得が安いから「お名前.com」で取得したけど、サイトは自分が前から契約しているエックスサーバーにしたかった。といったような事情が考えられます。</p>



<p>もちろん、<strong><span class="marker">両方を同じ会社でまとめることもできます。</span></strong></p>



<p>たとえば「エックスサーバー」でドメインもサイトもまとめて管理すれば、更新作業がラクになりますし、DNS設定も簡単にできます。</p>



<p>初心者のうちは、「ドメイン＝URL」「サイト＝中身」とざっくり覚えるだけでも十分です。</p>



<p>そして、どちらもインターネット上で正しくつながって初めて、あなたのホームページが表示されるという仕組みです。</p>



<p>不安な方は、「ドメインはどこで取った？」「サーバーはどこを使っている？」という2点を整理するだけで、状況がグッとわかりやすくなります。</p>



<h3 class="wp-block-heading">「移管」と「新規取得」はどう違う？</h3>



<p>「新規取得」は文字通り、まだ誰も使っていないドメインを新しく登録することです。</p>



<p>一方「移管」は、すでに使っているドメインを別の管理会社に移す作業になります。</p>



<p>よくある勘違いとして、「移管すればドメインの使用期間がリセットされるのでは？」という声がありますが、実際には<strong>残りの有効期間はそのまま引き継がれ、1年延長される</strong>のが一般的です。</p>



<p>※管理会社によって異なることもありますし、移管の際に１年分の更新料を支払う必要があるケースもあります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">そもそもなぜドメインを移管するの？</h2>



<h3 class="wp-block-heading">よくある移管の理由3つ</h3>



<p>ドメイン移管を考える理由にはいくつかありますが、多いのは次の3つです。</p>



<ul class="wp-block-list">
<li>管理費用が今より安くなるから</li>



<li>サーバーとドメインを同じ会社でまとめて管理したいから</li>



<li>サポート対応や管理画面がわかりにくいから</li>
</ul>



<p>例えば「ドメインはお名前.com」「サーバーはエックスサーバー」で別々になっていると、管理が煩雑になります。</p>



<p>まとめることで毎年の更新がラクになり、料金も一括でわかりやすくなります。</p>



<h3 class="wp-block-heading">移管によって何が変わるのか</h3>



<p>移管をしても、ドメインの<strong>URL自体が変わることはありません</strong>。</p>



<p>ですが、次のようなことが変わります。</p>



<ul class="wp-block-list">
<li>契約更新のメールが届く相手先</li>



<li>支払い先と料金体系</li>



<li>管理画面の操作方法</li>
</ul>



<p>また、移管時にトラブルがあると一時的にサイトが見られなくなるケースもあるため、<strong>タイミングと事前準備が大切</strong>です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">ドメイン移管の仕組みを簡単に図解</h2>



<h3 class="wp-block-heading">レジストラってなに？</h3>



<p>レジストラとは、ドメインを管理・登録している公式の会社のことです。</p>



<p>たとえば「お名前.com」「ムームードメイン」「エックスサーバー」などが有名なレジストラです。あなたがドメインを取得すると、このレジストラがその情報をICANN（国際機関）などに登録してくれています。</p>



<p>移管とは、つまり「Aというレジストラから、Bというレジストラにドメインを引っ越すこと」です。</p>



<h3 class="wp-block-heading">認証コード（AuthCode）の役割とは</h3>



<p>ドメイン移管時に必要になるのが「認証コード（AuthCode）」です。オースコードと読みます。</p>



<p>これは<strong>そのドメインの持ち主しか知らない“鍵”のようなもの</strong>で、移管時に本人確認のために使います。</p>



<p>このコードは、今使っているレジストラ（移管元）で取得できます。</p>



<p>セキュリティの観点からも重要で、これがないと他人に勝手にドメインを移されてしまうリスクを防げます。</p>



<p>AuthCodeを入力して初めて移管申請がスタートするので、事前に確認しておくことが大切です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">まとめ</h2>



<p>ここに書かれているようなことを基礎知識として抑えておくと、実際の手順を解説しているサイトの内容がおぼろげながらでもわかってくると思います。</p>



<p>もし、追加で知りたいことがあったら解説を追記しますので、お気軽にコメントください。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-related">

<a href="https://hiro60.com/site_production/1594/" title="サイト作成前の準備！ドメイン取得のススメ" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="99" src="https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-160x99.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-160x99.jpg 160w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-300x188.jpg 300w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-120x74.jpg 120w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-320x198.jpg 320w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note-376x232.jpg 376w, https://hiro60.com/wp-content/uploads/2025/06/960600-hiros-note.jpg 750w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">サイト作成前の準備！ドメイン取得のススメ</div><div class="blogcard-snippet internal-blogcard-snippet">「ホームページを作りたいけど、まだ早いかな…」と思っている場合でも、ドメインだけを先に取っておくことをオススメします。本記事では、ドメインを先に取得することで得られる3つの大きなメリットや、それをした方がよい人、注意点までわかりやすく解説し...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://hiro60.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">hiro60.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.06.26</div></div></div></div></a>
</div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-blue-background-color">
<p><strong>サイト制作に関するご相談・お見積りなどお気軽にご相談ください。</strong></p>



<p>新規サイト制作では、提案・制作から公開後の保守・運用・更新までトータルで、あなたのお力になります。</p>



<p>既存のサイトでも、簡易な修正や機能追加、更新のお手伝いやレッスンなど、幅広く対応させていただきます。</p>



<p>まずは、お気軽に今お持ちのお悩みをお聞かせください。</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://hiro60.com/contact/" class="btn has-background has-green-background-color" target="_self">お問い合わせフォーム</a></div>
</div>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1592"
					data-ulike-nonce="73424798cd"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1592"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1592/">超初心者向け｜ドメイン移管基礎知識</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1592/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SiteGuardでログインURLを忘れたときの復旧方法２選</title>
		<link>https://hiro60.com/site_production/1590/</link>
					<comments>https://hiro60.com/site_production/1590/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Mon, 23 Jun 2025 03:29:34 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1590</guid>

					<description><![CDATA[<p>WordPressのセキュリティ対策として人気の「SiteGuard WP Plugin」ログインURLを変更できる便利な機能がありますが──そのURLを忘れてしまったら？ ・・・はい、それをやらかしました＾＾； この記 [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1590/">SiteGuardでログインURLを忘れたときの復旧方法２選</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>WordPressのセキュリティ対策として人気の「SiteGuard WP Plugin」<br>ログインURLを変更できる便利な機能がありますが──<br><strong>そのURLを忘れてしまったら？</strong></p>



<p>・・・<strong>はい、それをやらかしました＾＾；</strong></p>



<p>この記事では、同じように困ってしまった方のために、<strong>自力でログイン画面にたどり着く２つの方法</strong>を紹介します。</p>



<h2 class="wp-block-heading">方法１：<code>/wp-admin</code> にアクセスして自動リダイレクトを利用する</h2>



<p>もっとも簡単なのがこの方法。</p>



<h3 class="wp-block-heading">手順</h3>



<p>１．ブラウザで以下にアクセスします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="サイトのURL/wp-admin

例）https:sample.com/wp-admin" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #ADBAC7">サイトのURL/wp-admin</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">例）https:sample.com/wp-admin</span></span></code></pre></div>



<p>２．ログインしていなければ、<strong>SiteGuardで設定したカスタムURLに自動リダイレクト</strong>されます。</p>



<p>３．表示されたログイン画面のURLをブックマークするか、メモに控えます。</p>



<p>これはSiteGuardの仕様で、<strong>未ログイン状態でwp-adminにアクセスすると、現在有効なログインURLに転送される</strong>ためです。</p>



<h2 class="wp-block-heading">方法２：FTP経由でSiteGuardプラグインを一時停止する</h2>



<p>もし、<code>/wp-admin</code> にアクセスしてもリダイレクトされない場合は、<strong>SiteGuardプラグインを一時的に無効化</strong>する方法もあります。</p>



<h3 class="wp-block-heading">手順</h3>



<ol class="wp-block-list">
<li>FTPソフトやサーバーのファイルマネージャーで WordPressの <code>wp-content/plugins</code> にアクセス</li>



<li>「<code>siteguard」</code>フォルダを<strong>リネーム</strong>します（例：<code>siteguard_backup</code>）</li>



<li>これでSiteGuardが無効化され、<strong>ログインURLが <code>wp-login.php</code> に戻ります</strong></li>



<li>ログイン後、リネームした名前を戻します。（設定をそのまま使えます）</li>
</ol>



<p>「ログインURLがわからなくなった！どうしよう！」と焦る前に、上記を試してみてください。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p>WordPressやそれ以外で作成されているサイトのトラブル全般を解決できます。</p>



<p>お困りのことがありましたら、お気軽にご相談ください。</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-blue-background-color">
<p><strong>サイト制作に関するご相談・お見積りなどお気軽にご相談ください。</strong></p>



<p>新規サイト制作では、提案・制作から公開後の保守・運用・更新までトータルで、あなたのお力になります。</p>



<p>既存のサイトでも、簡易な修正や機能追加、更新のお手伝いやレッスンなど、幅広く対応させていただきます。</p>



<p>まずは、お気軽に今お持ちのお悩みをお聞かせください。</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://hiro60.com/contact/" class="btn has-background has-green-background-color" target="_self">お問い合わせフォーム</a></div>
</div>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1590"
					data-ulike-nonce="9074b2a3f2"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1590"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1590/">SiteGuardでログインURLを忘れたときの復旧方法２選</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1590/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>docker-compose.ymlの解説（WordPressのローカル環境構築）</title>
		<link>https://hiro60.com/site_production/1570/</link>
					<comments>https://hiro60.com/site_production/1570/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Fri, 23 May 2025 08:13:44 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1570</guid>

					<description><![CDATA[<p>WordPressのローカル開発環境をDockerで構築するときに欠かせないのが docker-compose.yml ファイルです。 この記事では、実際に私が使用している docker-compose.yml を例に、 [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1570/">docker-compose.ymlの解説（WordPressのローカル環境構築）</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>WordPressのローカル開発環境をDockerで構築するときに欠かせないのが <code>docker-compose.yml</code> ファイルです。</p>



<p>この記事では、実際に私が使用している <code>docker-compose.yml</code> を例に、その役割や各項目の意味を初心者向けにわかりやすく解説していきます。</p>



<h2 class="wp-block-heading">そもそも <code>docker-compose.yml</code> って何？</h2>



<p>Docker Compose は、複数のコンテナ（WordPress・MySQL・phpMyAdmin など）をまとめて管理するためのツールです。</p>



<p>その設定ファイルが <code>docker-compose.yml</code> です。</p>



<p>このファイルに「どのサービスを使うか」「どうつなぐか」「どのファイルと同期するか」などを記述します。</p>



<p>基本的にはこのファイルがあれば、ターミナルで以下の1行を入力するだけでローカル環境を立ち上げられます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker compose up -d" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #6CB6FF">docker</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">up</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">d</span></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用している <code>docker-compose.yml</code></h2>



<p>状況によって内容を書き換える必要がありますが、ひとまず以下の内容で動かしています。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="services:
  db:
    image: mysql:5.7
    container_name: sample_wp_mysql
    #restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wp_db
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: root
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:php8.2-apache
    container_name: sample_wp
    depends_on:
      - db
    ports:
      - &quot;8204:80&quot;
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: root
      WORDPRESS_DB_NAME: wp_db
      WORDPRESS_DEBUG: 1
    volumes:
      - ./public_html:/var/www/html

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: phpmyadmin_sample_ingrid
    depends_on:
      - db
    ports:
      - &quot;8205:80&quot;

volumes:
  db_data:" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">services</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">db</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">image</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">mysql</span><span style="color: #ADBAC7">:</span><span style="color: #6CB6FF">5.7</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">container_name</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">sample_wp_mysql</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #768390">#restart: always</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">environment</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">MYSQL_ROOT_PASSWORD</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">root</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">MYSQL_DATABASE</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">wp_db</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">MYSQL_USER</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">wp_user</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">MYSQL_PASSWORD</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">root</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">volumes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">db_data</span><span style="color: #ADBAC7">:</span><span style="color: #F47067">/var/</span><span style="color: #6CB6FF">lib</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">mysql</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">wordpress</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">image</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">wordpress</span><span style="color: #ADBAC7">:</span><span style="color: #6CB6FF">php8.2</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">apache</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">container_name</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">sample_wp</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">depends_on</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">db</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">ports</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;8204:80&quot;</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">environment</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">WORDPRESS_DB_HOST</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">db</span><span style="color: #ADBAC7">:</span><span style="color: #6CB6FF">3306</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">WORDPRESS_DB_USER</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">wp_user</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">WORDPRESS_DB_PASSWORD</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">root</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">WORDPRESS_DB_NAME</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">wp_db</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F69D50">WORDPRESS_DEBUG</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">1</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">volumes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">.</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">public_html</span><span style="color: #ADBAC7">:</span><span style="color: #F47067">/var/</span><span style="color: #6CB6FF">www</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">html</span></span>
<span class="line"></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">phpmyadmin</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">image</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">phpmyadmin</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">phpmyadmin</span><span style="color: #ADBAC7">:</span><span style="color: #6CB6FF">latest</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">container_name</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">phpmyadmin_sample_ingrid</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">depends_on</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">db</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">ports</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">      </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #96D0FF">&quot;8205:80&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F69D50">volumes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">db_data</span><span style="color: #ADBAC7">:</span></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">各記載の意味</h2>



<h3 class="wp-block-heading"><code>db</code>（MySQL）</h3>



<p>WordPressが利用するデータベースです。</p>



<ul class="wp-block-list">
<li><code>image</code>: 使用するDockerイメージ（ここではMySQL 5.7）</li>



<li><code>restart:</code> コンテナが何らかの理由で停止した場合に自動的に再起動させるためですが、意図しない再起動が起こらないようにコメントアウトしています。</li>



<li><code>container_name</code>: コンテナに付ける名前。サイト名を半角英字で入力することが多いです。</li>



<li><code>environment</code>: DBの初期設定（rootパスワード、DB名、ユーザー名など）。基本変えません。</li>



<li><code>volumes</code>: データ保存先を指定して中身を永続化（消えないように）しています。</li>
</ul>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-related">
永続化については、データベースが消えてしまうことがあってから入れるようにしました。詳しくは以下の記事の「作業中に発生したトラブルと対処方法」をご覧ください。
<br>

<a href="https://hiro60.com/site_production/1551/" title="WordPress本番サイトをローカル環境で復元する方法（PHPのバージョンを合わせる）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="99" src="https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-160x99.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-160x99.jpg 160w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-300x188.jpg 300w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-120x74.jpg 120w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-320x198.jpg 320w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-376x232.jpg 376w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note.jpg 750w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">WordPress本番サイトをローカル環境で復元する方法（PHPのバージョンを合わせる）</div><div class="blogcard-snippet internal-blogcard-snippet">WordPressで作成されたサイトのデータを、ローカル（または他のドメイン）に再現するのはカンタンです。「Updraftplus」というプラグインを使えば、メディアやプラグインなどを含めたすべてのデータをバックアップしてくれます。そして、...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://hiro60.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">hiro60.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.05.23</div></div></div></div></a>
</div>



<h3 class="wp-block-heading"><code>wordpress</code></h3>



<p>WordPress本体です。</p>



<ul class="wp-block-list">
<li><code>image</code>: PHP8.2が使えるWordPressイメージ。作成したい環境によって変える必要があります。</li>



<li><code>depends_on</code>: dbより後に起動するよう依存関係を定義</li>



<li><code>ports</code>: ローカルの8204番ポートでアクセスできるように設定（<a>http://localhost:8204）</a>。コンテナごとに変える必要があります。</li>



<li><code>environment</code>: WordPressがDBと接続するための情報</li>



<li><code>volumes</code>: ローカルの <code>public_html</code> フォルダと同期（ファイル編集が即反映される）</li>
</ul>



<p><code>image</code> は、とりあえずローカル環境を作りたいという場合は、<code>wordpress:latest</code>でOKです。<br>これは、WordPressの公式Dockerイメージの中で「最新安定版」を自動的に取得する設定です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="wordpress:latest
    image: mysql:5.7 ← この記述は削除する" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">wordpress</span><span style="color: #ADBAC7">:</span><span style="color: #6CB6FF">latest</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">image</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">mysql</span><span style="color: #ADBAC7">:</span><span style="color: #6CB6FF">5.7</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">←</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">この記述は削除する</span></span></code></pre></div>



<h3 class="wp-block-heading"><code>phpmyadmin</code></h3>



<p>ブラウザ上でDBを操作できる便利ツールです。</p>



<ul class="wp-block-list">
<li><code>image</code>: phpMyAdmin の公式イメージ</li>



<li><code>depends_on</code>: dbが先に起動するように設定</li>



<li><code>ports</code>: ローカルの8205番ポートでアクセス可能（<a>http://localhost:8205）</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">ボリューム <code>db_data</code> について</h2>



<p>最下部の <code>volumes:</code> セクションで <code>db_data</code> を定義することで、MySQLのデータを保存するボリューム（外部ストレージのようなもの）を作っています。</p>



<p>これがあることで、コンテナを停止・再起動してもデータベースの中身が保持されます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="volumes:
  db_data:" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">volumes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">db_data</span><span style="color: #ADBAC7">:</span></span></code></pre></div>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-related">
詳しくは以下の記事の「作業中に発生したトラブルと対処方法」をご覧ください。
<br>

<a href="https://hiro60.com/site_production/1551/" title="WordPress本番サイトをローカル環境で復元する方法（PHPのバージョンを合わせる）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="99" src="https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-160x99.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-160x99.jpg 160w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-300x188.jpg 300w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-120x74.jpg 120w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-320x198.jpg 320w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note-376x232.jpg 376w, https://hiro60.com/wp-content/uploads/2025/05/960600-hiros-note.jpg 750w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">WordPress本番サイトをローカル環境で復元する方法（PHPのバージョンを合わせる）</div><div class="blogcard-snippet internal-blogcard-snippet">WordPressで作成されたサイトのデータを、ローカル（または他のドメイン）に再現するのはカンタンです。「Updraftplus」というプラグインを使えば、メディアやプラグインなどを含めたすべてのデータをバックアップしてくれます。そして、...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://hiro60.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">hiro60.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.05.23</div></div></div></div></a>
</div>



<h3 class="wp-block-heading">補足：ボリューム名の自動命名について</h3>



<p>Docker Compose は、<code>volumes:</code> に名前だけを指定した場合、自動的にボリューム名を次のように変換して保存します。</p>



<pre class="wp-block-code"><code>&#91;プロジェクト名]_&#91;ボリューム名]</code></pre>



<p>たとえば、プロジェクト名が <code>sample</code> の場合、実際に作成されるボリュームは：</p>



<pre class="wp-block-code"><code>sample_db_data</code></pre>



<p>この名前はターミナルから <code>docker volume ls</code> で確認できます。</p>



<h3 class="wp-block-heading">注意：ボリュームの「残骸」について</h3>



<p><code>volumes:</code> セクションで <code>db_data</code> を定義しない場合、環境を構築するつど自動的にボリュームが作成されます。</p>



<p>開発中だと何度かコンテナを作り直すこともありますが、<code>docker compose down</code> コマンドでコンテナを削除しても、ボリュームは削除されません。</p>



<p>そのため、プロジェクト名やボリューム定義が変わるたびに新しいボリュームが作成され、<strong>古いボリュームが残ってしまう</strong>ことがあります。</p>



<p>これにより、知らず知らずのうちにローカルに使われていないボリュームが蓄積される可能性があります。</p>



<p>その場合は、以下のコマンドで確認や削除が行えます。</p>



<p>現在使われていないボリュームを確認するには、</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker volume ls" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #6CB6FF">docker</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">volume</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">ls</span></span></code></pre></div>



<p>不要なボリュームを削除するには、</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker volume rm ボリューム名" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #6CB6FF">docker</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">volume</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">rm</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">ボリューム名</span></span></code></pre></div>



<p>または、未使用ボリュームをまとめて削除するには、</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker volume prune" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #6CB6FF">docker</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">volume</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">prune</span></span></code></pre></div>



<p>このようにして、環境をクリーンに保つことができます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">まとめ</h2>



<p><code>docker-compose.yml</code> を使って、WordPress・MySQL・phpMyAdmin の3つのコンテナを一括で構築・管理できます。</p>



<p>この記事が、これからDockerでWordPressのローカル環境を構築したい方の参考になれば嬉しいです。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-blue-background-color">
<p><strong>サイト制作に関するご相談・お見積りなどお気軽にご相談ください。</strong></p>



<p>新規サイト制作では、提案・制作から公開後の保守・運用・更新までトータルで、あなたのお力になります。</p>



<p>既存のサイトでも、簡易な修正や機能追加、更新のお手伝いやレッスンなど、幅広く対応させていただきます。</p>



<p>まずは、お気軽に今お持ちのお悩みをお聞かせください。</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://hiro60.com/contact/" class="btn has-background has-green-background-color" target="_self">お問い合わせフォーム</a></div>
</div>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1570"
					data-ulike-nonce="12921e6e92"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1570"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1570/">docker-compose.ymlの解説（WordPressのローカル環境構築）</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1570/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>UpdraftPlusでWordPress移行は完結する？旧定番との違いを解説</title>
		<link>https://hiro60.com/site_production/1555/</link>
					<comments>https://hiro60.com/site_production/1555/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Fri, 23 May 2025 05:50:34 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1555</guid>

					<description><![CDATA[<p>WordPressのサイトを別ドメインに移したいとき、かつては「All-in-One WP Migration」が定番のプラグインでした。 私も、ドメインを変えて移行する場合は必ずこのプラグインを使っていました。 なぜな [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1555/">UpdraftPlusでWordPress移行は完結する？旧定番との違いを解説</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>WordPressのサイトを別ドメインに移したいとき、かつては「All-in-One WP Migration」が定番のプラグインでした。 </p>



<p>私も、ドメインを変えて移行する場合は必ずこのプラグインを使っていました。 </p>



<p>なぜなら「自動でドメインの書き換えをしてくれる」からです。</p>



<p>たとえば、旧サイトが <code>https://example.com</code>、新しい環境が <code>http://localhost:8080</code> のような場合、 記事内リンクや画像のパスなどが旧ドメインのままだと正常に表示されません。</p>



<p>All-in-One WP Migrationはそのあたりを自動で置換してくれるので、復元後に“元のサイトが表示されてしまう”といったミスが起きにくかったのです。</p>



<p>しかし、バックアッププラグインである「UpdraftPlus」でも、いつのまにかこのドメイン書き換えができるようになっていました。</p>



<p>私はもともとUpdraftPlusを“バックアップ専用”として使っていましたが、気づいたら移行先での復元でもドメインの置換がされるようになっていて、ちゃんと新しい環境で動くようになっていました。</p>



<p>結局、All-in-One WP MigrationとUpdraftplusのどっちが良いのか、私自身の体験とあわせて、以下で詳しく解説します。</p>



<h2 class="wp-block-heading">サイト移行で必要な「ドメインの書き換え」って何？</h2>



<p>まず、今回キモとなるドメインの自動書き換え機能について解説します。</p>



<p>WordPressは記事データや設定情報の多くを<strong>データベースに保存</strong>しています。 </p>



<p>ここには、以下のように「旧ドメイン」の情報が埋め込まれています。</p>



<ul class="wp-block-list">
<li>サイトURL（トップページ）</li>



<li>投稿本文の中のリンク</li>



<li>画像やファイルのパス</li>



<li>メニュー、ウィジェットの設定</li>



<li>カスタムHTMLやショートコード内のURL など</li>
</ul>



<p>このままだと、新しいドメインに移行しても「リンクをクリックすると元のサイトに戻ってしまう」「ログインすると旧サイトに飛ぶ」といった問題が発生します。</p>



<p>だからこそ「自動でドメインを書き換えてくれる」機能が重要になるわけです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">UpdraftPlusでもドメイン置換されるように</h2>



<p>以前のUpdraftPlusでは、復元後も旧ドメインが残ってしまい、 ローカルで復元したのにログインすると本番サイトにリダイレクトされてしまったり、 画像がうまく表示されなかったりすることがありました。<br><span class="fz-14px"><span class="fz-16px"><strong>↑実際に私が知識がない頃に、「本番サイトをバックアップして、復元すればその環境で使えるでしょ」と思ってやった失敗です。。。</strong></span></span></p>



<p>でも今のUpdraftPlusは、「復元先のドメインが元と違う」と判断してくれるようになっており、復元時のオプションで自動的にデータベース内のURLを書き換えてくれるようになっています。</p>



<p>以下の画像の確認画面が表示されるので、「データベース内のサイトの場所を検索して置換する (移行)」にチェックを入れて、復元すればドメインの書き換えを行ってくれます。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="750" height="458" src="https://hiro60.com/wp-content/uploads/2025/05/image.png" alt="データベースの復元オプション" class="wp-image-1556" srcset="https://hiro60.com/wp-content/uploads/2025/05/image.png 750w, https://hiro60.com/wp-content/uploads/2025/05/image-300x183.png 300w, https://hiro60.com/wp-content/uploads/2025/05/image-120x74.png 120w, https://hiro60.com/wp-content/uploads/2025/05/image-160x99.png 160w" sizes="(max-width: 750px) 100vw, 750px" /></figure>



<p>なので、「バックアップ＋移行」両方の用途をこれ1つでカバーできるようになっています。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">どっちを使うか？</h2>



<p>All-in-One WP Migrationは「簡単に丸ごと移せる」「書き換えも自動でやってくれる」など便利ですが、 無料版では<strong>インポートサイズに上限</strong>（512MBなど）があるのが難点です。</p>



<p>大きめのサイトになると有料アドオンが必要になります。</p>



<p>その点、UpdraftPlusには<strong>サイズの上限はありません</strong>。</p>



<p>バックアップファイルはデフォルトで約400MBごとに<strong>自動で分割</strong>されるため、大容量サイトでも対応できます。</p>



<p>また、バックアップの保存先もGoogle DriveやS3などのクラウドを選べるので、 ディスク容量の制限も回避できます。</p>



<p>日常的に運用するならUpdraftPlusのほうが柔軟性があります。</p>



<p>なので私は今、<span class="marker"><strong>「移行も含めて、UpdraftPlusで十分」</strong></span>と考えています。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">手動で行うなら「Better Search Replace」</h2>



<p>自分でドメインの書き換えを行うこともできます。</p>



<p>その場合は、<strong>Better Search Replace</strong> というプラグインを使って、 復元後に自分で「旧URL → 新URL」の置き換えを実行することができます。</p>



<p>操作はとても簡単で、検索キーワードと置換キーワードを入力して、チェックボックスでどのテーブルを対象にするか選ぶだけ。</p>



<p>最初は「ドライラン（テストモード）」で何件置換されそうかを確認することもできます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">まとめ</h2>



<ul class="wp-block-list has-watery-yellow-background-color has-background">
<li>今のUpdraftPlusは、<strong>ドメインが変わっても自動で置換してくれる</strong>ようになっている</li>



<li>All-in-One WP Migrationは便利だが、<strong>サイズ制限がネック</strong></li>



<li>UpdraftPlusなら<strong>大容量でも自動分割で対応可能</strong></li>



<li>普段からUpdraftPlusでバックアップしておけば、<strong>移行もそのまま対応できる</strong></li>



<li>「自動処理が不安」なら、<strong>Better Search Replaceで手動チェック</strong>もできる</li>
</ul>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-blue-background-color">
<p><strong>サイト制作に関するご相談・お見積りなどお気軽にご相談ください。</strong></p>



<p>新規サイト制作では、提案・制作から公開後の保守・運用・更新までトータルで、あなたのお力になります。</p>



<p>既存のサイトでも、簡易な修正や機能追加、更新のお手伝いやレッスンなど、幅広く対応させていただきます。</p>



<p>まずは、お気軽に今お持ちのお悩みをお聞かせください。</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://hiro60.com/contact/" class="btn has-background has-green-background-color" target="_self">お問い合わせフォーム</a></div>
</div>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1555"
					data-ulike-nonce="6cb6fdccda"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1555"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1555/">UpdraftPlusでWordPress移行は完結する？旧定番との違いを解説</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1555/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress本番サイトをローカル環境で復元する方法（PHPのバージョンを合わせる）</title>
		<link>https://hiro60.com/site_production/1551/</link>
					<comments>https://hiro60.com/site_production/1551/#respond</comments>
		
		<dc:creator><![CDATA[ヒロ60]]></dc:creator>
		<pubDate>Fri, 23 May 2025 05:08:43 +0000</pubDate>
				<category><![CDATA[サイト制作]]></category>
		<guid isPermaLink="false">https://hiro60.com/?p=1551</guid>

					<description><![CDATA[<p>WordPressで作成されたサイトのデータを、ローカル（または他のドメイン）に再現するのはカンタンです。 「Updraftplus」というプラグインを使えば、メディアやプラグインなどを含めたすべてのデータをバックアップ [&#8230;]</p>
<p>The post <a href="https://hiro60.com/site_production/1551/">WordPress本番サイトをローカル環境で復元する方法（PHPのバージョンを合わせる）</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>WordPressで作成されたサイトのデータを、ローカル（または他のドメイン）に再現するのはカンタンです。</p>



<p>「<a rel="noopener" href="https://ja.wordpress.org/plugins/updraftplus/" target="_blank" title="">Updraftplus</a>」というプラグインを使えば、メディアやプラグインなどを含めたすべてのデータをバックアップしてくれます。</p>



<p>そして、ローカルに構築したWordPressにも同じく「Updraftplus」をインストールして復元するだけで他の環境にサイトを移行することが可能です。</p>



<p>ただ、本番環境とローカルでWordPressのバージョンが違ったり、PHPのバージョンが違ったりすることで、移行後に正しく動作しないなんてこともあるので、そういった点に注意する必要があります。</p>



<p>今回は作業の中で、そういった操作が必要になったため、備忘として記録を残しておきます。</p>



<p>同じような操作を初めて行う方や慣れていない方の参考になればと思います。</p>



<h2 class="wp-block-heading">行った手順</h2>



<h3 class="wp-block-heading">1. DockerでローカルWordPress環境を構築しました</h3>



<h4 class="wp-block-heading">PHPのバージョンが異なる</h4>



<p>元々DockerでWordPress環境は用意してあり、「 <code>wordpress:latest</code> 」イメージを使用していました。</p>



<p>これは、WordPressの公式Dockerイメージの中で「最新安定版」を自動的に取得する設定です。</p>



<p>しかし、かなり前に構築した環境だったために、復元元の本番環境とPHPのバージョンが異なっているという警告が表示されました。</p>



<h4 class="wp-block-heading">本番と復元先でPHPのバージョンが異なる場合の対処方法</h4>



<p>そのため、本番環境と合わせるために明示的に <code>php8.2-apache</code> を指定するようにしました。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="  wordpress:
    image: wordpress:php8.2-apache" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">wordpress</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">    </span><span style="color: #F69D50">image</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">wordpress</span><span style="color: #ADBAC7">:</span><span style="color: #6CB6FF">php8.2</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">apache</span></span></code></pre></div>



<p>PHPのバージョンが異なると、次のような問題が発生する可能性があります：</p>



<ul class="wp-block-list has-watery-yellow-background-color has-background">
<li>テーマやプラグインが正しく動作しない</li>



<li>警告やエラー（たとえば Deprecated や Fatal Error）が発生する</li>



<li>セキュリティや互換性の問題が発生する可能性がある</li>
</ul>



<p>一般的には、<strong>本番環境と同じ、あるいはより新しいPHPバージョンに合わせるほうが安全で推奨されます</strong>。</p>



<p>なお、「新しいPHPバージョン → 古いPHPバージョン」へ戻す場合は、対応していないコードが原因で動作しなくなることがあるため、十分な注意が必要です。</p>



<p>Dockerの設定変更内容は以下のとおりです（再掲）</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="wordpress:
  image: wordpress:php8.2-apache" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">wordpress</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">image</span><span style="color: #ADBAC7">: </span><span style="color: #6CB6FF">wordpress</span><span style="color: #ADBAC7">:</span><span style="color: #6CB6FF">php8.2</span><span style="color: #F47067">-</span><span style="color: #6CB6FF">apache</span></span></code></pre></div>



<p>その後、次のコマンドで再起動を行いました。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker compose down
docker compose up -d" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #6CB6FF">docker</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">down</span></span>
<span class="line"><span style="color: #6CB6FF">docker</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">up</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">d</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>down</code> は既存のコンテナを停止・削除するために実行します。</li>



<li><code>up -d</code> は新しいイメージに基づいて再構築・バックグラウンドで起動するために使用します。</li>



<li>Dockerでは、<code>image</code> を変更しただけではコンテナの中身が自動的に更新されないため、一度 <code>down</code> してから <code>up -d</code> する必要があります。</li>
</ul>



<h3 class="wp-block-heading">2. UpdraftPlusによる復元作業を実施しました</h3>



<p>WordPressの管理画面にログインし、UpdraftPlusを使って本番サイトのバックアップを復元しました。 </p>



<p>php8.2に合わせたことで、PHPのバージョンに関する警告は表示されなくなり、問題なく復元が完了しました。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">作業中に発生したトラブルと対処方法</h2>



<h3 class="wp-block-heading">トラブル①：<code>docker compose down</code> 実行後にDBが初期化されてしまった</h3>



<ul class="wp-block-list">
<li>原因：<code>docker-compose.yml</code> に <code>volumes:</code> の記述がなく、<code>down</code> でコンテナを削除した際にMySQLのデータも消えてしまったようです。</li>



<li>対処方法：以下のように <code>volumes:</code> を追加し、データベースの永続化を実装しました。<br>※データベースの永続化のメリット・デメリットは後述</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="volumes:
  - db_data:/var/lib/mysql

volumes:
  db_data:" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #F69D50">volumes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F47067">-</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">db_data</span><span style="color: #ADBAC7">:</span><span style="color: #F47067">/var/</span><span style="color: #6CB6FF">lib</span><span style="color: #F47067">/</span><span style="color: #6CB6FF">mysql</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F69D50">volumes</span><span style="color: #ADBAC7">:</span></span>
<span class="line"><span style="color: #ADBAC7">  </span><span style="color: #F69D50">db_data</span><span style="color: #ADBAC7">:</span></span></code></pre></div>



<p>この記述をする前の動きとしては、</p>



<ol class="wp-block-list has-watery-red-background-color has-background">
<li>docker compose down<br>→ コンテナは完全に削除（ただし -v を付けなければボリュームは残る）</li>



<li>docker compose up -d<br>→ volumes: が未定義だったため、既存のボリュームと接続されず、新しい空のボリュームが自動作成された</li>
</ol>



<p>つまり、downで箱（コンテナ）を壊し、upで新しい箱を作ったが、中身の保存場所が変わってしまったという状態。</p>



<p>そのため、それまでにあったWordPress環境やデータベースが見られなくなってしまった。</p>



<h4 class="wp-block-heading">ボリューム <code>db_data</code> について</h4>



<p>最下部の <code>volumes:</code> セクションで <code>db_data</code> を定義することで、MySQLのデータを保存するボリューム（外部ストレージのようなもの）を作っています。</p>



<p>これがあることで、コンテナを停止・再起動してもデータベースの中身が保持されます。</p>



<p>ということで試してみました↓↓↓</p>



<h4 class="wp-block-heading">検証結果</h4>



<p>１．再度、<code>down</code> でコンテナを停止・削除してから、<code>up -d</code> でコンテナ再構築。（<code>volumes:</code>の記載あり）<br><span class="fz-16px"><strong>※この操作でMySQLのデータを保存するボリュームが作成される</strong></span><span class="fz-16px"><strong>。</strong></span><span class="fz-16px"><strong><br>※ただし、Docker内（仮想環境）に作成されるので、Finderからは見えない。</strong></span></p>



<p>２．WordPressの「ようこそ」が表示され、WordPressインストールし直し。</p>



<p>３．インストール後は、データが空っぽな状態。Updraftplusで改めて復元。</p>



<p>４．再度、<code>down</code> でコンテナを停止・削除してから、<code>up -d</code> でコンテナ再構築。</p>



<p>結果、WordPressの再インストールなしで、直前の状態から始められました。</p>



<h3 class="wp-block-heading">トラブル②：WordPressで「データベース接続確立エラー」が表示された</h3>



<ul class="wp-block-list">
<li>原因：MySQLが初期化されていたことと、WordPressが以前の <code>wp-config.php</code> を読み込んでいたことによるものです。</li>



<li>対処方法：<code>public_html</code> フォルダを一度空にして、WordPressの初期インストール画面から再構築を行いました。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">運用時の注意点と学び</h2>



<h3 class="wp-block-heading">データベースは<strong>常に消える可能性がある前提</strong>で運用する</h3>



<ul class="wp-block-list">
<li>データを保持したい場合は、<code>volumes:</code> による永続化設定を忘れないようにする。</li>
</ul>



<p>逆に、ボリュームを消したい場合は、</p>



<ul class="wp-block-list">
<li><code>docker compose down</code> に <code>-v</code> オプションを付ける</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#22272e"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker compose down -v" style="color:#adbac7;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki github-dark-dimmed" style="background-color: #22272e" tabindex="0"><code><span class="line"><span style="color: #6CB6FF">docker</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">compose</span><span style="color: #ADBAC7"> </span><span style="color: #6CB6FF">down</span><span style="color: #ADBAC7"> </span><span style="color: #F47067">-</span><span style="color: #6CB6FF">v</span></span></code></pre></div>



<h4 class="wp-block-heading">補足：「ボリュームごと削除」には注意</h4>



<p>Dockerにおける「ボリューム」は、データベースの中身（投稿、設定、ユーザーなど）を保存している実体です。</p>



<p>通常の「 <code>docker compose down</code> 」ではコンテナ（アプリの箱）だけが削除されますが、「<code>-v</code> 」オプションを付けるとその中の「データ（ボリューム）」まで一緒に消えてしまいます。</p>



<p>そのため、誤って「 <code>-v</code> 」を付けたまま実行すると、<strong>保存していたWordPressのデータベースが完全に初期化されてしまう</strong>リスクがあります。</p>



<p>学習環境ではやり直しで済みますが、本番データや作り込んだ検証環境では大きな損失になります。</p>



<p>ボリュームを削除してリセットしたい場合は、バックアップを取った上で意図的に「 <code>-v</code> 」を使うようにしましょう。</p>



<h4 class="wp-block-heading">補足：データベース永続化のメリットとデメリット</h4>



<p><strong>メリット：</strong></p>



<ul class="wp-block-list has-watery-green-background-color has-background">
<li><code>docker compose down</code> や再起動をしてもデータベースの中身が保持されるため、意図せずデータが消えることがありません。</li>



<li>本番に近い継続的な検証が可能になり、作業効率が向上します。</li>



<li>定期バックアップと組み合わせることで安全性が高まります。</li>
</ul>



<p><strong>デメリット：</strong></p>



<ul class="wp-block-list has-watery-red-background-color has-background">
<li>クリーンな状態でやり直したい場合に手間がかかります（ボリュームを明示的に削除する必要あり）。</li>



<li>データベース構成が古いまま残ると、意図しない挙動が起きることがあります。</li>



<li>ホストマシン上にデータが残り続けるため、ストレージを圧迫することもあります。</li>
</ul>



<h2 class="wp-block-heading">ローカル環境をどう活用するか</h2>



<p>ローカル環境を構築したら、その使い途としては以下のようなものがあります。</p>



<h3 class="wp-block-heading">① 本番反映前の検証環境として使う</h3>



<p><strong>使い方：</strong></p>



<ul class="wp-block-list">
<li>本番のバックアップ（UpdraftPlus など）をローカルに復元</li>



<li>プラグインやテーマのアップデート前に動作確認</li>



<li>CSSやPHPの修正を事前にチェック</li>
</ul>



<p><strong>メリット：</strong></p>



<ul class="wp-block-list">
<li>本番にデプロイするよりも確認が早い</li>



<li>本番での不具合を未然に防げる</li>



<li>安心して改修作業ができる</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">② 新機能の開発・テスト</h3>



<p><strong>使い方：</strong></p>



<ul class="wp-block-list">
<li>新しいカスタム投稿タイプ、ショートコード、テーマ機能などを追加</li>



<li>本番と同じデータがあるから挙動の再現性が高い</li>
</ul>



<p><strong>メリット：</strong></p>



<ul class="wp-block-list">
<li>「動くと思ったのに動かない…」を減らせる</li>



<li>複数人での共同開発にも役立つ（Git連携＋ローカル開発）</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">③ 本番環境のトラブル再現・原因調査</h3>



<p><strong>使い方：</strong></p>



<ul class="wp-block-list">
<li>本番で発生したエラーを、ローカル環境で再現して検証</li>



<li>wp-config.php の設定を一時的に変えて詳細ログを出力</li>
</ul>



<p><strong>メリット：</strong></p>



<ul class="wp-block-list">
<li>安全に試行錯誤できる</li>



<li>本番に影響を与えないので安心</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">④ WordPressの学習やスキルアップにも最適</h3>



<p><strong>使い方：</strong></p>



<ul class="wp-block-list">
<li>テーマ自作やプラグイン開発の練習用</li>



<li>データベース構造の理解にも役立つ（phpMyAdmin付き）</li>
</ul>



<p><strong>メリット：</strong></p>



<ul class="wp-block-list">
<li>失敗してもやり直せる</li>



<li>サンドボックス環境として自由度が高い</li>
</ul>



<h3 class="wp-block-heading">注意点と運用のコツ</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>注意点</th><th>補足</th></tr></thead><tbody><tr><td>ローカルで変更した内容は本番には反映されない</td><td>必要に応じて手動 or Git／FTP／SCP で反映が必要</td></tr><tr><td>DBは定期的にリフレッシュする</td><td>本番との差異が広がると検証の意味が薄れる</td></tr><tr><td>本番の自動アップデートに注意</td><td>ローカルとの差異が生じやすくなるため、基本は手動が推奨</td></tr></tbody></table></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-blue-background-color">
<p><strong>サイト制作に関するご相談・お見積りなどお気軽にご相談ください。</strong></p>



<p>新規サイト制作では、提案・制作から公開後の保守・運用・更新までトータルで、あなたのお力になります。</p>



<p>既存のサイトでも、簡易な修正や機能追加、更新のお手伝いやレッスンなど、幅広く対応させていただきます。</p>



<p>まずは、お気軽に今お持ちのお悩みをお聞かせください。</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://hiro60.com/contact/" class="btn has-background has-green-background-color" target="_self">お問い合わせフォーム</a></div>
</div>
		<div class="wpulike wpulike-default " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="スキ！ボタン"
					data-ulike-id="1551"
					data-ulike-nonce="4957504b7d"
					data-ulike-type="post"
					data-ulike-template="wpulike-default"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_1551"></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div><p>The post <a href="https://hiro60.com/site_production/1551/">WordPress本番サイトをローカル環境で復元する方法（PHPのバージョンを合わせる）</a> first appeared on <a href="https://hiro60.com">hiro's note</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://hiro60.com/site_production/1551/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: hiro60.com @ 2026-04-08 11:56:58 by W3 Total Cache
-->