<?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[ Manabu Matsumoto - 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[ Manabu Matsumoto - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/japanese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:27:52 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/japanese/news/author/manabu/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ プログラミングの学習方法 – 私がコードを学び始めた時に求めていたガイド ]]>
                </title>
                <description>
                    <![CDATA[ コーディングを学ぶなんて、考えるだけでも恐ろしいと感じるかもしれません。まずコード という言葉が定義からして謎めいています。コードとは、人ではなくコンピューターが理解できることを目的とした、技術的なコミュニケーションの形です。 多くの人がコードを学び始める方法の 1 つは、有名なプログラミング言語を選んで、方針も定めずとりあえず飛びついてみるというものです。オンラインのコーディング講座を受講したり、チュートリアルプロジェクトを作成したり、もしくはあるトピックについての本を無作為に購入したりするでしょう。 開発者を目指す人でも、ロードマップを持って学び始める人はめったにいません。ここで言うロードマップとは、関連するプログラミングの概念、言語、よく使われるツールなどの概要を説明する、コーディングの世界を見渡す鳥瞰図のようなものです。 この記事では、そのようなロードマップの 1 つを提案します。そのために 14 のステップをお伝えします。各ステップで、重要な概念、言語、もしくはツール (プロの開発者がコードを記述し、共同作業を行い、専門的なプロジェクトを作成するのに使用するツール) を ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-learn-programming/</link>
                <guid isPermaLink="false">63189c9a87a3a3073e97e5aa</guid>
                
                    <category>
                        <![CDATA[ Learning To Code ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Beginners ]]>
                    </category>
                
                    <category>
                        <![CDATA[ PROGRAMMING ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Sat, 03 Dec 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/09/The-Programming-Guide-I-Wish-I-Had-When-I-Started-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-learn-programming/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Learn Programming – The Guide I Wish I Had When I Started Learning to Code</a>
      </p><p>コーディングを学ぶなんて、考えるだけでも恐ろしいと感じるかもしれません。まず<strong>コード</strong>という言葉が定義からして謎めいています。コードとは、人ではなくコンピューターが理解できることを目的とした、技術的なコミュニケーションの形です。</p><p>多くの人がコードを学び始める方法の 1 つは、有名なプログラミング言語を選んで、方針も定めずとりあえず飛びついてみるというものです。オンラインのコーディング講座を受講したり、チュートリアルプロジェクトを作成したり、もしくはあるトピックについての本を無作為に購入したりするでしょう。</p><p>開発者を目指す人でも、ロードマップを持って学び始める人はめったにいません。ここで言うロードマップとは、関連するプログラミングの概念、言語、よく使われるツールなどの概要を説明する、コーディングの世界を見渡す鳥瞰図のようなものです。</p><p>この記事では、そのようなロードマップの 1 つを提案します。そのために 14 のステップをお伝えします。各ステップで、重要な概念、言語、もしくはツール (プロの開発者がコードを記述し、共同作業を行い、専門的なプロジェクトを作成するのに使用するツール) を説明します。</p><p>私 (原著者) 個人の 20 年近くにも及ぶコーディング学習の旅をもとにして、この 14 のステップを慎重に選びました。</p><p>開発者として自信を持つのにそのような長い時間がかかった一因は、広いコーディングの世界の全体像が見えないまま、特定のトピックについて学んでいたからです。</p><p>この記事の中の各ステップは「コーディングに不可欠なもの」、コーディングを学び始める際に<strong>少なくともその存在を知っておくことが欠かせない</strong>と思うものについて述べています。</p><p>ロードマップの各ステップをリストアップする前に、最後に注意点があります。当然ですが、この記事を読んだから熟練のプログラマーになれるというわけではありません。そういったつもりはありません。この記事の目的は、各ステップの扱う事柄の存在を知らせることと、その仕組みの基本を教え、そこを基礎にして読者が自力で学べるようにすることです。</p><h2 id="-14-">新米開発者向けの 14 ステップのロードマップ</h2><ol><li><a href="#1-familiarize-yourself-with-computer-architecture-and-data-basics">コンピューターアーキテクチャとデータの基本を理解する</a></li><li><a href="#2-learn-how-programming-languages-work">プログラミング言語の仕組みについて学ぶ</a></li><li><a href="#3-understand-how-the-internet-works">インターネットの仕組みを理解する</a></li><li><a href="#4-practice-some-command-line-basics">コマンドラインの基本を練習する</a></li><li><a href="#5-build-up-your-text-editor-skills-with-vim">Vim を使用してテキストエディタスキルを鍛える</a></li><li><a href="#6-take-up-some-html">HTML をある程度習得する</a></li><li><a href="#7-tackle-some-css">CSS にある程度取り組む</a></li><li><a href="#8-start-programming-with-javascript">JavaScript でプログラミングを始める</a></li><li><a href="#9-continue-programming-with-python">Python でプログラミングを継続する</a></li><li><a href="#10-further-your-knowledge-with-java">Java で知識を深める</a></li><li><a href="#11-track-your-code-using-git">Git を使用してコードを追跡する</a></li><li><a href="#12-store-data-using-databases-and-sql">データベースと SQL を使用してデータを保存する</a></li><li><a href="#13-read-about-web-frameworks-and-mvc">ウェブフレームワークと MVC (Model-View-Controller: モデル・ビュー・コントローラ) について読む</a></li><li><a href="#14-play-with-package-managers">パッケージマネージャーに触れる</a></li></ol><p>さっそく最初のステップから始めていきましょう！</p><!--kg-card-begin: html--><h2 id="1-familiarize-yourself-with-computer-architecture-and-data-basics">1) コンピューターアーキテクチャとデータの基本を理解する</h2><!--kg-card-end: html--><p>モダンなプログラミング言語の素晴らしい点のひとつは、水面下で動作しているハードウェアの本質的な詳細部分について (ほとんどの場合は) 悩むことなく、凝ったアプリケーションを作成できるようにしてくれるところです。</p><p>これは<strong>抽象化</strong>と呼ばれます。抽象化とは、理解とスキルの求められる範囲を簡素化し、絞り込んだ上位ツール (上記の例ではプログラミング言語) を扱えるようにする機能です。</p><p>とはいえ、これは、自分のコードを実行しているハードウェアの基礎について知っていても無駄であるということではありません。最低限、その一部について認識しておくと、職場で CPU やメモリの使用率が高いというような会話についていくのに役に立ってくれるでしょう。</p><p>では、ここからコンピューターアーキテクチャの必要最小限の基礎を学び始めましょう:</p><p>コンピューターの最重要部品は (<strong>集積回路</strong>とも呼ばれている) <strong>マイクロチップ</strong>上にあります。</p><p>マイクロチップの機能は、<strong>トランジスター</strong>と呼ばれる電子部品に依存しています。トランジスターとは、特定のタイミングにおいてオフ (0) もしくはオン (1) している小さな電子スイッチのことです。1 つのマイクロチップには数百万、または数十億もの小さなトランジスターが組み込まれています。</p><p>ほとんどの最新のコンピューターは、<strong>中央演算処理装置</strong> (<strong>CPU</strong> - Central Processing Unit) と呼ばれるマイクロチップを備えています。CPU は、コンピューターの頭脳だと考えることができます。それはコンピューターが実行する複雑な計算や、論理的なタスクのほとんどを処理しています。</p><p>各 CPU は<strong>命令セット</strong>と呼ばれるものを備えています。これは、CPU が理解できるバイナリ形式 (0 と 1) で書かれた命令の集まりのことです。幸運なことに、ソフトウェア開発者としてこれらのことを気に掛ける必要はありません！それが抽象化の力なのです。</p><p>CPU が脳の論理的思考を担っているのであれば、一時的に、または長期的に情報を記憶できるメモリもあると便利です。</p><p>コンピューターは、プログラムの実行中にアクティブに使用される情報を記憶するために、<strong>ランダムアクセスメモリ (RAM)</strong> を「ワーキングメモリ」(作業記憶もしくは短期記憶) として備えています。</p><p>RAM は、複数のビットのデータを記憶するのに使用されている、<strong>メモリアドレス</strong>の集まりで構成されています。C のような古くからある言語では、プログラマーは、<strong>ポインタ</strong>と呼ばれる機能を使用してメモリアドレスを直接操作しますが、それは C よりもモダンな言語では、まれなことです。</p><p>最後に、ハードドライブという、誰もが必ず知っている部品について触れておきましょう。脳にたとえると、これは長期記憶にあたります。ハードドライブは、コンピューターの電源を切った後も持続するデータを記憶する、内部または外部デバイスです。</p><p>では、プログラミング言語の詳細について話を進める前に、データについての説明に少し時間をとります。ところで、<strong>データ</strong>という言葉は、正確には何を意味するのでしょうか？</p><p>大まかに言うと、テキストドキュメントや画像、動画、電子メール、ファイル、およびフォルダなどが思い浮かびます。これらは、ふだん私たちがコンピューター上で作成し保存している、ハイレベルな (抽象度が高い) データ構造です。</p><p>ただ、(CPU や RAM チップのような) コンピューターチップは、その内部では「画像」や「動画」が何であるかを認識しません。</p><p>チップから見ると、これらの構造すべてが、長い 1 と 0 が連続しているものとして保存されています。この 1 と 0 は<strong>ビット</strong>と呼ばれています。</p><p>一般的には、ビットは一度に、バイトとして知られている 8 つのセットで保存されます。バイトとは、<code>00000001</code>、<code>01100110</code>、<code>00001111</code> というように、単にビットが 8 つ連続したものです。このように情報を表現する方法のことを<strong>二進表現 (binary representation) </strong>と呼びます。</p><!--kg-card-begin: html--><h2 id="2-learn-how-programming-languages-work">2) プログラミング言語の仕組みについて学ぶ</h2><!--kg-card-end: html--><p>前のセクションの中で、ほとんどのコンピューターが CPU に依存しており、CPU が、特定の命令セットを 1 と 0 の形式で理解するということを説明しました。</p><p>つまり、理論的には、私たちは CPU に何をすべきかを伝えるコードを、CPU が理解できる、1 と 0 が長く連続してつながっている形式で記述できます。このようなバイナリ形式で記述された命令は<strong>機械語</strong>と呼ばれます。</p><p>これを扱うとなると、恐ろしいことになると感じませんか？ええ、たぶんそうでしょう。とはいえ私は、JavaScript、Python、および Java のような高水準プログラミング言語を主に使用してきたので、よくわかりませんが。</p><p><strong>高水準プログラミング言語</strong>は、人が読みやすいキーワードや文、および、とても簡単に誰もが学び、デバッグし、扱うことができる構文ルールを提供しています。</p><p>プログラミング言語は、私たち人間の脳が世界を知る方法と、コンピューターの脳 (CPU) が同じことを行う方法の間にあるギャップを埋める手段を提供します。</p><p>最終的には、私たちが書くコードは、CPU が理解できるバイナリ形式の命令 (機械語) に翻訳されなければなりません。</p><p>言語によりますが、コードは CPU によって実行できる機械語へと<strong>翻訳 (compile) </strong>または<strong>解釈 (interpret) </strong>されます。ほとんどのプログラミング言語は、この変換ステップを実行する、<strong>コンパイラ</strong>もしくは<strong>インタプリタ</strong>と呼ばれているプログラムを含んでいます。</p><p>いくつか例を挙げてみましょう - JavaScript と Python はインタプリタ型言語であり、一方で Java はコンパイラ型言語です。言語がコンパイラ型かインタプリタ型 (または、この 2 つの組み合わせ) かどうかは、開発者の利便性、エラー処理、性能、および他の領域と密接な関係がありますが、ここではそれらの詳細に立ち入るのは控えます。</p><!--kg-card-begin: html--><h2 id="3-understand-how-the-internet-works">3) インターネットの仕組みを理解する</h2><!--kg-card-end: html--><p>どの種類のプログラミングを志すにしても、コンピューターが相互に通信する仕組みを知っておくと、役に立つ場面に遭遇することになるでしょう。これは通常、インターネットを通して行われます。</p><p>インターネットは、接続されたコンピューターのグローバルな集合体にすぎません。いわば、グローバルネットワークです。このネットワーク内の各コンピューターは、互いに通信できるようにするために、ある一連のルールに同意しています。コンピューターにおいて、「通信」とはデータの移動を意味します。</p><p>前のセクションで説明したように、ウェブページ、画像、ビデオ、電子メールなど、すべての種類のデータは、どれも 1 と 0 で表すことができます。</p><p>したがってインターネットは、データの意味を保持したまま、1 と 0 を相互に転送できるコンピュータの非常に大きな集まりである、と考えることができます。インターネットは、デジタル伝送手段のひとつにすぎません。</p><p>ここで、インターネットが単なる巨大な会話の場であるとすれば、今度はその参加者を定義してみましょう。</p><p>まずは例え話です。ほとんどの人間の会話には少なくとも二人の参加者が必要です。たいていの場合、人が二人いて、準備ができていれば、片方の人が会話を開始し、もう片方の人が応答します。</p><p>インターネットにおいては、通信を開始するコンピュータは<strong>クライアント (client)</strong> と呼ばれます。返信または応答する側のコンピュータは<strong>サーバー (server)</strong> と呼ばれます。</p><p>例えば、ウェブブラウザーを開いて「www.google.com」にアクセスしたとします。この状況では、ウェブブラウザーがクライアントです。ひいては、自分の作業しているコンピューターをクライアントと考えることもできます。</p><p>さらに抽象的な意味では、あなたが通信を開始しているので、あなたがクライアントです。検索バーへ「www.google.com」と入力し &lt;エンター&gt; を押すことで、ブラウザーは、Google のコンピュータのひとつと通信を開始するように要求します。</p><p>この Google のコンピュータはサーバーと呼ばれます。これは、要求されている Google のウェブページをブラウザー内で表示するための、データを送ることによって応答します。それから、Google のウェブページが目の前に表示されるのです。このようなクライアント／サーバーの関係が、インターネットのすべてのデータ転送において利用されています。</p><!--kg-card-begin: html--><h2 id="4-practice-some-command-line-basics">4) コマンドラインの基本を練習する</h2><!--kg-card-end: html--><p><strong>コマンドライン</strong>は、一目見ただけでは威圧感があるかもしれません。これは、理解できないテキスト、数字、記号がスクロールする、謎めいたブラックスクリーンとして、たいていは悪意のあるハッカーか天才技術者の相棒という形で、映画の中にたびたび出てきます。</p><p>本当のところは、コマンドラインを使ったり理解するのに、特別な才能は必要ありません。実際には、マウス操作で快適に行っている多くのタスクと同じことを、コマンドラインを使って実行できます。</p><p>コマンドラインとマウスの大きな違いは、コマンドラインが主にキーボードからの入力を受け付けるところで、コツさえつかんでしまえば、入力スピードをかなり向上させることができます。</p><p>コマンドラインを使用すれば、フォルダの参照およびコンテンツの一覧表示、新しいフォルダの作成、ファイルの作成、移動、および削除、プログラムの実行など、他にもまだまだ多くのことが可能です。また、コマンドラインでコマンドを入力できるウィンドウは、<strong>ターミナル</strong>と呼ばれています。</p><p>ここからは、コマンドラインで作業している雰囲気をつかむために、基本的なナビゲーションコマンドの、短いチュートリアルを練習してみましょう。</p><p>ターミナルを開いたら、「自分がどこにいるのか」という疑問がまず浮かびます。(「Print Working Directory (ワーキングディレクトリを表示する)」の略である) <code>pwd</code> コマンドを使用すればそれがわかります。このコマンドは、ファイルシステムの中で、今自分がどのフォルダ内にいるのかを画面に表示してくれます。</p><p>では自分でも試してみてください:</p><h3 id="-">コマンドラインの使い方</h3><p>もし Mac を使用しているなら、ターミナルを開いてください。これは、本質的には Unix コマンドラインターミナルと同じものです。</p><p>Linux もしくは Unix のように、GUI (グラフィカルユーザーインターフェース - Graphical User Interface) を使用しないオペレーティングシステムを実行している場合は、コンピューターを起動した時に、デフォルトでコマンドラインが表示されます。使用している Linux のフレーバーもしくは Unix のオペレーティングシステムが、GUI を備えている場合は、手動でターミナルを開く必要があります。</p><p>では、プロンプトの後ろに <code>pwd</code> と入力し、&lt;エンター&gt; を押してください。するとコマンドラインが、今いるフォルダのパス (path) を出力します。</p><p>デフォルトでは、コマンドラインを開いた時のアクティブなフォルダは、ログインしているユーザーのホームディレクトリです。別の便利な場所から始めたい場合には、設定を変更できます。</p><p>便利なことに、チルダ (<code>~</code>) 文字を使用すれば、ホームディレクトリを参照できます。この先のいくつかの例の中でこの文字を使用します。</p><p>自分がどのフォルダの中にいるのかがわかったところで、<code>ls</code> コマンドを使用して、カレントディレクトリのコンテンツを一覧表示しましょう。<code>ls</code> コマンドは「List (一覧表)」の略です。</p><p><code>ls</code> と入力し &lt;エンター&gt; を押してください。するとカレントディレクトリに属しているコンテンツ (ファイルとサブフォルダ) が、画面に表示されます。</p><p>今度はこのコマンドを <code>ls -al</code> というように入力し、&lt;エンター&gt; を押して再実行してください。これで、ファイルサイズ、修正日、およびファイルパーミッションを含む、ディレクトリのコンテンツに関する先ほどよりも詳細な情報を取得できます。</p><p>今入力したコマンドの中のハイフンは、コマンドの動作を変更する、特定のフラグを設定するのに使用します。先ほどの場合は、ディレクトリの (隠しファイルを含む) コンテンツのすべてを一覧表示する -a フラグと、ファイルの詳細を追加表示する -l フラグを追加しました。</p><p>次は、「Make Directory (ディレクトリの作成)」の略である <code>mkdir</code> コマンドです。このコマンドを使用すれば、新しいフォルダを作成できます。では「testdir」という名前の新しいフォルダを作成してみましょう。</p><p><code>mkdir testdir</code> と入力し、&lt;エンター&gt; を押してください。それから、<code>ls</code> と入力して &lt;エンター&gt; を押してください。一覧の中に新しいディレクトリが確認できるはずです。</p><p>複数階層のディレクトリを一度に作成するには、<code>-p</code> フラグを使用して、<code>mkdir -p directory1/directory2/directory3</code> のように一連のディレクトリ全体を作成します。</p><p>もし、ひとつの場所にしか滞在できないなら、コマンドラインはあまり役に立ってくれません。そこで、ファイルシステム内の別のディレクトリに移動する方法を学びましょう。それを行うには、「Change Directory (ディレクトリの変更)」の略である、<code>cd</code> コマンドを使用します。</p><p>まず、<code>cd testdir</code> と入力し &lt;エンター&gt; を押してください。次に、<code>pwd</code> と入力し &lt;エンター&gt; を押します。ここでは、cd コマンド内で指定した「testdir」ディレクトリの中にいますよ、と出力に表示されることに注目してください。その中に入ってから確認しているのです！</p><p>今度は <code>cd ..</code> と入力して &lt;エンター&gt; を押してください。<code>..</code> は、親ディレクトリへ戻ることをコマンドラインに伝えています。</p><p><code>pwd</code> と入力し &lt;エンター&gt; を押してください。ここでは元のディレクトリに戻っていますよ、と出力に表示されることに注目してください。さかのぼってから確認したのです！</p><p>では次に、カレントディレクトリ内に新しい空のファイルを作成する方法を学びましょう。</p><p><code>touch newfile1.txt</code> と入力し &lt;エンター&gt; を押してください。<code>ls</code> コマンドを使用すれば、カレントディレクトリ内に新しいファイルが作成されているのを確認できます。</p><p>ここで、cp コマンドを使用して、あるフォルダから別のフォルダに、そのファイルをコピーしてみましょう。</p><p><code>cp newfile1.txt testdir</code> と入力し &lt;エンター&gt; を押してください。<code>ls</code> と <code>ls testdir</code> コマンドを使用すれば、カレントディレクトリ内にこの新しいファイルが残っており、「testdir」ディレクトリにそのファイルがコピーされているのを確認できます。</p><p>また、<code>mv</code> コマンドを使用して、コピーする代わりにファイルを移動させることもできます。</p><p><code>touch newfile2.txt</code> と入力し &lt;エンター&gt; を押して、新しいファイルを作成してください。次に、<code>mv newfile2.txt testdir</code> と入力し &lt;エンター&gt; を押して、そのファイルを「testdir」フォルダの中へ移動させます。</p><p><code>ls</code> と <code>ls testdir</code> コマンドを使用すれば、作成したファイルが「testdir」フォルダの中に移動しているのが確認できます (コピーではなく<em>移動</em>させたので、ファイルは最初に作成した場所にはもうありません)。</p><p>また、<code>mv</code> コマンドはファイル名の変更にも使用できます。</p><p>それを行うには、<code>touch newfile3.txt</code> と入力し &lt;エンター&gt; を押して、新しいファイルを作成してください。次に、<code>mv newfile3.txt cheese.txt</code> と入力し &lt;エンター&gt; を押して、ファイル名を更新します。<code>ls</code> コマンドを使用して、ファイル名が変更されているのを確認してみましょう。</p><p>最後になりますが、<code>rm</code> コマンドを使用すれば、ファイルとフォルダを削除できます。</p><p><code>rm cheese.txt</code> と入力し &lt;エンター&gt; を押して、ファイルを削除してください。<code>ls</code> コマンドを使用して、ファイルが削除されているのを確認してみましょう。</p><p><code>rm -rf testdir</code> と入力し &lt;エンター&gt; を押すと、今度は「testdir」ディレクトリとそのコンテンツを削除できます。<code>ls</code> コマンドを使用して、ディレクトリが削除されているのを確認しましょう。</p><p>ディレクトリを削除する際は、<code>-rf</code> フラグを使用する必要があることに注意してください。このフラグは、フォルダとそのすべてのコンテンツを強制的に削除します。</p><!--kg-card-begin: html--><h2 id="5-build-up-your-text-editor-skills-with-vim">5) Vim を使用してテキストエディタスキルを鍛える</h2><!--kg-card-end: html--><p>ここまでの間に、コマンドラインの基本について説明し、さらに、マウスを使用せずにファイルを扱う方法の例を、いくつか見てきました。</p><p>ファイルの作成、複製、移動、名前の変更、および削除を、コマンドラインから行う方法についてはわかりましたが、ターミナル内でテキストファイルの内容を編集する方法については、まだわかっていません。</p><p>コンピューターコードは、体系づけられた一連のファイルに保存されたテキストにすぎないので、ターミナル内でテキストファイルを扱うのは重要なことです。</p><p>もちろん、Microsoft Word (もしくは Sublime や Atom のようなよりコード向けのエディター) のような凝ったテキストエディタを使用して、コードを記述または編集することもできますが、そこまでは必要ではありません。通常は、コマンドを実行するために事前にターミナルを開いているため、たいていはターミナルがコードを書いたり編集するのに最も適している場所なのです！</p><p>ターミナル内でテキストファイルを扱うために特別に作られた、優れたテキストエディタがいくつかありますが、私は、<a href="https://www.freecodecamp.org/news/vimrc-configuration-guide-customize-your-vim-editor/">Vim と呼ばれるテキストエディタの基本を学ぶこと</a>をお勧めしています。</p><p>Vim は最も古くからあるテキストエディタであり、実績のある素晴らしいツールです。Vim とは「<strong><em>V</em></strong>i <em><strong>IM</strong></em>proved<strong>」の略であり、vi</strong> と呼ばれるツールの後を継ぐものです。</p><p>前述のとおり、Vim はターミナル内で直接動作するように作られているテキストエディターなので、別ウィンドウを開いて作業したり、マウスを使用したりする必要は全くありません。Vim には、キーボードのみを使用して、テキストコンテンツを簡便に作成し編集できる、一連のコマンドとモードが備わっています。</p><p>Vim を扱うには<a href="https://www.freecodecamp.org/news/how-not-to-be-afraid-of-vim-anymore-ec0b7264b0ae/">試行錯誤が多少は必要です</a>が、少し練習すれば、学んだスキルがコーディングのキャリアを通じて利益を生み出してくれます。</p><p>Vim は、多くのオペレーティングシステムにデフォルトでインストールされています。インストールされているかどうか確認するには、コマンドラインを開いて、<code>vim -v</code> と入力します。</p><p>ターミナル内で Vim が開いて、バージョンが表示されていれば、確認完了です！ (<code>:q!</code> と入力し &lt;エンター&gt; を押せば Vim を終了できる、ということを覚えておきましょう) 開かない場合は、システムにインストールする必要があります。インストールの詳細については、<a href="https://www.vim.org/">https://www.vim.org/</a> をご確認ください。</p><p>私見ではありますが、Vim の使用方法を最も早く、簡単に学ぶ方法は、Vim の組み込みチュートリアルである <strong><strong>VimTutor</strong> (VIM 教本) </strong>を使用することです。これを起動するには、自分のシステムに Vim がインストールされていることを確認してから、コマンドラインを開き、<code>vimtutor</code> (日本語版は <code>vimtutor ja</code> ) と入力して、&lt;エンター&gt; を押してください。</p><p>ここで解説に時間を割く理由などないほどに、このチュートリアルはとても優れています。なので、今から VIM 教本を実際に学習してみましょう！では後ほど次のセクションで。</p><p>VIM 教本を完了した後でまだ余力がある場合は、Vim を使い始める際に、<a href="https://initialcommit.com/blog/7-versatile-vim-commands">生産性を劇的に改善できる 7 つの Vim コマンド</a>をチェックしてみてください。</p><!--kg-card-begin: html--><h2 id="6-take-up-some-html">6) HTML をある程度習得する</h2><!--kg-card-end: html--><p>HTML (<strong>H</strong>yper<strong>T</strong>ext <strong>M</strong>arkup <strong>L</strong>anguage - ハイパーテキストマークアップランゲージの略) は、ウェブページの骨組みであると考えることができます。HTML は、表示される要素と、その順序を指定することによって、ページの構造を定義します。</p><p>あなたがブラウザー内で訪問してきたすべてのウェブページには、それに関連付けられている HTML が備わっています。ウェブページを訪問すると、そのウェブページをホストしているウェブサーバーは、HTML をブラウザーへ送信します。その後、ブラウザーは受信した HTML を解釈し、表示します。</p><p>ほぼすべてのウェブページには、タイトル、テキストコンテンツ、画像リンク、ナビゲーションリンク、ヘッダーとフッターなど、標準的なコンテンツのセットが含まれています。ページの構造を定義している HTML に、これらすべての情報が保存されています。</p><p>ところで、HTML は、厳密にはプログラミング言語ではないにもかかわらず、「HTML コード」と呼ばれることがよくあるということを、知っておいた方がよいでしょう。</p><p>後述しますが、プログラミング言語は、一連の操作を順番に実行するなど、<strong>何か処理を行う</strong>コードを記述できます。しかし、HTML が<strong>何かを処理するということはありません</strong>。HTML を実行したり動作させるわけではないのです。HTML はファイル内に記述されており、その内容がエンドユーザーに表示できるウェブブラウザーへ送信されるのを、待つだけなのです。</p><p>実は、HTML は基本的にはデータにすぎません。ウェブページの見た目を定義するデータでしかないのです。</p><p>では、HTML はどのように記述するのでしょうか？HTML では、ウェブページを構成する要素を明示するのに、標準的な (基本的にはただのラベルである) <strong>タグ</strong>のセットを使用します。それぞれのタグは山かっこを使用して記述します。</p><p>たとえば、<strong>タイトル</strong>タグは <code>&lt;title&gt;My Page Title&lt;/title&gt;</code>、<strong>段落 (パラグラフ)</strong> タグは <code>&lt;p&gt;たくさんのランダムなテキストコンテンツ。&lt;/p&gt;</code>、というように明示します。</p><p>各 HTML 要素は、開始タグと終了タグから成ります。開始タグとは、次のような山かっこで囲まれたタグラベルのことです。</p><p><code>&lt;tagname&gt;</code></p><p>これで新しい HTML タグが始まります。終了タグは本質的には同じものですが、終了タグであることを示すために、手前の山かっこ (小なり記号) の後ろに斜線を記述します。</p><p><code>&lt;/tagname&gt;</code></p><p>実際のページには、この 2 つのタグの間にあるテキストが、コンテンツとして表示されます。</p><p>ここからは、最も一般的に用いられているタグをいくつか見ていきましょう。まずは <code>&lt;html&gt;</code> タグです。このタグは HTML ページの始まりを明示します。これに対応する <code>&lt;/html&gt;</code> タグ (斜線に注目しましょう) は HTML ページの終わりを明示します。この 2 つのタグの間の、すべてのコンテンツがページの一部となります。</p><p>2 つ目は <code>&lt;head&gt;</code> タグです。ブラウザーがページを把握するための追加情報を明示するために、このタグを使用します。このタグの中のほとんどのコンテンツはユーザーへ表示されません。これに対応する <code>&lt;/head&gt;</code> タグは HEAD セクションの終わりを明示します。</p><p>先ほど、<code>&lt;title&gt;</code> タグが出てきましたね。これはブラウザーのタブに表示される、ウェブページのタイトルを指定します。このタグは <code>&lt;head&gt;...&lt;/head&gt;</code> セクション内に置く必要があります。</p><p>次は <code>&lt;body&gt;</code> タグです。このタグの中のすべてのコンテンツが、ウェブページの主なコンテンツを構成します。これら 4 つのタグを組み立てると、次のようになります:</p><pre><code class="language-html">&lt;html&gt;
    
    &lt;head&gt;
        &lt;title&gt;My Page Title&lt;/title&gt;
    &lt;/head&gt;
        
    &lt;body&gt;
        &lt;p&gt;A bunch of random text content.&lt;/p&gt;
    &lt;/body&gt;

&lt;/html&gt;
</code></pre><p>上記の簡素な HTML スニペットは、タイトルと、body のコンテンツに段落が 1 つ含まれている、シンプルなウェブページを表しています。</p><p>この例には、これまでのセクションでは言及していなかったポイントが含まれています。それは、HTML タグは互いに入れ子にできる、ということです。つまり、HTML タグは、他の HTML タグの内側に置くことができるのです。</p><p>HTML には、リッチな一連のコンテンツをウェブユーザーに提供できる、多くのタグが他にも用意されています。ここではそれらの詳細については取り上げませんが、参照用に短いリストを以下に示しておきます:</p><ul><li><code>&lt;p&gt;</code>: テキストの段落を新しい行から始めます。</li><li><code>&lt;h1&gt;</code>: ページの見出しであり、通常はページタイトルに用いられます。</li><li><code>&lt;h2&gt;</code>: セクションの見出しであり、通常はセクションのタイトルに用いられます。</li><li><code>&lt;hx&gt;</code>: 小見出しに用いられ、<em>x</em> には 3 から 6 の数字が入ります。</li><li><code>&lt;img&gt;</code>: 画像を配置します。</li><li><code>&lt;a&gt;</code>: リンクを配置します。</li><li><code>&lt;form&gt;</code>: ユーザーが記入し送信するための入力欄を含むフォームです。</li><li><code>&lt;input&gt;</code>: ユーザーが情報を入力するための入力欄で、通常は form 内に配置されます。</li><li><code>&lt;div&gt;</code>: コンテンツ区分要素で、いくつかの他の要素をグループ化して、間隔を調整するなどの目的で使用されます。</li><li><code>&lt;span&gt;</code>: もうひとつのグループ化要素で、通常は、他の要素内のテキストフレーズを囲み、テキストコンテンツの特定の部分だけに特別な書式を適用するのに使用されます。</li></ul><!--kg-card-begin: html--><h2 id="7-tackle-some-css">7) CSS にある程度取り組む</h2><!--kg-card-end: html--><p>CSS (カスケーディングスタイルシート - <strong>C</strong>ascading <strong>S</strong>tyle <strong>S</strong>heets) が備わっていないウェブページは、フロスティングのないケーキのようなものです。フロスティングがなくてもケーキはケーキですが、美味しそうには見えませんよね。</p><p>CSS によって、HTML の要素に、背景色、フォントサイズ、幅、高さなどの、スタイルプロパティを適用できます。</p><p>各々のスタイルプロパティは、スクリーン上における必要な表示効果をブラウザーに指示します。HTML と同じで、CSS は厳密にはプログラミング言語ではありません。何かしらのアクションを実行するのではなく、骨組みである HTML に、スタイルを適用できるようにしてくれます。</p><p>では、HTML 要素に CSS スタイルを関連付ける方法を見ていきましょう。この方法を解き明かす要素は、以下の 3 つです:</p><p><strong>CSS セレクター:</strong> スタイルを適用する HTML の 1 つまたは複数の要素を選択するのに使用されます。</p><p><strong>CSS プロパティ名:</strong> セレクターに対応している HTML 要素に適用する、特定のスタイルのプロパティの名前です。</p><p><strong>CSS プロパティの値:</strong> 適用するスタイルプロパティの値です。</p><p>これらの要素をまとめて、段落の文字色とフォントサイズを設定する例がこちらです:</p><pre><code class="language-css">p {
  color: red;
  font-size: 12px;
}
</code></pre><p>では、中かっこの手前から見ていきましょう。そこには CSS のセレクターがあります。上記の場合では、<code>&lt;p&gt;</code> (paragraph - 段落) の HTML タグを表す文字 <strong>p</strong> がこれにあたります。これは、ウェブページ上のすべての <code>&lt;p&gt;</code> タグに対して、中かっこ内に記述したスタイルが適用されることを意味しています。</p><p>今度は、中かっこ内に話題を移しましょう。そこには、指定した要素に適用するスタイルが記述されています。</p><p>コロンによって区切られた、CSS プロパティとその値のペアが確認できますね。コロンの左側がプロパティ (上記の場合は「color」と「font-size」) です。右側にはそのプロパティの値 (上記の場合は「red」と「12px」) があります。各プロパティ／値のペアの末尾にはセミコロンをつけます。</p><p>おそらく、あなたはこの動作を確認することができるでしょう。上記の CSS コードスニペットは、<code>&lt;p&gt;</code> タグ内に配置されているすべてのテキストを、赤色で、かつ文字サイズを 12 ピクセルで表示するよう、ブラウザーに指示します。</p><p>では、HTML ページに、これらの CSS スタイルを含むことを認識させるには、どうすればよいでしょうか？その答えは、<code>&lt;link&gt;</code> HTML タグを入れること、となります。CSS スタイルは、通常は HTML とは別のファイル (<strong>.css</strong> ファイル) 内に作成されます。つまり、適用するスタイルがあるということをブラウザーに伝えるには、何らかの方法で HTML ファイル内にそれらをインポートする必要があります。</p><p><code>&lt;link&gt;</code> 要素はこのような目的のために存在しています。外部の CSS ファイルをインポートするには、次のように HTML ファイルの <code>&lt;head&gt;</code> セクション内に <code>&lt;link&gt;</code> 要素を入れます:</p><pre><code class="language-css">&lt;head&gt;

    &lt;title&gt;My Page Title&lt;/title&gt;

    &lt;link rel="stylesheet" type="text/css" href="/home/style.css"&gt;

&lt;/head&gt;
</code></pre><p>この例では、<strong>href</strong> 属性で指定した CSS スタイルをインポートしており、<em>/home/style.css</em> はそのファイルパスです。</p><p>この後の 3 つのセクションでは、厳密にプログラミング言語と呼べる言語に (ついに) 入っていきます！</p><p>JavaScript、Python、Java の全般的な概要と、その 3 つの言語に共通する、重要なコーディングの概念をいくつか説明します。各言語の特徴とサンプルコードを比較対照していきますので、できれば 3 つの言語の基本を、総合的に理解するようにしてみてください。</p><!--kg-card-begin: html--><h2 id="8-start-programming-with-javascript">8) JavaScript でプログラミングを始める</h2><!--kg-card-end: html--><p>まず次の質問に回答することから始めましょう: HTML を使用してウェブページの骨組みを作り、CSS でページの見た目をきれいに整えることができたならば、なぜ JavaScript が必要になるのでしょうか？</p><p>技術的には必要ありません、というのが答えです。見た目のきれいな静的サイトを用意するだけで十分ならば、HTML と CSS だけで大丈夫でしょう。</p><p>ここでのキーワードは「静的」です。一方で、コンテンツを変更したり、複雑なユーザーとの対話処理を行ったりするような、動的な機能をウェブページに追加しようとする場合には、JavaScript を使用しなければなりません。</p><h3 id="javascript-">JavaScript とは何か？</h3><p>では、JavaScript とは一体何なのでしょうか？JavaScript は、特にウェブサイトおよびインターネットのために作られたプログラミング言語です。セクション 2 で説明しましたが、ほとんどのプログラミング言語はコンパイラ型かインタプリタ型であり、たいていプログラムは単独で動作する (スタンドアロンの) 環境内で実行されます。</p><p>JavaScript はこの点では少しユニークで、ウェブブラウザー内で直接実行できるように作られています。ウェブページ上で実行できる、一連の動作を表すコードを JavaScript で記述できるので、サイトをもっと動的なものにすることができるようになります。</p><p>JavaScript コードは、ファイル名の後に <code>.js</code> 拡張子が付けられているテキストファイル内に記述するか、もしくは HTML 内の <code>&lt;script&gt;</code> タグの中に直接記述できます。</p><p>長い間、JavaScript コードは、主にウェブブラウザー内で実行することしかできませんでした。ですがこのような考え方は、どこででも実行できるスタンドアロンな JavaScript 実行環境を作り出す、<strong>Node.js</strong> プロジェクトによって一変しました。</p><p>ブラウザー内 (つまりクライアント側) だけではなく、Node.js はさまざまなコンピューターのローカル環境にインストールすることができ、そこで JavaScript コードの開発や実行ができるようになります。また、ウェブサーバーにも Node をインストールできるので、JavaScript を単にウェブブラウザーのフロントエンドコードとして使用するだけでなく、アプリケーションのバックエンドコードとしても、使用することができるのです。</p><p>概要の説明は済んだので、ここからは JavaScript の基本をいくつか掘り下げてみましょう。</p><h3 id="javascript--1">JavaScript における変数と代入</h3><p>変数はおそらくプログラミングにおけるもっとも重要な概念を表しています。変数とは、特定の値を参照するのに使用する、名前もしくはプレースホルダーのことです。</p><p><strong>変数 (variable)</strong> は、保存されている値をプログラムの実行中に変更できる、という意味を含んでいます。</p><p>変数には、数値、文字列、リスト (配列)、および後ほど詳しく説明する他のデータ構造を保存できます。</p><p>あらゆるプログラミング言語が変数を使用しますが、構文は言語によって異なります。</p><p>変数は、コードの別の場所からでもその値を参照できるので便利です。そうすることで、必要に応じて変数の値をチェックしたり、その値の変化に応じて異なる処理を実行したりできます。</p><p>JavaScript では、<code>let x;</code> というように、<code>let</code> キーワードを使用して変数を宣言します。</p><p>この例は、x をコード内で使用できる変数として宣言しています。セミコロンを行末に加えていることに注目してください。JavaScript (と、他の多くの言語) では、セミコロンでコードの各文の終わりを明示します。</p><p>変数 <em>x</em> の作成が済んでいれば、<code>x = 10;</code> のように、<strong>代入演算子</strong>とも呼ばれる等号 (=) を使用して、その変数に値を代入できます。</p><p>この例では、数値 10 を <em>x</em> という名前の変数に代入しています。これにより、コード内の別の場所で <em>x</em> を使用すると、それが値 10 に置き換えられます。</p><p>次のようにして、変数の宣言と代入の両方を 1 行で行うこともできます:</p><pre><code class="language-javascript">let x = 10;
</code></pre><h3 id="javascript--2">JavaScript におけるデータ型</h3><p>直前のセクションで、整数 (正の整数) の値を <em>x</em> という名前の変数に格納しました。変数には<strong>浮動小数点数</strong>として知られている、小数も格納できます。たとえば、<code>let x = 6.6;</code> と記述できます。</p><p>変数に格納できる値のいろいろな型のことを、<strong>データ型</strong>といいます。ここまでは、数値型 (整数と浮動小数点数) しか出てきませんでしたが、それではデータ型の中のひとつを扱っただけにすぎません。変数には、テキストデータも同じように格納できるのです。</p><p>コーディング用語では、文字のまとまりのことを<strong>文字列 (String)</strong> といいます。文字列値は、次のように一重または二重引用符で囲むことで、変数 x に格納できます:</p><pre><code class="language-javascript">let x = 'Hello there!';

let y = "Hey bud!";
</code></pre><p>次に説明するデータ型は<strong>論理型 (Boolean)</strong> です。論理型は、<code>true</code> もしくは <code>false</code> のどちらかの値を取ることができます。なお、この 2 つの値はすべて小文字でなければなりません。JavaScript において、true と false は論理型変数の値に使われる専用のキーワードです。次のように使用されます:</p><pre><code class="language-javascript">let x = true;

let y = false;
</code></pre><p><code>true</code> と <code>false</code> が、文字列の時のように引用符で囲まれていないことに注目してください。ここでもし引用符で囲んでしまうと、値は文字列型となり、論理型ではなくなります。</p><p>論理型は、次のセクションで学ぶ、条件文 (if/else 文) などのプログラムのフロー制御によく使用されます。</p><h3 id="javascript--3">JavaScript におけるプログラムのフロー制御文</h3><p>変数と JavaScript のデータ型の基本を理解できたところで、それらを使ってできることを、いくつか見ていきましょう。</p><p>変数を用いて何を行うのかについて、コードの中で指示しなければ、変数は役に立ちません。そこで、変数を用いた処理を実行するために、<strong>文 (statement)</strong> を使用します。</p><p>文とは、定義済みの変数の値などをもとに処理を実行する、コードの中の特別なキーワードのことです。文によって、プログラムの論理の流れを定義でき、プログラムの動作を決めるさまざまな便利な処理を実行できます。</p><h4 id="if-else-">If / Else 文</h4><p>では、最初に <code>if</code> 文について説明します。<code>if</code> 文は、条件が満たされた (true である) 時だけ、処理を実行するようにしてくれます。使い方はこちらです:</p><pre><code class="language-javascript">let x = 10;

if ( x &gt; 5 ) {
    console.log('X is GREATER than 5!');
} else {
    console.log('X is NOT GREATER than 5!');
}
</code></pre><p>まず、<em>x</em> という名前の変数を定義し、その値を 10 に設定します。その次に <code>if</code> 文が記述されています。キーワード <code>if</code> の後ろには、評価される条件が入った、一組の丸かっこがあります。この例では、<code>x &gt; 5</code> が条件です。<em>x</em> は 10 と等しい、と定義してあるので、この条件は true と評価されます。</p><p>丸かっこ内の条件が true なので、中かっこの間に記述されているコードが実行され、文字列「X is GREATER than 5!」が画面に表示されるのを確認できます (ここでは <code>console.log()</code> の意味には触れず、単にそれが、丸かっこ内の値を画面に表示する、ということだけ理解していただければ大丈夫です)。</p><p>同じサンプルコードの中には、<code>else</code> 文も含まれていますね。これは、条件が <code>false</code> と評価された場合に、その後ろの中かっこの間のコードを実行します。</p><h4 id="while-">While ループ</h4><p>次に説明する文の種類は、<strong>while ループ</strong>です。ループを使用することで、コードを何度もコピー＆ペーストしなくても、コードブロックを必要な回数だけ繰り返し実行できるようになります。</p><p>たとえば、ある文を 5 回画面に表示させる場合を考えてみましょう。これは次のようにして行うことができます:</p><pre><code class="language-javascript">console.log('とても重要なメッセージです!');
console.log('とても重要なメッセージです!');
console.log('とても重要なメッセージです!');
console.log('とても重要なメッセージです!');
console.log('とても重要なメッセージです!');
</code></pre><p>5 つのメッセージを表示するだけなら、これでも問題ないかもしれませんが、100 個や 1000 個ではどうでしょうか？何回もコードを繰り返し実行してくれる、よい方法が必要ですよね。ループは、それを可能にしてくれます。コーディング用語では、何回もコードを反復して実行することを、<strong>イテレーション (iteration)</strong> といいます。</p><p>次の <code>while</code> ループでは、条件が true である限り、その後ろのコードブロックを実行し続けます:</p><pre><code class="language-javascript">let x = 1;

while ( x &lt;= 100 ) {
    
    console.log('とても重要なメッセージです!');
    
    x = x + 1;
    
}
</code></pre><p>この例では、<em>x</em> を値 1 で初期化しています。次に、<code>while</code> ループを記述しています。<code>if</code> 文と同様に、条件が入った一組の丸かっこがありますね。この場合は、<code>x &lt;= 100</code> が条件です。<em>x</em> が 100 以下であれば、条件は <code>true</code> と評価されます。</p><p>その後ろの中かっこ内に、実行するコードブロックが記述されています。最初にコンソールにメッセージを表示します。次に、<em>x</em> を 1 ずつインクリメントします。</p><p>このタイミングで、ループは条件を再評価し、結果が <code>true</code> のままであるか確認します。1 回目のループ実行時に、変数 <em>x</em> は 1 インクリメントされているので、現在は値 2 を保持しています。2 は 100 以下なので、条件は変わらず <code>true</code> と評価されます。</p><p>ループ内のコードを繰り返し実行しながら、<em>x</em> の値は 101 になるまでインクリメントされます。そしてこの時点で、<em>x</em> が 100 より大きくなり、条件は <code>false</code> と評価され、ループ内のコードは実行されなくなります。</p><h3 id="html-script-">HTML の &lt;script&gt; タグについて</h3><p>これで JavaScript の紹介は済んだので、今度は JavaScript コードのファイルを HTML ページに追加する方法について説明します。その方法とは、これまでに説明していなかった、<code>&lt;script&gt;</code> タグという HTML タグを使用することです。</p><p>これは、CSS ファイルを HTML に追加するのに使用した <code>&lt;link&gt;</code> 要素と似ていますが、<code>&lt;script&gt;</code> 要素は主に JavaScript のために使用します。</p><p>例えば先ほど説明した JavaScript のサンプルコードの一つを、HTML ファイルと同じフォルダ内の、<code>customscript.js</code> という名前のファイルに保存したとしましょう。この場合、HTML の <code>&lt;head&gt;...&lt;/head&gt;</code> セクション内に以下のタグを追加することで、この JavaScript ファイルを HTML に追加できます:</p><pre><code class="language-html">&lt;script type="text/javascript" src="customscript.js"&gt;&lt;/script&gt;
</code></pre><p>これにより、JavaScript コードがファイルから読み込まれ、ブラウザー内にウェブページを表示する際に実行されます。</p><p>JavaScript のスキルに慣れてきたら、<a href="https://www.freecodecamp.org/japanese/news/javascript-projects-for-beginners/">こちらの初心者向けの楽しいプロジェクトをいくつか作成しながら</a>練習してみましょう。</p><!--kg-card-begin: html--><h2 id="9-continue-programming-with-python">9) Python でプログラミングを継続する</h2><!--kg-card-end: html--><p>JavaScript の基本について学んだところで、別のプログラミング言語である Python に飛び込んでみるのも有意義なことです。</p><p>多くのプログラミング言語は、変数、算術演算子、if/else 文、ループ、関数などを含む、似通った一連の機能を提供しています。</p><p>同じような機能を、別のプログラミング言語で実装する方法を調べてみると、役に立つことがあります。たいてい考え方はほとんど一緒ですが、構文 (コードを記述する上でのきまり) は言語によって異なります。</p><h3 id="python-">Python とは何か？</h3><p>では Python の予備知識について少し説明するところから始めます。JavaScript のように、Python は実行速度よりも開発しやすさを優先している、高水準プログラミング言語です。</p><p>初心者が学ぶのに最適な言語のひとつが Python であると、私は考えています。その構文は、簡素かつ直感的であり、Python はオープンソースとビジネスの世界で、とても人気のある言語です。</p><p>この記事の前の方で、コンパイラ型言語とインタプリタ型言語について、対比しながら説明しました。Python はインタプリタ型言語です。Python のプログラムを実行する時には、<strong>Python インタプリタ</strong>が、マシン上でコードを一行ずつ逐次的に読み込んで実行します。</p><p>この点が、コンパイラ型言語と異なります。コンパイラ型言語では、最初にコンパイラを使用してコードを最適化された形式 (実行ファイル) に変換し、その後で変換されたコードを実行します。</p><p>JavaScript とは違い、Python はウェブブラウザー内で直接実行されるように作られてはいません。Python は便利な<em>スクリプト言語</em>であり、通常はユーザーのローカル環境で実行される、任意のタスク用のコードを記述するために使用されます。</p><p>Python コードは、Python インタプリタがインストールされているコンピュータであれば実行できます。Python は現在も一般的に使用されているスクリプト言語ですが、データサイエンスやサーバーサイドアプリケーションにも広く使用されています。</p><h3 id="python--1">Python における変数と代入</h3><p>JavaScript と同じように、Python でも変数を定義できます。Python では、必要に応じて、次に示すように等号を使用して変数を作成し、値を代入します:</p><pre><code class="language-python">x = 10
y = "cheese"
</code></pre><p>変数を定義する構文において、Python と JavaScript の間には 2 つの違いがあります。Python では、<code>let</code> キーワードは必要ありませんし、行末にセミコロンを付ける必要もありません。</p><p>Python は、空白またはインデント (字下げ) に基づく、一連の構文規則を使用します。これによって、セミコロンのような行の終了文字をつけたり、中かっこを使用してブロックスコープを定義する必要がなくなります。</p><h3 id="python--2">Python におけるデータ型</h3><p>Python には、変数に代入できるデータ型一式も備わっています。これには、整数、浮動小数点数 (小数)、文字列、リスト、辞書が含まれます。</p><p>整数、浮動小数点数、および文字列は、本質的には JavaScript の対応するものと同じですから、同じ説明をここでは繰り返しません。</p><p>Python において、論理値型は JavaScript のものととても似ていますが、True と False キーワードは大文字で始めなければならないという点が異なります:</p><pre><code class="language-python">x = True

y = False
</code></pre><h3 id="--1">プログラムのフロー制御文について</h3><p>JavaScript と同じように、Python にも一連のフロー制御文が備わっていますが、構文がわずかに異なります。</p><h4 id="if-else--1">If / Else 文</h4><p>JavaScript のセクションで説明した <code>if/else</code> の例を、Python で記述すると次のようになります:</p><pre><code class="language-python">x = 10

if ( x &gt; 5 ):
    print('X is GREATER than 5!')
    
else:
    print('X is NOT GREATER than 5!')
</code></pre><p><em>x</em> という名前の変数を定義して、その値を 10 に設定し、それから <code>if</code> 文が続いています。丸かっこ内の条件は <code>True</code> と評価されるので、<code>if</code> 文の後のインデントされたコードが実行され、画面に「X is GREATER than 5!」が表示されるのを確認できます。</p><p>Python では、<code>print()</code> 関数を使用して情報を画面に表示します。</p><p>また、<code>else</code> 文にも注目してみましょう。この文は、<em>x</em> の値を評価している条件が <code>False</code> である場合に、先ほどとは別の文字列を画面に表示します。</p><p>この記事の前の方で説明した JavaScript のコードと、すぐ上の Python のコードの間には、2 つの大きな違いがあります。Python では、<code>if</code> 文のブロックの始まりを示すために、中かっこの代わりにコロンが使用されます。</p><p>加えて、Python では <code>print()</code> 関数の前のインデントが重要です。JavaScript では、中かっこを使用してコードブロックを明確に記述したり、セミコロンを使用して文の終わりを示したりするので、文の間にあるインデントまたは空白についてあまり考慮する必要はありません。ところが、この Python の例では、セミコロンも中かっこも記述されていないのです！</p><p>なぜならば、実は Python では空白と改行文字をもとに、文の終わりやコードブロックを認識しているからです。</p><p>コロンは、<code>if</code> ブロックの始まりを Python インタプリタに伝えています。<code>if</code> ブロックを構成しているコードをインデントしています (1 タブ = 4 スペース が通例になっています) が、これは、そこから先が <code>if</code> ブロックの一部であることを Python インタプリタに理解させるために必要なことです。その後にインデントされていない行が来ると、それが <code>if</code> ブロックの終わりを表します。</p><h4 id="while--1">While ループ</h4><p>次は、Python のループについて説明します。Python の <code>while</code> ループも、本質的には JavaScript のセクションで解説したものと同じですが、以下のように、Python の構文を使用します:</p><pre><code class="language-python">x = 1

while ( x &lt;= 100 ):
    print('とても重要なメッセージです!')
    x = x + 1

print('ここはループの中ではありません！')
</code></pre><p>この <code>while</code> ループと、JavaScript バージョンとの違いは、次の通りです:</p><ul><li>変数の定義を行っているコードから <code>let</code> を削除しています。</li><li>行末のセミコロンを削除しています。</li><li>中かっこをコロンに置き換えています。</li><li>ループ内のコードをタブを使って確実にインデントさせています。</li></ul><p>インデントされていない行は、ループの一部ではないので、繰り返し実行されない、ということを示すために、上記の例では、ループの外側で追加のメッセージを表示しています。</p><p>ここで、新米パイソニスタのために書かれた、<a href="https://initialcommit.com/blog/zen-of-python">禅 オブ Python (the Zen of Python)</a> に一度目を通してみることをお勧めします。これは、Python 的なコードを記述するための、20 個のゆるい規則のリストです。</p><p>Python の基本に慣れてきたら、<a href="https://www.freecodecamp.org/news/python-projects-for-beginners/">こちらの初心者向けの楽しい Python プロジェクトをいくつか作成してみましょう</a>。</p><!--kg-card-begin: html--><h2 id="10-further-your-knowledge-with-java">10) Java で知識を深める</h2><!--kg-card-end: html--><p>2 つの高水準プログラミング言語を扱ってきましたが、さらにもうひとつ Java を掘り下げてみましょう。</p><p>インタプリタを使用して、リアルタイムでソースコードを実行する JavaScript や Python とは違い、Java はコンパイラ型言語です。つまり、Java のソースコードをコンピューターが理解できる形式に変換するには、(インタプリタではなく) コンパイラを使用します。</p><p>ほとんどのコンパイラは、機械語でできた 1 つ以上の実行ファイルを生成します。これは、特定のオペレーティングシステムとハードウェアプラットフォームですぐに実行できる形式に、ソースコードからコンパイルされたものです。</p><p>ただ、Java は少し変わっていて、Java ソースコードを、<strong>バイトコード</strong>と呼ばれる中間コードに変換します。これは他のほとんどのコンパイラ型言語が作成する機械語とは異なります。Java バイトコードは、<strong>Java 仮想マシン (JVM - Java Virtual Machine)</strong> と呼ばれるものによって実行することを意図して作られています。</p><p>JVM は、コンピューターにインストールするプログラムだと考えることができます。このプログラムが、Java バイトコードを実行することによって、Java プログラムが動作します。だれかが「コンピューターに Java がインストールされているかどうか」について話しているときは、たいてい <strong>JVM</strong> がコンピューターにインストールされているかどうかを尋ねているのです。</p><p>JVM は、前の章で説明したインタプリタに似た機能を果たしています。ただし、入力としてソースコード (これは .java ファイル内に保存されています) を読み込む代わりに、コンパイルされたバイトコードを読み込みます。</p><p>この仕組みの利点は、特定のオペレーティングシステムとプラットフォームでコンパイルされたバイトコードを、JVM がインストールされている他のどのプラットフォームでも実行できるようにしてくれるところです。</p><p>たとえば、Windows オペレーティングシステムを実行しているコンピューターで記述された、Java コードのファイルがあり、それがバイトコードへコンパイルされたとしましょう。このバイトコードは、Windows、macOS、Linux などを含む、どのプラットフォームの JVM でも実行できます。</p><p>これは、他のプログラミング言語には当てはまりません。コンパイルされた実行ファイルはほとんどの場合、コンパイルされた環境内でのみ実行できます。</p><h3 id="java-">Java における変数と代入</h3><p>これまで説明してきた言語 (Python と JavaScript) と Java の、大きく異なる点のひとつは、Java が<strong>静的型付け</strong>言語であることが挙げられます。</p><p>つまり、プログラムのコンパイル時に、変数のデータ型がわかっていなければならないので、あらかじめ型の設定を行う必要があります。</p><p>Java コードの中で変数を作成するときは、整数 (Integer)、文字列 (String) など、毎回必ずその変数のデータ型を明確に定義しなければなりません。これは変数の<strong>宣言</strong>と呼ばれます。</p><p>いったん変数のデータ型が宣言されると、プログラムの実行中は、宣言されたデータ型の値しかその変数は保持できません。</p><p>この点が、<strong>ランタイム</strong> (プログラムの実行中) に変数のデータ型が設定される、JavaScript や Python と大きく異なっています。このことから、JavaScript や Python のような言語は<strong>動的型付け</strong>言語と呼ばれています。動的型付け言語では、ソースコード内で変数のデータ型を明示せずに、任意の型の値を臨機応変に変数へ再代入できます。</p><p>Java では、次の構文を用いて変数を作成します:</p><pre><code class="language-java">Datatype name = value;
</code></pre><p>この <code>Datatype</code> が、整数 (Integer) や文字列 (String) など、変数に格納される値のデータ型です。次に、定義する変数名を <code>name</code> で表し、これをコードの中で使用します。<code>value</code> は、変数に代入する実際の値です。JavaScript と同じように、Java の文はすべてセミコロンで終わるということに注意してください。</p><h3 id="java--1">Java におけるデータ型</h3><p>Java では、基本的な組み込みデータ型は<strong>プリミティブ</strong>型と呼ばれます。Python や JavaScript のような高水準言語についてここまで学習した内容を踏まえると、見覚えがあると感じるでしょう。主なプリミティブ型を以下に示します:</p><ul><li>整数型 <code>int</code>: −2,147,483,648 から 2,147,483,647 までの整数を格納できます。</li><li>浮動小数点型 <code>float</code>: 負の値は -3.4×10<sup>38</sup> から -1.4×10<sup>-45</sup>、正の値は 1.4×10<sup>-45</sup> から 3.4×10<sup>38</sup> の間の小数を格納できます。</li><li>論理型 <code>bool</code>: <code>true</code> もしくは <code>false</code> の、2 つの論理値のいずれかを格納できます。</li></ul><p>プリミティブ型は (short、long、byte、double など) 他にもいくつかあるということに注意が必要ですが、それらは上記のものほど頻繁に使用されないので、ここでは触れません。プリミティブ型の変数を初期化する方法はこちらです:</p><p>整数型: <code>int x = 100;</code></p><p>浮動小数点型: <code>float pi = 3.14;</code></p><p>文字型: <code>char middleInitial = 'T';</code></p><p>論理型: <code>bool isHuman = true;</code></p><p>ここで再度お伝えしたいのですが、データ型は一度宣言されると、その変数は特定のデータ型の値しか保持できません。</p><p>たとえば、1 文字の値 (character) を、整数型で宣言された変数に格納しようとすると、エラーが返ってきます。上記の例の整数型変数 <em>x</em> に、文字 'S' は代入できないのです。</p><p>では次に、文字、数値、および記号の連なりをテキストデータとして表す、文字列型について説明します。</p><p>Java の文字列型はプリミティブ型ではありません。つまり、文字列型は小さなパーツから構築されています。文字列を格納する変数を宣言するには、文字列型を使用し、変数に代入する値を二重引用符で囲みます:</p><pre><code class="language-java">String name = "Harry Potter";
</code></pre><h3 id="java--2">Java におけるプログラムのフロー制御文</h3><p>JavaScript と同じように、Java は <code>if</code> 文、ループ、および関数のコードブロックの定義に中かっこを使用します。ここからは、前の章で示したサンプルコードと同じ制御文をもつプログラムについて調べ、Java の構文を使用するために、それらを更新します。</p><h4 id="if-else--2">If / Else 文</h4><p>こちらが前の章のサンプルコードを反映した Java の if/else 文です:</p><pre><code class="language-java">int x = 10;

if ( x &gt; 5 ) {
    System.out.println("X is GREATER than 5!");
} else {
    System.out.println("X is NOT GREATER than 5!");
}
</code></pre><p>この基本的な <code>if</code> 文の例は、JavaScript の場合のサンプルコードとほとんど同じです。違いは、<em>x</em> のデータ型を int と宣言していることと、メッセージを画面に表示するために <code>console.log()</code> の代わりに <code>System.out.println()</code> を使用していることだけです。</p><p>次に、Java におけるループに話題を移しましょう。Java と JavaScript の構文は非常に似ているので、Java の <code>while</code> ループは、JavaScript の例で見たものと基本的には同じです:</p><pre><code class="language-java">int x = 1;

while ( x &lt;= 100 ) {

    System.out.println("とても重要なメッセージです!");
    
    x = x + 1;
    
}
</code></pre><p>この <code>while</code> ループは、指定したメッセージを 100 回画面に表示します。</p><p>以上で、特定のプログラミング言語を説明するセクションを終了します。同じ概念のセットを 3 つの言語について説明してきたので、ちょっと聞き飽きたかもしれませんが、これらの基本的で不可欠な考え方をしっかり理解するのに役に立つことを願っています。</p><p>以降は、ここで取り上げない限りはすぐに学び始めない可能性のある、いくつか中間的なテーマで記事を締めくくります。</p><p>まずは、Git と呼ばれる欠かせないコラボレーションツールについて説明します。次に、データベース内へデータを保存し、アクセスする方法を学びます。その後で、ウェブ開発フレームワークについて少し触れてから、最後にパッケージマネージャーにスポットを当てます。</p><!--kg-card-begin: html--><h2 id="11-track-your-code-using-git">11) Git を使用してコードを追跡する</h2><!--kg-card-end: html--><p>Git は、現在使用されているものの中で、最も有名なバージョン管理システム (VCS) です。Git によって、多くの開発者が協働してソフトウェアを作れるようになります。このセクションでは、Git について、その仕組みと基本的なコマンドの使用方法について学びます。</p><p>Git の学習に入る前に、ほとんどのプログラミングプロジェクトに共通する概念について、いくつか具体的に見ていきましょう。</p><p>ソフトウェアプロジェクトを構成しているディレクトリとファイルのフルセットは、<strong>コードベース</strong>と呼ばれています。プロジェクトのディレクトリツリー内の、最上位のフォルダが<strong>プロジェクトルート</strong>です。ファイルは、プロジェクトルート内に直接含められたり、複数階層のフォルダに組織されたりします。</p><p>コードベースは、テストやデプロイの準備が整ったときに、コンピューター上で実行できるプログラムに<strong>ビルド</strong>されます。<strong>ビルドプロセス</strong>には、人間が書いたコードを、コンピューターのプロセッサによって実行できるファイルに変換する、1 つ以上のステップが含まれます。</p><p>コードは一度ビルドされると、Linux、macOS、Windows などの特定のオペレーティングシステムで、いつでも実行できるようになります。</p><p>長い時間をかけて、開発者はプロジェクトコードを更新して、新しい機能を追加したり、バグを修正したり、セキュリティ更新プログラムを実装したりします。開発者がソフトウェアプロジェクトを変更する方法は、一般的には以下の 3 つが挙げられます:</p><ol><li>新しいファイルとフォルダをプロジェクトに追加する</li><li>既存のファイルまたはフォルダ内のコードを編集する</li><li>既存のファイルまたはフォルダを削除する</li></ol><p>新しい機能が追加されプロジェクトが大きくなるにつれて、ファイルとフォルダの数 (およびその中にあるコードの量) は増えていきます。大規模なプロジェクトは、何百、何千というファイルに何百万行ものコードが含まれるような規模まで拡大することもあります。</p><p>この拡大を後押しするために、大規模なプロジェクトのチームはたいてい増員します。大きなソフトウェアのプロジェクトでは、何百人、あるいは何千人もの開発者が協力して働いています。</p><p>これは次の疑問を投げかけます:「そのような多くの<em>開発者が (世界中に散らばっている可能性さえあるのに) どのようにして 1 つのプロジェクトに協力して取り組めるように、ソフトウェアプロジェクトのコードを追跡しているのでしょうか？</em>」</p><p>コードの変更内容、影響を受けたファイルもしくはフォルダ、および各変更が誰によって行われたのかについて正確に追跡する方法が、開発チームには必要です。また各開発者は、他のすべての開発者による変更内容を取得できなければなりません。</p><p>このプロセスは、<strong>バージョニング</strong>または<strong>バージョン管理</strong>と呼ばれています。開発者は、<strong>バージョン管理システム (Version Control Systems - VCS)</strong> と呼ばれる特殊なツールを使用して、ソフトウェアプロジェクトのバージョンを追跡し、管理し、共有しています。現在活発に使用されており、人気のあるバージョン管理システムを、いくつか以下に示します:</p><ul><li>Git</li><li>Subversion (SVN)</li><li>Mercurial (Hg)</li></ul><p>ただ、今のところは Git が頼れる VCS として王座についています。Git は今や世界中の政府機関、企業、およびオープンソースコミュニティで使用されている、最も有名な VCS です。</p><p>Git は GitHub や Bitbucket のような、有名なウェブベースの VCS プラットフォームの中核を成しています。Git は、どの有能な開発者にとっても、習得しておくべき必要不可欠なツールなのです。</p><h3 id="-git-">基本的な Git コマンド</h3><p>Git は<strong>リポジトリ</strong>と呼ばれているものの中に、ソフトウェアプロジェクトに関する情報を作成、保存します。Git リポジトリとは、単なるコンピューター上の隠しフォルダであり、Git はそれを用いてソフトウェアプロジェクト内のファイルに関するデータを保存します。</p><p>私たちが扱うたいていのソフトウェアプロジェクトは、プロジェクトに関する情報を保存するための Git リポジトリをそれぞれ持っています。このようにして、1 台のコンピューター内のさまざまなプロジェクトに関するコードは、個別に追跡されます。</p><p>コンピューターに Git リポジトリを作成する方法は主に 2 つあります。1 つ目は、新しい Git リポジトリを、ファイルシステムの既存のフォルダ内に作成するという方法です。</p><p>これを行うには、単にコマンドラインを開いて、デスクトップのようなどこか便利な場所に新しいフォルダを 1 つ作成し、そのフォルダの中に移動します:</p><pre><code class="language-sh">cd ~/Desktop

mkdir testgit
 
cd testgit/
</code></pre><p>これで新しいフォルダを作成してその中に移動できたので、以下のコマンドを使用して、新しい Git リポジトリを作成して初期化できます。</p><pre><code class="language-sh">git init
</code></pre><p>コマンドを入力すると、次のような出力が表示されるはずです:</p><pre><code class="language-sh">Initialized empty Git repository in /Users/me/Desktop/testgit/.git/
</code></pre><p>実行できる Git コマンドはすべて <code>git</code> という単語から始まり、その後にスペースを 1 つ入れて、実行する特定のコマンドが続きます。Git コマンドの後にフラグや引数を追加することもあります。</p><p><code>git init</code> コマンドは、<code>.git</code> という名前の隠しフォルダを、カレントディレクトリ内に作成します。このフォルダが上述の Git リポジトリです。コマンド <code>ls -al</code> を実行すれば、このフォルダが確認できます。</p><p>コンピューターに Git リポジトリを追加する 2 つ目の方法は、Bitbucket もしくは GitHub のようなところから、リポジトリをダウンロードすることです。</p><p>Bitbucket と GitHub とは、コンピューターにダウンロード可能なオープンソースプロジェクトを、ユーザーがホストできるウェブサイトのことです。</p><p>Bitbucket もしくは GitHub で、面白そうなプロジェクトを見つけて目を通していると、Clone または Code というラベルの付いたボタンがあります。このボタンを押すと、コマンドラインターミナル内にコピー＆ペーストできるコマンドや、URL が表示されます。以下のような形式になっているでしょう:</p><pre><code class="language-sh">git clone https://jacobstopak@bitbucket.org/jacobstopak/baby-git.git
</code></pre><p><code>git clone</code> コマンドは、コンピューターの新しいフォルダの中に、指定した URL からリポジトリをダウンロードします。この URL は、上の例のようなウェブ URL でもいいですし、次のような SSH URL にもできます:</p><pre><code class="language-sh">git clone git@bitbucket.org:jacobstopak/baby-git.git
</code></pre><p>git clone コマンドを実行すると、新しく作成されたフォルダが確認できるはずです。ダウンロードしたプロジェクトを構成している、すべてのファイルとサブフォルダを、その中で見ることができます。</p><p>では次に、<code>git add &lt;filename.ext&gt;</code> コマンドについて説明します。<code>git add</code> コマンドは、Git にどのファイルを追跡するのかを伝えたり、既に追跡されているファイルの変更を、Git の <code>staging area</code> に追加するために使用されます。</p><p>新しいファイルまたは変更されたファイルをステージできたら、<code>git commit -m "Commit message"</code> を使用して、それらをリポジトリにコミットできます。これによって、Git リポジトリにステージされたすべてのファイル内の変更が保存されます。</p><p>ワーキングディレクトリの現在の状態と、プロジェクトのコミット履歴を見直すには、<code>git status</code> と <code>git log</code> コマンドを使用すると便利です。</p><p>ここでは Git のほんの一部だけしか説明していません。<a href="https://initialcommit.com/blog/Git-Cheat-Sheet-Beginner">Git にはさらに多くの基本的なコマンドが備わっており</a>、それらに慣れるのはとても有益なことです。</p><!--kg-card-begin: html--><h2 id="12-store-data-using-databases-and-sql">12) データベースと SQL を使用してデータを保存する</h2><!--kg-card-end: html--><p>データベースとは、膨大な量のデータの保存、更新、取得、削除を、効率よく行えるように、特別に設計されたプログラムのことです。簡単に言うと、データベースはテーブルの集まりのコンテナと考えることができます。</p><p>もしかしたら、あなたは Microsoft Excel のテーブルを使ったことがあるかもしれませんね。テーブルとは、データを含む列と行の集まりに過ぎません。データベース内にテーブルを設定することで、プログラムが適切に処理しなければならない情報を保存できます。</p><p>JavaScript、Python、Java、または他のどの言語でプログラムを書いているかに関わりなく、必要に応じてデータベースと情報をやり取りするように、プログラムに指示できます。</p><p>ウェブページ上でユーザーに表示するデータは、データベースから取得できます。また、ユーザーから送信されたウェブ会員登録フォームを受け付け、そのユーザーの情報を、後で使用するためにデータベース内に保存しておくことができます。</p><p>プログラムは、アプリケーション内でイベントが発生すると同時に、リアルタイムでデータベースと情報をやり取りできます。ほとんどのデータベースでは、そのやり取りに <strong>Structured Query Language (構造化問い合わせ言語)</strong> を略した <strong>SQL</strong> と呼ばれる言語が使用されています。</p><p>SQL はデータベース専用に作り出されたプログラミング言語です。これを用いて、データベースに指示を出すことができます。</p><p>SQL コードの 1 つのかたまりのことを、<strong>クエリ</strong>と呼びます。SQL クエリを記述することで、あるタイミングで必要になったデータを取得したり、特定のテーブルの中に新しいデータを挿入したりできます。おおまかに言うと、SQL クエリには、主に <strong>read-SQL</strong> と <strong>write-SQL</strong> の 2 つのタイプがあります。</p><p>read-SQL とは、データを確認または使用するために、シンプルにデータベースからデータを取得するものです。これは、データベース内のデータを全く変更しません。</p><p>一方で write-SQL クエリは、テーブル内への新しいデータの挿入や、既存のデータの更新または削除を行います。このセクションでは基本的な read-SQL の書き方をいくつか学んでみましょう。</p><p>クエリを書く前に、何をクエリ (問い合わせ) しているのかについて理解しておくと、それが役に立ちます！伝統的なデータベースは、列と行で構成された<strong>テーブル</strong>を含んでいます。read-SQL クエリを書く際の目標は、通常はこれらの行と列の一部を、検索し取得することになります。</p><p>たとえば、4 つの列と、<code>FIRST_NAME</code> および <code>LAST_NAME</code> の列でできている、<code>PERSON</code> という名前のテーブルがあるとしましょう。以下のクエリを使用すると、<code>FIRST_NAME</code> の列のデータだけをすべて選択できます:</p><pre><code class="language-sql">SELECT FIRST_NAME FROM PERSON;
</code></pre><p>SELECT キーワードは、データベースにデータの取得を指示します。このキーワードの後ろには、データを取得しようとしている列の名前 (この例では、FIRST_NAME) が続きます。</p><p>それから、FROM キーワードを使用して、データベースにどのテーブル (この場合は PERSON テーブル) からデータを取得するかを指示しています。また、すべての SQL コマンドは、セミコロンで終えるということにも注意しましょう。</p><p>データに関する最も一般的な要件の 1 つは、データを選別できることです。選別 (フィルタリング) とは、指定された条件に基づいて、SQL クエリの実行結果 (result set) を制限することです。</p><p>たとえば、<code>PERSON</code> テーブルから、「PHIL」という名前の人たちの行だけを選択したい場合があるかもしれません。その場合は、次のように SQL クエリ内で <code>WHERE</code> キーワードを使用すればフィルタリングできます:</p><pre><code class="language-sql">SELECT * FROM PERSON WHERE FIRST_NAME = 'PHIL';
</code></pre><p><code>SELECT</code> 句の中で、特定の列の名前をリストアップする代わりにアスタリスク <code>*</code> を使用しているので、このクエリは <code>PERSON</code> テーブル内のすべての列を返します。そこから、<code>PERSON</code> テーブル内の <code>FIRST_NAME</code> が「PHIL」に設定されている行のデータだけが取得されます。</p><p>最後に、ソートについて説明します。クエリの実行結果を特定の順序にソートして確認したい場合が多くあります。それを可能にしてくれるのが、以下に示す <code>ORDER BY</code> 句です:</p><pre><code class="language-sql">SELECT *
FROM PERSON
ORDER BY LAST_NAME;
</code></pre><p>このクエリは、LAST_NAME のアルファベット順に並べ替えられた、<code>PERSON</code> テーブル内のすべての列を返します。</p><p>デフォルトでは、実行結果は A から Z の昇順に並び替えられます。以下の例のように、オプションの ASC または DESC をクエリに追加して、昇順または降順のどちらの順番で並び替えるかを指定できます。</p><pre><code class="language-sql">SELECT *
FROM PERSON
ORDER BY LAST_NAME DESC;
</code></pre><!--kg-card-begin: html--><h2 id="13-read-about-web-frameworks-and-mvc">13) ウェブフレームワークと MVC (Model-View-Controller: モデル・ビュー・コントローラ) について読む</h2><!--kg-card-end: html--><p>私たちは、ごく普通のタイプのアプリケーション用のコードを書いているということに、たびたび気づきます。ウェブアプリケーション (または <strong>ウェブアプリ</strong>) とは、インターネットにその機能を依存しているアプリケーションのことです。作成されている最も一般的なタイプのソフトウェアアプリケーションの一部に、ウェブアプリが含まれます。</p><p>ウェブアプリとは、基本的にはウェブサイトをもっと機能的、かつロバスト (堅牢) にしたものです。ほとんどのウェブアプリには、ウェブサーバーに置かれ、アプリケーションの機能を水面下で支えるロジックを実行するバックエンドコードが実装されています。</p><p>ウェブアプリのバックエンドコードに使用される一般的な言語には、Python、Java、JavaScript などがあります。</p><p>ほとんどのウェブアプリに共通して含まれる機能を以下にいくつか挙げます:</p><ul><li>ウェブページのコンテンツを動的に変更できる便利な方法を提供すること</li><li>ログインページによって安全なユーザー認証を実行すること</li><li>アプリケーションの堅牢なセキュリティ機能を提供すること</li><li>データベースとやり取りしてデータの取得や保存を行うこと</li></ul><p>ウェブフレームワークは、多くのウェブアプリで使われる一般的な機能が、複雑な設定をすることなく使えるようになっているコードライブラリの集まりです。ウェブフレームワークは、多くのウェブアプリに共通する、水面下で行われる多くのタスクのためのコードを記述することについて悩まずに、アプリケーションを構築できるシステムを、開発者に提供します。</p><p>ウェブアプリの要件を満たせる、フレームワークのパーツを利用するだけで十分なのです。</p><p>たとえば、あるウェブアプリにおいて、データベースに接続する必要がない場合には、単にデータベース機能を省略して、必要な他の機能だけを利用すればいいのです。</p><p>その上で、アプリケーション、ユーザーフロー、およびビジネスロジックを形成するウェブページを自由にカスタマイズできます。ウェブフレームワークは、ウェブアプリを構築するために使用できる、プログラミングツール一式として考えることができます。</p><p>この記事のなかで取り上げた各プログラミング言語には、現在も利用されている、有名なウェブフレームワークが 1 つ、またはいくつか用意されています。これは素晴らしいことで、開発チームに、彼らが最も精通している言語のフレームワークを使用できるという、柔軟性を与えてくれます。</p><p>Java には、<strong>Spring Boot</strong> によって特に使いやすいものになった、<strong>Spring Framework</strong> があります。Python には <strong>Django</strong> というフレームワークがあります。JavaScript には <strong>Node.js</strong> ランタイム環境と、<strong>Express.js</strong> や <strong>Meteor.js</strong> を含む複数のフレームワークの選択肢があります。これらのフレームワークは、すべて無料でオープンソースです。</p><!--kg-card-begin: html--><h2 id="14-play-with-package-managers">14) パッケージマネージャーに触れる</h2><!--kg-card-end: html--><p>このガイドブックの最後に説明するテーマは<strong>パッケージマネージャー</strong>です。環境にもよりますが、<strong>パッケージ</strong>とは、コンピューターにすぐにインストールできる単体プログラム、またはソフトウェアプロジェクトの一部で活用しようとしている、外部ライブラリのいずれかを表します。</p><p>アプリケーションは外部ライブラリに依存していることも多く、これらは<strong>依存関係</strong>と呼ばれています。</p><p>パッケージマネージャーとは、システムやソフトウェアプロジェクトの依存関係を、管理しやすくしてくれるプログラムです。ここでの「管理」は、必要に応じて依存関係のインストール、更新、一覧の作成、およびアンインストールを行うことを意味しています。</p><p>状況によりますが、これから説明するパッケージマネージャーは、オペレーティングシステム上にインストールされたプログラムの管理、またはソフトウェアプロジェクトの依存関係の管理を行うために使用できます。</p><h3 id="macos-homebrew">macOS: Homebrew</h3><p><strong>Homebrew</strong> は、macOS オペレーティングシステム向けの、最も有名なパッケージマネージャーです。これは、Mac でパッケージとアプリケーションのインストール、更新、追跡、一覧の表示、およびアンインストールを行う、便利な方法を提供してくれます。</p><p>ダウンロードした .dmg ファイルによってインストールできる、多くのアプリケーションは、Homebrew を使って、同じようにダウンロードしインストールできます。</p><p>Homebrew で <code>wget</code> パッケージをインストールする例はこちらです:</p><pre><code class="language-sh">brew install wget
</code></pre><h3 id="linux-apt-yum">Linux: Apt と Yum</h3><p>Linux はコマンドラインを中心に作られているので、パッケージマネージャーが、プログラムをインストールするデフォルトの方法になっているのは当然のことです。</p><p>Linux の主流のフレーバーのほとんどは、組み込みのパッケージマネージャーと一緒に提供されています。<strong>Advanced Package Tool (APT)</strong> は、Debian と Ubuntu ベースの Linux ディストリビューション用の、ネイティブパッケージマネージャーです。<strong>Yellowdog Updater Modified (YUM)</strong> は、RedHat Linux ディストリビューション用のネイティブパッケージマネージャーです。</p><p>APT を使用して Vim をインストールする例はこちらです:</p><pre><code class="language-sh">sudo apt-get install vim
</code></pre><p>Yum を使用すると次のようになります:</p><pre><code class="language-sh">sudo yum install vim
</code></pre><h3 id="javascript-node-package-manager-npm-">JavaScript: Node Package Manager (NPM)</h3><p>ここまでは OS レベルのパッケージマネージャーの使い方について見てきたので、今度は、プログラミング言語に特化したパッケージマネージャーをいくつか見ていきましょう。これらは、コーディングプロジェクトの多くが依存しているソフトウェアライブラリを、管理しやすくしてくれます。なお、<strong>Node Package Manager (NPM)</strong> は、Node.js にデフォルトでインストールされています。</p><p>NPM とこれまで説明してきたパッケージマネージャーの違いのひとつは、NPM が<strong>ローカル</strong>もしくは<strong>グローバル</strong>モードで実行できることです。ローカルモードでは、作業中の特定のプロジェクト／ディレクトリの中だけにパッケージがインストールされ、一方でグローバルモードではシステム上にパッケージがインストールされます。</p><p>デフォルトでは、パッケージはローカルモードでインストールされますが、以下のように <code>-g</code> フラグを使用することで、パッケージをグローバルモードでインストールできます:</p><pre><code class="language-sh">npm install request -g
</code></pre><h3 id="python-pip">Python: Pip</h3><p>Python にも <strong>Pip</strong> と呼ばれるパッケージマネージャーがあります。最近のバージョンの Python には、Pip があらかじめ内包されているので、すでにあなたのシステムにインストールされているかもしれません。Pip のおかげで、次のように <code>pip install &lt;package-name&gt;</code> コマンドを使用して、<strong>Python Package Index</strong> から、パッケージを簡単にインストールすることができるようになります:</p><pre><code class="language-sh">pip install requests
</code></pre><h3 id="java-apache-maven">Java: Apache Maven</h3><p><strong>Apache Maven</strong> (通常は単に <strong>Maven</strong> と呼ばれています) とは、依存関係の管理機能を含む無料のオープンソースツール一式です。</p><p>Maven は主に Java プロジェクトに使用されていますが、他の言語もサポートしています。Maven の使用方法はちょっと複雑で、できることが多いので、ここでは詳細に立ち入ることはしません。</p><h2 id="--2">要約</h2><p>この記事では、私がコードを学び始めた時に知っていたらよかったと思うソフトウェア開発の概要を説明するために、一連の重要なコーディングの概念とツールを紹介しました。</p><p>インターネット、いくつかのプログラミング言語、バージョン管理システム、およびデータベースなどのテーマを取り上げ、これらが互いにどう関係し、組み合わさっているか説明することを目指しました。</p><h2 id="--3">次なるステップ</h2><p>この記事を楽しんでいただけたならば、私が書いた <a href="https://initialcommit.com/store/coding-essentials-guidebook-for-developers">Coding Essentials Guidebook for Developers</a> という名前の本を紹介させてください。この本には 14 の章があり、この記事の中で取り上げたテーマを 1 つずつ、各章で説明しています。</p><p>本の中で、これら 14 のテーマについてさらに掘り下げているので、この記事からきちんと知識が得られたかどうか確認する、良い資料となってくれるかもしれません。</p><p>この記事を読んでいただいた後、特定の言語、ツール、または概念に惹かれることがあるかもしれません。その時は、その領域にさらに深く入り込むことをお奨めします。</p><p>この本に関する質問やご意見ご要望がございましたら、<a>jacob@initialcommit.io</a> までご連絡いただければ幸いです。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python Discord ボットのチュートリアル – Discord ボットをコーディングして無料でホストする ]]>
                </title>
                <description>
                    <![CDATA[ このチュートリアルでは、クラウド環境だけを利用して独自の Discord ボットを構築する方法をお伝えします。 ご自身のコンピューターに何かをインストールする必要も、ボットをホストするために料金を支払う必要もありません。 Discord API、Python のライブラリ、および Repl.it [https://www.repl.it/]  と呼ばれるクラウドコンピューティングプラットフォームなど、いくつかのツールを使用します。 このチュートリアルには動画バージョンもあります。下の埋め込み動画をご覧ください。テキストバージョンは動画の下に続きます。 Discord ボットのアカウントを作成する方法 Python のライブラリと Discord API を扱うには、まず Discord ボットのアカウントを作成しなければなりません。 Discord ボットのアカウントを作成する手順は次のとおりです。 1. Discord のウェブサイト [https://discord.com/] にログインしているか確認します。 2. application ページ [https:// ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/create-a-discord-bot-with-python/</link>
                <guid isPermaLink="false">62a8020fb9b61f06d43156c4</guid>
                
                    <category>
                        <![CDATA[ DISCORD ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Tue, 13 Sep 2022 12:24:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/06/discordbot.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/create-a-discord-bot-with-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Discord Bot Tutorial – Code a Discord Bot And Host it for Free</a>
      </p><p>このチュートリアルでは、クラウド環境だけを利用して独自の Discord ボットを構築する方法をお伝えします。</p><p>ご自身のコンピューターに何かをインストールする必要も、ボットをホストするために料金を支払う必要もありません。</p><p>Discord API、Python のライブラリ、および <a href="https://www.repl.it/">Repl.it</a> と呼ばれるクラウドコンピューティングプラットフォームなど、いくつかのツールを使用します。</p><p>このチュートリアルには動画バージョンもあります。下の埋め込み動画をご覧ください。テキストバージョンは動画の下に続きます。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 75%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="150" src="https://www.youtube.com/embed/SPTfmiYiuok?start=32&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="discord-">Discord ボットのアカウントを作成する方法</h2><p>Python のライブラリと Discord API を扱うには、まず Discord ボットのアカウントを作成しなければなりません。</p><p>Discord ボットのアカウントを作成する手順は次のとおりです。</p><p>1. <a href="https://discord.com/">Discord のウェブサイト</a> にログインしているか確認します。</p><p>2. <a href="https://discord.com/developers/applications">application ページ</a> に移動してください。</p><p>3.「New Application」ボタンをクリックします。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/click_new_application_button.png" class="kg-image" alt="click_new_application_button" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/click_new_application_button.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/click_new_application_button.png 702w" width="702" height="494" loading="lazy"></figure><p>4. アプリケーションの名前を入力し、「Create」をクリックします。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/give_apprication_name.png" class="kg-image" alt="give_apprication_name" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/give_apprication_name.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/give_apprication_name.png 912w" sizes="(min-width: 720px) 720px" width="912" height="780" loading="lazy"></figure><p>5.「Bot」タブに移動してから、「Add Bot」をクリックしてください。その後で「Yes, do it!」をクリックして確定する必要があります。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/add_bot_button.png" class="kg-image" alt="add_bot_button" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/add_bot_button.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/add_bot_button.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="265" loading="lazy"></figure><p><strong>PUBLIC BOT</strong> (チェック済み) と <strong>REQUIRES OAUTH2 CODE GRANT</strong> (チェックなし) は、デフォルトの設定のままにしておいてください。</p><p>これでボットが作成されました。次のステップは、トークンをコピーすることです。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/copy_token.png" class="kg-image" alt="copy_token" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/copy_token.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/copy_token.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="418" loading="lazy"></figure><p>このトークンはボットのパスワードなので、誰にも共有しないようにしてください。誰かがボットにログインして、さまざまな悪さを働いてしまいかねませんので。</p><p>もし誤って共有してしまったとしても、トークンは作り直せます。</p><h2 id="-">ボットをサーバーに招待する方法</h2><p>ここで、ボットユーザーをサーバーに追加しなければなりません。そのためには、ボット用の招待 URL を作成する必要があります。</p><p>では「OAuth2」タブに移動してください。次に、「SCOPES」セクション下の 「bot」を選択します。</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/select_bot_in_scopes.png" class="kg-image" alt="select_bot_in_scopes" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/select_bot_in_scopes.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/08/select_bot_in_scopes.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/select_bot_in_scopes.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="448" loading="lazy"></figure><p>ここでは必要なボット用のパーミッションを選びます。ボットはもっぱらテキストメッセージを使用するので、多くのパーミッションは必要ありません。ボットに何をさせたいかによって、さらにパーミッションが必要になるかもしれません。「Administrator」パーミッションには注意してください。</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/permission.png" class="kg-image" alt="permission" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/permission.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/08/permission.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/permission.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="1093" loading="lazy"></figure><p>適切なパーミッションを選んだら、その上にある「Copy」ボタンをクリックしてください。これで、ボットをサーバーに追加するのに使用する URL をコピーできます。</p><p>URL をブラウザーに貼り付け、ボットを招待するサーバーを選んで、「Authorize」をクリックしてください。</p><p>ボットを追加するには、あなたのアカウントに「Manage Server」パーミッションが必要です。</p><p>これでボットユーザーが作成されたので、ボット用の Python コードを記述し始めましょう。</p><h2 id="-discord-discord-py-">基本的な Discord ボットを discord.py ライブラリを用いてコーディングする方法</h2><p>ボット用のコードは、discord.py という Python ライブラリを使用して記述します。discord.py とは、Discord 用の API ラッパーであり、Python の中で Discord ボットを作成しやすくしてくれます。</p><h3 id="repl-read-eval-print-loop-discord-py-">repl (Read-Eval-Print Loop - 対話型実行環境) を作成し discord.py をインストールする方法</h3><p>ボットは、ローカルコンピューター上で、任意のコードエディターを使用して開発できます。ですが、このチュートリアルでは、Repl.it を使用して、誰もがもっと簡単に理解できるようにしています。Repl.it とは、ウェブブラウザー内で使用できるオンライン IDE です。</p><p><a href="https://repl.it/">Repl.it</a> に移動することから始めましょう。次に、新しい repl を作成し、言語は「Python」を選びます。</p><p>discord.py ライブラリを使用するには、<code>main.py</code> の先頭に <code>import discord</code> を記述します。「RUN」ボタンを押すと、Repl.it は自動的にこの依存関係をインストールしてくれます。</p><p>ローカルでボットをコーディングしたい場合は、次のコマンドを使用して MacOS に discord.py をインストールできます:</p><p><code>python3 -m pip install -U discord.py</code></p><p><code>pip</code> の代わりに、<code>pip3</code> を使用しなければならないかもしれません。</p><p>Windows を使用している場合は、先ほどのコマンドではなく、次の行を使用する必要があります:</p><p><code>py -3 -m pip install -U discord.py</code></p><h3 id="-discord-events-">ボット用の Discord Events をセットアップする方法</h3><p>discord.py の中心にあるのはイベントの概念です。イベントとは、なにかを検出してから応答するものです。たとえば、メッセージが起こると、そのメッセージに関するイベントを受けて応答できます。</p><p>特定のメッセージに応答するボットを作ってみましょう。このシンプルなボットのコードとその説明は、<a href="https://discordpy.readthedocs.io/en/latest/quickstart.html#a-minimal-bot">discord.py の公式ドキュメント</a>から抜粋しています。後のセクションで、さらにボットへ機能を追加していきます。</p><p>次のコードを main.py に追加してください (discord.py でなければ、このファイルにお好きな名前をつけてもらってかまいません)。このコード全体で行われていることについては、コードの後で手短に説明します。</p><pre><code class="language-python">import discord
import os

client = discord.Client()

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello!')

client.run(os.getenv('TOKEN'))
</code></pre><p>Discord 上でボットユーザーを作成した時に、トークンをコピーしましたね。ではここで、<code>.env</code> ファイルを作成し、トークンを保存しましょう。コードをローカルで動作させている場合は、<code>.env</code> ファイルは必要ありません。<code>os.getenv('TOKEN')</code> をトークンに置き換えるだけです。</p><p><code>.env</code> ファイルは、環境変数を宣言するのに使用します。Repl.it では、作成したファイルのほとんどは誰でも見ることができますが、<code>.env</code> ファイルはあなただけにしか見えません。公開されている repl を見ている他の人々には、<code>.env</code> ファイルの内容は見ることができないのです。</p><p>したがって、Repl.it 上で開発している場合は、トークンやキーなどの個人情報だけを <code>.env</code> ファイル内に入れるようにしましょう。</p><p>「Add file」ボタンをクリックして <code>.env</code> という名前のファイルを作成してください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/click_add_file_button.png" class="kg-image" alt="click_add_file_button" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/click_add_file_button.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/click_add_file_button.png 934w" sizes="(min-width: 720px) 720px" width="934" height="284" loading="lazy"></figure><p>作成したファイル内に、前にコピーした実際のトークンを含む、以下の行を追加してください:</p><pre><code>TOKEN=[トークンをこちらに貼り付けてください]
</code></pre><p>ここで、 Discord ボットのコードの、各行で行われていることを調べてみましょう。</p><ol><li>最初の行で discord.py ライブラリをインポートしています。</li><li>2 行目で os ライブラリをインポートしていますが、これは <code>TOKEN</code> 変数を <code>.env</code> ファイルから取得するためだけに使用されています。<code>.env</code> ファイルを使用しない場合は、この行は必要ありません。</li><li>次に、<code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client">Client</a></code> のインスタンスを作成しています。これで Discord に接続します。</li><li><code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.event">@client.event()</a></code> デコレータはイベントを登録します。これは非同期ライブラリなので、コールバックを使用して処理を行います。コールバックとは、何らかの処理が実行された時に呼び出される関数のことです。このコード内では、ボットを使用する準備ができた時に、<code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.on_ready">on_ready()</a></code> イベントが呼び出されます。その後で、ボットがメッセージを受け取る時に、<code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.on_message">on_message()</a></code> イベントが呼び出されます。</li><li><code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.on_message">on_message()</a></code> イベントはメッセージを受け取るたびに発生しますが、 メッセージがボットからのものである場合には、イベントで何も処理しないようにする必要があります。そのため、<code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.author">Message.author</a></code> が <code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client.user">Client.user</a></code> と同じ場合は、コードは単にリターンします。</li><li>次に、<code><a href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Message.content">Message.content</a></code> (メッセージの内容) が <code>'$hello'</code> で始まるかどうかをチェックします。もしそれで始まっていれば、ボットは使用されているチャンネルに <code>'Hello!'</code> と返信します。</li><li>これでボットが設定できたので、最後の行でログイントークンを使用してボットを実行します。この行は、外部の <code>.env</code> ファイルからトークンを取得しています。</li></ol><p>ボット用のコードが用意できたので、ここで動作させてみる必要があります。</p><h3 id="--1">ボットを動作させる方法</h3><p>では、Repl.it 内の上側にある RUN ボタンをクリックして、ボットを実行してください。</p><p>ボットをローカルで記述している場合は、ターミナル内で以下のコマンドを使用すれば、ボットを実行できます:</p><p>Windows:</p><p><code>py -3 main.py</code></p><p>その他のシステム:</p><p><code>python3 main.py</code></p><p>次に、Discord のルームに移動し、「$hello」と入力してください。ボットが「Hello!」と返事をするはずです。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/bot_returns_hello.png" class="kg-image" alt="bot_returns_hello" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/bot_returns_hello.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/bot_returns_hello.png 620w" width="620" height="248" loading="lazy"></figure><h2 id="--2">ボットを改良する方法</h2><p>これで、基本的なボットを動作させることができたので、それを改良してみましょう。このボットは、次の理由から「励ましボット (Encourage Bot)」と呼ばれます。</p><p>このボットは、誰かが悲しい、または重苦しい言葉を含むメッセージを送った時に、必ず励ましのメッセージで答えてくれます。</p><p>使用する励ましのメッセージを誰もがボットに追加でき、またユーザーが提案したメッセージは、Repl.it データベース内に保存されます。</p><p>さらに、誰かが「$inspire」とチャット内で入力すると、ボットは、API でランダムに取得された心を動かす引用句を返信してくれます。</p><p>では、その「$inspire」機能の追加から始めましょう。</p><h3 id="--3">ボットに心を動かす引用句を追加する方法</h3><p>zenquotes.io という API から、心を動かす引用句を取得します。Python モジュールをさらにいくつかインポートし、<code>get_quote()</code> 関数を追加し、その関数を呼び出すようにボットのコードを更新する必要があります。</p><p>こちらが更新されたコードです。新たな部分についてはコードの後で説明します。</p><pre><code class="language-python">import discord
import os
import requests
import json

client = discord.Client()

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]['q'] + " -" + json_data[0]['a']
  return(quote)

@client.event
async def on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)

client.run(os.getenv('TOKEN'))
</code></pre><p>ここでは、<code>requests</code> モジュールをインポートしなければなりません。このモジュールを使用すれば、コードで HTTP リクエストを作成して、API からデータを取得できるようになります。API は JSON を返すので、 <code>json</code> モジュールを使用することで、返ってきたデータが簡単に扱えるようになります。</p><p><code>get_quote()</code> 関数は、その名のとおり引用句を取得する関数です。まず、この関数は requests モジュールを使用して API の URL からデータを要求しています。この API は、心を動かす引用句をランダムに 1 つ返します。この関数は、今回のものが機能しなくなった場合でも、別の API から引用句を取得するように、簡単に書き直せます。</p><p>次に、API からのレスポンスを JSON に変換するのに、<code>json.loads()</code> をこの関数内で使用します。試行錯誤の末に、私は JSON の引用句を必要な文字列形式に変える方法を発見しました。この関数は、引用句 (quote) を文字列として返してくれます。</p><p>コード内で最後に更新された部分は、コードの終わりの方にあります。これまで、この部分は「$hello」で始まるメッセージを待ち受けていました。ですが、ここでは「$inspire」を待ち受けています。そして「Hello!」を返す代わりに、<code>quote = get_quote()</code> で取得した引用句を返します。</p><p>ここまでくればコードを実行して試してみることができます。</p><h2 id="--4">励ましのメッセージをボットに追加する方法</h2><p>では、悲しい言葉を含むメッセージをユーザーが投稿した際に、ボットが励ましのメッセージで応答する機能を実装しましょう。</p><h3 id="--5">ボットに悲しい言葉を追加する方法</h3><p>まずは、ボットが反応する悲しい言葉を含む、Python のリストを作成する必要があります。</p><p>作成した <code>client</code> 変数の後に次の行を追加してください:</p><p><code>sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]</code></p><p>別の言葉を自由にリストに追加してみてください。</p><h3 id="--6">ボットに励ましのメッセージを追加する方法</h3><p>次に、応答するときにボットが使用する、励ましのメッセージのリストを追加しましょう。</p><p>以下のリストを、作成した <code>sad_words</code> リストの後に追加してください:</p><pre><code class="language-python">starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]
</code></pre><p>先ほどと同じように、自身で選択した語句を自由にリストに追加してみてください。ここでは、語句を 3 つしか使用していませんが、それは、ボットが使用する励ましの言葉をユーザーがさらに追加する機能を、後で追加するからです。</p><h3 id="--7">メッセージに応答する方法</h3><p>ここで、作成した 2 つのリストを使用するために、ボットを更新する必要があります。まず、励ましのメッセージを、ボットがランダムに選べるようにするために、random モジュールをインポートします。コードの先頭のインポート文に次の行を追加してください: <code>import random</code>。</p><p>次に、すべてのメッセージをチェックして、それらが <code>sad_words</code> リストの言葉を含んでいるかどうか確認するために、<code>on_message()</code> 関数を更新します。これで、悲しい言葉を見つけると、ボットはランダムに励ましのメッセージを送ってくれます。</p><p>更新されたコードはこちらです:</p><pre><code class="language-python">async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)
    
  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(starter_encouragements))
</code></pre><p>ボットをテストする良い頃合いです。これで、独自のボットを作成するための十分な知識が得られました。ですが、さらに高度な機能を実装する方法と、Repl.it データベースを使用してデータを保存する方法を、これから学習しましょう。</p><h3 id="--8">ユーザーが投稿したメッセージを有効にする方法</h3><p>ボットは完全に機能していますが、ここで、Discord から直接ボットを更新できるようにしてみましょう。悲しい言葉を見つけた時にボットが使用できる励ましのメッセージを、ユーザーがさらに追加できるほうがいいですよね。</p><p>ユーザーが投稿したメッセージを保存するのに、ここでは Repl.it の組み込みデータベースを使用します。このデータベースは、すべての repl に組み込まれているキーバリューストアです。</p><p>コードの先頭にある他のインポート文の下に、<code>from replit import db</code> を追加してください。これで、Repl.it データベースが使用できるようになります。</p><p>では、ユーザーが、使用する個別の励ましのメッセージを、Discord チャットからボットに直接追加できるようにしましょう。ボットに新しいコマンドを追加する前に、個別のメッセージをデータベースに追加し、またそれらを削除する、2 つの補助的な関数を作成します。</p><p>以下のコードを <code>get_quote()</code> 関数の後に追加してください:</p><pre><code class="language-python">def update_encouragements(encouraging_message):
  if "encouragements" in db.keys():
    encouragements = db["encouragements"]
    encouragements.append(encouraging_message)
    db["encouragements"] = encouragements
  else:
    db["encouragements"] = [encouraging_message]

def delete_encouragment(index):
  encouragements = db["encouragements"]
  if len(encouragements) &gt; index:
    del encouragements[index]
  db["encouragements"] = encouragements
</code></pre><p><code>update_encouragements()</code> 関数は、励ましのメッセージを 1 つ、引数として受け取ります。</p><p>最初に、この関数は「encouragements」というキーがデータベース内にあるかチェックします。そのキーがある場合は、データベース内の既存の励ましのリストを取得し、そのリストに新しい励ましのメッセージを加え、更新されたリストをデータベース内の「encouragements」キーに保存します。</p><p>データベースに「encouragements」が含まれていない場合は、その名前のキーが新たに作成され、新しい励ましのメッセージが、キーに保存するリストの中の最初の要素として追加されます。</p><p><code>delete_encouragement()</code> 関数は、インデックスを 1 つ、引数として受け取ります。</p><p>この関数は、「encouragements」キーに保存されている、励ましのリストをデータベースから取得します。励ましのリスト内の項目数がインデックスよりも大きければ、そのインデックスの項目が削除されます。</p><p>最後に、更新されたリストをデータベース内の「encouragements」キーに保存します。</p><p><code>on_message()</code> 関数で更新されたコードはこちらです。新たな部分については、コードの後で説明します。</p><pre><code class="language-python">async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content
 
  if msg.startswith("$inspire"):
    quote = get_quote()
    await message.channel.send(quote)

  options = starter_encouragements
  if "encouragements" in db.keys():
    options = options + db["encouragements"]

  if any(word in msg for word in sad_words):
    await message.channel.send(random.choice(options))

  if msg.startswith("$new"):
    encouraging_message = msg.split("$new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added.")

  if msg.startswith("$del"):
    encouragements = []
    if "encouragements" in db.keys():
      index = int(msg.split("$del",1)[1])
      delete_encouragment(index)
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)
</code></pre><p>上記のコードの最初の新しい行は、<code>options = starter_encouragements</code> です。ここで <code>starter_encouragements</code> のコピーを作成していますが、これはボットが送信するメッセージをランダムに選ぶ前に、ユーザーが投稿したメッセージを、コピーしたリストに追加しようとしているためです。</p><p>データベースのキーの中に、「encouragements」が含まれている (これは、ユーザーが個別のメッセージを、少なくとも 1 つ投稿したことを意味します) かどうかチェックします。含まれている場合は、starter encouragements にユーザーメッセージを追加します。</p><p>その後、<code>starter_encouragements</code> からランダムにメッセージを送る代わりに、ボットは <code>options</code> からランダムにメッセージを送ります。</p><p>次の新しいセクションのコードは、新しいユーザー投稿メッセージをデータベースに追加するのに使用されます。Discord メッセージが「$new」で始まっている場合は、「$new」の後ろのテキストが、新しい励ましのメッセージとして使用されます。</p><p>ここで、コード <code>msg.split("$new ",1)[1]</code> は「$new」コマンドをユーザー投稿メッセージから分離し、変数内にそのメッセージを格納しています。この行のコードの <code>"$new "</code> に含まれるスペースに注意してください。スペースの<strong>後</strong>にある文字列を取得したいからです。</p><p>新しいメッセージと一緒に <code>update_encouragements</code> という補助的な関数を呼び出すと、ボットは、Discord チャットへ新しいメッセージが追加されたことを確認するメッセージを送信します。</p><p>3 つ目の新しいセクション (上記のコードの最後部) は、新しい Discord メッセージが「$del」で始まっているかどうかチェックしています。<br>これは、データベース内の「encouragements」リストの項目を、1 つ削除するコマンドです。</p><p>まず、<code>encouragements</code> という名前の新しい変数を、空の配列で初期化しています。これを行っている理由は、「encouragement」キーがデータベースに含まれていない場合に、このセクションのコードに空の配列を送信させるためです。</p><p>もし「encouragement」キーがデータベース内にあれば、「$del」で始まる Discord メッセージから、インデックスが分離されます。それから、削除するメッセージのインデックスが渡された <code>delete_encouragement()</code> 関数を呼び出しています。更新された励ましのリストは <code>encouragements</code> 変数に格納され、ボットは現在のリストを含むメッセージを Discord へ送ります。</p><h2 id="--9">ボットに最後に追加する機能について</h2><p>ボットは動作してくれるはずなので、テストするには良い頃合いでしょう。ではここで、最後にいくつか機能を追加します。</p><p>ユーザー投稿メッセージのリストを Discord から直接取得する機能と、ボットが悲しい言葉に応答する動作をオンまたはオフする機能を、追加してみましょう。</p><p>まずプログラムの最終的なコード全体を示し、更新された部分については、コードの下で説明します。</p><pre><code class="language-python">import discord
import os
import requests
import json
import random
from replit import db

client = discord.Client()

sad_words = ["sad", "depressed", "unhappy", "angry", "miserable"]

starter_encouragements = [
  "Cheer up!",
  "Hang in there.",
  "You are a great person / bot!"
]

if "responding" not in db.keys():
  db["responding"] = True

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data[0]["q"] + " -" + json_data[0]["a"]
  return(quote)

def update_encouragements(encouraging_message):
  if "encouragements" in db.keys():
    encouragements = db["encouragements"]
    encouragements.append(encouraging_message)
    db["encouragements"] = encouragements
  else:
    db["encouragements"] = [encouraging_message]

def delete_encouragment(index):
  encouragements = db["encouragements"]
  if len(encouragements) &gt; index:
    del encouragements[index]
  db["encouragements"] = encouragements

@client.event
async def on_ready():
  print("We have logged in as {0.user}".format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  msg = message.content

  if msg.startswith("$inspire"):
    quote = get_quote()
    await message.channel.send(quote)

  if db["responding"]:
    options = starter_encouragements
    if "encouragements" in db.keys():
      options = options + db["encouragements"]

    if any(word in msg for word in sad_words):
      await message.channel.send(random.choice(options))

  if msg.startswith("$new"):
    encouraging_message = msg.split("$new ",1)[1]
    update_encouragements(encouraging_message)
    await message.channel.send("New encouraging message added.")

  if msg.startswith("$del"):
    encouragements = []
    if "encouragements" in db.keys():
      index = int(msg.split("$del",1)[1])
      delete_encouragment(index)
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)

  if msg.startswith("$list"):
    encouragements = []
    if "encouragements" in db.keys():
      encouragements = db["encouragements"]
    await message.channel.send(encouragements)
    
  if msg.startswith("$responding"):
    value = msg.split("$responding ",1)[1]

    if value.lower() == "true":
      db["responding"] = True
      await message.channel.send("Responding is on.")
    else:
      db["responding"] = False
      await message.channel.send("Responding is off.")

client.run(os.getenv("TOKEN"))
</code></pre><p>追加された最初のセクションは、<code>starter_encouragements</code> リストのすぐ下のコードです:</p><pre><code class="language-python">if "responding" not in db.keys():
  db["responding"] = True
</code></pre><p>データベース内に「responding」という名前のキーを新たに作成し、それを「True」に設定しています。ボットが悲しい言葉に応答すべきかどうかを決定するのに、これが使用されます。プログラムの動作が停止した後でも、データベースは保存されているので、データベースの中にないキーは新しく作るだけで済みます。</p><p>コードの次の新しい部分は <code>if db["responding"]:</code> で、悲しい言葉に応答するセクションを含んでいます。ボットは <code>db["responding"] = True</code> の時だけ、悲しい言葉に応答します。この値を更新する機能は、このセクションの後ろに記述されています。</p><p>次に、「$del」コマンドにボットを応答させるコードの後に、Discord メッセージとして送信される「$list」コマンドにボットを応答させる新しいコードがあります。</p><p>このセクションは、<code>encouragements</code> という名前で空リストを作成することから始まります。そしてもし、データベース内に「encouragements」キーが含まれていれば、たった今作成した空リストを、そのキーの値に置き換えます。</p><p>このセクションの最後で、ボットは励ましのリストを Discord メッセージとして送信しています。</p><p>次が最後の新しいセクションです。このコードはボットを「$responding」コマンドに応答させます。このコマンドは「true」または「false」のどちらか 1 つの引数を取ります。たとえば、「$responding true」という形で使用します。</p><p>このコードはまず、引数を <code>value = msg.split("$responding ",1)[1]</code> で取り出しています (上記の「$new」の場合と同じように、<code>"$responding "</code> の中のスペースに注意してください)。その下には、データベース内の「responding」キーを適切に設定し、Discord へ通知メッセージを送り返す if/else 文があります。引数が「true」以外の場合は、コードは「false」であると見なします。</p><h2 id="--10">ボットが継続的に動作するように設定する方法</h2><p>ボットを Repl.it 内で実行してから、実行中のタブを閉じると、ボットはやがて停止してしまいます。</p><p>ところが、たとえウェブブラウザーを閉じた後でも、ボットが継続的に動作し続けられるようにする方法が 2 つあります。</p><p>最もシンプルな 1 つ目の方法は、Repl.it の有料プランで契約することです。 Hacker プランと呼ばれる安価な有料プランがあり、常時オンにできる repl を 5 つ利用可能です。</p><p>このプランにサインアップしたら、repl を開き上部にある名前をクリックします。次に、「always on」オプションを選択します。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/09/always-on-repl.png" class="kg-image" alt="always-on-repl" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/09/always-on-repl.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/09/always-on-repl.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="374" loading="lazy"></figure><p>もう少し複雑ですが、無料利用枠で、コードが動作し続けるようにする別の方法があります。Repl.it は、タブを閉じた後もウェブサーバーを動作させ続けてくれます。ただ、そのウェブサーバーさえも、使用しなければ 1 時間までしか動作しません。</p><p>Repl.it の公式ドキュメントには次のように記載されています:</p><blockquote>Once deployed, the server will continue to run in the background, even after you close the browser tab. The server will stay awake and active until an hour after its last request, after which it will enter a sleeping stage. Sleeping repls will be woken up as soon as it receives another request; there is no need to re-run the repl. However, if you make changes to your server, you will need to restart the repl in order to see those changes reflected in the live version. (<a href="https://docs.replit.com/hosting/deploying-http-servers">引用元</a>)</blockquote><p>(訳: サーバーは一度デプロイされると、ブラウザータブを閉じた後でも、バックグラウンド内で動作し続けます。このサーバーは、最後のリクエストから 1 時間後まで起動したままアクティブな状態を維持し、その後で休止状態に入ります。休止中の repl は、別のリクエストを受けるとすぐに起動されるので、repl を再実行する必要はありません。ただし、サーバーに変更を加えた場合は、ライブバージョンに変更が反映されていることを確認するために、repl を再起動する必要があります)</p><p>ボットを継続的に動作させ続けるには、Uptime Robot (<a href="https://uptimerobot.com/">https://uptimerobot.com/</a>) と呼ばれる別の無料サービスを使用します。</p><p>Uptime Robot では、Repl.it 上のボットのウェブサーバーへの接続を、5 分ごとに確認する ping を設定できます。一定間隔で接続を確認することにより、ボットは休止状態に入ることが無くなり、動作し続けてくれます。</p><p>つまり、ボットを継続的に動作させるには、さらに以下の 2 つのことを行わなければなりません:</p><ol><li>Repl.it 内でウェブサーバーを作成する</li><li>Uptime Robot でウェブサーバーへの接続を確認する ping を設定する。</li></ol><h3 id="repl-it-">Repl.it 内でウェブサーバーを作成する方法</h3><p>ウェブサーバーの作成は思っているよりも簡単なことです。</p><p>その作成にあたり、<code>keep_alive.py</code> という名前の新しいファイルを、プロジェクト内で作成してください。</p><p>次に、新しいファイルに以下のコードを追加してください:</p><pre><code class="language-python">from flask import Flask
from threading import Thread

app = Flask('')

@app.route('/')
def home():
    return "Hello. I am alive!"

def run():
  app.run(host='0.0.0.0',port=8080)

def keep_alive():
    t = Thread(target=run)
    t.start()
</code></pre><p>このコード内では、Flask を使用してウェブサーバーを起動しています。サーバーは訪れる人へ、「Hello. I am alive.」を返します。サーバーは、ボットとは別のスレッドで動作します。残りのコードはボットとあまり関係がないので、そのすべてについての説明をここではしません。</p><p>ここで、このウェブサーバーを起動するボットが必要になります。</p><p><code>main.py</code> の先頭に次の行を追加して、サーバーをインポートしてください。</p><pre><code class="language-python">from keep_alive import keep_alive
</code></pre><p><code>main.py</code> を実行する際にウェブサーバーを起動するには、ボットを実行する直前の、最後から 2 番目の行に、次の行を追加してください。</p><p><code>keep_alive()</code></p><p>コードを追加してから Repl.it 上でボットを実行するときに、新しいウェブサーバーウィンドウが開きます。そこには、ウェブサーバーの URL が表示されます。次のセクションで使用できるように、この URL をコピーしてください。</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/09/web-server-url.png" class="kg-image" alt="web-server-url" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/09/web-server-url.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/09/web-server-url.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/09/web-server-url.png 1600w" sizes="(min-width: 1200px) 1200px" width="1600" height="326" loading="lazy"></figure><h3 id="uptime-robot-">Uptime Robot の設定方法</h3><p>ここで、5 分ごとにサーバーへの接続を確認するために、Uptime Robot を設定する必要があります。</p><p>まずは <a href="https://uptimerobot.com/">https://uptimerobot.com/</a> で無料のアカウントを作成してください。</p><p>アカウントへログインしたら、「Add New Monitor」をクリックします。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/09/add-new-monitor.png" class="kg-image" alt="add-new-monitor" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/09/add-new-monitor.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/09/add-new-monitor.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/09/add-new-monitor.png 1116w" sizes="(min-width: 720px) 720px" width="1116" height="290" loading="lazy"></figure><p>新しいモニターに対し、Monitor Type は「HTTP(s)」を選択して、好きな名前をつけてください。それから、Repl.it のウェブサーバーの URL を貼り付けます。最後に、「Create Monitor」をクリックしてください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/09/new-monitor-setup.png" class="kg-image" alt="new-monitor-setup" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/09/new-monitor-setup.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/09/new-monitor-setup.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/09/new-monitor-setup.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/09/new-monitor-setup.png 1660w" sizes="(min-width: 720px) 720px" width="1660" height="1376" loading="lazy"></figure><p>やりました！これでボットは継続的に動作し、誰もが Repl.it 上でそれと対話できるようになりました。</p><h2 id="--11">結び</h2><p>これで、クラウド内で Discord ボットを Python を使用して作成し、継続的に動作させる方法が理解できましたね。</p><p>discord.py ライブラリにできることは、まだまだたくさんあります。したがって、もし Discord ボットにさらに機能を追加したいならば、次のステップは <a href="https://discordpy.readthedocs.io/ja/latest/index.html">discord.py の公式ドキュメント</a>を調べてみることです。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ GitHub プロジェクト用の優れた README ファイルの書き方 ]]>
                </title>
                <description>
                    <![CDATA[ GitHub を初めて知った時、私 (原著者) はそれがどういうものか、何ができるのかわかっていませんでした。ここだけの話、それがコードの置き場所で、すべての開発者が持つべきものだと言われるがままにアカウントを作成しました。 初心者だった私は、長い間そのアカウントで何もしませんでした。しかしその後、テクノロジーに興味を持ち、他の開発者をフォローし、GitHub 上にある彼らの作品をチェックし始めました。そして、彼らには共通点があることに気がついたのです。彼らはみな素晴らしいプロジェクトをもち、オープンソースに貢献しているとともに、彼らのプロジェクトには詳細な  README ファイルが含まれていました。 こうして README についての関心が高まり、私のプロジェクトにも試しにそれを追加することにしました。正直に言うと、私は作法もわからないまま焦ってそれを追加しました。はっきり言って、それは全く優れたものではありませんでした。 ここ [https://github.com/larymak/ToDo-list-App/tree/v1.0]で実物を見ることができます。 しばらくはその ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-write-a-good-readme-file/</link>
                <guid isPermaLink="false">627fac1153787105239a6c37</guid>
                
                    <category>
                        <![CDATA[ GitHub ]]>
                    </category>
                
                    <category>
                        <![CDATA[ OPEN SOURCE ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Sun, 14 Aug 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/05/guide-to-writting-a-good-readme-file--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-write-a-good-readme-file/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Write a Good README File for Your GitHub Project</a>
      </p><p>GitHub を初めて知った時、私 (原著者) はそれがどういうものか、何ができるのかわかっていませんでした。ここだけの話、それがコードの置き場所で、すべての開発者が持つべきものだと言われるがままにアカウントを作成しました。</p><p>初心者だった私は、長い間そのアカウントで何もしませんでした。しかしその後、テクノロジーに興味を持ち、他の開発者をフォローし、GitHub 上にある彼らの作品をチェックし始めました。そして、彼らには共通点があることに気がついたのです。彼らはみな素晴らしいプロジェクトをもち、オープンソースに貢献しているとともに、彼らのプロジェクトには詳細な <strong>README ファイル</strong>が含まれていました。</p><p>こうして README についての関心が高まり、私のプロジェクトにも試しにそれを追加することにしました。正直に言うと、私は作法もわからないまま焦ってそれを追加しました。はっきり言って、それは全く優れたものではありませんでした。<a href="https://github.com/larymak/ToDo-list-App/tree/v1.0">ここ</a>で実物を見ることができます。</p><p>しばらくはそのままでした。しかし、実践と学習を続けることで、<a href="https://github.com/larymak/Python-project-Scripts">このように</a>多少は優れたドキュメントに変えることができました。この改善により、プロジェクトへのエンゲージメントが高まり、他の開発者の参加が促進されました。</p><p>優れた README は、GitHub 上に作品を置いている大勢の開発者の中であなたを際立たせるのに役立つということも特筆すべき点です。</p><p>この記事では、README ファイルがどういうものかとその書き方を学びます。では最初に、README ファイルとは何かを理解しましょう。</p><h2 id="readme-">README ファイルとは何か？</h2><p>簡単に言うと、README ファイルは、あなたのプロジェクトの詳しい説明をユーザーに提供するガイドです。</p><p>また、README はプロジェクトの使用方法に関するガイドラインを含むドキュメントであるとも言えます。通常は、プロジェクトのインストールおよび実行方法についての説明が含まれます。</p><p>開発者として、README であなたのプロジェクトについてのドキュメントを提供する方法を知っておくことは不可欠です。その理由を以下に挙げます:</p><ul><li>README はプロジェクトに出会った人が最初に目にするファイルなので、ある程度簡潔に、とはいえ詳細なものにする必要があります。</li><li>他の数多くのプロジェクトから、あなたのプロジェクトを際立たせてくれます。もちろん、プロジェクト自体も優れたものであることが重要です。</li><li>プロジェクトが何をどのように提供する必要があるか、あなた自身が考えを集中させるのに役立ちます。</li><li>文書作成スキルを向上させます。フリードリヒ・ニーチェの格言によれば:</li></ul><blockquote>A good writer possesses not only his own spirit but also the spirit of his friends.</blockquote><p>(訳: 優れた作家とは、彼自身の精神のみならず、仲間の精神もまた持ち合わせているものである)</p><p>プロジェクトに取り組む際、他の開発者にあなたのコードとその機能を理解してもらう必要があることを忘れないようにしましょう。そのために、コードとは別にガイドを添付しておくことが役に立ちます。</p><p>例えば、先ほどシェアした私の<a href="https://github.com/larymak/ToDo-list-App/tree/v1.0">最初のプロジェクト</a>の例には、優れた README がありません。そのため、プロジェクトが素晴らしい物だったとしても、リポジトリをクローンした後どうすれば良いのか初心者にとって理解しづらいものになっています。実はコンピューターウイルスである可能性すらあるかもしれません。</p><p>このような GitHub のプロジェクトでは、それがどんなに素晴らしいものであったとしても、優れた README がなければ、他の開発者は取り組んだり理解しようとはしないでしょう。</p><p>では、この<a href="https://github.com/larymak/Html-Css-Recap">プロジェクト</a>を見てみましょう。ここでは、プロジェクトが何を行い、何を必要とするか、またプロジェクトを使用する場合やプロジェクトに貢献したい場合にどうやって始めたら良いかがわかります。</p><p>このように、うまく書かれた README は強力であり、プロジェクトを変えることができます。</p><p>それでは、優れた README の書き方に入りましょう。</p><h2 id="-readme-">優れた README の書き方 – 段階的なガイド</h2><p>まず重要なことは、優れた README を作成する唯一の正しい方法というものはありません。ですが大きな誤りが一つあります。それは、README を全く含まないことです。</p><p>さまざまな README ファイルの研究と調査を行った結果、私が見つけたベストプラクティスがあります。それこそが私がシェアすることです。そして、私はいつも自分にこう言い聞かせています:</p><blockquote>Every day is a learning day.</blockquote><p>(訳: 日々精進)</p><p>つまり、あなたがキャリアを積む中で進歩し成長するにつれて、優れた README を作るものは何か、またどう改善するかについて、独自の考えを持つようになることでしょう。あなただけのユニークなガイドを思いつくかもしれません。</p><p>具体的な書き方に入る前に、もう一点、プロジェクトの README を書く際はプロジェクトに関する <strong>What</strong>、<strong>Why</strong>、<strong>How</strong> がわかるようにすることが重要です。</p><p>以下のような質問に沿って考えると書きやすいでしょう:</p><ul><li>何が動機だったのか？</li><li>なぜこのプロジェクトを構築したのか？</li><li>このプロジェクトが解決する課題は何か？</li><li>何を学んだのか？</li><li>このプロジェクトの優れた点は何か？<br>プロジェクトに多くの機能がある場合は、「機能」セクションを追加して一覧を載せることを検討しましょう。</li></ul><h2 id="readme--1">README に含めるもの</h2><h3 id="1-">1. プロジェクトのタイトル</h3><p>プロジェクトの名前です。1 文でプロジェクト全体を説明し、プロジェクトの主な目的や狙いが<strong>何か (What) </strong>を、人々に理解してもらいやすくします。</p><h3 id="2-">2. プロジェクトの説明</h3><p>これは、多くの新米開発者が見落としてしまいがちな、プロジェクトの重要な構成要素です。</p><p>プロジェクトの説明は極めて重要な部分です。よく練られた説明は、他の開発者だけでなく、将来あなたの雇い主になる可能性のある人々にも、あなたの作品の魅力を伝えることができます。</p><p>README の説明の品質が、優れたプロジェクトか否かの差を付けることがよくあります。優れたプロジェクトは、以下のような内容を説明、紹介する場として README を活用します:</p><ul><li>アプリケーションが何をするか、</li><li>使用した技術についてなぜそれを採用したか、</li><li>直面した困難について、また将来実装したいと考えている機能について。</li></ul><h3 id="3-">3. 目次 (任意)</h3><p>README がとても長い場合は、異なるセクションへ移動しやすくするために目次を追加することをお勧めします。そうすることで、読者がプロジェクト内を探索しやすくなります。</p><h3 id="4-">4. プロジェクトのインストールおよび実行方法</h3><p>ユーザーがインストールしたり、「POS (販売時点情報管理)」のようなマシン上でローカル実行する必要があるプロジェクトに取り組んでいる場合は、プロジェクトのインストールに必要な手順と、もしあれば必要な依存関係も追加すべきです。</p><p>開発環境を設定して実行する方法の段階的な説明を提供するようにしてください。</p><h3 id="5-">5. プロジェクトの使用方法</h3><p>ユーザー／コントリビューターがプロジェクトを使用できるように、手順や例を提供しましょう。そうすることで、問題に直面した場合にも対処しやすくなります。何をすべきか分からない時は常にここを参照すれば良いからです。</p><p>また、実行中のプロジェクトの例や、プロジェクト内で使用されている構造や設計方針を示すために、スクリーンショットなどの資料を追加して視覚的な補助資料として活用できます。</p><p>さらに、プロジェクトでパスワードまたはユーザー名などの認証が必要な場合には、このセクションに認証情報を含めるとよいでしょう。</p><h3 id="6-">6. クレジットを入れる</h3><p>チームまたは組織としてプロジェクトに取り組んだ場合は、共同制作者／チームメンバーの一覧を載せるようにしましょう。その人たちの GitHub プロフィールやソーシャルメディアへのリンクも添えておくとよいでしょう。</p><p>また、プロジェクトの構築にあたってチュートリアルを参考にしたり、特定の資料を参照しており、それがユーザーにも役立つ可能性がある場合、それらへのリンクもここに含めるようにしましょう。</p><p>これは、あなたの感謝の気持ちを表明し、他の人がプロジェクトのコピーを直接入手しやすくする一つの方法です。</p><h3 id="7-">7. ライセンスの付与</h3><p>ほとんどの README ファイルにおいて、ライセンスは最後の部分に置かれることが多いです。これは、他の開発者にプロジェクトを用いてできることとできないことを知らせるためのものです。</p><p>取り組んでいるプロジェクトの種類によって、さまざまなタイプのライセンスがあります。選んだライセンスがプロジェクトの得る貢献を決定します。</p><p>最も一般的なライセンスは GPL ライセンスで、これはコードを改変し、商用目的で利用することを他の人に許可します。ライセンスを選ぶ際に助けが必要な場合は、次のリンクをチェックしてください: <a href="https://choosealicense.com/">https://choosealicense.com/</a></p><p>ここまで説明してきたことは、優れた README の最小要件です。では、以下のセクションを追加して、さらに人目を引きインタラクティブにすることも検討してみてください。</p><h2 id="-readme--1">追加の README セクション</h2><h3 id="8-">8. バッジ</h3><p>バッジは必須ではありませんが、他の開発者にあなたが何を行っているかを伝えるシンプルな方法です。</p><p>このセクションを用意することで、重要なツールへリンクしやすくしたり、フォーク、コントリビューター、および未解決の問題の数などのような、プロジェクトのシンプルなステータスを表示するのに役に立ちます。</p><p>以下はバッジの活用方法の参考として、私のプロジェクトのスクリーンショットです:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/08/badge_screenshot.png" class="kg-image" alt="badge_screenshot" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/08/badge_screenshot.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/08/badge_screenshot.png 892w" sizes="(min-width: 720px) 720px" width="892" height="143" loading="lazy"></figure><p>このセクションの良い点は、自動的に更新されることです。</p><p>ではどこで入手すればいいでしょうか？ <a href="https://shields.io/">shields.io</a> がホストしているバッジをチェックしてみてください。たくさんのバッジが用意されています。今は、何を表しているか全部は理解できないかもしれませんが、やがてわかるようになるでしょう。</p><h3 id="9-">9. プロジェクトに貢献する方法</h3><p>これは、他の開発者に貢献してもらう必要があるオープンソースプロジェクトを開発している場合、最も役に立つものです。プロジェクトに貢献する方法を彼らに伝えるためのガイドラインを追加するとよいでしょう。</p><p>また、後の衝突を避けるためには、オープンソースプロジェクトのために適切なライセンスを選ぶことが重要です。コントリビューションガイドラインを追加することも、重要な役割を果たしてくれるでしょう。</p><p>最も一般的なガイドラインには、<a href="https://www.contributor-covenant.org/">コントリビューター行動規範</a>と<a href="https://docs.github.com/ja/communities/setting-up-your-project-for-healthy-contributions/setting-guidelines-for-repository-contributors">貢献ガイド</a>が含まれています。これらのドキュメントは、プロジェクトのためのルールを設定する際に、必要な支援を提供してくれます。</p><h3 id="10-">10. テストを追加する</h3><p>もうひと頑張りして、アプリケーション用のテストを作成してみましょう。また、コード例と実行方法を備えるようにしてください。</p><p>これはプロジェクトが問題なく動作することをあなたが確信しており、信頼できるということを表すのに役に立ち、他の人々にも信頼を与えることができます。</p><h3 id="-">補足事項</h3><p>README を記述する際に注意する補足事項を以下にいくつか挙げます:</p><ul><li>最新の状態を保つ - 必ず、ファイルを常に最新の状態にしておくことをお勧めします。変更がある場合は、必要に応じてファイルを更新してください。</li><li>言語を選択する - 私たちはさまざまな地域で生まれ育ち、異なる言語を話します。ですが、それはコードを自国語に翻訳する必要があることを意味してはいません。英語はグローバルに通用する言語であるため、英語で記述された README は機能してくれます。ターゲット層が英語に慣れていない場合は、翻訳ツールの使用も検討してください。</li></ul><h2 id="--1">まとめ</h2><p>これで、README ファイルを改善したり、初めての README ファイルを書き始めるために必要なすべてが揃いました。</p><p>あなたは次の、もしくは既存のプロジェクトにもインタラクティブで参考になるガイドを追加して、プロジェクトを際立たせることができるでしょう。</p><p>プロジェクトの README を自動的に生成できるツールも多数ありますが、自動化に移行する前に、まずは自分でやってみることが良い方法です。ツールをチェックしたい場合は、次のようなものがあります:</p><ul><li><a href="https://www.makeareadme.com/">Make a README</a></li><li><a href="https://rahuldkjain.github.io/gh-profile-readme-generator/">README Generator</a></li><li><a href="https://github.com/kefranabg/readme-md-generator">README</a></li></ul><p>ここまでお読みくださいましてどうもありがとうございました。もしも記事を楽しんでいただき、それが役に立ったならば、他の開発者が彼らのプロジェクトを改善できるように記事をシェアしてください。</p><p>あなたが新しく作り上げた README ファイルを見ることができれば幸いです。以下のリンクのいずれかを通じてシェアしてください。</p><p><a href="https://twitter.com/larymak1">Twitter</a> | <a href="https://www.youtube.com/channel/UCrT1ARRZfLOuf6nc_97eXEg">YouTube</a> | <a href="https://www.linkedin.com/in/hillary-nyakundi-3a64b11ab/">LinkedIn</a> | <a href="https://github.com/larymak">GitHub</a> でつながりましょう。</p><p>貴重なご意見をお聞かせください。率直なフィードバックをお待ちしております！</p><p>エンジョイコーディング ❤</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python で SQL データベースを作成して操作する方法 ]]>
                </title>
                <description>
                    <![CDATA[ Python [https://www.python.org/] と SQL [https://ja.wikipedia.org/wiki/SQL] という 2 つの言語は、データアナリストにとって最も重要なものです。 この記事では、Python と SQL を結びつけるために知る必要があることについてすべてお伝えします。 リレーショナルデータベースから、機械学習パイプラインに直接データを取得したり、独自のデータベースの中に Python アプリケーションからデータを保存したり、あるいはあなたが思いつきそうな、他のあらゆるユースケースについて学習します。 一緒に学ぶ項目を以下に挙げます:  * なぜ Python と SQL を一緒に使用する方法を学ぶのか？  * Python の開発環境と MySQL サーバーの設定方法  * Python で MySQL サーバーに接続する  * 新しいデータベースを作成する  * テーブルとリレーションシップを作成する  * テーブルにデータを追加する  * データの読み取り  * レコードを更新する ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/connect-python-with-sql/</link>
                <guid isPermaLink="false">623084c08f97f80519f4d50e</guid>
                
                    <category>
                        <![CDATA[ SQL ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Wed, 22 Jun 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/03/Untitled-design-1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/connect-python-with-sql/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Create and Manipulate SQL Databases with Python</a>
      </p><p><a href="https://www.python.org/">Python</a> と <a href="https://ja.wikipedia.org/wiki/SQL">SQL</a> という 2 つの言語は、データアナリストにとって最も重要なものです。</p><p>この記事では、Python と SQL を結びつけるために知る必要があることについてすべてお伝えします。</p><p>リレーショナルデータベースから、機械学習パイプラインに直接データを取得したり、独自のデータベースの中に Python アプリケーションからデータを保存したり、あるいはあなたが思いつきそうな、他のあらゆるユースケースについて学習します。</p><p>一緒に学ぶ項目を以下に挙げます:</p><ul><li>なぜ Python と SQL を一緒に使用する方法を学ぶのか？</li><li>Python の開発環境と MySQL サーバーの設定方法</li><li>Python で MySQL サーバーに接続する</li><li>新しいデータベースを作成する</li><li>テーブルとリレーションシップを作成する</li><li>テーブルにデータを追加する</li><li>データの読み取り</li><li>レコードを更新する</li><li>レコードを削除する</li><li>Python のリストからレコードを作成する</li><li>以上のことを将来にわたって実行できる、再利用可能な関数を作成する</li></ul><p>非常に役に立つ素晴らしい内容がたくさんあります。さあ学習に入りましょう！</p><p>事前のお知らせ: このチュートリアルの中で使用されるすべてのコードを含む Jupyter Notebook のファイルを、 <a href="https://github.com/thecraigd/Python_SQL">こちらの GitHub リポジトリ</a>で入手できます。その内容に沿ってコーディングすることを強く推奨します！</p><p>このチュートリアルで使用されているデータベースと SQL コードは、以前に私が <a href="https://towardsdatascience.com/">Towards Data Science</a> 上で投稿した、<a href="https://towardsdatascience.com/tagged/sql-series">Introduction to SQL (SQL 入門)</a> という一連の記事からすべて引用しています。(記事を閲覧できない場合は、<a href="https://www.craigdoesdata.de/contact.html">こちらから私 (原著者) に連絡</a>していただければ、無料で閲覧できるリンクを送ることができます) 。</p><p>SQL とリレーショナルデータベースの背後にある概念について、あまりよく知らない場合は、<a href="https://towardsdatascience.com/tagged/sql-series">前述の一連の記事</a>をお勧めします。(もちろん、<a href="https://www.freecodecamp.org/news/search/?query=sql">freeCodeCamp</a> にも優れた資料がたくさんあります！)</p><h2 id="-python-sql-">なぜ Python と SQL を一緒に使用するのか？</h2><p>データアナリストとデータサイエンティストにとって、Python には有利な点が多くあります。膨大なオープンソースライブラリによって、Python はデータアナリストにとって非常に便利なツールになっています。</p><p>データ解析向けの <a href="https://pandas.pydata.org/">pandas</a>、<a href="https://numpy.org/">NumPy</a>、<a href="https://vaex.readthedocs.io/en/latest/">Vaex</a> や、データビジュアリゼーション (データ可視化) 向けの <a href="https://matplotlib.org/">Matplotlib</a>、<a href="https://seaborn.pydata.org/">seaborn</a>、<a href="https://bokeh.org/">Bokeh</a>、そして機械学習アプリケーション向けの <a href="https://www.tensorflow.org/">TensorFlow</a>、<a href="https://scikit-learn.org/stable/">scikit-learn</a>、<a href="https://pytorch.org/">PyTorch</a> などがあります (まだまだたくさんあります) 。</p><p>その (比較的) やさしい学習曲線と用途の広さを思えば、Python が世界で<a href="https://stackoverflow.blog/2017/09/06/incredible-growth-python/">最も急成長しているプログラミング言語</a>のひとつであることも納得がいきます。</p><p>ではデータ解析に Python を用いるとして、次の質問をする価値があります - すべてのデータはどこからやってくるのでしょうか？</p><p>データセットには多種多様なソースがある一方で、多くの場合 - 特に企業活動のなかでは - データはリレーショナルデータベースの中に保存されています。<br>リレーショナルデータベースはきわめて効率的でパワフルであり、あらゆる種類のデータの <a href="https://ja.wikipedia.org/wiki/CRUD">create - 生成、 read - 読み取り、update - 更新、delete - 削除</a>に広く使用されています。</p><p>最も広く使用されているリレーショナルデータベース管理システム (RDBMS) - <a href="https://www.oracle.com/database/">Oracle</a>、<a href="https://www.mysql.com/">MySQL</a>、<a href="https://ja.wikipedia.org/wiki/Microsoft_SQL_Server">Microsoft SQL Server</a>、<a href="https://www.postgresql.org/">PostgreSQL</a>、<a href="https://ja.wikipedia.org/wiki/IBM_Db2">IBM DB2</a> - のすべては、<a href="https://ja.wikipedia.org/wiki/SQL">Structured Query Language</a> (構造化問い合わせ言語 - SQL) を使用して、データを取得し変更します。</p><p>各 RDBMS が、わずかに異なる <a href="https://towardsdatascience.com/the-many-flavours-of-sql-7b7da5d56c1e">SQL 風の言語</a>を使用していることに注意してください。大抵の場合、ある RDBMS 向けに記述された SQL コードは、別の RDBMS 内では (通常はごくわずかな) 変更を加えない限り動作しません。しかし、概念、構造、操作はほとんど同じです。</p><p>これはつまり、RDBMS を扱っているデータアナリストにとって、SQL をしっかり理解していることが極めて重要であるということを意味します。Python と SQL を一緒に使用する方法を知っていると、データを扱う際にさらに有利です。</p><p>ここからは、その方法について詳しくお伝えします。</p><h2 id="-">はじめに</h2><h3 id="--1">事前に必要なものとそのインストール</h3><p>このチュートリアルの内容に沿ってコーディングするためには、<a href="https://www.python.org/downloads/">Python の開発環境</a>を独自に設定する必要があります。</p><p>私は <a href="https://www.anaconda.com/">Anaconda</a> を使用していますが、他にも多くの方法があります。さらにサポートが必要な場合は、「Pythonをインストールする方法」と google で検索してください。また、このチュートリアル用の <a href="https://github.com/thecraigd/Python_SQL">Jupyter Notebook</a> に沿ってコーディングする場合には、<a href="https://mybinder.org/">Binder</a> が使用できます。</p><p>この記事では、無料であり業界内で広く用いられている、<a href="https://dev.mysql.com/downloads/mysql/">MySQL Community Server</a> を使用します。Windows を使用しているならば、設定の際に<a href="https://www.youtube.com/watch?v=2HQC94la6go">こちらのガイド</a>が役に立ちます。<a href="https://www.youtube.com/watch?v=5BQ5GvjiAR4">Mac</a> と <a href="https://www.youtube.com/watch?v=0o0tSaVQfV4">Linux</a> ユーザー向けのガイドもあります。（ただし、linux のディストリビューションによって、設定方法が異なるかもしれません）。</p><p>以上の設定が済んだら、それらを相互につなげる必要があります。</p><p>そのためには、Python のライブラリである <a href="https://dev.mysql.com/doc/connector-python/en/">MySQL Connector</a> をインストールしなければなりません。<a href="https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html">こちらの案内</a>に従ってインストールするか、次の pip コマンドを使用してください:</p><pre><code class="language-terminal">pip install mysql-connector-python
</code></pre><p>また、<a href="https://pandas.pydata.org/pandas-docs/stable/getting_started/install.html">pandas</a> を使用するので、必ず同じようにインストールしておいてください。</p><pre><code class="language-terminal">pip install pandas
</code></pre><h3 id="--2">ライブラリのインポート</h3><p>Python のあらゆるプロジェクトと同じで、まず最初にしたいことはライブラリのインポートです。</p><p>プロジェクトの最初に、使用するすべてのライブラリをインポートすることをお勧めします。そうすれば、コードを読んだりレビューする人が、何が起こるのかを大まかに知ることができるので、不意を打つようなことがなくなります。</p><p>このチュートリアルでは、<a href="https://dev.mysql.com/doc/connector-python/en/">MySQL Connector</a> と <a href="https://pandas.pydata.org/">pandas</a> の 2 つのライブラリだけを使用します。</p><pre><code class="language-python">import mysql.connector
from mysql.connector import Error
import pandas as pd
</code></pre><p>Error 関数を個別にインポートしているので、それを自分で記述する関数のために簡単に利用できます。</p><h2 id="mysql-">MySQL サーバーに接続する</h2><p>この時点で、自分のシステム上に <a href="https://dev.mysql.com/downloads/mysql/">MySQL Community Server</a> が設定されていなければなりません。その次に、このサーバーへの接続を確立できる以下のコードを、Python で記述する必要があります。</p><figure class="kg-card kg-code-card"><pre><code class="language-python">def create_server_connection(host_name, user_name, user_password):
    connection = None
    try:
        connection = mysql.connector.connect(
            host=host_name,
            user=user_name,
            passwd=user_password
        )
        print("MySQL Database connection successful")
    except Error as err:
        print(f"Error: '{err}'")

    return connection
</code></pre><figcaption>MySQL サーバーへ接続するための関数</figcaption></figure><p>再利用できる関数を、このようなコードで作成するのをお勧めします。そうすれば、その関数を何度も楽に使用できます。一度コードを記述してしまえば、それを今後のあらゆるプロジェクトでも再利用できるので、未来の自分も快適になります！</p><p>上記のコードで何が行われているのかを理解するために、行単位で見直していきましょう:</p><p>最初の行は関数名 (create_server_connection) と、関数が取る引数名 (host_name、user_name、および user_password) を定義しています。</p><p>多数の接続が開くことによってサーバーが混雑しないように、次の行で既存の接続を閉じます。</p><p>その次に、Python の <a href="https://www.w3schools.com/python/python_try_except.asp">try-except ブロック</a>を使用して、起こり得るエラーを処理しています。はじめの部分は引数内でユーザーが指定する詳細情報を用いた <a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysql-connector-connect.html">mysql.connector.connect() メソッド</a>を使用して、サーバーへの接続を試しています。接続に成功すると、関数がちょっとした成功メッセージを出力に表示してくれます。</p><p>ブロックの except の部分は、エラーが発生してしまうという残念な状況において、MySQL サーバーが返すエラーを出力に表示します。</p><p>最後に、もし接続に成功していれば、関数は <a href="https://dev.mysql.com/doc/connector-python/en/connector-python-example-connecting.html">connection オブジェクト</a>を返します。</p><p>実務ではよく、関数の出力を変数に代入して使います。これが connection オブジェクトとなります。その後で、(<a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor.html">cursor</a> などの) 他のメソッドを connection オブジェクトに適用することで、別の便利なオブジェクトを作成できます。</p><figure class="kg-card kg-code-card"><pre><code class="language-python">connection = create_server_connection("localhost", "root", pw)
</code></pre><figcaption>ここで、pw は MySQL サーバーのルートパスワードを文字列で含んでいる変数です。</figcaption></figure><p>これは次の成功メッセージを出力するはずです:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/05/connection-successful-message.png" class="kg-image" alt="connection-successful-message" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/05/connection-successful-message.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/05/connection-successful-message.png 790w" sizes="(min-width: 720px) 720px" width="790" height="79" loading="lazy"><figcaption>やりました!</figcaption></figure><h3 id="--3">新しいデータベースを作成する</h3><p>接続を確立したので、次のステップではサーバー上に新しいデータベースを作成します。</p><p>このチュートリアルではこれを 1 度しか行いませんが、将来のプロジェクトで再利用できる、便利で優れた関数を手に入れるために、関数をもう 1 つ記述します。</p><pre><code class="language-python">def create_database(connection, query):
    cursor = connection.cursor()
    try:
        cursor.execute(query)
        print("Database created successfully")
    except Error as err:
        print(f"Error: '{err}'")
</code></pre><p>この関数は connection (connection オブジェクト) と query (次のステップで記述する SQL クエリ) の 2 つの引数を取ります。そして、接続を介してサーバー内でクエリを実行します。</p><p>connection オブジェクトに <a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor.html">cursor</a> メソッドを適用して、cursor オブジェクトを作成します (MySQL Connector は<a href="https://www.freecodecamp.org/news/object-oriented-programming-concepts-21bb035f7260/">オブジェクト指向プログラミングパラダイム</a>を使用しているので、親オブジェクトから特性を継承しているオブジェクトが多く存在します) 。</p><p>この cursor オブジェクトは、<a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html">execute</a>、<a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html">executemany</a> (このチュートリアル内でこれらを使用します) などのメソッドの他に、いくつかの便利なメソッドをもちます。</p><p>cursor オブジェクトが、MySQL サーバーのターミナルウィンドウ内で点滅しているカーソルへのアクセスを提供するものであると考えると、わかりやすいかもしれません。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/05/blinking-cursor-in-MySQL-server.png" class="kg-image" alt="blinking-cursor-in-MySQL-server" width="104" height="32" loading="lazy"><figcaption>これですね。</figcaption></figure><p>次に、データベースを作成するクエリを定義して関数を呼び出します:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/05/define-create-database-query.png" class="kg-image" alt="define-create-database-query" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/05/define-create-database-query.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/05/define-create-database-query.png 664w" width="664" height="100" loading="lazy"></figure><p>このチュートリアルで使用するすべての SQL クエリは、私の <a href="https://towardsdatascience.com/tagged/sql-series">Introduction to SQL tutorial series (SQL 入門チュートリアルシリーズ)</a> の中で解説されており、すべてのコードは、<a href="https://github.com/thecraigd/Python_SQL">こちらの GitHub リポジトリ</a>内の関連する Jupyter Notebook の中で見つけることができるので、このチュートリアル内の SQL コードが、何を行うのかについての説明はいたしません。</p><p>とはいえ、これはおそらく考えられる最もシンプルな SQL クエリです。英語が読めるならば、何を行っているかはほぼ理解できます！</p><p>create_database 関数を、上記の引数を指定して実行することで、「school」という名前のデータベースがサーバー内に作成されます。</p><p>なぜこのデータベースは「school」と呼ばれるのでしょうか？このチュートリアル内で、本当は何を実装しようとしているのかについてより詳しく見るのに、今がちょうどいいタイミングかもしれません。</p><h3 id="--4">データベースについて</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/05/ERD.png" class="kg-image" alt="ERD" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/05/ERD.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/05/ERD.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/05/ERD.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/05/ERD.png 1843w" sizes="(min-width: 720px) 720px" width="1843" height="1300" loading="lazy"><figcaption>これがデータベースの実体関連図です。</figcaption></figure><p><a href="https://towardsdatascience.com/tagged/sql-series">先ほどご紹介したシリーズ</a>の中の例にならって、International Language School (国際語学校、ILS) - 法人顧客に専門的な語学レッスンを提供する架空の言語訓練校 - のためのデータベースを実装してみましょう。</p><p>この<a href="https://www.lucidchart.com/pages/er-diagrams">実体関連図 (Entity Relationship Diagram - ERD)</a> は実体 (Teacher - 講師、Client - 法人顧客、Course - 講座、 Participant - 受講者) を配置し、それらの関係を定義します。</p><p>ERD とは何か、そしてそれを作成したり、データベースを設計したりする際に、何を考慮すべきなのかについてのすべての情報を、<a href="https://towardsdatascience.com/designing-a-relational-database-and-creating-an-entity-relationship-diagram-89c1c19320b2">この記事</a>の中で見つけることができます。</p><p>SQL のソースコード、データベース要件、およびデータベースに入るデータは、すべて<a href="https://github.com/thecraigd/SQL_School_Tutorial">こちらの GitHub リポジトリ</a>に含まれていますが、このチュートリアルを進めていくことでも、そのすべてを確認できます。</p><h3 id="--5">データベースに接続する</h3><p>MySQL サーバー内にデータベースを作成したので、create_server_connection 関数を変更してこのデータベースに直接接続できるようにします。</p><p>1 つの MySQL サーバー上に複数のデータベースが存在する可能性がある (実際にはそれが一般的ですが) ことに注意し、私たちは常に、また自動的に、自らが関与するデータベースへ接続する必要があります。</p><p>データベースへの接続は次のようにして行うことができます:</p><pre><code class="language-python">def create_db_connection(host_name, user_name, user_password, db_name):
    connection = None
    try:
        connection = mysql.connector.connect(
            host=host_name,
            user=user_name,
            passwd=user_password,
            database=db_name
        )
        print("MySQL Database connection successful")
    except Error as err:
        print(f"Error: '{err}'")

    return connection
</code></pre><p>この関数は、引数 (データベースの名前) をもう 1 つ多く取って、それを connect() メソッドへ引数として渡していること以外は、create_server_connection 関数と全く同じものです。</p><h3 id="--6">クエリ実行関数を作成する</h3><p>ここで (ひとまず) 最後に作ろうとしている関数は、クエリ実行関数という極めて重要なものです。これは、文字列として Python 内に保存されている SQL クエリを取り、それを <a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html">cursor.execute()</a> メソッドに渡して、サーバー上で実行します。</p><pre><code class="language-python">def execute_query(connection, query):
    cursor = connection.cursor()
    try:
        cursor.execute(query)
        connection.commit()
        print("Query successful")
    except Error as err:
        print(f"Error: '{err}'")
</code></pre><p>この関数は、<a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-commit.html">connection.commit()</a> メソッドを使用して、SQL クエリで詳細に記述されているコマンドが実行されているか確認していることを除けば、前の create_database 関数と全く同じです。</p><p>これが主力の関数になります。この関数を (create_db_connection と一緒に) 使用することで、テーブルを作成し、テーブル間の関係を設定し、データをテーブルに追加し、データベース内のレコードを更新または削除します。</p><p>SQL の専門家であれば、この関数を使用して、すべての複雑なコマンドとクエリを、Python のスクリプトから直接実行できるでしょう。これはデータを管理するためのとても強力なツールになってくれます。</p><h2 id="--7">テーブルを作成する</h2><p>これで、サーバー内での SQL コマンドの実行と、データベースの構築を始める準備がすべて整いました。最初に行うことは、必要なテーブルの作成です。</p><p>では講師 (Teacher) のテーブルから始めましょう:</p><pre><code class="language-python">create_teacher_table = """
CREATE TABLE teacher (
  teacher_id INT PRIMARY KEY,
  first_name VARCHAR(40) NOT NULL,
  last_name VARCHAR(40) NOT NULL,
  language_1 VARCHAR(3) NOT NULL,
  language_2 VARCHAR(3),
  dob DATE,
  tax_id INT UNIQUE,
  phone_no VARCHAR(20)
  );
 """

connection = create_db_connection("localhost", "root", pw, db) # データベースに接続
execute_query(connection, create_teacher_table) # 定義したクエリを実行
</code></pre><p>まず最初に、適切な名前の変数へ SQL コマンド (<a href="https://towardsdatascience.com/coding-and-implementing-a-relational-database-using-mysql-d9bc69be90f5">こちら</a>で詳しく解説されています) を代入します。</p><p>この場合、Python の<a href="https://developers.google.com/edu/python/strings">複数行にわたる文字列に対する三連引用符表記</a>を使用して、SQL クエリを保存してから、それを execute_query 関数へ渡して実行しています。</p><p>この複数行のフォーマットは、純粋に人間がコードを読むためのものであることに注意してください。 もし SQL コマンドがこのように展開されていても、SQL も Python も「気にしません」。構文が正しい限り、両方の言語はそれを受け入れてくれるでしょう。</p><p>複数行のフォーマットを使用することは、コードを読む人 (たとえそれが将来のあなただけだとしても！) の利益のためではありますが、また一方で、コードをより読みやすく理解しやすいものにするのに非常に役立ちます。</p><p>同じことが SQL における演算子の大文字化についても当てはまります。 これは幅広く使用されている慣習で強く推奨されますが、実際にコードを実行するソフトウェアは大文字と小文字を区別せず、「CREATE TABLE teacher」と「create table teacher」を同じコマンドとして扱います。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/Capitalization_of_keywords.png" class="kg-image" alt="Capitalization_of_keywords" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/Capitalization_of_keywords.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/Capitalization_of_keywords.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/Capitalization_of_keywords.png 1084w" sizes="(min-width: 720px) 720px" width="1084" height="118" loading="lazy"></figure><p>このコードを実行すると、成功メッセージが表示されます。また、MySQL サーバーのコマンドラインクライアント内で、テーブルが作成されているかを確認できます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/teacher_table_in_MySQL_Server_Command_Line_Client.png" class="kg-image" alt="teacher_table_in_MySQL_Server_Command_Line_Client" width="267" height="175" loading="lazy"></figure><p>素晴らしい! では残りのテーブルを作成しましょう。</p><pre><code class="language-python">create_client_table = """
CREATE TABLE client (
  client_id INT PRIMARY KEY,
  client_name VARCHAR(40) NOT NULL,
  address VARCHAR(60) NOT NULL,
  industry VARCHAR(20)
);
 """

create_participant_table = """
CREATE TABLE participant (
  participant_id INT PRIMARY KEY,
  first_name VARCHAR(40) NOT NULL,
  last_name VARCHAR(40) NOT NULL,
  phone_no VARCHAR(20),
  client INT
);
"""

create_course_table = """
CREATE TABLE course (
  course_id INT PRIMARY KEY,
  course_name VARCHAR(40) NOT NULL,
  language VARCHAR(3) NOT NULL,
  level VARCHAR(2),
  course_length_weeks INT,
  start_date DATE,
  in_school BOOLEAN,
  teacher INT,
  client INT
);
"""


connection = create_db_connection("localhost", "root", pw, db)
execute_query(connection, create_client_table)
execute_query(connection, create_participant_table)
execute_query(connection, create_course_table)
</code></pre><p>これで 4 つの実体のために必要な、4 つのテーブルが作成できました。</p><p>ここで、テーブルの間の関係を定義し、さらに受講者と講座のテーブルの間の、多対多の関係を扱うために、もう 1 つテーブルを作成しなければなりません。 (詳細は<a href="https://towardsdatascience.com/designing-a-relational-database-and-creating-an-entity-relationship-diagram-89c1c19320b2">こちら</a>をご覧ください) 。</p><p>全く同じ方法でこれを行います:</p><pre><code class="language-python">alter_participant = """
ALTER TABLE participant
ADD FOREIGN KEY(client)
REFERENCES client(client_id)
ON DELETE SET NULL;
"""

alter_course = """
ALTER TABLE course
ADD FOREIGN KEY(teacher)
REFERENCES teacher(teacher_id)
ON DELETE SET NULL;
"""

alter_course_again = """
ALTER TABLE course
ADD FOREIGN KEY(client)
REFERENCES client(client_id)
ON DELETE SET NULL;
"""

create_takescourse_table = """
CREATE TABLE takes_course (
  participant_id INT,
  course_id INT,
  PRIMARY KEY(participant_id, course_id),
  FOREIGN KEY(participant_id) REFERENCES participant(participant_id) ON DELETE CASCADE,
  FOREIGN KEY(course_id) REFERENCES course(course_id) ON DELETE CASCADE
);
"""

connection = create_db_connection("localhost", "root", pw, db)
execute_query(connection, alter_participant)
execute_query(connection, alter_course)
execute_query(connection, alter_course_again)
execute_query(connection, create_takescourse_table)
</code></pre><p>これで、適切な制約、主キー (プライマリーキー) 、および外部キーの関係とともにテーブルが作成されました。</p><h3 id="--8">テーブルにデータを追加する</h3><p>次のステップではテーブルにレコードを追加します。execute_query を再度使用して、用意した SQL コマンドをサーバーに与えます。では再び講師のテーブルから始めましょう。</p><pre><code class="language-python">pop_teacher = """
INSERT INTO teacher VALUES
(1,  'James', 'Smith', 'ENG', NULL, '1985-04-20', 12345, '+491774553676'),
(2, 'Stefanie',  'Martin',  'FRA', NULL,  '1970-02-17', 23456, '+491234567890'), 
(3, 'Steve', 'Wang',  'MAN', 'ENG', '1990-11-12', 34567, '+447840921333'),
(4, 'Friederike',  'Müller-Rossi', 'DEU', 'ITA', '1987-07-07',  45678, '+492345678901'),
(5, 'Isobel', 'Ivanova', 'RUS', 'ENG', '1963-05-30',  56789, '+491772635467'),
(6, 'Niamh', 'Murphy', 'ENG', 'IRI', '1995-09-08',  67890, '+491231231232');
"""

connection = create_db_connection("localhost", "root", pw, db)
execute_query(connection, pop_teacher)
</code></pre><p>これは機能するでしょうか？ MySQL コマンドラインクライアント内でもう一度確認してみましょう:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/populated_teacher_table.png" class="kg-image" alt="populated_teacher_table" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/populated_teacher_table.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/populated_teacher_table.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/populated_teacher_table.png 1189w" sizes="(min-width: 720px) 720px" width="1189" height="300" loading="lazy"><figcaption>よさそうですね！</figcaption></figure><p>では残りのテーブルにデータを追加します。</p><pre><code class="language-python">pop_client = """
INSERT INTO client VALUES
(101, 'Big Business Federation', '123 Falschungstraße, 10999 Berlin', 'NGO'),
(102, 'eCommerce GmbH', '27 Ersatz Allee, 10317 Berlin', 'Retail'),
(103, 'AutoMaker AG',  '20 Künstlichstraße, 10023 Berlin', 'Auto'),
(104, 'Banko Bank',  '12 Betrugstraße, 12345 Berlin', 'Banking'),
(105, 'WeMoveIt GmbH', '138 Arglistweg, 10065 Berlin', 'Logistics');
"""

pop_participant = """
INSERT INTO participant VALUES
(101, 'Marina', 'Berg','491635558182', 101),
(102, 'Andrea', 'Duerr', '49159555740', 101),
(103, 'Philipp', 'Probst',  '49155555692', 102),
(104, 'René',  'Brandt',  '4916355546',  102),
(105, 'Susanne', 'Shuster', '49155555779', 102),
(106, 'Christian', 'Schreiner', '49162555375', 101),
(107, 'Harry', 'Kim', '49177555633', 101),
(108, 'Jan', 'Nowak', '49151555824', 101),
(109, 'Pablo', 'Garcia',  '49162555176', 101),
(110, 'Melanie', 'Dreschler', '49151555527', 103),
(111, 'Dieter', 'Durr',  '49178555311', 103),
(112, 'Max', 'Mustermann', '49152555195', 104),
(113, 'Maxine', 'Mustermann', '49177555355', 104),
(114, 'Heiko', 'Fleischer', '49155555581', 105);
"""

pop_course = """
INSERT INTO course VALUES
(12, 'English for Logistics', 'ENG', 'A1', 10, '2020-02-01', TRUE,  1, 105),
(13, 'Beginner English', 'ENG', 'A2', 40, '2019-11-12',  FALSE, 6, 101),
(14, 'Intermediate English', 'ENG', 'B2', 40, '2019-11-12', FALSE, 6, 101),
(15, 'Advanced English', 'ENG', 'C1', 40, '2019-11-12', FALSE, 6, 101),
(16, 'Mandarin für Autoindustrie', 'MAN', 'B1', 15, '2020-01-15', TRUE, 3, 103),
(17, 'Français intermédiaire', 'FRA', 'B1',  18, '2020-04-03', FALSE, 2, 101),
(18, 'Deutsch für Anfänger', 'DEU', 'A2', 8, '2020-02-14', TRUE, 4, 102),
(19, 'Intermediate English', 'ENG', 'B2', 10, '2020-03-29', FALSE, 1, 104),
(20, 'Fortgeschrittenes Russisch', 'RUS', 'C1',  4, '2020-04-08',  FALSE, 5, 103);
"""

pop_takescourse = """
INSERT INTO takes_course VALUES
(101, 15),
(101, 17),
(102, 17),
(103, 18),
(104, 18),
(105, 18),
(106, 13),
(107, 13),
(108, 13),
(109, 14),
(109, 15),
(110, 16),
(110, 20),
(111, 16),
(114, 12),
(112, 19),
(113, 19);
"""

connection = create_db_connection("localhost", "root", pw, db)
execute_query(connection, pop_client)
execute_query(connection, pop_participant)
execute_query(connection, pop_course)
execute_query(connection, pop_takescourse)
</code></pre><p>すばらしい！これで、Python のコマンドだけを使用して、MySQL の関係、制約、およびレコードを含むデータベースを、完全に作成しました。</p><p>データベースの作成について段階を追って理解しやすいように進めました。とはいえ、これまでの内容でそのすべてが 1 つの Python スクリプトだけで非常に簡単に記述でき、ターミナル内の 1 つのコマンドだけで実行できるということが確認できます。これは強力なものです。</p><h2 id="--9">データの読み取り</h2><p>これで機能するデータベースができ、それを扱う仕事ができるようになりました。データアナリストとして、あなたは働いている組織内の既存のデータベースと関わることがあるかもしれません。 既存のデータベースの外にデータを取り出す方法を知っていると、それを Python のデータパイプラインへ与えることができるようになるので、非常に役に立ちます。それこそが次に取り組もうとしていることです。</p><p>そのためには、もうひとつ関数が必要になります。今回は &nbsp;<a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-commit.html">cursor.commit()</a> ではなくて <a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-fetchall.html">cursor.fetchall()</a> を使用します。この関数を使用して、何も変更することなくデータベースからデータを読み取ります。</p><pre><code class="language-python">def read_query(connection, query):
    cursor = connection.cursor()
    result = None
    try:
        cursor.execute(query)
        result = cursor.fetchall()
        return result
    except Error as err:
        print(f"Error: '{err}'")
</code></pre><p>ここでもう一度、execute_query とよく似た方法でこれを実装します。この関数がどのように動作するのかを確認するために、シンプルなクエリを試してみましょう。</p><pre><code class="language-python">q1 = """
SELECT *
FROM teacher;
"""

connection = create_db_connection("localhost", "root", pw, db)
results = read_query(connection, q1)

for result in results:
  print(result)
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/read_query_result.png" class="kg-image" alt="read_query_result" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/read_query_result.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/read_query_result.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/read_query_result.png 1171w" sizes="(min-width: 720px) 720px" width="1171" height="454" loading="lazy"></figure><p>まさに期待していた結果が得られました。次のような講座と法人顧客のテーブルの<a href="https://www.w3schools.com/sql/sql_join.asp">結合 (JOIN)</a> を含む、より複雑なクエリでもこの関数は機能してくれます。</p><pre><code class="language-python">q5 = """
SELECT course.course_id, course.course_name, course.language, client.client_name, client.address
FROM course
JOIN client
ON course.client = client.client_id
WHERE course.in_school = FALSE;
"""

connection = create_db_connection("localhost", "root", pw, db)
results = read_query(connection, q5)

for result in results:
  print(result)
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/join_on_course_and_client_table.png" class="kg-image" alt="join_on_course_and_client_table" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/join_on_course_and_client_table.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/join_on_course_and_client_table.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/join_on_course_and_client_table.png 1188w" sizes="(min-width: 720px) 720px" width="1188" height="240" loading="lazy"></figure><p>とてもいいですね。</p><p>Python におけるデータパイプラインとワークフローでは、さらに役に立つようにするため、または操作するための準備を行うために、読み取ったデータを異なる形式で取得したいと考えることがあるかもしれません。</p><p>それができるようになる方法の例をいくつか見ていくことにしましょう。</p><h3 id="--10">出力をリストの形式に変換する</h3><pre><code class="language-python"># 空リストで初期化します
from_db = []

# results をループ処理してデータをリストの中に追加します

# タプルのリストを返します
for result in results:
  result = result
  from_db.append(result)
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/data_from_db_in_list_format.png" class="kg-image" alt="data_from_db_in_list_format" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/data_from_db_in_list_format.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/data_from_db_in_list_format.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/data_from_db_in_list_format.png 1387w" sizes="(min-width: 720px) 720px" width="1387" height="171" loading="lazy"></figure><h3 id="-2-">出力を 2 次元リストの形式に変換する</h3><pre><code class="language-python"># 2 次元リストを返します
from_db = []

for result in results:
  result = list(result)
  from_db.append(result)
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/data_from_db_in_list_of_lists_format.png" class="kg-image" alt="data_from_db_in_list_of_lists_format" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/data_from_db_in_list_of_lists_format.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/data_from_db_in_list_of_lists_format.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/data_from_db_in_list_of_lists_format.png 1376w" sizes="(min-width: 720px) 720px" width="1376" height="169" loading="lazy"></figure><h3 id="-pandas-dataframe-">出力を <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html">pandas の DataFrame</a> 形式に変換する</h3><p>Python を使用するデータアナリストにとって、<a href="https://pandas.pydata.org/pandas-docs/stable/index.html">pandas</a> は非のうちどころがなくて信頼できる昔からの友達です。データベースの出力をデータフレームに変換するのは非常に簡単で、さらにそこから無限の可能性が得られます！</p><pre><code class="language-python"># 2 次元リストを返し、さらにそこから pandas のデータフレームを作成します
from_db = []

for result in results:
  result = list(result)
  from_db.append(result)


columns = ["course_id", "course_name", "language", "client_name", "address"]
df = pd.DataFrame(from_db, columns=columns)
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/data_from_db_in_pandas_DataFrame_format.png" class="kg-image" alt="data_from_db_in_pandas_DataFrame_format" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/data_from_db_in_pandas_DataFrame_format.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/data_from_db_in_pandas_DataFrame_format.png 927w" sizes="(min-width: 720px) 720px" width="927" height="316" loading="lazy"></figure><p>うまくいけば、ここで目の前に広がっている可能性を見ることができるでしょう。 たった数行のコードで、処理できるすべてのデータを、リレーショナルデータベースがあるところから簡単に取り出すことができ、さらにそれを最先端のデータ分析パイプラインの中に取り込むことができます。これは本当に役に立つものです。</p><h2 id="--11">レコードを更新する</h2><p>データベースを管理している時に、既存のレコードの変更が必要な場合があります。このセクションではその方法について見ていきましょう。</p><p>例えば ILS が、既存の法人顧客のひとつである Big Business Federation から、オフィスを 23 Fingiertweg, 14534 Berlin に移転します、という通知を受けたとしましょう。この場合、データベースの管理者 (私たちのことです！) は、いくつか変更を行う必要があります。</p><p>幸い、SQL の <a href="https://dev.mysql.com/doc/refman/8.0/en/update.html">UPDATE</a> 文と一緒に execute_query 関数を使用することで、それができるようになります。</p><pre><code class="language-python">update = """
UPDATE client 
SET address = '23 Fingiertweg, 14534 Berlin' 
WHERE client_id = 101;
"""

connection = create_db_connection("localhost", "root", pw, db)
execute_query(connection, update)
</code></pre><p>ここでは、WHERE 句が非常に重要である点に注意してください。 WHERE 句無しでこのクエリを実行した場合、法人顧客テーブル内の全レコードのすべての住所が、23 Fingiertweg に更新されます。それは私たちが望んでいることではありません。</p><p>また、UPDATE クエリの中で 「WHERE client_id = 101」を使用していることにも注意してください。「WHERE client_name = 'Big Business Federation'」または「WHERE address = '123 Falschungstraße, 10999 Berlin'」も使用できますし、さらに「WHERE address LIKE '%Falschung%'」を使用することも可能でした。</p><p>ここで重要なことは、WHERE 句を使用すると、更新しようとしているひとつ (または複数) のレコードを一意的に特定できるということです。</p><h2 id="--12">レコードを削除する</h2><p><a href="https://dev.mysql.com/doc/refman/8.0/en/delete.html">DELETE</a> 文とともに execute_query 関数を使用することでレコードを削除できます。</p><p>リレーショナルデータベースで SQL を使用する場合は、DELETE 演算子の使用には注意が必要です。Windows とは違い、「削除してもよろしいでしょうか？」という警告ポップアップはありませんし、ごみ箱もありません。一度何かを削除してしまうと、本当になくなってしまうのです。</p><p>とはいえ、本当に物事を削除する必要がある時もあります。それでは、コーステーブルからコースを 1 つ削除して、その方法を見てみましょう。</p><p>まずはじめに、どういったコースがあるのかを思い出してみましょう。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/the_courses_we_have.png" class="kg-image" alt="the_courses_we_have" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/the_courses_we_have.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/the_courses_we_have.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/the_courses_we_have.png 1082w" sizes="(min-width: 720px) 720px" width="1082" height="558" loading="lazy"></figure><p>仮に、20 番のコース「Fortgeschrittenes Russisch」(これは「上級ロシア語」という意味です) がもうすぐ廃止になるので、それをデータベースから削除する必要があるとしましょう。</p><p>ここまで来れば、それを行う方法について驚かされることは全くないでしょう - SQL コマンドを文字列として保存し、それを主力の execute_query 関数に渡します。</p><pre><code class="language-python">delete_course = """
DELETE FROM course 
WHERE course_id = 20;
"""

connection = create_db_connection("localhost", "root", pw, db)
execute_query(connection, delete_course)
</code></pre><p>意図した結果となったか確認してみましょう:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/course_20_had_been_deleted.png" class="kg-image" alt="course_20_had_been_deleted" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/course_20_had_been_deleted.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/course_20_had_been_deleted.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/course_20_had_been_deleted.png 1068w" sizes="(min-width: 720px) 720px" width="1068" height="538" loading="lazy"></figure><p>期待していた通りに、「上級ロシア語」はなくなりました。</p><p>この方法は <a href="https://www.w3schools.com/sql/sql_ref_drop_column.asp">DROP COLUMN</a> コマンドを使用して列全体を削除したり、<a href="https://www.w3schools.com/sql/sql_ref_drop_table.asp">DROP TABLE</a> コマンドを使用してテーブル全体を削除する場合にも機能しますが、このチュートリアル内ではそれらは扱いません。</p><p>ですが、思い切ってそれらを試してみてください - 架空の学校用のデータベースから列やテーブルを削除してもかまいません。本番環境を手掛ける前にこれらのコマンドに慣れておくことをお勧めします。</p><h3 id="-crud-">おぉ、<a href="https://ja.wikipedia.org/wiki/CRUD">CRUD</a> です</h3><p>この時点で、永続的なデータ記憶装置の 4 つの主な操作を完了させることができるようになりました。</p><p>学習した操作を以下に挙げます:</p><ul><li>生成 (Create) - 全く新しいデータベース、テーブル、レコードを生成する</li><li>読み取り (Read) - データベースからデータを取り出し、複数の形式でそのデータを保存する</li><li>更新 (Update) - データベース内の既存のレコードに変更を加える</li><li>削除 (Delete) - 不要になったレコードを削除する</li></ul><p>これらは途方もなく便利で、実行可能なものです。</p><p>ここで学習を終える前に、もう 1 つとても便利なスキルを学びます。</p><h2 id="--13">リストからレコードを作成する</h2><p>テーブルを追加する際に、execute_query 関数内で SQL の <a href="https://dev.mysql.com/doc/refman/8.0/en/insert.html">INSERT</a> コマンドを使用して、データベースの中にレコードを書き込めることを確認しました。</p><p>私たちが SQL データベース を操作するのに Python を使用していることを考慮すると、Python の (<a href="https://www.w3schools.com/python/python_lists.asp">リスト</a>などの) データ構造を使用して、データベースの中に直接レコードを挿入できると便利です。</p><p>これは例えば、Python で記述したソーシャルメディアアプリ上のユーザーの活動履歴を保存したい場合、または作成した Wiki の中にユーザーからの入力を保存したい場合に役に立ちます。これについては考えられる限り多くの、実行できる用途があります。</p><p>この方法は、データベース全体を<a href="https://www.lucidchart.com/pages/er-diagrams">破損または破壊さえする</a>可能性のある、<a href="https://ja.wikipedia.org/wiki/SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3">SQL インジェクション</a>攻撃を防ぐのに役に立つので、データベースがいつでもユーザーに公開されている場合にはより安全です。</p><p>ではこれを行うために、これまでに使用していたより単純な <a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html">execute()</a> メソッドの代わりに、<a href="https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html">executemany()</a> メソッドを使用する関数を記述しましょう。</p><pre><code class="language-python">def execute_list_query(connection, sql, val):
    cursor = connection.cursor()
    try:
        cursor.executemany(sql, val)
        connection.commit()
        print("Query successful")
    except Error as err:
        print(f"Error: '{err}'")
</code></pre><p>これで関数ができたので、SQL コマンド ('sql') と、データベースの中に入れようとしている値を含むリスト ('val') を定義する必要があります。この値は、<a href="https://www.w3schools.com/python/python_tuples.asp">タプル</a>の<a href="https://www.w3schools.com/python/python_lists.asp">リスト</a>として保存されなければなりません。これは Python においてデータを保存するのに広く定着している方法です。</p><p>では次のようなコードを記述して、新しい 2 人の講師をデータベースに追加します:</p><pre><code class="language-python">sql = '''
    INSERT INTO teacher (teacher_id, first_name, last_name, language_1, language_2, dob, tax_id, phone_no) 
    VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
    '''
    
val = [
    (7, 'Hank', 'Dodson', 'ENG', None, '1991-12-23', 11111, '+491772345678'), 
    (8, 'Sue', 'Perkins', 'MAN', 'ENG', '1976-02-02', 22222, '+491443456432')
]
</code></pre><p>'sql' コードの中で、値のプレースホルダーとして '%s' を使用していることに注意してください。 Python の文字列に対する <a href="https://stackoverflow.com/questions/4288973/whats-the-difference-between-s-and-d-in-python-string-formatting/48660475">'%s' プレースホルダー</a>との類似はただの偶然です (そして実のところ、非常に紛らわしいです) 。Python の MySQL Connector では (文字列、整数、日付などの) すべてのデータ型に '%s' を使用します。</p><p>Python で <a href="https://stackoverflow.com/questions/4288973/whats-the-difference-between-s-and-d-in-python-string-formatting/48660475">'%d' プレースホルダー</a>を整数に対して使用することに慣れてしまっているために、そうしようとして混乱してしまっている人からの数多くの質問を、<a href="https://stackoverflow.com/questions/20818155/not-all-parameters-were-used-in-the-sql-statement-python-mysql/20818201">Stackoverflow</a> で見ることができます。'%d' は、ここでは機能しません - 値を追加しようとする列ごとに '%s' を使用する必要があります。</p><p>その後で、executemany 関数は 'val' リスト内の各タプルを取得し、プレースホルダーの代わりにその列に関連する値を挿入し、リストの中に含まれている各タプルに対して SQL コマンドを実行します。</p><p>これは適切にフォーマットしてさえいれば、複数行のデータに対して実行できます。この例では、説明のために新しい講師を 2 人だけ追加しますが、原則として、必要な数を追加できます。</p><p>では先に進んで、このクエリを実行してデータベースに講師を追加しましょう。</p><pre><code class="language-python">connection = create_db_connection("localhost", "root", pw, db)
execute_list_query(connection, sql, val)
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/add_teachers_to_our_database.png" class="kg-image" alt="add_teachers_to_our_database" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/add_teachers_to_our_database.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/add_teachers_to_our_database.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/add_teachers_to_our_database.png 1178w" sizes="(min-width: 720px) 720px" width="1178" height="526" loading="lazy"></figure><p>ILS へようこそ、Hank さんと Sue さん！</p><p>これはもう 1 つの非常に便利な関数で、Python スクリプトやアプリケーション内で生み出されたデータを取得して、それらをデータベースの中に直接入れることができます。</p><h2 id="--14">結論</h2><p>このチュートリアルでは多くの話題を取り扱いました。</p><p>Python と MySQL Connector を使用して、全く新しいデータベースを MySQL サーバー内に作成し、そのデータベースの中にテーブルを作成し、それらのテーブルの間の関係を定義し、テーブルにデータを追加する方法を学びました。</p><p>データベース内のデータを<a href="https://ja.wikipedia.org/wiki/CRUD">生成し、読み取り、更新し、削除する</a>方法を取り上げました。</p><p>既存のデータベースからデータを取り出し、それらを pandas の DataFrame に投入し、分析の準備を整え、<a href="https://www.pluralsight.com/guides/a-lap-around-the-pydata-stack">PyData スタック</a>によって提供されるすべての可能性を活用してさらに作業する方法を見てきました。</p><p>逆に、Python のスクリプトとアプリケーションによって生み出されたデータを取得し、そのデータを後の検索や操作のために安全に保存できるデータベースの中に書き込む方法についても学習しました。</p><p>Python と SQL を一緒に使用して、データをより効率的に操作できる方法を調べるために、このチュートリアルが役に立てたならば幸いです！</p><p><em>もし私のプロジェクトや仕事をさらに見てみたいならば、</em><a href="https://www.craigdoesdata.de/"><em>craigdoesdata.de</em></a><em> にある私のウェブサイトを訪問してください。このチュートリアルに関するフィードバックがあれば、直接</em><a href="https://www.craigdoesdata.de/contact.html"><em>私までご連絡ください</em></a><em> 。すべてのフィードバックを温かくお迎えいたします！</em></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/06/craigdoesdata_logo.png" class="kg-image" alt="craigdoesdata_logo" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/06/craigdoesdata_logo.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/06/craigdoesdata_logo.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/06/craigdoesdata_logo.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/06/craigdoesdata_logo.png 2156w" sizes="(min-width: 720px) 720px" width="2156" height="400" loading="lazy"></figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python の For ループ - For i in Range の使用例 ]]>
                </title>
                <description>
                    <![CDATA[ ループはあらゆるプログラミング言語の主要な制御構造のひとつで、Python においても例外ではありません。 この記事では、for ループを Python の range() 関数とともに使用する例をいくつか見ていきましょう。 Python の For ループ for ループは、一組の値についてコードの一部を繰り返し実行します。 Python の公式ドキュメント [https://docs.python.org/3/tutorial/controlflow.html#for-statements] で述べられているように、Python における for ループの動作は、JavaScript や C 言語などにおける動作と少し異なります。 for ループはイテレータ変数に、与えられたリスト、配列、文字列などの各値を設定し、イテレータ変数のそれぞれの値について for  ループのボディ内のコードを繰り返し実行します。 以下の例では、for ループを使用して配列内のそれぞれの数値を出力に表示します。 # for ループの例 for i in [1, 2, 3, 4]:     pr ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/python-for-loop-for-i-in-range-example/</link>
                <guid isPermaLink="false">626a7a501de492050fdb455d</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Sun, 15 May 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/04/606365729618b008528a99ae.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/python-for-loop-for-i-in-range-example/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python For Loop - For i in Range Example</a>
      </p><p>ループはあらゆるプログラミング言語の主要な制御構造のひとつで、Python においても例外ではありません。</p><p>この記事では、<code>for</code> ループを Python の <code>range()</code> 関数とともに使用する例をいくつか見ていきましょう。</p><h2 id="python-for-">Python の For ループ</h2><p><code>for</code> ループは、一組の値についてコードの一部を繰り返し実行します。</p><p><a href="https://docs.python.org/3/tutorial/controlflow.html#for-statements">Python の公式ドキュメント</a>で述べられているように、Python における <code>for</code> ループの動作は、JavaScript や C 言語などにおける動作と少し異なります。</p><p><code>for</code> ループはイテレータ変数に、与えられたリスト、配列、文字列などの各値を設定し、イテレータ変数のそれぞれの値について <code>for</code> ループのボディ内のコードを繰り返し実行します。</p><p>以下の例では、<code>for</code> ループを使用して配列内のそれぞれの数値を出力に表示します。</p><pre><code class="language-python"># for ループの例
for i in [1, 2, 3, 4]:
    print(i, end=", ") # 1, 2, 3, 4, を出力に表示
</code></pre><p>さらに、より複雑なロジックを <code>for</code> ループのボディに加えることもできます。次の例では、イテレータ変数の値に応じて簡単な計算を行い、その結果を出力に表示します。</p><pre><code class="language-python"># より複雑な例
for i in [1, 3, 5, 7, 9]:
    x = i**2 - (i-1)*(i+1)
    print(x, end=", ") # 1, 1, 1, 1, 1, を出力に表示
</code></pre><p><code>for</code> ループに連続した値の配列を使用する場合は、配列の中身をすべて記述する代わりに、Python の <code>range()</code> 関数を使用できます。</p><h2 id="python-range-">Python の Range 関数</h2><p><code>range()</code> 関数は、その引数に基づいた整数列を返します。<code>range()</code> 関数についての詳細な情報は、<a href="https://docs.python.org/3/library/stdtypes.html#range">Python の公式ドキュメント</a>を参照してください。</p><pre><code class="language-python">range(stop)
range(start, stop[, step])
</code></pre><p><code>start</code> 引数は、整数列の最初の値です。<code>range()</code> がただ 1 つの引数とともに呼び出される場合は、Python は <code>start = 0</code> であると見なします。</p><p><code>stop</code> 引数は、整数列の上限値です。重要なことですが、この上限値は整数列には含まれないことを理解しておきましょう。</p><p>以下の例では、デフォルトの値である <code>0</code> からスタートし、<code>5</code> より小さい整数で構成される整数列が得られます。</p><pre><code class="language-python"># 1 つの引数での例
for i in range(5):
    print(i, end=", ") # 0, 1, 2, 3, 4, を出力に表示
</code></pre><p>次の例では、<code>start = -1</code> を設定し、同じく <code>5</code> より小さい整数で構成するようにしています。</p><pre><code class="language-python"># 2 つの引数での例
for i in range(-1, 5):
    print(i, end=", ") # -1, 0, 1, 2, 3, 4, を出力に表示
</code></pre><p>オプションの <code>step</code> の値は、整数列の値の間の増加分を制御します。デフォルトの値は <code>step = 1</code> です。</p><p>最後の例では、<code>-1</code> から <code>5</code> までの整数列を使用し、<code>step = 2</code> に設定しています。</p><pre><code class="language-python"># 3 つの引数での例
for i in range(-1, 5, 2):
    print(i, end=", ") # -1, 1, 3, を出力に表示
</code></pre><h2 id="-">まとめ</h2><p>この記事では、Python の <code>for</code> ループと <code>range()</code> 関数について説明しました。</p><p><code>for</code> ループは、リスト、配列、文字列、または <code>range()</code> 内のすべての値について、コードのブロックを繰り返し実行します。</p><p><code>range()</code> を使用することにより、<code>for</code> ループをシンプルに記述できます。<code>range()</code> の <code>stop</code> の値は必ず指定する必要があり、また <code>range()</code> の <code>start</code> の値と、整数の間の <code>step</code> の値は変更できます。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python における空リストのチュートリアル – Python で空リストを作成する方法とは ]]>
                </title>
                <description>
                    <![CDATA[ Python で、空リストを効率的に作成する方法を学びたいと思われているならば、この記事がお役に立てるでしょう。 ここでは以下の内容について学べます:  * 角括弧 [] を使用して空リストを作成する方法。  * list() を使用して空リストを作成する方法。  * この 2 つの方法のユースケース。  * それらの効率について (片方はもう一方の方法よりも高速です！)。この記事では、timeit モジュールを使用して効率を比較します。 さあはじめましょう！✨ 🔹角括弧を使用して空リストを作成する 空の角括弧のペアを使用して、次のように空リストを作成できます: 💡ヒント: 空リストを変数に代入して、その変数を後のプログラムで使用するようにしています。 これを例えば次のように記述します: num = [] こちらで確認できるように、空リストの長さは 0 です: >>> num = [] >>> len(num) 0 空リストは偽値なので、ブール値コンテキストにおいて False と評価されます: >>> num = [] >>> bool(num) ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/python-empty-list-tutorial-how-to-create-an-empty-list-in-python/</link>
                <guid isPermaLink="false">626a7e641de492050fdb4570</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Sun, 08 May 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/04/Empty-list.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/python-empty-list-tutorial-how-to-create-an-empty-list-in-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Empty List Tutorial – How to Create an Empty List in Python</a>
      </p><p>Python で、空リストを効率的に作成する方法を学びたいと思われているならば、この記事がお役に立てるでしょう。</p><p><strong>ここでは以下の内容について学べます:</strong></p><ul><li>角括弧 <code>[]</code> を使用して空リストを作成する方法。</li><li><code>list()</code> を使用して空リストを作成する方法。</li><li>この 2 つの方法のユースケース。</li><li>それらの効率について (片方はもう一方の方法よりも高速です！)。この記事では、<code>timeit</code> モジュールを使用して効率を比較します。</li></ul><p><strong>さあはじめましょう！✨</strong></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/create-empty-list-with-square-brackets.png" class="kg-image" alt="create-empty-list-with-square-brackets" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/create-empty-list-with-square-brackets.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/create-empty-list-with-square-brackets.png 688w" width="688" height="303" loading="lazy"></figure><p><strong>💡ヒント:</strong> 空リストを変数に代入して、その変数を後のプログラムで使用するようにしています。</p><p>これを例えば次のように記述します:</p><pre><code>num = []
</code></pre><p>こちらで確認できるように、空リストの長さは <code>0</code> です:</p><pre><code>&gt;&gt;&gt; num = []
&gt;&gt;&gt; len(num)
0
</code></pre><p>空リストは<strong>偽値</strong>なので、ブール値コンテキストにおいて <code>False</code> と評価されます:</p><pre><code class="language-python">&gt;&gt;&gt; num = []
&gt;&gt;&gt; bool(num)
False
</code></pre><h3 id="--1">空リストに要素を追加する</h3><p><code>append()</code> メソッドと <code>insert()</code> メソッドを使用して、空リストに要素を追加できます:</p><ul><li><code>append()</code> はリストの末尾に要素を追加します。</li><li><code>insert()</code> はリストの特定のインデックスを選び、そこに要素を追加します。</li></ul><p>リストは空であるかどうかに応じて、真値か偽値のどちらかに評価されるため、次のように条件文内で使用できます:</p><pre><code class="language-python">if num:
	print("This list is not empty")
else:
	print("This list is empty")
</code></pre><p>このコードの実行結果は次のようになります:</p><pre><code class="language-python">This list is empty
</code></pre><p>リストが空なので、False と評価されていますね。</p><p>一般に:</p><ul><li>リストが空でなければ、<code>True</code> と評価され、上記の例では if 節が実行されます。</li><li>リストが空であれば、<code>False</code> と評価され、上記の例では else 節が実行されます。</li></ul><h3 id="--2">例:</h3><p>以下の例では空リストを作成し、それを変数 <code>num</code> に代入しています。次に for ループを使用して、最初は空だったリストに整数列の要素を追加します:</p><pre><code class="language-python">&gt;&gt;&gt; num = []
&gt;&gt;&gt; for i in range(3, 15, 2):
	num.append(i)
</code></pre><p>変数の値をチェックして、正常に要素が追加され、リストが空ではなくなったことを確認します:</p><pre><code class="language-python">&gt;&gt;&gt; num
[3, 5, 7, 9, 11, 13]
</code></pre><p><strong>💡ヒント:</strong> 空リストに最初の要素を加える際、通常は <code>append()</code> を使用しますが、<code>insert()</code> メソッドをインデックス <code>0</code> と一緒に呼び出すことでも、この要素を加えられます:</p><pre><code class="language-python">&gt;&gt;&gt; num = []
&gt;&gt;&gt; num.insert(0, 1.5) # 浮動小数点数の 1.5 をインデックス 0 に追加
&gt;&gt;&gt; num
[1.5]
</code></pre><h2 id="-list-">🔸list() コンストラクタを使用して空リストを作成する</h2><p>別の方法として、新しいリストオブジェクトを作成する型コンストラクタの <code>list()</code> を使用することで、空のリストを作成できます。</p><p><a href="https://docs.python.org/3/library/stdtypes.html#list">Python の公式ドキュメント</a>では次のように説明されています:</p><blockquote>If no argument is given, the constructor creates a new empty list, <code>[]</code>.</blockquote><p>(訳: もし引数が与えられなければ、コンストラクタは新しい空リスト <code>[]</code> を作成します。)</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/create-empty-list-with-list-method.png" class="kg-image" alt="create-empty-list-with-list-method" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/create-empty-list-with-list-method.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/create-empty-list-with-list-method.png 781w" sizes="(min-width: 720px) 720px" width="781" height="325" loading="lazy"></figure><p>💡<strong>ヒント:</strong> これにより、新しいリストオブジェクトがメモリ内に作成され、ここでは <code>list()</code> に引数を渡さなかったので空リストが作成されます。</p><p>これを例えば次のように記述します:</p><pre><code>num = list()
</code></pre><p>こちらで確認できるように、空リストの長さは <code>0</code> です:</p><pre><code>&gt;&gt;&gt; num = list()
&gt;&gt;&gt; len(num)
0
</code></pre><p>また、空リストは<strong>偽値</strong>です (ブール値コンテキストでは <code>False</code> と評価されます):</p><pre><code class="language-python">&gt;&gt;&gt; num = list()
&gt;&gt;&gt; bool(num)
False
</code></pre><h3 id="--3">例:</h3><p>この空リストは完全にリストとして機能するので、要素を加えることができます:</p><pre><code class="language-python">&gt;&gt;&gt; num = list()
&gt;&gt;&gt; for i in range(3, 15, 2):
	num.append(i)
</code></pre><p>こちらで確認できるように、上記のコードを実行すると空ではないリストが得られます:</p><pre><code class="language-python">&gt;&gt;&gt; num
[3, 5, 7, 9, 11, 13]
</code></pre><h2 id="--4">🔹ユースケース</h2><ul><li>通常、<code>list()</code> は文字列、辞書 (dictionary)、タプル (tuple) といった、既存のイテラブルからリストを作成するのに使用されます。</li><li>Python で空リストを作成するのに、角括弧 <code>[]</code> がよく使用されますが、それは構文がより簡潔で高速だからです。</li></ul><h2 id="--5">🔸効率性</h2><p>ちょっと待ってください！私はたった今 <code>[]</code> は <code>list()</code> よりも高速であるとお伝えしましたね...</p><p><strong>では速さはどれくらいでしょうか？</strong></p><p><a href="https://docs.python.org/3/library/timeit.html#module-timeit"><strong>timeit</strong></a> モジュールを使用してこれらの時間効率をチェックしてみましょう。</p><p>このモジュールを Python のプログラム内で使用するには、モジュールをインポートする必要があります:</p><pre><code class="language-python">&gt;&gt;&gt; import timeit
</code></pre><p>具体的には、次の構文を用いて呼び出せる、このモジュールの <a href="https://docs.python.org/3/library/timeit.html#timeit.timeit">timeit 関数</a> を使用します:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/05/timeit-function-syntax.png" class="kg-image" alt="timeit-function-syntax" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/05/timeit-function-syntax.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/05/timeit-function-syntax.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/05/timeit-function-syntax.png 1007w" sizes="(min-width: 720px) 720px" width="1007" height="316" loading="lazy"></figure><p>💡<strong>ヒント:</strong> テストしたいコードを何回も繰り返し実行することで、その瞬間に実行される、他の処理などの外部要因によって起こりうる時間差を減らしています。こうすることで、比較されるテストの結果がより信頼できるものになります。</p><p><strong>🚦では位置について ... 用意 ... ドン！</strong>テストコードとその実行結果についてこれから解説します:</p><p>まずは、モジュールをインポートします。</p><pre><code class="language-python">&gt;&gt;&gt; import timeit
</code></pre><p>次に各構文のテストを開始します。</p><h3 id="--6"><code>[]</code> のテスト:</h3><pre><code class="language-python">&gt;&gt;&gt; timeit.timeit('[]', number=10**4)
0.0008467000000109692
</code></pre><h3 id="list-"><code>list()</code> のテスト:</h3><pre><code class="language-python">&gt;&gt;&gt; timeit.timeit('list()', number=10**4)
0.002867799999989984
</code></pre><p><strong>💡ヒント:</strong> 実行時間を計ろうとしているコードは、シングルクォーテーション <code>''</code> またはダブルクォーテーション <code>""</code> で囲む必要があるということに注意してください。<code>timeit</code> 関数が返す計測時間は秒で表されます。</p><p>2 つの結果を比較してみましょう:</p><ul><li><code>[]</code>: <code>0.0008467000000109692</code></li><li><code>list()</code>: <code>0.002867799999989984</code></li></ul><p><code>[]</code> は <code>list()</code> よりもかなり速いことが確認できますね。このテストではおよそ <code>0.002</code> 秒の違いがありました:</p><pre><code class="language-python">&gt;&gt;&gt; 0.002867799999989984 - 0.0008467000000109692
0.0020210999999790147
</code></pre><p><strong>ここで次のような疑問をお持ちになることでしょう:</strong> 全く同じ処理を行っているのに、なぜ <code>list()</code> は <code>[]</code> ほど効率的ではないのでしょうか？</p><p>そうですね... <code>list()</code> がより遅いのは、関数の名前を検索し、呼び出してから、メモリ内にリストオブジェクトを作成する必要があるからです。それに対して、<code>[]</code> はメモリ内にリストを作成するためにそれほど多くの中間ステップを必要としない、「ショートカット」のようなものです。</p><p>この時間差はプログラムの性能にあまり影響を及ぼしませんが、どちらがより効率的であるかを、また背後でどのように動作しているのかを知っておくと便利です。</p><h2 id="--7">🔹まとめ</h2><p>空の角括弧のペア <code>[]</code> を使用して、もしくは引数が渡されない場合に空リストを作成する組み込み関数の型コンストラクタ <code>list()</code> を使用して、空リストを作成できるようになりましたね。</p><p>角括弧 <code>[]</code> は、空リストを高速に、より簡潔に作成できるので、Python ではよく用いられます。</p><p><strong>この記事があなたのお役に立ち、気に入っていただければ幸いです。</strong>これで、Python のプロジェクト内で空リストを作成できるようになりましたね。もしよろしければ私 (原著者) の<a href="https://www.udemy.com/user/estefania-cn/">オンライン講座</a>をチェックしてみてください。<a href="https://twitter.com/EstefaniaCassN">Twitter</a> のフォローもよろしくお願いします。⭐️</p><p>もしリストについてさらに深く掘り下げたい場合は、以下の記事も気に入っていただけるかもしれません:</p><ul><li><a href="https://www.freecodecamp.org/news/python-list-append-how-to-add-an-element-to-an-array-explained-with-examples/">Python List Append – How to Add an Element to an Array, Explained with Examples</a></li><li><a href="https://www.freecodecamp.org/news/the-python-sort-list-array-method-ascending-and-descending-explained-with-examples/">The Python Sort List Array Method – Ascending and Descending Explained with Examples</a></li><li><a href="https://www.freecodecamp.org/news/python-list-append-vs-python-list-extend/">Python List Append VS Python List Extend – The Difference Explained with Array Method Examples</a></li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python の剰余演算子 - Python における % 記号の意味するものとは？ (解決済み) ]]>
                </title>
                <description>
                    <![CDATA[ % 記号を見た時に、それが「パーセント」であると思われるかもしれませんが、Python や他の多くのプログラミング言語では、% 記号は違った意味をもちます。 Python において %  記号は剰余演算子と呼ばれています。この演算子は、左辺の項を右辺の項で除算した余りを返します。割り算の問題の余りを得るのに使用されます。 剰余演算子は +, -, /, *, **, // とともに算術演算子と見なされます。 基本的な構文は次のようになります: a % b 上の例では、a を b で割って、その余りを返します。今度は数値を使用した例を見てみましょう。 7 % 2 上の例の答えは 1 です。2 は 7 に 3 回収まり、1 が残ります。 以下の図は 7 / 2 と 7 % 2 を視覚的に表したものです ("R" は "remainder (余り)" ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/the-python-modulo-operator-what-does-the-symbol-mean-in-python-solved/</link>
                <guid isPermaLink="false">626a7b9d1de492050fdb4565</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Beginners ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Wed, 04 May 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/04/python-modulo-image.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/the-python-modulo-operator-what-does-the-symbol-mean-in-python-solved/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Python Modulo Operator - What Does the % Symbol Mean in Python? (Solved)</a>
      </p><p>% 記号を見た時に、それが「パーセント」であると思われるかもしれませんが、Python や他の多くのプログラミング言語では、% 記号は違った意味をもちます。</p><p>Python において <code>%</code> 記号は剰余演算子と呼ばれています。この演算子は、左辺の項を右辺の項で除算した余りを返します。割り算の問題の余りを得るのに使用されます。</p><p>剰余演算子は <code>+</code>, <code>-</code>, <code>/</code>, <code>*</code>, <code>**</code>, <code>//</code> とともに算術演算子と見なされます。</p><p>基本的な構文は次のようになります:</p><pre><code class="language-python">a % b
</code></pre><p>上の例では、<code>a</code> を <code>b</code> で割って、その余りを返します。今度は数値を使用した例を見てみましょう。</p><pre><code class="language-python">7 % 2
</code></pre><p>上の例の答えは <strong>1</strong> です。2 は 7 に 3 回収まり、<strong>1</strong> が残ります。</p><p>以下の図は <code>7 / 2</code> と <code>7 % 2</code> を視覚的に表したものです ("R" は "remainder (余り)" の略です)。右側のひとつのロゴ (緑色の矢印で指してあります) が割り算の問題の余りです。これが <code>7 % 2</code> の答えでもあります。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/remainder-diagram.png" class="kg-image" alt="remainder-diagram" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/remainder-diagram.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/04/remainder-diagram.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/remainder-diagram.png 1161w" sizes="(min-width: 720px) 720px" width="1161" height="784" loading="lazy"></figure><p>こちらに別の例を示します:</p><pre><code class="language-python">3 % 4
</code></pre><p>この例の答えは <strong>3</strong> になります。4 は 3 に一度も収まらないので、元の <strong>3</strong> が余ります。ここで何が起こっているのかを以下の図に示します。剰余演算子は割り算を行ってからその余りを返すということを忘れないようにしましょう。ここでの余りは 3 です。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/image-197.png" class="kg-image" alt="image-197" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/image-197.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/04/image-197.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/image-197.png 1051w" sizes="(min-width: 720px) 720px" width="1051" height="740" loading="lazy"></figure><h3 id="-">剰余演算子の使用例</h3><p>剰余演算子のよくある使い方のひとつは、偶数または奇数の判定です。以下のコードは、剰余演算子を使用して 0 から 10 の間の奇数をすべて表示します。</p><pre><code class="language-python">for number in range(1, 10):
    if(number % 2 != 0):
        print(number)
</code></pre><p>実行結果:</p><pre><code>1
3
5
7
9
</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python における改行と、print 関数で改行させずに出力する方法 ]]>
                </title>
                <description>
                    <![CDATA[ ようこそ! Python の改行文字は、行の終わりと新しい行の始まりを示すのに使用されます。コンソールに出力を表示したり、ファイルを扱おうとする場合には、改行文字の使用方法について知ることが非常に重要です。 この記事では、以下の内容を学ぶことができます:  * Python で改行文字を識別する方法  * 文字列内および print 文の中での改行文字の使用方法  * 文字列の最後に改行文字を追加させずに print 文を記述する方法 さあはじめましょう！ ✨ 🔹 改行文字とは Python での改行文字がこちらです: 改行文字は以下の 2 つの文字でできています:  * バックスラッシュ (訳注: 日本語フォントでは半角の￥記号として表示される場合があります) 。  * 文字 n 。 文字列内に改行文字がある場合は、それは現在の行がそこで終わり、その直後に新しい行が始まることを意味します: 改行文字は f-string (フォーマット済み文字列) 内でも使用できます: >>> print(f"Hello\nWorld!") 🔸 print 文内の改行文字 デ ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/python-new-line-and-how-to-python-print-without-a-newline/</link>
                <guid isPermaLink="false">623d9fa4fa0d9e053f44dd56</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Beginners ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Sun, 01 May 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/03/New-Line.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/python-new-line-and-how-to-python-print-without-a-newline/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python New Line and How to Python Print Without a Newline</a>
      </p><p><strong>ようこそ!</strong> Python の改行文字は、行の終わりと新しい行の始まりを示すのに使用されます。コンソールに出力を表示したり、ファイルを扱おうとする場合には、改行文字の使用方法について知ることが非常に重要です。</p><p><strong>この記事では、以下の内容を学ぶことができます:</strong></p><ul><li>Python で改行文字を識別する方法</li><li>文字列内および print 文の中での改行文字の使用方法</li><li>文字列の最後に改行文字を追加させずに print 文を記述する方法</li></ul><p><strong>さあはじめましょう！ ✨</strong></p><h2 id="-">🔹 改行文字とは</h2><p>Python での改行文字がこちらです:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/newline-image.png" class="kg-image" alt="newline-image" width="353" height="149" loading="lazy"></figure><p><strong>改行文字は以下の 2 つの文字でできています:</strong></p><ul><li>バックスラッシュ (訳注: 日本語フォントでは半角の￥記号として表示される場合があります) 。</li><li>文字 <code>n</code> 。</li></ul><p>文字列内に改行文字がある場合は、それは現在の行がそこで終わり、その直後に新しい行が始まることを意味します:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/newline-character-in-a-string.png" class="kg-image" alt="newline-character-in-a-string" width="540" height="245" loading="lazy"></figure><p>改行文字は <strong>f-string (フォーマット済み文字列)</strong> 内でも使用できます:</p><pre><code class="language-python">&gt;&gt;&gt; print(f"Hello\nWorld!")
</code></pre><h2 id="-print-">🔸 print 文内の改行文字</h2><p>デフォルトでは、print 文は文字列の最後に「こっそり」改行文字を加えます。</p><p>このようにして:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/newline-character-in-print-statement.png" class="kg-image" alt="newline-character-in-print-statement" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/newline-character-in-print-statement.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/newline-character-in-print-statement.png 918w" sizes="(min-width: 720px) 720px" width="918" height="303" loading="lazy"></figure><p><a href="https://docs.python.org/3/library/functions.html#print">Python の公式ドキュメント</a>に従って改行文字が追加されます。</p><p>Python に備わっている print 関数 の <code>end</code> パラメーターのデフォルト値は <code>\n</code> なので、改行文字が文字列にアペンドされています。</p><p><strong>💡 ヒント:</strong> アペンド (append) は 「末尾に付加する」を意味します。</p><p>関数の定義はこちらです:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/print-function-definition.png" class="kg-image" alt="print-function-definition" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/print-function-definition.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/04/print-function-definition.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/print-function-definition.png 1509w" sizes="(min-width: 720px) 720px" width="1509" height="79" loading="lazy"></figure><p><code>end</code> の値が <code>\n</code> なので、それが文字列の末尾に付加される点に注目してください。</p><p>print 文を 1 つだけ使用する場合は、出力に 1 行しか表示されないため、このことに気づくことができません。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/only-one-print-statement.png" class="kg-image" alt="only-one-print-statement" width="425" height="62" loading="lazy"></figure><p>ですが、いくつかの print 文を相次いで Python のスクリプト内で使用した場合には:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/several-print-statements.png" class="kg-image" alt="several-print-statements" width="394" height="128" loading="lazy"></figure><p>それぞれの行の末尾に <code>\n</code> が「こっそり」付加されているので、出力される文字列は別々の行に表示されます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/printed-in-separate-lines.png" class="kg-image" alt="printed-in-separate-lines" width="484" height="172" loading="lazy"></figure><h2 id="--1">🔹 改行せずに出力を表示する方法</h2><p><code>print</code> 関数の <code>end</code> パラメーターの値をカスタマイズすることで、このデフォルトの挙動を変えられます。</p><p>例として、デフォルトの値を使用する場合は:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/using-print-function-with-default-end-parameter.png" class="kg-image" alt="using-print-function-with-default-end-parameter" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/using-print-function-with-default-end-parameter.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/using-print-function-with-default-end-parameter.png 619w" width="619" height="170" loading="lazy"></figure><p>次のように出力が 2 行で表示されるのが確認できます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/printed-strings-in-two-lines.png" class="kg-image" alt="printed-strings-in-two-lines" width="360" height="127" loading="lazy"></figure><p>ですが、次のように <code>end</code> の値をカスタマイズして、<code>" "</code> に設定した場合は、</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/customize-end-parameter.png" class="kg-image" alt="customize-end-parameter" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/customize-end-parameter.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/customize-end-parameter.png 846w" sizes="(min-width: 720px) 720px" width="846" height="199" loading="lazy"></figure><p>文字列の末尾に改行文字の <code>\n</code> ではなくスペースが付加されるので、2 つの print 文の出力は 1 行で表示されます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/print-strings-in-one-line.png" class="kg-image" alt="print-strings-in-one-line" width="491" height="80" loading="lazy"></figure><p>このことを利用して、次の例のように一連の値を 1 行で表示できます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/print-a-sequence-of-values-in-one-line.png" class="kg-image" alt="print-a-sequence-of-values-in-one-line" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/print-a-sequence-of-values-in-one-line.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/print-a-sequence-of-values-in-one-line.png 834w" sizes="(min-width: 720px) 720px" width="834" height="333" loading="lazy"></figure><p>出力は次のように表示されます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/output-of-printing-a-sequence-of-values-in-one-line.png" class="kg-image" alt="output-of-printing-a-sequence-of-values-in-one-line" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/output-of-printing-a-sequence-of-values-in-one-line.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/output-of-printing-a-sequence-of-values-in-one-line.png 776w" sizes="(min-width: 720px) 720px" width="776" height="42" loading="lazy"></figure><p><strong>💡 ヒント:</strong> 条件文を加えて、最後の数にコンマが付かないようにしてあります。</p><p>同様に、次のようにしてイテラブル (訳注: for 文で繰り返し可能なオブジェクト) のすべての値を、同じ行内に表示するのにも使用できます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/print-statement-with-iterable.png" class="kg-image" alt="print-statement-with-iterable" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/print-statement-with-iterable.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/print-statement-with-iterable.png 813w" sizes="(min-width: 720px) 720px" width="813" height="271" loading="lazy"></figure><p>出力は次のように表示されます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/output-iterable-values.png" class="kg-image" alt="output-iterable-values" width="155" height="49" loading="lazy"></figure><h2 id="--2">🔸 ファイル内の改行文字</h2><p>改行文字 <code>\n</code> はファイル内にも存在しますが、隠されています。テキストファイルの中に改行があるとき、そこには改行文字 <code>\n</code> が挿入されています。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/newline-character-in-files.png" class="kg-image" alt="newline-character-in-files" width="455" height="207" loading="lazy"></figure><p>次のように <code>&lt;file&gt;.readlines()</code> でファイルを読み込むことで、これをチェックできます:</p><pre><code class="language-python">with open("names.txt", "r") as f:
    print(f.readlines())
</code></pre><p>出力は次のように表示されます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/04/output-file-readlines.png" class="kg-image" alt="output-file-readlines" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/04/output-file-readlines.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/04/output-file-readlines.png 866w" sizes="(min-width: 720px) 720px" width="866" height="74" loading="lazy"></figure><p>ご覧の通り、テキストファイルの最初の 3 行は、行の終わりが改行文字 <code>\n</code> になっており、「こっそり」改行してくれています。<br><strong>💡 ヒント:</strong> ファイルの最後の行だけは改行文字で終わっていないことに注目してください。</p><h2 id="--3">🔹 まとめ</h2><ul><li>Python の改行文字は <code>\n</code> です。改行文字はテキストの行の終わりを示すのに使用されます。</li><li><code>end = &lt;character&gt;</code> を使用することで、改行させずに文字列を出力に表示できます。ここで、<code>&lt;character&gt;</code> は行を分けるために使用される文字です。</li></ul><p><strong>この記事があなたのお役に立ち、気に入ってくだされば幸いです。</strong> これで、Python で改行文字を扱うことができるようになりましたね。</p><p>よろしければ私 (原著者) の<a href="https://www.udemy.com/user/estefania-cn/">オンライン講座</a>をチェックしてみてください。<a href="https://twitter.com/EstefaniaCassN">Twitter</a> のフォローもよろしくお願いします。 ⭐️</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 優れた技術講座の作り方: freeCodeCamp 動画講座作成ガイドライン ]]>
                </title>
                <description>
                    <![CDATA[ (翻案・編集: Yoko Matsuda [/japanese/news/author/yoko/]) この記事では、優れた技術講座動画の作り方を学びます。 私は freeCodeCamp.org の YouTube チャンネル (英語版) [https://www.youtube.com/freecodecamp]  を運営しています。freeCodeCamp.org の YouTube チャンネルでは、さまざまなコントリビューターによって作成された技術・プログラミングに関する講座の動画を投稿しています。多くの場合、この記事のガイドラインに沿った動画が freeCodeCamp チャンネルに適しています。 技術的な YouTube 動画講座を設計する方法 トピックの選択 あなたの講座に適したトピックを選ぶことが重要です。あなたが上手に教えられると思うトピックを選びましょう。 トピックについて豊富な経験があるとベストですが、事前の経験が必須というわけではありません。トピックについての知識が十分でないなら、そのトピックについてしっかり教えられるように多くのリサーチを行う必要があり ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-create-a-great-technical-course/</link>
                <guid isPermaLink="false">62143fa504a2da04fff984ac</guid>
                
                    <category>
                        <![CDATA[ YouTube ]]>
                    </category>
                
                    <category>
                        <![CDATA[ freeCodeCamp ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Mon, 18 Apr 2022 23:38:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/02/technicalcourse-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-create-a-great-technical-course/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Create a Great Technical Course</a>
      </p><p>(翻案・編集: <a href="https://www.freecodecamp.org/japanese/news/author/yoko/">Yoko Matsuda</a>)</p><p>この記事では、優れた技術講座動画の作り方を学びます。</p><p>私は <a href="https://www.youtube.com/freecodecamp">freeCodeCamp.org の YouTube チャンネル (英語版)</a> を運営しています。freeCodeCamp.org の YouTube チャンネルでは、さまざまなコントリビューターによって作成された技術・プログラミングに関する講座の動画を投稿しています。多くの場合、この記事のガイドラインに沿った動画が freeCodeCamp チャンネルに適しています。</p><h2 id="-youtube-">技術的な YouTube 動画講座を設計する方法</h2><h3 id="-">トピックの選択</h3><p>あなたの講座に適したトピックを選ぶことが重要です。あなたが上手に教えられると思うトピックを選びましょう。</p><p>トピックについて豊富な経験があるとベストですが、事前の経験が必須というわけではありません。トピックについての知識が十分でないなら、そのトピックについてしっかり教えられるように多くのリサーチを行う必要があります。</p><p>また、人気のあるトピックについての講座は人気のないトピックよりも多く視聴される傾向にあります。たとえ人気のないトピックの講座の方が優れた講座であってもです。</p><p>トピックを選ぶ上で人気だけが唯一の基準ではないものの、一つの判断要素として役立ちます。人気のあるトピックを見つけるには、<a href="https://trends.google.com/">Google Trends</a> を利用する、YouTube で検索して他のチャンネルで最も多く視聴されているトピックを調べるなどの方法があります。</p><p>freeCodeCamp チャンネルでは、比較的マイナーなトピックも含め、幅広い種類の講座を投稿しています。また、90 分から 24 時間の長さの包括的な講座を投稿しています。短い動画に適したトピックは freeCodeCamp チャンネルには適さない可能性が高いです。</p><p>freeCodeCamp チャンネルで投稿している動画には、大きく分けて下記 2 つのタイプがありますが、両方の要素を持つ場合もあります。</p><!--kg-card-begin: markdown--><ol>
<li>ある技術・プログラミング言語・フレームワークなどについての総合講座<br>
<em>例:</em>
<ul>
<li><a href="https://www.youtube.com/watch?v=rfscVS0vtbw">Learn Python - Full Course for Beginners (Python を学ぶ - 初心者向け完全講座)</a></li>
<li><a href="https://www.youtube.com/watch?v=VywxIQ2ZXw4">Postman Beginner's Course - API Testing (Postman 入門講座 - API テスト)</a></li>
<li><a href="https://www.youtube.com/watch?v=Qr4QMBUPxWo">Flask Course - Python Web Application Development (Flask 講座 - Python によるウェブアプリ開発)</a></li>
</ul>
</li>
<li>現実的、実用的なプロジェクトの開発についての講座<br>
<em>例:</em>
<ul>
<li><a href="https://www.youtube.com/watch?v=mDgEqoQUBgk">Create an Instagram Clone with React, Tailwind CSS, Firebase (React, Tailwind CSS, Firebase で作る Instagram クローン)</a></li>
<li><a href="https://www.youtube.com/watch?v=7rU_KyudGBY">Code a Discord Bot with JavaScript (JavaScript で作る Discord Bot)</a></li>
<li><a href="https://www.youtube.com/watch?v=Yg5zkd9nm6w">E-commerce Website With Django and Vue Tutorial (Django と Vue で作る EC サイトのチュートリアル)</a></li>
</ul>
</li>
</ol>
<!--kg-card-end: markdown--><h3 id="--1">講座のタイトルとサムネイルの作成</h3><p>講座のタイトルとサムネイルはとても重要です。</p><p>freeCodeCamp チャンネルで講座動画を公開する場合、タイトルとサムネイルは freeCodeCamp 側で作成します。その場合もご意見、ご提案は歓迎します。</p><p>講座を作成する前にタイトルを決めると良いでしょう。そうすることで、講座のトピックに集中しやすくなります。トピックにフォーカスした講座は視聴者にとっても理解しやすいものになります。</p><p>ほとんどの場合、長くあいまいなタイトルよりも、視聴者が学ぶ内容を明確に伝える簡潔なタイトルの講座の方がはるかに優れたパフォーマンスを発揮します。</p><p>タイトルには検索キーワードとなる語をできるだけ先頭近くに含めると良いでしょう。視聴者はプログラミング言語名を目に留めたり、検索したりする傾向があります。そのため、特定のプロジェクトを作成する内容の講座の場合、プログラミング言語の名前をプロジェクトのタイトルより前に配置すると良いでしょう。</p><p>また、視聴者は「チュートリアル」や「講座」といった用語を含めて検索することが多いため、タイトルにこれらを追加することも役に立ちます。</p><p>良いタイトルの例:</p><ul><li>「HTML Full Course - Build a Website Tutorial」(HTML 完全講座 - ウェブサイト制作チュートリアル)</li><li>「Native Android App Tutorial: WhatsApp Clone」(Android ネイティブアプリのチュートリアル: WhatsApp クローンの作成)</li><li>「OpenGL Course - Create 3D and 2D Graphics With C++」(OpenGL 講座 - C++ で作る 3D &amp; 2D グラフィックス)</li></ul><p>悪いタイトルの例:</p><ul><li>「How to build a social media app with Python (Django) - Setting up the project」(ソーシャルメディアアプリを Python (Django) で作成する方法 - プロジェクトのセットアップ)</li><li>「Creating a Flappy bird game for an Android phone」(Flappy bird ゲームを Android スマートフォン向けに作成)</li><li>「Number Systems」(記数法)</li></ul><h3 id="--2">視聴者層を見極める</h3><p>視聴者を念頭に置いてください。あなたの講座のターゲットは、初心者、中級者、上級者のどの視聴者でしょうか？</p><p>タイトルと講座内容の両方においてターゲット層をはっきりさせましょう。</p><h3 id="--3">講座全体の設計</h3><p>講座は導入部から開始します。導入部でははっきりと簡潔に、学習者にとってその講座が重要である理由を伝えるようにしましょう。</p><p>その講座を見るべき理由と、何が学べるのかが、視聴者にすぐ分かることが重要です。</p><p>導入部は短くし、できるだけ速やかに実際の講座内容に入ることも重要です。視聴者が目的としている情報を教える前に時間を長く取りすぎると、視聴者が引き返して別の講座を選ぶリスクが高まります。</p><p>導入部の長さについて厳密なルールはありませんが、動画の最初の 10 秒で講座の概要が説明されていると良いでしょう。</p><p>講座を設計する際には、印象的でクリエイティブな例と、必要に応じて図表も用いるようにしましょう。講座では必ず、何をどうやるかだけでなくなぜやるかが伝わるようにしてください。</p><p>最後に、動画の終わりでは必ず講座で学んだ重要な点の要約を提供しましょう。</p><h3 id="--4">スライドの設計</h3><p>スクリーン上のスライド、またはテキストを設計する際は、すべてのテキストをできるだけ大きくすることを心がけましょう。また、テキストと背景のコントラストを適切につけましょう。コントラストや配色が近すぎると読みづらくなります。特に視覚障害を持つ人々にとっては尚更です。</p><p>もし freeCodeCamp のデザインに合わせたければ <a href="https://design-style-guide.freecodecamp.org/">freeCodeCamp スタイルガイド</a>に記載されている色やフォントを使用しても構いません。</p><p>図表・画像・色は、動画内で話している内容を補完・補強するような使い方をしてください。</p><p>視聴者の興味を持続させるため、画面に表示されるものを頻繫に変化させるようにしてください。原則として、同じスライドや映像に 15 秒以上とどまらないようにしましょう。ただし、画面上でコードを入力している間はその限りではありません。</p><h3 id="--5">コードの準備</h3><p>講座で使用するコードは必ず前もって準備してください。特定のプロジェクトを作成する方法を教える講座の場合、特に重要です。</p><p>コードはクリーンで読みやすいものにしましょう。複雑にする理由がない限りは、視聴者が理解しやすいように、できるだけシンプルなコードを用いるようにしてください。</p><p>講座の内容によってはユーザーがダウンロード可能なスターターコードを作成すると良いでしょう。</p><p>完成形のコードはぜひ、ユーザーが入手可能な形で公開してください。GitHub での公開が一番シンプルで一般的な方法でしょう。</p><h2 id="youtube-">YouTube の技術講座を収録する方法</h2><p>収録の際に最も重要なことは以下の 3 つです。</p><ol><li>良いマイクを使用すること。</li><li>コードを画面に表示する場合は、できるだけ大きく表示すること。</li><li>解像度が 1080p (最低でも 720p) であること。</li></ol><p>音質が悪かったりコードの表示が小さいと、視聴者は動画の内容をよく見る前に視聴をやめてしまうでしょう。</p><p>収録の際、考慮すべき 3 つの分野があります。音声、映像、画面キャプチャーです。</p><h3 id="--6">講座の音声</h3><p>パソコンに内蔵されているマイクより、USB マイクの方がほぼ確実に良い音質で録音できます。もし予算に余裕があれば以下のマイクを検討してみてください。</p><ul><li><a href="https://amzn.to/2Fa3k77">Blue Yeti マイクロフォン</a></li><li><a href="https://amzn.to/2KjePgC">オーディオテクニカ AT2005USB マイクロフォン</a></li><li><a href="https://amzn.to/31vH5lO">Blue Snowball</a></li></ul><p>マイクを買う余裕がない場合は、スマートフォンでの録音を試してみましょう。機種によりますが、スマートフォンで録音された音声のほうがパソコンのマイクより音質が良いことがあります。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/image-65.png" class="kg-image" alt="image-65" width="2000" height="640" loading="lazy"><figcaption>マイク</figcaption></figure><p>音声がはっきりとクリアに聞こえるように録音しましょう。クリッピング、音声のひずみ、気が散るバックグラウンドノイズなどがないようにしてください。バックグラウンドノイズが目立つ場合は、必要に応じて編集や再録音を行ってください。</p><p>聞く人が引き込まれるような、自信に満ちた調子で話すことを心がけてください。自然なペースで、会話調で話しましょう。ぎこちない空白や「えー」「あー」のような言葉は避けましょう。</p><h3 id="--7">講座の動画</h3><p>必須ではありませんが、少なくとも動画の始めと終わりにはあなた自身がカメラに映るようにすると良いでしょう。</p><p>教えている人の姿が見えると視聴者は講座をより身近に感じることができます。</p><p>チュートリアル全体を通して自分を画面に映すのを好む人もいます。それもすばらしいです！</p><p>ここだけの話ですが、私がコードの入力中に自分を画面に表示しないのには理由があります。それは、私がたくさん失敗するからです。私は講座をスムーズに見せるために多くの編集を加えています。もし私が画面に表示されていたら、たくさんのジャンプカットが挟まれることになり、どれだけ多くの編集が必要かということと、実はコードを書くのが下手なことが視聴者にバレてしまうでしょう。😜</p><p>もし自分をカメラに映す場合、最も安く済む方法はパソコンのウェブカメラまたはスマートフォンのカメラを使用することです。多くのスマートフォンはかなり高品質の動画を撮影できます。</p><p>動画の品質を更に上げたい場合は以下のカメラを検討してみてください。 (訳注: 2021年6月時点の情報です。)</p><ul><li><a href="https://amzn.to/3vaYmyh">Canon EOS 80D デジタル一眼レフカメラ</a></li><li><a href="https://amzn.to/2WIjv6l">Canon EOS Rebel T6 デジタル一眼レフカメラ</a></li><li><a href="https://amzn.to/2ROmKIk">Panasonic LUMIX DMC-FZ1000</a></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/image-66.png" class="kg-image" alt="image-66" width="2000" height="564" loading="lazy"><figcaption>カメラ</figcaption></figure><p>動画を撮影する前に、撮影場所の背景を慎重に検討してください。画面の中に視聴者の気が散るものがないようにしましょう。</p><p>動画のフレーミング (構図) についても考慮しましょう。あなたが話している場面であれば、頭の上に余白を少しだけ空けると良いですが、空けすぎないようにしてください。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/image-97.png" class="kg-image" alt="image-97" width="1000" height="559" loading="lazy"><figcaption>動画の構図</figcaption></figure><h3 id="--8">画面の録画</h3><p>Windows の場合、画面録画を開始するショートカットキーがあります。Windows キー + Alt + R です。</p><p>macOS では、コンピューターにインストールされている QuickTime を用いて画面を録画できます。</p><p>あなたが話している映像と同時に画面の映像を表示したい場合は、無料の <a href="https://obsproject.com/">OBS Studio</a> で設定できます。</p><p>とはいえ、OBS はライブ動画での使用のみをおすすめします。画面の録画と話している映像の録画は個別に行った方が良いでしょう。後で 2 つの映像を編集ソフトウェアでまとめることができます。その方がより柔軟性が高くなります。</p><p>画面を録画する際には、常にメインの内容が画面のできるだけ多くのスペースを占めるようにしてください。意外なことに、プログラミングチュートリアル視聴者の約三分の一はスマートフォンで視聴しています。すべてのテキストをできるだけ大きく表示してください。適切な理由がない限り、ウィンドウは全画面表示してください。</p><p>フォントサイズに関する厳密なルールはありませんが、テキストがスマートフォンの画面上で読めるかどうかを常に考慮してください。</p><p>チュートリアルを収録する際には、モニターを 2 つ使用すると便利です。ひとつは動画用に録画して、もうひとつは台本や完成形のコードの表示用に使うと良いでしょう。</p><p>プログラミングチュートリアルの音声をより洗練された物にするために、一部の人が実践している秘密の方法があります。まずは、プログラミングチュートリアルを収録してください。次に、話したセリフを書き起こし、その文字起こしに細かな編集を加えて流れを改善します。</p><p>最後に、編集したセリフを再録音し、最初に録画した動画に追加します。チュートリアルで次に何を説明するかを考えながら話していたときよりも表現力豊かに、面白く話すことができるでしょう。</p><p>画面録画についての最後のアドバイスがこちらです。</p><ul><li>スライドショーの録画中はカーソルをウィンドウの外に置くようにしてください。</li><li>タスクバー、アプリのアイコン、通知、時計など不要なものはすべて隠してください。</li></ul><h2 id="youtube--1">YouTube の技術講座を編集する方法</h2><p>動画は必ず編集し、流れをよりスムーズにしたり、ミスをした部分をカットしたりしましょう。</p><p>ファンの音、咳、その他視聴者の気が散るような雑音は編集によって除去するか低減してください。連続的なハムノイズ (ブーンという音) や残響は編集ソフトウェアやプラグインで除去できます。</p><p>単純な編集ならば、Mac の iMovie や Windows のムービーメーカーでも可能です。しかし、これらのプログラムの機能は非常に限られたものです。</p><p>最も人気がある動画編集ソフトウェアの 2 つは、Premier Pro と Final Cut Pro でしょう。どちらも必要な機能のすべてを備えています。ただし、高額です。</p><p>無料の動画編集ソフトウェアには以下のような選択肢があります。</p><ul><li><a href="https://www.blackmagicdesign.com/products/davinciresolve/">DaVinci Resolve</a></li><li><a href="https://www.openshot.org/">OpenShot</a></li><li><a href="https://www.nchsoftware.com/videopad/">VideoPad</a></li><li><a href="https://www.lwks.com/">Lightworks</a></li></ul><p>動画編集にどのソフトウェアを使うか決めたらいくつかチュートリアルを見て基本機能を学ぶと良いでしょう。</p><p>できれば、ジャンプカットを使って編集するのは避けてください。ジャンプカットとは連続した動画からある部分を切り出すことで、そこがカットされたことが明らかに分かります。</p><p>ジャンプカットを避けるため以下 2 つの方法がよく使われます。</p><ol><li>カットが発生するところに画像や他のビデオクリップを配置する</li><li>カットの後にズームインして、カットが元から意図していたものであるように見せる</li></ol><h2 id="--9">技術講座の作成におけるその他のヒント</h2><ul><li>各講座の内容をできるだけ独立させるようにしてください。特に初心者向けの講座の場合は重要です。ソフトウェアをインストールしたり、依存関係を解決するところから、プロジェクトを完成させるまで、すべてのプロセスを見せるようにしましょう。視聴者はすでにやり方を知っている部分を飛ばして視聴できます。</li><li>講座には必ず実際の人間の声を使用してください。コンピューターによる合成音声を使用したり、ナレーション無しで音楽だけを使用することは避けてください。(訳注: 以下は英語版チャンネルへのコントリビューションを検討している場合) もし英語が非常に苦手であれば、あなたの母語で動画を作成することを検討するか、または英語のネイティブスピーカーにあなたの書いた台本を読んでもらうようにしましょう。</li><li>プログラミングチュートリアルに BGM は使用しないでください。気が散る原因となります。チュートリアルを見ながら音楽を聴きたい視聴者は各自で音楽をかけることができます。</li><li>講座の中であなたの年齢について言及しないでください。</li></ul><h2 id="--10">優れた技術講座の例</h2><p>以下は、参考になる優れた講座の例です。</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/41NOoEz3Tzc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 75%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="150" src="https://www.youtube.com/embed/mrHNSanmqQ4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid1"></iframe>
          </div>
        </div>
      </figure><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/4OaHB0JbJDI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid2"></iframe>
          </div>
        </div>
      </figure><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/P3qmqUZJ7l0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid3"></iframe>
          </div>
        </div>
      </figure><h2 id="--11">終わりに</h2><p>優れた講座を作成するには、単にその技術について詳しく知ること以上に練習も必要です。より多くの講座を作成すれば、より良い講座が作れるようになるでしょう。</p><p>この記事のガイドラインに沿った講座を作成し、freeCodeCamp.org チャンネルで公開することに興味がありましたら、下記担当者までメールにてお問い合わせください。</p><ul><li>日本語版チャンネル <br>担当: 松田 (日本語・英語対応可) yoko [at] freecodecamp [dot] org</li><li>英語版チャンネル<br>担当: Beau Carnes (英語対応のみ) beau [at] freecodecamp [dot] org</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ C++ のコードを Visual Studio Code 内でコンパイルする方法 ]]>
                </title>
                <description>
                    <![CDATA[ > 追記: この記事は こちら [https://blog.bolajiayodeji.com/how-to-compile-your-c-code-in-visual-studio-code] の私 (原著者) のブログで公開されました。 C++ は静的型付き言語で、フリーフォーマットな、(通常は) コンパイラ型の言語です。また、C++ は複数のプログラミングパラダイムが組み合わせられている、汎用の中級 (中水準) プログラミング言語です。 簡単に言えば、C++ は C 言語 がベースの、効率的で洗練された汎用プログラミング言語です。 このプログラミング言語は、ビャーネ・ストロヴストルップ [http://www.stroustrup.com/]によって、1979 年に開発されました。 C++ の主な機能のひとつにコンパイラがあります。コンパイラは、C++ のコードをコンパイルし、実行するのに用いられます。 > A compiler is a special program that processes statements written in a particular p ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-compile-your-c-code-in-visual-studio-code/</link>
                <guid isPermaLink="false">621b1bcd4b80e704f3eb6260</guid>
                
                    <category>
                        <![CDATA[ C++ ]]>
                    </category>
                
                    <category>
                        <![CDATA[ VSCODE ]]>
                    </category>
                
                    <category>
                        <![CDATA[ VISUAL STUDIO CODE ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Wed, 13 Apr 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/02/banner-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-compile-your-c-code-in-visual-studio-code/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to compile your C++ code in Visual Studio Code</a>
      </p><blockquote>追記: この記事は <a href="https://blog.bolajiayodeji.com/how-to-compile-your-c-code-in-visual-studio-code">こちら</a>の私 (原著者) のブログで公開されました。</blockquote><p>C++ は静的型付き言語で、フリーフォーマットな、(通常は) コンパイラ型の言語です。また、C++ は複数のプログラミングパラダイムが組み合わせられている、汎用の中級 (中水準) プログラミング言語です。</p><p>簡単に言えば、C++ は C 言語 がベースの、効率的で洗練された汎用プログラミング言語です。</p><p>このプログラミング言語は、<a href="http://www.stroustrup.com/">ビャーネ・ストロヴストルップ</a>によって、1979 年に開発されました。</p><p>C++ の主な機能のひとつにコンパイラがあります。コンパイラは、C++ のコードをコンパイルし、実行するのに用いられます。</p><blockquote>A compiler is a special program that processes statements written in a particular programming language like C++ and turns them into machine language or "code" that a computer's processor uses. (<a href="https://en.wikipedia.org/wiki/Compiler">引用元</a>)</blockquote><p>(訳: コンパイラは、C++ のような特定のプログラミング言語で書かれたプログラムを、コンピューターのプロセッサーが直接実行できる機械語や「コード」に変換 (コンパイル) する、特別なプログラムです。)</p><p>実は、C++ に関する課題でコンパイラを使う必要があったので、この記事を書くことにしました。周りの皆は <a href="http://www.codeblocks.org/">CodeBlocks IDE</a> または <a href="https://visualstudio.microsoft.com/">Visual Studio IDE</a> を使っていました。しかし私は、プログラミングには Visual Studio Code を使い慣れていました。</p><p>その後私は、VS Code エディターの内部で直接、C++ をコンパイルする方法を見つけようとしました。このような訳で、この記事ができあがりました。</p><p>この記事では、コンパイラを VS Code 内に設定する方法についてお伝えし、C++ のとっておきのリソースへのリンクをご紹介いたします。</p><h1 id="-">前提条件</h1><ul><li>C++ の事前知識<br>(この記事では、読者が C++ を学習しているか、学習を始めようとしているか、または単に記事を読むのを楽しんでいることを想定しています。この記事は C++ 入門チュートリアルではありません。ある程度 C++ を理解している必要があります。)</li><li>Visual Studio Code エディター<br><a href="https://code.visualstudio.com/#alt-downloads">こちら</a> からエディターをダウンロードし、以下の設定ドキュメントをご覧ください: <a href="https://code.visualstudio.com/docs/?dv=win">Windows 用</a>、 <a href="https://code.visualstudio.com/docs/?dv=linux64_deb">Linux 用</a>、<a href="https://code.visualstudio.com/docs/?dv=osx">Mac 用</a></li><li><strong>インターネット接続 (重要)</strong></li></ul><h3 id="--1"><strong>免責事項</strong></h3><p>この記事では Windows OS を使用します。ですが、他のオペレーティングシステムを使用しているユーザーにも参考となるリソースへのリンクをご紹介いたします。</p><p>さあはじめましょう！</p><h1 id="c-">C++ のコンパイラのダウンロードとインストール</h1><ul><li><a href="https://osdn.net/projects/mingw/">osdn.net/projects/mingw/</a> にアクセスしてから、「Windows mingw-get-setup.exe」をクリックして MinGW のセットアップファイルをダウンロードしてください。もしくは、<a href="https://osdn.net/projects/mingw/downloads/68260/mingw-get-setup.exe/">こちら</a> をクリックして Windows 向けのダウンロードサイトへ移動するか、<a href="https://brewinstall.org/Install-mingw-w64-on-Mac-with-Brew/">こちら</a>をクリックして Mac にインストールする方法をご確認ください。</li></ul><blockquote>MinGW, a contraction of "Minimalist GNU for Windows", is a minimalist development environment for native Microsoft Windows applications. (<a href="https://mingw.osdn.io/">引用元</a>)</blockquote><p>(訳: 「Minimalist GNU for Windows」の短縮形である MinGW は 、Microsoft Windows ネイティブアプリケーション用の最小限の開発環境です。)</p><ul><li>ダウンロードが終わったら、MinGW のインストールを開始して、「MinGW Installation Manager」が表示されるのを待ちます。</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/03/Capture1.png" class="kg-image" alt="Capture1" width="597" height="462" loading="lazy"></figure><ul><li>「MinGW Installation Manager」が表示されたら、<code>mingw32-gcc-g++</code> のチェックボックスをクリックしてから、「Mark for Installation」を選んでください。</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/03/Capture2.png" class="kg-image" alt="Capture2" width="993" height="466" loading="lazy"></figure><ul><li>上部の左端にあるメニューの中の、「Installation &gt; Apply Changes」をクリックしてください。</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/03/Capture3.png" class="kg-image" alt="Capture3" width="221" height="150" loading="lazy"></figure><ul><li>変更の適用が完了するのを待ちましょう。この処理は必ずインターネット接続が安定している状態で実行してください。</li></ul><h1 id="path-c-">PATH 環境変数を編集して C++ のコンパイラがあるディレクトリを含める</h1><blockquote>PATH is an environment variable on Unix-like operating systems, DOS, OS/2, and Microsoft Windows, specifying a set of directories where executable programs are located. In general, each executing process or user session has its own PATH setting. (<a href="https://en.wikipedia.org/wiki/PATH_(variable)">引用元</a> )</blockquote><p>(訳: PATH とは、Unix 系のオペレーティングシステムや DOS、OS/2、Microsoft Windows 上の環境変数であり、実行可能なプログラムが配置されている一連のディレクトリを特定するものです。一般的に、 実行中プロセスまたはユーザーセッションは独自の PATH 設定をもちます。)</p><p>インストール後、MinGW は <code>C:\MinGW\bin</code> にあります。ここで、このディレクトリを PATH 環境変数に含める必要があります。コンピューターを長年使用しているなら、その方法をすでにご存じかと思います。そうでない場合は、以下のガイドを参考にしてください:</p><ul><li>Windows OS 向けのガイドは<a href="https://www.computerhope.com/issues/ch000549.htm">こちら</a></li><li>Linux 向けのガイドは<a href="https://www.cyberciti.biz/faq/unix-linux-adding-path/">こちら</a></li><li>Mac OS 向けのガイドは<a href="https://hathaway.cc/2008/06/how-to-edit-your-path-environment-variables-on-mac/">こちら</a></li></ul><h1 id="code-runner-vs-code-">Code Runner 拡張機能を VS Code にインストール</h1><p>これでコンパイラが設定されたので、Code Runner をインストールしましょう。</p><p>Code Runner を使えば、次に示した多数の言語のコードスニペットやコードファイルを実行できます:</p><blockquote>C, C++, Java, JavaScript, PHP, Python, Perl, Perl 6, Ruby, Go, Lua, Groovy, PowerShell, BAT/CMD, BASH/SH, F# Script, F# (.NET Core), C# Script, C# (.NET Core), VBScript, TypeScript, CoffeeScript, Scala, Swift, Julia, Crystal, OCaml Script, R, AppleScript, Elixir, Visual Basic .NET, Clojure, Haxe, Objective-C, Rust, Racket, AutoHotkey, AutoIt, Kotlin, Dart, Free Pascal, Haskell, Nim, D, Lisp, Kit, and custom command.</blockquote><p>(訳注: 言語のリストは 2019 年 10 月時点の情報です。最新情報は <a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner">Code Runner ダウンロードページ</a> を参照してください。)</p><ul><li><a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner">こちら</a> をクリックしてダウンロードしてください。</li><li>または VS Code の marketplace の検索ボックスで検索してください。</li></ul><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/03/Capture4.png" class="kg-image" alt="Capture4" width="528" height="139" loading="lazy"></figure><ul><li>インストール後、 VS Code を再起動してください。</li><li>C++ のファイルを VS Code で開きます。ベーシックな hello world を出力するプログラムを以下に示します:</li></ul><pre><code class="language-c">#include &lt;iostream&gt;
using namespace std;
int main() 
{
    cout &lt;&lt; "Hello world!";
    return 0;
}
</code></pre><p>このファイルを <code>test.cpp</code> という名前で保存してください。</p><h1 id="code-runner-">Code Runner を使ってコードを実行</h1><ul><li>ショートカットキーの <code>Ctrl+Alt+N</code> を使用してコードを実行します。</li><li>または、F1 キーを押してから、Run Code を入力して選択してください。</li><li>あるいは、テキストエディターを右クリックして、エディターコンテキストメニューの中の Run Code をクリックしてください。</li></ul><p>コードが実行され、出力パネルに結果が表示されます。ショートカットキーの <code>Ctrl+Shift+U</code> を使用して出力パネルを開いてください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/03/Capture5.png" class="kg-image" alt="Capture5" width="1121" height="136" loading="lazy"></figure><h1 id="--2">実行中のコードを停止するには</h1><ul><li>ショートカットキーの <code>Ctrl+Alt+M</code> を使用します。</li><li>または、F1 キーを押してから、Stop Code Run を入力して選択してください。</li><li>あるいは、出力パネルを右クリックしてから、コンテキストメニューの中の Stop Run Code をクリックしてください。</li></ul><p>これで C++ の開発環境を VS Code の中で設定することができました！</p><h1 id="--3">終わりに</h1><p>もう一つ、アドバイスがあります。</p><p>初期設定では、VS Code の出力パネルは読み取り専用です。次のコードのように、ユーザーに入力を要求する場合:</p><pre><code class="language-c">#include &lt;iostream&gt;
using namespace std;

const double pi = 3.14159; 

void calculate()
{
  double area; 
  double radius;

  cout&lt;&lt;"Enter Radius: "&lt;&lt;endl; 
  cin&gt;&gt;radius;

  area = pi * radius * radius; 

  cout&lt;&lt;"area is: "&lt;&lt;area&lt;&lt;endl;
 }
 
int main()
{
  calculate(); 
  return 0;
}
</code></pre><p><code>Cannot edit in read-only terminal</code> と表示され、ターミナル (出力パネル) への入力ができません。<br>これを解決するには、手動で読み取りと書き込みを可能にする必要があります。</p><ul><li>VS Code のメニューから、File &gt; Preference &gt; Setting を選択してください。</li><li>左側のパネルの User タブの中の、extensions セクションを選択してください。</li><li>スクロールして「Run Code Configuration」 を探してください。</li><li>スクロールして <code>Run in Terminal</code> (組み込みターミナル内でコードを実行するかどうか) のチェックボックスを探し、ボックスにチェックを入れてください。</li></ul><p>もしくは</p><ul><li><code>setting.json</code> ファイル内に、以下の行を追加してください:</li></ul><pre><code>"code-runner.runInTerminal": true
</code></pre><p>これで設定が完了し準備が整いました :)</p><h1 id="c--1">C++ のリソース</h1><p>こちらに、C++ の学習を始めるのに役立つリソースをいくつか挙げてみます:</p><ul><li><a href="https://www.learncpp.com/">https://www.learncpp.com/</a></li><li><a href="https://www.codecademy.com/learn/learn-c-plus-plus">https://www.codecademy.com/learn/learn-c-plus-plus</a></li><li><a href="https://www.udemy.com/free-learn-c-tutorial-beginners/">https://www.udemy.com/free-learn-c-tutorial-beginners/</a></li><li><a href="https://www.sololearn.com/Course/CPlusPlus/">https://www.sololearn.com/Course/CPlusPlus/</a></li><li><a href="https://www.youtube.com/watch?v=vLnPwxZdW4Y">https://www.youtube.com/watch?v=vLnPwxZdW4Y</a></li><li><a href="https://www.tutorialspoint.com/cplusplus/cpp_useful_resources.htm">https://www.tutorialspoint.com/cplusplus/cpp_useful_resources.htm</a></li><li><a href="https://makeawebsitehub.com/learning-c/">https://makeawebsitehub.com/learning-c/</a></li></ul><h1 id="--4">謝辞</h1><ul><li><a href="https://osdn.net/projects/mingw/">MinGW Project</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner">Code Runner</a> by <a href="https://marketplace.visualstudio.com/publishers/formulahendry">Jun Han</a></li></ul><p>お読みくださいましてありがとうございました!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ VS Code の Live Server – ブラウザを自動的に再読込する拡張機能について ]]>
                </title>
                <description>
                    <![CDATA[ Visual Studio Code は最も人気のあるコードエディターの 1 つです。それは無料で、すっきりしたインターフェースを備えており、プログラミングをより簡単で楽しいものにする無数の拡張機能を備えています。 私 (原著者) はフロントエンドのウェブ開発者で、仕事中や私のYouTube チャンネルで VS Code を使用しています。これまで、コーディング中に再読込ボタンをクリックせずに自動的にブラウザーを再読込させる方法について、多くの人から質問がありました。 それは、Live Server と呼ばれる VS Code の便利な拡張機能を設定することで実現できます。この投稿では、それがどのように動作するのかについて、また VS Code エディターに Live Server をインストールして設定する方法について、詳しくお伝えします。 なぜ Live Server 拡張機能を使用すべきなのか？ 通常、コードを変更したり何か新しいものを記述した時には、ページを手動で更新して変更を確認する必要があります。 言い換えれば、毎日 100 回変更する場合、ブラウザーを 100 回 ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/vscode-live-server-auto-refresh-browser/</link>
                <guid isPermaLink="false">620cdd8f04a2da04fff980e1</guid>
                
                    <category>
                        <![CDATA[ VSCODE ]]>
                    </category>
                
                    <category>
                        <![CDATA[ VISUAL STUDIO CODE ]]>
                    </category>
                
                    <category>
                        <![CDATA[ WEB DEVELOPMENT ]]>
                    </category>
                
                    <category>
                        <![CDATA[ PRODUCTIVITY ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Wed, 23 Mar 2022 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/02/5f9c9837740569d1a4ca18cd.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/vscode-live-server-auto-refresh-browser/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">VS Code Live Server – How to Auto-Refresh Your Browser with this Simple Extension</a>
      </p><p>Visual Studio Code は最も人気のあるコードエディターの 1 つです。それは無料で、すっきりしたインターフェースを備えており、プログラミングをより簡単で楽しいものにする無数の拡張機能を備えています。</p><p>私 (原著者) はフロントエンドのウェブ開発者で、仕事中や私のYouTube チャンネルで VS Code を使用しています。これまで、コーディング中に再読込ボタンをクリックせずに自動的にブラウザーを再読込させる方法について、多くの人から質問がありました。</p><p>それは、Live Server と呼ばれる VS Code の便利な拡張機能を設定することで実現できます。この投稿では、それがどのように動作するのかについて、また VS Code エディターに Live Server をインストールして設定する方法について、詳しくお伝えします。</p><h2 id="-live-server-">なぜ Live Server 拡張機能を使用すべきなのか？</h2><p>通常、コードを変更したり何か新しいものを記述した時には、ページを手動で更新して変更を確認する必要があります。</p><p>言い換えれば、毎日 100 回変更する場合、ブラウザーを 100 回更新する必要があります。</p><p>ところが Live Server 拡張機能は、これを自動化してくれます。Live Server をインストールした後では、たったひとつのボタンで、自動化されたローカルホスト (localhost) を起動して、ブラウザー上で動作させることができます。</p><p>Live Server は、いったんコードを変更したり何か新しいものを記述すると、それを保存した後に、ブラウザーを自動的に更新します。これで、素早く自動的に変更を確認できるようになるでしょう。</p><p>もしよろしければ、以下のチュートリアル動画を見ることもできます:</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/jdWlGQdq1Q0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><h2 id="-vs-code-">最初に、VS Code をインストール</h2><p>すでに VS Code をパソコンにインストール済みであれば、この手順をスキップしてかまいません。そうでない場合は、<a href="https://code.visualstudio.com/">公式サイト</a>から VS Code をダウンロードできます。</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/VS-Code-Official-Website.png" class="kg-image" alt="VS-Code-Official-Website" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/VS-Code-Official-Website.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/02/VS-Code-Official-Website.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/02/VS-Code-Official-Website.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/VS-Code-Official-Website.png 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="967" loading="lazy"><figcaption>Visual Studio Code の公式サイト</figcaption></figure><p>VS Code のダウンロードとインストールが済んだら、次のようなウェルカム画面が表示されます:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/VS-Code-Welcome-Screen.png" class="kg-image" alt="VS-Code-Welcome-Screen" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/VS-Code-Welcome-Screen.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/02/VS-Code-Welcome-Screen.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/02/VS-Code-Welcome-Screen.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/VS-Code-Welcome-Screen.png 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1264" loading="lazy"></figure><p>左側にいくつかのアイコンが見えるはずです。その内の 1 つ (デバッグアイコンの下) が拡張機能のボタンです:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/VS-Code-Extensions-Icon.png" class="kg-image" alt="VS-Code-Extensions-Icon" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/VS-Code-Extensions-Icon.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/02/VS-Code-Extensions-Icon.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/02/VS-Code-Extensions-Icon.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/VS-Code-Extensions-Icon.png 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1264" loading="lazy"></figure><p>そのボタンをクリックすると、検索バーが現れます。そこに「live server」と入力してください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/Searchbar.png" class="kg-image" alt="Searchbar" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/Searchbar.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/Searchbar.png 774w" sizes="(min-width: 720px) 720px" width="774" height="1086" loading="lazy"></figure><p>多くの選択肢が表示され、システムに適したものをどれでも選ぶことができます。私は Ritwick Dey の Live Server を使用しているので、この例ではそれを選びます:</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/Live-Server-Extension.png" class="kg-image" alt="Live-Server-Extension" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/Live-Server-Extension.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/02/Live-Server-Extension.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/02/Live-Server-Extension.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/Live-Server-Extension.png 2000w" sizes="(min-width: 1200px) 1200px" width="2000" height="1271" loading="lazy"></figure><p>install ボタンをクリックすると拡張機能をインストールできます。</p><h2 id="-html-">新しい HTML ページを作成</h2><p>Live Server を起動するには、少なくとも 1 つの HTML ページを作成する必要があります。それを用意するには、左側に見えているいくつかのボタンの、一番上にあるファイルのアイコンのボタン (Explorer ボタン) をクリックしてから、New File ボタンをクリックし、index.html と入力してください:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/New-File-Icon.png" class="kg-image" alt="New-File-Icon" width="544" height="98" loading="lazy"><figcaption>プラス記号のついた New File アイコン (左から 2 番目)</figcaption></figure><h3 id="-">設定の問題と対処法</h3><p>HTML ページを作成して Live Server 拡張機能をインストールした後ならば、「Go Live」アイコンが下の青い領域 (ステータスバー) に表示されるはずです:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/Go-Live-Icon-button.png" class="kg-image" alt="Go-Live-Icon-button" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/Go-Live-Icon-button.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/02/Go-Live-Icon-button.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/Go-Live-Icon-button.png 1440w" sizes="(min-width: 720px) 720px" width="1440" height="842" loading="lazy"></figure><p>表示されていない場合は VS Code を再起動してください。それでうまくいくはずです。</p><p>「Go Live」ボタンをクリックすると、(ポート番号が指定された) ローカルホストがデフォルトのブラウザー上で起動するはずです。同じボタンをクリックすることで、Live Server をいつでも起動または停止できます。</p><p>もしこの段階に到達したならば、おめでとうございます！ :) これで Live Server と連動できます。その他にまだ問題がある場合は、<a href="https://www.freecodecamp.org/news/visual-studio-code-live-server-not-working/">こちらの投稿で詳細情報</a>をご確認ください。</p><h2 id="--1">結論</h2><p>この投稿が、VS Code の Live Server 拡張機能のインストールと設定に役立つことを願っています。ウェブ開発についてさらに学習したい場合は、私の <a href="https://www.youtube.com/channel/UC1EgYPCvKCXFn8HlpoJwY3Q">YouTube チャンネル</a>にお気軽にアクセスしてください。</p><p>お読みくださいましてありがとうございました!</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>
        
            <item>
                <title>
                    <![CDATA[ JavaScript のコーディングを始めるための 40 個のやさしい JS プロジェクト (初心者向け) ]]>
                </title>
                <description>
                    <![CDATA[ プロジェクトの構築こそ新しいプログラミング言語を学ぶ最善の方法です。 そこで、純粋な JavaScript、React、TypeScript を使用する、初心者にやさしい 40 個のプロジェクトチュートリアルの一覧を作成しました。 チュートリアルについてのアドバイスなのですが、ビデオを見て、プロジェクトを構築し、それを分解してから独自の方法で再構築してみてください。新しい機能を追加したり、違う方法を試したりしてください。 そうすることで、プロジェクトの概念をつかめたかどうかテストできます。 なお、以下のリストの各プロジェクトの上でクリックすれば、対応する記事のセクションまでジャンプできます。 純粋な JavaScript のプロジェクト  1.  カラーフリッパーの作り方  2.  カウンタの作り方  3.  レビューカルーセルの作り方  4.  レスポンシブなナビゲーションバーの作り方  5.  サイドバーの作り方  6.  モーダルの作り方  7.  FAQ ページの作り方  8.  レストランのメニューページの作り方  9.  背景動画の作り方  ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/javascript-projects-for-beginners/</link>
                <guid isPermaLink="false">61fe78c70e2ac404be731bad</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Beginners ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Sun, 13 Mar 2022 23:45:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/02/60599216687d62084bf6ac9e.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/javascript-projects-for-beginners/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">40 JavaScript Projects for Beginners – Easy Ideas to Get Started Coding JS</a>
      </p><p>プロジェクトの構築こそ新しいプログラミング言語を学ぶ最善の方法です。</p><p>そこで、純粋な JavaScript、React、TypeScript を使用する、初心者にやさしい 40 個のプロジェクトチュートリアルの一覧を作成しました。</p><p>チュートリアルについてのアドバイスなのですが、ビデオを見て、プロジェクトを構築し、それを分解してから独自の方法で再構築してみてください。新しい機能を追加したり、違う方法を試したりしてください。</p><p>そうすることで、プロジェクトの概念をつかめたかどうかテストできます。</p><p>なお、以下のリストの各プロジェクトの上でクリックすれば、対応する記事のセクションまでジャンプできます。</p><h2 id="-javascript-">純粋な JavaScript のプロジェクト</h2><ol><li><a href="#how-to-create-a-color-flipper">カラーフリッパーの作り方</a></li><li><a href="#how-to-create-a-counter">カウンタの作り方</a></li><li><a href="#how-to-create-a-review-carousel">レビューカルーセルの作り方</a></li><li><a href="#how-to-create-a-responsive-navbar">レスポンシブなナビゲーションバーの作り方</a></li><li><a href="#how-to-create-a-sidebar">サイドバーの作り方</a></li><li><a href="#how-to-create-a-modal">モーダルの作り方</a></li><li><a href="#how-to-create-a-faq-page">FAQ ページの作り方</a></li><li><a href="#how-to-create-a-restaurant-menu-page">レストランのメニューページの作り方</a></li><li><a href="#how-to-create-a-video-background">背景動画の作り方</a></li><li><a href="#how-to-create-a-navigation-bar-on-scroll">スクロールについてくるナビゲーションバーの作り方</a></li><li><a href="#how-to-create-tabs-that-display-different-content">いろいろなコンテンツを表示するタブの作り方</a></li><li><a href="#how-to-create-a-countdown-clock">カウントダウンタイマーの作り方</a></li><li><a href="#how-to-create-your-own-lorem-ipsum">独自のロレム・イプサム (Lorem ipsum) の作り方</a></li><li><a href="#how-to-create-a-grocery-list">食材リストの作り方</a></li><li><a href="#how-to-create-an-image-slider">画像スライダーの作り方</a></li><li><a href="#how-to-create-a-rock-paper-scissors-game">じゃんけんゲームの作り方</a></li><li><a href="#how-to-create-a-simon-game">サイモンゲームの作り方</a></li><li><a href="#how-to-create-a-platformer-game">プラットフォーマーゲームの作り方</a></li><li><a href="#how-to-create-doodle-jump-and-flappy-bird">Doodle Jump の作り方</a></li><li><a href="#how-to-create-doodle-jump-and-flappy-bird">Flappy Bird の作り方</a></li><li><a href="#how-to-create-seven-classic-games-with-ania-kubow">神経衰弱の作り方</a></li><li><a href="#how-to-create-seven-classic-games-with-ania-kubow">もぐらたたきの作り方</a></li><li><a href="#how-to-create-seven-classic-games-with-ania-kubow">四目並べの作り方</a></li><li><a href="#how-to-create-seven-classic-games-with-ania-kubow">Snake (蛇) ゲームの作り方</a></li><li><a href="#how-to-create-seven-classic-games-with-ania-kubow">インベーダーゲームの作り方</a></li><li><a href="#how-to-create-seven-classic-games-with-ania-kubow">フロッガーの作り方</a></li><li><a href="#how-to-create-seven-classic-games-with-ania-kubow">テトリスの作り方</a></li></ol><h2 id="react-">React プロジェクト</h2><ol><li><a href="#how-to-build-a-tic-tac-toe-game-using-react-hooks">React のフックを用いてまるばつゲームを作る方法</a></li><li><a href="#how-to-build-a-tetris-game-using-react-hooks">React のフックを用いてテトリスを作る方法</a></li><li><a href="#how-to-create-a-birthday-reminder-app">誕生日通知アプリの作り方</a></li><li><a href="#how-to-create-a-tours-page">ツアーページの作り方</a></li><li><a href="#how-to-create-an-accordion-menu">アコーディオンメニューの作り方</a></li><li><a href="#how-to-create-tabs-for-a-portfolio-page">ポートフォリオページ用のタブの作り方</a></li><li><a href="#how-to-create-a-review-slider">レビュースライダーの作り方</a></li><li><a href="#how-to-create-a-color-generator">カラージェネレーターの作り方</a></li><li><a href="#how-to-create-a-stripe-payment-menu-page">Stripe 風の決済メニューページの作り方</a></li><li><a href="#how-to-create-a-shopping-cart-page">買い物かごページの作り方</a></li><li><a href="#how-to-create-a-cocktail-search-page">カクテル検索ページの作り方</a></li></ol><h2 id="typescript-">TypeScript プロジェクト</h2><ol><li><a href="#how-to-build-a-quiz-app-with-react-and-typescript">React と TypeScript を用いてクイズアプリを作る方法</a></li><li><a href="#how-to-create-an-arkanoid-game-with-typescript">TypeScript を用いてアルカノイドゲームを作る方法</a></li></ol><h2 id="-javascript--1">純粋な JavaScript のプロジェクト</h2><p>JavaScript の基礎を学習されていない場合は、プロジェクトの構築を進める前に、<a href="https://www.youtube.com/watch?v=PkZNo7MFNFg">こちらのコース</a>のご視聴をお勧めします。</p><p>以下のスクリーンショットの多くは<a href="https://www.vanillajavascriptprojects.com/">こちらから引用しています</a>。</p><!--kg-card-begin: html--><h3 id="how-to-create-a-color-flipper">カラーフリッパーの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/color-flipper.png" class="kg-image" alt="color-flipper" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/color-flipper.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/color-flipper.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="445" loading="lazy"></figure><p>この <a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=421s">John Smilga のチュートリアル</a>では、ランダムに背景色を変化させる方法を学習します。これは DOM を扱い始めるのにふさわしいプロジェクトです。</p><p><a href="https://www.freecodecamp.org/news/whats-the-document-object-model-and-why-you-should-know-how-to-use-it-1a2d0bc5429d/#:~:text=Advantages,the%20page%20without%20a%20refresh.">Leonardo Maldonado の記事</a>の中で、DOM について学ぶことの重要性について、次のように述べられています:</p><blockquote>DOM を操作することによって、無限の可能性を手に入れます。ページの再読み込みをせずにデータを更新するアプリケーションを作成できます。また、再読み込みしないで、ユーザーが、ページのレイアウトを変更することでカスタマイズできるアプリケーションも作成できます。</blockquote><p>プロジェクトで扱う重要な概念:</p><ul><li>配列</li><li>document.getElementById()</li><li>document.querySelector()</li><li>addEventListener()</li><li>document.body.style.backgroundColor</li><li>Math.floor()</li><li>Math.random()</li><li>array.length</li></ul><p>プロジェクトの構築を開始する前に、John がすべてのプロジェクトの設定ファイルにアクセスする方法を説明している、<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=0s">導入部</a>をご覧になることをお勧めします。</p><!--kg-card-begin: html--><h3 id="how-to-create-a-counter">カウンタの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/counter.png" class="kg-image" alt="counter" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/counter.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/counter.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="599" loading="lazy"></figure><p>この John Smilga の<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=1825s">チュートリアル</a>では、カウンタの作り方を学習します。また、プロジェクトの中で、正か負かに応じて、表示されている数字の色を変えるために、条件文を記述します。</p><p>このプロジェクトは、より多く DOM を扱う練習を提供してくれます。また、ポモドーロタイマーのような他のプロジェクトの中で、この単純なカウンタを活用できます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>document.querySelectorAll()</li><li>forEach()</li><li>addEventListener()</li><li>currentTarget プロパティ</li><li>classList</li><li>textContent</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-review-carousel">レビューカルーセルの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/reviews.png" class="kg-image" alt="reviews" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/reviews.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/reviews.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="770" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=2644s">チュートリアル</a>では、レビューカルーセルの作り方を、ランダムにレビューを生み出すボタンを作成する方法と一緒に学習します。</p><p>e コマースサイトで顧客のレビューを表示したり、個人のポートフォリオページでクライアントの評価を表示するという重要な機能を、このカルーセルは備えています。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>オブジェクト</li><li>DOMContentLoaded</li><li>addEventListener()</li><li>array.length</li><li>textContent</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-responsive-navbar">レスポンシブなナビゲーションバーの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/navbar-1.png" class="kg-image" alt="navbar-1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/navbar-1.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/navbar-1.png 988w" sizes="(min-width: 720px) 720px" width="988" height="580" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=4289s">チュートリアル</a>では、 小さなデバイスの画面ではハンバーガーメニューを表示する、レスポンシブなナビゲーションバーの作り方を学習します。</p><p>ウェブ開発者になるにあたって、レスポンシブなウェブサイトの作り方の学習は、重要な部分です。レスポンシブであることは、一般的な機能として多くのウェブサイトで使用されています。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>document.querySelector()</li><li>addEventListener()</li><li>classList.toggle()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-sidebar">サイドバーの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/sidebar.png" class="kg-image" alt="sidebar" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/sidebar.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/sidebar.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="459" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=5181s">チュートリアル</a>では、アニメーションをともなうサイドバーの作り方を学習します。</p><p>これは、ご自身の個人用ウェブサイトに追加できる素晴らしい機能です。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>document.querySelector()</li><li>addEventListener()</li><li>classList.toggle()</li><li>classList.remove()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-modal">モーダルの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/modal.png" class="kg-image" alt="modal" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/modal.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/modal.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="463" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=5943s">チュートリアル</a>では、ウェブサイト上で、ユーザーに入力を促したり、何か特定のものを表示するために使用される、モーダルウィンドウの作り方を学習します。</p><p>モーダルウィンドウの良い例は、ユーザーがサイト内で変更を加えてから、それを保存せずに他のページへ移動しようとする場合です。変更を保存しなければ、その情報が失われてしまうことをユーザーに警告するために、モーダルウィンドウを表示できます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>document.querySelector()</li><li>addEventListener()</li><li>classList.add()</li><li>classList.remove()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-faq-page">FAQ ページの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/FAQ-section.png" class="kg-image" alt="FAQ-section" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/FAQ-section.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/FAQ-section.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="612" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=6506s">チュートリアル</a>では、よくある質問 (frequently asked questions - FAQ) ページの作り方を学習します。 事業についてユーザーを教え導いたり、質問の内容に関連のある検索結果を通じて、ウェブサイトへの往来を活発にします。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>document.querySelectorAll()</li><li>addEventListener()</li><li>forEach()</li><li>classList.remove()</li><li>classList.toggle()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-restaurant-menu-page">レストランのメニューページの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/menu.png" class="kg-image" alt="menu" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/menu.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/menu.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="469" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=8185s">チュートリアル</a>では、さまざまな食事のメニューを選別できる、レストランのメニューページの作り方を学習します。この楽しいプロジェクトは、map、reduce、filter のような高階関数について教えてくれます。</p><p><a href="https://www.freecodecamp.org/news/a-quick-intro-to-higher-order-functions-in-javascript-1a014f89c6b/">Yazeed Bzadough の記事</a>の中で、高階関数について次のように述べられています:</p><blockquote>高階関数の最大の利点は、再利用性が高いことです。</blockquote><p>プロジェクトで扱う重要な概念:</p><ul><li>配列</li><li>オブジェクト</li><li>forEach()</li><li>DOMContentLoaded</li><li>map、reduce、filter</li><li>innerHTML</li><li>includes メソッド</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-video-background">背景動画の作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/video-1.png" class="kg-image" alt="video-1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/video-1.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/video-1.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="463" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=11773s">チュートリアル</a>では、再生／一時停止機能を含んだ背景動画の作り方を学習します。これは多くのウェブサイトに見られる、一般的な機能です。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>document.querySelector()</li><li>addEventListener()</li><li>classList.contains()</li><li>classList.add()</li><li>classList.remove()</li><li>play()</li><li>pause()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-navigation-bar-on-scroll">スクロールについてくるナビゲーションバーの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/scroll-page.png" class="kg-image" alt="scroll-page" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/scroll-page.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/scroll-page.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="469" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=12765s">チュートリアル</a>では、スクロール中に、特定の高さに固定したままスライドする、ナビゲーションバーの作り方を学習します。</p><p>これは、多くのプロのウェブサイトに見られる、人気のある機能です。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>document.getElementById()</li><li>getFullYear()</li><li>getBoundingClientRect()</li><li>slice メソッド</li><li>window.scrollTo()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-tabs-that-display-different-content">いろいろなコンテンツを表示するタブの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/tabs-2.png" class="kg-image" alt="tabs-2" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/tabs-2.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/tabs-2.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="452" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=16575s">チュートリアル</a>では、シングルページアプリケーションを作る際に便利な、いろいろなコンテンツを表示できるタブの作り方を学習します。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>classList.add()</li><li>classList.remove()</li><li>forEach()</li><li>addEventListener()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-countdown-clock">カウントダウンタイマーの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/countdown.png" class="kg-image" alt="countdown" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/countdown.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/countdown.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="420" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=17933s">チュートリアル</a>では、新製品を発売しようとしている時や、e コマースサイトでの販売が終了しようとしている時に使用できる、カウントダウンタイマーの作り方を学習します。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>getFullYear()</li><li>getMonth()</li><li>getDate()</li><li>Math.floor()</li><li>setInterval()</li><li>clearInterval()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-your-own-lorem-ipsum">独自のロレム・イプサム (Lorem ipsum) の作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/lorem-ipsum.png" class="kg-image" alt="lorem-ipsum" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/lorem-ipsum.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/02/lorem-ipsum.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/02/lorem-ipsum.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/lorem-ipsum.png 1718w" sizes="(min-width: 720px) 720px" width="1718" height="868" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=21395s">チュートリアル</a>では、独自のロレム・イプサムの作り方を学習します。</p><p>ロレム・イプサムとは、ウェブサイト用のプレースホルダーテキストとして使われるものです。この楽しいプロジェクトで、創造力を発揮して独自のテキストを作成します。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>parseInt()</li><li>Math.floor()</li><li>Math.random()</li><li>isNaN()</li><li>slice メソッド</li><li>event.preventDefault()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-grocery-list">食材リストの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/grocery-list.png" class="kg-image" alt="grocery-list" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/grocery-list.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/grocery-list.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="672" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=22703s">チュートリアル</a>では、食材リストの項目を更新または削除する方法について学習し、単純な CRUD (Create - 生成、Read - 読み取り、Update - 更新、Delete - 削除) アプリケーションを作成します。</p><p>CRUD は、フルスタックアプリケーションの開発において重要な役割を演じます。それがなければ、お気に入りのソーシャルメディアプラットフォームで、投稿を編集または削除するといったようなこともできなくなってしまいます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>DOMContentLoaded</li><li>new Date()</li><li>createAttribute()</li><li>setAttributeNode()</li><li>appendChild()</li><li>filter()</li><li>map()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-an-image-slider">画像スライダーの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/image-slider-1.png" class="kg-image" alt="image-slider-1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/image-slider-1.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/image-slider-1.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="425" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=3PHXvlpOkf4&amp;t=28874s">チュートリアル</a>では、どのウェブサイトにも追加できる、画像スライダーの作り方を学習します。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>querySelectorAll()</li><li>addEventListener()</li><li>forEach()</li><li>if/else 文</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-rock-paper-scissors-game">じゃんけんゲームの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/rock-paper-scissors.png" class="kg-image" alt="rock-paper-scissors" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/rock-paper-scissors.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/rock-paper-scissors.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="555" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=jaVNP3nIAv0">チュートリアル</a>では、じゃんけんゲームの作り方を Tenzin が教えてくれます。この楽しいプロジェクトは、より多くの DOM を扱う練習を提供してくれます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>addEventListener()</li><li>Math.floor()</li><li>Math.random()</li><li>switch 文</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-simon-game">サイモンゲームの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/simon-game.png" class="kg-image" alt="simon-game" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/simon-game.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/simon-game.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="552" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=n_ec3eowFLQ">チュートリアル</a>では、定番のサイモンゲームの作り方を Beau Carnes が教えてくれます。 これは、ゲームの背後にあるいろいろなコンポーネントと、それらの各機能を構築する方法について考えさせてくれる、優れたプロジェクトです。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>querySelector()</li><li>addEventListener()</li><li>setInterval()</li><li>clearInterval()</li><li>setTimeout()</li><li>play()</li><li>Math.floor()</li><li>Math.random()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-platformer-game">プラットフォーマーゲームの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/platformer-game.png" class="kg-image" alt="platformer-game" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/platformer-game.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/platformer-game.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="545" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=w-OKdSHRlfA">チュートリアル</a>では、Frank Poth がプラットフォーマーゲームの作り方を教えてくれます。このプロジェクトでは、オブジェクト指向プログラミング (OOP) と、Model - View - Controller &nbsp;(MVC) ソフトウエアパターンについて紹介します。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>this キーワード</li><li>for ループ</li><li>switch 文</li><li>OOP の原則</li><li>MVC パターン</li><li>Canvas API</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-doodle-jump-and-flappy-bird">Doodle Jump と Flappy Bird の作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/doodle-jump.png" class="kg-image" alt="doodle-jump" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/doodle-jump.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/doodle-jump.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="558" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=8xPsg6yv7TU&amp;t=0s">一連のビデオ</a>では、Ania Kubow が <a href="https://www.youtube.com/watch?v=8xPsg6yv7TU&amp;t=114s">Doodle Jump</a> と <a href="https://www.youtube.com/watch?v=8xPsg6yv7TU&amp;t=3102s">Flappy Bird</a> の作り方について教えてくれます。</p><p>これらのゲームを作ることで、多くのポピュラーな JavaScript のメソッドを扱いながら、JavaScript についてさらに楽しく学習できます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>createElement()</li><li>forEach()</li><li>setInterval()</li><li>clearInterval()</li><li>removeChild()</li><li>appendChild()</li><li>addEventListener()</li><li>removeEventListener()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-seven-classic-games-with-ania-kubow">Ania Kubow と作る 7 つのクラシックゲーム</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/7-js-games.png" class="kg-image" alt="7-js-games" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/7-js-games.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/7-js-games.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="559" loading="lazy"></figure><p>Ania Kubow による<a href="https://www.youtube.com/watch?v=lhNdUVh3qCc">このコース</a>の中で、楽しみながら 7 つのゲームを作成できます:</p><ol><li><a href="https://www.youtube.com/watch?v=lhNdUVh3qCc&amp;t=115s">神経衰弱</a></li><li><a href="https://www.youtube.com/watch?v=lhNdUVh3qCc&amp;t=699s">もぐらたたき</a></li><li><a href="https://www.youtube.com/watch?v=lhNdUVh3qCc&amp;t=1187s">四目並べ</a></li><li><a href="https://www.youtube.com/watch?v=lhNdUVh3qCc&amp;t=1657s">Snake (蛇) ゲーム</a></li><li><a href="https://www.youtube.com/watch?v=lhNdUVh3qCc&amp;t=2590s">インベーダーゲーム</a></li><li><a href="https://www.youtube.com/watch?v=lhNdUVh3qCc&amp;t=3546s">フロッガー</a></li><li><a href="https://www.youtube.com/watch?v=lhNdUVh3qCc&amp;t=4778s">テトリス</a></li></ol><p>プロジェクトで扱う重要な概念:</p><ul><li>for ループ</li><li>onclick イベント</li><li>アロー関数</li><li>sort()</li><li>pop()</li><li>unshift()</li><li>push()</li><li>indexOf()</li><li>includes()</li><li>splice()</li><li>concat()</li></ul><h2 id="react--1">React のプロジェクト</h2><p>もし React の基礎にあまり詳しくなければ、以下のプロジェクトを進める前に<a href="https://www.youtube.com/watch?v=4UZrsTqkcW4">このコース</a>の視聴をお勧めします。</p><!--kg-card-begin: html--><h3 id="how-to-build-a-tic-tac-toe-game-using-react-hooks">React のフックを用いてまるばつゲームを作る方法</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/tic-tac-game-1.png" class="kg-image" alt="tic-tac-game-1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/tic-tac-game-1.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/tic-tac-game-1.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="569" loading="lazy"></figure><p>この <a href="https://www.freecodecamp.org/news/learn-how-to-build-tic-tac-toe-with-react-hooks/">freeCodeCamp の記事</a>の中で、Thomas Weibenfalk による Scrimba のまるばつゲームのチュートリアルについて、Per Harald Borgen が解説してくれます。Scimba の YouTube チャンネルでは、このプロジェクトの<a href="https://www.youtube.com/watch?v=Z5RbPrK4VqM">ビデオコース</a>を見ることができます。</p><p>これは React の基本に慣れ、フックを扱い始めるのにふさわしいプロジェクトです。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>useState()</li><li>import / export</li><li>JSX</li></ul><!--kg-card-begin: html--><h3 id="how-to-build-a-tetris-game-using-react-hooks">React のフックを用いてテトリスを作る方法</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/react-tetris-1.png" class="kg-image" alt="react-tetris-1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/react-tetris-1.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/react-tetris-1.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="559" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=ZGOaCxX8HIU">チュートリアル</a>では、Thomas Weibenfalk が React のフックと styled components を用いてテトリスを作る方法を教えてくれます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>useState()</li><li>useEffect()</li><li>useRef()</li><li>useCallback()</li><li>styled components</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-birthday-reminder-app">誕生日通知アプリの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/brithday-app.png" class="kg-image" alt="brithday-app" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/brithday-app.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/brithday-app.png 892w" sizes="(min-width: 720px) 720px" width="892" height="1138" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この <a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=438s">John Smilga のコース</a>では、誕生日通知アプリの作り方を学習します。これは React の基本に慣れ、フックを扱い始めるのにふさわしいプロジェクトです。</p><p>このプロジェクト用のスタートアップファイルを準備する方法についても、<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=214s">John のビデオ</a>を見ることをお勧めします。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>useState()</li><li>import / export</li><li>JSX</li><li>map()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-tours-page">ツアーページの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/tours-page.png" class="kg-image" alt="tours-page" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/tours-page.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/tours-page.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="902" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=1181s">チュートリアル</a>では、興味のないツアーをユーザーが削除できる、ツアーページの作り方を学習します。</p><p>このプロジェクトで、React のフックと async/await パターンを練習できます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>try...catch 文</li><li>async/await パターン</li><li>useEffect()</li><li>useState()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-an-accordion-menu">アコーディオンメニューの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/accordion-react.png" class="kg-image" alt="accordion-react" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/accordion-react.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/accordion-react.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="536" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=4642s">チュートリアル</a>では、質問と解答用のアコーディオンメニューの作り方を学習します。 モダンな方法でユーザーにコンテンツを表示する際に、このメニューが役に立ちます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>React Icons</li><li>useState()</li><li>map()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-tabs-for-a-portfolio-page">ポートフォリオページ用のタブの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/tabs-portfolio-page-react.png" class="kg-image" alt="tabs-portfolio-page-react" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/tabs-portfolio-page-react.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/tabs-portfolio-page-react.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="473" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=6726s">チュートリアル</a>では、模擬のポートフォリオページ用のタブを作る方法について学習します。タブは、シングルページアプリケーション内でさまざまなコンテンツを表示する際に役に立ちます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>async/await パターン</li><li>React Icons</li><li>useEffect()</li><li>useState()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-review-slider">レビュースライダーの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/react-slider.png" class="kg-image" alt="react-slider" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/react-slider.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/react-slider.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="554" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=8020s">チュートリアル</a>では、数秒ごとに新しいレビューにスライドする、レビュースライダーの作り方を学習します。</p><p>これは e コマースサイトやポートフォリオの中に組み込める、すばらしい機能です。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>React Icons</li><li>useEffect()</li><li>useState()</li><li>map()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-color-generator">カラージェネレーターの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/react-color-generator.png" class="kg-image" alt="react-color-generator" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/react-color-generator.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/react-color-generator.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="453" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=11329s">チュートリアル</a>では、カラージェネレーターの作り方を学習します。このプロジェクトは、フックと setTimeout を扱う練習を続けるのに適しています。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>setTimeout()</li><li>clearTimeout()</li><li>useEffect()</li><li>useState()</li><li>try...catch 文</li><li>event.preventDefault()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-stripe-payment-menu-page">Stripe 風の決済メニューページの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/stripe-page.png" class="kg-image" alt="stripe-page" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/stripe-page.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/stripe-page.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="472" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=20686s">チュートリアル</a>では、Stripe 風の決済メニューページの作り方を学習します。このプロジェクトは、React のコンポーネントを用いて、プロダクトランディングページをデザインする良い練習になるでしょう。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>React Icons</li><li>useRef()</li><li>useEffect()</li><li>useState()</li><li>useContext()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-shopping-cart-page">買い物かごページの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/shopping-cart-page.png" class="kg-image" alt="shopping-cart-page" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/shopping-cart-page.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/shopping-cart-page.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="666" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=24115s">チュートリアル</a>では、買い物かごの中の商品を更新したり削除できるページの作り方について学習します。このプロジェクトは、 useReducer フックの導入にも適しています。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>map()</li><li>filter()</li><li><code>&lt;svg&gt;</code> 要素</li><li>useReducer()</li><li>useContext()</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-a-cocktail-search-page">カクテル検索ページの作り方</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/cocktails-page.png" class="kg-image" alt="cocktails-page" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/cocktails-page.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/cocktails-page.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="580" loading="lazy"></figure><p><a href="https://react-projects.netlify.app/">https://react-projects.netlify.app/</a> からのスクリーンショット</p><p>この<a href="https://www.youtube.com/watch?v=a_7Z7C_JCyo&amp;t=27597s">チュートリアル</a>では、カクテル検索ページの作り方について学習します。このプロジェクトでは React Router の使い方を紹介しています。</p><p>React Router は、ウェブサイトにナビゲーションを作成して、about (アバウト) ページや連絡先ページのような、さまざまなコンポーネントに表示を変更する機能を提供してくれます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li><code>&lt;Router&gt;</code></li><li><code>&lt;Switch&gt;</code></li><li>useCallback()</li><li>useContext()</li><li>useEffect()</li><li>useState()</li></ul><h2 id="typescript--1">TypeScript プロジェクト</h2><p>もし TypeScript にあまり詳しくなければ、以下のプロジェクトを進める前に<a href="https://www.youtube.com/watch?v=gp5H0Vw39yw">このコース</a>の視聴をお勧めします。</p><!--kg-card-begin: html--><h3 id="how-to-build-a-quiz-app-with-react-and-typescript">React と TypeScript を用いてクイズアプリを作る方法</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/quiz-app.png" class="kg-image" alt="quiz-app" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/quiz-app.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/quiz-app.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="565" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=F2JCjVSZlG0">チュートリアル</a>では、Thomas Weibenfalk が React と TypeScript を用いたクイズアプリの作り方について教えてくれます。このプロジェクトは、TypeScript の基本を練習するよい機会になってくれます。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>React.FC</li><li>styled components</li><li>dangerouslySetInnerHTML</li></ul><!--kg-card-begin: html--><h3 id="how-to-create-an-arkanoid-game-with-typescript">TypeScript を用いてアルカノイドゲームを作る方法</h3><!--kg-card-end: html--><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/akrnoid-game.png" class="kg-image" alt="akrnoid-game" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/akrnoid-game.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/akrnoid-game.png 1000w" sizes="(min-width: 720px) 720px" width="1000" height="560" loading="lazy"></figure><p>この<a href="https://www.youtube.com/watch?v=7bejSTim38A">チュートリアル</a>では、Thomas Weibenfalk が TypeScript でアルカノイドゲームを作る方法について教えてくれます。これは TypeScript の基本概念を扱う練習の場を提供してくれる、優れたプロジェクトです。</p><p>プロジェクトで扱う重要な概念:</p><ul><li>型 (Type)</li><li>クラス</li><li>モジュール</li><li>HTMLCanvasElement</li></ul><p>純粋な JavaScript、React、TypeScript を使用する 40 個のプロジェクトチュートリアルをお楽しみください。</p><p>ハッピーコーディング！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ C 言語の三項演算子について ]]>
                </title>
                <description>
                    <![CDATA[ プログラマーは、長い if - else 条件文の代わりに三項演算子を使って、意思決定を行うことがあります。 三項演算子は 3 つの項をとります:  1. 最初の項は比較演算式です  2. 2 番目の項は、比較演算式が true の時に、結果として評価される式です  3. 3 番目の項は、比較演算式が false の時に、結果として評価される式です 三項演算子を、簡潔に記述する方法、または if-else 文を記述する方法として考えてみると役に立ちます。 例えば、まず次のように、単純な意思決定に if と  else を使用する場合を見てみましょう: int a = 10, b = 20, c; if (a < b) {     c ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/c-ternary-operator/</link>
                <guid isPermaLink="false">61f7cc900e2ac404be73145e</guid>
                
                    <category>
                        <![CDATA[ C PROGRAMMING ]]>
                    </category>
                
                    <category>
                        <![CDATA[ C ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Ternary Operator ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Wed, 09 Mar 2022 23:45:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/01/5f9c9db2740569d1a4ca3922.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/c-ternary-operator/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Ternary Operator in C Explained</a>
      </p><p>プログラマーは、長い <strong>if - else</strong> 条件文の代わりに<strong>三項演算子</strong>を使って、意思決定を行うことがあります。</p><p>三項演算子は 3 つの項をとります:</p><ol><li>最初の項は比較演算式です</li><li>2 番目の項は、比較演算式が true の時に、結果として評価される式です</li><li>3 番目の項は、比較演算式が false の時に、結果として評価される式です</li></ol><p>三項演算子を、簡潔に記述する方法、または if-else 文を記述する方法として考えてみると役に立ちます。 例えば、まず次のように、単純な意思決定に <strong><strong>if</strong></strong> と <strong><strong>else</strong></strong> を使用する場合を見てみましょう:</p><pre><code class="language-c">int a = 10, b = 20, c;

if (a &lt; b) {
    c = a;
}
else {
    c = b;
}

printf("%d", c);
</code></pre><p>この例では 10 行以上を使用していますが、そんなには必要はありません。三項演算子を使用することで、上記のプログラムを、たった 3 行のコードで記述できます。</p><h3 id="-"><strong>構文</strong></h3><p><code>condition ? value_if_true : value_if_false</code></p><p>この文は、<code>condition</code> を満たしている場合には <code>value_if_true</code> を評価し、そうでなければ <code>value_if_false</code> を評価します。</p><p>三項演算子を使用して書き換えられた上記の例がこちらです:</p><pre><code class="language-c">int a = 10, b = 20, c;

c = (a &lt; b) ? a : b;

printf("%d", c);
</code></pre><p>条件文 <code>a &lt; b</code> が true なので、<code>c</code> は <code>a</code> と同じ値に設定されます。</p><p><code>value_if_true</code> と <code>value_if_false</code> の項は、同じ型の値である必要があり、また、完全な文ではなく単純な式でなければならないことを覚えておいてください。</p><p>また、三項演算子は if-else 文のように入れ子にできます。次のコードについて考えてみましょう:</p><pre><code class="language-c">int a = 1, b = 2, ans;
if (a == 1) {
    if (b == 2) {
        ans = 3;
    } else {
        ans = 5;
    }
} else {
    ans = 0;
}
printf ("%d\n", ans);
</code></pre><p>上記のコードを、入れ子にした三項演算子を用いて書き換えた例がこちらです:</p><pre><code class="language-c">int a = 1, b = 2, ans;
ans = (a == 1 ? (b == 2 ? 3 : 5) : 0);
printf ("%d\n", ans);
</code></pre><p>両方の一連のコードの出力は、次のようになるはずです:</p><pre><code class="language-c">3
</code></pre> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ React、React Hooks、Axios を用いて CRUD 操作を実行する方法 ]]>
                </title>
                <description>
                    <![CDATA[ React を扱っていれば、API リクエストを理解し実装するのはとても難しいと感じられるでしょう。 そこでこの記事では、React 、React Hooks、React Router、Axios を用いて CRUD 操作を実装することにより、そのすべてがどのように機能するかを学んでいきます。 さあはじめましょう。 Node と npm をインストールする方法 まず最初に、Node をシステム内にインストールしましょう。私たちは主にそれを用いて JavaScript のコードを実行します。 Node をダウンロードするには、https://nodejs.org/en/ にアクセスしてください。 Node上に構築された Node パッケージマネージャー (npm) も必要です。それを用いることで、JavaScript アプリ用のパッケージをインストールできます。幸い、npm は Node に備わっているため、個別にダウンロードする必要はありません。 両方のダウンロードが終了したら、ターミナルかコマンドプロンプトを開いて、node -v と入力してみましょう。これでダウンロード ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-perform-crud-operations-using-react/</link>
                <guid isPermaLink="false">61f13a510e2ac404be7310fd</guid>
                
                    <category>
                        <![CDATA[ React ]]>
                    </category>
                
                    <category>
                        <![CDATA[ AXIOS ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Manabu Matsumoto ]]>
                </dc:creator>
                <pubDate>Sun, 06 Mar 2022 23:45:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/01/React-CRUD-Operations-using-React-and-React-Hooks.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-perform-crud-operations-using-react/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Perform CRUD Operations using React, React Hooks, and Axios</a>
      </p><p>React を扱っていれば、API リクエストを理解し実装するのはとても難しいと感じられるでしょう。</p><p>そこでこの記事では、React 、React Hooks、React Router、Axios を用いて CRUD 操作を実装することにより、そのすべてがどのように機能するかを学んでいきます。</p><p>さあはじめましょう。</p><h2 id="node-npm-"><strong>Node と npm をインストールする方法</strong></h2><p>まず最初に、Node をシステム内にインストールしましょう。私たちは主にそれを用いて JavaScript のコードを実行します。</p><p>Node をダウンロードするには、<a href="https://nodejs.org/en/">https://nodejs.org/en/</a> にアクセスしてください。</p><p>Node上に構築された <strong>Node パッケージマネージャー</strong> (npm) も必要です。それを用いることで、JavaScript アプリ用のパッケージをインストールできます。幸い、npm は Node に備わっているため、個別にダウンロードする必要はありません。</p><p>両方のダウンロードが終了したら、ターミナルかコマンドプロンプトを開いて、<code>node -v</code> と入力してみましょう。これでダウンロードした Node のバージョンを確認します。</p><h2 id="react-"><strong>React アプリケーションを作成する方法</strong></h2><p>次に、React アプリケーションを作成するには、ターミナル内で <code><strong><strong>npx create-react-app &lt;Your app name&gt;</strong></strong></code> と入力しますが、今回は <code>npx create-react-app react-crud</code> と入力します。</p><p>そうすると、パッケージのインストール状態が表示されます。</p><p>パッケージのインストールが終わったら、プロジェクトフォルダーへ移動して、<code>npm start</code> と入力します。</p><p>すると、次のような初期状態の React テンプレートが表示されます:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-124754.png" class="kg-image" alt="Screenshot-2021-07-24-124754" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/Screenshot-2021-07-24-124754.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/Screenshot-2021-07-24-124754.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/size/w1600/2022/01/Screenshot-2021-07-24-124754.png 1600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-124754.png 1846w" sizes="(min-width: 720px) 720px" width="1846" height="903" loading="lazy"><figcaption>初期状態の React テンプレート</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-124858.png" class="kg-image" alt="Screenshot-2021-07-24-124858" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/Screenshot-2021-07-24-124858.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/Screenshot-2021-07-24-124858.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-124858.png 1117w" sizes="(min-width: 720px) 720px" width="1117" height="670" loading="lazy"><figcaption>App.js ファイル</figcaption></figure><h2 id="react-semantic-ui-"><strong>React 用の Semantic UI パッケージをインストールする方法</strong></h2><p>次に、Semantic UI React パッケージをインストールしましょう。Semantic UI は、React 用に作られた UI (ユーザーインターフェース) ライブラリーです。Semantic UI には、テーブル、ボタンなどの機能をもつ多くの UI コンポーネントが、あらかじめ構築されています。</p><p>以下のコマンドを、ご自身のパッケージマネージャーに応じて入力すれば、Semantic UI をインストールできます。</p><figure class="kg-card kg-code-card"><pre><code class="language-bash">yarn add semantic-ui-react semantic-ui-css
</code></pre><figcaption>Yarn パッケージマネージャー用のコマンド</figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-bash">npm install semantic-ui-react semantic-ui-css
</code></pre><figcaption>NPM パッケージマネージャー用のコマンド</figcaption></figure><p>また、アプリケーションのメインエントリーファイルである index.js に、インストールしたライブラリーをインポートします。</p><figure class="kg-card kg-code-card"><pre><code class="language-js">import 'semantic-ui-css/semantic.min.css'
</code></pre><figcaption>こちらを index.js ファイル内へ貼り付けてください</figcaption></figure><h2 id="crud-"><strong>CRUD アプリケーションを構築する方法</strong></h2><p>では、React を用いて CRUD アプリケーションの構築を始めましょう。</p><p>最初に、アプリケーションにヘッダーを追加しましょう。</p><p>以下のようにして、App.js ファイル内にヘッダーを追加します:</p><figure class="kg-card kg-code-card"><pre><code>import './App.css';

function App() {
  return (
    &lt;div&gt;
      React Crud Operations
    &lt;/div&gt;
  );
}

export default App;
</code></pre><figcaption>アプリケーションにヘッダーを追加</figcaption></figure><p>次に、ヘッダーを中央に配置しましょう。</p><p>親要素 div の、className 属性の値を main に設定してください。それから、App.css ファイル内でフレックスボックスを使用して、ヘッダーを中央に配置しましょう。</p><figure class="kg-card kg-code-card"><pre><code>import './App.css';

function App() {
  return (
    &lt;div className="main"&gt;
      React Crud Operations
    &lt;/div&gt;
  );
}

export default App;
</code></pre><figcaption>App.js の中で 親要素 div の className 属性の値を main に設定</figcaption></figure><figure class="kg-card kg-code-card"><pre><code>.main{
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background-color: #212121;
  color: whitesmoke;
}
</code></pre><figcaption>App.css ファイル</figcaption></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-130340.png" class="kg-image" alt="Screenshot-2021-07-24-130340" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/Screenshot-2021-07-24-130340.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/Screenshot-2021-07-24-130340.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-130340.png 1234w" sizes="(min-width: 720px) 720px" width="1234" height="567" loading="lazy"></figure><p>これでヘッダーは完全に中央に配置されました。</p><p>見た目が少し良くなるように、ヘッダーをより目立たせて、かっこいいフォントを設定する必要があります。そのために、まずは以下のようにして見出しタグをヘッダーの周りに追加します:</p><pre><code>import './App.css';

function App() {
  return (
    &lt;div className="main"&gt;
      &lt;h2&gt;React Crud Operations&lt;/h2&gt;
    &lt;/div&gt;
  );
}

export default App;
</code></pre><p>次に Google Fonts からフォントをインポートしましょう。 <a href="https://fonts.google.com/">https://fonts.google.com/</a> にアクセスし、1 つ選択します。</p><p>お好みのフォントを選択してください。ただし、この記事の中では Montserrat フォントファミリーを使用します。</p><p>フォントを選択したら、次のようにして App.css ファイル内でフォントをインポートしてください:</p><pre><code>@import url('https://fonts.googleapis.com/css2?family=Montserrat&amp;display=swap');
</code></pre><p>では、ヘッダーのフォントを変更しましょう。</p><pre><code>    &lt;div className="main"&gt;
      &lt;h2 className="main-header"&gt;React Crud Operations&lt;/h2&gt;
    &lt;/div&gt;
</code></pre><p>このように、見出しタグの <code>className</code> 属性の値を、<code>main-header</code> に設定してください。</p><p>それから、App.css 内で、Montserrat フォントファミリーを追加してください:</p><pre><code>.main-header{
  font-family: 'Montserrat', sans-serif;
}
</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-132749-1.jpg" class="kg-image" alt="Screenshot-2021-07-24-132749-1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/Screenshot-2021-07-24-132749-1.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-132749-1.jpg 822w" sizes="(min-width: 720px) 720px" width="822" height="368" loading="lazy"></figure><p>これでヘッダーが変更されたのが確認できます。</p><h2 id="crud--1">CRUD コンポーネントを作成する方法</h2><p>これから、4 つの CRUD 操作 (Create - 生成、Read - 読み取り、Update - 更新、Delete - 削除) に対応するコンポーネントを作成してみましょう。</p><p>src フォルダーの中に、components というフォルダーを作成してください。それから、このフォルダーの中に create、read、update という 3 つのファイルを作成してください。delete については、コンポーネントを追加する必要はありません。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/Screenshot-2021-07-24-133242.png" class="kg-image" alt="Screenshot-2021-07-24-133242" width="334" height="107" loading="lazy"></figure><p>では、Create (生成) 操作を実装しましょう。</p><p>ただそのためには、Mock API を使用する必要があります。この API は作成したデータを偽のサーバーへ送信するもので、単に学習目的で使用します。</p><p>それでは、<a href="https://mockapi.io/">https://mockapi.io/</a> へアクセスし、アカウントを作成してください。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/mockAPI.jpg" class="kg-image" alt="mockAPI" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/mockAPI.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/mockAPI.jpg 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/mockAPI.jpg 1545w" sizes="(min-width: 720px) 720px" width="1545" height="865" loading="lazy"><figcaption>MockAPI</figcaption></figure><p>プラスボタンをクリックしてプロジェクトを作成してください。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/createProject.jpg" class="kg-image" alt="createProject" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/createProject.jpg 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/createProject.jpg 999w" sizes="(min-width: 720px) 720px" width="999" height="329" loading="lazy"><figcaption>プラスボタンをクリックして新しいプロジェクトを作成</figcaption></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/projectName.png" class="kg-image" alt="projectName" width="508" height="576" loading="lazy"></figure><p>プロジェクトの名前を入力して、CREATE ボタンをクリックしてください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/newResorce.png" class="kg-image" alt="newResorce" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/newResorce.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/newResorce.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/newResorce.png 1039w" sizes="(min-width: 720px) 720px" width="1039" height="370" loading="lazy"></figure><p>NEW RESOURCE ボタンをクリックして新しいリソースを作成してください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/resorceName.png" class="kg-image" alt="resorceName" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/resorceName.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/resorceName.png 741w" sizes="(min-width: 720px) 720px" width="741" height="892" loading="lazy"></figure><p>Resorce Name の欄へ名前を入力することを求められますので、使用する名前を入力してください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/resorceNameFakeData-1.png" class="kg-image" alt="resorceNameFakeData-1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/resorceNameFakeData-1.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/resorceNameFakeData-1.png 734w" sizes="(min-width: 720px) 720px" width="734" height="902" loading="lazy"></figure><p>name、avatar、createdAt などの余分な欄は必要ありませんので削除してください。その後で、CREATE をクリックしてください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/createFakeAPI.png" class="kg-image" alt="createFakeAPI" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/createFakeAPI.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/createFakeAPI.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/createFakeAPI.png 1023w" sizes="(min-width: 720px) 720px" width="1023" height="333" loading="lazy"></figure><p>これで、fakeData という名前の、偽の API を作成できました。</p><p>fakeData の上でクリックすると、新しいタブで API が開くのを確認できます。現在データベースは空です。</p><h2 id="create-">Create コンポーネント用のフォームを作成する方法</h2><p>次に、Semantic UI ライブラリーが提供しているフォームを使用してみましょう。</p><p>Semantic UI React へアクセスし、左側の検索バーの中で Form を検索してください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/SemanticReactForm.png" class="kg-image" alt="SemanticReactForm" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/SemanticReactForm.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/SemanticReactForm.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/SemanticReactForm.png 1219w" sizes="(min-width: 720px) 720px" width="1219" height="472" loading="lazy"></figure><p>このようなフォームが表示されるので、上部左側の Try it をクリックして、コードを取得してください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/FormCode.png" class="kg-image" alt="FormCode" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/FormCode.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/FormCode.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/FormCode.png 1194w" sizes="(min-width: 720px) 720px" width="1194" height="732" loading="lazy"></figure><p>コードをコピーしたら、次のように create.js ファイルの中に貼り付けてください:</p><pre><code>import React from 'react'
import { Button, Checkbox, Form } from 'semantic-ui-react'

const Create = () =&gt; (
    &lt;Form&gt;
        &lt;Form.Field&gt;
            &lt;label&gt;First Name&lt;/label&gt;
            &lt;input placeholder='First Name' /&gt;
        &lt;/Form.Field&gt;
        &lt;Form.Field&gt;
            &lt;label&gt;Last Name&lt;/label&gt;
            &lt;input placeholder='Last Name' /&gt;
        &lt;/Form.Field&gt;
        &lt;Form.Field&gt;
            &lt;Checkbox label='I agree to the Terms and Conditions' /&gt;
        &lt;/Form.Field&gt;
        &lt;Button type='submit'&gt;Submit&lt;/Button&gt;
    &lt;/Form&gt;
)

export default Create;
</code></pre><p>では、Create コンポーネントを App.js ファイルの中でインポートしてください。</p><pre><code>import './App.css';
import Create from './components/create';

function App() {
  return (
    &lt;div className="main"&gt;
      &lt;h2 className="main-header"&gt;React Crud Operations&lt;/h2&gt;
      &lt;div&gt;
        &lt;Create/&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  );
}

export default App;
</code></pre><p>そうすると次のようになります:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/formInit.png" class="kg-image" alt="formInit" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/formInit.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/formInit.png 882w" sizes="(min-width: 720px) 720px" width="882" height="579" loading="lazy"></figure><p>しかし、ここで問題が発生します – 項目が適切にそろえられていませんし、テキスト入力欄のラベルの色が黒になってしまっています。では、これを修正してみましょう。</p><p>create.js ファイルの中で、<strong>Form</strong> の className の値を <code>create-form</code> に設定してください。</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react'
import { Button, Checkbox, Form } from 'semantic-ui-react'

const Create = () =&gt; (
    &lt;Form className="create-form"&gt;
        &lt;Form.Field&gt;
            &lt;label&gt;First Name&lt;/label&gt;
            &lt;input placeholder='First Name' /&gt;
        &lt;/Form.Field&gt;
        &lt;Form.Field&gt;
            &lt;label&gt;Last Name&lt;/label&gt;
            &lt;input placeholder='Last Name' /&gt;
        &lt;/Form.Field&gt;
        &lt;Form.Field&gt;
            &lt;Checkbox label='I agree to the Terms and Conditions' /&gt;
        &lt;/Form.Field&gt;
        &lt;Button type='submit'&gt;Submit&lt;/Button&gt;
    &lt;/Form&gt;
)

export default Create;
</code></pre><figcaption>create.js</figcaption></figure><p>そして、 App.css ファイルの中に以下のクラスセレクターを追加してください:</p><figure class="kg-card kg-code-card"><pre><code>.create-form label{
  color: whitesmoke !important;
  font-family: 'Montserrat', sans-serif;
  font-size: 12px !important;
}
</code></pre><figcaption>App.css</figcaption></figure><p>このクラスセレクターはフォームの各欄のラベルを指定して、文字色を whitesmoke に設定しています。また、フォントを変更して、フォントサイズを大きくしています。</p><p>では、main という <code>className</code> のセレクターの中で、flex-direction プロパティーを追加してください。このプロパティーの値を column 方向に設定することで、<code>className</code> が main である要素の中の各要素が、垂直にそろえられます。</p><figure class="kg-card kg-code-card"><pre><code>.main{
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background-color: #212121;
  color: whitesmoke;
  flex-direction: column;
}
</code></pre><figcaption>App.css</figcaption></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/columnDirectionForm.png" class="kg-image" alt="columnDirectionForm" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/columnDirectionForm.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/columnDirectionForm.png 757w" sizes="(min-width: 720px) 720px" width="757" height="623" loading="lazy"></figure><p>これで、フォームの外観が改善されるのが確認できます。</p><p>では次に、フォーム欄からデータを取得してコンソールの中で表示してみましょう。そのために、React の <code>useState</code> フックを使用します。</p><p>create.js ファイルの中で、React から <code>useState</code> をインポートしてください。</p><pre><code>import React, { useState } from 'react';
</code></pre><p>その後で、First Name、Last Name、チェックボックス用のステート (state) を作成してください。各ステートは、空のストリングまたは false で初期化します。</p><pre><code>import React, { useState } from 'react';
import { Button, Checkbox, Form } from 'semantic-ui-react'

export default function Create() {
    const [firstName, setFirstName] = useState('');
    const [lastName, setLastName] = useState('');
    const [checkbox, setCheckbox] = useState(false);
    return (
        &lt;div&gt;
            &lt;Form className="create-form"&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;First Name&lt;/label&gt;
                    &lt;input placeholder='First Name' /&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;Last Name&lt;/label&gt;
                    &lt;input placeholder='Last Name' /&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;Checkbox label='I agree to the Terms and Conditions' /&gt;
                &lt;/Form.Field&gt;
                &lt;Button type='submit'&gt;Submit&lt;/Button&gt;
            &lt;/Form&gt;
        &lt;/div&gt;
    )
}
</code></pre><p>現在、Create コンポーネントは関数コンポーネントとして機能しているのが確認できます。フックは、関数コンポーネントの中だけで使用できるので、コンポーネントを関数コンポーネントに変更する必要があります。</p><p>では、First Name、Last Name、チェックボックスの各欄の値を、<code>setFirstName</code>、<code>setLastName</code>、<code>setCheckbox</code> プロパティーを用いて、それぞれ設定しましょう。</p><pre><code>&lt;input placeholder='First Name' onChange={(e) =&gt; setFirstName(e.target.value)}/&gt;

&lt;input placeholder='Last Name' onChange={(e) =&gt; setLastName(e.target.value)}/&gt;

&lt;Checkbox label='I agree to the Terms and Conditions' onChange={(e) =&gt; setCheckbox(!checkbox)}/&gt;
</code></pre><p>それから、firstName、lastName、checkbox の各ステートの値を取得してみましょう。</p><p>ここで、後から API へデータを送信するのに使用する、<code>postData</code> という名の関数を作成します。その関数の中に、次のコードを記述してください:</p><pre><code>const postData = () =&gt; {
        console.log(firstName);
        console.log(lastName);
        console.log(checkbox);
}
</code></pre><p>では、First Name、Last Name、チェックボックスの値をコンソールに出力してみましょう。</p><p>Submit ボタンに、onClick イベントを使用してこの関数を割り当てることによって、Submit ボタンを押したときに、この関数が呼び出されるようにします。</p><pre><code>&lt;Button onClick={postData} type='submit'&gt;Submit&lt;/Button&gt;
</code></pre><p>これまでの内容をすべて含んだ、<em>create</em> ファイル用のコードはこちらです:</p><pre><code>import React, { useState } from 'react';
import { Button, Checkbox, Form } from 'semantic-ui-react'

export default function Create() {
    const [firstName, setFirstName] = useState('');
    const [lastName, setLastName] = useState('');
    const [checkbox, setCheckbox] = useState(false);
    const postData = () =&gt; {
        console.log(firstName);
        console.log(lastName);
        console.log(checkbox);
    }
    return (
        &lt;div&gt;
            &lt;Form className="create-form"&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;First Name&lt;/label&gt;
                    &lt;input placeholder='First Name' onChange={(e) =&gt; setFirstName(e.target.value)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;Last Name&lt;/label&gt;
                    &lt;input placeholder='Last Name' onChange={(e) =&gt; setLastName(e.target.value)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;Checkbox label='I agree to the Terms and Conditions' onChange={(e) =&gt; setCheckbox(!checkbox)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Button onClick={postData} type='submit'&gt;Submit&lt;/Button&gt;
            &lt;/Form&gt;
        &lt;/div&gt;
    )
}
</code></pre><p>First name と Last name の中に値を入力して、チェックボックスにチェックを入れてください。その後で、Submit ボタンをクリックしてみてください。すると次のように、コンソールの中にデータがポップアップするのが確認できます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/dataPopUp.png" class="kg-image" alt="dataPopUp" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/dataPopUp.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2022/01/dataPopUp.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/dataPopUp.png 1270w" sizes="(min-width: 720px) 720px" width="1270" height="880" loading="lazy"></figure><h2 id="axios-api-mock-api-">Axios を使って API リクエストを Mock API へ送信する方法</h2><p>今度は、Axios を使ってフォームのデータを偽のサーバーへ送信してみましょう。</p><p>しかしまずは、Axios をインストールする必要があります。</p><p><code>npm i axios</code> と入力して、パッケージをインストールしてください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/AxiosInstall.png" class="kg-image" alt="AxiosInstall" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/AxiosInstall.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/AxiosInstall.png 896w" sizes="(min-width: 720px) 720px" width="896" height="416" loading="lazy"></figure><p>パッケージのインストールが終了したら、Create 操作の実装を開始しましょう。</p><p>Axios をファイルの先頭でインポートしてください。</p><figure class="kg-card kg-code-card"><pre><code>import axios from 'axios';
</code></pre><figcaption>Axios のインポート</figcaption></figure><p><code>postData</code> 関数の中で、Axios を使用して POST リクエストを送信します。</p><figure class="kg-card kg-code-card"><pre><code>const postData = () =&gt; {
        axios.post(`https://60fbca4591156a0017b4c8a7.mockapi.io/fakeData`, {
            firstName,
            lastName,
            checkbox
        })
}
</code></pre><figcaption>POST リクエストの送信</figcaption></figure><p>ご覧のとおり、ここでは axios.post を使用しています。また axios.post の中に、先ほど作成した API のエンドポイントがあります。その後に、中括弧で囲まれたフォームの項目があります。</p><p>Submit をクリックした時に、この関数が呼び出され API サーバーにデータを送信します。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/postFormData.png" class="kg-image" alt="postFormData" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/01/postFormData.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/01/postFormData.png 615w" width="615" height="432" loading="lazy"></figure><p>では、First Name と Last Name を入力して、チェックボックスにチェックを入れたら、Submit をクリックしてください。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/01/postedFormData.png" class="kg-image" alt="postedFormData" width="512" height="32" loading="lazy"></figure><p>その後で API を確認してみると、オブジェクトの中に囲まれた状態で、入力した First Name と Last Nameの値と、true という値に設定された checkbox を取得できます。</p><h2 id="read-update-delete-">Read 、Update、Delete の各操作を実装する方法</h2><p>Read (読み取り) 操作の実装を開始するために、Read ページを作成する必要があります。また、React Router パッケージを用いて、ユーザーをさまざまなページへ案内する必要があります。</p><p><a href="https://reactrouter.com/web/guides/quick-start">https://reactrouter.com/web/guides/quick-start</a> へアクセスし、また、<code>npm i react-router-dom@5</code> を使用してパッケージをインストールしてください。</p><p>パッケージのインストールが済んだら、React Router からコンポーネントをいくつかインポートします:</p><figure class="kg-card kg-code-card"><pre><code>import { BrowserRouter as Router, Route } from 'react-router-dom'
</code></pre><figcaption>React Router から Router と Route をインポート</figcaption></figure><p>App.js の中で、return の中のコードをすべて Router でラップしてください。基本的に Router の内部にあるものは、 React の中でルーティングを使用できることを意味しています。</p><pre><code>import './App.css';
import Create from './components/create';
import { BrowserRouter as Router, Route } from 'react-router-dom'

function App() {
  return (
    &lt;Router&gt;
      &lt;div className="main"&gt;
        &lt;h2 className="main-header"&gt;React Crud Operations&lt;/h2&gt;
        &lt;div&gt;
          &lt;Create /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/Router&gt;
  );
}

export default App;
</code></pre><p>現在、App.js は上のような状態でしょう。</p><p>では、return 内の Create を置き換えて、以下のコードを追加してください:</p><pre><code>import './App.css';
import Create from './components/create';
import { BrowserRouter as Router, Route } from 'react-router-dom'

function App() {
  return (
    &lt;Router&gt;
      &lt;div className="main"&gt;
        &lt;h2 className="main-header"&gt;React Crud Operations&lt;/h2&gt;
        &lt;div&gt;
          &lt;Route exact path='/create' component={Create} /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/Router&gt;
  );
}

export default App;
</code></pre><p>ここでは、Create をルートコンポーネントとして使用しています。Create のパスは '/create' に設定しました。そのため、<a href="http://localhost:3000/create">http://localhost:3000/create</a> へアクセスすれば、Create ページを見ることができます。</p><p>同じように、read と update に対応するルートが必要です。</p><pre><code>import './App.css';
import Create from './components/create';
import Read from './components/read';
import Update from './components/update';
import { BrowserRouter as Router, Route } from 'react-router-dom'

function App() {
  return (
    &lt;Router&gt;
      &lt;div className="main"&gt;
        &lt;h2 className="main-header"&gt;React Crud Operations&lt;/h2&gt;
        &lt;div&gt;
          &lt;Route exact path='/create' component={Create} /&gt;
        &lt;/div&gt;
        &lt;div style={{ marginTop: 20 }}&gt;
          &lt;Route exact path='/read' component={Read} /&gt;
        &lt;/div&gt;

        &lt;Route path='/update' component={Update} /&gt;
      &lt;/div&gt;
    &lt;/Router&gt;
  );
}

export default App;
</code></pre><p>上のコードで確認できるように、read と update のルートを作成します。</p><p>ここで <a href="http://localhost:3000/read">http://localhost:3000/read</a> へアクセスすると、Read ページが次のように表示されます:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/planeReadComponent.png" class="kg-image" alt="planeReadComponent" width="513" height="242" loading="lazy"><figcaption>Read ルート</figcaption></figure><p>また、<a href="http://localhost:3000/update">http://localhost:3000/update</a> では、次のように Update コンポーネントが表示されます:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/planeUpdateComponent.png" class="kg-image" alt="planeUpdateComponent" width="505" height="281" loading="lazy"></figure><h3 id="read-">Read 操作</h3><p>Read 操作には、テーブルコンポーネントが必要です。そのため、React Semantic UI にアクセスし、ライブラリーが提供しているテーブルを、以下のように使用してください。</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react';
import { Table } from 'semantic-ui-react'
export default function Read() {
    return (
        &lt;div&gt;
            &lt;Table singleLine&gt;
                &lt;Table.Header&gt;
                    &lt;Table.Row&gt;
                        &lt;Table.HeaderCell&gt;Name&lt;/Table.HeaderCell&gt;
                        &lt;Table.HeaderCell&gt;Registration Date&lt;/Table.HeaderCell&gt;
                        &lt;Table.HeaderCell&gt;E-mail address&lt;/Table.HeaderCell&gt;
                        &lt;Table.HeaderCell&gt;Premium Plan&lt;/Table.HeaderCell&gt;
                    &lt;/Table.Row&gt;
                &lt;/Table.Header&gt;

                &lt;Table.Body&gt;
                    &lt;Table.Row&gt;
                        &lt;Table.Cell&gt;John Lilki&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;September 14, 2013&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;jhlilk22@yahoo.com&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;No&lt;/Table.Cell&gt;
                    &lt;/Table.Row&gt;
                    &lt;Table.Row&gt;
                        &lt;Table.Cell&gt;Jamie Harington&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;January 11, 2014&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;jamieharingonton@yahoo.com&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;Yes&lt;/Table.Cell&gt;
                    &lt;/Table.Row&gt;
                    &lt;Table.Row&gt;
                        &lt;Table.Cell&gt;Jill Lewis&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;May 11, 2014&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;jilsewris22@yahoo.com&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;Yes&lt;/Table.Cell&gt;
                    &lt;/Table.Row&gt;
                &lt;/Table.Body&gt;
            &lt;/Table&gt;
        &lt;/div&gt;
    )
}
</code></pre><figcaption>read.js</figcaption></figure><p>ここではテーブルの中にいくつかのダミーデータが用いられていますが、1 列分のデータだけが必要なので、残りは削除しましょう。</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react';
import { Table } from 'semantic-ui-react'
export default function Read() {
    return (
        &lt;div&gt;
            &lt;Table singleLine&gt;
                &lt;Table.Header&gt;
                    &lt;Table.Row&gt;
                        &lt;Table.HeaderCell&gt;Name&lt;/Table.HeaderCell&gt;
                        &lt;Table.HeaderCell&gt;Registration Date&lt;/Table.HeaderCell&gt;
                        &lt;Table.HeaderCell&gt;E-mail address&lt;/Table.HeaderCell&gt;
                        &lt;Table.HeaderCell&gt;Premium Plan&lt;/Table.HeaderCell&gt;
                    &lt;/Table.Row&gt;
                &lt;/Table.Header&gt;

                &lt;Table.Body&gt;
                    &lt;Table.Row&gt;
                        &lt;Table.Cell&gt;John Lilki&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;September 14, 2013&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;jhlilk22@yahoo.com&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;No&lt;/Table.Cell&gt;
                    &lt;/Table.Row&gt;
                &lt;/Table.Body&gt;
            &lt;/Table&gt;
        &lt;/div&gt;
    )
}
</code></pre><figcaption>read.js</figcaption></figure><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/reducedRows.png" class="kg-image" alt="reducedRows" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/reducedRows.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/reducedRows.png 721w" sizes="(min-width: 720px) 720px" width="721" height="342" loading="lazy"></figure><p>これが Read ページの出力画面です。テーブルには列が 4 つありますが、必要なのは 3 つだけです。</p><p>余分な項目の列を削除してから、次のように項目の名前をつけなおしてください:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/reducedColumn.png" class="kg-image" alt="reducedColumn" width="568" height="321" loading="lazy"></figure><p>すると現在、Read ページはこのように見えます:</p><figure class="kg-card kg-code-card"><pre><code>import React from 'react';
import { Table } from 'semantic-ui-react'
export default function Read() {
    return (
        &lt;div&gt;
            &lt;Table singleLine&gt;
                &lt;Table.Header&gt;
                    &lt;Table.Row&gt;
                        &lt;Table.HeaderCell&gt;First Name&lt;/Table.HeaderCell&gt;
                        &lt;Table.HeaderCell&gt;Last Name&lt;/Table.HeaderCell&gt;
                        &lt;Table.HeaderCell&gt;Checked&lt;/Table.HeaderCell&gt;
                    &lt;/Table.Row&gt;
                &lt;/Table.Header&gt;

                &lt;Table.Body&gt;
                    &lt;Table.Row&gt;
                        &lt;Table.Cell&gt;Nishant&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;Kumar&lt;/Table.Cell&gt;
                        &lt;Table.Cell&gt;Yes&lt;/Table.Cell&gt;
                    &lt;/Table.Row&gt;
                &lt;/Table.Body&gt;
            &lt;/Table&gt;
        &lt;/div&gt;
    )
}
</code></pre><figcaption>read.js</figcaption></figure><p>では、API から GET リクエストを送信してデータを取得してみましょう。</p><p>アプリケーションがマウントされる時に、取得したデータが必要になるので、<code>useEffect</code> フックを使用して実装してください。</p><figure class="kg-card kg-code-card"><pre><code>import React, { useEffect } from 'react';

 useEffect(() =&gt; {
       
 }, [])
</code></pre><figcaption>useEffect フック</figcaption></figure><p>ステートを 1 つ作成して、取得したデータを格納します。取得するデータは配列です。</p><figure class="kg-card kg-code-card"><pre><code>import React, { useEffect, useState } from 'react';

const [APIData, setAPIData] = useState([]);
useEffect(() =&gt; {
       
}, [])
</code></pre><figcaption>取得した API データを格納する APIData ステート</figcaption></figure><p>では、<code>useEffect</code> フックの中で、GET リクエストを送信してみましょう。</p><pre><code> useEffect(() =&gt; {
        axios.get(`https://60fbca4591156a0017b4c8a7.mockapi.io/fakeData`)
            .then((response) =&gt; {
                setAPIData(response.data);
            })
    }, [])
</code></pre><p>ここでは axios.get を使用して、GET リクエストを API へ送信しています。その後で、リクエストが resolve (成功) すれば、レスポンスデータを <em>APIData</em> ステート内に格納します。</p><p>続いて、取得した API データに応じてテーブルの行をマッピングしましょう。</p><p>そのために Map 関数を使用します。Map 関数は配列を反復処理して、データを出力画面内に表示します。</p><pre><code>&lt;Table.Body&gt;
  {APIData.map((data) =&gt; {
     return (
       &lt;Table.Row&gt;
          &lt;Table.Cell&gt;{data.firstName}&lt;/Table.Cell&gt;
           &lt;Table.Cell&gt;{data.lastName}&lt;/Table.Cell&gt;
           &lt;Table.Cell&gt;{data.checkbox ? 'Checked' : 'Unchecked'}&lt;/Table.Cell&gt;
        &lt;/Table.Row&gt;
   )})}
&lt;/Table.Body&gt;
</code></pre><p>API 内のデータに応じて、firstName, lastName, checkbox のそれぞれのデータをマッピングしています。また、ここでは三項演算子 ('?') を使用しています。data.checkbox が true である場合は、Checked と表示され、そうでない場合は Unchecked と表示されます。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/ReadOutput.png" class="kg-image" alt="ReadOutput" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/ReadOutput.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/ReadOutput.png 674w" width="674" height="401" loading="lazy"><figcaption>read.js の出力画面</figcaption></figure><h3 id="update-">Update 操作</h3><p>それでは、テーブルに Update (更新) 用のヘッダーをもう 1 つ作成し、Update ボタン用の列を、Table.Row の中に作成してください。Update ボタンには、Semantic UI React が提供している Button コンポーネントをインポートして使用してください。</p><figure class="kg-card kg-code-card"><pre><code>&lt;Table.HeaderCell&gt;Update&lt;/Table.HeaderCell&gt;

&lt;Table.Cell&gt; 
  &lt;Button&gt;Update&lt;/Button&gt;
&lt;/Table.Cell&gt;
</code></pre><figcaption>Update ボタンの作成</figcaption></figure><p>ここで、Update ボタンがクリックされた時に、 Update ページにリダイレクトされる必要があります。そのためには React Router が提供している Link が必要です。</p><p>では、React Router から Link をインポートしてください。それから、Link タグの中へ Update ボタン用の Table.Cell をラップしてください。</p><figure class="kg-card kg-code-card"><pre><code>import { Link } from 'react-router-dom';

&lt;Link to='/update'&gt;
  &lt;Table.Cell&gt; 
     &lt;Button&gt;Update&lt;/Button&gt;
   &lt;/Table.Cell&gt;
&lt;/Link&gt;
</code></pre><figcaption>Update ボタン用の Link</figcaption></figure><p>これで、Update ボタンをクリックした時に、Update ページへリダイレクトされるようになりました。</p><p>また、Update ボタンをクリックした時に、各列のデータを更新するには、API が提供している、それぞれの ID が必要です。</p><p><code>setData</code> という名前の関数をコンポーネントの先頭に作成してください。それから、その関数を Update ボタンにバインドしてください。</p><pre><code> &lt;Button onClick={() =&gt; setData()}&gt;Update&lt;/Button&gt;
</code></pre><p>ここでは、先頭の関数へ引数としてデータを渡す必要があります。</p><pre><code> &lt;Button onClick={() =&gt; setData(data)}&gt;Update&lt;/Button&gt;
</code></pre><p>そして、先頭の関数の中で、データをコンソール内に表示させます:</p><pre><code>const setData = (data) =&gt; {
   console.log(data);
}
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/updateDataInConsole.png" class="kg-image" alt="updateDataInConsole" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/updateDataInConsole.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/updateDataInConsole.png 686w" width="686" height="116" loading="lazy"><figcaption>コンソール内のデータ</figcaption></figure><p>では、update ボタンをクリックして、コンソールを確認してみてください。テーブルの各項目のデータを取得しています。</p><p>今度は、このデータをローカルストレージへ格納しましょう。</p><figure class="kg-card kg-code-card"><pre><code>const setData = (data) =&gt; {
        let { id, firstName, lastName, checkbox } = data;
        localStorage.setItem('ID', id);
        localStorage.setItem('First Name', firstName);
        localStorage.setItem('Last Name', lastName);
        localStorage.setItem('Checkbox Value', checkbox);
}
</code></pre><figcaption>ローカルストレージ内へデータを格納</figcaption></figure><p>このようにして、データを id、firstName、lastName、checkbox に分割してから、ローカルストレージへ格納しています。ローカルストレージを使用することで、ブラウザー内でローカルにデータを保存できます。</p><p>今ここで、Update コンポーネント内に update 操作用のフォームが 1 つ必要です。Create コンポーネントで用いたフォームを再利用しましょう。関数名を単に Create から Update へ変更するだけです。</p><figure class="kg-card kg-code-card"><pre><code>import React, { useState } from 'react';
import { Button, Checkbox, Form } from 'semantic-ui-react'
import axios from 'axios';

export default function Update() {
    const [firstName, setFirstName] = useState('');
    const [lastName, setLastName] = useState('');
    const [checkbox, setCheckbox] = useState(false);

    return (
        &lt;div&gt;
            &lt;Form className="create-form"&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;First Name&lt;/label&gt;
                    &lt;input placeholder='First Name' onChange={(e) =&gt; setFirstName(e.target.value)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;Last Name&lt;/label&gt;
                    &lt;input placeholder='Last Name' onChange={(e) =&gt; setLastName(e.target.value)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;Checkbox label='I agree to the Terms and Conditions' onChange={(e) =&gt; setCheckbox(!checkbox)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Button type='submit'&gt;Update&lt;/Button&gt;
            &lt;/Form&gt;
        &lt;/div&gt;
    )
}
</code></pre><figcaption>Update ページ</figcaption></figure><p><code>useEffect</code> フックを Update コンポーネント内で作成してください。このフックを使い、前もってローカルストレージへ格納したデータを取り出します。さらに、ID 項目用のステートをもう一つ作成します。</p><pre><code>const [id, setID] = useState(null);

useEffect(() =&gt; {
        setID(localStorage.getItem('ID'))
        setFirstName(localStorage.getItem('First Name'));
        setLastName(localStorage.getItem('Last Name'));
        setCheckbox(localStorage.getItem('Checkbox Value'))
}, []);
</code></pre><p>それから、ローカルストレージから取り出したデータを、キーに応じて配置します。フォームの各欄の中に、取り出した値を配置する必要があります。Update ページがロードされた時に、各欄の中にデータが自動的に配置されるようにしましょう。</p><figure class="kg-card kg-code-card"><pre><code>&lt;Form className="create-form"&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;First Name&lt;/label&gt;
                    &lt;input placeholder='First Name' value={firstName} onChange={(e) =&gt; setFirstName(e.target.value)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;Last Name&lt;/label&gt;
                    &lt;input placeholder='Last Name' value={lastName} onChange={(e) =&gt; setLastName(e.target.value)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;Checkbox label='I agree to the Terms and Conditions' checked={checkbox} onChange={(e) =&gt; setCheckbox(!checkbox)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Button type='submit'&gt;Update&lt;/Button&gt;
            &lt;/Form&gt;
</code></pre><figcaption>フォームの各欄の中に値を配置</figcaption></figure><p>これで、Read ページ内の Update ボタンをクリックすると、Update ページへリダイレクトされ、そこで自動的に配置されたフォームデータを見ることができます。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/populatedDataInUpdatePage.png" class="kg-image" alt="populatedDataInUpdatePage" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/populatedDataInUpdatePage.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/populatedDataInUpdatePage.png 619w" width="619" height="415" loading="lazy"><figcaption>Update ページ</figcaption></figure><p>それでは、Update リクエストを実装してデータを更新してみましょう。</p><p><code>updateAPIData</code> という名前の関数を作成してください。この関数の中で、axios.put を用いて PUT リクエストを送信し、データを更新します。</p><pre><code>const updateAPIData = () =&gt; {
    axios.put(`https://60fbca4591156a0017b4c8a7.mockapi.io/fakeData/${id}`, {
        firstName,
         lastName,
         checkbox
	})
}
</code></pre><p>ここでは API エンドポイントに id 項目を添えているのが確認できます。</p><p>Read ページで、項目の Update ボタンをクリックした時に、その ID がローカルストレージの中に格納され、その後に Update ページ で取り出した ID を <em><code>id</code></em> ステートの中に格納しています。</p><p>そうした後に、<code>id</code> をエンドポイントへ渡しています。こうすることで、渡している ID の項目を更新できます。</p><p>次に、<code>updateAPIData</code> 関数を Update ボタンにバインドしてください。</p><figure class="kg-card kg-code-card"><pre><code>&lt;Button type='submit' onClick={updateAPIData}&gt;Update&lt;/Button&gt;
</code></pre><figcaption>updateAPIData を Update ボタンにバインド</figcaption></figure><p>Read ページにあるテーブルの中の、Update ボタンをクリックしてから、Last name を変更し、Update ページにある Update ボタンをクリックしてください。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/updatingTheFields.png" class="kg-image" alt="updatingTheFields" width="523" height="433" loading="lazy"><figcaption>Last Name 項目の更新</figcaption></figure><p>API を確認してみるか、または Read ページへ戻ってみると、last name が変更されているのを確認できます。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/updatedMockAPIData.png" class="kg-image" alt="updatedMockAPIData" width="513" height="28" loading="lazy"><figcaption>変更された Mock API のデータ</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/updatedReadTable.png" class="kg-image" alt="updatedReadTable" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/updatedReadTable.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/updatedReadTable.png 684w" width="684" height="347" loading="lazy"><figcaption>Read ページのテーブル</figcaption></figure><h3 id="delete-">Delete 操作</h3><p>まずは、Read ページのテーブルに、Delete &nbsp;(削除) 操作用のボタンを 1 つ追加しましょう。</p><figure class="kg-card kg-code-card"><pre><code>&lt;Table.HeaderCell&gt;Delete&lt;/Table.HeaderCell&gt;

&lt;Table.Cell&gt;
   &lt;Button&gt;Delete&lt;/Button&gt;
&lt;/Table.Cell&gt;
</code></pre><figcaption>Read ページのテーブル内に Delete ボタンを追加</figcaption></figure><p>次に、<code>onDelete</code> という名前の関数を作成してから、Delete ボタンにその関数をバインドしてください。この関数は、Delete ボタンをクリックした時に ID パラメータを受け取ります。</p><figure class="kg-card kg-code-card"><pre><code>const onDelete = (id) =&gt; {

}

&lt;Table.Cell&gt;
   &lt;Button onClick={() =&gt; onDelete(data.id)}&gt;Delete&lt;/Button&gt;
&lt;/Table.Cell&gt;
</code></pre><figcaption>Delete 操作用の関数</figcaption></figure><p>では、axios.delete を使用して、それぞれの項目を削除する操作を実装しましょう。</p><figure class="kg-card kg-code-card"><pre><code>const onDelete = (id) =&gt; {
  axios.delete(`https://60fbca4591156a0017b4c8a7.mockapi.io/fakeData/${id}`)
}
</code></pre><figcaption>API から項目を削除</figcaption></figure><p>Delete ボタンをクリックしてから API を確認してみてください。クリックした項目のデータが削除されているのを確認できます。</p><p>ここで、クリックした項目のデータが削除された後に、テーブルのデータをロードし直す必要があります。</p><p>そのために、API のデータを読み込む関数を作成してください。</p><figure class="kg-card kg-code-card"><pre><code>const getData = () =&gt; {
    axios.get(`https://60fbca4591156a0017b4c8a7.mockapi.io/fakeData`)
        .then((getData) =&gt; {
             setAPIData(getData.data);
         })
}
</code></pre><figcaption>API のデータを取得</figcaption></figure><p>そして <code>onDelete</code> 関数の中で、項目を削除した後に更新された API のデータを読み込む必要があります。</p><figure class="kg-card kg-code-card"><pre><code>const onDelete = (id) =&gt; {
        axios.delete(`https://60fbca4591156a0017b4c8a7.mockapi.io/fakeData/${id}`)
     .then(() =&gt; {
        getData();
    })
}
</code></pre><figcaption>項目を削除した後に更新された API のデータを読み込む</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/ReadTableBeforeDataDeleted.png" class="kg-image" alt="ReadTableBeforeDataDeleted" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/ReadTableBeforeDataDeleted.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/ReadTableBeforeDataDeleted.png 711w" width="711" height="446" loading="lazy"><figcaption>Read ページのテーブル</figcaption></figure><p>これで、今は各項目の Delete ボタンをクリックすることでその項目が削除され、テーブルが自動的に最新の情報に更新されます。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2022/02/ReadTableAfterDataDeleted.png" class="kg-image" alt="ReadTableAfterDataDeleted" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2022/02/ReadTableAfterDataDeleted.png 600w, https://www.freecodecamp.org/japanese/news/content/images/2022/02/ReadTableAfterDataDeleted.png 673w" width="673" height="335" loading="lazy"><figcaption>項目が 1 つ削除された後の Read ページのテーブル</figcaption></figure><h2 id="crud--2">CRUD アプリを少し改善してみましょう</h2><p>これまで、Create ページの中でデータを投稿 (post) する時には、単にデータを偽のデータベースの中へ入れていましたが、その際に Read ページへリダイレクトする必要があります。</p><p>それではまず、React Router から <code>useHistory</code> をインポートしてください。</p><figure class="kg-card kg-code-card"><pre><code>import { useHistory } from 'react-router';
</code></pre><figcaption>React Router から useHistory をインポート</figcaption></figure><p>次に、<code>let</code> 文で history という名前の変数を作成して、その変数の中に <code>useHistory</code> を格納してください。</p><pre><code>let history = useHistory();
</code></pre><p>その後で、post API が呼び出されてから、POST リクエストが resolve した時に、history.push 関数を使用して Read ページへ移動します。</p><figure class="kg-card kg-code-card"><pre><code>const postData = () =&gt; {
        axios.post(`https://60fbca4591156a0017b4c8a7.mockapi.io/fakeData`, {
            firstName,
            lastName,
            checkbox
        }).then(() =&gt; {
            history.push('/read')
        })
    }
</code></pre><figcaption>Post API が resolve した後で Read ページへ移動する</figcaption></figure><p>このように <code>useHistory</code> フックを用いることで Read ページへ移動できます。</p><p>Update ページについても同じことを行ってください。</p><figure class="kg-card kg-code-card"><pre><code>import React, { useState, useEffect } from 'react';
import { Button, Checkbox, Form } from 'semantic-ui-react'
import axios from 'axios';
import { useHistory } from 'react-router';

export default function Update() {
    let history = useHistory();
    const [id, setID] = useState(null);
    const [firstName, setFirstName] = useState('');
    const [lastName, setLastName] = useState('');
    const [checkbox, setCheckbox] = useState(false);

    useEffect(() =&gt; {
        setID(localStorage.getItem('ID'))
        setFirstName(localStorage.getItem('First Name'));
        setLastName(localStorage.getItem('Last Name'));
        setCheckbox(localStorage.getItem('Checkbox Value'));
    }, []);

    const updateAPIData = () =&gt; {
        axios.put(`https://60fbca4591156a0017b4c8a7.mockapi.io/fakeData/${id}`, {
            firstName,
            lastName,
            checkbox
        }).then(() =&gt; {
            history.push('/read')
        })
    }
    return (
        &lt;div&gt;
            &lt;Form className="create-form"&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;First Name&lt;/label&gt;
                    &lt;input placeholder='First Name' value={firstName} onChange={(e) =&gt; setFirstName(e.target.value)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;label&gt;Last Name&lt;/label&gt;
                    &lt;input placeholder='Last Name' value={lastName} onChange={(e) =&gt; setLastName(e.target.value)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Form.Field&gt;
                    &lt;Checkbox label='I agree to the Terms and Conditions' checked={checkbox} onChange={() =&gt; setCheckbox(!checkbox)}/&gt;
                &lt;/Form.Field&gt;
                &lt;Button type='submit' onClick={updateAPIData}&gt;Update&lt;/Button&gt;
            &lt;/Form&gt;
        &lt;/div&gt;
    )
}
</code></pre><figcaption>Update.js</figcaption></figure><p>以上で、React と React フックを使用して CRUD 操作を実行する方法について理解できました！</p><p>学習内容を補足したい場合は、<a href="https://youtu.be/-ZMP8ZladIQ">React CRUD Operations</a> という YouTube のビデオ を、この記事の代わりに見ることができます。</p><p>さらに、コードをテストしてみたい場合は、<a href="https://github.com/nishant-666/React-CRUD-Operation-V2">GitHubでコードを見つける</a>ことができます。</p><blockquote><strong>ハッピーラーニング</strong></blockquote> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
