<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Web制作 on AIによる技術記事 備忘録</title><link>https://ai.hack-le.com/tags/web%E5%88%B6%E4%BD%9C/</link><description>Recent content in Web制作 on AIによる技術記事 備忘録</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Sat, 22 Aug 2026 10:31:18 +0900</lastBuildDate><atom:link href="https://ai.hack-le.com/tags/web%E5%88%B6%E4%BD%9C/index.xml" rel="self" type="application/rss+xml"/><item><title>WordPressで特定記事の最終更新日を表示するショートコードを作る</title><link>https://ai.hack-le.com/wordpress%E3%81%A7%E7%89%B9%E5%AE%9A%E8%A8%98%E4%BA%8B%E3%81%AE%E6%9C%80%E7%B5%82%E6%9B%B4%E6%96%B0%E6%97%A5%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3/</link><pubDate>Mon, 20 Oct 2025 10:34:50 +0900</pubDate><guid>https://ai.hack-le.com/wordpress%E3%81%A7%E7%89%B9%E5%AE%9A%E8%A8%98%E4%BA%8B%E3%81%AE%E6%9C%80%E7%B5%82%E6%9B%B4%E6%96%B0%E6%97%A5%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%B3/</guid><description>&lt;p&gt;WordPressで「特定の記事の最終更新日」をトップページや固定ページに表示したい場面は多い。&lt;br&gt;&#10;しかしテンプレートファイルを直接編集するのは手間がかかるうえ、テーマアップデートで上書きされる危険もある。&lt;br&gt;&#10;この問題は、&lt;strong&gt;ショートコードを自作してfunctions.phpに登録する&lt;/strong&gt;ことで簡潔に解決できる。&lt;/p&gt;&#10;&lt;h2 id="環境と前提"&gt;環境と前提&#10;&lt;/h2&gt;&lt;p&gt;本稿の内容はWordPress 6.x系を前提としている。&lt;br&gt;&#10;テーマは任意だが、&lt;code&gt;functions.php&lt;/code&gt; にコードを追記できる環境であることが条件である。&lt;br&gt;&#10;子テーマを使っている場合は、子テーマ側に記述することで親テーマの更新にも耐えられる。&lt;/p&gt;&#10;&lt;h2 id="ショートコードの実装"&gt;ショートコードの実装&#10;&lt;/h2&gt;&lt;p&gt;最終更新日を出力するショートコード &lt;code&gt;[updated]&lt;/code&gt; を以下のように定義する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// [updated id=&amp;#34;123&amp;#34; format=&amp;#34;Y-m-d&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;shortcode_post_updated&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shortcode_atts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;format&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Y-m-d&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;updated&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// id未指定なら出力なし&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$updated&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;get_the_modified_time&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$updated&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;esc_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$updated&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;add_shortcode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;updated&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;shortcode_post_updated&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコードを &lt;code&gt;functions.php&lt;/code&gt; に追加すれば、ショートコード &lt;code&gt;[updated id=&amp;quot;123&amp;quot;]&lt;/code&gt; で記事ID 123 の最終更新日を表示できる。&lt;br&gt;&#10;&lt;code&gt;format&lt;/code&gt; 属性を指定すれば日付フォーマットを自由に変更できる。&lt;/p&gt;&#10;&lt;p&gt;例：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[updated id=&amp;#34;123&amp;#34; format=&amp;#34;Y年n月j日&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;出力結果：&lt;code&gt;2025年10月19日&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="タイトル付きの拡張版"&gt;タイトル付きの拡張版&#10;&lt;/h2&gt;&lt;p&gt;記事タイトルと更新日を併記したい場合は、次のようにショートコードを拡張できる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// [updated_with_title id=&amp;#34;123&amp;#34; format=&amp;#34;Y-m-d&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;shortcode_post_updated_with_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shortcode_atts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;format&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Y-m-d&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;updated_with_title&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;get_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$post&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;get_the_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$post&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$updated&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;get_the_modified_time&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;format&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;esc_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nv"&gt;$title&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;（更新日: &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$updated&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;）&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;add_shortcode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;updated_with_title&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;shortcode_post_updated_with_title&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これにより、&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[updated_with_title id=&amp;#34;45&amp;#34; format=&amp;#34;Y/m/d&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;と書くだけで&lt;br&gt;&#10;「記事タイトル（更新日: 2025/10/19）」&lt;br&gt;&#10;という形式で表示できる。&lt;/p&gt;&#10;&lt;h2 id="実運用上の注意点"&gt;実運用上の注意点&#10;&lt;/h2&gt;&lt;p&gt;このショートコードはループ外で動作するため、トップページや固定ページの任意の位置に埋め込める。&lt;br&gt;&#10;ただし、キャッシュ系プラグイン（WP Super Cache、LiteSpeed Cacheなど）を使用している場合は、更新後にキャッシュを手動削除しないと表示が反映されない場合がある。&lt;br&gt;&#10;また、日付の取得には &lt;code&gt;get_the_modified_time()&lt;/code&gt; を使用しているため、テーマによってはタイムゾーン設定が影響することがある。必要に応じて &lt;code&gt;get_post_modified_time()&lt;/code&gt; に置き換えてもよい。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;ショートコード化することで、テンプレート編集を避けながら任意の場所に更新日を表示できるようになった。&lt;br&gt;&#10;WordPressの柔軟性を保ったまま、メンテナンス性を高めるシンプルな実装例として有用である。&lt;/p&gt;&#10;</description></item><item><title>WordPressのカスタムフィールドをREST APIで取得する方法</title><link>https://ai.hack-le.com/wordpress%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92rest-api%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Thu, 11 Sep 2025 01:56:35 +0900</pubDate><guid>https://ai.hack-le.com/wordpress%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92rest-api%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;p&gt;WordPressで作成したカスタムフィールドは、デフォルトではREST APIのレスポンスに含まれない。しかし、&lt;code&gt;register_rest_field()&lt;/code&gt;関数を使用することで、カスタムフィールドをREST APIのレスポンスに追加できる。本記事では、カスタムフィールドをREST APIで取得する手順を具体的に解説する。&lt;/p&gt;&#10;&lt;h2 id="前提環境"&gt;前提環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;WordPress 5.0以上&lt;/li&gt;&#10;&lt;li&gt;対象カスタムフィールドが既に投稿に設定済み&lt;/li&gt;&#10;&lt;li&gt;functions.phpまたはプラグインファイルへの編集権限&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="カスタムフィールドをrest-apiに追加する手順"&gt;カスタムフィールドをREST APIに追加する手順&#10;&lt;/h2&gt;&lt;h3 id="コードの実装"&gt;コードの実装&#10;&lt;/h3&gt;&lt;p&gt;以下のコードをテーマのfunctions.phpまたはプラグインファイルに追加する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_action(&amp;#39;rest_api_init&amp;#39;, function() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; register_rest_field(&amp;#39;post&amp;#39;, &amp;#39;custom_field_name&amp;#39;, array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;get_callback&amp;#39; =&amp;gt; function($post) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return get_post_meta($post[&amp;#39;id&amp;#39;], &amp;#39;custom_field_name&amp;#39;, true);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;schema&amp;#39; =&amp;gt; array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;description&amp;#39; =&amp;gt; &amp;#39;Custom field description&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;type&amp;#39; =&amp;gt; &amp;#39;string&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ));&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;});&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコードの各パラメータについて詳しく説明する。&lt;/p&gt;&#10;&lt;h3 id="パラメータの説明"&gt;パラメータの説明&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;register_rest_field()&lt;/code&gt;関数の第1引数では、対象となる投稿タイプを指定する。投稿の場合は&lt;code&gt;'post'&lt;/code&gt;、固定ページの場合は&lt;code&gt;'page'&lt;/code&gt;、カスタム投稿タイプの場合はその投稿タイプ名を指定する。&lt;/p&gt;&#10;&lt;p&gt;第2引数では、REST APIのレスポンスに表示されるフィールド名を指定する。この名前は実際のカスタムフィールド名と異なっても構わないが、わかりやすさのため同じ名前にすることが多い。&lt;/p&gt;&#10;&lt;p&gt;第3引数の配列では、以下の設定を行う。&lt;code&gt;get_callback&lt;/code&gt;は、フィールドの値を取得するための関数を定義する。ここで&lt;code&gt;get_post_meta()&lt;/code&gt;関数を使用してカスタムフィールドの値を取得している。第3引数に&lt;code&gt;true&lt;/code&gt;を指定することで、配列ではなく単一の値として取得される。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;schema&lt;/code&gt;では、API仕様書に表示されるフィールドの説明とデータ型を定義する。データ型には&lt;code&gt;string&lt;/code&gt;、&lt;code&gt;integer&lt;/code&gt;、&lt;code&gt;boolean&lt;/code&gt;などが指定できる。&lt;/p&gt;&#10;&lt;h3 id="実際の使用例"&gt;実際の使用例&#10;&lt;/h3&gt;&lt;p&gt;たとえば、記事の閲覧数を記録する&lt;code&gt;page_views&lt;/code&gt;というカスタムフィールドがある場合、以下のように実装する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_action(&amp;#39;rest_api_init&amp;#39;, function() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; register_rest_field(&amp;#39;post&amp;#39;, &amp;#39;page_views&amp;#39;, array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;get_callback&amp;#39; =&amp;gt; function($post) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return get_post_meta($post[&amp;#39;id&amp;#39;], &amp;#39;page_views&amp;#39;, true);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;schema&amp;#39; =&amp;gt; array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;description&amp;#39; =&amp;gt; &amp;#39;Page view count&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;type&amp;#39; =&amp;gt; &amp;#39;integer&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ));&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;});&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この設定を行うと、REST APIのレスポンスは以下のようになる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;id&amp;#34;: 123,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;title&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;rendered&amp;#34;: &amp;#34;サンプル記事&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;content&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;rendered&amp;#34;: &amp;#34;記事の内容...&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;page_views&amp;#34;: 1500,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#34;meta&amp;#34;: {...}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;カスタムフィールド&lt;code&gt;page_views&lt;/code&gt;が、投稿データと同じレベル（トップレベル）に配置されていることがわかる。&lt;/p&gt;&#10;&lt;h2 id="動作確認の方法"&gt;動作確認の方法&#10;&lt;/h2&gt;&lt;h3 id="curlコマンドでの確認"&gt;curlコマンドでの確認&#10;&lt;/h3&gt;&lt;p&gt;コマンドラインからcurlを使用して確認する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl https://example.com/wp-json/wp/v2/posts/123&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;レスポンスのJSONデータの中に、設定したカスタムフィールド名とその値が含まれていれば実装成功である。&lt;/p&gt;&#10;&lt;h2 id="複数のカスタムフィールドを追加する場合"&gt;複数のカスタムフィールドを追加する場合&#10;&lt;/h2&gt;&lt;p&gt;複数のカスタムフィールドをREST APIに追加したい場合は、&lt;code&gt;register_rest_field()&lt;/code&gt;を複数回呼び出す。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_action(&amp;#39;rest_api_init&amp;#39;, function() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // 閲覧数フィールド&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; register_rest_field(&amp;#39;post&amp;#39;, &amp;#39;page_views&amp;#39;, array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;get_callback&amp;#39; =&amp;gt; function($post) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return get_post_meta($post[&amp;#39;id&amp;#39;], &amp;#39;page_views&amp;#39;, true);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;schema&amp;#39; =&amp;gt; array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;description&amp;#39; =&amp;gt; &amp;#39;Page view count&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;type&amp;#39; =&amp;gt; &amp;#39;integer&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ));&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; // 評価フィールド&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; register_rest_field(&amp;#39;post&amp;#39;, &amp;#39;rating&amp;#39;, array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;get_callback&amp;#39; =&amp;gt; function($post) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return get_post_meta($post[&amp;#39;id&amp;#39;], &amp;#39;rating&amp;#39;, true);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;schema&amp;#39; =&amp;gt; array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;description&amp;#39; =&amp;gt; &amp;#39;Post rating&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;type&amp;#39; =&amp;gt; &amp;#39;number&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ));&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;});&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この方法により、単一のアクションフック内で複数のカスタムフィールドをまとめて追加できる。&lt;/p&gt;&#10;&lt;h2 id="注意点とトラブルシューティング"&gt;注意点とトラブルシューティング&#10;&lt;/h2&gt;&lt;h3 id="カスタムフィールドの値が表示されない場合"&gt;カスタムフィールドの値が表示されない場合&#10;&lt;/h3&gt;&lt;p&gt;カスタムフィールドがREST APIに表示されない場合、以下を確認する必要がある。まず、対象の投稿に実際にカスタムフィールドの値が設定されているかをWordPress管理画面で確認する。値が設定されていない場合、APIのレスポンスには空の値またはnullが返される。&lt;/p&gt;&#10;&lt;p&gt;次に、&lt;code&gt;get_post_meta()&lt;/code&gt;関数の第1引数で正しい投稿IDが取得できているかを確認する。デバッグのため、一時的に&lt;code&gt;error_log()&lt;/code&gt;関数を使用して投稿IDやカスタムフィールドの値をログに出力して確認することも有効である。&lt;/p&gt;&#10;&lt;h3 id="テーマ間での互換性"&gt;テーマ間での互換性&#10;&lt;/h3&gt;&lt;p&gt;現在の実装方法では、テーマを変更するとfunctions.phpも変更されるため、新しいテーマでも同じコードを追加する必要がある。テーマに依存しない実装を行いたい場合は、専用のプラグインを作成することを推奨する。&lt;/p&gt;&#10;&lt;p&gt;プラグインとして実装する場合は、以下のようなファイル構造で作成する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;?php&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/*&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Plugin Name: Custom Fields REST API&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Description: Adds custom fields to REST API&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Version: 1.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_action(&amp;#39;rest_api_init&amp;#39;, function() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; register_rest_field(&amp;#39;post&amp;#39;, &amp;#39;page_views&amp;#39;, array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;get_callback&amp;#39; =&amp;gt; function($post) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return get_post_meta($post[&amp;#39;id&amp;#39;], &amp;#39;page_views&amp;#39;, true);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;schema&amp;#39; =&amp;gt; array(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;description&amp;#39; =&amp;gt; &amp;#39;Page view count&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;type&amp;#39; =&amp;gt; &amp;#39;integer&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; )&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ));&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;});&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このファイルをプラグインディレクトリに配置することで、テーマに依存しない実装が可能になる。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;WordPressのカスタムフィールドをREST APIで取得するには、&lt;code&gt;register_rest_field()&lt;/code&gt;関数を使用する方法が最も確実である。この方法により、フロントエンドのJavaScriptアプリケーションやモバイルアプリケーションから、カスタムフィールドの値に簡単にアクセスできるようになる。実装時は、データ型の指定とエラーハンドリングに注意し、動作確認を十分に行うことが重要である。&lt;/p&gt;&#10;</description></item><item><title>WordPressでURLを自動的にハイパーリンクにする実装方法</title><link>https://ai.hack-le.com/wordpress%E3%81%A7url%E3%82%92%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AB%E3%81%99%E3%82%8B%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95/</link><pubDate>Fri, 01 Aug 2025 05:46:44 +0900</pubDate><guid>https://ai.hack-le.com/wordpress%E3%81%A7url%E3%82%92%E8%87%AA%E5%8B%95%E7%9A%84%E3%81%AB%E3%83%8F%E3%82%A4%E3%83%91%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AB%E3%81%99%E3%82%8B%E5%AE%9F%E8%A3%85%E6%96%B9%E6%B3%95/</guid><description>&lt;p&gt;WordPressでブログを運営していると、投稿内にURLを記載することがよくある。しかし、毎回手動でリンクタグを書くのは面倒で、特に長いURLの場合は可読性も下がってしまう。本記事では、httpやhttpsで始まるURLを自動的にハイパーリンクに変換する方法を紹介する。&lt;/p&gt;&#10;&lt;p&gt;実装環境はWordPress 6.0以降を想定している。PHPの基本的な知識があれば十分理解できる内容である。&lt;/p&gt;&#10;&lt;h2 id="wordpress標準のmake_clickable関数を使った実装"&gt;WordPress標準のmake_clickable()関数を使った実装&#10;&lt;/h2&gt;&lt;p&gt;WordPressには&lt;code&gt;make_clickable()&lt;/code&gt;という標準関数が用意されており、これを使うのが最もシンプルで確実な方法である。この関数は、テキスト内のURLやメールアドレスを自動的に検出し、適切なHTMLリンクに変換してくれる。&lt;/p&gt;&#10;&lt;p&gt;実装方法は、アクティブなテーマのfunctions.phpファイルに以下のコードを追加するだけである。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function auto_link_urls($content) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return make_clickable($content);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_filter(&amp;#39;the_content&amp;#39;, &amp;#39;auto_link_urls&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_filter(&amp;#39;comment_text&amp;#39;, &amp;#39;auto_link_urls&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この実装により、投稿本文（&lt;code&gt;the_content&lt;/code&gt;）とコメント（&lt;code&gt;comment_text&lt;/code&gt;）の両方で自動リンク化が有効になる。例えば、投稿内に「詳細はhttps://example.com/documentを参照してください」と書けば、自動的に「詳細は&amp;lt;a href=&amp;ldquo;&lt;a class="link" href="https://example.com/document%22&amp;amp;gt;https://example.com/document&amp;amp;lt;/a" target="_blank" rel="noopener"&#10; &gt;https://example.com/document"&amp;gt;https://example.com/document&amp;lt;/a&lt;/a&gt;&amp;gt;を参照してください」という形でHTMLが生成される。&lt;/p&gt;&#10;&lt;p&gt;&lt;code&gt;make_clickable()&lt;/code&gt;関数の優れた点は、既存のHTMLタグ内のURLには影響しないことである。つまり、手動で設定したリンクや画像のsrc属性などは変更されず、プレーンテキストのURLのみが対象となる。また、メールアドレスも同様に&lt;code&gt;mailto:&lt;/code&gt;リンクに変換されるため、非常に実用的である。&lt;/p&gt;&#10;&lt;h2 id="より詳細な制御が必要な場合の正規表現による実装"&gt;より詳細な制御が必要な場合の正規表現による実装&#10;&lt;/h2&gt;&lt;p&gt;標準の&lt;code&gt;make_clickable()&lt;/code&gt;関数では制御しきれない場合もある。例えば、リンクに特定のCSSクラスを付与したい、target属性を設定したい、特定のドメインのみ対象にしたいといった要求がある場合である。&lt;/p&gt;&#10;&lt;p&gt;このような場合は、正規表現を使ったカスタム関数を作成する方法がある。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function custom_auto_link($content) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $pattern = &amp;#39;/(?&amp;lt;!href=&amp;#34;)(?&amp;lt;!src=&amp;#34;)(https?:\/\/[^\s&amp;lt;&amp;gt;&amp;#34;\&amp;#39;]+)/i&amp;#39;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $replacement = &amp;#39;&amp;lt;a href=&amp;#34;$1&amp;#34; target=&amp;#34;_blank&amp;#34; rel=&amp;#34;noopener&amp;#34;&amp;gt;$1&amp;lt;/a&amp;gt;&amp;#39;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return preg_replace($pattern, $replacement, $content);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_filter(&amp;#39;the_content&amp;#39;, &amp;#39;custom_auto_link&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この正規表現パターンでは、&lt;code&gt;(?&amp;lt;!href=&amp;quot;)&lt;/code&gt;と&lt;code&gt;(?&amp;lt;!src=&amp;quot;)&lt;/code&gt;という後読み否定アサーションを使用している。これにより、既存のhref属性やsrc属性内のURLは除外され、プレーンテキストのURLのみが対象となる。また、&lt;code&gt;target=&amp;quot;_blank&amp;quot;&lt;/code&gt;属性を付けることで、リンクを新しいタブで開くように設定し、&lt;code&gt;rel=&amp;quot;noopener&amp;quot;&lt;/code&gt;でセキュリティ上の問題も回避している。&lt;/p&gt;&#10;&lt;p&gt;ただし、この方法は&lt;code&gt;make_clickable()&lt;/code&gt;関数ほど洗練されていないため、エッジケースでの動作に注意が必要である。特に、複雑なHTMLが混在する場合や、URLに特殊文字が含まれる場合などでは、予期しない結果になる可能性がある。&lt;/p&gt;&#10;&lt;h2 id="特定のフィルターのみに適用する方法"&gt;特定のフィルターのみに適用する方法&#10;&lt;/h2&gt;&lt;p&gt;すべてのコンテンツに自動リンク化を適用したくない場合もある。例えば、投稿本文には適用したいが、コメントには適用したくない場合や、特定のカスタムフィールドにのみ適用したい場合である。&lt;/p&gt;&#10;&lt;p&gt;コメントのみに適用したい場合は、以下のように書く。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_filter(&amp;#39;comment_text&amp;#39;, &amp;#39;make_clickable&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;カスタムフィールドの値に適用したい場合は、表示時に関数を通すようにする。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function auto_link_custom_field($value) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return make_clickable($value);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;// テンプレートファイルでの使用例&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo auto_link_custom_field(get_field(&amp;#39;url_field&amp;#39;));&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このように、WordPressのフィルターシステムを活用することで、必要な場所にのみ機能を適用できる。フィルターの優先度も指定可能で、他のプラグインとの競合を避けたい場合は優先度を調整すればよい。&lt;/p&gt;&#10;&lt;h2 id="実装時の注意点と推奨される書き方"&gt;実装時の注意点と推奨される書き方&#10;&lt;/h2&gt;&lt;p&gt;基本的な実装は前述のシンプルなコードで十分だが、より堅牢なシステムを構築したい場合は、いくつかの考慮点がある。&lt;/p&gt;&#10;&lt;p&gt;管理画面やRSSフィード生成時には自動リンク化を無効にしたい場合がある。これは、編集画面でのプレビューに影響したり、フィード内でのリンク表示に問題が生じたりする可能性があるためである。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function my_theme_auto_link_urls($content) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (is_admin() || is_feed()) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return $content;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return make_clickable($content);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_filter(&amp;#39;the_content&amp;#39;, &amp;#39;my_theme_auto_link_urls&amp;#39;, 10);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_filter(&amp;#39;comment_text&amp;#39;, &amp;#39;my_theme_auto_link_urls&amp;#39;, 10);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;また、関数名には必ずプレフィックスを付けることが推奨される。これは、他のテーマやプラグインとの名前衝突を避けるためである。&lt;code&gt;my_theme_&lt;/code&gt;のような形でテーマ名を含めたプレフィックスを使用すれば、問題を回避できる。&lt;/p&gt;&#10;&lt;p&gt;しかし、個人サイトや小規模なプロジェクトであれば、最初に紹介したシンプルなコードで十分である。過度な抽象化や将来の拡張性を考慮した実装は、実際には使われないことが多く、コードの可読性を下げる結果になりがちである。動作するシンプルなコードこそが、最良の解決策と言える。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;WordPressでURLを自動的にハイパーリンクにする方法として、&lt;code&gt;make_clickable()&lt;/code&gt;関数を使った実装を紹介した。この方法は、WordPressの標準機能を活用するため安全性が高く、実装も非常にシンプルである。&lt;/p&gt;&#10;&lt;p&gt;最も基本的な実装は、functions.phpに数行のコードを追加するだけで完了する。より詳細な制御が必要な場合は正規表現を使った方法もあるが、一般的な用途では標準関数で十分である。&lt;/p&gt;&#10;&lt;p&gt;実際の運用では、シンプルで理解しやすいコードを維持することが重要である。複雑な実装よりも、動作が確実で保守しやすいコードの方が、長期的には価値が高い。&lt;/p&gt;&#10;</description></item><item><title>WordPress 6.8.2完全ガイド</title><link>https://ai.hack-le.com/wordpress-6-8-2%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89/</link><pubDate>Wed, 16 Jul 2025 03:51:21 +0900</pubDate><guid>https://ai.hack-le.com/wordpress-6-8-2%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89/</guid><description>&lt;p&gt;WordPress 6.8.2は2025年7月15日にリリースされた重要なメンテナンスリリースです。この更新は新機能の追加ではなく、&lt;strong&gt;20のコア修正と15のブロックエディター改善&lt;/strong&gt;に焦点を当てた安定性向上のリリースとなっています。&lt;/p&gt;&#10;&lt;h2 id="リリース概要と重要な変更点"&gt;リリース概要と重要な変更点&#10;&lt;/h2&gt;&lt;p&gt;WordPress 6.8.2は&lt;strong&gt;ショートサイクルメンテナンスリリース&lt;/strong&gt;として位置づけられ、WordPress 6.8で導入された機能の不具合修正と性能向上を目的としています。リリースは@audrasjb、@estelaris、@zunaid321によって主導されました。&lt;/p&gt;&#10;&lt;p&gt;このバージョンで最も重要な変更は、&lt;strong&gt;WordPress 4.1-4.6のセキュリティサポート終了&lt;/strong&gt;と、&lt;strong&gt;bcryptパスワードハッシュ化&lt;/strong&gt;の継続的な改善です。日本のWordPress開発者コミュニティでは、特にbcryptへの移行による下位互換性の問題について活発な議論が行われています。&lt;/p&gt;&#10;&lt;h2 id="主な修正内容と改善点"&gt;主な修正内容と改善点&#10;&lt;/h2&gt;&lt;h3 id="コア修正20項目"&gt;コア修正（20項目）&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;テーマ関連の重要な修正&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Twenty Twenty-Five&lt;/strong&gt;：エディタースタイルが読み込まれない問題を修正&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Twenty Sixteen&lt;/strong&gt;：引用ブロックのプレーンスタイルでエディターに枠線が表示される問題を解決&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Twenty Fourteen&lt;/strong&gt;：最新コメントブロックのリンク色がコンテンツサイドバーに適用される問題を修正&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Twenty Twenty-One&lt;/strong&gt;：メニュートグルが「load」イベント後まで反応しない問題を解決&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;メディア処理の改善&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Mac スクリーンショットアップロード問題&lt;/strong&gt;：ファイル名にクエスチョンマークが挿入され画像が破損する問題を修正&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;oEmbed プロバイダー変更&lt;/strong&gt;：app.screencast.com の削除と HTTP から HTTPS への移行&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;開発環境の強化&lt;/strong&gt;：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ブロックエディタースタイルの開発モード&lt;/strong&gt;導入&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Twemoji v16.0.1&lt;/strong&gt;への更新&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;TinyMCE キャッシュキー&lt;/strong&gt;の更新によるパフォーマンス向上&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="ブロックエディター改善15項目"&gt;ブロックエディター改善（15項目）&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;ナビゲーションブロック&lt;/strong&gt;：パフォーマンス最適化と有効性チェック改善&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;クエリループ&lt;/strong&gt;：&amp;lsquo;query.inherit&amp;rsquo; 属性値の上書き防止&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;画像ブロック&lt;/strong&gt;：ライブラリから同じ画像を再選択時の古いURL問題を修正&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;詳細ブロック&lt;/strong&gt;：すべての非インタラクティブフォーマットを有効化し、キーボードアクセシビリティを改善&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;メディアプレースホルダー&lt;/strong&gt;：ローカルURLパスを許可するメディアURL入力タイプの回帰を修正&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="システム要件"&gt;システム要件&#10;&lt;/h2&gt;&lt;p&gt;WordPress 6.8.2は&lt;strong&gt;WordPress 6.8と同じシステム要件&lt;/strong&gt;を維持しています：&lt;/p&gt;&#10;&lt;h3 id="最小要件"&gt;最小要件&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;PHP&lt;/strong&gt;: バージョン7.4以上&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;MySQL&lt;/strong&gt;: バージョン5.7以上 または &lt;strong&gt;MariaDB&lt;/strong&gt;: バージョン10.4以上&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;HTTPS&lt;/strong&gt;: サポート必須&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ウェブサーバー&lt;/strong&gt;: Apache または Nginx（推奨）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="推奨要件"&gt;推奨要件&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;PHP&lt;/strong&gt;: バージョン8.0以上（最適なパフォーマンスのため）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;MySQL&lt;/strong&gt;: バージョン8.0以上 または &lt;strong&gt;MariaDB&lt;/strong&gt;: バージョン10.6以上&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;RAM&lt;/strong&gt;: 最小512MB（大規模サイトには8GB推奨）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;日本のホスティングプロバイダーであるKUSANAGIチームは、PHP 8.xとの互換性について詳細な技術分析を提供しており、パフォーマンス向上のためのPHP 8.0以上の使用を強く推奨しています。&lt;/p&gt;&#10;&lt;h2 id="インストールとアップデート方法"&gt;インストールとアップデート方法&#10;&lt;/h2&gt;&lt;h3 id="自動更新推奨"&gt;自動更新（推奨）&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;WordPressダッシュボードにログイン&lt;/li&gt;&#10;&lt;li&gt;「&lt;strong&gt;ダッシュボード」＞「更新&lt;/strong&gt;」に移動&lt;/li&gt;&#10;&lt;li&gt;「&lt;strong&gt;今すぐ更新&lt;/strong&gt;」ボタンをクリック&lt;/li&gt;&#10;&lt;li&gt;WordPressが自動的に6.8.2をダウンロード・インストール&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="手動更新"&gt;手動更新&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://wordpress.org/download/release-archive/" target="_blank" rel="noopener"&#10; &gt;https://wordpress.org/download/release-archive/&lt;/a&gt; からWordPress 6.8.2をダウンロード&lt;/li&gt;&#10;&lt;li&gt;FTPまたはホスティングコントロールパネルでファイルをアップロード&lt;/li&gt;&#10;&lt;li&gt;標準的なWordPressアップグレード手順に従う&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="wp-cli使用"&gt;WP-CLI使用&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wp core update https://wordpress.org/wordpress-6.8.2.zip&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="既知の問題と注意点"&gt;既知の問題と注意点&#10;&lt;/h2&gt;&lt;h3 id="重要な互換性問題"&gt;重要な互換性問題&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;マルチサイト環境での問題&lt;/strong&gt;：一部のユーザーでマルチサイトインストールでドメインマッピングに関する問題が報告されています。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;パスワードハッシュ化の変更&lt;/strong&gt;：日本の開発者コミュニティ（特にSWELLテーマ開発者）は、WordPress 6.8でのbcryptパスワードハッシュ化について警告しています。「6.8にアップデート後にダウングレードすると、bcrypt/MD5の非互換性によりパスワード認証が失敗する可能性がある」とされています。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;SEOプラグインとの競合&lt;/strong&gt;：Yoast SEOなど一部のSEOプラグインで投稿エディターのレイアウト問題が報告されています。&lt;/p&gt;&#10;&lt;h3 id="パフォーマンスへの影響"&gt;パフォーマンスへの影響&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;メモリリーク修正&lt;/strong&gt;：do_blocks()関数でのメモリリークが修正され、サイトパフォーマンスが向上しました。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;キャッシュ改善&lt;/strong&gt;：TinyMCEキャッシュキーの更新により、エディターの読み込み速度が改善されています。&lt;/p&gt;&#10;&lt;h2 id="日本語コミュニティからの反応"&gt;日本語コミュニティからの反応&#10;&lt;/h2&gt;&lt;h3 id="翻訳と地域化の状況"&gt;翻訳と地域化の状況&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;翻訳チームの活動&lt;/strong&gt;：日本のWordPress翻訳チームは積極的に活動しており、すべてのWordPress 6.8.2ドキュメントが日本語に翻訳されています。WordPress 6.5で導入された改良された翻訳システム（gettextからPHPベースの翻訳ファイルへの移行）により、パフォーマンスが向上しています。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;コミュニティエンゲージメント&lt;/strong&gt;：WordCamp Japan コミュニティはWordPress 6.8の変更について活発に議論しており、日本全国の25のWordPress Meetupグループがボランティアメンバーによって管理されています。&lt;/p&gt;&#10;&lt;h3 id="開発者とテーマ制作者の対応"&gt;開発者とテーマ制作者の対応&#10;&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;主要な日本のプラグイン開発者&lt;/strong&gt;：不動産プラグインシリーズなどの主要な日本のプラグイン開発者がWordPress 6.8対応版をリリースしています。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;テーマ開発者の分析&lt;/strong&gt;：Vektor Inc.（Lightningテーマ開発者）やTCDテーマ開発者は、WordPress 6.8の変更点と日本のユーザーへの影響について包括的なガイドを提供しています。&lt;/p&gt;&#10;&lt;h2 id="前バージョンからの変更点"&gt;前バージョンからの変更点&#10;&lt;/h2&gt;&lt;h3 id="wordpress-681からの変更"&gt;WordPress 6.8.1からの変更&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;追加の20のコア修正&lt;/strong&gt;（6.8.1では15の修正）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;15のブロックエディター改善&lt;/strong&gt;（6.8.1と同様の範囲）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;同梱テーマ固有の修正&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;メディア処理の改善&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;開発環境の強化&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="wordpress-680からの主な違い"&gt;WordPress 6.8.0からの主な違い&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;新機能なし&lt;/strong&gt; - 純粋にメンテナンス重視&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;既存のWordPress 6.8機能の安定性向上&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;6.8.0リリース後に発見された問題の修正&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ブロックエディターとコア機能のパフォーマンス最適化&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="今後の展望と推奨事項"&gt;今後の展望と推奨事項&#10;&lt;/h2&gt;&lt;h3 id="ウェブサイト所有者への推奨"&gt;ウェブサイト所有者への推奨&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;即座にアップデート&lt;/strong&gt;してバグ修正と改善の恩恵を受ける&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;カスタムテーマやプラグインで徹底的にテスト&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;アップデート前にサイトをバックアップ&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;プラグインのWordPress 6.8.2互換性を確認&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="開発者への推奨"&gt;開発者への推奨&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;ブロックエディターAPIの技術的変更を確認&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;カスタムブロックとテーマの互換性をテスト&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;影響を受けるWordPress関数を使用している場合はプラグインコードを更新&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;将来の開発で非推奨機能を考慮&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;WordPress 6.8.2は、35の総修正（20のコア + 15のブロックエディター）により、WordPress 6.8の全体的な安定性を向上させる堅実なメンテナンスリリースです。新機能は導入されていませんが、ユーザーエクスペリエンスに影響を与える重要な問題を修正しており、すべてのWordPress 6.8ユーザーにとって価値のあるアップデートとなっています。&lt;/p&gt;&#10;&lt;p&gt;WordPress 4.1-4.6のセキュリティアップデート終了は、WordPressの進化における重要な節目を示しており、セキュリティとパフォーマンスの利点のためにより新しいバージョンを維持することの重要性を強調しています。&lt;/p&gt;&#10;&lt;p&gt;日本のWordPressコミュニティは引き続き活発で、翻訳・地域化の取り組みが強力に続いており、グローバルなWordPressエコシステムの変化にもかかわらず、技術的な分析とユーザーガイダンスを提供し続けています。&lt;/p&gt;&#10;</description></item><item><title>WordPress REST APIで記事を投稿しカスタムフィールドを設定する方法</title><link>https://ai.hack-le.com/wordpress-rest-api-custom-fields/</link><pubDate>Tue, 07 Jan 2025 18:45:53 +0900</pubDate><guid>https://ai.hack-le.com/wordpress-rest-api-custom-fields/</guid><description>&lt;p&gt;WordPress REST APIを使用して記事を投稿すると同時に、カスタムフィールドを設定することができます。本記事では、Pythonを使用してREST API経由で記事を作成し、カスタムフィールドを設定または更新する手順を紹介します。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="準備"&gt;準備&#10;&lt;/h2&gt;&lt;p&gt;アプリパスワードを取得します。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://ai.hack-le.com/wordpress-app-password/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;WordPressでアプリパスワードを取得する操作手順&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/wordpress-app-password/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://ai.hack-le.com/images/uploads/2024/10/wordpress-app-password.webp" alt="WordPressでアプリパスワードを取得する操作手順" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;p&gt;&lt;code&gt;functions.php&lt;/code&gt;に以下のコードを追加し、カスタムフィールドをREST APIで操作可能にします。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;register_custom_meta_fields&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;register_post_meta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;post&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;custom_field_key_1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;type&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;string&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;single&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;show_in_rest&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;));&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;register_post_meta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;post&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;custom_field_key_2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;type&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;number&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;single&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;show_in_rest&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;));&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;init&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;register_custom_meta_fields&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="pythonで記事を投稿しカスタムフィールドを設定する"&gt;Pythonで記事を投稿しカスタムフィールドを設定する&#10;&lt;/h2&gt;&lt;p&gt;以下は、Pythonを使用してWordPressのREST APIで記事を作成し、カスタムフィールドを設定するコードです。&lt;/p&gt;&#10;&lt;h3 id="コード例"&gt;コード例&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;requests.auth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HTTPBasicAuth&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# WordPressの設定&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;WORDPRESS_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-wordpress-site.com/wp-json/wp/v2/posts&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;USERNAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;your-username&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;APP_PASSWORD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;your-app-password&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;custom_fields&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; WordPress REST APIを使用して記事を作成し、カスタムフィールドを設定&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;publish&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;meta&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;custom_fields&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# カスタムフィールド&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;WORDPRESS_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HTTPBasicAuth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;USERNAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;APP_PASSWORD&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;投稿が成功しました: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="c1"&gt;# 応答データを表示&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;投稿に失敗しました: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# サンプルデータ&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;サンプル投稿 1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;p&amp;gt;この投稿はREST APIで作成されました。&amp;lt;/p&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;custom_fields&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;custom_field_key_1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;サンプル値1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;custom_field_key_2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;サンプル投稿 2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;p&amp;gt;こちらもREST APIで作成されました。&amp;lt;/p&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;custom_fields&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;custom_field_key_1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;サンプル値2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;custom_field_key_2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 投稿をループして作成&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;create_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;custom_fields&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h3 id="詳細な解説"&gt;詳細な解説&#10;&lt;/h3&gt;&lt;h4 id="カスタムフィールドの設定"&gt;カスタムフィールドの設定&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;上記コードの &lt;code&gt;custom_fields&lt;/code&gt; は、REST APIの &lt;code&gt;meta&lt;/code&gt; に渡されます。&lt;/li&gt;&#10;&lt;li&gt;WordPressに登録されているカスタムフィールド（&lt;code&gt;functions.php&lt;/code&gt; で登録）だけが受け付けられます。&lt;/li&gt;&#10;&lt;li&gt;未登録のカスタムフィールドを送信するとエラーになります。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="既存記事のカスタムフィールドを更新する"&gt;既存記事のカスタムフィールドを更新する&#10;&lt;/h2&gt;&lt;p&gt;既存の記事のカスタムフィールドを更新するには、&lt;code&gt;PATCH&lt;/code&gt; メソッドを使用します。&lt;/p&gt;&#10;&lt;h3 id="コード例-1"&gt;コード例&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;custom_fields&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; WordPress REST APIを使用して既存記事のカスタムフィールドを更新&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;WORDPRESS_URL&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;meta&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;custom_fields&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# 更新するカスタムフィールド&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;patch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;HTTPBasicAuth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;USERNAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;APP_PASSWORD&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;投稿 (ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;) が更新されました。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;更新に失敗しました: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# サンプル更新データ&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;update_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;custom_field_key_1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;更新された値&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;custom_field_key_2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="エラーハンドリング"&gt;エラーハンドリング&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;認証エラー&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;正しい認証情報（ユーザー名とアプリパスワード）が必要です。&lt;/li&gt;&#10;&lt;li&gt;エラー例: &lt;code&gt;{ &amp;quot;code&amp;quot;: &amp;quot;rest_cannot_create&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;Sorry, you are not allowed to create posts as this user.&amp;quot;, &amp;quot;data&amp;quot;: { &amp;quot;status&amp;quot;: 403 } }&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;strong&gt;カスタムフィールド未登録エラー&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;カスタムフィールドが &lt;code&gt;register_post_meta&lt;/code&gt; で登録されていない場合はエラーになります。&lt;/li&gt;&#10;&lt;li&gt;エラー例: &lt;code&gt;{ &amp;quot;code&amp;quot;: &amp;quot;rest_invalid_param&amp;quot;, &amp;quot;message&amp;quot;: &amp;quot;Invalid parameter(s): meta&amp;quot;, &amp;quot;data&amp;quot;: { &amp;quot;status&amp;quot;: 400 } }&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;カスタムフィールドの登録&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;functions.php&lt;/code&gt; に &lt;code&gt;register_post_meta&lt;/code&gt; を記述してREST APIで操作可能にする。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;strong&gt;記事の作成&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;POST&lt;/code&gt; メソッドで記事を作成し、同時にカスタムフィールドを設定。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;&lt;strong&gt;記事の更新&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;PATCH&lt;/code&gt; メソッドでカスタムフィールドを更新可能。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;上記の方法で、REST APIを通じてWordPressの記事とカスタムフィールドを簡単に操作できます。&lt;/p&gt;&#10;</description></item><item><title>WordPress REST APIですべての記事を削除するPythonコード</title><link>https://ai.hack-le.com/wordpress-delete-all-posts/</link><pubDate>Tue, 07 Jan 2025 18:07:34 +0900</pubDate><guid>https://ai.hack-le.com/wordpress-delete-all-posts/</guid><description>&lt;p&gt;実行するとすべての記事が削除されますので、注意してください。&lt;/p&gt;&#10;&lt;h2 id="コード"&gt;コード&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;requests.auth&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HTTPBasicAuth&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# WordPressの設定&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;WORDPRESS_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://example.com/wp-json/wp/v2/posts&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;USERNAME&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;WORDPRESS_USERNAME&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;APP_PASSWORD&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;WORDPRESS_APP_PASSWORD&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_posts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;per_page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; すべての投稿を取得する&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;?per_page=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;per_page&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;page=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Error fetching posts (page &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;per_page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# 最後のページに到達&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;delete_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; 指定された投稿を削除する&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;投稿 (ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;) を削除しました。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;投稿 (ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;) の削除に失敗しました:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;delete_all_posts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; すべての投稿を削除する&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fetch_posts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;削除する投稿はありません。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delete_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 認証情報の設定&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HTTPBasicAuth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;USERNAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;APP_PASSWORD&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# すべての投稿を削除&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;delete_all_posts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;WORDPRESS_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="使い方"&gt;使い方&#10;&lt;/h2&gt;&lt;p&gt;スクリプトをファイルとして保存し、実行する。&lt;code&gt;requests&lt;/code&gt;ライブラリのインストールが事前に必要。&lt;/p&gt;&#10;&lt;p&gt;また、以下を環境変数として登録している（テストするだけならハードコーディングでもよい）&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;WORDPRESS_USERNAME&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;WORDPRESS_APP_PASSWORD&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;アプリパスワードについては以下の記事を参照。&lt;/p&gt;&#10;&lt;div class="blog-card-wrapper"&gt;&#10; &lt;a href="https://ai.hack-le.com/wordpress-app-password/" class="blog-card"&gt;&#10; &lt;div class="blog-card-content"&gt;&#10; &lt;div class="blog-card-label"&gt;&#10; &lt;svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"&gt;&lt;/path&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"&gt;&lt;/path&gt;&lt;/svg&gt;&#10; &lt;span&gt;あわせて読みたい&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-title"&gt;WordPressでアプリパスワードを取得する操作手順&lt;/div&gt;&#10; &lt;div class="blog-card-url"&gt;/wordpress-app-password/&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;div class="blog-card-thumbnail"&gt;&#10; &lt;img src="https://ai.hack-le.com/images/uploads/2024/10/wordpress-app-password.webp" alt="WordPressでアプリパスワードを取得する操作手順" loading="lazy" /&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;/div&gt;&#10;&#10;</description></item><item><title>WordPressでChart.jsでチャート表示するモック</title><link>https://ai.hack-le.com/wp-chart/</link><pubDate>Tue, 07 Jan 2025 16:37:55 +0900</pubDate><guid>https://ai.hack-le.com/wp-chart/</guid><description>&lt;p&gt;以下に、外部APIからデータを取得し、WordPressに統合してチャートを表示する方法を詳しく説明します。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="手順"&gt;手順&#10;&lt;/h2&gt;&lt;h3 id="ステップ-1-chartjsのスクリプトを読み込む"&gt;ステップ 1: Chart.jsのスクリプトを読み込む&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;functions.php&lt;/code&gt; に以下を追加します：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;enqueue_chartjs_scripts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;wp_enqueue_script&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;chartjs&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https://cdn.jsdelivr.net/npm/chart.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;wp_enqueue_scripts&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;enqueue_chartjs_scripts&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h3 id="ステップ-2-カスタムrest-apiエンドポイントを作成"&gt;ステップ 2: カスタムREST APIエンドポイントを作成&#10;&lt;/h3&gt;&lt;p&gt;PHPでREST APIエンドポイントを作成します。これにより、チャート用のデータを提供できます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;register_chart_data_endpoint&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;register_rest_route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;custom/v1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/chart-data/(?P&amp;lt;id&amp;gt;\d+)&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;methods&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;callback&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;get_chart_data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;));&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;add_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;rest_api_init&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;register_chart_data_endpoint&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;get_chart_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$post_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// データ取得 (例: カスタムフィールドからJSONを取得)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$view_history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;get_post_meta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$post_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;view_history&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// サンプルデータ (実際にはカスタムフィールドや外部APIから取得)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nv"&gt;$view_history&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$view_history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;json_encode&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;2023-01-01&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;12000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;2023-01-02&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;13000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;2023-01-03&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;14000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;json_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$view_history&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h3 id="ステップ-3-記事内でグラフを表示"&gt;ステップ 3: 記事内でグラフを表示&#10;&lt;/h3&gt;&lt;p&gt;記事テンプレート（例: &lt;code&gt;single.php&lt;/code&gt;）やショートコードで、チャートを表示するHTMLとJavaScriptを追加します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;render_chart_shortcode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;shortcode_atts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;post_id&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;get_the_ID&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="c1"&gt;// 投稿IDを取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nv"&gt;$atts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;ob_start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; &amp;lt;canvas id=&amp;#34;lineChart&amp;#34; width=&amp;#34;400&amp;#34; height=&amp;#34;200&amp;#34;&amp;gt;&amp;lt;/canvas&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; &amp;lt;script&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; document.addEventListener(&amp;#39;DOMContentLoaded&amp;#39;, function () {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; fetch(&amp;#39;&amp;lt;?php echo esc_url(rest_url(&amp;#34;custom/v1/chart-data/&amp;#34; . $atts[&amp;#34;post_id&amp;#34;])); ?&amp;gt;&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; .then(response =&amp;gt; response.json())&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; .then(data =&amp;gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; const labels = Object.keys(data); // 日付&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; const values = Object.values(data); // 再生数&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; const ctx = document.getElementById(&amp;#39;lineChart&amp;#39;).getContext(&amp;#39;2d&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; const chartData = {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; labels: labels,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; datasets: [{&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; label: &amp;#39;動画再生数&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; data: values,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; borderColor: &amp;#39;rgba(75, 192, 192, 1)&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; borderWidth: 2,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; fill: false,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; }]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; };&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; new Chart(ctx, {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; type: &amp;#39;line&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; data: chartData,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; options: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; responsive: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; plugins: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; legend: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; display: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; position: &amp;#39;top&amp;#39;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; scales: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; x: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; title: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; display: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; text: &amp;#39;日付&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; y: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; title: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; display: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; text: &amp;#39;再生数&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; beginAtZero: true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; });&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; })&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; .catch(error =&amp;gt; console.error(&amp;#39;データ取得エラー:&amp;#39;, error));&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; });&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; &amp;lt;/script&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; &amp;lt;?php&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; return ob_get_clean();&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;add_shortcode(&amp;#39;render_chart&amp;#39;, &amp;#39;render_chart_shortcode&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="実際の利用"&gt;実際の利用&#10;&lt;/h2&gt;&lt;p&gt;記事や固定ページ内で以下のショートコードを利用：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[render_chart post_id=&amp;#34;123&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="完成した機能"&gt;完成した機能&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;記事内で時系列データを表示する折れ線グラフを実装。&lt;/li&gt;&#10;&lt;li&gt;REST APIでデータを動的に取得。&lt;/li&gt;&#10;&lt;li&gt;Chart.jsを利用してグラフをレンダリング。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>[PHP] WordPress REST APIでアイキャッチ画像を設定する</title><link>https://ai.hack-le.com/wordpress-rest-api-featured-image-php/</link><pubDate>Wed, 09 Oct 2024 22:20:35 +0900</pubDate><guid>https://ai.hack-le.com/wordpress-rest-api-featured-image-php/</guid><description>&lt;p&gt;以下は、WordPress REST API + PHPを使って投稿にアイキャッチ画像（サムネイル）を設定する関数のスニペットです。この技術記事では、APIを通じて画像をアップロードし、投稿にアイキャッチ画像を設定する方法を説明します。&lt;/p&gt;&#10;&lt;h2 id="wordpress-rest-apiでアイキャッチ画像を設定する手順"&gt;WordPress REST APIでアイキャッチ画像を設定する手順&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;APIトークンの取得&lt;/strong&gt; WordPress REST APIにアクセスするためには、認証が必要です。以下のように、アプリケーションパスワードを使用して認証トークンを生成します。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ベーシック認証のためのユーザー名とアプリケーションパスワード&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;your-username&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$application_password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;your-application-password&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ベーシック認証用ヘッダーの作成&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Authorization&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Basic &amp;#39;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;base64_encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$username&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;:&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$application_password&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;application/json&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;画像をアップロードする&lt;/strong&gt; 次に、アップロードしたい画像を&lt;code&gt;/wp-json/wp/v2/media&lt;/code&gt;エンドポイントにPOSTリクエストで送信します。以下は、PHPの&lt;code&gt;curl&lt;/code&gt;を使用してファイルをアップロードする例です。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$upload_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https://example.com/wp-json/wp/v2/media&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// WordPressサイトのURL&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$image_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/path/to/your/image.jpg&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ローカルの画像パス&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$image_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;file_get_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$image_path&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// ファイルアップロード用のcURLリクエスト&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$upload_url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_HTTPHEADER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;array_merge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;Content-Disposition: attachment; filename=&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$image_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#34;&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]));&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$image_data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// レスポンスをデコードし、画像IDを取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$media&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;json_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$media_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$media&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;投稿にアイキャッチ画像を設定する&lt;/strong&gt; 画像が正常にアップロードされたら、次にその画像を指定した投稿のアイキャッチ画像として設定します。&lt;code&gt;/wp-json/wp/v2/posts/{post_id}&lt;/code&gt;エンドポイントに&lt;code&gt;POST&lt;/code&gt;リクエストを送信し、&lt;code&gt;featured_media&lt;/code&gt;にアップロードされた画像のIDを指定します。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$post_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// アイキャッチ画像を設定する投稿のID&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$update_post_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https://example.com/wp-json/wp/v2/posts/&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$post_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$post_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;json_encode&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;featured_media&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$media_id&lt;/span&gt; &lt;span class="c1"&gt;// アップロードされた画像のIDを指定&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 投稿更新用のcURLリクエスト&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$update_post_url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_CUSTOMREQUEST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_HTTPHEADER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post_data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;curl_close&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// レスポンス確認&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$updated_post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;json_decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="実際の使用例"&gt;実際の使用例&#10;&lt;/h3&gt;&lt;p&gt;このスニペットは、PHPを使用してWordPressのREST APIを呼び出し、アイキャッチ画像を投稿に設定するものです。画像アップロード後に取得したメディアIDを、投稿の&lt;code&gt;featured_media&lt;/code&gt;フィールドに設定して、投稿のアイキャッチ画像として反映されます。&lt;/p&gt;&#10;&lt;p&gt;上記のスニペットは、以下のような状況で役立ちます：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;画像をプログラム的に投稿に設定する必要がある場合&lt;/li&gt;&#10;&lt;li&gt;アイキャッチ画像を定期的に変更するバッチ処理やスクリプトを作成する場合&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;このスクリプトは非常に柔軟で、特定のWordPressサイトで認証と画像アップロード、アイキャッチ画像設定を自動化するために活用できます。&lt;/p&gt;&#10;</description></item><item><title>JavaScriptでのスタイルプロパティの直接割り当て方法</title><link>https://ai.hack-le.com/javascript-element-style/</link><pubDate>Wed, 09 Oct 2024 19:15:49 +0900</pubDate><guid>https://ai.hack-le.com/javascript-element-style/</guid><description>&lt;p&gt;Web開発では、要素のスタイルをJavaScriptから動的に変更する必要が生じることがよくあります。JavaScriptを使って要素のスタイルを変更する最も一般的な方法は、DOM API の &lt;code&gt;style&lt;/code&gt; プロパティを利用することです。の記事では、JavaScriptでスタイルを直接割り当てる際のポイントについて解説します。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="elementstyle-とは"&gt;&lt;code&gt;element.style&lt;/code&gt; とは？&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;element.style&lt;/code&gt; は、HTML要素のインラインスタイルを設定・取得するためのプロパティです。CSSのプロパティをJavaScriptで変更する場合、&lt;code&gt;element.style&lt;/code&gt; に対して直接アクセスします。たとえば、&lt;code&gt;div&lt;/code&gt; 要素の背景色を赤にしたい場合、以下のように記述します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;div&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;backgroundColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;red&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="cssのプロパティ名との違い"&gt;CSSのプロパティ名との違い&#10;&lt;/h2&gt;&lt;p&gt;CSSプロパティ名とJavaScriptの &lt;code&gt;style&lt;/code&gt; プロパティで使うプロパティ名は少し異なります。CSSではハイフンで区切られるプロパティ名（例：&lt;code&gt;background-color&lt;/code&gt;）が、JavaScriptではキャメルケース（例：&lt;code&gt;backgroundColor&lt;/code&gt;）に変換されます。これは、JavaScriptのプロパティ名がキャメルケースを使う規則に従っているためです。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;例:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CSS: &lt;code&gt;background-color&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;JavaScript: &lt;code&gt;backgroundColor&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;div&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;backgroundColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;blue&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="スタイルの直接割り当てと安全性"&gt;スタイルの直接割り当てと安全性&#10;&lt;/h2&gt;&lt;p&gt;次のコードは、要素に複数のスタイルを一度に設定しようとしている例です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;div#container&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;text-align: center; background-color: lightgrey;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコードは一見正しそうに見えますが、&lt;code&gt;element.style&lt;/code&gt; に文字列を代入すると、既存のスタイルがすべて上書きされる可能性があります。また、このように複数のプロパティをまとめて設定するのは推奨されません。&lt;/p&gt;&#10;&lt;h3 id="推奨される方法"&gt;推奨される方法：&#10;&lt;/h3&gt;&lt;p&gt;スタイルプロパティごとに個別に設定することがベストプラクティスです。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;div#container&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textAlign&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;center&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;backgroundColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;lightgrey&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この方法なら、他のスタイルが上書きされることなく、新しいスタイルを追加できます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="数値プロパティの扱い"&gt;数値プロパティの扱い&#10;&lt;/h3&gt;&lt;p&gt;CSSプロパティには数値を持つものが多くあります。たとえば &lt;code&gt;width&lt;/code&gt; や &lt;code&gt;height&lt;/code&gt; はピクセル単位で指定することが多いですが、数値を直接指定すると正しく動作しません。単位を必ず付与する必要があります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;img&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;150px&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 正しい設定&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;単位を忘れると、ブラウザはデフォルトの単位を適用しないため、思ったような結果が得られません。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h3 id="複数のスタイルを設定する場合"&gt;複数のスタイルを設定する場合&#10;&lt;/h3&gt;&lt;p&gt;複数のスタイルを一度に設定したい場合、個別に設定する方法もありますが、&lt;code&gt;Object.assign()&lt;/code&gt; を使うと一度にまとめて設定できて便利です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;img&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;img&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;img&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;150px&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;borderRadius&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;50%&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;border&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1px solid black&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これにより、既存のスタイルを保持しながら新しいスタイルをまとめて追加できます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="classlist-を使ったスタイル変更"&gt;&lt;code&gt;classList&lt;/code&gt; を使ったスタイル変更&#10;&lt;/h2&gt;&lt;p&gt;大量のスタイル変更が必要な場合や、条件に応じてスタイルを切り替えたい場合、&lt;code&gt;element.style&lt;/code&gt; ではなく &lt;code&gt;classList&lt;/code&gt; を使用することをおすすめします。&lt;code&gt;classList&lt;/code&gt; を使うと、あらかじめ定義されたクラスを追加・削除することで、より効率的にスタイルを管理できます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;div#container&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;centered-container&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// CSS ファイル&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// .centered-container {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// text-align: center;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// background-color: lightgrey;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="結論"&gt;結論&#10;&lt;/h2&gt;&lt;p&gt;JavaScriptを使ってスタイルを直接変更する際には、以下の点に注意しましょう。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CSSプロパティ名はキャメルケースに変換する。&lt;/li&gt;&#10;&lt;li&gt;スタイルプロパティごとに個別に設定し、&lt;code&gt;element.style&lt;/code&gt; 全体に文字列を代入しない。&lt;/li&gt;&#10;&lt;li&gt;数値プロパティには必ず単位を付ける。&lt;/li&gt;&#10;&lt;li&gt;複数のスタイルを設定する際は &lt;code&gt;Object.assign()&lt;/code&gt; を利用すると効率的。&lt;/li&gt;&#10;&lt;li&gt;多くのスタイル変更が必要な場合は &lt;code&gt;classList&lt;/code&gt; を活用して、CSSクラスでスタイルを管理する。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これらのポイントを守れば、スタイルの変更が正しく適用され、コードも読みやすく保てるでしょう。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="参考資料"&gt;参考資料&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://developer.mozilla.org/ja/docs/Web/API/HTMLElement/style" target="_blank" rel="noopener"&#10; &gt;MDN Web Docs: HTMLElement.style&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>JavaScriptで取得した要素の属性 attributes を更新する方法</title><link>https://ai.hack-le.com/javascript-attributes/</link><pubDate>Wed, 09 Oct 2024 18:21:22 +0900</pubDate><guid>https://ai.hack-le.com/javascript-attributes/</guid><description>&lt;p&gt;JavaScriptでは、DOM要素の属性（&lt;code&gt;attributes&lt;/code&gt;）を簡単に取得・更新することができます。&lt;code&gt;attributes&lt;/code&gt; は、要素の &lt;code&gt;id&lt;/code&gt;、&lt;code&gt;class&lt;/code&gt;、&lt;code&gt;src&lt;/code&gt; などの様々なプロパティを指し、これらを動的に変更することで、ページの挙動や外観をリアルタイムに操作できます。この記事では、属性の取得と更新方法について解説します。&lt;/p&gt;&#10;&lt;h2 id="属性の取得方法"&gt;属性の取得方法&#10;&lt;/h2&gt;&lt;p&gt;要素の属性を取得するには、JavaScriptの &lt;code&gt;getAttribute()&lt;/code&gt; メソッドを使用します。このメソッドは、指定した属性の値を取得します。&lt;/p&gt;&#10;&lt;h3 id="基本的な構文"&gt;基本的な構文&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;attributeName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="例属性を取得する"&gt;例：属性を取得する&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;exampleImage&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;image.jpg&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;サンプル画像&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;imageElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;exampleImage&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;srcValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;imageElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;src&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;srcValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;image.jpg&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このように、&lt;code&gt;getAttribute()&lt;/code&gt; を使うことで、指定した要素の属性の値を取得できます。&lt;/p&gt;&#10;&lt;h2 id="属性の更新方法"&gt;属性の更新方法&#10;&lt;/h2&gt;&lt;p&gt;要素の属性を更新するには、&lt;code&gt;setAttribute()&lt;/code&gt; メソッドを使用します。これにより、既存の属性を変更したり、新しい属性を追加することができます。&lt;/p&gt;&#10;&lt;h3 id="基本的な構文-1"&gt;基本的な構文&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;attributeName&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="例属性を更新する"&gt;例：属性を更新する&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;exampleImage&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;image.jpg&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;サンプル画像&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;imageElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;exampleImage&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 画像のsrcを変更&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;imageElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;src&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;newImage.png&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imageElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;src&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;newImage.png&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上記の例では、画像の &lt;code&gt;src&lt;/code&gt; 属性を新しい画像ファイルに変更しています。&lt;/p&gt;&#10;&lt;h2 id="属性の削除"&gt;属性の削除&#10;&lt;/h2&gt;&lt;p&gt;不要になった属性を削除したい場合は、&lt;code&gt;removeAttribute()&lt;/code&gt; メソッドを使います。これにより、指定した属性を完全に削除することができます。&lt;/p&gt;&#10;&lt;h3 id="基本的な構文-2"&gt;基本的な構文&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;attributeName&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="例属性を削除する"&gt;例：属性を削除する&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;exampleImage&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;image.jpg&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;サンプル画像&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;imageElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;exampleImage&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// alt属性を削除&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;imageElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;alt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;imageElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;alt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// null&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;removeAttribute()&lt;/code&gt; を使用することで、指定した属性が完全に削除され、&lt;code&gt;getAttribute()&lt;/code&gt; で取得しようとしても &lt;code&gt;null&lt;/code&gt; が返されます。&lt;/p&gt;&#10;&lt;h2 id="クラス属性の操作"&gt;クラス属性の操作&#10;&lt;/h2&gt;&lt;p&gt;特に &lt;code&gt;class&lt;/code&gt; 属性は頻繁に操作されるため、&lt;code&gt;classList&lt;/code&gt; プロパティを使用してより簡単に操作できます。これにより、クラスの追加、削除、切り替え（toggle）などが可能です。&lt;/p&gt;&#10;&lt;h3 id="クラスを追加する"&gt;クラスを追加する&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;example&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;new-class&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="クラスを削除する"&gt;クラスを削除する&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;old-class&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="クラスを切り替えるtoggle"&gt;クラスを切り替える（toggle）&#10;&lt;/h3&gt;&lt;p&gt;クラスの有無によって、追加または削除を自動的に切り替えることができます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;classList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toggle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;active&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="データ属性の操作"&gt;データ属性の操作&#10;&lt;/h2&gt;&lt;p&gt;HTML5で導入された &lt;code&gt;data-*&lt;/code&gt; 属性は、カスタムデータを要素に保持させるために使用します。これも、&lt;code&gt;getAttribute()&lt;/code&gt; や &lt;code&gt;setAttribute()&lt;/code&gt; で操作できますが、&lt;code&gt;dataset&lt;/code&gt; プロパティを使うことでより簡単に扱えます。&lt;/p&gt;&#10;&lt;h3 id="例データ属性の取得と設定"&gt;例：データ属性の取得と設定&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-user-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;123&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;admin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;ユーザー情報&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;example&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// データ属性を取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;123&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// データ属性を更新&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;user&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="応用例フォームの入力フィールドを動的に操作"&gt;応用例：フォームの入力フィールドを動的に操作&#10;&lt;/h2&gt;&lt;p&gt;以下の例では、フォーム内の入力フィールドの &lt;code&gt;required&lt;/code&gt; 属性を動的に追加・削除するシンプルな例を紹介します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;for&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Email:&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;email&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;onclick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;toggleRequired()&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;必須切り替え&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;toggleRequired&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;emailInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;emailInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;required&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;emailInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;removeAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;required&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;emailInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;required&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;required&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ボタンをクリックすることで、&lt;code&gt;required&lt;/code&gt; 属性が追加されたり、削除されたりします。&lt;code&gt;hasAttribute()&lt;/code&gt; を使うことで、属性が既に存在するかどうかを確認し、条件に応じて処理を切り替えています。&lt;/p&gt;&#10;&lt;h2 id="結論"&gt;結論&#10;&lt;/h2&gt;&lt;p&gt;JavaScriptを使って、HTML要素の属性を取得・更新・削除する方法を理解することで、動的なWebページの操作が可能になります。&lt;code&gt;setAttribute()&lt;/code&gt; や &lt;code&gt;getAttribute()&lt;/code&gt; を使用した基本的な操作に加え、&lt;code&gt;classList&lt;/code&gt; や &lt;code&gt;dataset&lt;/code&gt; を活用することで、効率的にDOMを操作できるようになります。これらのメソッドを適切に使い分けることで、より柔軟でインタラクティブなユーザー体験を実現できるでしょう。&lt;/p&gt;&#10;</description></item><item><title>JavaScriptの innerText とその使い方</title><link>https://ai.hack-le.com/javascript%E3%81%AE-innertext-%E3%81%A8%E3%81%9D%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/</link><pubDate>Wed, 09 Oct 2024 18:08:16 +0900</pubDate><guid>https://ai.hack-le.com/javascript%E3%81%AE-innertext-%E3%81%A8%E3%81%9D%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/</guid><description>&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; は、JavaScriptでDOM要素のテキストを操作する際に使われるプロパティです。&lt;code&gt;innerHTML&lt;/code&gt; とよく似ていますが、テキストのみを扱いたい場合には &lt;code&gt;innerText&lt;/code&gt; を使用するのが適しています。この記事では、&lt;code&gt;innerText&lt;/code&gt; の使い方と注意点を説明します。&lt;/p&gt;&#10;&lt;h2 id="innertext-とは"&gt;&lt;code&gt;innerText&lt;/code&gt; とは？&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; は、HTML要素の&lt;strong&gt;表示されているテキスト&lt;/strong&gt;を取得したり、設定するためのプロパティです。&lt;code&gt;innerText&lt;/code&gt; を使うと、タグやHTML構造を無視して、純粋にテキストだけを扱うことができます。&lt;/p&gt;&#10;&lt;h3 id="基本的な使い方"&gt;基本的な使い方&#10;&lt;/h3&gt;&lt;h4 id="テキストの取得"&gt;テキストの取得&#10;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; プロパティを使用すると、指定した要素内に含まれているテキストを取得することができます。&lt;/p&gt;&#10;&lt;h4 id="例要素内のテキストを取得"&gt;例：要素内のテキストを取得&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;こんにちは、世界！&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;let element = document.getElementById(&amp;#39;example&amp;#39;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;console.log(element.innerText); // &amp;#34;こんにちは、世界！&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="テキストの設定"&gt;テキストの設定&#10;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; を使って、要素内のテキストを変更することもできます。&lt;/p&gt;&#10;&lt;h4 id="例要素内のテキストを変更"&gt;例：要素内のテキストを変更&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;こんにちは、世界！&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;example&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;新しいテキストです！&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;新しいテキストです！&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="innertext-と-innerhtml-の違い"&gt;&lt;code&gt;innerText&lt;/code&gt; と &lt;code&gt;innerHTML&lt;/code&gt; の違い&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; は要素内のテキストのみを扱いますが、&lt;code&gt;innerHTML&lt;/code&gt; は要素内のHTML全体（タグを含む）を操作します。例えば、HTML構造を維持したい場合やタグを扱う必要がある場合には、&lt;code&gt;innerHTML&lt;/code&gt; を使用します。&lt;/p&gt;&#10;&lt;h4 id="例innertext-と-innerhtml-の違い"&gt;例：&lt;code&gt;innerText&lt;/code&gt; と &lt;code&gt;innerHTML&lt;/code&gt; の違い&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;strong&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;太字のテキスト&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;strong&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;example&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// innerTextはテキストのみ取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;太字のテキスト&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// innerHTMLはHTML構造も含めて取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;&amp;lt;strong&amp;gt;太字のテキスト&amp;lt;/strong&amp;gt;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="innertext-の注意点"&gt;&lt;code&gt;innerText&lt;/code&gt; の注意点&#10;&lt;/h3&gt;&lt;h4 id="見えない要素の扱い"&gt;見えない要素の扱い&#10;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; は、CSSで &lt;code&gt;display: none;&lt;/code&gt; や &lt;code&gt;visibility: hidden;&lt;/code&gt; が設定されている要素のテキストを無視します。つまり、表示されているテキストだけが取得対象となります。&lt;/p&gt;&#10;&lt;h4 id="改行や空白の扱い"&gt;改行や空白の扱い&#10;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; は、要素内のテキストを取得する際に、ブラウザに表示されている通りに改行や空白を維持します。一方、&lt;code&gt;innerHTML&lt;/code&gt; ではHTML内の改行や空白がそのまま扱われるため、異なる結果になることがあります。&lt;/p&gt;&#10;&lt;h4 id="例改行の扱い"&gt;例：改行の扱い&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 1行目&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;br&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 2行目&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;example&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;1行目\n2行目&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;1行目&amp;lt;br&amp;gt;2行目&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="応用例"&gt;応用例&#10;&lt;/h3&gt;&lt;h4 id="フォーム入力内容の確認"&gt;フォーム入力内容の確認&#10;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; を使うと、ユーザーが入力したテキストを画面に表示する場合などに便利です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;inputText&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;テキストを入力してください&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onclick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;showText()&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;表示&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;displayText&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;showText&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;inputText&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;displayText&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;display&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上記の例では、ボタンをクリックすると入力されたテキストが &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt; 要素内に表示されます。&lt;/p&gt;&#10;&lt;h2 id="結論"&gt;結論&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;innerText&lt;/code&gt; は、HTML要素内のテキストを簡単に取得・変更できる便利なプロパティです。テキストのみを操作したい場合に使い、HTML構造を扱う際には &lt;code&gt;innerHTML&lt;/code&gt; を選ぶと良いでしょう。表示されているテキストだけを取り扱う場合や、改行や空白をそのまま保持したい場合に特に有効です。&lt;/p&gt;&#10;</description></item><item><title>JavaScriptの querySelector とその使い方</title><link>https://ai.hack-le.com/javascript-queryselector/</link><pubDate>Wed, 09 Oct 2024 17:38:17 +0900</pubDate><guid>https://ai.hack-le.com/javascript-queryselector/</guid><description>&lt;p&gt;JavaScriptの &lt;code&gt;querySelector&lt;/code&gt; は、CSSセレクタを使ってHTML要素を取得できる非常に便利なメソッドです。DOM操作の際に頻繁に使われるため、しっかりと理解しておくと、開発効率が向上します。この記事では、基本的な使い方から応用までをまとめて紹介します。&lt;/p&gt;&#10;&lt;h2 id="queryselector-の基本"&gt;&lt;code&gt;querySelector&lt;/code&gt; の基本&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;querySelector&lt;/code&gt; は、HTMLドキュメント内で指定したCSSセレクタに一致する最初の要素を返します。これは、CSSセレクタを使ってDOMの特定の要素を簡単に取得できる便利なメソッドです。&lt;/p&gt;&#10;&lt;h3 id="基本的な構文"&gt;基本的な構文：&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="引数-selector"&gt;引数 &lt;code&gt;selector&lt;/code&gt;&#10;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;querySelector&lt;/code&gt; の引数として指定する &lt;code&gt;selector&lt;/code&gt; は、CSSセレクタと同じ形式で記述します。例えば、クラス名、ID、タグ名などを指定できます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;クラスを選択する場合：&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.classname&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;IDを選択する場合：&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#idname&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;タグ名を選択する場合：&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="例特定の要素を取得する"&gt;例：特定の要素を取得する&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="kr"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;最初の段落&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;/p&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="kr"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="nx"&gt;番目の段落&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;/p&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;/div&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// IDが &amp;#39;container&amp;#39; の要素を取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#container&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// クラスが &amp;#39;text&amp;#39; の最初の段落要素を取得&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;firstParagraph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.text&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;firstParagraph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;最初の段落&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このように、 &lt;code&gt;querySelector&lt;/code&gt; はCSSのセレクタと同じ形式で指定するため、CSSの知識があれば簡単に理解できます。&lt;/p&gt;&#10;&lt;h2 id="応用複数のセレクタを使用する"&gt;応用：複数のセレクタを使用する&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;querySelector&lt;/code&gt; は、複数のCSSセレクタをカンマで区切って指定することもできます。この場合、いずれかのセレクタに一致する最初の要素が返されます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;p.text, .highlight, #unique&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上記の例では、最初に一致した段落、ハイライトされた要素、またはIDが &lt;code&gt;unique&lt;/code&gt; の要素が取得されます。&lt;/p&gt;&#10;&lt;h2 id="要素が存在しない場合の処理"&gt;要素が存在しない場合の処理&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;querySelector&lt;/code&gt; が一致する要素を見つけられない場合、&lt;code&gt;null&lt;/code&gt; が返されます。そのため、要素が存在するかどうかを確認するために、&lt;code&gt;null&lt;/code&gt; チェックを行う必要があります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.not-exist&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;要素が存在します。&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;要素が存在しません。&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="queryselectorall-との違い"&gt;&lt;code&gt;querySelectorAll&lt;/code&gt; との違い&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;querySelector&lt;/code&gt; は最初に一致した1つの要素のみを返しますが、複数の要素を取得したい場合は &lt;code&gt;querySelectorAll&lt;/code&gt; を使います。&lt;code&gt;querySelectorAll&lt;/code&gt; は、指定したセレクタに一致するすべての要素を返し、返り値は &lt;code&gt;NodeList&lt;/code&gt; という配列のようなオブジェクトです。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;allParagraphs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;p.text&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;allParagraphs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paragraph&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paragraph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="結論"&gt;結論&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;querySelector&lt;/code&gt; は、シンプルでパワフルなDOM要素選択メソッドです。CSSセレクタと同じ構文を使うため、CSSの知識があればスムーズに利用できます。さらに、複数の要素を取得したい場合は、 &lt;code&gt;querySelectorAll&lt;/code&gt; を活用することで、効率的にDOM操作を行うことができます。&lt;/p&gt;&#10;</description></item><item><title>CSSのremとemの違いと使い分けのポイント</title><link>https://ai.hack-le.com/css-rem-em/</link><pubDate>Sun, 15 Sep 2024 15:49:32 +0900</pubDate><guid>https://ai.hack-le.com/css-rem-em/</guid><description>&lt;p&gt;CSS のレイアウト設計で使われる相対的な単位として、&lt;code&gt;rem&lt;/code&gt; と &lt;code&gt;em&lt;/code&gt; があります。これらは要素のフォントサイズや幅、高さなどを相対的に指定するための便利なツールですが、どちらを使うべきか迷うことがよくあります。本記事では、&lt;code&gt;rem&lt;/code&gt; と &lt;code&gt;em&lt;/code&gt; の違いと、それぞれの使い分けについて解説します。&lt;/p&gt;&#10;&lt;h2 id="emとは"&gt;&lt;code&gt;em&lt;/code&gt;とは？&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;em&lt;/code&gt; は、&lt;strong&gt;親要素のフォントサイズ&lt;/strong&gt;を基準とした相対単位です。親要素のフォントサイズが変更されると、それに従って &lt;code&gt;em&lt;/code&gt; で指定された要素のサイズも変わります。&lt;/p&gt;&#10;&lt;h3 id="例"&gt;例:&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.parent {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 16px;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.child {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 1.5em; /* 親の 16px × 1.5 = 24px */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この場合、&lt;code&gt;.child&lt;/code&gt; のフォントサイズは親要素のフォントサイズが基準となるため、24px になります。&lt;code&gt;em&lt;/code&gt; の特徴は、ネストされた要素が親要素の影響を受ける点にあります。&lt;/p&gt;&#10;&lt;h2 id="remとは"&gt;&lt;code&gt;rem&lt;/code&gt;とは？&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;rem&lt;/code&gt; は、&lt;strong&gt;ルート要素（&lt;code&gt;html&lt;/code&gt;）のフォントサイズ&lt;/strong&gt;を基準とした相対単位です。通常、ブラウザのデフォルトのフォントサイズは &lt;code&gt;16px&lt;/code&gt; なので、特に指定がなければ &lt;code&gt;1rem&lt;/code&gt; は &lt;code&gt;16px&lt;/code&gt; に相当します。&lt;/p&gt;&#10;&lt;h3 id="例-1"&gt;例:&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;html {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 16px;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.child {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 1.5rem; /* 16px × 1.5 = 24px */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;rem&lt;/code&gt; の大きな利点は、親要素に依存せず、一貫したサイズを保てる点です。これにより、ページ全体のデザインやフォントサイズを統一したい場合に役立ちます。&lt;/p&gt;&#10;&lt;h2 id="em-と-rem-の違い"&gt;&lt;code&gt;em&lt;/code&gt; と &lt;code&gt;rem&lt;/code&gt; の違い&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;em&lt;/code&gt;&lt;/strong&gt; : 親要素のフォントサイズを基準にしているため、親要素が異なればサイズも変わります。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;rem&lt;/code&gt;&lt;/strong&gt; : 常にルート要素（&lt;code&gt;html&lt;/code&gt;）のフォントサイズを基準にしているため、ページ全体で一貫したサイズが得られます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="違いの例"&gt;違いの例&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;html {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 16px;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.parent {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 20px;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.child-em {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 2em; /* 20px × 2 = 40px */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.child-rem {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 2rem; /* 16px × 2 = 32px */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この例では、&lt;code&gt;child-em&lt;/code&gt; は &lt;code&gt;40px&lt;/code&gt; になり、&lt;code&gt;child-rem&lt;/code&gt; は &lt;code&gt;32px&lt;/code&gt; になります。&lt;code&gt;em&lt;/code&gt; は親要素の影響を受けるため、サイズが異なります。&lt;/p&gt;&#10;&lt;h2 id="使い分けのポイント"&gt;使い分けのポイント&#10;&lt;/h2&gt;&lt;h3 id="1-一貫したサイズを保ちたい場合は-rem-を使う"&gt;1. 一貫したサイズを保ちたい場合は &lt;code&gt;rem&lt;/code&gt; を使う&#10;&lt;/h3&gt;&lt;p&gt;レスポンシブデザインや、サイト全体で統一されたフォントサイズを維持したい場合は、&lt;code&gt;rem&lt;/code&gt; を使うのが推奨されます。ルート要素のフォントサイズを基準にしているため、ページ全体のバランスが崩れにくいです。&lt;/p&gt;&#10;&lt;h3 id="2-コンテキストに応じて柔軟にサイズを変えたい場合は-em-を使う"&gt;2. コンテキストに応じて柔軟にサイズを変えたい場合は &lt;code&gt;em&lt;/code&gt; を使う&#10;&lt;/h3&gt;&lt;p&gt;特定の親要素内で相対的にサイズを変えたい場合は、&lt;code&gt;em&lt;/code&gt; が便利です。例えば、カードコンポーネントやボタンのサイズが親要素に応じて拡大・縮小されるようなデザインを実現するのに役立ちます。&lt;/p&gt;&#10;&lt;h3 id="3-入れ子が深くなるときは-em-の注意が必要"&gt;3. 入れ子が深くなるときは &lt;code&gt;em&lt;/code&gt; の注意が必要&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;em&lt;/code&gt; は親要素のサイズに依存するため、要素が入れ子になりすぎると、意図せずサイズが大きくなったり小さくなったりすることがあります。そのため、入れ子が深いデザインには &lt;code&gt;rem&lt;/code&gt; の方が扱いやすいことが多いです。&lt;/p&gt;&#10;&lt;h2 id="結論推奨されるのはどっち"&gt;結論：推奨されるのはどっち？&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;一貫性を重視する場合は &lt;code&gt;rem&lt;/code&gt; を推奨&lt;/strong&gt; します。特にフォントサイズや幅、高さを全体的に管理したい場合には、&lt;code&gt;rem&lt;/code&gt; が適しており、予期しないサイズの変更を避けられます。一方で、特定のコンポーネントごとに柔軟にサイズを変更したい場合には &lt;code&gt;em&lt;/code&gt; を使うのが良いでしょう。&lt;/p&gt;&#10;</description></item><item><title>HTML 要素に対して奇数回目と偶数回目で異なるスタイルを適用する方法</title><link>https://ai.hack-le.com/css-nth-child/</link><pubDate>Fri, 13 Sep 2024 17:08:43 +0900</pubDate><guid>https://ai.hack-le.com/css-nth-child/</guid><description>&lt;p&gt;HTML では、同じクラスを持つ複数の要素に対して、それぞれの要素の表示順に応じたスタイルを適用したい場合があります。たとえば、奇数番目の要素と偶数番目の要素に異なるスタイルを適用する場合、CSS の疑似クラスを使うことで簡単に実現できます。本記事では、その具体的な方法を紹介します。&lt;/p&gt;&#10;&lt;h2 id="疑似クラス-nth-child-の基本"&gt;疑似クラス &lt;code&gt;:nth-child()&lt;/code&gt; の基本&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;nth-child()&lt;/code&gt; は、要素の表示順に応じてスタイルを適用するための強力な疑似クラスです。&lt;code&gt;nth-child()&lt;/code&gt; の引数には数字やキーワードを指定でき、要素の順序に基づいて異なるスタイルを簡単に適用することができます。&lt;/p&gt;&#10;&lt;h3 id="nth-childodd-と-nth-childeven"&gt;&lt;code&gt;nth-child(odd)&lt;/code&gt; と &lt;code&gt;nth-child(even)&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;最も基本的な使用方法として、奇数番目の要素と偶数番目の要素に対してスタイルを適用する方法があります。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;nth-child(odd)&lt;/code&gt; は奇数番目の要素にスタイルを適用します。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;nth-child(even)&lt;/code&gt; は偶数番目の要素にスタイルを適用します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;これにより、例えばリストや段落などの繰り返し要素に、交互に異なる背景色をつけることができます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="実装例"&gt;実装例&#10;&lt;/h2&gt;&lt;p&gt;以下は、複数の &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; 要素に対して、奇数回目と偶数回目の要素に異なる背景色を適用する例です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ja&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;viewport&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;奇数と偶数のスタイル適用&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 奇数番目の要素に適用 */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;odd&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;lightblue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 偶数番目の要素に適用 */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;example&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nd"&gt;nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;even&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;lightgreen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* 各要素のサイズとマージンを指定 */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;example&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;1つ目の要素&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;2つ目の要素&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;3つ目の要素&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;4つ目の要素&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;5つ目の要素&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;example&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;6つ目の要素&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;解説&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;.example:nth-child(odd)&lt;/code&gt;：奇数番目の要素に &lt;code&gt;lightblue&lt;/code&gt; の背景色を適用しています。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;.example:nth-child(even)&lt;/code&gt;：偶数番目の要素に &lt;code&gt;lightgreen&lt;/code&gt; の背景色を適用しています。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;nth-child()&lt;/code&gt; は親要素の中での順序に基づくため、同じクラスを持つ要素であれば、順番通りにスタイルが適用されます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="より柔軟な-nth-child-の使い方"&gt;より柔軟な &lt;code&gt;nth-child()&lt;/code&gt; の使い方&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;nth-child()&lt;/code&gt; の引数は、奇数や偶数だけでなく、特定のパターンにも対応しています。たとえば、「3番目ごと」や「2つおき」など、柔軟に指定することができます。&lt;/p&gt;&#10;&lt;h3 id="nth-childn-の使用"&gt;&lt;code&gt;nth-child(n)&lt;/code&gt; の使用&#10;&lt;/h3&gt;&lt;p&gt;以下は、3つおきにスタイルを適用する例です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.example:nth-child(3n) {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; background-color: pink;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このように、&lt;code&gt;3n&lt;/code&gt; を指定すると、3の倍数の順番の要素にスタイルを適用できます。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="疑似クラスの注意点"&gt;疑似クラスの注意点&#10;&lt;/h2&gt;&lt;h3 id="親要素との関係"&gt;親要素との関係&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;nth-child()&lt;/code&gt; は、要素の&lt;strong&gt;親要素&lt;/strong&gt;内での順番に基づいてスタイルを適用します。そのため、親要素が異なる場合や、他の兄弟要素がある場合は意図しない結果になることがあります。たとえば、次のように他のクラスの要素が間に入ると、その影響を受けます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;div class=&amp;#34;container&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;div class=&amp;#34;example&amp;#34;&amp;gt;1つ目&amp;lt;/div&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;div&amp;gt;他の要素&amp;lt;/div&amp;gt; &amp;lt;!-- この要素が順序に影響 --&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;div class=&amp;#34;example&amp;#34;&amp;gt;2つ目&amp;lt;/div&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/div&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この場合、&lt;code&gt;2つ目&lt;/code&gt; の要素は &lt;code&gt;.example:nth-child(even)&lt;/code&gt; のスタイルが適用されることはなく、&lt;code&gt;odd&lt;/code&gt; 扱いになります。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;&lt;code&gt;nth-child()&lt;/code&gt; を使うことで、HTML の要素に対して奇数番目・偶数番目に異なるスタイルを適用することができます。特にリストや複数の要素が繰り返し表示される場面で、交互に背景色を変えるなどのスタイリングに非常に便利です。また、&lt;code&gt;nth-child()&lt;/code&gt; の柔軟な指定方法を活用すれば、さらに複雑なパターンにも対応できるため、Web デザインをより洗練されたものにすることができます。&lt;/p&gt;&#10;</description></item><item><title>CSSの基礎: フレックスボックスでのレイアウト</title><link>https://ai.hack-le.com/css-flex/</link><pubDate>Fri, 29 Mar 2024 23:48:00 +0900</pubDate><guid>https://ai.hack-le.com/css-flex/</guid><description>&lt;p&gt;自分がCSS勉強するためにChatGPTにアウトライン作らせて書かせたものの一部です。&lt;/p&gt;&#10;&lt;h2 id="フレックスボックスでのレイアウトの概要"&gt;フレックスボックスでのレイアウトの概要&#10;&lt;/h2&gt;&lt;p&gt;フレックスボックス（Flexible Box）レイアウトは、CSS3で導入された強力なレイアウトモデルであり、コンテナ内のアイテム間のスペース分配と強力なアライメント機能を提供します。フレックスボックスを使用することで、さまざまな画面サイズや表示デバイスに対応するレスポンシブなデザインを簡単に実現できます。このセクションでは、フレックスボックスの基本的な使用方法の概要を説明します。&lt;/p&gt;&#10;&lt;h3 id="フレックスコンテナの設定"&gt;フレックスコンテナの設定&#10;&lt;/h3&gt;&lt;p&gt;フレックスボックスレイアウトを使用するには、まずフレックスコンテナを定義します。これは、フレックスアイテム（子要素）を含む親要素です。フレックスコンテナにするためには、その要素の&lt;code&gt;display&lt;/code&gt;プロパティを&lt;code&gt;flex&lt;/code&gt;に設定します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="主軸と交差軸"&gt;主軸と交差軸&#10;&lt;/h3&gt;&lt;p&gt;フレックスボックスでは、主軸（main axis）と交差軸（cross axis）という二つの軸を考慮します。デフォルトでは、主軸は水平（左から右）、交差軸は垂直（上から下）です。&lt;code&gt;flex-direction&lt;/code&gt;プロパティを使用して、主軸の方向を変更することができます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;row&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* row | row-reverse | column | column-reverse */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="フレックスアイテムの配置"&gt;フレックスアイテムの配置&#10;&lt;/h3&gt;&lt;p&gt;フレックスコンテナ内のアイテム（子要素）は、&lt;code&gt;justify-content&lt;/code&gt;、&lt;code&gt;align-items&lt;/code&gt;、&lt;code&gt;align-self&lt;/code&gt;などのプロパティを使って配置を調整できます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;justify-content&lt;/code&gt;&lt;/strong&gt; : 主軸に沿ったアイテムの配置を制御します（例: &lt;code&gt;flex-start&lt;/code&gt;、&lt;code&gt;center&lt;/code&gt;、&lt;code&gt;space-between&lt;/code&gt;）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;align-items&lt;/code&gt;&lt;/strong&gt; : 交差軸に沿ったアイテムの配置を制御します（例: &lt;code&gt;flex-start&lt;/code&gt;、&lt;code&gt;center&lt;/code&gt;、&lt;code&gt;baseline&lt;/code&gt;）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;align-self&lt;/code&gt;&lt;/strong&gt; : 個別のアイテムに対して交差軸の位置を制御します（&lt;code&gt;auto&lt;/code&gt;、&lt;code&gt;flex-start&lt;/code&gt;、&lt;code&gt;center&lt;/code&gt;など）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="フレックスアイテムの柔軟性"&gt;フレックスアイテムの柔軟性&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;flex&lt;/code&gt;プロパティは、フレックスアイテムがフレックスコンテナ内でどのように伸縮するかを定義します。これにより、アイテムのサイズをフレキシブルに調整できます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* アイテムがコンテナの利用可能なスペースを等しく分割して占める */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="フレックスボックスのレイアウト例"&gt;フレックスボックスのレイアウト例&#10;&lt;/h3&gt;&lt;p&gt;以下は、フレックスボックスを使用したナビゲーションバーの簡単な例です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;flex-container&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;flex-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;ホーム&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;flex-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;ニュース&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;flex-item&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;お問い合わせ&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;space-around&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この例では、フレックスアイテムがコンテナの利用可能なスペースを均等に分割し、&lt;code&gt;justify-content&lt;/code&gt;プロパティでアイテム間のスペースを均等に配置し、&lt;code&gt;align-items&lt;/code&gt;で垂直方向の中央揃えを行っています。&lt;/p&gt;&#10;&lt;p&gt;次のセクションより、各見出しの詳細について解説します。&lt;/p&gt;&#10;&lt;h2 id="主軸と交差軸-1"&gt;主軸と交差軸&#10;&lt;/h2&gt;&lt;p&gt;フレックスボックスレイアウトの理解において、主軸（Main Axis）と交差軸（Cross Axis）の概念は中心的な役割を果たします。これらの軸は、フレックスコンテナ内でフレックスアイテムがどのように配置されるか、そしてどのように伸縮するかを決定する基礎となります。&lt;/p&gt;&#10;&lt;h3 id="主軸main-axis"&gt;主軸（Main Axis）&#10;&lt;/h3&gt;&lt;p&gt;主軸は、フレックスアイテムが配置されるメインの方向を指します。デフォルトでは、主軸は水平方向（左から右）ですが、フレックスコンテナの&lt;code&gt;flex-direction&lt;/code&gt;プロパティによって、これを変更することができます。&lt;code&gt;flex-direction&lt;/code&gt;の値には以下のものがあります：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;row&lt;/code&gt;（デフォルト）: 主軸が水平方向で、アイテムがテキストの方向に沿って（通常は左から右へ）配置されます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;row-reverse&lt;/code&gt;: 主軸が水平方向で、アイテムがテキストの逆方向に沿って（右から左へ）配置されます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;column&lt;/code&gt;: 主軸が垂直方向で、アイテムが上から下へ配置されます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;column-reverse&lt;/code&gt;: 主軸が垂直方向で、アイテムが下から上へ配置されます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;主軸に沿ったアイテムの配置は、&lt;code&gt;justify-content&lt;/code&gt;プロパティを使用して細かく調整することが可能です。&lt;/p&gt;&#10;&lt;h3 id="交差軸cross-axis"&gt;交差軸（Cross Axis）&#10;&lt;/h3&gt;&lt;p&gt;交差軸は、主軸に直交する方向を指します。例えば、もし主軸が水平（左から右）であれば、交差軸は垂直（上から下）になります。交差軸は、主軸に対するアイテムの配置やサイズ調整に影響を与えます。&lt;/p&gt;&#10;&lt;p&gt;交差軸に沿ったアイテムの配置やサイズは、&lt;code&gt;align-items&lt;/code&gt;（コンテナ内のすべてのアイテムに適用）、&lt;code&gt;align-self&lt;/code&gt;（個々のアイテムに適用）、そして&lt;code&gt;align-content&lt;/code&gt;（複数行のアイテムがある場合の行間のスペース配分）プロパティを通じて制御されます。&lt;/p&gt;&#10;&lt;h3 id="例flex-directionによる主軸と交差軸の変更"&gt;例：&lt;code&gt;flex-direction&lt;/code&gt;による主軸と交差軸の変更&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;space-around&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この例では、&lt;code&gt;flex-direction: column;&lt;/code&gt;により、主軸が垂直方向に設定されています。これにより、フレックスアイテムは上から下に配置され、交差軸は水平方向になります。&lt;code&gt;align-items: center;&lt;/code&gt;は交差軸（この場合は水平）に沿ってアイテムを中央に配置し、&lt;code&gt;justify-content: space-around;&lt;/code&gt;は主軸（この場合は垂直）に沿ってアイテム間に均等なスペースを配分します。&lt;/p&gt;&#10;&lt;p&gt;主軸と交差軸の概念を理解することは、フレックスボックスを使ったレイアウト設計の基礎となります。これにより、レスポンシブで柔軟なWebデザインを実現することが可能になります。&lt;/p&gt;&#10;&lt;h2 id="フレックスアイテムの配置-1"&gt;フレックスアイテムの配置&#10;&lt;/h2&gt;&lt;p&gt;フレックスボックスモデルでは、フレックスコンテナ内のアイテムの配置を細かく制御できます。このセクションでは、主軸（Main Axis）と交差軸（Cross Axis）に沿ったフレックスアイテムの配置に焦点を当て、それぞれのプロパティの使用方法と効果について詳しく説明します。&lt;/p&gt;&#10;&lt;h3 id="主軸に沿った配置justify-content"&gt;主軸に沿った配置：&lt;code&gt;justify-content&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;justify-content&lt;/code&gt;プロパティは、フレックスアイテムを主軸に沿ってどのように配置するかを定義します。このプロパティは、アイテム間のスペース分配や、アイテムのグループをコンテナ内で揃える方法を指定するために使用されます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;flex-start&lt;/code&gt;: アイテムをコンテナの開始端に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;flex-end&lt;/code&gt;: アイテムをコンテナの終了端に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;center&lt;/code&gt;: アイテムをコンテナの中央に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;space-between&lt;/code&gt;: 最初のアイテムを開始端に、最後のアイテムを終了端に配置し、残りのアイテム間に均等なスペースを配分します。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;space-around&lt;/code&gt;: アイテムの周囲に均等なスペースを配分します。各アイテムの両端のスペースは、アイテム間のスペースの半分になります。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;space-evenly&lt;/code&gt;: アイテム間だけでなく、コンテナの端とアイテムの間にも均等なスペースを配分します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="交差軸に沿った配置align-itemsとalign-self"&gt;交差軸に沿った配置：&lt;code&gt;align-items&lt;/code&gt;と&lt;code&gt;align-self&lt;/code&gt;&#10;&lt;/h3&gt;&lt;h4 id="align-items"&gt;&lt;code&gt;align-items&lt;/code&gt;&#10;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;align-items&lt;/code&gt;プロパティは、フレックスアイテムを交差軸に沿ってどのように配置するかを定義します。これにより、コンテナ内のすべてのアイテムの垂直方向（デフォルトの主軸が水平の場合）の位置を制御できます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;flex-start&lt;/code&gt;: アイテムをコンテナの交差軸開始端に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;flex-end&lt;/code&gt;: アイテムをコンテナの交差軸終了端に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;center&lt;/code&gt;: アイテムを交差軸の中央に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;baseline&lt;/code&gt;: アイテムをテキストのベースラインに揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;stretch&lt;/code&gt;（デフォルト）: アイテムをコンテナの高さに合わせて伸ばします（アイテムの高さが指定されていない場合）。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="align-self"&gt;&lt;code&gt;align-self&lt;/code&gt;&#10;&lt;/h4&gt;&lt;p&gt;&lt;code&gt;align-self&lt;/code&gt;プロパティは、個々のフレックスアイテムに対して&lt;code&gt;align-items&lt;/code&gt;プロパティの値を上書きします。これにより、特定のアイテムだけ異なる方法で交差軸に沿って配置することが可能になります。&lt;code&gt;align-self&lt;/code&gt;は&lt;code&gt;align-items&lt;/code&gt;と同じ値を受け取りますが、特定のアイテムに適用される点が異なります。&lt;/p&gt;&#10;&lt;h3 id="複数行のフレックスアイテムの配置align-content"&gt;複数行のフレックスアイテムの配置：&lt;code&gt;align-content&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;align-content&lt;/code&gt;プロパティは、フレックスコンテナに複数行のフレックスアイテムがある場合に、それらの行を交差軸に沿ってどのように配置するかを制御します。このプロパティは、コンテナが追加の空間を持っていて、フレックスアイテムが複数行に渡る場合にのみ影響します。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;flex-start&lt;/code&gt;: 行をコンテナの交差軸開始端に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;flex-end&lt;/code&gt;: 行をコンテナの交差軸終了端に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;center&lt;/code&gt;: 行をコンテナの交差軸中央に揃えます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;space-between&lt;/code&gt;: 最初の行を交差軸開始端に、最後の行を終了端に配置し、残りの行間に均等なスペースを配分します。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;space-around&lt;/code&gt;: 行の周囲に均等なスペースを配分します。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;stretch&lt;/code&gt;: 行をコンテナの残りの高さに合わせて伸ばします。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;フレックスボックスのアイテム配置機能は、複雑なレイアウトを柔軟に、簡単に実現するための強力なツールです。これらのプロパティを適切に利用することで、さまざまな画面サイズに適応するレスポンシブなデザインを作成することができます。&lt;/p&gt;&#10;&lt;h2 id="フレックスアイテムの柔軟性-1"&gt;フレックスアイテムの柔軟性&#10;&lt;/h2&gt;&lt;p&gt;フレックスボックスレイアウトにおける「柔軟性」は、フレックスアイテムのサイズを動的に調整する能力を指します。この柔軟性により、フレックスアイテムはコンテナ内の利用可能なスペースに応じて、伸縮することができます。主に&lt;code&gt;flex-grow&lt;/code&gt;、&lt;code&gt;flex-shrink&lt;/code&gt;、&lt;code&gt;flex-basis&lt;/code&gt;の3つのプロパティを組み合わせて、アイテムの伸縮を制御します。&lt;/p&gt;&#10;&lt;h3 id="flex-grow"&gt;&lt;code&gt;flex-grow&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;flex-grow&lt;/code&gt;プロパティは、フレックスアイテムがフレックスコンテナ内の余剰スペースをどの程度占めるかを定義します。値は非負の数で、デフォルトは&lt;code&gt;0&lt;/code&gt;です。この値が大きいほど、他のアイテムに比べてより多くの余剰スペースを占めるようになります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* 余剰スペースを他のアイテムと等しく分割して占める */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="flex-shrink"&gt;&lt;code&gt;flex-shrink&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;flex-shrink&lt;/code&gt;プロパティは、フレックスコンテナ内のスペースが不足している場合に、フレックスアイテムがどの程度縮小するかを定義します。値は非負の数で、デフォルトは&lt;code&gt;1&lt;/code&gt;です。この値が大きいほど、他のアイテムに比べてより強く縮小します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;flex-shrink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* スペース不足時に他のアイテムよりも強く縮小する */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="flex-basis"&gt;&lt;code&gt;flex-basis&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;flex-basis&lt;/code&gt;プロパティは、フレックスアイテムの初期サイズを定義します。この値は、アイテムが伸縮する前の基本となる幅（主軸が水平の場合）または高さ（主軸が垂直の場合）を指定します。値には具体的な寸法（例えば&lt;code&gt;200px&lt;/code&gt;）や&lt;code&gt;auto&lt;/code&gt;（コンテンツのサイズに基づく）を設定できます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;flex-basis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* アイテムの初期サイズを150pxに設定 */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="flex-のショートハンド"&gt;&lt;code&gt;flex&lt;/code&gt; のショートハンド&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;flex-grow&lt;/code&gt;、&lt;code&gt;flex-shrink&lt;/code&gt;、&lt;code&gt;flex-basis&lt;/code&gt;の3つのプロパティは、&lt;code&gt;flex&lt;/code&gt;プロパティを使用して簡潔に記述することができます。これは、フレックスアイテムの柔軟性を一括で指定する便利な方法です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;flex-item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* flex-grow: 1, flex-shrink: 2, flex-basis: 150px */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この例では、フレックスアイテムは余剰スペースがあれば伸び、スペースが不足していれば縮小し、その初期サイズは&lt;code&gt;150px&lt;/code&gt;と定義されています。デフォルト値&lt;code&gt;flex: 0 1 auto;&lt;/code&gt;は、アイテムが伸びず、必要に応じて縮小し、コンテンツのサイズに基づく初期サイズを持つことを意味します。&lt;/p&gt;&#10;&lt;p&gt;フレックスアイテムの柔軟性を適切に設定することで、さまざまな画面サイズや表示条件に対応する、動的でレスポンシブなレイアウトを簡単に実現できます。&lt;/p&gt;&#10;</description></item><item><title>HTML: Webページの構造/コンテナ/セクショニング</title><link>https://ai.hack-le.com/html-web-container/</link><pubDate>Fri, 29 Mar 2024 20:11:21 +0900</pubDate><guid>https://ai.hack-le.com/html-web-container/</guid><description>&lt;p&gt;自分がHTML/CSSの復習するためにChatGPTにアウトライン書かせて記事化したものの一部です。&lt;/p&gt;&#10;&lt;h2 id="レイアウトの基本ブロックレベル要素とインライン要素"&gt;レイアウトの基本（ブロックレベル要素とインライン要素）&#10;&lt;/h2&gt;&lt;p&gt;Webページのレイアウトを理解する上で、ブロックレベル要素とインライン要素の違いを把握することは非常に重要です。これらの要素は、HTML文書内でどのように配置され、振る舞うかに大きな影響を与えます。このセクションでは、ブロックレベル要素とインライン要素の基本的な特徴と使い方について解説します。&lt;/p&gt;&#10;&lt;h3 id="ブロックレベル要素"&gt;ブロックレベル要素&#10;&lt;/h3&gt;&lt;p&gt;ブロックレベル要素は、新しい行から始まり、利用可能な全幅を占める傾向があります。これらの要素は、主に構造を定義するために使用され、セクショニング、ヘッダー、パラグラフなどのコンテンツを含むことができます。ブロックレベル要素の例には、&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt; などがあります。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;div&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; これはブロックレベル要素です。この要素は新しい行から始まり、幅いっぱいに広がります。&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/div&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ブロックレベル要素は、マージンやパディングを通じて周囲の要素との間隔を調整することができます。また、&lt;code&gt;width&lt;/code&gt; と &lt;code&gt;height&lt;/code&gt; プロパティを使用して、そのサイズを明示的に指定することが可能です。&lt;/p&gt;&#10;&lt;h3 id="インライン要素"&gt;インライン要素&#10;&lt;/h3&gt;&lt;p&gt;インライン要素は、ブロックレベル要素内に含まれることが多く、新しい行を始めることなく、コンテンツの流れに沿って配置されます。これらの要素は、テキストや画像などの小さなコンテンツのグループに適しており、テキスト内で使用される&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; などが該当します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;p&amp;gt;これは&amp;lt;span style=&amp;#34;color: red;&amp;#34;&amp;gt;インライン要素&amp;lt;/span&amp;gt;の例です。&amp;lt;/p&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;インライン要素に対しては、&lt;code&gt;width&lt;/code&gt; や &lt;code&gt;height&lt;/code&gt; プロパティが効果を持ちません。ただし、&lt;code&gt;margin&lt;/code&gt; の左右の値（&lt;code&gt;margin-left&lt;/code&gt;, &lt;code&gt;margin-right&lt;/code&gt;）や、&lt;code&gt;padding&lt;/code&gt; の値は適用されますが、上下の値（&lt;code&gt;margin-top&lt;/code&gt;, &lt;code&gt;margin-bottom&lt;/code&gt;, &lt;code&gt;padding-top&lt;/code&gt;, &lt;code&gt;padding-bottom&lt;/code&gt;）はブロックレベル要素と同じようには扱われません。&lt;/p&gt;&#10;&lt;h3 id="ブロックレベルとインラインの混在"&gt;ブロックレベルとインラインの混在&#10;&lt;/h3&gt;&lt;p&gt;ブロックレベル要素とインライン要素は、HTML文書で混在して使用されることがあります。インライン要素をブロックレベル要素の中に配置することで、テキストや画像などのコンテンツを適切に配置し、スタイリングすることができます。&lt;/p&gt;&#10;&lt;h2 id="コンテナ"&gt;コンテナ&#10;&lt;/h2&gt;&lt;p&gt;Webデザインにおいて、ページの内容を整理し、構造的に意味のある方法で情報を提示することは非常に重要です。この目的のために、「コンテナ」と「セクショニング」の概念が役立ちます。これらの手法を適切に使用することで、コンテンツを論理的にグループ化し、ユーザーにとってナビゲートしやすいページを作成することができます。&lt;/p&gt;&#10;&lt;p&gt;コンテナは、Webページ上の他の要素を包含（または包装）するために使用される要素です。これは、特定のセクションやコンテンツのグループを視覚的に区別するため、またはスタイリングの目的で使用されます。最も一般的に使用されるコンテナは&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;タグです。&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;はセマンティックな意味を持たないため、ページの構造を損なうことなく、スタイリングやレイアウトのための「箱」として機能します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;div class=&amp;#34;container&amp;#34;&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;p&amp;gt;これはコンテナ内のテキストです。&amp;lt;/p&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/div&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="セクショニング"&gt;セクショニング&#10;&lt;/h2&gt;&lt;p&gt;セクショニングはWebページのコンテンツを論理的に整理し、それぞれの部分が持つ意味を明確にするための重要なプロセスです。HTML5では、セクショニングを効果的に行うためのいくつかの要素が導入されており、これらを使用することで、コンテンツをよりアクセシブルで検索エンジンに優しいものにすることができます。&lt;/p&gt;&#10;&lt;h3 id="header-ヘッダーのセクショニング"&gt;&lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt;: ヘッダーのセクショニング&#10;&lt;/h3&gt;&lt;p&gt;ヘッダーは、ページまたはセクションの導入部分に使用され、通常、サイトのロゴ、ナビゲーションリンク、検索フォームなどを含みます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;サイトのタイトル&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;nav&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#home&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;ホーム&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#about&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;私たちについて&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#contact&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;お問い合わせ&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;nav&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="footer-フッターのセクショニング"&gt;&lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt;: フッターのセクショニング&#10;&lt;/h3&gt;&lt;p&gt;フッターは、ページの末尾に配置され、著作権情報、連絡先情報、サイトマップへのリンクなどを含むことが多いです。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;© 2024 サイト名. All rights reserved.&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="section-汎用セクションのセクショニング"&gt;&lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;: 汎用セクションのセクショニング&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;は、関連するコンテンツをグループ化し、それに意味を付与するために使用されます。それぞれの&lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;は独自の見出しを持つことが推奨されます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;サービスの紹介&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;私たちの提供するサービスについての説明。&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="article-独立したコンテンツのセクショニング"&gt;&lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;: 独立したコンテンツのセクショニング&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;は、再利用可能で独立したコンテンツのブロックを定義します。ブログの投稿やニュース記事などがこれに該当します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;article&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;記事のタイトル&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;記事の本文...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;article&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="nav-ナビゲーションのセクショニング"&gt;&lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;: ナビゲーションのセクショニング&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;nav&amp;gt;&lt;/code&gt;は、ページ内のナビゲーションリンクのグループを示します。サイトの主要なナビゲーションやページ内リンクの集合に使用されます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;nav&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#section1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;セクション1&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#section2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;セクション2&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;nav&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="aside-補足情報のセクショニング"&gt;&lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt;: 補足情報のセクショニング&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;&amp;lt;aside&amp;gt;&lt;/code&gt;は、メインコンテンツから少し離れた位置で、補足情報を提供します。サイドバーのコンテンツに適しています。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;aside&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;関連記事&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;関連記事1&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;関連記事2&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;aside&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これらのセクショニング要素を使用することで、Webページのコンテンツを論理的に区分けし、その構造を明確にすることができます。正しく使用することで、ページのアクセシビリティとSEOが向上し、ユーザーにとってもナビゲートしやすいページとなります。&lt;/p&gt;&#10;</description></item><item><title>HTML/CSSの基本</title><link>https://ai.hack-le.com/html-css/</link><pubDate>Fri, 29 Mar 2024 19:14:15 +0900</pubDate><guid>https://ai.hack-le.com/html-css/</guid><description>&lt;p&gt;自分がHTML/CSSの復習するためにChatGPTにアウトライン書かせて記事化したものの一部です。&lt;/p&gt;&#10;&lt;h2 id="html文書の構造"&gt;HTML文書の構造&#10;&lt;/h2&gt;&lt;p&gt;HTML（HyperText Markup Language）は、Webページの構造を定義するために使用されるマークアップ言語です。&lt;/p&gt;&#10;&lt;h3 id="基本的なhtml文書の構成"&gt;基本的なHTML文書の構成&#10;&lt;/h3&gt;&lt;p&gt;全てのHTML文書は、基本的な構成要素から成り立っています。これらの要素を正しく理解し、適切に使用することが、効果的なWebページを構築する鍵となります。&lt;/p&gt;&#10;&lt;p&gt;HTML文書は、&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;宣言から始まり、&lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;タグで全体が囲まれます。&lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;タグの内部には、&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;セクションと&lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;セクションが含まれます。以下はその基本的な骨格です：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ja&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;ページのタイトル&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- ここにコンテンツが入ります --&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="文書宣言とhtml要素"&gt;文書宣言とHTML要素&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ja&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;: この宣言は文書がHTML5を使用していることをブラウザに伝えます。HTML文書の最初に記述し、HTML5の標準に従うことを示します。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;: HTML文書のルート（または最上位）要素です。&lt;code&gt;lang&lt;/code&gt;属性を用いて文書の主言語を指定します。この例では、&amp;ldquo;ja&amp;quot;が日本語を意味します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="ヘッドセクション"&gt;ヘッドセクション&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;UTF-8&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;ページのタイトル&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;: 文書のメタデータ、スクリプト、スタイルシートへのリンクなど、ページの見た目に直接影響しない情報を含みます。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;/code&gt;: 文書の文字エンコーディングをUTF-8として指定します。これにより、世界中のあらゆる文字が正しく表示されるようになります。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt;: ブラウザのタブに表示されるページのタイトルを指定します。SEO（検索エンジン最適化）においても重要な役割を果たします。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="ボディセクション"&gt;ボディセクション&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- ここにページのコンテンツが入ります --&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;: ページのコンテンツを含むメイン部分です。テキスト、画像、動画、リンクなど、ユーザーに表示される要素がここに配置されます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="まとめ"&gt;まとめ&#10;&lt;/h3&gt;&lt;p&gt;HTML文書は、ブラウザがWebページを正しくレンダリングするための指示を提供するために、非常に構造化された形式で書かれています。&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/code&gt;宣言から始まり、&lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;、そして&lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt;という要素によって構成されています。この基本的な構造を理解し、適切に使用することは、効果的なWebデザインと開発の基礎となります。&lt;/p&gt;&#10;&lt;h2 id="基本的なタグとその使い方"&gt;基本的なタグとその使い方&#10;&lt;/h2&gt;&lt;p&gt;HTML文書を構築する際には、さまざまなタグを使用してコンテンツの構造を定義します。このセクションでは、HTML文書において頻繁に使用される基本的なタグとその使い方について詳しく見ていきます。これらのタグを理解し、適切に使用することで、読みやすくアクセスしやすいWebページを作成することができます。&lt;/p&gt;&#10;&lt;h3 id="見出しタグ-h1h6"&gt;見出しタグ (&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;〜&lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt;)&#10;&lt;/h3&gt;&lt;p&gt;見出しタグは、文書の見出しやセクションのタイトルを示すために使用されます。&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;から&lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt;までの6レベルがあり、&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;が最も重要な見出しを示し、&lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt;に向かうにつれて重要度が下がります。一般的に、&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;はページの主題を示すために1ページに1回だけ使用し、他の見出しタグはサブセクションの見出しとして使用します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;メインの見出し&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;サブ見出し&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;さらに小さい見出し&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="段落タグ-p"&gt;段落タグ (&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;)&#10;&lt;/h3&gt;&lt;p&gt;段落タグ&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;は、テキストの段落を定義するために使用されます。このタグは、テキストを視覚的に区切り、読みやすくするために重要です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;これは段落です。ここにテキストコンテンツが入ります。&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="リンクタグ-a"&gt;リンクタグ (&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;)&#10;&lt;/h3&gt;&lt;p&gt;リンクタグ&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;は、ハイパーリンクを作成するために使用されます。&lt;code&gt;href&lt;/code&gt;属性には、リンク先のURLを指定します。リンクを使用することで、ユーザーはクリックするだけで他のページやサイトに簡単に移動できます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Example.comへのリンク&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="リストタグ-ul-ol-li"&gt;リストタグ (&lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;)&#10;&lt;/h3&gt;&lt;p&gt;リストは情報を整理し、リスト形式で表示するのに役立ちます。順不同リストには&lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;を、順序付きリストには&lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt;を使用し、リストアイテムは&lt;code&gt;&amp;lt;li&amp;gt;&lt;/code&gt;タグでマークアップします。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;リストアイテム1&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;リストアイテム2&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ol&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;最初のアイテム&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;二番目のアイテム&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;ol&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="画像タグ-img"&gt;画像タグ (&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;)&#10;&lt;/h3&gt;&lt;p&gt;画像タグ&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;は、Webページに画像を埋め込むために使用されます。&lt;code&gt;src&lt;/code&gt;属性には画像のURLを指定し、&lt;code&gt;alt&lt;/code&gt;属性には画像の代替テキストを提供します。代替テキストは、画像が表示されない場合や視覚障害者のユーザーが使用するスクリーンリーダーによって読み上げられます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;image.jpg&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;説明テキスト&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="まとめ-1"&gt;まとめ&#10;&lt;/h3&gt;&lt;p&gt;このセクションでは、HTML文書における基本的なタグとその使い方について紹介しました。見出し、段落、リンク、リスト、画像のタグは、Webページを構築する際の基礎となります。これらのタグを適切に使用することで、情報を効果的に整理し、ユーザーにとってアクセスしやすいコンテンツを作成することができます。&lt;/p&gt;&#10;&lt;h2 id="cssの基本"&gt;CSSの基本&#10;&lt;/h2&gt;&lt;p&gt;CSS（Cascading Style Sheets）は、Webページの見た目とフォーマットを指定するために使用される言語です。HTMLがページの構造を定義するのに対し、CSSはその外見を装飾します。&lt;/p&gt;&#10;&lt;h3 id="cssの適用"&gt;CSSの適用&#10;&lt;/h3&gt;&lt;p&gt;CSSをHTML文書に適用する方法は、スタイルをWebページに組み込むための基本的な技術です。主に3つの方法があります：インラインスタイル、内部スタイルシート、そして外部スタイルシート。各方法は特定の用途に適しており、その使用はプロジェクトの要件や開発者の好みによって異なります。重要な観点は以下です。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;再利用性&lt;/strong&gt;: 外部スタイルシートを使用することで、スタイルを再利用し、コンシステントなデザインを保つことができます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;保守性&lt;/strong&gt;: スタイルを別のファイルに分離することで、コードの保守性が向上します。CSSファイルを更新するだけで、サイト全体の見た目を変更できます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;パフォーマンス&lt;/strong&gt;: 外部スタイルシートはブラウザにキャッシュされるため、ページの読み込み時間を短縮することができます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;CSSをHTML文書に適用するこれらの方法を適切に使い分けることで、効率的かつ効果的にWebページをスタイリングすることができます。&lt;/p&gt;&#10;&lt;h4 id="インラインスタイル"&gt;インラインスタイル&#10;&lt;/h4&gt;&lt;p&gt;インラインスタイルは、HTML要素に直接CSSスタイルを適用する方法です。&lt;code&gt;style&lt;/code&gt;属性を使用して、個々の要素にスタイルルールを指定します。この方法は、小規模な変更には便利ですが、スタイルの再利用ができないため、大規模なWebサイトでは推奨されません。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;p style=&amp;#34;color: blue; font-size: 16px;&amp;#34;&amp;gt;これはインラインスタイルを使用したテキストです。&amp;lt;/p&amp;gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="内部スタイルシート"&gt;内部スタイルシート&#10;&lt;/h4&gt;&lt;p&gt;内部スタイルシートは、HTML文書内の&lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;タグを用いて定義されます。通常、&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;セクション内に配置され、そのHTML文書内でのみ適用されます。ページ固有のスタイルを定義するのに適していますが、複数のページにわたってスタイルを共有する場合は効率的ではありません。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f0f0f0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="外部スタイルシート"&gt;外部スタイルシート&#10;&lt;/h4&gt;&lt;p&gt;外部スタイルシートは、スタイル情報を別のファイルに保存し、HTML文書からリンクする方法です。&lt;code&gt;.css&lt;/code&gt;拡張子を持つCSSファイルにスタイルルールを記述し、&lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt;タグを用いてHTML文書の&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;セクション内でそのファイルを参照します。この方法は再利用性とメンテナンスのしやすさから、最も一般的に推奨される方法です。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;styles.css&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;styles.css&lt;/code&gt;ファイル:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;body {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; background-color: #f0f0f0;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;p {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; color: green;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="セレクタ"&gt;セレクタ&#10;&lt;/h3&gt;&lt;p&gt;セレクタは、スタイルを適用するHTML要素を指定します。セレクタには様々な種類があり、特定の要素、要素のクラス、ID、またはそれらの組み合わせを指定することができます。&lt;/p&gt;&#10;&lt;h4 id="要素セレクタ"&gt;要素セレクタ&#10;&lt;/h4&gt;&lt;p&gt;要素セレクタは、特定のHTML要素にスタイルを直接適用します。例えば、すべての&lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;タグにスタイルを適用したい場合、次のように記述します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;p {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; color: blue;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 16px;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="クラスセレクタ"&gt;クラスセレクタ&#10;&lt;/h4&gt;&lt;p&gt;クラスセレクタは、特定のクラス属性を持つ要素にスタイルを適用します。ピリオド（&lt;code&gt;.&lt;/code&gt;）に続けてクラス名を指定します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.intro {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-weight: bold;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="idセレクタ"&gt;IDセレクタ&#10;&lt;/h4&gt;&lt;p&gt;IDセレクタは、特定のID属性を持つ要素にスタイルを適用します。ハッシュ記号（&lt;code&gt;#&lt;/code&gt;）に続けてID名を指定します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#header {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; background-color: gray;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="プロパティと値"&gt;プロパティと値&#10;&lt;/h3&gt;&lt;p&gt;プロパティは、スタイルの種類を指定します（例: 色、フォントサイズ、マージンなど）。値はそのプロパティに設定する具体的な設定値です。プロパティと値はセミコロンで区切られ、プロパティと値の組み合わせはカーリーブレース（&lt;code&gt;{}&lt;/code&gt;）で囲みます。&lt;/p&gt;&#10;&lt;h4 id="例テキストの色とフォントサイズを設定"&gt;例：テキストの色とフォントサイズを設定&#10;&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;p {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; color: red; /* プロパティ: color, 値: red */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 14px; /* プロパティ: font-size, 値: 14px */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="スタイリングの基本"&gt;スタイリングの基本&#10;&lt;/h2&gt;&lt;p&gt;CSSを用いたスタイリングは、Webページに視覚的魅力を加える重要なプロセスです。色、フォント、レイアウトなど、さまざまな側面を調整することで、ユーザーにとって魅力的かつ読みやすいページを作成することができます。このセクションでは、スタイリングの基本に焦点を当て、効果的なWebデザインのための主要なCSSプロパティについて解説します。&lt;/p&gt;&#10;&lt;h3 id="色の指定-colorbackground-color"&gt;色の指定 color/background-color&#10;&lt;/h3&gt;&lt;p&gt;Webページの色彩は、ブランドのイメージを伝え、ユーザーの注意を引き、情報の階層を明確にする役割を果たします。CSSでは、テキストの色、背景色、境界線の色などを指定することができます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;テキストの色&lt;/strong&gt;: &lt;code&gt;color&lt;/code&gt; プロパティを使用して、テキストの色を指定します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;背景色&lt;/strong&gt;: &lt;code&gt;background-color&lt;/code&gt; プロパティを用いて、要素の背景色を設定します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;body {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; color: #333; /* テキストの色をダークグレーに設定 */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; background-color: #f8f8f8; /* 背景色をライトグレーに設定 */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="フォントとテキストスタイル-font-familyfont-sizetext-align"&gt;フォントとテキストスタイル font-family/font-size/text-align&#10;&lt;/h3&gt;&lt;p&gt;読みやすさはユーザーエクスペリエンスの重要な要素です。CSSを用いてフォントの種類、サイズ、行間、テキストの揃え方を指定することで、テキストコンテンツの視覚的な魅力と読みやすさを向上させることができます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;フォントファミリー&lt;/strong&gt;: &lt;code&gt;font-family&lt;/code&gt; プロパティを使用して、テキストに使用するフォントを指定します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;フォントサイズ&lt;/strong&gt;: &lt;code&gt;font-size&lt;/code&gt; プロパティで、テキストのサイズを指定します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;テキストアラインメント&lt;/strong&gt;: &lt;code&gt;text-align&lt;/code&gt; プロパティを用いて、テキストの揃え方（左、中央、右）を指定します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;p {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-family: &amp;#34;Helvetica Neue&amp;#34;, Helvetica, Arial, sans-serif;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; font-size: 16px;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; text-align: justify;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ボックスモデル-marginborderpadding"&gt;ボックスモデル margin/border/padding&#10;&lt;/h3&gt;&lt;p&gt;CSSのボックスモデルは、Webページ上の各要素がどのようにレイアウトされるかを定義する重要な概念です。各要素は、マージン、ボーダー、パディング、そしてコンテンツ自体の4つの部分から成り立っています。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;マージン&lt;/strong&gt;: &lt;code&gt;margin&lt;/code&gt; プロパティを用いて、要素の外側の空間を指定します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ボーダー&lt;/strong&gt;: &lt;code&gt;border&lt;/code&gt; プロパティで、要素の境界線のスタイル、幅、色を設定します。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;パディング&lt;/strong&gt;: &lt;code&gt;padding&lt;/code&gt; プロパティによって、要素の内側の空間（コンテンツとボーダーの間）を指定します。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.box {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; margin: 20px;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; border: 2px solid #000;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; padding: 10px;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>WordPressで使用されていない画像を削除する方法：Media Cleanerプラグインの使い方</title><link>https://ai.hack-le.com/wordpress-media-cleaner/</link><pubDate>Tue, 31 Oct 2023 02:59:51 +0900</pubDate><guid>https://ai.hack-le.com/wordpress-media-cleaner/</guid><description>&lt;p&gt;WordPressのサイト運営をしていると、不要な画像やメディアファイルが増えてくることがあります。そんな時に役立つのが「Media Cleaner」というプラグインです。この記事では、Media Cleanerのインストールから使用方法までを詳しく解説します。&lt;/p&gt;&#10;&lt;h4 id="1-media-cleanerとは"&gt;1. Media Cleanerとは？&#10;&lt;/h4&gt;&lt;p&gt;Media Cleanerは、WordPressのメディアライブラリやuploadsディレクトリから使用されていないメディアファイルを検出し、削除するためのプラグインです。記事、ページ、カスタムポストタイプ、ウィジェットなど、さまざまな場所でのメディアの使用状況をチェックします。&lt;/p&gt;&#10;&lt;h4 id="2-インストールと有効化"&gt;2. インストールと有効化&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;WordPressのダッシュボードから「プラグイン」&amp;gt;「新規追加」に移動。&lt;/li&gt;&#10;&lt;li&gt;「Media Cleaner」を検索し、インストール後に有効化。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="3-基本設定の方法"&gt;3. 基本設定の方法&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;ダッシュボードの左側のメニューから「メディア」&amp;gt;「Cleaner」を選択。&lt;/li&gt;&#10;&lt;li&gt;「設定」タブに移動し、スキャンの範囲やチェックの対象を設定。例えば、メディアライブラリだけでなく、テーマやウィジェットの中もチェックするかどうかを選べます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="4-使用されていないメディアの検出"&gt;4. 使用されていないメディアの検出&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;「ダッシュボード」タブに戻り、スキャンを開始。&lt;/li&gt;&#10;&lt;li&gt;スキャンが完了すると、使用されていないと検出されたメディアファイルのリストが表示。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="5-不要なメディアの削除方法"&gt;5. 不要なメディアの削除方法&#10;&lt;/h4&gt;&lt;ul&gt;&#10;&lt;li&gt;表示されたリストを確認し、誤検出がないか手動でチェック。&lt;/li&gt;&#10;&lt;li&gt;使用されていないと確認されたメディアを選択し、「削除」ボタンをクリック。&lt;/li&gt;&#10;&lt;li&gt;必要に応じて、ゴミ箱から完全に削除するか、元に戻すことができます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="6-まとめ"&gt;6. まとめ&#10;&lt;/h4&gt;&lt;p&gt;Media Cleanerを使用することで、不要なメディアファイルを効率的に整理し、サイトの容量を節約することができます。ただし、操作には注意が必要です。特に、使用前には必ずサイトのバックアップを取ることを忘れずに！&lt;/p&gt;&#10;</description></item><item><title>WordPressでのシンタックスハイライトの導入</title><link>https://ai.hack-le.com/wordpress-syntax-highlighter/</link><pubDate>Thu, 27 Jul 2023 09:00:00 +0900</pubDate><guid>https://ai.hack-le.com/wordpress-syntax-highlighter/</guid><description>&lt;p&gt;このサイトにはプログラムのコードが多いので、さっさと入れるべきだったのだが、面倒臭くてしていなかった。これまでシンタックスハイライトはjsのライブラリを導入していたが、今となってはそんなことは面倒臭いので、プラグインを入れようと思っていた。しかしシンタックスハイライトのプラグインはたくさんあるので、どれがよいかわからず、手を付けられていなかった。&lt;/p&gt;&#10;&lt;p&gt;ChatGPT-4に聞けばいいんだと今更ながら気づき、色々聞いて導入した。まぁとりあえず動いている。以下、記事にまとめさせた。&lt;/p&gt;&#10;&lt;h2 id="イントロ"&gt;イントロ&#10;&lt;/h2&gt;&lt;p&gt;今回は、WordPressにシンタックスハイライトを導入する方法について説明します。シンタックスハイライトは、コードの読みやすさを向上させるための強力なツールです。&lt;/p&gt;&#10;&lt;p&gt;WordPressでコードのシンタックスハイライトを実装するには、主に以下の2つの方法があります。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;プラグインを使用する&lt;/li&gt;&#10;&lt;li&gt;CodeMirrorなどのライブラリを自分で導入する&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="プラグインを使用する"&gt;プラグインを使用する&#10;&lt;/h3&gt;&lt;p&gt;これは最も簡単で、特別な技術的スキルが必要ない方法です。プラグインをインストールし有効化するだけで、シンタックスハイライトが利用できるようになります。&lt;/p&gt;&#10;&lt;p&gt;以下にいくつかの一般的なプラグインを挙げておきます。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Prism.js: 非常に軽量で、多くのプログラミング言語をサポートしています。WordPress用のPrism.jsプラグインは、「WP PrismJS」などがあります。&lt;/li&gt;&#10;&lt;li&gt;SyntaxHighlighter Evolved: 古くからあるプラグインで、多くの言語に対応しています。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="codemirrorなどのライブラリを自分で導入する"&gt;CodeMirrorなどのライブラリを自分で導入する&#10;&lt;/h3&gt;&lt;p&gt;もしより細かい制御が必要であれば、自分でJavaScriptライブラリを導入するという選択肢もあります。この方法は、シンタックスハイライトを手動で実装することになりますが、コードの見た目や動作を完全にカスタマイズできる利点があります。&lt;/p&gt;&#10;&lt;p&gt;CodeMirrorやHighlight.jsなどのライブラリを導入することで、このタスクを達成できます。ただし、これらのライブラリを使ってシンタックスハイライトを手動で実装するには、JavaScriptとWordPressのテーマのカスタマイズに精通している必要があります。&lt;/p&gt;&#10;&lt;h2 id="syntaxhighlighter-evolvedの導入"&gt;SyntaxHighlighter Evolvedの導入&#10;&lt;/h2&gt;&lt;p&gt;Prism.jsやEnlighter - Customizable Syntax Highlighterといった有名なプラグインもありますが、今回は、シンプルさを最優先に考えるため、&lt;strong&gt;SyntaxHighlighter Evolved&lt;/strong&gt;を導入することにします。&lt;/p&gt;&#10;&lt;p&gt;このプラグインはWordPressのコミュニティで長い間利用されてきたものであり、その簡単さと信頼性が評価されています。特に設定を多く行う必要はなく、ショートコードを使用して簡単にブログ記事やページにコードブロックを挿入できます。&lt;/p&gt;&#10;&lt;p&gt;多くのプログラミング言語をサポートしており、その使いやすさと直感的な操作性は、シンプルさを追求するユーザーには特に魅力的です。そのため、特に高度なカスタマイズや特殊な機能を必要としないのであれば、SyntaxHighlighter Evolvedは非常に良い選択となります。&lt;/p&gt;&#10;&lt;h3 id="インストール"&gt;インストール&#10;&lt;/h3&gt;&lt;p&gt;まずはプラグインのインストールから始めましょう。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;WordPressの管理ダッシュボードにログインします。&lt;/li&gt;&#10;&lt;li&gt;左側のメニューバーから「プラグイン」を選択し、「新規追加」をクリックします。&lt;/li&gt;&#10;&lt;li&gt;検索バーに「SyntaxHighlighter Evolved」を入力し、該当するプラグインを見つけます。&lt;/li&gt;&#10;&lt;li&gt;「今すぐインストール」をクリックします。&lt;/li&gt;&#10;&lt;li&gt;インストールが完了したら、「有効化」をクリックします。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="コードブロックの追加"&gt;コードブロックの追加&#10;&lt;/h3&gt;&lt;p&gt;次に、記事にコードブロックを追加してみましょう。以下にその例を示します。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[sourcecode language=&amp;#34;css&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;your code here&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[/sourcecode]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここで、&lt;code&gt;language=&amp;quot;css&amp;quot;&lt;/code&gt;の部分は、ハイライトを適用する言語に応じて変更します。たとえば、JavaScriptのコードをハイライトする場合は&lt;code&gt;language=&amp;quot;js&amp;quot;&lt;/code&gt;とします。&lt;/p&gt;&#10;&lt;p&gt;Gutenbergにおいては、ブロックも用意されています。&lt;/p&gt;&#10;&lt;h3 id="追加の設定必要に応じて"&gt;追加の設定（必要に応じて）&#10;&lt;/h3&gt;&lt;p&gt;SyntaxHighlighter Evolvedはデフォルトの状態でも非常に良く機能しますが、必要に応じてさまざまな設定を調整することもできます。設定はダッシュボードの左側のメニューバーから「設定」を選択し、「SyntaxHighlighter」をクリックすることで行えます。&lt;/p&gt;&#10;&lt;h3 id="既存の記事にシンタックスハイライトを適用する"&gt;既存の記事にシンタックスハイライトを適用する&#10;&lt;/h3&gt;&lt;p&gt;しかし、既存の記事にシンタックスハイライトを適用するには、各記事を手動で編集してショートコードを追加する必要があります。これは、特に記事数が多い場合、一見大変そうに見えます。&lt;/p&gt;&#10;&lt;p&gt;データベースの検索置換ツールを使用すれば、一部の作業を自動化できるかもしれません。しかし、この方法は非常に注意が必要です。誤った操作が行われるとサイトに重大な問題を引き起こす可能性があります。したがって、必ず事前にデータベースのバックアップを取るなど、安全な手順を踏むようにしてください。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;結局のところ、既存の記事をどのように処理するかはあなた次第です。あなたのサイトはあなた自身のものです。必要に応じて、時間を見つけて徐々に修正するか、あるいは、特定の記事だけ修正することも可能です。&lt;/p&gt;&#10;&lt;p&gt;それにより、少なくとも新しい記事については、きれいにシンタックスハイライトされたコードを含むことができます。これは、コードの読みやすさを向上させ、読者にとってより価値のあるコンテンツを提供するための一歩となります。&lt;/p&gt;&#10;&lt;h2 id="寸評"&gt;寸評&#10;&lt;/h2&gt;&lt;p&gt;プラグインの比較については色々と聞いたのだが、結局試したのはSynataxHighliter Evolvedだけなので、詳細につちえは省いた。まぁ十分ちゃんと動いているのでよしとする。&lt;/p&gt;&#10;&lt;p&gt;このサイトは比較的新しいサイトであるので、手動で全部置き換えることができたのだが、本館にあたる「&lt;a class="link" href="https://hack-le.com/" target="_blank" rel="noopener"&#10; &gt;或る阿呆の記 - 見栄を張らない、背伸びをしない。 私はただの阿呆です。 嘘です。 since 2012.10.17.&lt;/a&gt;」で手動による置き換えはさすがにつらい。これについては置換ツール（Better Search Replaceを勧められた）を使えという、まぁそうねという回答がきたのだが、調べたところなぜか&lt;code&gt;&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;&lt;/code&gt;と&lt;code&gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&lt;/code&gt;の数が合わないということが判明し、そのまま置き換えられねーというかなんで数あわねーんだぬおおぉぉみたいなことになり、挫けた。まぁどうせ昔の記事なんてほとんどアクセスもされないので、比較的アクセスの多い記事については気が向いた時に置き換えるくらいにしたいと思う。&lt;/p&gt;&#10;&lt;p&gt;以下は今回の質問。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;WordPressで、コードのシンタックスハイライトをいい感じで簡単に実装したい&lt;/li&gt;&#10;&lt;li&gt;特にこだわりはないので、簡単さのほうが大事だから、プラグインが良い。いくつかの有名なプラグインを比較してくれ。&lt;/li&gt;&#10;&lt;li&gt;柔軟性や機能の豊富さと簡単さはしばしばトレードオフの関係にある。見た感じこれらのプラグインも例に漏れないようだ。 僕は機能の豊富さや柔軟性よりもシンプルさを重視している。その観点では、君は何が良いと思う？&lt;/li&gt;&#10;&lt;li&gt;オーケー。SyntaxHighlighter Evolvedの使い方を教えてくれ。&lt;/li&gt;&#10;&lt;li&gt;なるほど便利だ。しかし、過去の記事にあるコードにこれを適用しなおすのはたいへんだ。なんとかならないか？&lt;/li&gt;&#10;&lt;li&gt;置換する手順を詳細かつ具体的に教えてくれ&lt;/li&gt;&#10;&lt;li&gt;ちょっと検索してみたら、なぜか&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;と&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;の数が合わなかったよ……。どうやら過去の記事はぐちゃぐちゃになっているようだ。 個人サイトだし、ちょっと調べる気力はないな……。&lt;/li&gt;&#10;&lt;li&gt;はぁ、まぁ、とりあえず新しい記事についてはSyntaxHighlighterを使っていくとしよう。 ここまでの話をブログの記事としてまとめてくれ。適切に見出しをつけてくれ。&lt;/li&gt;&#10;&lt;li&gt;他のプラグインも同様のことが言えるだろう。その中でSyntaxHighlighter Evolvedを選んだのは何故かについて書きたい。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;最後のほうの質問については、なんか適当なことを言い始めたので打ち切った。&lt;/p&gt;&#10;</description></item><item><title>WordPressのエディタ選択: Gutenbergとクラシックエディタの存在理由と選択ガイド</title><link>https://ai.hack-le.com/wordpress-gutenberg/</link><pubDate>Fri, 30 Jun 2023 00:45:50 +0900</pubDate><guid>https://ai.hack-le.com/wordpress-gutenberg/</guid><description>&lt;p&gt;これは私がクラシックエディタの存在意義についてChatGPT-4に書かせたものである。私自身は複数のブログを運営しており、Gutenbergをメインにしているものもあれば、クラシックエディタをメインにしているものもある。どちらにも良いところと悪いところがあるわけだが、基本的には新しいエディタであるGutenbergが推奨される。というか、Gutenbergが出てもう何年もたっているのに、未だにクラシックエディタは健在である。それはいったいぜんたいどういうことだ、ということについての記事である。&lt;/p&gt;&#10;&lt;h2 id="はじめに"&gt;はじめに&#10;&lt;/h2&gt;&lt;p&gt;WordPressユーザーにとって、記事やページの作成と編集は日々の重要なタスクの一つです。そのため、使用するエディタの選択は、作業の効率性、使いやすさ、そして最終的なコンテンツの品質に大きな影響を与えます。WordPressでは、現在、二つの主要なエディターが提供されています: Gutenbergとクラシックエディタ。しかし、これらの違いとどちらを選ぶべきかは一見すると明確ではありません。ここでは、両者の特性を詳しく見ていき、どちらのエディタがあなたに適しているかを判断するためのガイドを提供します。&lt;/p&gt;&#10;&lt;h2 id="gutenbergとクラシックエディタの違い"&gt;Gutenbergとクラシックエディタの違い&#10;&lt;/h2&gt;&lt;p&gt;まず最初に、それぞれのエディタの特性と機能を理解することが重要です。&lt;/p&gt;&#10;&lt;p&gt;Gutenbergは、ブロックベースのエディタで、視覚的なレイアウトとデザインに重点を置いています。それは特に、画像、ビデオ、カラムレイアウトなどを頻繁に使用するユーザーにとって有用です。視覚的なエディタとして、ユーザーは自由にブロックを移動、編集、または削除することができ、より直感的なビジュアル編集体験を提供します。&lt;/p&gt;&#10;&lt;p&gt;一方、クラシックエディタはより伝統的なWordPressエディタで、テキストエディタと視覚エディタの間で切り替える選択肢があります。これはテキストベースのコンテンツとHTMLコードを直接編集する能力を必要とする人々にとっては便利な機能かもしれません。&lt;/p&gt;&#10;&lt;h2 id="なぜクラシックエディタは依然として存在しているのか"&gt;なぜクラシックエディタは依然として存在しているのか&#10;&lt;/h2&gt;&lt;p&gt;それぞれのエディタには独自の利点があり、WordPressユーザーの間でそれぞれ異なるニーズを満たしています。Gutenbergは多くの点で魅力的なエディタですが、すべてのユーザーや状況に対して最適とは限りません。その一部を以下に挙げます。&lt;/p&gt;&#10;&lt;h3 id="テキストヘビーなブログ"&gt;テキストヘビーなブログ&#10;&lt;/h3&gt;&lt;p&gt;Gutenbergは視覚的な要素とレイアウトが多いサイトに最適化されています。しかし、主にテキストベースのコンテンツを提供するブログや、コードスニペットや引用などの特定のテキスト要素を頻繁に使用するウェブサイトでは、クラシックエディタの方がより直感的で使いやすい場合があります。&lt;/p&gt;&#10;&lt;h3 id="高度なカスタマイゼーションの必要性"&gt;高度なカスタマイゼーションの必要性&#10;&lt;/h3&gt;&lt;p&gt;Gutenbergは便利なブロックを提供していますが、それらのブロックのカスタマイゼーションは限定的です。HTMLやCSSのようなウェブ言語に精通していて、独自のカスタマイゼーションを高度に適用したいユーザーにとっては、クラシックエディタの方が直接的なコード編集の能力を提供するため、より魅力的な選択肢となるかもしれません。&lt;/p&gt;&#10;&lt;h3 id="特定のプラグインやテーマの依存"&gt;特定のプラグインやテーマの依存&#10;&lt;/h3&gt;&lt;p&gt;一部のプラグインやテーマは、Gutenbergではなくクラシックエディタに最適化されているか、または両方をサポートしていません。したがって、これらのプラグインやテーマに依存している場合、Gutenbergの使用は制限される可能性があります。&lt;/p&gt;&#10;&lt;p&gt;ただし、古いプラグインやテーマには、セキュリティなどの観点で別の問題を抱えていることにも留意すべきです。&lt;/p&gt;&#10;&lt;h3 id="学習曲線"&gt;学習曲線&#10;&lt;/h3&gt;&lt;p&gt;最後に、長年にわたりWordPressを使用してきたユーザーの中には、クラシックエディタの使いやすさと見覚えのあるインターフェースのほうが好ましいを感じられる人もいるでしょう。新しいシステムを学ぶことなく、すぐに編集作業を開始できることは、継続的にコンテンツを提供するために重要な要素です。&lt;/p&gt;&#10;&lt;h2 id="新規参加者にとってなぜgutenbergがおすすめなのか"&gt;新規参加者にとって、なぜGutenbergがおすすめなのか&#10;&lt;/h2&gt;&lt;p&gt;これらの理由にもかかわらず、新規のWordPressユーザーに対しては、まずGutenbergを試すことをお勧めします。その理由は、Gutenbergが現在のデフォルトのエディタであり、今後のアップデートと新機能のサポートが続くと考えられるからです。&lt;/p&gt;&#10;&lt;p&gt;GutenbergはWordPressの未来のデザインと機能の方向性を示しています。ブロックベースの設計は、編集体験をより直感的で視覚的にするだけでなく、柔軟性と拡張性も提供します。ユーザーは個々のブロックを使ってページを自由に設計し、各ブロックを個別にカスタマイズすることができます。&lt;/p&gt;&#10;&lt;p&gt;さらに、新機能や改善はまずGutenbergに導入され、新しいテーマやプラグインはGutenbergとの互換性を保証する傾向があります。これは、Gutenbergを学ぶことが、最新のWordPress機能を活用するための重要なステップであることを示しています。&lt;/p&gt;&#10;&lt;h2 id="最終的な選択はユーザーのニーズによる"&gt;最終的な選択はユーザーのニーズによる&#10;&lt;/h2&gt;&lt;p&gt;最終的には、どのエディタを選ぶべきかは、その人が何を求めているか、どのようなスキルや経験を持っているかによります。したがって、最適なエディタを見つけるためには、両方のエディタを試し、自分のニーズと作業フローに最も適しているものを選ぶことをお勧めします。&lt;/p&gt;&#10;&lt;p&gt;しかし、今後のことを考えると、新規のWordPressユーザーは、まずGutenbergを試すことを強くお勧めします。現在のデフォルトのエディタとして、そしてWordPressの未来のデザインと機能の方向性を示しているためです。クラシックエディタはまだ有効な選択肢であり続けますが、新しいユーザーはGutenbergに触れ、その機能と可能性を試すことで、最新のWordPress機能を最大限に活用するための基盤を築くことができます。&lt;/p&gt;&#10;&lt;h2 id="寸評"&gt;寸評&#10;&lt;/h2&gt;&lt;p&gt;僕はクラシックエディタとGutenbergの両方を使っている。このChatGPT-4の回答は、概ね悪くないものだと思う（まぁそのように誘導したとも言えるが…）。&lt;/p&gt;&#10;&lt;p&gt;以下のような質問をした。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;WordPressのGutenbergはクラシックエディタと比べた時、すべての人にとって推奨されるエディタだと言えるか。&lt;/li&gt;&#10;&lt;li&gt;シンプルな編集体験を求めるのは、具体的にどんな人か&lt;/li&gt;&#10;&lt;li&gt;私自身、Gutenbergをメインで使っているブログとクラシックエディタをメインで使っているブログに分かれている。テキストベースのブログでクラシックエディタを今も使っており、実際、機能的にもクラシックエディタのほうが優れていると感じることが多い。Gutenbergではタブキーで箇条書きのインデントを下げるといった、通常テキストエディタに期待されるような機能もなかったりする。 2つの形式をサポートするのはWordPressにとっても負荷が大きいと思うが、実際的に両方に向き不向きがあると感じる。Gutenbergに統一されることはあるのだろうか。&lt;/li&gt;&#10;&lt;li&gt;これからWordPressを始めようという人に、あえてクラシックエディタを勧める理由はあるだろうか。それとも、たとえテキストベースのブログであったとしても、今後のことを考えると、総合的にGutenbergを勧めるべきか。&lt;/li&gt;&#10;&lt;li&gt;ここまでの話を、長くなってもよいのでしっかりとした記事としてまとめてください。特に、今でもクラシックエディタがなくならない理由には必ず触れてください。そのうえでなお、新規参加者はまずGutenbergに触れたほうがよいのは何故かについても書いてください。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;ポイントとして、最初の質問で「すべての」という修飾を入れた。普通に聞けばChatGPT-4がGutenbergを勧めるのは明らかだったからだ。しかし、ChatGPTは「すべて」について語ることを避ける。そこで、「すべての人に勧められるか」を聞いて、勧められないパターンについて言及させた感じだ。&lt;/p&gt;&#10;&lt;p&gt;まぁ、僕自身もこれから始める人がわざわざクラシックエディタから選ぶ必要はないかなと思う。とはいえ、クラシックエディタで既にサイトを運営していてかつ、テキスト主体のブログの人が、あえてGutenbergに乗り換える理由も薄いだろう。&lt;/p&gt;&#10;</description></item><item><title>WordPressにおける画像リサイズの抑制</title><link>https://ai.hack-le.com/wordpress-image-resize/</link><pubDate>Wed, 28 Jun 2023 23:57:16 +0900</pubDate><guid>https://ai.hack-le.com/wordpress-image-resize/</guid><description>&lt;p&gt;このサイトはWordPressで構築している。WordPressではメディアをアップロードすると、複数のサイズのものが自動的に生成される。これは主にパフォーマンスのためだ。なのだが、サイトの性質によってはストレージ容量を圧迫するデメリットのほうが大きいと判断される場合もある。&lt;/p&gt;&#10;&lt;p&gt;ということで、自動リサイズを抑制するにはどうしたらよいか、ChatGPT-4に聞いた。&lt;/p&gt;&#10;&lt;h2 id="イントロ"&gt;イントロ&#10;&lt;/h2&gt;&lt;p&gt;WordPressでは、画像をアップロードすると自動的に複数のサイズが生成されます。これはテーマやプラグインがそれぞれ異なるサイズの画像を必要とするためであり、また、レスポンシブデザインを適用するためにも必要です。しかし、これらの自動生成される画像は、一部のユーザーにとっては不必要なディスク容量を占有する可能性があります。&lt;/p&gt;&#10;&lt;h2 id="抑制する方法"&gt;抑制する方法&#10;&lt;/h2&gt;&lt;p&gt;WordPressの画像生成を抑制する方法はいくつかあります：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Media Settingsを調整する&lt;/strong&gt;: WordPressの「Settings」-&amp;gt;「Media」から各画像サイズを0pxに設定すると、WordPressはそのサイズの画像を生成しなくなります。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;プラグインを使用する&lt;/strong&gt;: 「Stop Generating Unnecessary Thumbnails」や「Disable Media Sizes」のようなプラグインを利用すると、自動生成される画像のサイズを制御できます。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;functions.phpにコードを追加する&lt;/strong&gt;: テーマのfunctions.phpファイルに特定のコードを追加すると、特定の画像サイズの生成を停止できます。ただし、これには開発者スキルが必要であり、テーマの更新時に変更が上書きされる可能性もあります。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;しかし、これらの手法を適用する際には注意が必要です。特に、現在使用しているテーマやプラグインが特定の画像サイズを必要としている場合や、レスポンシブデザインを適切に機能させるためには、これらの自動生成される画像が必要な場合があります。&lt;/p&gt;&#10;&lt;p&gt;特に、WordPress 4.4以降で追加された「medium_large」サイズは、メディア設定からは設定できませんが、これはモバイルやタブレットなどのデバイスでの表示性能を向上させるために重要です。このサイズを無効にすると、一部のデバイスでの読み込み速度が低下する可能性があります。&lt;/p&gt;&#10;&lt;h2 id="未検証-medium_large-を生成しない方法"&gt;(未検証) medium_large を生成しない方法&#10;&lt;/h2&gt;&lt;p&gt;もし「medium_large」サイズの画像も生成しないようにしたい場合は、先ほどご紹介したfunctions.phpへのコード追加の方法を利用すると良いでしょう。以下のコードをあなたのテーマのfunctions.phpファイルに追加すれば、「medium_large」サイズの画像の生成を停止できます。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add_action( &amp;#39;init&amp;#39;, &amp;#39;remove_plugin_image_sizes&amp;#39; );&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;function remove_plugin_image_sizes() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; remove_image_size( &amp;#39;medium_large&amp;#39; );&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ただし、これを行うと、一部のレスポンシブデザインの要素がうまく機能しなくなる可能性があるので、注意してください。&lt;/p&gt;&#10;&lt;h2 id="wordpressで画像のサイズを確認する方法"&gt;WordPressで画像のサイズを確認する方法&#10;&lt;/h2&gt;&lt;p&gt;WordPressが自動的に生成した画像のサイズを確認するには、主に以下の2つの方法があります。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;FTPクライアントまたはcPanelのファイルマネージャを使用する&lt;/strong&gt;:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;FTPクライアント（FileZillaなど）またはcPanelのファイルマネージャを使用して、サーバー上のWordPressインストールフォルダにアクセスします。&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;wp-content/uploads&lt;/code&gt;ディレクトリに移動します。このディレクトリには、アップロードされたすべてのメディアファイルが保存されています。&lt;/li&gt;&#10;&lt;li&gt;年と月ごとにフォルダが分けられています。新しく画像をアップロードしたら、対応する年と月のフォルダに移動します。&lt;/li&gt;&#10;&lt;li&gt;アップロードした画像のバリエーションを見ることができます。もし設定した通りに特定のサイズの画像が生成されていなければ、それは成功している証拠です。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;strong&gt;WordPressのメディアライブラリから確認する&lt;/strong&gt;:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;WordPressのダッシュボードにアクセスして、「メディア」-&amp;gt;「ライブラリ」に移動します。&lt;/li&gt;&#10;&lt;li&gt;アップロードした画像をクリックし、「編集」を選択します。&lt;/li&gt;&#10;&lt;li&gt;「ファイル URL」フィールドを見ると、画像のバリエーションが表示されます。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;どちらの方法も手動で確認する方法ですが、直接サーバー上のファイルを調べる方がより確実です。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;WordPressでの画像サイズ生成は、ディスク容量と表示性能のトレードオフを考慮する必要があります。そのバランスは、サイトの内容、訪問者のデバイスの種類、ホスティング環境などによります。ディスク容量を節約することは重要ですが、それがユーザ体験の悪化を引き起こすならば、ある程度のディスク容量の増加を受け入れることが合理的な選択と言えるでしょう。&lt;/p&gt;&#10;&lt;h2 id="寸評"&gt;寸評&#10;&lt;/h2&gt;&lt;p&gt;これは僕が実際にChatGPTに相談して、かつその挙動を確認したものだ。したがって内容に嘘はないはず。&lt;/p&gt;&#10;&lt;p&gt;結論として、僕はlarge sizeのみ抑制するようにした。というのも、メインであげる画像のsizeがlarge sizeと近かったからである。small sizeとmedium sizeについては、なくても僕の使うテーマでは挙動に問題は見られなかったものの、元画像の1/10程度まで容量が圧縮されるので、たとえ作られても全体の影響はさほどでもないと考えた。一方で、large sizeについては、元画像とあまり変わりがない。なくてもテーマには影響がなかったし、あまり意味がないと考えた。これによって、3割程度の容量を節約できる見込みだ。&lt;/p&gt;&#10;&lt;p&gt;ということで、このやりとりはけっこう僕にとって有意義だった。このまとめは、他のユーザにとっても有意義ではなかろうか。以下に質問を書く。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;WordPressでは画像を上げると自動的に複数のサイズでリサイズされて保存されますが、それによる容量がもったいないです。抑制することはできますか。&lt;/li&gt;&#10;&lt;li&gt;メディアの設定による方法がもっとも簡単そうですね。それを実行するにあたって、注意すべきことはありますか。&lt;/li&gt;&#10;&lt;li&gt;複数のサイズが生成されていないことを実際に確認するには、どうしたらいいですか&lt;/li&gt;&#10;&lt;li&gt;調べてみたところ、オリジナルサイズ以外に4つのサイズができていたものが、1つまで減っていました。 設定画面ではサムネイルサイズ、ミディアムサイズ、ラージサイズの3つについて設定できました。 どうやら、メディア画面からは残り1つのサイズについては制御できないようですね。&lt;/li&gt;&#10;&lt;li&gt;なるほど。 しかしメディア画面で設定できないようにしているのには、理由があるかもしれません。 また、functions.phpの改修は、今後のメンテナンスを考えるとできれば避けたいところです。 容量が1.5倍ほどになってしまうのは少し痛いですが、これくらいは受容すべきかもしれません。&lt;/li&gt;&#10;&lt;li&gt;ここまでの議論を、記事にまとめてください。&lt;/li&gt;&#10;&lt;li&gt;確認方法についても、以下にまとめてください。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;確認方法をスキップするのは非常によろしくなかったが、指摘すれば書いてくれる。&lt;/p&gt;&#10;</description></item><item><title>無料ブログプラットフォームとWordPress: 所有権がもたらす影響とその重要性</title><link>https://ai.hack-le.com/blog-wordpress/</link><pubDate>Tue, 27 Jun 2023 01:31:32 +0900</pubDate><guid>https://ai.hack-le.com/blog-wordpress/</guid><description>&lt;p&gt;デジタル時代において、オンラインでの情報発信は個々人だけでなく、ビジネスにとっても不可欠な要素となりました。そのためにはブログやウェブサイトが重要なツールとなりますが、その運営方法やプラットフォーム選びについて迷うことは少なくありません。この記事では、無料のブログプラットフォームとWordPressの違い、特に「所有権」の観点からその違いがもたらす影響について掘り下げていきます。&lt;/p&gt;&#10;&lt;h2 id="無料ブログプラットフォームとは"&gt;無料ブログプラットフォームとは&#10;&lt;/h2&gt;&lt;p&gt;無料のブログプラットフォーム、例えばBloggerやTumblrなどは、非常に手軽に始めることができるのが大きな特徴です。多くのテンプレートや基本的なカスタマイズオプションが提供されており、技術的な知識がほとんどなくてもブログの運営を始めることができます。一方で、その手軽さの裏には所有権の制限や機能の制約があります。&lt;/p&gt;&#10;&lt;h2 id="wordpressとは"&gt;WordPressとは&#10;&lt;/h2&gt;&lt;p&gt;WordPressは世界で最も広く使用されているコンテンツ管理システム（CMS）の一つで、特に自己ホストのWordPress.orgは、ユーザーに高度なカスタマイズ性と所有権を提供します。しかし、その一方で、一定の技術的知識や初期設定、メンテナンスが必要となります。&lt;/p&gt;&#10;&lt;h2 id="所有権とは"&gt;所有権とは&#10;&lt;/h2&gt;&lt;p&gt;所有権とは、あなたのウェブサイトとそのすべてのコンテンツを完全に制御する能力を指します。これは自分のサイトのデザイン、機能、SEO設定、データの管理など、ウェブサイト全体に対する絶対的な権利を含んでいます。WordPressを使用すれば、これら全てを自由自在にコントロールすることが可能です。&lt;/p&gt;&#10;&lt;h2 id="所有権の重要性"&gt;所有権の重要性&#10;&lt;/h2&gt;&lt;p&gt;所有権は、ウェブサイトの長期的な成功と成長に対する重要な要素です。それはサイトの見た目や機能を自分のニーズに合わせて調整できる自由度、SEOの最適化による訪問者の増加、そしてブランド価値の確立に寄与します。さらに、モネタイズの選択肢を広げることも可能にします。&lt;/p&gt;&#10;&lt;h2 id="無料ブログプラットフォームとwordpressの選択"&gt;無料ブログプラットフォームとWordPressの選択&#10;&lt;/h2&gt;&lt;p&gt;それぞれのプラットフォームにはメリットとデメリットがあります。無料のブログプラットフォームは初心者に優しく、すぐにブログを始めることができます。一方、WordPressは高度なカスタマイズや機能、所有権を提供しますが、そのための一定の技術的知識や運用コスト、メンテナンスが必要です。そのため、どちらを選ぶべきかはあなたのニーズや目標によります。&lt;/p&gt;&#10;&lt;h2 id="wordpressへの移行を考えるタイミング"&gt;WordPressへの移行を考えるタイミング&#10;&lt;/h2&gt;&lt;p&gt;カスタマイズの制限に直面したとき、SEOやマーケティングの必要性を感じたとき、プロフェッショナルなブランドイメージが必要となったとき、モネタイズの選択肢を広げたいときなど、あなたのブログが成長し、より高度な要件を必要とするようになったときに、WordPressへの移行を検討するタイミングかもしれません。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;無料ブログプラットフォームとWordPress、そのどちらが最適かはあなたのブログの目標とニーズによります。どちらのプラットフォームも一長一短があるため、あなたの状況に最も適した選択を行うことが重要です。&lt;/p&gt;&#10;&lt;p&gt;キーワード: ブログプラットフォーム, WordPress, 所有権, カスタマイズ, SEO, ブランドイメージ, モネタイズ, ブログ運営, ウェブサイト運営&lt;/p&gt;&#10;&lt;h2 id="寸評"&gt;寸評&#10;&lt;/h2&gt;&lt;p&gt;前回「&lt;a class="link" href="https://ai.hack-le.com/wordpress/" &gt;WordPress入門: なぜ今すぐにでもWordPressを使い始めるべきなのか – 或る阿呆とAIと&lt;/a&gt;」あまりにもつまらない記事だったのだが、もう少し掘り下げたらもうちょっとマシになるんじゃないかと思えた。そこで、特に「所有権」というそれだけではよくわからないが、しかし重要な概念について掘り下げて聞いてみた。前よりはよくなったんじゃないかと思う。&lt;/p&gt;&#10;&lt;p&gt;以下のような質問をした。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;無料のブログサービスではなくWordPressを利用する理由として、「所有権」が主な理由になりうるのはなぜでしょうか。&lt;/li&gt;&#10;&lt;li&gt;無料のブログでも多くのテンプレートが用意されていたり、独自ドメインを利用したりするオプションがあるのではないでしょうか。&lt;/li&gt;&#10;&lt;li&gt;確かにプラットフォームの都合に振り回されるリスクは常に存在しますし、データの移行も難しいケースが多いようです。 そうすると、むしろWordPressを選ばない理由はなさそうですが、現実には有料のオプションを使ってもブログプラットフォームを利用するユーザーも多いようです。なぜでしょうか。&lt;/li&gt;&#10;&lt;li&gt;スモールスタートではブログプラットフォームも悪くない選択だということですね。 しかし、どこかでWordPressに移行を考えるようになる。それはどういうタイミングでしょうか。&lt;/li&gt;&#10;&lt;li&gt;所有権の有無によって、出来ることが大きく変わるわけですね。 では、ここまでの議論を長めの記事でまとめてください。 最初にタイトルをつけてください。 適切にH2の見出しをつけてください。 最後にキーワードを並べてください。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;ただ1パラグラフあたりがあまりにも短い。読み応えがない。やはり出力の仕方はまだまだ工夫の余地がある。&lt;/p&gt;&#10;</description></item><item><title>WordPress入門: なぜ今すぐにでもWordPressを使い始めるべきなのか</title><link>https://ai.hack-le.com/wordpress/</link><pubDate>Mon, 26 Jun 2023 22:09:28 +0900</pubDate><guid>https://ai.hack-le.com/wordpress/</guid><description>&lt;h2 id="wordpressとは何か"&gt;WordPressとは何か&#10;&lt;/h2&gt;&lt;p&gt;WordPressは世界中のエンジニアから初心者まで、幅広いユーザーにとって便利で使いやすいツールとされています。このコンテンツ管理システム (CMS) はウェブサイトの構築・管理を容易にする一方で、多少の学習曲線があることも事実です。それでは、なぜWordPressがあなたのブログ作成のパートナーとして最適なのかを考えてみましょう。&lt;/p&gt;&#10;&lt;h2 id="初心者にとってのwordpress"&gt;初心者にとってのWordPress&#10;&lt;/h2&gt;&lt;p&gt;無料のブログプラットフォーム（例えばBloggerやTumblrなど）は非常に使いやすく、手軽にブログを開始できます。しかし、その簡単さと引き換えに、カスタマイズの自由度が限られる場合があります。&lt;/p&gt;&#10;&lt;p&gt;それに対してWordPressは、より高度なカスタマイズと機能性を提供しますが、その反面、初めての人にとっては少々学習が必要です。特に自分でホスティングを設定したり、テーマやプラグインをインストールしたりするといった工程が含まれます。&lt;/p&gt;&#10;&lt;h2 id="wordpressの利点と挑戦"&gt;WordPressの利点と挑戦&#10;&lt;/h2&gt;&lt;p&gt;WordPressの最大の利点はその柔軟性と拡張性です。あなたのニーズに合わせてカスタマイズが可能で、何千ものテーマやプラグインが利用可能です。さらに、SEO（検索エンジン最適化）に優れているため、ブログが検索エンジンに見つけやすくなります。&lt;/p&gt;&#10;&lt;p&gt;しかしその一方で、WordPressの学習曲線を乗り越えるためには、基本的な機能から学び始め、学ぶリソースを活用し、小さなステップで進めていくことが重要です。そして何よりも、試行錯誤を恐れず、コミュニティの力を借りて問題を解決することが大切です。&lt;/p&gt;&#10;&lt;h2 id="なぜあなたはwordpressを使うべきなのか"&gt;なぜあなたはWordPressを使うべきなのか&#10;&lt;/h2&gt;&lt;p&gt;WordPressを使うことで、ブログの完全なコントロールと所有権を保つことができます。これにより、あなたのサイトの見た目や機能性、モネタイゼーション、SEOなど、全てを自分で決定することができます。&lt;/p&gt;&#10;&lt;p&gt;また、大規模で活発なWordPressのコミュニティは、疑問や問題に対するサポートを提供します。そして、何よりもWordPressは成熟しており、世界中で広く使われているため、その開発と改善は継続的に行われています。&lt;/p&gt;&#10;&lt;p&gt;以上の理由から、WordPressはあなたがブログを開始するのに最適なプラットフォームであると言えます。最初は少し難しく感じるかもしれませんが、その可能性と柔軟性は、学習時間を投資する価値があります。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;WordPressを使用することで、あなた自身が自分のウェブサイトやブログを完全に制御し、カスタマイズする能力を持つことができます。最初は少し学習が必要かもしれませんが、その後の利益と成功はその労力に見合うものとなるでしょう。&lt;/p&gt;&#10;&lt;p&gt;キーワード: WordPress, ブログ, コンテンツ管理システム, CMS, 学習曲線, プラグイン, テーマ, SEO, コミュニティ, カスタマイズ, 柔軟性, 拡張性, モネタイゼーション, 所有権&lt;/p&gt;&#10;&lt;h2 id="質問と寸評"&gt;質問と寸評&#10;&lt;/h2&gt;&lt;p&gt;……という記事をChatGPT-4に書かせてみたわけだが、ちょっとこれを読んでWordPressを使おうという気になる人がいるかは甚だ疑問である。話が抽象的過ぎてなんとも言えない。ブログの完全なコントロールと所有権のところをもっと深掘りしたらよかったのだろうか？たとえばうざったい広告を置かなくて済むとか、プラットフォーマーから理不尽な規制をかけられないとか……。アク禁NGも自由にできるとか。&lt;/p&gt;&#10;&lt;p&gt;うーん、なるほど、そう考えると、やっぱり質問の仕方に問題があったかな。なお下記のような質問をChatGPT-4にした。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;WordPressはエンジニアにとっては便利で手軽なソフトだが、多くの人にとって難しいツールなのだろうか？&lt;/li&gt;&#10;&lt;li&gt;そのとおりだと思うが、ネットで実際にブログをやっている人たちの話を見ると、WordPressはどちらかというとチャレンジだと捉えられているように思える。恐らくはいわゆる無料ブログなんかと比べてだと思うが。自分でサイトを運用するということにハードルを感じる人は多いようだ。&lt;/li&gt;&#10;&lt;li&gt;ブログをやる限りは是非挑戦してほしいし、その価値があると思うが、難しさをかんじている人にはどう勧めたら良いだろうか。&lt;/li&gt;&#10;&lt;li&gt;使い始めた初心者にはそのアドバイスで良いと思うが、これから使うか悩んでいる人には、使うとこんないいことがあるよと、思ってもらえるようなことを言う必要があるだろう。&lt;/li&gt;&#10;&lt;li&gt;ここまでの話を長めの記事にまとめてください。&lt;/li&gt;&#10;&lt;li&gt;記事には、以下の条件を指定します。&lt;/li&gt;&#10;&lt;li&gt;最初にタイトルをつける&lt;/li&gt;&#10;&lt;li&gt;適度に見出しをつける&lt;/li&gt;&#10;&lt;li&gt;最後にキーワードを並べる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;フォーマットだけは遵守しているね。&lt;/p&gt;&#10;</description></item></channel></rss>