<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ JavaScript - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ エキスパートの手によるプログラミングチュートリアル記事を幅広く掲載。ウェブ開発、データサイエンス、DevOps、セキュリティ、開発者としてのキャリアなどについて学びましょう。 ]]>
        </description>
        <link>https://www.freecodecamp.org/japanese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ JavaScript - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/japanese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Fri, 22 May 2026 15:16:04 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/japanese/news/tag/javascript/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ JavaScript で文字列を数値に変換する方法 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript では、文字列を数値に変換する方法がたくさんあります。それぞれコードではどのように書くのでしょうか？ この記事では、文字列を数値に変換する 11 の方法を紹介します。 こちらは、JavaScript で文字列を数値に変換する方法を示すインタラクティブなスクリーンです: JavaScript で文字列を数値に変換する方法: Number() 関数を使用する 文字列を数値に変換する方法の一つは、Number() 関数を使用することです。 この例では、quantity という名前の文字列があり、その値は "12" です。 const quantity = "12"; typeof 演算子を quantity に使用すると、その型は string として返されます。 console.log(typeof quantity); Number 関数を使って、quantity を次のように数値に変換できます: Number(quantity) 再び typeof 演算子を使用して、それが数値になったことを確認できます。 console.log(typeo ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-convert-a-string-to-a-number-in-javascript/</link>
                <guid isPermaLink="false">66caff161ba26f044de398f6</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Beginners ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Charlotte Stone ]]>
                </dc:creator>
                <pubDate>Mon, 25 Nov 2024 11:59:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2024/08/volkan-olmez-aG-pvyMsbis-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-convert-a-string-to-a-number-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Convert a String to a Number in JavaScript</a>
      </p><p>JavaScript では、文字列を数値に変換する方法がたくさんあります。それぞれコードではどのように書くのでしょうか？</p><p>この記事では、文字列を数値に変換する 11 の方法を紹介します。</p><h3 id="-javascript-">こちらは、JavaScript で文字列を数値に変換する方法を示すインタラクティブなスクリーンです:</h3><p></p><!--kg-card-begin: html--><iframe src="https://v1.scrimba.com/scrim/co2894c679bc693326603ac73?embed=freecodecamp%2Cmini-header&amp;a=354.0.3.L1_22" width="100%" height="420" title="Embedded content" loading="lazy"></iframe><!--kg-card-end: html--><h2 id="javascript-number-">JavaScript で文字列を数値に変換する方法: <code>Number()</code> 関数を使用する</h2><p>文字列を数値に変換する方法の一つは、<code>Number()</code> 関数を使用することです。</p><p>この例では、<code>quantity</code> という名前の文字列があり、その値は <code>"12"</code> です。</p><pre><code class="language-JavaScript">const quantity = "12";
</code></pre><p><code>typeof</code> 演算子を <code>quantity</code> に使用すると、その型は <code>string</code> として返されます。</p><pre><code class="language-JavaScript">console.log(typeof quantity);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/08/Screen-Shot-2022-05-01-at-9.50.17-AM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-9.50.17-AM" width="172" height="160" loading="lazy"></figure><p><code>Number</code> 関数を使って、<code>quantity</code> を次のように数値に変換できます:</p><pre><code class="language-JavaScript">Number(quantity)</code></pre><p>再び <code>typeof</code> 演算子を使用して、それが数値になったことを確認できます。</p><pre><code class="language-js">console.log(typeof Number(quantity));</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/08/Screen-Shot-2022-05-01-at-9.57.35-AM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-9.57.35-AM" width="164" height="154" loading="lazy"></figure><p>数値に変換できない値を渡そうとすると、返り値は <code>NaN</code>「Not a Number」になります。</p><pre><code class="language-JavaScript">console.log(Number("awesome"));</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/08/Screen-Shot-2022-05-01-at-10.00.34-AM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-10.00.34-AM" width="184" height="174" loading="lazy"></figure><h2 id="javascript-parseint-">JavaScript で文字列を数値に変換する方法: <code>parseInt()</code> 関数を使用する</h2><p>文字列を数値に変換するもう一つの方法は、<code>parseInt()</code> 関数を使用することです。この関数は文字列とオプションの基数 (radix) を受け取ります。</p><p>基数は、記数法の底を表す 2 から 36 の間の数値です。例えば、基数が 2 の場合は 2 進数を表し、基数が 10 の場合は 10 進数を表します。</p><p>先ほどの <code>quantity</code> 変数を使用して、その文字列を数値に変換することができます。</p><pre><code class="language-JavaScript">const quantity = "12";

console.log(parseInt(quantity, 10));</code></pre><p><code>quantity</code> 変数を <code>"12.99"</code> に変更した場合、<code>parseInt()</code> を使用して得られる結果は数値の <code>12.99</code> になるでしょうか？</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-10.45.08-AM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-10.45.08-AM" width="158" height="184" loading="lazy"></figure><p>ご覧のとおり、結果は丸められた整数になります。浮動小数点数を返したい場合は、<code>parseFloat()</code> を使用する必要があります。</p><h2 id="javascript-parsefloat-">JavaScript で文字列を数値に変換する方法: <code>parseFloat()</code> 関数を使用する</h2><p><code>parseFloat()</code> 関数は値を受け取り、浮動小数点数を返します。浮動小数点数の例としては、<code>12.99</code> や <code>3.14</code> などがあります。</p><p>以前の例を修正して <code>parseFloat()</code> を使用すると、結果は浮動小数点数の 12.99 になります。</p><pre><code class="language-JavaScript">const quantity = "12.99";

console.log(parseFloat(quantity));
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-10.55.03-AM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-10.55.03-AM" width="170" height="142" loading="lazy"></figure><p>文字列に先頭または末尾の空白が含まれていても、<code>parseFloat()</code> はその文字列を浮動小数点数に変換します。</p><pre><code class="language-JavaScript">const quantity = "   12.99    ";

console.log(parseFloat(quantity));
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-10.55.03-AM-1.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-10.55.03-AM-1" width="170" height="142" loading="lazy"></figure><p>文字列の最初の文字が数値に変換できない場合、<code>parseFloat()</code> は <code>NaN</code> を返します。</p><pre><code class="language-JavaScript">const quantity = "F12.99";

console.log(parseFloat(quantity));
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-11.08.33-AM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-11.08.33-AM" width="172" height="162" loading="lazy"></figure><h2 id="javascript-">JavaScript で文字列を数値に変換する方法: 単項プラス演算子 (<code>+</code>) を使用する</h2><p>単項プラス演算子 (<code>+</code>) を使用すると、文字列を数値に変換できます。この演算子はオペランドの前に置かれます。</p><pre><code class="language-JavaScript">const quantity = "12";

console.log(+quantity);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-10.45.08-AM-1.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-10.45.08-AM-1" width="158" height="184" loading="lazy"></figure><p>単項プラス演算子 (<code>+</code>) を使用して、文字列を浮動小数点数に変換することもできます。</p><pre><code class="language-JavaScript">const quantity = "12.99";

console.log(+quantity);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-10.55.03-AM-2.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-10.55.03-AM-2" width="170" height="142" loading="lazy"></figure><p>文字列の値が数値に変換できない場合、結果は <code>NaN</code> になります。</p><pre><code class="language-JavaScript">const quantity = "awesome";

console.log(+quantity);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-11.08.33-AM-1.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-11.08.33-AM-1" width="172" height="162" loading="lazy"></figure><h2 id="javascript-1-">JavaScript で文字列を数値に変換する方法: 文字列を数値の 1 と掛け算する</h2><p>文字列を数値に変換する別の方法は、基本的な数学演算を使用することです。文字列の値に 1 を掛けると、数値が返されます。</p><pre><code class="language-JavaScript">const quantity = "12";

console.log(quantity * 1);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-10.45.08-AM-2.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-10.45.08-AM-2" width="158" height="184" loading="lazy"></figure><p>ご覧のとおり、<code>quantity</code> の値に 1 を掛けると、数値の <code>12</code> が返されます。しかし、これはどのように機能するのでしょうか？</p><p>この例では、JavaScript は文字列の値を数値に変換し、その後に数学演算を実行しています。文字列が数値に変換できない場合、数学演算は機能せず、<code>NaN</code> が返されます。</p><pre><code class="language-JavaScript">const quantity = "awesome";

console.log(quantity * 1);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-11.08.33-AM-2.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-11.08.33-AM-2" width="172" height="162" loading="lazy"></figure><p>この方法は浮動小数点数にも適用できます。</p><pre><code class="language-JavaScript">const quantity = "10.5";

console.log(quantity * 1);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-11.56.19-AM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-11.56.19-AM" width="152" height="178" loading="lazy"></figure><h2 id="javascript-1--1">JavaScript で文字列を数値に変換する方法: 文字列を数値の 1 で割る</h2><p>1 を掛ける代わりに、文字列を 1 で割ることもできます。JavaScript は文字列の値を数値に変換し、その後に数学演算を実行します。</p><pre><code class="language-JavaScript">const quantity = "10.5";

console.log(quantity / 1);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-11.56.19-AM-1.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-11.56.19-AM-1" width="152" height="178" loading="lazy"></figure><h2 id="javascript-0-">JavaScript で文字列を数値に変換する方法: 文字列から数値の 0 を引く</h2><p>別の方法として、文字列から 0 を引くこともできます。この場合も同様に、JavaScript は文字列の値を数値に変換し、その後に数学演算を実行します。</p><pre><code class="language-JavaScript">const quantity = "19";

console.log(quantity - 0);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.11.59-PM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.11.59-PM" width="158" height="160" loading="lazy"></figure><h2 id="javascript-not-">JavaScript で文字列を数値に変換する方法: ビット単位の NOT 演算子 (<code>~</code>) を使用する</h2><p>ビット単位の NOT 演算子 (<code>~</code>) はオペランドのビットを反転させ、その値を 32 ビット符号付き整数に変換します。32 ビット符号付き整数は、32 ビット (または 4 バイト) で表される整数値です。</p><p>数値に対して 1 つのビット単位の NOT 演算子 (<code>~</code>) を使用すると、以下の操作が実行されます: <code>-(x + 1)</code></p><pre><code class="language-JavaScript">console.log(~19);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.20.18-PM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.20.18-PM" width="152" height="150" loading="lazy"></figure><p>しかし、ビット単位の NOT 演算子 (<code>~</code>) を 2 回使用すると、文字列を数値に変換することができます。</p><pre><code class="language-JavaScript">const quantity = "19";

console.log(~~quantity);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.11.59-PM-1.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.11.59-PM-1" width="158" height="160" loading="lazy"></figure><p>この方法は浮動小数点数には適用できません。結果は整数になるためです。</p><pre><code class="language-JavaScript">const quantity = "19.99";

console.log(~~quantity);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.11.59-PM-2.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.11.59-PM-2" width="158" height="160" loading="lazy"></figure><p>この方法を数値以外の文字に対して使用した場合、結果はゼロになります。</p><pre><code class="language-JavaScript">const quantity = "awesome";

console.log(~~quantity);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.32.45-PM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.32.45-PM" width="174" height="156" loading="lazy"></figure><p>この方法には制限があり、非常に大きな値の場合には動作が不安定になることがあります。数値が 32 ビット符号付き整数の範囲内に収まっていることを確認することが重要です。</p><pre><code class="language-JavaScript">const quantity = "2700000000";

console.log(~~quantity);
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.36.16-PM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.36.16-PM" width="230" height="160" loading="lazy"></figure><p>ビット単位の NOT 演算子 (<code>~</code>) について詳しく知りたい場合は、<a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Bitwise_NOT">ドキュメント</a>を参照してください。</p><h2 id="javascript-math-floor-">JavaScript で文字列を数値に変換する方法: <code>Math.floor()</code> 関数を使用する</h2><p>文字列を数値に変換する方法として、他には <code>Math.floor()</code> 関数も使用できます。この関数は数値を最も近い整数に切り捨てます。</p><pre><code class="language-JavaScript">const quantity = "13.4";

console.log(Math.floor(quantity));
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.44.53-PM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.44.53-PM" width="184" height="180" loading="lazy"></figure><p>以前の例と同様に、数値以外の文字を使用しようとすると、結果は <code>NaN</code> になります。</p><pre><code class="language-JavaScript">const quantity = "awesome";

console.log(Math.floor(quantity));
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-11.08.33-AM-3.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-11.08.33-AM-3" width="172" height="162" loading="lazy"></figure><h2 id="javascript-math-floor--1">JavaScript で文字列を数値に変換する方法: <code>Math.floor()</code> 関数を使用する</h2><p><code>Math.ceil()</code> 関数は、数値を最も近い整数に切り上げます。</p><pre><code class="language-JavaScript">const quantity = "7.18";

console.log(Math.ceil(quantity));
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.48.15-PM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.48.15-PM" width="166" height="146" loading="lazy"></figure><h2 id="javascript-math-round-">JavaScript で文字列を数値に変換する方法: <code>Math.round()</code> 関数を使用する</h2><p><code>Math.round()</code> 関数は、数値を最も近い整数に丸めます。</p><p>例えば、値が <code>6.3</code> の場合、<code>Math.round()</code> は <code>6</code> を返します。</p><pre><code class="language-JavaScript">const quantity = "6.3";

console.log(Math.round(quantity));
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.50.20-PM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.50.20-PM" width="164" height="156" loading="lazy"></figure><p>しかし、その値を <code>6.5</code> に変更すると、<code>Math.round()</code> は <code>7</code> を返します。</p><pre><code class="language-js">const quantity = "6.5";

console.log(Math.round(quantity));</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2024/11/Screen-Shot-2022-05-01-at-12.51.35-PM.png" class="kg-image" alt="Screen-Shot-2022-05-01-at-12.51.35-PM" width="172" height="156" loading="lazy"></figure><h2 id="-">結論</h2><p>この記事では、JavaScript を使用して文字列を数値に変換する 11 の方法を紹介しました。</p><p>この記事で説明した 11 の方法は以下の通りです。</p><ul><li><code>Number()</code> 関数を使用する</li><li><code>parseInt()</code> 関数を使用する</li><li><code>parseFloat()</code> 関数を使用する</li><li>単項プラス演算子 (<code>+</code>) を使用する</li><li>文字列に数値の 1 を掛ける</li><li>文字列を数値の 1 で割る</li><li>文字列から数値の 0 を引く</li><li>ビット単位の NOT 演算子 (<code>~</code>) を使用する</li><li><code>Math.floor()</code> 関数を使用する</li><li><code>Math.ceil()</code> 関数を使用する</li><li><code>Math.round()</code> 関数を使用する</li></ul><p>この記事を楽しんでいただけたなら幸いです。JavaScript の学習、頑張ってください！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript における非同期処理 – コールバック関数、Promise、Async/Await ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript をある程度学習している方なら、「非同期」という言葉を聞いたことがあるかもしれません。 それは JavaScript が非同期言語だからなのですが、そもそも非同期とはどういう意味なのでしょうか？この記事では、非同期の概念をできるだけわかりやすく説明しようと思います。 同期 vs 非同期 本題に入る前に、同期と非同期という言葉にフォーカスしてみましょう。 デフォルトでは、JavaScript は同期的でシングルスレッドのプログラミング言語です。 つまり、命令は一つずつしか実行できず、並列には実行できません。 こちらのコードを見てみましょう:  let a = 1; let b = 2; let sum = a + b; console.log(sum); 上記のコードはとてもシンプルです。二つの数値を合計し、その合計値をブラウザのコンソールに出力しています。インタプリタがこれらの命令を一つずつ順番に実行しているのです。 しかし、この仕組みにはデメリットがあります。例えば、何かサイズの大きいデータをデータベースから取得して、そのデータを画面上に表示すると ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/asynchronous-javascript-explained/</link>
                <guid isPermaLink="false">65e555331059c803f19b4803</guid>
                
                    <category>
                        <![CDATA[ Async/Await ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Yuki Shibata ]]>
                </dc:creator>
                <pubDate>Thu, 26 Sep 2024 07:02:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2024/03/Purple-Minimal-We-Are-Hiring-Twitter-Post--1--1.gif" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/asynchronous-javascript-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Asynchronous JavaScript – Callbacks, Promises, and Async/Await Explained</a>
      </p><p>JavaScript をある程度学習している方なら、「非同期」という言葉を聞いたことがあるかもしれません。</p><p>それは JavaScript が非同期言語だからなのですが、そもそも非同期とはどういう意味なのでしょうか？この記事では、非同期の概念をできるだけわかりやすく説明しようと思います。</p><h1 id="-vs-"><strong>同期 vs 非同期</strong></h1><p>本題に入る前に、同期と非同期という言葉にフォーカスしてみましょう。</p><p>デフォルトでは、JavaScript は同期的でシングルスレッドのプログラミング言語です。</p><p>つまり、命令は一つずつしか実行できず、並列には実行できません。</p><p>こちらのコードを見てみましょう: </p><pre><code class="language-javascript">let a = 1;
let b = 2;
let sum = a + b;
console.log(sum);</code></pre><p>上記のコードはとてもシンプルです。二つの数値を合計し、その合計値をブラウザのコンソールに出力しています。インタプリタがこれらの命令を一つずつ順番に実行しているのです。</p><p>しかし、この仕組みにはデメリットがあります。例えば、何かサイズの大きいデータをデータベースから取得して、そのデータを画面上に表示するとします。インタプリタがデータ取得のコードまで到達した時、そのデータ取得が完了するまで他のコードの実行はブロックされてしまいます。</p><p>「データ取得の処理にそんなに時間がかかるわけがない」と思われたかもしれません。しかし、このようなデータ取得を複数箇所で行うことを想像してみてください。短時間の処理が積み重なった結果、ユーザーにとって無視できない遅延につながってしまうでしょう。</p><p>幸運なことに、JavaScript の同期処理の問題は、非同期処理の登場により解決されました。</p><p>非同期処理のコードは、今すぐ実行を開始し、後で実行を終了できるコードだと考えてください。JavaScript が非同期で実行される場合、必ずしも先ほどのコードのように命令が順番に実行されるとは限りません。</p><p>この非同期処理を適切に実装するために、開発者達が長年にわたって使用してきたいくつかの異なるソリューションがあります。それぞれの解決策は、その解決策以前の解決策を改良することで、コードをより最適化し、複雑になった場合でも理解しやすくしています。</p><p>JavaScript の非同期処理をさらに理解するために、コールバック関数、Promise、そして async と await について説明します。</p><h1 id="-"><strong>コールバック関数とは？</strong></h1><p>コールバック関数とは、他の関数に渡され、その関数内で呼び出されてタスクを実行する関数のことです。</p><p>混乱してきましたか？実装しながら詳しく見ていきましょう。</p><pre><code class="language-javascript">console.log('fired first');
console.log('fired second');

setTimeout(()=&gt;{
    console.log('fired third');
},2000);

console.log('fired last');</code></pre><p>上記のコードは、ブラウザのコンソールにログを出力する小さなプログラムです。しかし、見慣れないコードがありますね。インタプリタは一つ目の命令を実行し、次に二つ目の命令を実行します。しかし、三つ目の処理はスキップし、四つ目の命令を実行します。</p><p><code>setTimeout</code> は JavaScript の関数で、二つのパラメータを取ります。最初の引数は関数で、二番目の引数はその関数が実行されるまでの時間をミリ秒単位で指定します。これで、コールバック関数の定義が見えてきたのではないでしょうか。</p><p>この場合、<code>setTimeout</code> 内の関数は 2 秒後 (2000 ミリ秒後) に実行される必要があります。他の命令が実行され続けている間に、この関数がブラウザの別の場所で実行されることを想像してみてください。そして 2 秒後、関数の実行結果が返されます。</p><p>そのため、上記のコードを実行すると、次のようになります。</p><pre><code class="language-javascript">fired first
fired second
fired last
fired third</code></pre><p><code>setTimeout</code> 内の関数が結果を返す前に、最後の実行結果がログに出力されていることがわかります。この方法を使ってデータベースからデータを取得したとしましょう。ユーザーがデータベースからの取得結果を待っている間、実行中の処理が中断されることはありません。</p><p>この方法は特定条件下ではとても効率的です。しかし、開発者はコード内で一度に複数のリソース先へ処理の呼び出しをすることがあります。このような呼び出しを行おうとすると、コールバックは非常に読みづらく、保守しづらくなるまでネストされていきます。これは<strong>コールバック地獄</strong>と言われます。</p><p>この問題を解決するために、Promise が導入されました。</p><h1 id="promise-">Promise とは？</h1><p>人が約束をするのはよく聞く話です。無条件でお金を送ると約束したいとこ、クッキーの瓶を勝手に触らないと約束した子供…しかし、JavaScript における約束 (Promise) は少し違います。</p><p>JavaScript の文脈では、約束 (Promise) とは、実行するまでに時間がかかることです。Promise は以下の 2 種類のうちどちらかの結果を返します: </p><ul><li>命令を実行し、Promise を解決する</li><li>命令の実行途中で何らかのエラーが発生し、Promise が拒否される</li></ul><p>Promise は、コールバック関数の問題を解決するために登場しました。Promise は <code>resolve</code> と <code>reject</code> の 2 つの関数を引数として受け取ります。<code>resolve</code> は成功時、<code>reject</code> はエラー発生時と覚えておきましょう。</p><p>実際のコードで Promise を見てみましょう: </p><pre><code class="language-javascript">const getData = (dataEndpoint) =&gt; {
   return new Promise ((resolve, reject) =&gt; {
     // エンドポイントへのリクエスト;
     
     if(request is successful){
       // リクエスト成功後のコード;
       resolve();
     }
     else if(there is an error){
       reject();
     }
   
   });
};</code></pre><p>上記のコードは、あるエンドポイントへのリクエストを実行する関数内にある Promise です。Promise は、前述したように <code>resolve</code> と <code>reject</code> を受け取ります。</p><p>例えば、API エンドポイントへリクエスト後、リクエストが成功すれば、Promise を resolve (解決) し、そのレスポンスを使って実行を続けます。しかし、エラーがあれば、Promise は reject (拒否) されます。</p><p>Promise は、<strong>プロミスチェーン</strong>と呼ばれる方法で、コールバック地獄によって引き起こされる問題を解決する最適な方法です。この方法を使えば、複数の API エンドポイントから順次、より少ないコードと簡単なメソッドでデータを取得することができます。</p><p>しかし、さらに良い方法があります！以下の方法は、JavaScript でデータや API 呼び出しをする際によく使われるので、ご存知の方も多いかもしれません。</p><h1 id="async-await-">async と await とは？</h1><p>結局、コールバック関数のようにプロミスチェーンで Promise を繋げていくのはコードの肥大化や難読化を引き起こします。それを解決するために登場したのが async と await です。</p><p>以下のように async 関数を定義できます:</p><pre><code class="language-javascript">const asyncFunc = async() =&gt; {

}</code></pre><p>async 関数を呼び出すと必ず Promise が返されることに注意してください。こちらを見てください:</p><pre><code class="language-javascript">const test = asyncFunc();
console.log(test);</code></pre><p>上記のコードをブラウザのコンソールで実行すると、<code>asyncFunc</code> が Promise を返していることが確認できます。</p><p>コードを分解して、以下の小さなコードについて考えてみましょう</p><pre><code class="language-javascript">const asyncFunc = async () =&gt; {
	const response = await fetch(resource);
   	const data = await response.json();
}</code></pre><p>前述した通り、<code>async</code> というキーワードは、非同期関数を定義するために使うものです。では、<code>await</code> はどうでしょう？<code>await</code> は、Promise が解決されるまで、response 変数に fetch メソッドの結果が代入されるのを遅らせます。Promise が解決されると、fetch メソッドの結果を response 変数に代入できるようになります。</p><p>同じことが三行目でも起きます。<code>.json</code> メソッドは Promise を返すため、<code>await</code> を使って Promise が解決されるまで代入を遅らせることができます。</p><h1 id="--1"><strong>コードをブロックするかしないか</strong></h1><p>「遅らせる」というと、async や await を実装することでコードの実行がブロックされるのではないか、リクエストに時間がかかりすぎるのではないか、と思うかもしれません。</p><p>実際はそうなることはありません。非同期関数の中にあるコードはブロックされますが、プログラム全体の実行には何の影響もありません。コードの実行はこれまで通り非同期です。こちらのコードを見てください。</p><pre><code>const asyncFunc = async () =&gt; {
	const response = await fetch(resource);
   	const data = await response.json();
}

console.log(1);
cosole.log(2);

asyncFunc().then(data =&gt; console.log(data));

console.log(3);
console.log(4);
</code></pre><p>ブラウザのコンソールでの出力結果は以下のようになります:</p><pre><code>1
2
3
4
data returned by asyncFunc</code></pre><p>asyncFunc 関数が結果を返すまでは、他のコードが実行され続けたことがわかります。</p><h1 id="--2"><strong>まとめ</strong></h1><p>この記事では、各コンセプトを深く扱うことはしませんでしたが、JavaScript における非同期処理がどのようなものなのか、そして注意すべき点をいくつか紹介できたかと思います。</p><p>これは JavaScript の非常に重要な部分であり、この記事は表面をなぞったに過ぎません。とはいえ、この記事がこれらの概念を理解する助けになれば幸いです。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript でページをリフレッシュする方法 – JS でページを再読み込みする方法 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript は、動的でインタラクティブなウェブアプリケーションを作成するための多用途なプログラミング言語です。ウェブ開発における一般的なタスクの一つに、ページのコンテンツを更新したり特定のアクションをトリガーするための、ウェブページのリフレッシュ (再読み込み) があります。 この記事では、JavaScript でページをリフレッシュするさまざまな方法を探り、それぞれのアプローチの長所と短所を理解します。 JavaScript でページをリフレッシュする理由 ウェブページをリフレッシュすることは、さまざまなシナリオで役立ちます。例えば:  1. コンテンツ更新:     ウェブページのコンテンツが動的で頻繁に変わる場合、最新のデータや情報を表示するためにページをリフレッシュする必要があるかもしれません。これはニュースサイト、株式市場のトラッカー、天気アプリなどでよく見られます。  2. フォーム送信:     ウェブページでフォームを送信した後、成功メッセージを表示したり、新しい送信のためにフォームをリセットするためにページをリフレッシュしたくなるかもしれません。  3 ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/javascript-refresh-page-how-to-reload-a-page-in-js/</link>
                <guid isPermaLink="false">66919d85327328043a3383cc</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ WEB DEVELOPMENT ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Charlotte Stone ]]>
                </dc:creator>
                <pubDate>Tue, 23 Jul 2024 14:23:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2024/07/cover-template--8-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/javascript-refresh-page-how-to-reload-a-page-in-js/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Refresh Page – How to Reload a Page in JS</a>
      </p><p>JavaScript は、動的でインタラクティブなウェブアプリケーションを作成するための多用途なプログラミング言語です。ウェブ開発における一般的なタスクの一つに、ページのコンテンツを更新したり特定のアクションをトリガーするための、ウェブページのリフレッシュ (再読み込み) があります。</p><p>この記事では、JavaScript でページをリフレッシュするさまざまな方法を探り、それぞれのアプローチの長所と短所を理解します。</p><h2 id="javascript-">JavaScript でページをリフレッシュする理由</h2><p>ウェブページをリフレッシュすることは、さまざまなシナリオで役立ちます。例えば:</p><!--kg-card-begin: markdown--><ol>
<li>コンテンツ更新: ウェブページのコンテンツが動的で頻繁に変わる場合、最新のデータや情報を表示するためにページをリフレッシュする必要があるかもしれません。これはニュースサイト、株式市場のトラッカー、天気アプリなどでよく見られます。</li>
<li>フォーム送信: ウェブページでフォームを送信した後、成功メッセージを表示したり、新しい送信のためにフォームをリセットするためにページをリフレッシュしたくなるかもしれません。</li>
<li>状態リセット: 場合によっては、ウェブページの状態をリセットしたり、特定のデータをクリアして再スタートしたいことがあります。ページをリフレッシュすることでこれを達成できます。</li>
</ol>
<!--kg-card-end: markdown--><p>それでは、JavaScript でページをリフレッシュするさまざまな方法を探ってみましょう。</p><h2 id="-1-location-reload-">方法 1: <code>location.reload()</code> を使用してページをリフレッシュする方法</h2><p>JavaScript でページをリフレッシュする最も簡単な方法は、<code>location.reload()</code> メソッドを使用することです。このメソッドは、現在のウェブページをサーバーから再読み込みし、現在のコンテンツを破棄して最新のコンテンツを読み込みます。</p><pre><code class="language-JavaScript">// Refresh the page
location.reload();
</code></pre><h3 id="location-reload-">location.reload() を使用する利点</h3><ul><li>シンプルで使いやすい。</li><li>サーバーからページ全体を再読み込みするため、最新のコンテンツを取得できる。</li></ul><h3 id="location-reload--1">location.reload() を使用する欠点</h3><ul><li>ページの現在のコンテンツが破棄されるため、ユーザーの入力やデータが失われる可能性がある。</li><li>ページが再読み込みされる際にちらつきが発生し、ユーザーエクスペリエンスに影響を与えることがある。</li></ul><h2 id="-2-location-replace-">方法 2: <code>location.replace()</code> を使用してページをリフレッシュする方法</h2><p>JavaScript でページをリフレッシュする別の方法として、<code>location.replace()</code> メソッドを使用する方法があります。このメソッドは現在のウェブページの URL を新しい URL で置き換えることで、新しいコンテンツでページを再読み込みします。</p><p>このコードをコンソールで試すと、現在の URL が表示されることに気付くでしょう。</p><pre><code class="language-JavaScript">console.log(location.href)</code></pre><p>これは、<code>location.replace()</code> メソッドを使用して現在のウェブページの URL を新しい URL (同じ URL) で置き換えると、ページがリフレッシュされることを意味します。</p><pre><code class="language-JavaScript">// Refresh the page by replacing the URL with itself
location.replace(location.href);</code></pre><h3 id="location-replace-">location.replace() を使用する利点</h3><ul><li>新しいコンテンツでページを迅速にリロードする方法である。</li><li>現在のページのコンテンツを保持し、URL のみを置き換えるため、ユーザーの入力やデータの損失を回避できる。</li></ul><h3 id="location-replace--1">location.replace() を使用する欠点</h3><ul><li>ページの URL 全体を置き換えるため、現在のブラウジング履歴が失われる可能性がある。</li><li>ウェブページが新しいウィンドウやタブで開かれている場合など、一部のシナリオで機能しないことがある。</li></ul><h2 id="-3-location-reload-true-">方法 3: <code>location.reload(true)</code> を使用してページをリフレッシュする方法</h2><p><code>location.reload()</code> メソッドは、<code>forceGet</code> というブール型パラメータも受け入れます。これを <code>true</code> に設定すると、ページがキャッシュされていてもサーバーから強制的に再読み込みされます。</p><p>これは、ページがキャッシュされていても最新のコンテンツを確実に取得したい場合に便利です。</p><pre><code class="language-JavaScript">// Refresh the page and bypass the cache
location.reload(true);</code></pre><h3 id="location-reload-true-">location.reload(true) を使用する利点</h3><ul><li>ページがキャッシュされていても、最新のコンテンツをサーバーから確実に取得できる。</li></ul><h3 id="location-reload-true--1">location.reload(true) を使用する欠点</h3><ul><li>ページの現在のコンテンツが破棄されるため、ユーザーの入力やデータが失われる可能性がある。</li><li>ページが再読み込みされる際にちらつきが発生し、ユーザーエクスペリエンスに影響を与えることがある。</li></ul><h2 id="-4-location-href-">方法 4: <code>location.href</code> を使用してページをリフレッシュする方法</h2><p>JavaScript でページをリフレッシュするもう 1 つの方法として、<code>location.href</code> プロパティを使用してウェブページの URL を同じ URL に再設定する方法があります。これにより、ページが新しい URL で再読み込みされ、ページのリフレッシュがトリガーされます。</p><pre><code class="language-JavaScript">// Refresh the page by setting the URL to itself
location.href = location.href;</code></pre><h3 id="location-href-">location.href を使用する利点</h3><ul><li>ページをリフレッシュするためのシンプルで効果的な方法である。</li><li>現在のページのコンテンツを保持し、URL のみを更新するため、ユーザーの入力やデータの損失を回避できる。</li></ul><h3 id="location-href--1">location.href を使用する欠点</h3><ul><li>ページの URL 全体を置き換えるため、現在のブラウジング履歴が失われる可能性がある。</li><li>ウェブページが新しいウィンドウやタブで開かれている場合など、一部のシナリオで機能しないことがある。</li></ul><h2 id="-5-location-reload-">方法 5: <code>location.reload()</code> を遅延させてページをリフレッシュする方法</h2><p>ページをリフレッシュする前に遅延を追加したい場合は、<code>setTimeout()</code> 関数を <code>location.reload()</code> メソッドと組み合わせて使うことができます。</p><p>これにより、ページがリロードされる前の遅延時間をミリ秒単位で指定でき、リフレッシュのタイミングを制御することができます。</p><pre><code class="language-JavaScript">// Refresh the page after a delay of 3 seconds
setTimeout(function(){
    location.reload();
}, 3000); // 3000 milliseconds = 3 seconds</code></pre><h3 id="location-reload--2">location.reload() を遅延させて使用する利点</h3><ul><li>遅延を追加することでページリフレッシュのタイミングを制御できる。</li><li>特定のイベントやアクションの後にページをリフレッシュしたい場合に柔軟に対応できる。</li></ul><h3 id="location-reload--3">location.reload() を遅延させて使用する欠点</h3><ul><li>ページリフレッシュに遅延が発生するため、ユーザーエクスペリエンスに影響を与えることがある。</li><li>不安定なまたは遅いネットワーク接続のシナリオでは期待通りに動作しないことがある。</li></ul><h2 id="-">まとめ</h2><p>この記事では、JavaScript でページをリフレッシュするさまざまな方法を学びました。それぞれの方法には利点と欠点があり、それらを考慮してウェブ開発プロジェクトに最適な方法を選ぶことができるようになりましたね。</p><p>ページをリフレッシュする際には、ユーザーエクスペリエンスやデータの損失、ブラウジング履歴への影響を考慮することが重要です。</p><p>この記事が JavaScript でウェブページをリロードする方法を理解し、特定のユースケースに適した方法を選ぶ手助けになれば幸いです。</p><p>Happy coding!</p><p>そしてさらなる学習の旅に出かけましょう！<a href="https://joelolawanle.com/posts">私のブログ</a>でも他の記事をご覧いただけます。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JSON Stringify の例 - JavaScript で JSON オブジェクトを解析する方法 ]]>
                </title>
                <description>
                    <![CDATA[ JSON、または JavaScript Object Notation は、私たちの身の回りにあります。ウェブアプリを使用したことがあれば、そのウェブアプリがデータを構造化したり、保存したり、サーバーとデバイス間で送信したりするために JSON を使用している可能性が非常に高いでしょう。 この記事では、まず JSON と JavaScript の違いについて簡単に説明し、次にブラウザと Node.js プロジェクトで JSON を解析するさまざまな方法について説明します。 JSON と JavaScript の違い JSON は通常の JavaScript のように見えますが、JSON はテキストファイルと同様のデータ形式と考える方が良いでしょう。JSON は JavaScript の構文を基にしているため、非常に似ています。 JSON オブジェクトと JSON 配列を見て、それらを JavaScript の物と比較してみましょう。 JSON オブジェクトと JavaScript オブジェクトリテラルの違い まず、こちらが JSON オブジェクトです: {   "name": ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/json-stringify-example-how-to-parse-a-json-object-with-javascript/</link>
                <guid isPermaLink="false">663224596851400400c0dbfa</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JSON ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Charlotte Stone ]]>
                </dc:creator>
                <pubDate>Fri, 17 May 2024 08:58:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2024/05/602358380a2838549dcc2554.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/json-stringify-example-how-to-parse-a-json-object-with-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JSON Stringify Example – How to Parse a JSON Object with JS</a>
      </p><p>JSON、または JavaScript Object Notation は、私たちの身の回りにあります。ウェブアプリを使用したことがあれば、そのウェブアプリがデータを構造化したり、保存したり、サーバーとデバイス間で送信したりするために JSON を使用している可能性が非常に高いでしょう。</p><p>この記事では、まず JSON と JavaScript の違いについて簡単に説明し、次にブラウザと Node.js プロジェクトで JSON を解析するさまざまな方法について説明します。</p><h2 id="json-javascript-">JSON と JavaScript の違い</h2><p>JSON は通常の JavaScript のように見えますが、JSON はテキストファイルと同様のデータ形式と考える方が良いでしょう。JSON は JavaScript の構文を基にしているため、非常に似ています。</p><p>JSON オブジェクトと JSON 配列を見て、それらを JavaScript の物と比較してみましょう。</p><h3 id="json-javascript--1"><strong>JSON オブジェクトと JavaScript オブジェクトリテラル</strong>の違い</h3><p>まず、こちらが JSON オブジェクトです:</p><figure class="kg-card kg-code-card"><pre><code class="language-JSON">{
  "name": "Jane Doe",
  "favorite-game": "Stardew Valley",
  "subscriber": false
}</code></pre><figcaption>jane-profile.json</figcaption></figure><p>JSON オブジェクトと通常の JavaScript オブジェクト (オブジェクトリテラルとも呼ばれます) の主な違いは、引用符に関係しています。JSON オブジェクトのすべてのキーと文字列型の値は、ダブルクォーテーション (<code>"</code>) で囲まれている必要があります。</p><p>JavaScript のオブジェクトリテラルはもう少し柔軟です。オブジェクトリテラルでは、キーや文字列を必ずしもダブルクォーテーションで囲む必要はありません。代わりに、シングルクォーテーション (<code>'</code>) を使用するか、キーに関しては引用符を使用しないことも可能です。</p><p>上記のコードを JavaScript のオブジェクトリテラルとして表すと、次のように書くことができます:</p><pre><code class="language-JavaScript">const profile = {
  name: 'Jane Doe',
  'favorite-game': 'Stardew Valley',
  subscriber: false
}</code></pre><p>キー <code>'favorite-game'</code> がシングルクォーテーションで囲まれていることに注意してください。オブジェクトリテラルでは、単語がダッシュ (<code>-</code>) で区切られているキーは引用符で囲む必要があります。</p><p>引用符を避けたい場合は、キーをキャメルケース (<code>favoriteGame</code>) に書き直すか、単語をアンダースコアで区切る (<code>favorite_game</code>) ことができます。</p><h3 id="json-javascript--2">JSON 配列と JavaScript 配列の違い</h3><p>JSON 配列は、JavaScript の配列とほぼ同じように動作し、文字列、ブール値、数値、および他の JSON オブジェクトを含むことができます。たとえば次のような配列があるとします:</p><figure class="kg-card kg-code-card"><pre><code class="language-JSON">[
  {
    "name": "Jane Doe",
    "favorite-game": "Stardew Valley",
    "subscriber": false
  },
  {
    "name": "John Doe",
    "favorite-game": "Dragon Quest XI",
    "subscriber": true
  }
]</code></pre><figcaption>profiles.json</figcaption></figure><p>これを素の JavaScript で書き直した例がこちらです:</p><pre><code class="language-JavaScript">const profiles = [
  {
    name: 'Jane Doe',
    'favorite-game': 'Stardew Valley',
    subscriber: false
  },
  {
    name: 'John Doe',
    'favorite-game': 'Dragon Quest XI',
    subscriber: true
  }
];</code></pre><h2 id="-json">文字列としての JSON</h2><p>JSON にオブジェクトと配列があるのなら、それらをプログラム内で通常の JavaScript のオブジェクトリテラルや配列のように使用できるのではないかと思っているかもしれません。</p><p>それができない理由は、JSON は実際には単なる文字列であるからです。</p><p>たとえば、上記の <code>jane-profile.json</code> や <code>profiles.json</code> のように、JSON を別のファイルに書き込むと、そのファイルは実際には JSON オブジェクトや配列の形をしたテキストを含んでいます。その形式がたまたま JavaScript のように見えるだけです。</p><p>そして、API にリクエストを送信すると、次のようなものが返ってきます:</p><pre><code class="language-JSON">{"name":"Jane Doe","favorite-game":"Stardew Valley","subscriber":false}</code></pre><p>テキストファイルの場合と同様に、プロジェクトで JSON を使用したい場合は、これを解析して、プログラミング言語が理解できる形式に変更する必要があります。たとえば、Python で JSON オブジェクトを解析すると、辞書型のデータが作成されます。</p><p>その理解をもとに、JavaScript で JSON を解析するさまざまな方法を見てみましょう。</p><h2 id="-json-">ブラウザで JSON を解析する方法</h2><p>ブラウザで JSON を扱う場合、たいていは API を介してデータを受信または送信します。</p><p>いくつかの例を見てみましょう。</p><h3 id="fetch-json-"><code>fetch</code> を使用して JSON を解析する方法</h3><p>API からデータを取得する最も簡単な方法は、<code>fetch</code> を使用することです。<code>fetch</code> には <code>.json()</code> メソッドが含まれており、JSON レスポンスを使用可能な JavaScript オブジェクトリテラルや配列へと簡単に解析できます。</p><p>以下は、<a href="https://api.chucknorris.io">Chuck Norris Jokes API</a> から開発者向けのジョークを取得するために、<code>fetch</code> を使用して <code>GET</code> リクエストを行うコードです:</p><pre><code class="language-JavaScript">fetch('https://api.chucknorris.io/jokes/random?category=dev')
  .then(res =&gt; res.json()) // the .json() method parses the JSON response into a JS object literal
  .then(data =&gt; console.log(data));</code></pre><p>ブラウザでそのコードを実行すると、コンソールに次のような内容がログされます:</p><pre><code>{
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "elgv2wkvt8ioag6xywykbq",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/elgv2wkvt8ioag6xywykbq",
    "value": "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
}</code></pre><p>これは JSON オブジェクトのように見えますが、実際には JavaScript のオブジェクトリテラルであり、プログラム内で自由に使用できます。</p><h3 id="json-stringify-json-"><code>JSON.stringify()</code> を使用して JSON を文字列に変換する方法</h3><p>しかし、API にデータを送信したい場合はどうすれば良いでしょうか？</p><p>たとえば、他の人が後で読めるように Chuck Norris のジョークを Chuck Norris Jokes API に送信したいとします。</p><p>まず、ジョークを JavaScript のオブジェクトリテラルとして書きます:</p><pre><code class="language-JavaScript">const newJoke = {
  categories: ['dev'],
  value: "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
};</code></pre><p>API にデータを送信するので、<code>newJoke</code> オブジェクトリテラルを JSON 文字列に変換する必要があります。</p><p>幸いにも、JavaScript にはそのための非常に役立つメソッド、<code>JSON.stringify()</code> が含まれています:</p><pre><code class="language-JavaScript">const newJoke = {
  categories: ['dev'],
  value: "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
};

console.log(JSON.stringify(newJoke)); // {"categories":["dev"],"value":"Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."}

console.log(typeof JSON.stringify(newJoke)); // string</code></pre><p>この例では、オブジェクトリテラルを JSON 文字列に変換していますが、<code>JSON.stringify()</code> は配列にも使えます。</p><p>あとは、JSON 文字列化されたジョークを <code>POST</code> リクエストで API に送信するだけです。</p><p>Chuck Norris Jokes API には実際にはこの機能はありません。しかし、もしこの機能があるとしたら、コードは次のようになるでしょう:</p><pre><code class="language-JavaScript">const newJoke = {
  categories: ['dev'],
  value: "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
};

fetch('https://api.chucknorris.io/jokes/submit', { // fake API endpoint
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(newJoke), // turn the JS object literal into a JSON string
})
  .then(res =&gt; res.json())
  .then(data =&gt; console.log(data))
  .catch(err =&gt; {
    console.error(err);
  });</code></pre><p>これで、<code>fetch</code> を使用して受信した JSON を解析し、<code>JSON.stringify()</code> を使用して JavaScript のオブジェクトリテラルを JSON 文字列に変換できました。</p><h3 id="-json--1">ブラウザでローカル JSON ファイルを操作する方法</h3><p>残念ながら、ブラウザでローカルの JSON ファイルをロードすることはできません (またはお勧めしません)。</p><p><code>fetch</code> は、ローカルファイルを読み込もうとするとエラーをスローします。たとえば、いくつかのジョークが含まれている JSON ファイルがあるとします:</p><figure class="kg-card kg-code-card"><pre><code class="language-JSON">[
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "elgv2wkvt8ioag6xywykbq",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/elgv2wkvt8ioag6xywykbq",
    "value": "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
  },
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "ae-78cogr-cb6x9hluwqtw",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/ae-78cogr-cb6x9hluwqtw",
    "value": "There is no Esc key on Chuck Norris' keyboard, because no one escapes Chuck Norris."
  }
]</code></pre><figcaption>jokes.json</figcaption></figure><p>そして、それを解析して、シンプルな HTML ページ上にジョークのリストを作成したいとします。</p><p>以下のようなページを作成して、ブラウザで開くとします:</p><figure class="kg-card kg-code-card"><pre><code class="language-HTML">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /&gt;
    &lt;meta name="viewport" content="width=device-width" /&gt;
    &lt;title&gt;Fetch Local JSON&lt;/title&gt;
  &lt;/head&gt;
  &lt;script&gt;
    fetch("./jokes.json", { mode: "no-cors" }) // disable CORS because path does not contain http(s)
      .then((res) =&gt; res.json())
      .then((data) =&gt; console.log(data));
  &lt;/script&gt;
&lt;/html&gt;</code></pre><figcaption>index.html</figcaption></figure><p>コンソールには、次のように表示されます:</p><pre><code>Fetch API cannot load file://&lt;path&gt;/jokes.json. URL scheme "file" is not supported
</code></pre><p>デフォルトでは、ブラウザはセキュリティ上の理由からローカルファイルへのアクセスを許可しません。これは良いことであり、この動作を迂回しようとしてはいけません。</p><p>代わりに、最善の方法はローカル JSON ファイルを JavaScript に変換することです。幸いなことに、JSON の構文は JavaScript と非常に似ているため、簡単に変換できます。</p><p>必要なのは新しいファイルを作成し、JSON を変数として宣言することだけです:</p><figure class="kg-card kg-code-card"><pre><code class="language-JavaScript">const jokes = [
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "elgv2wkvt8ioag6xywykbq",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/elgv2wkvt8ioag6xywykbq",
    "value": "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
  },
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "ae-78cogr-cb6x9hluwqtw",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/ae-78cogr-cb6x9hluwqtw",
    "value": "There is no Esc key on Chuck Norris' keyboard, because no one escapes Chuck Norris."
  }
]</code></pre><figcaption>jokes.js</figcaption></figure><p>そして、それを別個のスクリプトとしてページに追加します:</p><pre><code class="language-HTML">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /&gt;
    &lt;meta name="viewport" content="width=device-width" /&gt;
    &lt;title&gt;Fetch Local JSON&lt;/title&gt;
  &lt;/head&gt;
  &lt;script src="jokes.js"&gt;&lt;/script&gt;
  &lt;script&gt;
    console.log(jokes);
  &lt;/script&gt;
&lt;/html&gt;</code></pre><p>これで、<code>jokes</code> 配列をコードで自由に使用できるようになります。</p><p>または JavaScript <a href="https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Modules">モジュール</a>を使用することもできますが、これはこの記事の範囲外です。</p><p>では、Node.js を使用してローカル JSON ファイルを操作したい場合はどうすれば良いでしょうか？それを見てみましょう。</p><h2 id="node-js-json-">Node.js で JSON を解析する方法</h2><p>Node.js は、ブラウザの外で JavaScript を実行することができる JavaScript ランタイムです。<a href="https://www.freecodecamp.org/news/the-definitive-node-js-handbook-6912378afc6e/">Node.js についてはこちら</a>で詳しく説明されています。</p><p>Node.js を使用してローカルのコンピューター上でコードを実行するか、サーバー上で完全な Web アプリケーションを実行するかに関わらず、JSON を操作する方法を知っておくと良いでしょう。</p><p>以下の例でも、同じ <code>jokes.json</code> ファイルを使用します:</p><figure class="kg-card kg-code-card"><pre><code class="language-JSON">[
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "elgv2wkvt8ioag6xywykbq",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/elgv2wkvt8ioag6xywykbq",
    "value": "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."
  },
  {
    "categories": ["dev"],
    "created_at": "2020-01-05 13:42:19.324003",
    "icon_url": "https://assets.chucknorris.host/img/avatar/chuck-norris.png",
    "id": "ae-78cogr-cb6x9hluwqtw",
    "updated_at": "2020-01-05 13:42:19.324003",
    "url": "https://api.chucknorris.io/jokes/ae-78cogr-cb6x9hluwqtw",
    "value": "There is no Esc key on Chuck Norris' keyboard, because no one escapes Chuck Norris."
  }
]</code></pre><figcaption>jokes.json</figcaption></figure><h3 id="require-json-"><code>require()</code> を使用して JSON ファイルを解析する方法</h3><p>最も簡単な方法から始めましょう。</p><p>ローカルの JSON ファイルがある場合、<code>require()</code> を使用して、他の Node.js モジュールと同様にロードするだけで使用できます:</p><pre><code class="language-JavaScript">const jokes = require('./jokes.json');</code></pre><p>JSON ファイルは自動的に解析され、プロジェクトで使用できるようになります:</p><pre><code class="language-JavaScript">const jokes = require('./jokes.json');

console.log(jokes[0].value); // "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."</code></pre><p>これは同期的な方法であることに注意してください。つまり、プログラムは続行する前にファイル全体を解析し終わるまで停止します。非常に大きな JSON ファイルはプログラムの遅延を引き起こす可能性があるため、注意が必要です。</p><p>また、この方法で JSON を解析すると、全体がメモリに読み込まれるため、この方法は静的な JSON ファイルに使用するのが最適です。プログラムが実行中に JSON ファイルが変更されると、プログラムを再起動して更新された JSON ファイルを解析するまで、それらの変更にアクセスできません。</p><h3 id="fs-readfilesync-json-parse-json-"><code>fs.readFileSync()</code> と <code>JSON.parse()</code> を使用して JSON ファイルを解析する方法</h3><p>これは、Node.js プロジェクトで JSON ファイルを解析するどちらかというと古典的な方法 (他に適切な言い方がないので) です。ファイルを <code>fs</code> (ファイルシステム) モジュールで読み取り、次に <code>JSON.parse()</code> で解析します。</p><p><code>fs.readFileSync()</code> メソッドの使い方を見てみましょう。まず、プロジェクトに <code>fs</code> モジュールを追加します:</p><pre><code class="language-JavaScript">const fs = require('fs');</code></pre><p>次に、<code>jokes.json</code> ファイルの出力を保存する新しい変数を作成し、それに <code>fs.readFileSync()</code> を割り当てます:</p><pre><code class="language-JavaScript">const fs = require('fs');
const jokesFile = fs.readFileSync();</code></pre><p><code>fs.readFileSync()</code> にはいくつかの引数があります。最初の引数は読み込みたいファイルへのパスです:</p><pre><code class="language-JavaScript">const fs = require('fs');
const jokesFile = fs.readFileSync('./jokes.json');</code></pre><p>しかし、この状態で <code>jokesFile</code> をコンソールにログ出力すると、次のようになります:</p><pre><code>&lt;Buffer 5b 0a 20 20 7b 0a 20 20 20 20 22 63 61 74 65 67 6f 72 69 65 73 22 3a 20 5b 22 64 65 76 22 5d 2c 0a 20 20 20 20 22 63 72 65 61 74 65 64 5f 61 74 22 3a ... 788 more bytes&gt;</code></pre><p>これは、<code>fs</code> モジュールがファイルを読み取っているものの、ファイルのエンコーディングや形式がわかっていないことを意味します。<code>fs</code> は JSON のようなテキストベースのファイルだけでなく、ほとんどのファイルを読み込むために使用できるため、ファイルがどのようにエンコードされているかを指定する必要があります。</p><p>テキストベースのファイルの場合、エンコーディングは通常 <code>utf8</code> です:</p><pre><code class="language-JavaScript">const fs = require('fs');
const jokesFile = fs.readFileSync('./jokes.json', 'utf8');</code></pre><p>今度は <code>jokesFile</code> をコンソールにログ出力すると、ファイルの内容が表示されます。</p><p>しかし、これまでのところ、単にファイルを読み取っているだけで、それはまだ文字列です。<code>jokesFile</code> を使用可能な JavaScript オブジェクトや配列に解析するために、別のメソッドを使用する必要があります。</p><p>そのために、<code>JSON.parse()</code> を使用します:</p><pre><code class="language-JavaScript">const fs = require('fs');
const jokesFile = fs.readFileSync('./jokes.json', 'utf8');
const jokes = JSON.parse(jokesFile);

console.log(jokes[0].value); // "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."</code></pre><p>その名前が示すように、<code>JSON.parse()</code> は JSON 文字列を受け取り、JavaScript のオブジェクトリテラルまたは配列に解析します。</p><p><code>require</code> メソッドと同様に、<code>fs.readFileSync()</code> は同期メソッドであり、JSON でも他の種類のファイルでも、大きなファイルを読み込む場合、プログラムを遅くする可能性があります。</p><p>また、それはファイルを 1 回読み取り、メモリに読み込みます。ファイルが変更された場合、いずれかの時点でファイルを再度読み込む必要があります。この処理を簡単にするために、ファイルを読み込むための簡単な関数を作成すると良いでしょう。</p><p>次のようになります:</p><pre><code class="language-JavaScript">const fs = require('fs');
const readFile = path =&gt; fs.readFileSync(path, 'utf8');

const jokesFile1 = readFile('./jokes.json');
const jokes1 = JSON.parse(jokesFile1);

console.log(jokes1[0].value); // "Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris."

// the jokes.json file changes at some point

const jokesFile2 = readFile('./jokes.json');
const jokes2 = JSON.parse(jokesFile2);

console.log(jokes2[0].value); // "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."</code></pre><h3 id="fs-readfile-json-parse-json-"><code>fs.readFile()</code> と <code>JSON.parse()</code> を使用して JSON を解析する方法</h3><p><code>fs.readFile()</code> メソッドは <code>fs.readFileSync()</code> に非常に似ていますが、非同期で動作します。これは、読み取るべき大きなファイルがあり、その処理が他のコードをブロックするのを避けたい場合に便利です。</p><p>基本的な例を以下に示します:</p><pre><code class="language-JavaScript">const fs = require('fs');

fs.readFile('./jokes.json', 'utf8');</code></pre><p>これまでのところ、<code>fs.readFileSync()</code> と似ていますが、<code>jokesFile</code> のような変数には割り当てていません。非同期なので、<code>fs.readFile()</code> の後のコードはファイルの読み取りが完了する前に実行されます。</p><p>代わりに、コールバック関数を使用して、その内部で JSON を解析します:</p><pre><code class="language-JavaScript">const fs = require('fs');

fs.readFile('./jokes.json', 'utf8', (err, data) =&gt; {
  if (err) console.error(err);
  const jokes = JSON.parse(data);

  console.log(jokes[0].value);
});

console.log("This will run first!");</code></pre><p>これにより、次のようにコンソールに出力されます:</p><pre><code>This will run first!
Chuck Norris's keyboard doesn't have a Ctrl key because nothing controls Chuck Norris.</code></pre><p><code>fs.readFileSync()</code> と同様に、<code>fs.readFile()</code> もファイルをメモリに読み込みます。つまり、ファイルが変更された場合は、ファイルを再度読み込む必要があります。</p><p>また、<code>fs.readFile()</code> は非同期ですが、最終的には読み込んでいるファイル全体をメモリに読み込みます。巨大なファイルの場合は、<a href="https://www.freecodecamp.org/news/node-js-streams-everything-you-need-to-know-c9141306be93/">Node.js のストリーム</a>を検討する方が良いかもしれません。</p><h3 id="node-js-json-stringify-json-">Node.js で <code>JSON.stringify()</code> を使用して JSON を文字列に変換する方法</h3><p>最後に、Node.js で JSON を解析する場合、API の応答として JSON を返す必要があるかもしれません。</p><p>幸いなことに、これはブラウザと同じように機能します。JavaScript のオブジェクトリテラルや配列を JSON 文字列に変換するには、単に <code>JSON.stringify()</code> を使用します:</p><pre><code class="language-JavaScript">const newJoke = {
  categories: ['dev'],
  value: "Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."
};

console.log(JSON.stringify(newJoke)); // {"categories":["dev"],"value":"Chuck Norris's keyboard is made up entirely of Cmd keys because Chuck Norris is always in command."}</code></pre><p>以上です！ブラウザと Node.js プロジェクトで JSON を操作する際に知っておくべきことについて、ほぼすべて説明しました。</p><p>さあ、思うままに JSON を解析したり文字列に変換したりしてください。</p><p>この記事に不足している点を見つけましたか？あなたのプロジェクトではどのように JSON を解析していますか？<a href="https://twitter.com/kriskoishigawa">Twitter</a> で教えてください。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ freeCodeCamp からクリスマスプレゼント – Python と JavaScript の新講座、英語カリキュラム、The Odin Project ]]>
                </title>
                <description>
                    <![CDATA[ freeCodeCamp から世界中のデベロッパー・コミュニティへ、クリスマスプレゼントをお届けします。 No. 1: 新バージョンの「JavaScript のアルゴリズムとデータ構造」認定講座。ブラウザ上でコードを書いて学べる 21 のプロジェクトを用意しました。プロジェクトに取り組みながら学ぶプロジェクトベース形式の講座で、1,000 以上のステップに細分化されたコーディングチャレンジで段階的に学習できます。 No. 2: 新バージョンの「Python を用いた科学計算」認定講座。ブラウザ上で Python のコードを書いて、12 のプロジェクトに取り組みながら学べます。 No. 3: かの有名な The Odin Project のインタラクティブ版。The Odin Project とは、私 (Quincy) の友人であり freeCodeCamp サポーターでもある Erik Trautman によって 2013 年に作成されたコーディング・カリキュラムです。 No. 4: そして私が個人的に最も楽しみにしていたのが「開発者のための英語」カリキュラムです。今年はまず  ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/a-very-freecodecamp-christmas/</link>
                <guid isPermaLink="false">6588c354b302c504a10e7bf1</guid>
                
                    <category>
                        <![CDATA[ freeCodeCamp Curriculum ]]>
                    </category>
                
                    <category>
                        <![CDATA[ freeCodeCamp ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Sun, 24 Dec 2023 23:56:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/12/freeCodeCamp-Christmas.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/a-very-freecodecamp-christmas/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">A Very freeCodeCamp Christmas  – Python &amp; JavaScript Upgrades, English Curriculum, The Odin Project</a>
      </p><p>freeCodeCamp から世界中のデベロッパー・コミュニティへ、クリスマスプレゼントをお届けします。</p><p>No. 1: 新バージョンの<strong>「JavaScript のアルゴリズムとデータ構造」認定講座</strong>。ブラウザ上でコードを書いて学べる 21 のプロジェクトを用意しました。プロジェクトに取り組みながら学ぶプロジェクトベース形式の講座で、1,000 以上のステップに細分化されたコーディングチャレンジで段階的に学習できます。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/D8pqkmZWc9o?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="JavaScript Curriculum Trailer" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><p>No. 2: 新バージョンの<strong>「Python を用いた科学計算」認定講座</strong>。ブラウザ上で Python のコードを書いて、12 のプロジェクトに取り組みながら学べます。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/Qs7QJfvqJrk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Python Curriculum Trailer" name="fitvid1"></iframe>
          </div>
        </div>
      </figure><p>No. 3: かの有名な <strong>The Odin Project</strong> のインタラクティブ版。The Odin Project とは、私 (Quincy) の友人であり freeCodeCamp サポーターでもある Erik Trautman によって 2013 年に作成されたコーディング・カリキュラムです。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/MkjsaMk3nKE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Odin Project Curriculum Trailer" name="fitvid2"></iframe>
          </div>
        </div>
      </figure><p>No. 4: そして私が個人的に最も楽しみにしていたのが<strong>「開発者のための英語」カリキュラム</strong>です。今年はまず CEFR A2 レベルの講座をリリースしました。B1、B2、C1 レベルの講座も 2024 年から 2025 年にかけてリリース予定です。開発者として働く上で役立つ表現を中心に学べる講座です。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/cT8lMv_hwdE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="English Curriculum Trailer" name="fitvid3"></iframe>
          </div>
        </div>
      </figure><h3 id="-freecodecamp-">なぜ freeCodeCamp はこんなにたくさんの教材を一度にリリースしたの？</h3><p>なぜなら freeCodeCamp コミュニティにふさわしいクリスマスプレゼントだと思ったからです。🎄</p><p>freeCodeCamp ではこの数年間をかけて JavaScript カリキュラムのアップデートに取り組んできました。</p><p>そして英語カリキュラム、Python カリキュラムの作成にも 2023 のほとんどを費やしました。</p><p>残りの認定講座についても、プロジェクトを通して学ぶ形式にアップデートすることを目指しています。</p><p>この取り組みには少なくとももう 1 年かかると見込んでいます。いつものことですが、<a href="https://www.freecodecamp.org/japanese/donate">サポーター</a>として支援していただくことで、追加の人材を採用できるようになり、開発のスピードアップにつながります。</p><h3 id="-python-">新バージョンの Python カリキュラムと認定講座</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/12/Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1.png" class="kg-image" alt="Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/12/Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/12/Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/12/Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1.png 1600w" sizes="(min-width: 720px) 720px" width="1600" height="890" loading="lazy"><figcaption>古典的なコンピューターサイエンスの問題「ハノイの塔」に取り組む様子。ブラウザ上で、段階的な手順に沿って進められます。</figcaption></figure><p>freeCodeCamp では先日、Python を用いた科学計算認定講座のメジャーアップグレードを公開しました。Python プログラミングの基礎を、ブラウザ上で 15 のプロジェクトを作成しながら学ぶことができます。</p><p>以下が全 15 プロジェクトの一覧です。</p><ol><li>文字列操作の学習: 暗号プログラムを作成する</li><li>数値と文字列を扱う学習: Luhn アルゴリズムを実装する</li><li>ラムダ式の学習: 経費記録ツールを作成する</li><li>リスト内包表記の学習: ケース変換プログラムを作成する</li><li>正規表現の学習: パスワード生成プログラムを作成する</li><li>アルゴリズムデザインの学習: 最短経路アルゴリズムを作成する</li><li>再帰処理の学習: パズル「ハノイの塔」を解く</li><li>データ構造の学習: マージソートアルゴリズムを作成する</li><li>クラスとオブジェクトの学習: 数独ソルバーを作成する</li><li>木構造の走査の学習: 二分探索木を作成する</li><li>認定プロジェクト: 計算の縦書き整形プログラム</li><li>認定プロジェクト: 時刻計算プログラム</li><li>認定プロジェクト: 予算アプリ</li><li>認定プロジェクト: 四角形の面積計算プログラム</li><li>認定プロジェクト: 確率計算プログラム</li></ol><p>これは 500 問以上のコーディング・チャレンジに相当します。そして 5 件の認定プロジェクトでは、数十件の自動テストをパスするように、洗練されたプロジェクトを作成します。</p><p>freeCodeCamp では、Python をブラウザでスムーズに実行できるようにするため尽力してきました。結果として非常にスムーズな動作を実現できました。どこかにあるサーバーで Python のコードが実行されて結果が返ってくるまで待つ必要はありません。</p><p>ミリ秒未満でテスト結果が返ってくる freeCodeCamp の JavaScript 講座での体験が気に入っているなら、きっとこの新しい Python 講座も気に入ることでしょう。</p><p><a href="https://www.freecodecamp.org/japanese/learn/scientific-computing-with-python">freeCodeCamp カリキュラムで Python プログラミングを始めましょう</a>。</p><h3 id="-javascript-">新バージョンの JavaScript アルゴリズムとデータ構造認定講座</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/12/RPG-game.png" class="kg-image" alt="RPG-game" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/12/RPG-game.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/12/RPG-game.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/12/RPG-game.png 1600w" sizes="(min-width: 720px) 720px" width="1600" height="676" loading="lazy"><figcaption>JavaScript ロールプレイングゲームのステップ 53</figcaption></figure><p>以下がこの講座で作成する全プロジェクトの一覧です。</p><ol><li>JavaScript 基礎の学習: ロールプレイングゲームを作成する</li><li>フォームバリデーションの学習: カロリー計算機を作成する</li><li>文字列と配列の基礎的なメソッドの学習: 音楽プレイヤーを作成する</li><li>Date オブジェクトの学習: 日付フォーマッターを作成する</li><li>認定プロジェクト: 回文チェッカー</li><li>モダンな JavaScript メソッドの学習: サッカーチームカードを作成する</li><li>localStorage の学習: Todo リストを作成する</li><li>再帰処理の学習: 十進数・二進数変換ツールを作成する</li><li>認定プロジェクト: ローマ数字への変換</li><li>アルゴリズム的思考の学習: 数値ソートを作成する</li><li>文字列と配列の応用的なメソッドの学習: 統計計算機を作成する</li><li>関数プログラミングの学習: スプレッドシートを作成する</li><li>正規表現の学習: スパムフィルターを作成する</li><li>認定プロジェクト: 電話番号の検証</li><li>基礎的なオブジェクト指向プログラミングの学習: ショッピングカートを作成する</li><li>中級オブジェクト指向プログラミングの学習: 横スクロールゲームを作成する</li><li>中級アルゴリズム的思考の学習: ダイスゲームを作成する</li><li>認定プロジェクト: キャッシュレジスター</li><li>Fetch と Promise の学習: freeCodeCamp 著者ページを作成する</li><li>非同期プログラミングの学習: freeCodeCamp フォーラムリーダーボードを作成する</li><li>認定プロジェクト: ポケモン検索アプリ</li></ol><p>新バージョンの JavaScript アルゴリズムとデータ構造認定講座についての詳細情報と実際に動作する様子は、freeCodeCamp スタッフの Jessica による<a href="https://www.freecodecamp.org/news/learn-javascript-with-new-data-structures-and-algorithms-certification-projects">プロジェクトの解説記事</a>で見ることができます。</p><h3 id="-">開発者のための英語カリキュラム</h3><p>CEFR (Common European Framework of Reference) に馴染みのない方のために、こちらの画像を作成しました。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/12/freeCodeCamp-CEFR-Levels-Explained-3.png" class="kg-image" alt="freeCodeCamp-CEFR-Levels-Explained-3" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/12/freeCodeCamp-CEFR-Levels-Explained-3.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/12/freeCodeCamp-CEFR-Levels-Explained-3.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/12/freeCodeCamp-CEFR-Levels-Explained-3.png 1024w" sizes="(min-width: 720px) 720px" width="1024" height="768" loading="lazy"><figcaption>6 段階の CEFR レベルを説明した画像。freeCodeCamp では A2 レベルの講座からスタートし、B1、B2、C1、C2 レベルも開発予定です。</figcaption></figure><p>freeCodeCamp がスタートしてから 9 年間、私たちは主に数学、コンピューターサイエンス、プログラミングの教育に注力してきました。なぜここで急に英語を教えることにしたのでしょうか？</p><p>それは、何百万人もの開発者が、自分のキャリアの可能性を最大限発揮するために英語力の向上を必要としているからです。</p><p>国際的に、英語がテクノロジー業界の主要言語となっており、多くの重要なテクノロジーが英語圏から生まれている状況です。</p><p>また、英語は多くの国でビジネスに使われる言語でもあります。英語圏以外の国に住んでいても仕事で英語を使っているという人が、私の友人にも多くいます。</p><p>つまり、多くの人にとって、英語を上手く話せるようになるために時間を費やす価値があるということです。そして freeCodeCamp はそのような人々の力になりたいと考えています。もちろん無料でです。</p><p>カリキュラムの前半では、多数の実践的練習を通して、英語の文法や使い方に慣れることを目指します。自己紹介、雑談、仕事についての話し合いなどの基礎的な内容を学びます。</p><p>後半では、ソフトウェア開発特有の語彙を練習します。コードを説明したり、テクノロジーのトレンドについて議論したり、スタンドアップ・ミーティングに参加したりする方法を学びます。</p><p>この A2 レベルカリキュラムには 105 種類のダイアログが含まれます。それぞれのダイアログは、語彙力を強化し、テクノロジーのプロとしての環境で自信をもって話せるようになることを目指して設計されています。</p><p>ぜひ<a href="https://www.freecodecamp.org/japanese/learn/a2-english-for-developers">開発者のための英語カリキュラム</a>を試してみてください。そして周りに英語を学んでいる人がいたら勧めてあげてください。</p><h3 id="--1">大学学位プログラムの最新情報 (数学準学士、コンピューターサイエンス学士)</h3><p><a href="https://www.freecodecamp.org/japanese/news/freecodecamp-math-computer-science-degree-update/">大学学位取得プログラム</a>についても着実に進めており、作成中の全 40 のコースのうち 2 番目のコースが完成間近となっています。</p><p>まだやるべきことがかなり残っているように聞こえますね。</p><p>幸い、私たちがあらゆる開発者に学習を推奨するトピックについての一連の認定講座である <a href="https://www.freecodecamp.org/japanese/">freeCodeCamp コアカリキュラム</a>のアップグレードが完了次第、より多くの講師陣が学位取得プログラムの作業にまわる予定です。</p><p>私たちの計画は変わりません。2020 年代中頃に全 40 のコースの完成、2020 年代後半に最初の学生の入学、そして卒業生から 5 年間の長期的なデータが得られ次第正式な認定を得ることを目指しています。</p><p>これは非常に長い期間に渡る取り組みです。スタートアップ企業がこのような事業に取り組むことを許してくれる投資家はほとんどいないでしょう。その点、私たちはパブリック・チャリティーです。私たちには投資家も株主もいません。私たちにあるのはボランティアと<a href="https://www.freecodecamp.org/japanese/donate">サポーター</a>のグローバル・コミュニティだけです。</p><p>freeCodeCamp はいなくなったりしません。世界中の教育制度は多くの問題に溢れ、新しいスキルを学ぶ必要に駆られている多忙な社会人が多数存在しています。freeCodeCamp を始めとする教育機関の力が必要とされているのです。🏕️</p><h3 id="-javascript-python-">従来の JavaScript および Python 認定講座はどうなりますか？</h3><p>従来の認定講座・認定証も引き続きご利用いただけます。従来の認定講座は <a href="https://www.freecodecamp.org/japanese/learn">freecodecamp 学習プラットフォーム</a>の最下部に移動しました。旧カリキュラムはそちらに保管されています。</p><h3 id="-javascript-python-the-odin-project-">新しい JavaScript、Python、英語カリキュラム、The Odin Project のセクションはいつまでベータ版ですか？</h3><p>こうしてこの記事を書いている間にも、引き続きプルリクエストをマージしている状況です。freeCodeCamp の講師陣は、この教材のリリースをクリスマスに間に合わせるため尽力してきました。</p><p>今後数週間に渡って、「coming soon」のラベルが付いたセクションをリリース予定です。来年中にはベータ版のラベルを外し、正式版としてリリースすることを目指しています。</p><h3 id="freecodecamp-">freeCodeCamp が初めての場合、どこからスタートするのが良いですか？</h3><p>これまで通り、<a href="https://www.freecodecamp.org/japanese/learn">freecodecamp 学習プラットフォームの一番上</a>から順に取り組むことをおすすめします。何千時間にもおよぶ学習内容が含まれるので、2024 年中ずっと退屈しないでしょう。率直に言えば、プログラミングをしっかりと学ぶにはそれだけの時間がかかるのです。</p><p>コアカリキュラムでは、何百ものプロジェクトを通して大量の演習に取り組みます。そして今後リリース予定の数学・コンピューターサイエンス学位プログラムでは理論を学ぶことができます。</p><p>長い期間をかけて、あなたの学習をサポートします。千件以上の YouTube 動画講座、1 万件以上のチュートリアル記事も公開しています。1 冊の本に相当するようなボリュームの記事も複数あります。すべて無料で利用可能です。</p><p>2014 年に freeCodeCamp をスタートした時には、私たちの教材がこれほど包括的なものになるとは予想していませんでした。しかし私たちは今、オープンソースの力、無料の教育を支援したいという何千人もの講師・開発者達の力を目の当たりにしています。</p><p>私たちは今、数学、プログラミング、そして英語について地球上で最も詳しいだけでなく、桁違いに詳しいと言える学習リソースとなることを目指しています。</p><h3 id="freecodecamp-9-">freeCodeCamp はまだ 9 歳です。</h3><p>毎日百万人以上の人々が freeCodeCamp で学んでいるという、freeCodeCamp コミュニティの現在の姿には驚かされるばかりです。</p><p>この 1 年だけでも、freeCodeCamp コミュニティは以下のことを成し遂げました。</p><ul><li>YouTube にて<strong>長編講座を 114 件</strong>投稿</li><li><strong>プログラミングチュートリアル記事を 1,045 件</strong>、freeCodeCamp Press として<strong>無料の電子書籍を 20 冊</strong>投稿</li><li>GitHub にて <strong>2,753 件のコードコントリビューション</strong>をマージ</li><li>カリキュラムとチュートリアル記事の多言語化において <strong>200 万ワード以上</strong>を翻訳</li></ul><p>そしてこれはまだほんの始まりです。この先やるべきことがもっとあります。</p><p>再度になりますが、<a href="https://www.freecodecamp.org/japanese/donate">サポーター</a>として支えていただければ幸いです。</p><p>すでに月次サポーターの方でも、当チャリティーのために年末のギフトをご検討いただけるのであれば<a href="https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp/">ぜひお願いいたします</a>。</p><p>当チャリティー団体の使命を支援する方法についての質問や、単に寄付の領収書が必要な場合でも、直接 quincy@freecodecamp.org までお問い合わせいただいて構いません。</p><p>あなたが良いクリスマスを過ごしながら、新しいスキルを学ぶ時間を持てることをお祈りします。Happy coding! 🎅⌨️</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript を使ったドロップダウンメニューを作成する方法 ]]>
                </title>
                <description>
                    <![CDATA[ インターネットを使うかたなら、おそらくドロップダウンメニューを使ったことがあるでしょう。ドロップダウンメニューは主に 2 つの目的で使用されます。1 つはウェブフォームでユーザーの入力を収集するため、もう 1 つはウェブアプリケーションにアクションやナビゲーションメニューを実装するためです。 ドロップダウンは、似たようなの要素の集まりに対して多数のオプションを提供する最良の方法の 1 つです。これにより、アプリケーションの一般的なレイアウトの流れを崩さずに多くの選択肢を提供することができます。ウェブアプリ以外にも、ドロップダウンメニューはスタンドアロンのソフトウェアやオペレーティングシステムなどでも使用されています。 このガイドでは、HTML、CSS、JavaScript を使用してドロップダウンナビゲーションメニューを作成する方法を学びます。 以下は、これから作成するもののスクリーンショットです。このガイドの最後に、CodePen ファイルを提供しているので、それを使って実際に試してみることができます。 ドロップダウンメニューの最終成果物ドロップダウンメニューの基礎について ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-build-a-dropdown-menu-with-javascript/</link>
                <guid isPermaLink="false">64a846edfbe7fd06692b04de</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ HTML ]]>
                    </category>
                
                    <category>
                        <![CDATA[ CSS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Saki Basken ]]>
                </dc:creator>
                <pubDate>Thu, 13 Jul 2023 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/07/how-to-build-a-dropdown-menu-with-javascript.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-build-a-dropdown-menu-with-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Build a Dropdown Menu with JavaScript</a>
      </p><h3 id="-2-1-1-">インターネットを使うかたなら、おそらくドロップダウンメニューを使ったことがあるでしょう。ドロップダウンメニューは主に 2 つの目的で使用されます。1 つはウェブフォームでユーザーの入力を収集するため、もう 1 つはウェブアプリケーションにアクションやナビゲーションメニューを実装するためです。</h3><p></p><p>ドロップダウンは、似たようなの要素の集まりに対して多数のオプションを提供する最良の方法の 1 つです。これにより、アプリケーションの一般的なレイアウトの流れを崩さずに多くの選択肢を提供することができます。ウェブアプリ以外にも、ドロップダウンメニューはスタンドアロンのソフトウェアやオペレーティングシステムなどでも使用されています。</p><p>このガイドでは、HTML、CSS、JavaScript を使用してドロップダウンナビゲーションメニューを作成する方法を学びます。</p><p>以下は、これから作成するもののスクリーンショットです。このガイドの最後に、CodePen ファイルを提供しているので、それを使って実際に試してみることができます。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/07/dropdown-menu-with-css.png" class="kg-image" alt="dropdown-menu-with-css" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/07/dropdown-menu-with-css.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/07/dropdown-menu-with-css.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/07/dropdown-menu-with-css.png 1055w" sizes="(min-width: 720px) 720px" width="1055" height="386" loading="lazy"><figcaption>ドロップダウンメニューの最終成果物</figcaption></figure><p>ドロップダウンメニューの基礎についての説明を終えたので、次はその作成手順について説明します。</p><h2 id="-1-">ステップ 1 – ドロップダウンのマークアップを追加する</h2><p>このガイドではアイコンを使用するため、まず初めにアイコンをインポートしなければなりません。その分かりやすさから、<a href="https://boxicons.com/">Boxicons</a> という無料のライブラリを使用します。他にもあるので、ぜひお好きなライブラリを使ってみて下さい。</p><p>Boxicons を<a href="https://boxicons.com/usage">設定する</a>方法はいくつかありますが、最も簡単な方法は、次のように HTML ファイルの <code>head</code> で script タグを定義することです。</p><pre><code class="language-html">&lt;head&gt;
   &lt;link 
     href="https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css" 
     rel="stylesheet"
    /&gt;
 &lt;/head&gt;</code></pre><p>アイコンをインポートした後、クラス名が <code>container</code> の <code>div</code> 要素を作成します。この要素内に、ボタンとドロップダウンメニューを入れていきます。</p><p>コンテナ内でボタン要素を作成し、それに <code>btn</code> というクラスと ID を与えます。そのボタンに、テキストと矢印アイコンを渡します。</p><p>ボタンのマークアップは以下のとおりです。</p><pre><code class="language-html">&lt;button class="btn" id="btn"&gt;
  Dropdown
  &lt;i class="bx bx-chevron-down" id="arrow"&gt;&lt;/i&gt;
&lt;/button&gt;</code></pre><p>次に、ドロップダウンメニュー自体のマークアップを追加します。button タグの下に <code>div</code> 要素を作成し、それに <code>dropdown</code> というクラスと ID を与えます。div 要素内で、個々のドロップダウン項目ごとに <code>a</code> タグを作成し、それぞれのアイコンとテキストを渡します。</p><p>マークアップは以下のようになります。</p><pre><code class="language-html">&lt;div class="dropdown" id="dropdown"&gt;
  &lt;a href="#create"&gt;
    &lt;i class="bx bx-plus-circle"&gt;&lt;/i&gt;
    Create New
  &lt;/a&gt;
  &lt;a href="#draft"&gt;
    &lt;i class="bx bx-book"&gt;&lt;/i&gt;
    All Drafts
  &lt;/a&gt;
  &lt;a href="#move"&gt;
    &lt;i class="bx bx-folder"&gt;&lt;/i&gt;
    Move To
  &lt;/a&gt;
  &lt;a href="#profile"&gt;
    &lt;i class="bx bx-user"&gt;&lt;/i&gt;
    Profile Settings
  &lt;/a&gt;
  &lt;a href="#notification"&gt;
    &lt;i class="bx bx-bell"&gt;&lt;/i&gt;
    Notification
  &lt;/a&gt;
  &lt;a href="#settings"&gt;
    &lt;i class="bx bx-cog"&gt;&lt;/i&gt;
    Settings
  &lt;/a&gt;
&lt;/div&gt;</code></pre><p>出力は以下のようになります。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/07/dropdown-menu-markup.png" class="kg-image" alt="dropdown-menu-markup" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/07/dropdown-menu-markup.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/07/dropdown-menu-markup.png 772w" sizes="(min-width: 720px) 720px" width="772" height="144" loading="lazy"><figcaption>ドロップダウンメニューのマークアッププレビュー</figcaption></figure><p>このままではまだ見栄えがよくないので、メニューのスタイリングをしましょう。</p><h2 id="-2-">ステップ 2 – ドロップダウンメニューのスタイルを設定する</h2><p>まず、ページ上のすべての要素のデフォルトのマージンとパディングをリセットし、いくつかの値を変数に保存して、CSS ファイル全体で再利用できるようにします。次に、body 要素にグローバルなスタイルを適用します。</p><pre><code class="language-css">@import url(https://fonts.googleapis.com/css?family=Inter:100,200,300,regular,500,600,700,800,900);

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  font-family: "Inter", sans-serif;
  --shadow: rgba(0, 0, 0, 0.05) 0px 6px 10px 0px,
    rgba(0, 0, 0, 0.1) 0px 0px 0px 1px;
  --color: #166e67;
  --gap: 0.5rem;
  --radius: 5px;
}

body {
  margin: 2rem;
  background-color: #b3e6f4;
  font-size: 0.9rem;
  color: black;
}</code></pre><p>次のステップでは、ボタンとドロップダウンコンテナー自体のスタイリングを行います。作業をスピードアップするため、重要なスタイリングの部分のみを説明します。</p><p>以下のマークアップをコピーして、CSS ファイルに貼り付けてください。</p><pre><code class="language-css">.btn {
  background-color: white;
  display: flex;
  align-items: center;
  justify-content: flex-start;
  column-gap: var(--gap);
  padding: 0.6rem;
  cursor: pointer;
  border-radius: var(--radius);
  border: none;
  box-shadow: var(--shadow);
  position: relative;
}

.bx {
  font-size: 1.1rem;
}

.dropdown {
  position: absolute;
  width: 250px;
  box-shadow: var(--shadow);
  border-radius: var(--radius);
  margin-top: 0.3rem;
  background: white;
}

.dropdown a {
  display: flex;
  align-items: center;
  column-gap: var(--gap);
  padding: 0.8rem 1rem;
  text-decoration: none;
  color: black;
}

.dropdown a:hover {
  background-color: var(--color);
  color: white;
}</code></pre><p>ドロップダウンメニューは通常、要素の上に重なるように表示されるため、ボタンを相対的 (relative) に、ドロップダウンメニューを絶対的 (absolute) に配置しています。これにより、両方の要素が近くに配置され、ドロップダウンメニューが他の要素の上に表示されることが保証されます。こうすることで、切り替え時にページのフローに影響を与えなくなります。</p><p>出力は以下のようになります。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/07/dropdown-menu-with-css--1-.png" class="kg-image" alt="dropdown-menu-with-css--1-" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/07/dropdown-menu-with-css--1-.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/07/dropdown-menu-with-css--1-.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/07/dropdown-menu-with-css--1-.png 1055w" sizes="(min-width: 720px) 720px" width="1055" height="386" loading="lazy"><figcaption>ドロップダウンメニューのスタイリング</figcaption></figure><p>ドロップダウンのスタイルが設定されたので、即座に表示されるのではなく、ボタンがクリックされたときにのみドロップダウンが表示されるようにしたいと思います。非表示にするには CSS を使用します。</p><p>以前 <a href="https://freecodecamp.org/news/how-to-build-a-modal-with-javascript">JavaScript でモーダルを作成する方法</a>という記事では、最初にビューポートからモーダル要素を非表示にするために、<code>display: none</code> を使用しました。しかし、<a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties">MDN Docs</a> によると、このプロパティを利用する場合の欠点は、アニメーション化できないことです。</p><p>したがってこのガイドでは、別の方法を用いてドロップダウンメニューを非表示にしたいと思います。これには、<code>visibility</code> と <code>opacity</code> のプロパティを組み合わせることで、達成することができます。そしてこの方法は、<a href="https://github.com/">GitHub</a> がドロップダウンメニューを実装している方法です。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/07/github-dropdown-menu.png" class="kg-image" alt="github-dropdown-menu" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/07/github-dropdown-menu.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/07/github-dropdown-menu.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/07/github-dropdown-menu.png 1304w" sizes="(min-width: 720px) 720px" width="1304" height="575" loading="lazy"><figcaption>GitHub のドロップダウンメニュー</figcaption></figure><p>前に作成したドロップダウンクラス内に、visibility プロパティを追加し、値を hidden に設定したら、不透明度を <code>0</code> に設定します。そうすることで、ページからドロップダウンメニューが非表示になります。</p><p>ドロップダウンメニューを表示するために、<code>show</code> という別のクラスを作成します。このクラスは、<code>visible</code> の値と不透明度 <code>1</code> の visibility プロパティを保持します。そして、後ほど JavaScript を使用してこのクラスをドロップダウンメニューに追加します。</p><p>コードは以下のとおりです。</p><pre><code class="language-css">.dropdown {
  position: absolute;
  width: 250px;
  box-shadow: var(--shadow);
  border-radius: var(--radius);
  margin-top: 0.3rem;
  background: white;
  transition: all 0.1s cubic-bezier(0.16, 1, 0.5, 1);
    
  transform: translateY(0.5rem);
  visibility: hidden;
  opacity: 0;
}

.show {
  transform: translateY(0rem);
  visibility: visible;
  opacity: 1;
}

.arrow {
  transform: rotate(180deg);
  transition: 0.2s ease;
}</code></pre><p>ドロップダウンメニューの要素を非表示にするスタイルに加えて、ドロップダウンボタンをクリックしたときに矢印アイコンを回転させる、別のクラスも追加しました。</p><h2 id="-3-">ステップ 3 – ドロップダウン機能を追加する</h2><p>まず、それぞれの要素を変数に保存して再利用できるようにしましょう。</p><pre><code class="language-js">const dropdownBtn = document.getElementById("btn");
const dropdownMenu = document.getElementById("dropdown");
const toggleArrow = document.getElementById("arrow");</code></pre><p>次のステップでは、ボタンがクリックされたときにドロップダウン要素の <code>show</code> というクラスの切り替えと、ドロップダウンの矢印の回転を行う関数を作成します。この関数の名前を <code>toggleDropdown</code> とします。</p><pre><code class="language-js">const toggleDropdown = function () {
  dropdownMenu.classList.toggle("show");
  toggleArrow.classList.toggle("arrow");
};</code></pre><p>そして、<code>addEventListener</code> メソッドを使用して、ドロップダウンボタンでこの関数を呼び出すことができます。そうすれば、ボタンをクリックするたびにドロップダウンメニューの表示と非表示を制御する関数が起動されます。</p><pre><code class="language-js">dropdownBtn.addEventListener("click", function (e) {
  e.stopPropagation();
  toggleDropdown();
});</code></pre><p>もうお気づきかもしれませんが、ドロップダウン関数内に <code>stopPropagation()</code> メソッドを追加しました。これにより、ボタン要素の機能が親要素に伝達されるのを防ぎ、関数が 2 回実行されるのを防ぐことができます。次のセクションでこれについて詳しく説明します。</p><p>出力は以下のようになります。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/07/toggle-dropdown-menu-.gif" class="kg-image" alt="toggle-dropdown-menu-" width="938" height="373" loading="lazy"><figcaption>ドロップダウンメニューの切り替え</figcaption></figure><h2 id="dom-">DOM 要素をクリックしたときにドロップダウンメニューを閉じる方法</h2><p>ドロップダウンメニューは通常、次の 4 つの異なる方法で閉じられます。</p><ul><li>ドロップダウンメニューを有効にするボタンをクリックすること</li><li>子要素のいずれかをクリックすること</li><li>メニューの外側 (ボディ部分) をクリックすること</li><li>Esc キーまたは下矢印キーを押すこと</li></ul><p>ただし、このガイドでは、最初の 3 つに焦点を当てましょう。</p><p>まず、<code>document.documentElement</code> を使用してルート要素 <code>&lt;html&gt;</code> を選択します。そうしたら、先ほどと同様に <code>toggleDropdown()</code> 関数を渡します。</p><p>しかし、今回はドロップダウンメニューが <code>show</code> というクラスを持っているかどうかをチェックする条件を設定したいと思います。<code>show</code> というクラスを持っている場合にのみ、ドロップダウンメニューを閉じる関数を実行したいからです。</p><pre><code class="language-js">document.documentElement.addEventListener("click", function () {
  if (dropdownMenu.classList.contains("show")) {
    toggleDropdown();
  }
});</code></pre><p>その結果が、最終的にこのようになります。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/07/close-dropdown-when-dom-element-is-clicked.gif" class="kg-image" alt="close-dropdown-when-dom-element-is-clicked" width="904" height="349" loading="lazy"><figcaption>DOM 要素をクリックするとドロップダウンが閉じる</figcaption></figure><p>これが JavaScript でドロップダウンメニューを作成する方法です。以下は、このドロップダウンメニューをテストするための CodePen ファイルです。</p><figure class="kg-card kg-embed-card"><iframe height="400" scrolling="no" title="Embedded content" src="https://codepen.io/evavic44/embed/eYKQJjJ?default-tab=html%2Cresult&amp;theme-id=light" frameborder="no" loading="lazy" allowtransparency="true" allowfullscreen="true" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-variant-numeric: inherit; font-variant-east-asian: inherit; font-variant-alternates: inherit; font-weight: 400; font-stretch: inherit; line-height: inherit; font-family: Lato, sans-serif; font-optical-sizing: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-size: 22px; vertical-align: middle; color: rgb(10, 10, 35); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; width: 720px;"></iframe></figure><h2 id="-">まとめ</h2><p>この投稿が興味深かったり、役に立ったと感じていただければ幸いです。今後の投稿を見逃さないよう、お友達と共有するか、私のブログを読者登録してみてください。読んでくださりありがとうございます。</p><p><a href="https://github.com/evavic44">GitHub</a> | <a href="https://twitter.com/victorekea">Twitter</a> | <a href="https://eke.hashnode.dev/">Blog</a> | <a href="https://victoreke.com/">Portfolio</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript の forEach – JS の配列をループする方法 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript の forEach メソッドは、配列をループするいくつかの方法の 1 つです。それぞれの方法には独自の機能があり、目的に応じて、どの方法を使用するかを決めるのはあなた次第です。 この投稿では、JavaScript の forEach メソッドを詳しく見ていきます。 まず、以下の配列があるとします。 const numbers = [1, 2, 3, 4, 5]; 従来の「for ループ」を使用して配列をループすると、次のようになります。 for (i = 0; i < numbers.length; i++) {   console.log(numbers[i]); } forEach( ) メソッドが特別な理由。 forEach メソッドも配列をループするために使用されますが、従来の「for ループ」とは異なる方法で関数を使用します。 forEach メソッドは、コールバック関数 [https://www.freecodecamp.org/news/javascript-callback-functions-what-are-callbacks-i ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/javascript-foreach-how-to-loop-through-an-array-in-js/</link>
                <guid isPermaLink="false">644ca2d2575f110652ab43ca</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Saki Basken ]]>
                </dc:creator>
                <pubDate>Mon, 08 May 2023 13:40:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/05/5f9c99d8740569d1a4ca2204-1.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/javascript-foreach-how-to-loop-through-an-array-in-js/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript forEach – How to Loop Through an Array in JS</a>
      </p><p>JavaScript の forEach メソッドは、配列をループするいくつかの方法の 1 つです。それぞれの方法には独自の機能があり、目的に応じて、どの方法を使用するかを決めるのはあなた次第です。</p><p>この投稿では、JavaScript の forEach メソッドを詳しく見ていきます。</p><p>まず、以下の配列があるとします。</p><pre><code class="language-javascript">const numbers = [1, 2, 3, 4, 5];</code></pre><p>従来の「for ループ」を使用して配列をループすると、次のようになります。</p><pre><code class="language-javascript">for (i = 0; i &lt; numbers.length; i++) {
  console.log(numbers[i]);
}</code></pre><h2 id="foreach-">forEach( ) メソッドが特別な理由。</h2><p>forEach メソッドも配列をループするために使用されますが、従来の「for ループ」とは異なる方法で関数を使用します。</p><p>forEach メソッドは、<a href="https://www.freecodecamp.org/news/javascript-callback-functions-what-are-callbacks-in-js-and-how-to-use-them/">コールバック関数</a>を次のパラメーターと共に配列の各要素に渡します。</p><ul><li>現在の値 (必須) - 現在の配列要素の値 </li><li>インデックス (オプション) - 現在の要素のインデックス番号</li><li>配列 (オプション) - 現在の要素が属する配列オブジェクト</li></ul><p>これらのパラメーターを一つずつ説明していきます。</p><p>まず、forEach メソッドを使用して配列をループするには、コールバック関数 (または無名関数) が必要です。</p><pre><code class="language-javascript">numbers.forEach(function() {
    // code
});</code></pre><p>この関数は、配列のすべての要素に対して実行されます。配列の要素を少なくとも 1 つ、パラメーターとして受け取る必要があります。</p><pre><code class="language-javascript">numbers.forEach(function(number) {
    console.log(number);
});</code></pre><p>配列をループするために必要なことはこれだけです。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/05/Ads-z-2.png" class="kg-image" alt="Ads-z-2" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/05/Ads-z-2.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/05/Ads-z-2.png 824w" sizes="(min-width: 720px) 720px" width="824" height="348" loading="lazy"></figure><p>代わりに、コードを簡素化するために ES6 の、アロー関数表現を使用することもできます。</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">numbers.forEach(number =&gt; console.log(number));</code></pre><figcaption>アロー関数表現</figcaption></figure><h2 id="-">オプションのパラメーター</h2><h3 id="--1"><strong><strong>インデックス</strong></strong></h3><p>それでは、オプションのパラメーターも見てみましょう。1 つ目は「インデックス」パラメーターで、各要素のインデックス番号を表します。</p><p>基本的に、2 番目のパラメーターとしてインデックスを含めることで、それぞれの要素のインデックス番号を確認できます。</p><pre><code class="language-javascript">numbers.forEach((number, index) =&gt; {
    console.log('Index: ' + index + ' Value: ' + number);
});</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/05/Ads-z-3.png" class="kg-image" alt="Ads-z-3" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/05/Ads-z-3.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/05/Ads-z-3.png 822w" sizes="(min-width: 720px) 720px" width="822" height="328" loading="lazy"></figure><h3 id="--2">配列</h3><p>配列パラメータとは、配列そのものを表します。これもオプションであり、必要に応じてさまざまな用途で使用することができますが、基本、呼び出した場合には、配列の要素数と同じ回数だけ印刷されます。</p><pre><code class="language-javascript">numbers.forEach((number, index, array) =&gt; {
    console.log(array);
});</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/05/Ads-z.png" class="kg-image" alt="Ads-z" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/05/Ads-z.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/05/Ads-z.png 806w" sizes="(min-width: 720px) 720px" width="806" height="232" loading="lazy"></figure><p>このビデオで forEach( ) メソッドの使用例を見ることができます。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.25%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/E2GawbHDFfs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Embedded content" loading="lazy" name="fitvid0" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 720px; height: 405px;"></iframe>
          </div>
        </div>
      </figure><h2 id="--3">ブラウザーのサポート</h2><p>Array.forEach メソッドは、IE バージョン 8 以前を除くすべてのブラウザで<a href="https://caniuse.com/?search=Array.foreach">サポートされています</a>。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/05/Ads-z--1-.png" class="kg-image" alt="Ads-z--1-" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/05/Ads-z--1-.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/05/Ads-z--1-.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/05/Ads-z--1-.png 1261w" sizes="(min-width: 720px) 720px" width="1261" height="354" loading="lazy"><figcaption><a href="https://caniuse.com">caniuse.com</a></figcaption></figure><p><strong>ウェブ開発についてもっと詳しく知りたい方は、ぜひ私の </strong><a href="https://www.youtube.com/channel/UC1EgYPCvKCXFn8HlpoJwY3Q?view_as=subscriber"><strong>YouTube チャンネル</strong></a><strong>にアクセスしてみて下さい。</strong></p><p>最後まで読んでいただきありがとうございます！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript 配列への追加 – push、unshift、concat メソッドで配列に要素を追加する方法 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript の配列は筆者のお気に入りのデータ型です。動的で、使いやすく、多数の組み込みメソッドが提供されているからです。 しかし選択肢が多ければ多いほど、どれを使うべきか分かり辛くなることもあります。 この記事では、JavaScript の配列に要素を追加する一般的な方法をいくつか解説します。 配列への追加方法のインタラクティブな Scrim (訳注: Scrimba というサイトの機能で、インタラクティブなエディタと動画がセットになっています。) push メソッド 1 つ目の、そしておそらく最もよく見かけるであろう JavaScript 配列のメソッドは push() です。push() メソッドは、配列の末尾に要素を追加するために使われます。 ではここである配列を例に考えます。配列の各要素は、あなたがやらなければならないタスクを表す文字列になっているとしましょう。先にあったタスクから順に完了できるように、新しい要素は配列の末尾に追加するのが良いでしょう。 この例をコードで見てみましょう。 const arr = ['First item', 'Second ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/javascript-array-insert-how-to-add-to-an-array-with-the-push-unshift-and-concat-functions/</link>
                <guid isPermaLink="false">643324a6e5e4fe05af49571b</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Mon, 10 Apr 2023 11:59:28 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/04/Hello--my-name-is-Matthew.-Nice-to-meet-you..png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/javascript-array-insert-how-to-add-to-an-array-with-the-push-unshift-and-concat-functions/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Array Insert - How to Add to an Array with the Push, Unshift, and Concat Functions</a>
      </p><p>JavaScript の配列は筆者のお気に入りのデータ型です。動的で、使いやすく、多数の組み込みメソッドが提供されているからです。</p><p>しかし選択肢が多ければ多いほど、どれを使うべきか分かり辛くなることもあります。</p><p>この記事では、JavaScript の配列に要素を追加する一般的な方法をいくつか解説します。</p><h3 id="-scrim">配列への追加方法のインタラクティブな Scrim</h3><p>(訳注: Scrimba というサイトの機能で、インタラクティブなエディタと動画がセットになっています。)</p><!--kg-card-begin: html--><iframe src="https://scrimba.com/scrim/cLwq7WCZ?pl=pd9ZLcW&amp;embed=freecodecamp,mini-header,no-sidebar" width="100%" height="420" title="Embedded content" loading="lazy"></iframe><!--kg-card-end: html--><h2 id="push-">push メソッド</h2><p>1 つ目の、そしておそらく最もよく見かけるであろう JavaScript 配列のメソッドは <em>push()</em> です。push() メソッドは、配列の末尾に要素を追加するために使われます。</p><p>ではここである配列を例に考えます。配列の各要素は、あなたがやらなければならないタスクを表す文字列になっているとしましょう。先にあったタスクから順に完了できるように、新しい要素は配列の末尾に追加するのが良いでしょう。</p><p>この例をコードで見てみましょう。</p><pre><code class="language-javascript">const arr = ['First item', 'Second item', 'Third item'];

arr.push('Fourth item');

console.log(arr); // ['First item', 'Second item', 'Third item', 'Fourth item']
</code></pre><p>push のおかげで、シンプルな構文で配列の末尾に要素を追加できました。</p><p>では一度に 2 つや 3 つの要素を追加したいとしましょう。その場合はどうしたらいいでしょうか？実は、<em>push()</em> は一度に複数の要素を受け取って追加することができます。</p><pre><code class="language-javascript">const arr = ['First item', 'Second item', 'Third item'];

arr.push('Fourth item', 'Fifth item');

console.log(arr); // ['First item', 'Second item', 'Third item', 'Fourth item', 'Fifth item']
</code></pre><p>では配列にいくつかタスクを追加できたところで、次は抱えているタスクが多すぎないかチェックするために、配列に要素がいくつあるか数えたいと思います。</p><p>幸いなことに、<em>push()</em> は戻り値として、要素を追加した後の配列の長さを返します。</p><pre><code class="language-javascript">const arr = ['First item', 'Second item', 'Third item'];

const arrLength = arr.push('Fourth item', 'Fifth item');

console.log(arrLength); // 5 
console.log(arr); // ['First item', 'Second item', 'Third item', 'Fourth item', 'Fifth item']
</code></pre><h2 id="unshift-">unshift メソッド</h2><p>すべてのタスクは平等に造られているとは限りません。配列にタスクを追加していく中で、突然他より緊急性の高いタスクが出てくることもあるでしょう。</p><p>そんな時に強い味方となる <em>unshift()</em> を紹介します。<em>unshift()</em> を使うと、配列の先頭に要素を追加することができます。</p><pre><code class="language-javascript">const arr = ['First item', 'Second item', 'Third item'];

const arrLength = arr.unshift('Urgent item 1', 'Urgent item 2');

console.log(arrLength); // 5 
console.log(arr); // ['Urgent item 1', 'Urgent item 2', 'First item', 'Second item', 'Third item']
</code></pre><p>上記の例を見て気付いたかもしれませんが、<em>push()</em> メソッドと同様に <em>unshift()</em> も、追加後の配列の長さを返します。また、2 つ以上の要素を一度に追加することも可能です。</p><h2 id="concat-">concat メソッド</h2><p>concatenate (連結) の略である <em>concat()</em> メソッドは、2 つ以上の配列を連結するために使われます。</p><p>上で説明したように、<em>unshift()</em> メソッドと <em>push()</em> メソッドは追加後の配列の長さを返します。一方、<em>concat()</em> は真新しい配列を返します。</p><p>これは重要な特徴で、このため <em>concat()</em> は、変更 (mutate) したくない配列 (例えば React の state に保存されている配列) を扱う場合にとても便利です。</p><p>シンプルな使用例は次のようになります。</p><pre><code class="language-javascript">const arr1 = ['?', '?'];
const arr2 = ['?', '?'];

const arr3 = arr1.concat(arr2);

console.log(arr3); // ["?", "?", "?", "?"] 
</code></pre><p>では連結したい配列が複数あるとしましょう。心配いりません。この場合も <em>concat()</em> が助けてくれます！</p><pre><code class="language-javascript">const arr1 = ['?', '?'];
const arr2 = ['?', '?'];
const arr3 = ['?', '?'];

const arr4 = arr1.concat(arr2,arr3);

console.log(arr4); // ["?", "?", "?", "?", "?", "?"]
</code></pre><h3 id="-scrim-1">理解を深めるためのインタラクティブな Scrim</h3><!--kg-card-begin: html--><iframe src="https://scrimba.com/scrim/cZa9DZsz?pl=pd9ZLcW&amp;embed=freecodecamp,mini-header,no-sidebar" width="100%" height="420" title="Embedded content" loading="lazy"></iframe><!--kg-card-end: html--><h3 id="concat--1">concat を利用したクローン</h3><p><em>concat()</em> は既存の配列を変更したくない場合に役立つと言ったのを覚えていますか？この特徴を活用して、ある配列の中身を新しい配列へとコピーする方法を見ていきましょう。</p><pre><code class="language-javascript">const arr1 = ["?", "?", "?", "?", "?", "?"];

const arr2 = [].concat(arr1);

arr2.push("?");

console.log(arr1) //["?", "?", "?", "?", "?", "?"]
console.log(arr2) //["?", "?", "?", "?", "?", "?", "?"]
</code></pre><p>素晴らしい！このように、<em>concat()</em> を使って配列を "クローン" することができます。</p><p>しかし、この方法にはちょっとした落とし穴があります。新しい配列は、コピー元の配列の「シャローコピー (shallow copy)」です。つまりオブジェクトはすべて<strong>参照コピー</strong>で、実体のあるオブジェクトではありません。</p><p>もっと分かりやすく説明するために、例を見てみましょう。</p><pre><code class="language-javascript">const arr1 = [{food:"?"}, {food:"?"}, {food:"?"}]

const arr2 = [].concat(arr1);

// arr1 と arr2 両方が変更される
arr2[1].food = "!";
// arr2 だけが変更される
arr2.push({food:"*"})

console.log(arr1) // [ { food: '?' }, { food: '!' }, { food: '?' } ]

console.log(arr2) // [ { food: '?' }, { food: '!' }, { food: '?' }, { food: '*' } ] 
</code></pre><p>元の配列を<strong>直接</strong>変更していないにもかかわらず、クローン後の配列に加えた変更によって、元の配列も影響されています。</p><p>配列を適切に "ディープクローン" する方法は複数ありますが、この記事では解説しませんので調べてみてください。</p><h2 id="tl-dr">TL;DR</h2><p>配列の末尾に要素を追加したい場合、<em>push()</em> を使います。配列の先頭に要素を追加する場合には <em>unshift()</em> を使います。そして複数の配列を連結するには <em>concat()</em> を使います。</p><p>もちろん、配列に要素を追加する方法は他にもたくさんあります。ぜひ自分でも調べて、便利な配列メソッドを見つけてください！</p><p>筆者の <a href="https://twitter.com/nehemiahkiv">Twitter</a> もありますのでお気軽にご連絡ください。要素の追加に使うお気に入りの配列メソッドなどもぜひ教えてください。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript の日付を一行のコードでフォーマットする方法 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript で日付をフォーマットする必要がある時、筆者は長いこと Date-fns のようなライブラリを利用してきました。しかし JavaScript がデフォルトで提供しているシンプルな日付形式だけを必要とするような、小規模なプロジェクトでこれをやるのは気持ち悪く感じます。 他の開発者も同じことをしているのをよく見かけます。そして筆者もこれがベストな方法だと思っていましたが、最近になって、JavaScript の日付の整形には 必ずしもライブラリを使わなくてもよいと気が付きました。 こちらのコードで試すことができます👇 new Date().toLocaleDateString('en-us', { weekday:"long", year:"numeric", month:"short", day:"numeric"}) // "Friday, Jul 2, 2021" 動作を確認したら、次はなぜこれでうまくいくのかと、JavaScript の日付を一行のコードでフォーマットする方法をいくつか学びましょう。 JavaScript の日付を一行のコードでフォー ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-format-dates-in-javascript/</link>
                <guid isPermaLink="false">641c0c4766c8dee603febf9b</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Mon, 27 Mar 2023 16:48:56 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/03/Formatting-Date-in-JavaScript-with-1-line-of-code.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-format-dates-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Format Dates in JavaScript with One Line of Code</a>
      </p><p>JavaScript で日付をフォーマットする必要がある時、筆者は長いこと <code>Date-fns</code> のようなライブラリを利用してきました。しかし JavaScript がデフォルトで提供しているシンプルな日付形式だけを必要とするような、小規模なプロジェクトでこれをやるのは気持ち悪く感じます。</p><p>他の開発者も同じことをしているのをよく見かけます。そして筆者もこれがベストな方法だと思っていましたが、最近になって、JavaScript の日付の整形には<strong>必ずしもライブラリを使わなくてもよい</strong>と気が付きました。</p><p>こちらのコードで試すことができます👇</p><pre><code class="language-javascript">new Date().toLocaleDateString('en-us', { weekday:"long", year:"numeric", month:"short", day:"numeric"})
// "Friday, Jul 2, 2021"
</code></pre><p>動作を確認したら、次はなぜこれでうまくいくのかと、JavaScript の日付を一行のコードでフォーマットする方法をいくつか学びましょう。</p><h3 id="javascript-scrim">JavaScript の日付を一行のコードでフォーマットする方法についてのインタラクティブな Scrim</h3><p>(訳注: Scrimba というサイトの機能で、インタラクティブなエディタと動画がセットになっています。)</p><!--kg-card-begin: html--><iframe src="https://scrimba.com/scrim/co6234e429a20cd020aceb3cc?embed=freecodecamp,mini-header,no-sidebar" width="100%" height="420" title="Embedded content" loading="lazy"></iframe><!--kg-card-end: html--><h1 id="js-">JS で日付をフォーマットする方法</h1><p>JavaScript では日付の取得は問題なくできることが多いですが、その日付をプロジェクトに合わせてフォーマットするのは、初心者にとって難しい場合があります。それで多くの人が結局ライブラリを使うことになるのです。</p><p>JavaScript で日付を取得するために最もよく使われる方法は <code>new Date()</code> オブジェクトです。</p><p>デフォルトでは、ターミナルで <code>new Date()</code> を実行すると、ブラウザのタイムゾーンを使用した日付が <strong>Fri Jul 02 2021 12:44:45 GMT+0100 (British Summer Time)</strong> というようにフルテキストの文字列で表示されます。</p><p>しかしこのままウェブページやアプリケーションに表示したのでは、読みづらく、技術的にも拙く見えることでしょう。そこで、このような日付をフォーマットする方法を探そうと思うはずです。</p><p>では、Date オブジェクトに作用するメソッドをいくつか見ていきましょう。</p><h1 id="javascript-">JavaScript の日付関連メソッド</h1><p>Date オブジェクトに使えるメソッドは多数あり、これを使って Date オブジェクトから情報を取得できます。その一部を紹介します。</p><ul><li><code>getFullYear()</code> – 年を 4 桁の数字で取得する (yyyy)</li><li><code>getMonth()</code> – 月を数字で取得する (0-11)</li><li><code>getDate()</code> – 日を数字で取得する (1-31)</li><li><code>getHours()</code> – 時を取得する (0-23)</li></ul><p>他にもたくさんあります。</p><p>残念ながら、日付を希望の形式に変換するためには、これらのメソッドに多くのコードを付け加える必要があることがほとんどです。</p><p>たとえば、<code>new Date().getMonth()</code> は <strong>July (7 月)</strong> を表す「6」を出力します。プロジェクトで「July」という文字を使うには次のような長いコードが必要で、煩わしくなることもあるでしょう。</p><pre><code class="language-javascript">const currentMonth = new Date();
const months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
console.log(months[currentMonth.getMonth()]);
</code></pre><p>それでは、もっと便利に日付をフォーマットできる 2 つのメソッドを見ていきます。</p><h2 id="javascript-todatestring-">JavaScript の toDateString() メソッド</h2><p>JavaScript の <code>toDateString()</code> メソッドは、Date オブジェクトの日付の部分を次の形式の文字列で返します。</p><ol><li>曜日の最初の 3 文字</li><li>月名の最初の 3 文字</li><li>必要に応じて左側がゼロ埋めされた 2 桁の日付</li><li>必要に応じて左側がゼロ埋めされた最低 4 桁の年</li></ol><pre><code class="language-javascript">new Date().toDateString();
//"Fri Jul 02 2021"
</code></pre><p>このメソッドの大きな欠点の 1 つは、日付の出力形式を希望に合わせて変更できないことです。たとえば、日付を英語以外の言語で表示することができません。</p><p>では、筆者が最も良いと思うもう 1 つのメソッドを見ていきましょう。</p><h2 id="javascript-tolocaledatestring-">JavaScript の toLocaleDateString() メソッド</h2><p>このメソッドは、Date オブジェクトを地域ごとの書き方に合わせた文字列にして返します。また引数でオプションを指定でき、関数のふるまいをカスタマイズできます。</p><p><strong>構文:</strong></p><pre><code class="language-javascript">toLocaleDateString()
toLocaleDateString(locales)
toLocaleDateString(locales, options)
</code></pre><p>例と出力をいくつか見てみましょう。</p><pre><code class="language-javascript">const currentDate = new Date();

const options = { weekday: 'long', year: 'numeric', month: 'short', day: 'numeric' };

console.log(currentDate.toLocaleDateString('de-DE', options));
//Freitag, 2. Juli 2021

console.log(currentDate.toLocaleDateString('ar-EG', options))
// الجمعة، ٢ يوليو ٢٠٢١

console.log(currentDate.toLocaleDateString('en-us', options));
//Friday, Jul 2, 2021
</code></pre><p>また、ロケールとオプションを指定しないことも可能です。</p><pre><code class="language-javascript">new Date().toLocaleDateString()
// "7/2/2021"
</code></pre><p>そしてロケールだけを指定することも可能です。この場合、ブラウザのタイムゾーンを基に、一つ前の例と同じ情報を出力します。</p><pre><code class="language-javascript">new Date().toLocaleDateString('en-US')
// "7/2/2021"
</code></pre><p>また、必要に応じてオプションを組み合わせることもできます。基本的な 4 つのオプションは次の通りです。</p><ul><li><code>weekday</code> – 曜日を表示形式の指定 (short または long) に合わせて出力する</li><li><code>year</code> – 年を数字で出力する</li><li><code>month</code> – 月を表示形式の指定 (short または long) に合わせて出力する</li><li><code>day</code> – 日を数字で出力する</li></ul><pre><code class="language-javascript">new Date().toLocaleDateString('en-us', { weekday:"long", year:"numeric", month:"short"})
// "Jul 2021 Friday"

new Date().toLocaleDateString('en-us', { year:"numeric", month:"short"})
// "Jul 2021"
</code></pre><h1 id="-">まとめ</h1><p>Date オブジェクトにはフォーマット用メソッドが 7 種類ほどあります。それぞれのメソッドで所定の値が得られます。</p><ol><li><code>toString()</code> では <strong>Fri Jul 02 2021 14:03:54 GMT+0100 (British Summer Time)</strong></li><li><code>toDateString()</code> では <strong>Fri Jul 02 2021</strong></li><li><code>toLocaleString()</code> では <strong>7/2/2021, 2:05:07 PM</strong></li><li><code>toLocaleDateString()</code> では <strong>7/2/2021</strong></li><li><code>toGMTString()</code> では <strong>Fri, 02 Jul 2021 13:06:02 GMT</strong></li><li><code>toUTCString()</code> では <strong>Fri, 02 Jul 2021 13:06:28 GMT</strong></li><li><code>toISOString()</code> では <strong>2021-07-02T13:06:53.422Z</strong></li></ol><p>さらに高度な日付形式を使いたい場合は、カスタムフォーマットを自作する必要があります。カスタム日付フォーマットの作成方法については、下記のリソースを参考にしてください。</p><h2 id="--1">役に立つリソース</h2><ul><li><a href="https://css-tricks.com/everything-you-need-to-know-about-date-in-javascript/">Everything You Need to Know About Date in JavaScript</a></li><li><a href="https://www.tabnine.com/academy/javascript/how-to-format-date/">JavaScript - How to Format Date in JavaScript</a></li><li><a href="https://flaviocopes.com/how-to-format-date-javascript/">How to format a date in JavaScript</a></li><li><a href="https://www.toptal.com/software/definitive-guide-to-datetime-manipulation">The Definitive Guide to DateTime Manipulation</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript でよく使われる HTTP リクエスト実行方法 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript には HTTP リクエストを実行できる優れたモジュールやメソッドがあり、サーバー側のリソースにデータを送受信するために使えます。この記事では、JavaScript で HTTP リクエストを実行する方法のうち、よく使われるものをいくつか紹介します。 Ajax Ajax は非同期の HTTP リクエストを行う古典的な方法です。データは HTTP POST メソッドを使って送信され、HTTP GET メソッドを使って受信されます。GET リクエストの実行方法を見てみましょう。ここでは、ランダムなデータを JSON 形式で返してくれる、開発者向け無料オンライン REST API「JSONPlaceholder」を使用します。 Ajax で HTTP リクエストを実行するには、まず XMLHttpRequest() で新しくオブジェクトを初期化して、次に URL エンドポイントと HTTP メソッド (この例では GET) を指定します。最後に、open() メソッドを使って HTTP メソッドと URL エンドポイントを結び付け、 send() メソッドを呼び出して ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/here-is-the-most-popular-ways-to-make-an-http-request-in-javascript-954ce8c95aaa/</link>
                <guid isPermaLink="false">63f218ce721fc106335f1a2a</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ HTTP ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Ajax ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Angular ]]>
                    </category>
                
                    <category>
                        <![CDATA[ AXIOS ]]>
                    </category>
                
                    <category>
                        <![CDATA[ jQuery ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Mon, 20 Feb 2023 05:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_gqHgCNubMncv7EwWNdArGQ.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/here-is-the-most-popular-ways-to-make-an-http-request-in-javascript-954ce8c95aaa/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Here are the most popular ways to make an HTTP request in JavaScript</a>
      </p><p>JavaScript には HTTP リクエストを実行できる優れたモジュールやメソッドがあり、サーバー側のリソースにデータを送受信するために使えます。この記事では、JavaScript で HTTP リクエストを実行する方法のうち、よく使われるものをいくつか紹介します。</p><h3 id="ajax">Ajax</h3><p>Ajax は非同期の HTTP リクエストを行う古典的な方法です。データは HTTP POST メソッドを使って送信され、HTTP GET メソッドを使って受信されます。<code>GET</code> リクエストの実行方法を見てみましょう。ここでは、ランダムなデータを JSON 形式で返してくれる、開発者向け無料オンライン REST API「JSONPlaceholder」を使用します。</p><p>Ajax で HTTP リクエストを実行するには、まず <code>XMLHttpRequest()</code> で新しくオブジェクトを初期化して、次に URL エンドポイントと HTTP メソッド (この例では GET) を指定します。最後に、<code>open()</code> メソッドを使って HTTP メソッドと URL エンドポイントを結び付け、<code>send()</code> メソッドを呼び出してリクエストを実行します。</p><p>この例では <code>XMLHTTPRequest.onreadystatechange</code> プロパティを使用して、HTTP レスポンスをコンソールログに出力します。このプロパティには <code>readystatechange</code> イベントが発生した時に呼び出されるイベントハンドラーを含めます。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_zXtlRe4yRF3tZkFFvBhZeA.png" class="kg-image" alt="1_zXtlRe4yRF3tZkFFvBhZeA" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_zXtlRe4yRF3tZkFFvBhZeA.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_zXtlRe4yRF3tZkFFvBhZeA.png 800w" sizes="(min-width: 720px) 720px" width="800" height="349" loading="lazy"></figure><pre><code class="language-js">const Http = new XMLHttpRequest();
const url='https://jsonplaceholder.typicode.com/posts';
Http.open("GET", url);
Http.send();

Http.onreadystatechange = (e) =&gt; {
  console.log(Http.responseText)
}
</code></pre><p>ブラウザーコンソールを確認すると、データの配列が JSON 形式で返されているのが分かります。では、リクエストが完了したかどうかを知るにはどうしたらいいのでしょうか？言い換えれば、Ajax でレスポンスを扱うにはどのようにしたらいいのでしょうか。</p><p><code>onreadystatechange</code> プロパティには <code>readyState</code> と <code>status</code> という 2 つのメソッドがあります。これを使ってリクエストの状態が確認できます。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_UfZf6qaZwNh5Mptft4WIZA.png" class="kg-image" alt="1_UfZf6qaZwNh5Mptft4WIZA" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_UfZf6qaZwNh5Mptft4WIZA.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_UfZf6qaZwNh5Mptft4WIZA.png 800w" sizes="(min-width: 720px) 720px" width="800" height="376" loading="lazy"></figure><p><code>readyState</code> が 4 の場合は、リクエストが完了したことを意味します。<code>readyState</code> プロパティには 5 種類のレスポンスがあります。<a href="https://developer.mozilla.org/ja/docs/Web/API/XMLHttpRequest/readyState">詳しくはこちら</a>を参照してください。</p><p>JavaScript で直接 Ajax を呼び出す以外にも、HTTP 呼び出しの実行に便利なメソッドには、jQuery メソッドの <code>$.Ajax</code> などがあります。次はそちらを紹介します。</p><h3 id="jquery-">jQuery メソッド</h3><p>jQuery には HTTP リクエストの扱いを楽にする多くのメソッドがあります。このメソッドを使えるようにするには、プロジェクトに jQuery ライブラリを追加します。</p><pre><code class="language-html">&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;
</code></pre><h4 id="-ajax">$.ajax</h4><p>jQuery Ajax は、HTTP 呼び出しを行う最もシンプルなメソッドの一つです。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_vZ4BqVQfsvtpJm_RCsCE2Q.png" class="kg-image" alt="1_vZ4BqVQfsvtpJm_RCsCE2Q" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_vZ4BqVQfsvtpJm_RCsCE2Q.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_vZ4BqVQfsvtpJm_RCsCE2Q.png 800w" sizes="(min-width: 720px) 720px" width="800" height="429" loading="lazy"></figure><p><code>$.ajax</code> メソッドには多くのパラメーターが指定でき、必須の物もそうでない物もあります。その中には、受け取ったレスポンスを扱うための <code>success</code> と <code>error</code> という 2 種類のコールバックオプションがあります。</p><h4 id="-get-">$.get メソッド</h4><p><code>$.get</code> メソッドは、GET リクエストを実行するために使われます。このメソッドは 2 つのパラメーターを受け付けます。エンドポイント (URL) と、コールバック関数です。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_2koN5FJuT68WIyRKTihe5w.png" class="kg-image" alt="1_2koN5FJuT68WIyRKTihe5w" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_2koN5FJuT68WIyRKTihe5w.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_2koN5FJuT68WIyRKTihe5w.png 797w" sizes="(min-width: 720px) 720px" width="797" height="287" loading="lazy"></figure><h4 id="-post">$.post</h4><p><code>$.post</code> メソッドはサーバーにデータを POST する方法です。これは 3 つのパラメーターを受け付けます。URL、POST したいデータ、そしてコールバック関数です。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_ql6Yp1EJfD7850GXhErwyw.png" class="kg-image" alt="1_ql6Yp1EJfD7850GXhErwyw" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_ql6Yp1EJfD7850GXhErwyw.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_ql6Yp1EJfD7850GXhErwyw.png 695w" width="695" height="355" loading="lazy"></figure><h4 id="-getjson">$.getJSON</h4><p><code>$.getJSON</code> メソッドは、JSON 形式のデータのみを取得します。これは 2 つのパラメーターを受け付けます。URL とコールバック関数です。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_hdcFdVHiBiRAo1YOi_Kt0Q.png" class="kg-image" alt="1_hdcFdVHiBiRAo1YOi_Kt0Q" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_hdcFdVHiBiRAo1YOi_Kt0Q.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_hdcFdVHiBiRAo1YOi_Kt0Q.png 755w" sizes="(min-width: 720px) 720px" width="755" height="291" loading="lazy"></figure><p>jQuery にはこのように、リモートサーバーにデータを要求したり送信したりする各種メソッドが備わっています。しかし、これらのメソッドは実は <code>$.ajax</code> メソッドだけで実行できます。その例が下記です。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_soPARjfQXMcZ5ccPK1QMmA.png" class="kg-image" alt="1_soPARjfQXMcZ5ccPK1QMmA" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_soPARjfQXMcZ5ccPK1QMmA.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_soPARjfQXMcZ5ccPK1QMmA.png 800w" sizes="(min-width: 720px) 720px" width="800" height="420" loading="lazy"></figure><h3 id="fetch">fetch</h3><p><code>fetch</code> は、非同期リクエストを実行できる新しい強力なウェブ API です。実のところ、HTTP リクエストの方法としてベストな、筆者のお気に入りでもある方法の 1 つが <code>fetch</code> です。<code>fetch</code> は、ES6 の特徴である「プロミス」を返します。ES6 に馴染みがないなら、<a href="https://www.freecodecamp.org/news/write-less-do-more-with-javascript-es6-5fd4a8e50ee2">こちらの記事 (英語)</a> で詳しく解説していますので参考にしてください。プロミスを使うと、非同期リクエストをスマートに扱うことができます。では <code>fetch</code> がどのように動作するか見ていきましょう。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_kz6k4VRs0RiVCasWR0pCow.png" class="kg-image" alt="1_kz6k4VRs0RiVCasWR0pCow" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_kz6k4VRs0RiVCasWR0pCow.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_kz6k4VRs0RiVCasWR0pCow.png 800w" sizes="(min-width: 720px) 720px" width="800" height="270" loading="lazy"></figure><p><code>fetch</code> 関数は、1 つ必須のパラメーターとしてエンドポイントの URL をとります。その他にも下記の例のように、オプションのパラメーターがあります。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_QasrBgYZcU4BBFHqD2bBdg.png" class="kg-image" alt="1_QasrBgYZcU4BBFHqD2bBdg" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_QasrBgYZcU4BBFHqD2bBdg.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_QasrBgYZcU4BBFHqD2bBdg.png 800w" sizes="(min-width: 720px) 720px" width="800" height="497" loading="lazy"></figure><p><code>fetch</code> には多くの利点があります。<a href="https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch">詳しくはこちら</a>を参照してください。また、fetch の他にもサーバーへのリクエスト送受信を可能にするモジュールやプラグインがあります。例えば <a href="https://github.com/axios/axios">Axios</a> です。</p><h3 id="axios">Axios</h3><p>Axios は、HTTP リクエストを実行するためのオープンソースのライブラリで、たくさんの便利な機能を備えています。使い方を見ていきましょう。</p><h4 id="-">使用方法:</h4><p>まず、Axios を追加します。プロジェクトに Axios を追加する方法は 2 種類あります。</p><p>1 つ目は、npm を使う方法です。</p><pre><code class="language-bash">npm install axios --save
</code></pre><p>上記コマンドを実行後、Axios をインポートします。</p><pre><code class="language-js">import axios from 'axios'
</code></pre><p>2 つ目は、CDN を使って Axios を追加する方法です。</p><pre><code class="language-html">&lt;script src="https://unpkg.com/axios/dist/axios.min.js"&gt;&lt;/script&gt;
</code></pre><h4 id="axios-">Axios でリクエストを実行する:</h4><p>Axios でサーバーに対してデータの送受信を行うには <code>GET</code> と <code>POST</code> を使用します。</p><h4 id="get-">GET:</h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_4wmqiPsSN5mdgjJiRaKVZg.png" class="kg-image" alt="1_4wmqiPsSN5mdgjJiRaKVZg" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_4wmqiPsSN5mdgjJiRaKVZg.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_4wmqiPsSN5mdgjJiRaKVZg.png 781w" sizes="(min-width: 720px) 720px" width="781" height="440" loading="lazy"></figure><p><code>axios</code> は 1 つの必須パラメーターと、オプションで 2 つ目のパラメーターを取ることができます。上の例ではシンプルなクエリーのデータを渡しています。</p><h4 id="post-">POST:</h4><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_ey6-vwsrm9RAhyoU15u6xQ.png" class="kg-image" alt="1_ey6-vwsrm9RAhyoU15u6xQ" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_ey6-vwsrm9RAhyoU15u6xQ.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_ey6-vwsrm9RAhyoU15u6xQ.png 755w" sizes="(min-width: 720px) 720px" width="755" height="412" loading="lazy"></figure><p><a href="https://github.com/axios/axios">Axios</a> は「プロミス」を返します。プロミスについて詳しい人は、プロミスを使うと複数のリクエストを実行できることをご存じかもしれません。Axios でも同じように、複数のリクエストを同時に実行できます。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_40Pji4utVKPpC7-dePfC6Q.png" class="kg-image" alt="1_40Pji4utVKPpC7-dePfC6Q" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_40Pji4utVKPpC7-dePfC6Q.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_40Pji4utVKPpC7-dePfC6Q.png 800w" sizes="(min-width: 720px) 720px" width="800" height="396" loading="lazy"></figure><p>Axios では他にも多くのメソッドやオプションがサポートされています。<a href="https://github.com/axios/axios">こちら</a>を参照してください。</p><h3 id="angular-httpclient">Angular HttpClient</h3><p>Angular には、Angular アプリで動作する独自の HTTP モジュールがあります。非同期リクエストの処理には <a href="http://reactivex.io/rxjs/">RxJS</a> ライブラリが使用され、HTTP リクエストを実行するための多数のオプションが提供されています。</p><h4 id="angular-httpclient-">Angular HttpClient を使用してサーバーと通信する</h4><p>Angular HttpClient を使用してリクエストを実行するには、Angular アプリ内でコードを実行する必要があります。そのためのサンプルアプリを作成しました (訳注: リンクは後述)。Angular に詳しくない方は、筆者の記事 <a href="https://www.freecodecamp.org/news/learn-how-to-create-your-first-angular-app-in-20-min-146201d9b5a7">Learn how to create your first Angular app in 20 minutes</a> を参考にしてください。</p><p>まず、<code>app.module.ts</code> で <code>HttpClientModule</code> をインポートします。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_iFuW5Fbp91VR5gwQ6XNMEQ.png" class="kg-image" alt="1_iFuW5Fbp91VR5gwQ6XNMEQ" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_iFuW5Fbp91VR5gwQ6XNMEQ.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_iFuW5Fbp91VR5gwQ6XNMEQ.png 758w" sizes="(min-width: 720px) 720px" width="758" height="632" loading="lazy"></figure><p>次に、リクエストを扱うためのサービスを作成します。<a href="https://cli.angular.io/">Angular CLI</a> を使用すれば、簡単にサービスを生成できます。</p><pre><code class="language-bash">ng g service  FetchdataService
</code></pre><p>次に、<code>fetchdataService.ts</code> サービスで HttpClient をインポートし、コンストラクターで注入 (inject) します。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_kKwELAhSSpnN8DvIgdOfcQ.png" class="kg-image" alt="1_kKwELAhSSpnN8DvIgdOfcQ" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_kKwELAhSSpnN8DvIgdOfcQ.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_kKwELAhSSpnN8DvIgdOfcQ.png 685w" width="685" height="461" loading="lazy"></figure><p>そして <code>app.component.ts</code> で <code>fetchdataService</code> をインポートします。</p><pre><code class="language-ts">//import
import { FetchdataService } from './fetchdata.service';
</code></pre><p>最後に、サービスを呼び出して実行します。</p><p><code>app.component.ts:</code></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_OrRe183Yaclt19n5ZQ194Q.png" class="kg-image" alt="1_OrRe183Yaclt19n5ZQ194Q" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/02/1_OrRe183Yaclt19n5ZQ194Q.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2023/02/1_OrRe183Yaclt19n5ZQ194Q.png 788w" sizes="(min-width: 720px) 720px" width="788" height="620" loading="lazy"></figure><p>サンプルアプリのデモは <a href="https://stackblitz.com/edit/angular-httpclinent">Stackblitz</a> で確認できます。</p><h3 id="--1">まとめ</h3><p>この記事では、JavaScript における HTTP リクエストの実行方法で最もよく使われる物を見てきました。</p><p>ここまでお読みいただきありがとうございました。この記事を気に入っていただけましたら筆者の <a href="https://twitter.com/SaidHYN">Twitter</a> までご連絡ください。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript で配列をクローンする方法 ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript では何をするにも様々なやり方があります。以前 JavaScript で pipe/compose を書く 10 の方法 [https://www.freecodecamp.org/news/10-ways-to-write-pipe-compose-in-javascript-f6d54c575616/] についての記事を書きましたが、今回は配列について説明します。 1. スプレッド構文 (シャローコピー) ES6 が公開されて以来、これが最も人気のある方法です。簡潔な構文で、React や Redux のようなライブラリを使うときにその便利さがわかるでしょう。 numbers = [1, 2, 3]; numbersCopy = [...numbers]; 注意: この方法は多次元配列を安全にコピーするものではありません。要素が配列やオブジェクトの場合、値ではなく、参照によってコピーされます。 こちらは問題がありません。 numbersCopy.push(4); console.log(numbers, numbersCopy); // [1, 2, ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-clone-an-array-in-javascript-1d3183468f6a/</link>
                <guid isPermaLink="false">6321f2b587a3a3073e97f08a</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Mell ]]>
                </dc:creator>
                <pubDate>Wed, 02 Nov 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/09/1_fWhAxeITIQaYWeqE7wogkQ.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-clone-an-array-in-javascript-1d3183468f6a/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to clone an array in JavaScript</a>
      </p><p>JavaScript では何をするにも様々なやり方があります。以前 <a href="https://www.freecodecamp.org/news/10-ways-to-write-pipe-compose-in-javascript-f6d54c575616/">JavaScript で pipe/compose を書く 10 の方法</a>についての記事を書きましたが、今回は配列について説明します。</p><h3 id="1-"><strong><strong>1. </strong></strong>スプレッド構文 (シャローコピー)</h3><p>ES6 が公開されて以来、これが最も人気のある方法です。簡潔な構文で、React や Redux のようなライブラリを使うときにその便利さがわかるでしょう。</p><pre><code class="language-js">numbers = [1, 2, 3];
numbersCopy = [...numbers];
</code></pre><p><strong>注意: </strong>この方法は多次元配列を安全にコピーするものではありません。要素が配列やオブジェクトの場合、<em>値</em>ではなく、<em>参照</em>によってコピーされます。</p><p>こちらは問題がありません。</p><pre><code class="language-js">numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers 配列はそのままです。
</code></pre><p>こちらは問題があります。</p><pre><code class="language-js">nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// 両方の配列内の数値が変化しました。どちらも同じ参照を共有しているからです。
</code></pre><h3 id="2-for-"><strong><strong>2. </strong></strong>古き良き for() ループ (シャローコピー)</h3><p>関数型プログラミングが流行っていることを考えると、これは１番人気がない方法でしょう。</p><p>純粋型でも非純粋型でも、宣言型でも命令型でも実行できます。</p><pre><code class="language-js">numbers = [1, 2, 3];
numbersCopy = [];

for (i = 0; i &lt; numbers.length; i++) {
  numbersCopy[i] = numbers[i];
}
</code></pre><p><strong>注意: </strong>この方法は多次元配列を安全にコピーするものではありません。<code>=</code> &nbsp;演算子を使っているので、配列やオブジェクトについては<em>値</em>ではなく、<em>参照</em>がコピーされます。</p><p>こちらは問題がありません。</p><pre><code class="language-js">numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers 配列はそのままです。
</code></pre><p>こちらは問題があります。</p><pre><code class="language-js">nestedNumbers = [[1], [2]];
numbersCopy = [];

for (i = 0; i &lt; nestedNumbers.length; i++) {
  numbersCopy[i] = nestedNumbers[i];
}

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// 両方の配列内の数値が変化しました。どちらも同じ参照を共有しているからです。
</code></pre><h3 id="3-while-"><strong><strong>3. </strong></strong>古き良き while() ループ (シャローコピー)</h3><p><code>for</code> と同じく、純粋型でも非純粋型でも、なんとかかんとか…とにかく動きます！</p><pre><code class="language-js">numbers = [1, 2, 3];
numbersCopy = [];
i = -1;

while (++i &lt; numbers.length) {
  numbersCopy[i] = numbers[i];
}
</code></pre><p><strong>注意: </strong>この方法も、配列やオブジェクトについては<em>値</em>ではなく<em>参照</em>がコピーされます。</p><p>こちらは問題がありません。</p><pre><code class="language-js">numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers 配列はそのままです。
</code></pre><p>こちらは問題があります。</p><pre><code class="language-js">nestedNumbers = [[1], [2]];
numbersCopy = [];

i = -1;

while (++i &lt; nestedNumbers.length) {
  numbersCopy[i] = nestedNumbers[i];
}

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// 両方の配列内の数値が変化しました。どちらも同じ参照を共有しているからです。
</code></pre><h3 id="4-array-map-"><strong><strong>4. </strong></strong>Array.map (シャローコピー)</h3><p>現代の分野に戻ると、<code>map</code> &nbsp;関数があります。<code>map</code> とは、<a href="https://ja.wikipedia.org/wiki/%E5%B0%84_(%E5%9C%8F%E8%AB%96)">数学用語に由来し</a>、ある集合の構造を保ったまま別の種類の集合に変換する概念です。</p><p>平易な言葉で言うと、つまり <code>Array.map</code> は毎回同じ長さの配列を返すということです。</p><p>数値のリストを 2 倍にするには、<code>map</code> と <code>double</code> 関数を使用します。</p><pre><code class="language-js">numbers = [1, 2, 3];
double = (x) =&gt; x * 2;

numbers.map(double);
</code></pre><h4 id="-">クローンするんじゃなかったの？？</h4><p>そうですね、この記事は配列のクローンについてです。配列を複製するには、呼び出された <code>map</code> 関数の中で、その要素をそのまま返します。</p><pre><code class="language-js">numbers = [1, 2, 3];
numbersCopy = numbers.map((x) =&gt; x);
</code></pre><p>もう少し数学的に言うと、<code>(x) =&gt; x</code> は<a href="https://en.wikipedia.org/wiki/Identity_function">恒等関数</a>と呼ばれます。これは与えられたパラメータが何であれ、それを返します。</p><p><code>map(identity)</code> はリストのクローンを作成します。</p><pre><code class="language-js">identity = (x) =&gt; x;
numbers.map(identity);
// [1, 2, 3]
</code></pre><p><strong>注意: </strong>この方法も、配列やオブジェクトについては<em>値</em>ではなく<em>参照</em>がコピーされます。</p><h3 id="5-array-filter-"><strong><strong>5. </strong></strong>Array.filter (シャローコピー)</h3><p>この関数は <code>map</code> と同じように配列を返しますが、同じ長さであることは保証されません。</p><p>もし偶数の値をフィルターする場合、どうなるでしょうか？</p><pre><code class="language-js">[1, 2, 3].filter((x) =&gt; x % 2 === 0);
// [2]
</code></pre><p>入力された配列の長さは 3 でしたが、結果の長さは 1 です。</p><p>しかし <code>filter</code> の条件式が常に <code>true</code> を返すようにすれば、配列を複製できます！</p><pre><code class="language-js">numbers = [1, 2, 3];
numbersCopy = numbers.filter(() =&gt; true);
</code></pre><p>どの要素もテストに合格しているので、そのまま返されます。</p><p><strong>注意: </strong>この方法も、配列やオブジェクトについては<em>値</em>ではなく<em>参照</em>がコピーされます。</p><h3 id="6-array-reduce-"><strong><strong>6. </strong></strong>Array.reduce (シャローコピー)</h3><p>本来 <code>reduce</code> は遥かに強力なことができるので、配列のクローンを作成するためだけに使うのは心苦しく感じます。でも、やってみましょう。</p><pre><code class="language-js">numbers = [1, 2, 3];

numbersCopy = numbers.reduce((newArray, element) =&gt; {
  newArray.push(element);

  return newArray;
}, []);
</code></pre><p><code>reduce</code> は、リストをループしながら初期値を変更します。</p><p>ここでは、初期値は空の配列で、その中に各要素を詰めていきます。この配列は、次の反復処理で使用するために関数から返されなければなりません。</p><p><strong>注意: </strong>この方法も、配列やオブジェクトについては<em>値</em>ではなく<em>参照</em>がコピーされます。</p><h3 id="7-array-slice-"><strong><strong>7. </strong></strong>Array.slice (シャローコピー)</h3><p><code>slice</code> は、指定した開始 / 終了インデックスに基づいて、配列のシャローコピーを返します。</p><p>もし、最初の 3 つの要素が必要な場合は次のとおりです。</p><pre><code class="language-js">[1, 2, 3, 4, 5].slice(0, 3);
// [1, 2, 3]
// Starts at index 0, stops at index 3
</code></pre><p>すべての要素が欲しい場合は、パラメータを指定しないでください。</p><pre><code class="language-js">numbers = [1, 2, 3, 4, 5];
numbersCopy = numbers.slice();
// [1, 2, 3, 4, 5]
</code></pre><p><strong>注意: </strong>これはシャローコピーです。つまり、この方法も、配列やオブジェクトについては<em>値</em>ではなく<em>参照</em>がコピーされます。</p><h3 id="8-json-parse-json-stringify-"><strong><strong>8. JSON.parse と JSON.stringify (</strong></strong>ディープコピー<strong><strong>)</strong></strong></h3><p><code>JSON.stringify</code> はオブジェクトを文字列に変換します。</p><p><code>JSON.parse</code> は文字列をオブジェクトに変換します。</p><p>これらを組み合わせて、オブジェクトを文字列に変換し、それから逆の操作をすることで、データ構造を新しく作成できます。</p><p><strong>注意: この方法であれば、深くネストしたオブジェクトや配列を安全にコピーできます！</strong></p><pre><code class="language-js">nestedNumbers = [[1], [2]];
numbersCopy = JSON.parse(JSON.stringify(nestedNumbers));

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);

// [[1], [2]]
// [[1, 300], [2]]
// この 2 つの配列は完全に分離されています！
</code></pre><h3 id="9-array-concat-"><strong><strong>9. Array.concat (</strong></strong>シャローコピー<strong><strong>)</strong></strong></h3><p><code>concat</code> は、配列を値や他の配列と結合します。</p><pre><code class="language-js">[1, 2, 3].concat(4); // [1, 2, 3, 4]
[1, 2, 3].concat([4, 5]); // [1, 2, 3, 4, 5]
</code></pre><p>何も指定しなかったり、空の配列を指定した場合は、シャローコピーが返されます。</p><pre><code class="language-js">[1, 2, 3].concat(); // [1, 2, 3]
[1, 2, 3].concat([]); // [1, 2, 3]
</code></pre><p><strong>注意: </strong>この方法も、配列やオブジェクトについては<em>値</em>ではなく<em>参照</em>がコピーされます。</p><h3 id="10-array-from-"><strong><strong>10. Array.from (</strong></strong>シャローコピー<strong><strong>)</strong></strong></h3><p>これは、任意の反復可能なオブジェクトを配列に変換することができます。配列を渡すと、シャローコピーが返されます。</p><pre><code class="language-js">numbers = [1, 2, 3];
numbersCopy = Array.from(numbers);
// [1, 2, 3]
</code></pre><p><strong>注意: </strong>この方法も、配列やオブジェクトについては<em>値</em>ではなく<em>参照</em>がコピーされます。</p><h3 id="--1">結論</h3><p>楽しんでいただけましたか？</p><p>今回は 1 ステップで配列をクローンする方法を紹介しました。複数のメソッドやテクニックを使えば、もっといろいろな方法が見つかるはずです。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript 入門: Hello World から ES6 までしっかり学ぶ基礎講座 [YouTube 動画講座] ]]>
                </title>
                <description>
                    <![CDATA[ JavaScript は今最も人気のあるプログラミング言語です。例えば Stack Overflow の Developer Survey [https://insights.stackoverflow.com/survey/2021/#section-most-popular-technologies-programming-scripting-and-markup-languages]  でも、2021 年の人気第一位のプログラミング言語となっています。 この度、新たに JavaScript 入門講座を YouTube チャンネル freeCodeCamp Japanese [https://www.youtube.com/channel/UClLQp_GforzsmSpSec5M7Ww] にて公開しました。 この講座では、JavaScript の学習を始めるにあたって知っておきたい基礎として、コードの実行方法やコメント、簡単な四則演算、if 文や for 文などの基本的な文法から、近年主流となっている ES6 のアロー関数、クラス、import/export などの新しい文法 ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/learn-javascript-full-course-for-beginners-japanese/</link>
                <guid isPermaLink="false">633c73d2292eef06159fbf4e</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Beginners ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ES6 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ YouTube ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Video Courses ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Wed, 05 Oct 2022 11:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/10/4.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>JavaScript は今最も人気のあるプログラミング言語です。例えば <a href="https://insights.stackoverflow.com/survey/2021/#section-most-popular-technologies-programming-scripting-and-markup-languages">Stack Overflow の Developer Survey</a> でも、2021 年の人気第一位のプログラミング言語となっています。</p><p>この度、新たに JavaScript 入門講座を YouTube チャンネル <a href="https://www.youtube.com/channel/UClLQp_GforzsmSpSec5M7Ww">freeCodeCamp Japanese</a> にて公開しました。</p><p>この講座では、JavaScript の学習を始めるにあたって知っておきたい基礎として、コードの実行方法やコメント、簡単な四則演算、if 文や for 文などの基本的な文法から、近年主流となっている ES6 のアロー関数、クラス、import/export などの新しい文法まで段階を追って学習します。</p><p>本動画は、英語版 freeCodeCamp.org チャンネルで公開されている「<a href="https://youtu.be/PkZNo7MFNFg">Learn JavaScript - Full Course for Beginners</a>」を元にした日本語版として作成されました。</p><p>日本語版動画は freeCodeCamp コントリビューターの <a href="https://twitter.com/besshy8">Besshy</a> さんにより作成されました。Besshy さんは慶應義塾大学の大学院生で、「<a href="https://www.youtube.com/user/kcs1959">KCS :: Keio Computer Society</a>」という YouTube チャンネルも運営されています。</p><p>freeCodeCamp Japanese チャンネルの第一弾動画「<a href="https://youtu.be/nnjCkgX_ZPQ">Python 入門: 基礎から始める集中講座</a>」に続き、今回は JavaScript の入門講座を作成してくださいました。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/10/scrimba.png" class="kg-image" alt="scrimba" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/10/scrimba.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/10/scrimba.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/10/scrimba.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/10/scrimba.png 1920w" sizes="(min-width: 720px) 720px" width="1920" height="1080" loading="lazy"><figcaption>ブラウザだけでコードを書いて実行できる Scrimba という環境を使って学習します。</figcaption></figure><p>この講座では以下のトピックを学習します。</p><ul><li>JavaScript の環境構築、実行</li><li>コメントアウト</li><li>データ型と変数</li><li>代入演算子 (<code>=</code>)</li><li>四則演算 (足し算、引き算、掛け算、割り算)</li><li>インクリメント・デクリメント</li><li>浮動小数点</li><li>余りの計算</li><li>複合代入演算子 (<code>+=</code> <code>-=</code> <code>*=</code> <code>/=</code>)</li><li>エスケープシーケンス</li><li>文字列の連結</li><li>文字列の長さの取得</li><li>文字列の要素を取り出す (ブラケットノーテーション)</li><li>イミュータブルな文字列</li><li>配列、多次元配列</li><li>インデックスを使った配列の要素へのアクセス</li><li>配列の操作 (<code>push()</code> <code>pop()</code> <code>shift()</code> <code>unshift()</code>)</li><li>関数</li><li>引数</li><li>スコープ (グローバルスコープ、ローカルスコープ)</li><li>真偽値 (Boolean)</li><li>if 文を使った条件分岐</li><li>比較演算子 (<code>==</code> <code>===</code> <code>!=</code> <code>!==</code> <code>&gt;</code> <code>&lt;</code>)</li><li>論理演算子 (<code>&amp;&amp;</code> <code>||</code>)</li><li>switch 文</li><li>JavaScript のオブジェクト</li><li>オブジェクトの値の変更、追加、削除</li><li>while ループを使った繰り返し処理</li><li>for ループを使った繰り返し処理</li><li>do...while 文を使った繰り返し処理</li><li>乱数を発生させる</li><li>parseInt() 関数</li><li>条件 (三項) 演算子</li><li>var、let、const</li><li>オブジェクトが変更されることを防ぐ</li><li>アロー関数</li><li>関数の default 引数</li><li>Rest 演算子</li><li>Spread 演算子</li><li>分割代入</li><li>テンプレートリテラル</li><li>オブジェクトの簡潔な作り方</li><li>オブジェクト内での関数の定義の仕方</li><li>コンストラクタ関数とクラス</li><li>getter と setter</li><li>require と import</li></ul><p>本講座は <a href="https://youtu.be/TtJqDrLGoKQ">YouTube で全編無料公開されています</a>。(全 4.5 時間)</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/TtJqDrLGoKQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="【JavaScript入門】Hello WorldからES6までしっかり学ぶ基礎講座" name="fitvid0"></iframe>
          </div>
        </div>
      </figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript Map – JS .map() メソッドの使用方法 (配列のメソッド) ]]>
                </title>
                <description>
                    <![CDATA[ 配列の要素に何かしらの処理を適用して、要素を変更した新しい配列を取得したい場合があります。 ループを使って繰り返し処理をわざわざ書く代わりに、標準で用意されている Array.map() メソッドを使うことができます。 Array.map()  メソッドを使用すると、コールバック関数を使用して配列に反復処理を行い、その要素を変更できます。コールバック関数は、配列の各要素に対して実行されます。 例えば、以下のような要素を持った配列があります。 let arr = [3, 4, 5, 6]; シンプルな JavaScript の配列そして、配列の各要素に対して、3 を掛ける必要があるとします。for を使用して、以下のようなループ処理を行うことを考えるかもしれません。 let arr = [3, 4, 5, 6]; for (let i = 0; i < arr.length; i++){   arr[i] = arr[i] * 3; } console.log(arr); // [9, 12, 15, 18] ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/javascript-map-how-to-use-the-js-map-function-array-method/</link>
                <guid isPermaLink="false">631d672587a3a3073e97e6ad</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ PROGRAMMING ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Mell ]]>
                </dc:creator>
                <pubDate>Wed, 14 Sep 2022 12:35:16 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/09/javascript-map-function.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/javascript-map-how-to-use-the-js-map-function-array-method/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Map – How to Use the JS .map() Function (Array Method)</a>
      </p><p>配列の要素に何かしらの処理を適用して、要素を変更した新しい配列を取得したい場合があります。</p><p>ループを使って繰り返し処理をわざわざ書く代わりに、標準で用意されている <code>Array.map()</code> メソッドを使うことができます。</p><p><code>Array.map()</code> メソッドを使用すると、コールバック関数を使用して配列に反復処理を行い、その要素を変更できます。コールバック関数は、配列の各要素に対して実行されます。</p><p>例えば、以下のような要素を持った配列があります。</p><figure class="kg-card kg-code-card"><pre><code class="language-js">let arr = [3, 4, 5, 6];</code></pre><figcaption>シンプルな JavaScript の配列</figcaption></figure><p>そして、配列の各要素に対して、<code>3</code> を掛ける必要があるとします。<code>for</code> を使用して、以下のようなループ処理を行うことを考えるかもしれません。</p><figure class="kg-card kg-code-card"><pre><code class="language-js">let arr = [3, 4, 5, 6];

for (let i = 0; i &lt; arr.length; i++){
  arr[i] = arr[i] * 3;
}

console.log(arr); // [9, 12, 15, 18]</code></pre><figcaption>for ループを使用して、配列の反復処理を行う</figcaption></figure><p>しかし、実は <code>Array.map()</code> メソッドを使用して、同じ結果を取得できます。以下に例を記載します。</p><figure class="kg-card kg-code-card"><pre><code class="language-js">let arr = [3, 4, 5, 6];

let modifiedArr = arr.map(function(element){
    return element *3;
});

console.log(modifiedArr); // [9, 12, 15, 18]</code></pre><figcaption>map() メソッドを使用して、配列の反復処理を行う</figcaption></figure><p><code>Array.map()</code> メソッドは、要素に対して変更を適用するためによく使用されます。上記コードのように、特定の数字を掛けることもできますし、自身のアプリに応じて必要な処理を行うこともできます。</p><h2 id="-map-">オブジェクトの配列に対して map() メソッドを使用する方法</h2><p>例えば、以下のように友達の <code>firstName</code> と <code>lastName</code> を値に持つオブジェクトの配列があるとします。</p><figure class="kg-card kg-code-card"><pre><code class="language-js">let users = [
  {firstName : "Susan", lastName: "Steward"},
  {firstName : "Daniel", lastName: "Longbottom"},
  {firstName : "Jacob", lastName: "Black"}
];

</code></pre><figcaption>オブジェクトの配列</figcaption></figure><p>以下のように、<code>map()</code> メソッドを使用して、配列をループし、<code>firstName</code> と &nbsp;<code>lastName</code> の値を結合できます。</p><figure class="kg-card kg-code-card"><pre><code class="language-js">let users = [
  {firstName : "Susan", lastName: "Steward"},
  {firstName : "Daniel", lastName: "Longbottom"},
  {firstName : "Jacob", lastName: "Black"}
];

let userFullnames = users.map(function(element){
    return `${element.firstName} ${element.lastName}`;
})

console.log(userFullnames);
// ["Susan Steward", "Daniel Longbottom", "Jacob Black"]</code></pre><figcaption>map() メソッドを使用して、オブジェクトの配列の反復処理を行う</figcaption></figure><p><code>map()</code> メソッドでは、要素以外の値も使用できます。<code>map()</code> メソッドによってコールバック関数に渡される全ての引数を確認していきましょう。</p><h2 id="map-">map() メソッドの引数を省略しない構文</h2><p> <code>map()</code> メソッドの構文は以下のようになります。</p><pre><code class="language-js">arr.map(function(element, index, array){  }, this);</code></pre><p>コールバック関数である <code>function()</code> が配列の各要素に呼ばれます。<code>map()</code> メソッドは引数に、現在処理している要素の値である <code>element</code>、添字である <code>index</code>、また処理を実行している配列自体である <code>array</code> を渡します。</p><p>引数 <code>this</code> はコールバック関数の中で使用されます。デフォルトでは、その値は &nbsp;<code>undefined</code> となっています。</p><p>例えば、<code>this</code> の値を数値 <code>80</code> に変更する方法を以下に記載します。</p><figure class="kg-card kg-code-card"><pre><code class="language-js">let arr = [2, 3, 5, 7]

arr.map(function(element, index, array){
	console.log(this) // 80
}, 80);</code></pre><figcaption>map() メソッドの引数 this に、数値を代入する</figcaption></figure><p><code>console.log()</code> を使用して、他の引数の確認もできます。</p><figure class="kg-card kg-code-card"><pre><code class="language-js">let arr = [2, 3, 5, 7]

arr.map(function(element, index, array){
    console.log(element);
    console.log(index);
    console.log(array);
    return element;
}, 80);</code></pre><figcaption>値を確認するために、引数をログを出力する</figcaption></figure><p>以上が <code>Array.map()</code> メソッドに関する必要な情報です。大抵、コールバック関数で使用される引数は <code>element</code> だけで、残りの引数は省略されることが多くあります。私が普段取り組んでいるプロジェクトでもそうなっています。</p><h2 id="-">このチュートリアルをお読みくださりありがとうございます。</h2><p>私が書いた他の JavaScript チュートリアル <a href="https://sebhastian.com/javascript-sum-array-objects/" rel="noopener noreferrer">how to sum an array of objects</a> (配列のオブジェクトの値を足す方法) や <a href="https://sebhastian.com/palindrome-javascript/" rel="noopener noreferrer">methods to find a palindrome string</a> (回文の文字列を探すためのメソッド) も役に立つかもしれません。これらは、JavaScript でたびたび質問される問題に関する記事です。</p><p>また、Web 開発のチュートリアル (主に JavaScript 関連) について<a href="https://sebhastian.com/newsletter/" rel="noopener noreferrer">無料ニュースレター</a>を配信しています。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript オブジェクトの配列 – 配列のメソッドを使ってオブジェクトを追加、更新、ループする方法のチュートリアル ]]>
                </title>
                <description>
                    <![CDATA[ 筆者は毎週だいたい 18 回くらいは JSON データを扱うことがあると思います。それでもまだ、目的に合わせてデータを操作する方法をほぼ毎回 Google で検索しています。その答えが常に見つかるような究極のガイドがあれば良いと思いませんか？ この記事では、JavaScript でオブジェクトの配列を操作するための基本を紹介します。 JSON 形式のデータを使用したことがあれば、JavaScript オブジェクトを使用したことがあると言えるでしょう。JSON とは JavaScript Object Notation の略です。 オブジェクトの作成はとてもシンプルです。次のように書くだけです。 {   "color": "purple",   "type": "minivan",   "registration": new Date('2012-02-03'),   "capacity": 7 } 上記のオブジェクトは車を表現しています。車にはさまざまな種類や色があり、各オブジェクトは特定の車を表します。 さて、多くの場合、このようなデータを外部のサービスから取得します。 ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/javascript-array-of-objects-tutorial-how-to-create-update-and-loop-through-objects-using-js-array-methods/</link>
                <guid isPermaLink="false">626968951de492050fdb4468</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ WEB DEVELOPMENT ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JSON ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Sun, 22 May 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/04/js-tutorial-cover.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/javascript-array-of-objects-tutorial-how-to-create-update-and-loop-through-objects-using-js-array-methods/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">JavaScript Array of Objects Tutorial – How to Create, Update, and Loop Through Objects Using JS Array Methods</a>
      </p><p>筆者は毎週だいたい 18 回くらいは JSON データを扱うことがあると思います。それでもまだ、目的に合わせてデータを操作する方法をほぼ毎回 Google で検索しています。その答えが常に見つかるような究極のガイドがあれば良いと思いませんか？</p><p>この記事では、JavaScript でオブジェクトの配列を操作するための基本を紹介します。</p><p>JSON 形式のデータを使用したことがあれば、JavaScript オブジェクトを使用したことがあると言えるでしょう。JSON とは JavaScript Object Notation の略です。</p><p>オブジェクトの作成はとてもシンプルです。次のように書くだけです。</p><pre><code class="language-js">{
  "color": "purple",
  "type": "minivan",
  "registration": new Date('2012-02-03'),
  "capacity": 7
}
</code></pre><p>上記のオブジェクトは車を表現しています。車にはさまざまな種類や色があり、各オブジェクトは特定の車を表します。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/purple.png" class="kg-image" alt="purple" width="124" height="68" loading="lazy"></figure><p>さて、多くの場合、このようなデータを外部のサービスから取得します。しかし、オブジェクトとその配列を自身で作成することもあるでしょう。筆者がこのオンラインショップを作成した時もそうでした。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/categories.jpg" class="kg-image" alt="categories" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/categories.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/04/categories.jpg 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/categories.jpg 1118w" sizes="(min-width: 720px) 720px" width="1118" height="513" loading="lazy"></figure><p>このカテゴリー一覧の各アイテムが、HTML で書くと下記のようになっていると考えてみてください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/code.jpg" class="kg-image" alt="code" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/code.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/code.jpg 696w" width="696" height="322" loading="lazy"></figure><p>このコードを 12 回繰り返して書きたくはありませんでした。メンテナンスが困難になるからです。</p><h2 id="-">オブジェクトの配列を作成する</h2><p>では車の例に戻りましょう。この車のセットを見てください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars.jpg" class="kg-image" alt="cars" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/cars.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="111" loading="lazy"></figure><p>これは、次のように配列で表現することができます。</p><pre><code class="language-js">let cars = [
  {
    "color": "purple",
    "type": "minivan",
    "registration": new Date('2017-01-03'),
    "capacity": 7
  },
  {
    "color": "red",
    "type": "station wagon",
    "registration": new Date('2018-03-03'),
    "capacity": 5
  },
  {
    ...
  },
  ...
]
</code></pre><p>オブジェクトの配列は、ずっと同じ状態とは限りません。ほとんどの場合、何かしらの操作をする必要が出てきます。では、既存の配列にオブジェクトを追加する方法を見てみましょう。</p><h3 id="-array-unshift">オブジェクトを最初に追加する - Array.unshift</h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/beginning.jpg" class="kg-image" alt="beginning" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/beginning.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/beginning.jpg 1000w" sizes="(min-width: 720px) 720px" width="1000" height="180" loading="lazy"></figure><p>配列の最初の位置にオブジェクトを追加するには、<code>Array.unshift</code> を使用します。</p><pre><code class="language-js">let car = {
  "color": "red",
  "type": "cabrio",
  "registration": new Date('2016-05-02'),
  "capacity": 2
}
cars.unshift(car);
</code></pre><h3 id="-array-push">オブジェクトを最後に追加する - Array.push</h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/ending.jpg" class="kg-image" alt="ending" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/ending.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/ending.jpg 1000w" sizes="(min-width: 720px) 720px" width="1000" height="180" loading="lazy"></figure><p>配列の最後の位置にオブジェクトを追加するには、<code>Array.push</code> を使用します。</p><pre><code class="language-js">let car = {
 "color": "red",
 "type": "cabrio",
 "registration": new Date('2016-05-02'),
 "capacity": 2
}
cars.push(car);
</code></pre><h3 id="-array-splice">オブジェクトを途中に追加する - Array.splice</h3><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/middle.jpg" class="kg-image" alt="middle" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/middle.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/middle.jpg 1000w" sizes="(min-width: 720px) 720px" width="1000" height="180" loading="lazy"></figure><p>配列の途中の位置にオブジェクトを追加するには、<code>Array.splice</code> を使用します。この関数はアイテムを取り除くこともできるため、とても便利です。引数の取り方には少し注意が必要かもしれません。</p><pre><code class="language-js">Array.splice(
  {変更の開始位置のインデックス},
  {取り除くアイテムの数},
  {追加するアイテム}
);
</code></pre><p>したがって、赤いフォルクスワーゲンのカブリオ (Cabrio、オープンカー) を 5 番目の位置に追加したい場合には、次のようになります。</p><pre><code class="language-js">let car = {
  "color": "red",
  "type": "cabrio",
  "registration": new Date('2016-05-02'),
  "capacity": 2
}
cars.splice(4, 0, car);
</code></pre><h2 id="--1">オブジェクトの配列をループして操作する</h2><p>ここで質問があります。あなたはなぜオブジェクトの配列をループしたいのでしょうか？</p><p>なぜそのようなことを聞くかというと、ループすること自体が最終的に達成したい目的であることはほとんどないからです。</p><p>JavaScript では、ループを使って自分でロジックを実装しなくても問題を解決できるように多くの関数が用意されています。では見ていきましょう。</p><h3 id="-array-find">配列内のオブジェクトを値で検索する - Array.find</h3><p>例として、赤い車を見つけたいとしましょう。そのためには <code>Array.find</code> という関数を使うことができます。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars-colorred.jpg" class="kg-image" alt="cars-colorred" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/cars-colorred.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars-colorred.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="230" loading="lazy"></figure><pre><code class="language-js">let car = cars.find(car =&gt; car.color === "red");
</code></pre><p>この関数は最初に一致した要素を 1 つ返します。</p><pre><code class="language-js">console.log(car);
// 出力:
// {
//   color: 'red',
//   type: 'station wagon',
//   registration: 'Sat Mar 03 2018 01:00:00 GMT+0100 (GMT+01:00)',
//   capacity: 5
// }
</code></pre><p>また、複数の値を条件にして検索することもできます。</p><pre><code class="language-js">let car = cars.find(car =&gt; car.color === "red" &amp;&amp; car.type === "cabrio");</code></pre><p>この例では配列内の最後の車が取得されます。</p><h3 id="-array-filter">配列から条件に当てはまる複数のオブジェクトを取得する - Array.filter</h3><p><code>Array.find</code> 関数はオブジェクトを 1 つだけ返す関数でした。赤い車をすべて取得したい場合には <code>Array.filter</code> を使う必要があります。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars-colorred2.jpg" class="kg-image" alt="cars-colorred2" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/cars-colorred2.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars-colorred2.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="230" loading="lazy"></figure><pre><code class="language-js">let redCars = cars.filter(car =&gt; car.color === "red");
console.log(redCars);
// 出力:
// [
//   {
//     color: 'red',
//     type: 'station wagon',
//     registration: 'Sat Mar 03 2018 01:00:00 GMT+0100 (GMT+01:00)',
//     capacity: 5
//   },
//   {
//     color: 'red',
//     type: 'cabrio',
//     registration: 'Sat Mar 03 2012 01:00:00 GMT+0100 (GMT+01:00)',
//     capacity: 2
//   }
// ]
</code></pre><h3 id="-array-map">配列内のオブジェクトを変換する - Array.map</h3><p>これはよく必要になる操作です。あるオブジェクトの配列を異なるオブジェクトの配列へと変換します。これは <code>Array.map</code> の役割です。では、車をサイズに基づいて 3 つのグループに分類する例を考えましょう。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars-sizes.jpg" class="kg-image" alt="cars-sizes" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/cars-sizes.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars-sizes.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="300" loading="lazy"></figure><pre><code class="language-js">let sizes = cars.map(car =&gt; {
  if (car.capacity &lt;= 3){
    return "small";
  }
  if (car.capacity &lt;= 5){
    return "medium";
  }
  return "large";
});
console.log(sizes);
// 出力:
// ['large','medium','medium', ..., 'small']
</code></pre><p>サイズ以外の値も必要であれば、新しいオブジェクトを作成することも可能です。</p><pre><code class="language-js">let carsProperties = cars.map(car =&gt; {
 let properties = {
   "capacity": car.capacity,
   "size": "large"
 };
 if (car.capacity &lt;= 5){
   properties['size'] = "medium";
 }
 if (car.capacity &lt;= 3){
   properties['size'] = "small";
 }
 return properties;
});
console.log(carsProperties);
// 出力:
// [
//   { capacity: 7, size: 'large' },
//   { capacity: 5, size: 'medium' },
//   { capacity: 5, size: 'medium' },
//   { capacity: 2, size: 'small' },
//   ...
// ]
</code></pre><h3 id="-array-foreach">配列内の全オブジェクトにプロパティを追加する - Array.forEach</h3><p>では、車にサイズの情報を追加したい場合はどうしますか？その場合、元のオブジェクトに新しいプロパティ <code>size</code> を追加して拡張できます。これは <code>Array.forEach</code> 関数が役に立つ場面です。</p><pre><code class="language-js">cars.forEach(car =&gt; {
 car['size'] = "large";
 if (car.capacity &lt;= 5){
   car['size'] = "medium";
 }
 if (car.capacity &lt;= 3){
   car['size'] = "small";
 }
});
</code></pre><h3 id="-array-sort">配列をプロパティでソートする - Array.sort</h3><p>オブジェクトの変換が完了したら、次はオブジェクトを何らかの方法で並べ替えたいことがよくあります。</p><p>ソートは通常、すべてのオブジェクトが持っているプロパティの値に基づいて行います。ソートには <code>Array.sort</code> 関数が使用できますが、並べ替えのメカニズムを定義する関数を用意する必要があります。</p><p>例えば車を定員 (capacity) に基づいて降順に並べ替えたいとしましょう。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars-sort.jpg" class="kg-image" alt="cars-sort" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/cars-sort.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/cars-sort.jpg 800w" sizes="(min-width: 720px) 720px" width="800" height="250" loading="lazy"></figure><pre><code class="language-js">let sortedCars = cars.sort((c1, c2) =&gt; (c1.capacity &lt; c2.capacity) ? 1 : (c1.capacity &gt; c2.capacity) ? -1 : 0);
console.log(sortedCars);
// 出力:
// [
//   {
//     color: 'purple',
//     type: 'minivan',
//     registration: 'Wed Feb 01 2017 00:00:00 GMT+0100 (GMT+01:00)',
//     capacity: 7
//   },
//   {
//     color: 'red',
//     type: 'station wagon',
//     registration: 'Sat Mar 03 2018 01:00:00 GMT+0100 (GMT+01:00)',
//     capacity: 5
//   },
//   ...
// ]
</code></pre><p><code>Array.sort</code> は、2 つのオブジェクトを比較し、もし並べ替え用の関数の実行結果が正の数であれば、1 番目のオブジェクトを 2 番目の位置に動かします。つまり、並べ替え用の関数は「1 番目のオブジェクトを 2 番目に配置すべきですか？」という質問だと考えることができます。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/sort.png" class="kg-image" alt="sort" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/sort.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/sort.png 654w" width="654" height="368" loading="lazy"></figure><p>不要な位置交換を避けるために、両方のオブジェクトの値が同じだった場合を示す 0 (ゼロ) のケースを加えることを忘れないでください。</p><h3 id="-array-every-array-some">配列内のオブジェクトが条件を満たすかチェックする - Array.every, Array.some</h3><p><code>Array.every</code> と <code>Array.some</code> は、各オブジェクトが特定の条件を満たすかのチェックだけを行いたい場合に便利です。</p><p>例えば、配列内に赤いカブリオがあるでしょうか？すべての車に最低 4 人が乗車できるでしょうか？もっとウェブに関連した例で言うと、ショッピングカート内に特定の製品があるでしょうか？</p><pre><code class="language-js">cars.some(car =&gt; car.color === "red" &amp;&amp; car.type === "cabrio");
// 出力: true

cars.every(car =&gt; car.capacity &gt;= 4);
// 出力: false
</code></pre><p>もしかしたら、<code>Array.some</code> によく似た関数の <code>Array.includes</code> を覚えているかもしれません。しかし、<code>Array.includes</code> はプリミティブ型の配列でのみ動作します。</p><h2 id="--2">まとめ</h2><p>この記事では、オブジェクトの配列を作成、操作、変換、ループする基本的な関数について説明しました。つまずきがちなケースのほとんどをカバーしているはずです。</p><p>より高度な機能を必要とするユースケースがあれば、こちらの<a href="https://www.freecodecamp.org/news/data-structures-101-arrays-a-visual-introduction-for-beginners-7f013bcc355a/">配列についての詳細なガイド (英語)</a> や <a href="https://www.w3schools.com/Jsref/jsref_obj_array.asp">W3Schools のリファレンス (英語)</a> を参照してください。</p><p>または<a href="https://twitter.com/ondrabus">筆者にご連絡ください</a>。また別の記事を用意します :-)</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ JavaScript の偽値について ]]>
                </title>
                <description>
                    <![CDATA[ 解説 偽値とは、例えば変数を確認する際に、FALSE と評価されるもののことです。JavaScript には主に以下の 6 つの偽値があります: undefined、 null、NaN、0、"" (空の文字列)、そしてもちろん、false です。 変数の値が偽値であるか確認する 次のような単純な条件文で、変数の値が偽値であるか確認できます: if (!variable) {   // When the variable has a falsy value the condition is true. } 一般的な例 var string = ""; // <-- 偽値 var filledString = "some string in here"; // <-- 真値 (truthy) var ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/falsy-values-in-javascript/</link>
                <guid isPermaLink="false">61ff9fb10e2ac404be731c0d</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Wed, 16 Mar 2022 23:45:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/02/5f9c9eb6740569d1a4ca3ea5.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/falsy-values-in-javascript/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Falsy Values in JavaScript</a>
      </p><h2 id="-">解説</h2><p>偽値とは、例えば変数を確認する際に、FALSE と評価されるもののことです。JavaScript には主に以下の 6 つの偽値があります: <code>undefined</code>、<code>null</code>、<code>NaN</code>、<code>0</code>、<code>""</code> (空の文字列)、そしてもちろん、<code>false</code> です。</p><h2 id="--1"><strong>変数の値が偽値であるか確認する</strong></h2><p>次のような単純な条件文で、変数の値が偽値であるか確認できます:</p><pre><code class="language-javascript">if (!variable) {
  // When the variable has a falsy value the condition is true.
}
</code></pre><h2 id="--2"><strong>一般的な例</strong></h2><pre><code class="language-javascript">var string = ""; // &lt;-- 偽値

var filledString = "some string in here"; // &lt;-- 真値 (truthy)

var zero = 0; // &lt;-- 偽値

var numberGreaterThanZero // &lt;-- (ゼロよりも大きな数値は) 真値

var emptyArray = []; // &lt;-- 真値, これについてはこのあと詳しく説明します

var emptyObject = {}; // &lt;-- 真値
</code></pre><h2 id="--3"><strong>配列の興味深い挙動</strong></h2><pre><code class="language-javascript">if ([] == false) // &lt;-- 真値, if ブロック内のコードは実行されます

if ([]) // &lt;-- 真値, こちらも if ブロック内のコードは実行されます

if ([] == true) // &lt;-- 偽値, if ブロック内のコードは実行されません

if (![]) // &lt;-- 偽値, こちらも if ブロック内のコードは実行されません
</code></pre><h2 id="--4"><strong>注意事項</strong></h2><p>値をブーリアンコンテキストで評価する際は、データ型を意識してください。</p><p>値のデータ型として数値を期待している場合、真値／偽値の評価は予期しない結果をもたらすことがあります:</p><pre><code class="language-javascript">const match = { teamA: 0, teamB: 1 }
if (match.teamA)
  // 偽値と評価されるため、以下のコードは実行されません
  console.log('Team A: ' + match.teamA);
}
</code></pre><p>上記のユースケースでは、代わりに <code>typeof</code> を用いて、評価する値のデータ型が number であるかどうかを次のように評価します:</p><pre><code class="language-javascript">const match = { teamA: 0, teamB: 1 }
if (typeof match.teamA === 'number')
  console.log('Team A: ' + match.teamA);
}
</code></pre><h2 id="--5"><strong>関連情報</strong></h2><ul><li><strong><strong>truthy</strong></strong> | <a href="http://web.archive.org/web/20210824154118/https://j11y.io/javascript/truthy-falsey/">Blog Post - Truthy &amp; Falsey 『ブログ記事 - 真値 と 偽値』</a></li><li><a href="https://developer.mozilla.org/ja/docs/Glossary/Falsy">偽値 | 用語集 | MDN</a></li><li><a href="https://www.sitepoint.com/javascript-truthy-falsy/">Truthy and Falsy: When All is Not Equal in JavaScript 『真値 と 偽値: JavaScript で完全にイコールでない 2 つのものを比較する場合について』</a></li></ul> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
