<?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[ Python - 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[ Python - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/japanese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 17 May 2026 13:53:07 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/japanese/news/tag/python/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ conda remove コマンド – Conda 環境を削除する方法 ]]>
                </title>
                <description>
                    <![CDATA[ Conda とは、隔離されたコード環境を作成できるオープンソースのパッケージ管理および環境管理システムです。 Conda を使えば、プロジェクトごとに個別の環境を作成できます。例えば、機械学習用の環境とデータ分析用の環境を別々に用意することが可能です。 各環境にはそれぞれ独自のパッケージを含めることができます。ある環境にインストールされたパッケージは、他の環境からアクセスできません。 この記事では、Conda 環境を削除する組み込みコマンドの使い方を解説します。 Conda で環境を削除する方法 以下のコマンドを実行すると、既存の Conda 環境のリストを取得できます。 conda env list 環境を削除する前に、まずその環境を非アクティブ化 (deactivate) する必要があります。以下のコマンドで現在の環境を非アクティブ化できます。 conda deactivate 環境を非アクティブ化すると、自動的に base 環境に切り替わります。 次に、環境を削除するには以下のコマンドを実行します。 conda remove --name ENV_NAME ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/how-to-delete-an-environment-in-conda/</link>
                <guid isPermaLink="false">66c8cd13c256b2043a4a470b</guid>
                
                    <category>
                        <![CDATA[ ANACONDA ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Sat, 24 Aug 2024 23:37:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2024/08/lewis-kang-ethe-ngugi-f5pTwLHCsAg-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/how-to-delete-an-environment-in-conda/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Conda Remove Environment – How to Delete an Env</a>
      </p><p>Conda とは、隔離されたコード環境を作成できるオープンソースのパッケージ管理および環境管理システムです。</p><p>Conda を使えば、プロジェクトごとに個別の環境を作成できます。例えば、機械学習用の環境とデータ分析用の環境を別々に用意することが可能です。</p><p>各環境にはそれぞれ独自のパッケージを含めることができます。ある環境にインストールされたパッケージは、他の環境からアクセスできません。</p><p>この記事では、Conda 環境を削除する組み込みコマンドの使い方を解説します。</p><h2 id="conda-">Conda で環境を削除する方法</h2><p>以下のコマンドを実行すると、既存の Conda 環境のリストを取得できます。</p><pre><code>conda env list
</code></pre><p>環境を削除する前に、まずその環境を非アクティブ化 (deactivate) する必要があります。以下のコマンドで現在の環境を非アクティブ化できます。</p><pre><code>conda deactivate
</code></pre><p>環境を非アクティブ化すると、自動的に <code>base</code> 環境に切り替わります。</p><p>次に、環境を削除するには以下のコマンドを実行します。</p><pre><code>conda remove --name ENV_NAME --all
</code></pre><p><code>ENV_NAME</code> は、削除したい環境の名前を指定します。前述の通り、<code>conda deactivate</code> コマンドで当該環境を非アクティブ化してから削除するようにしてください。</p><p><code>--all</code> フラグは、その環境にインストールされているすべてのパッケージを削除します。</p><p>Conda で環境を削除する手順をまとめると、次のようになります。</p><ul><li><code>conda deactivate</code> コマンドを使って環境を非アクティブ化する。</li><li><code>conda remove --name ENV_NAME --all</code> コマンドを使って環境を削除する。</li></ul><h2 id="-">まとめ</h2><p>Conda というパッケージ及び環境管理システムを使うと、独立したコーディング環境とそのパッケージをインストール・管理することができます。</p><p>この記事では、Conda 環境を非アクティブ化し、削除するためのコマンドを紹介しました。</p><p>Happy coding!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python エラー 'int' object is not iterable の対処法 ]]>
                </title>
                <description>
                    <![CDATA[ Python コードの実行中に「TypeError: 'int' object is not iterable」というエラーに遭遇した場合、それは、反復処理ができないはずの整数などのデータ型に対してループ処理を試みていることを意味します。 Python では、リスト、タプル、セット、辞書などが反復可能なデータにあたります。 また、このエラーが「TypeError」であることからも、不適切なデータ型で操作を行おうとしていることがわかります。例えば文字列と整数を足し合わせようとした場合などと同じエラーです。 この記事では、このエラーの対処法だけでなく、__iter__  マジックメソッドをチェックしてオブジェクトが反復可能かどうかを確認する方法も紹介します。この方法を知っていれば、もうこのエラーに悩まされることはありません。 'int' object is not iterable エラーの対処法 整数をループしようとすると、このエラーが発生します: count = 14 for i in count:     print(i) # 出力: TypeError: 'int' o ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/int-object-is-not-iterable-python-error-solved/</link>
                <guid isPermaLink="false">66c8bcdfc256b2043a4a46eb</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Fri, 23 Aug 2024 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2024/08/iterable.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/int-object-is-not-iterable-python-error-solved/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Int Object is Not Iterable – Python Error [Solved]</a>
      </p><p>Python コードの実行中に「TypeError: 'int' object is not iterable」というエラーに遭遇した場合、それは、反復処理ができないはずの整数などのデータ型に対してループ処理を試みていることを意味します。</p><p>Python では、リスト、タプル、セット、辞書などが反復可能なデータにあたります。</p><p>また、このエラーが「TypeError」であることからも、不適切なデータ型で操作を行おうとしていることがわかります。例えば文字列と整数を足し合わせようとした場合などと同じエラーです。</p><p>この記事では、このエラーの対処法だけでなく、<code>__iter__</code> マジックメソッドをチェックしてオブジェクトが反復可能かどうかを確認する方法も紹介します。この方法を知っていれば、もうこのエラーに悩まされることはありません。</p><h2 id="-int-object-is-not-iterable-">'int' object is not iterable エラーの対処法</h2><p>整数をループしようとすると、このエラーが発生します:</p><pre><code class="language-python">count = 14

for i in count:
    print(i)
# 出力: TypeError: 'int' object is not iterable
</code></pre><p>これを修正する方法の 1 つとして考えられるのが、変数を <code>range()</code> 関数に渡すことです。</p><p>Python における <code>range</code> 関数は、渡された変数をチェックして、0 から指定された数の直前までの一連の数値を返します。</p><p>次のようにすると、ループは正常に動作するようになります:</p><pre><code class="language-python">count = 14

for i in range(count):
    print(i)

# 出力: 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# 11
# 12
# 13
</code></pre><p>この方法を使用したコード例をもう 1 つ示します:</p><pre><code class="language-python">age = int(input("あなたの年齢を入力してください: "))

for num in range(age):
    print(num)

# 出力: 
# あなたの年齢を入力してください: 6
# 0
# 1
# 2
# 3
# 4
# 5
</code></pre><h2 id="-">データまたはオブジェクトが反復可能かどうかの確認方法</h2><p>あるデータが反復可能かどうかを確認するために、<code>dir()</code> メソッドが使用できます。このメソッドで <code>__iter__</code> マジックメソッドが見つかれば、そのデータは反復可能です。見つからない場合、そのデータは反復可能ではないため、ループを試みるべきではありません。</p><pre><code class="language-python">perfectNum = 7

print(dir(perfectNum))

# 出力: ['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', 
# '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
</code></pre><p>上記の出力には <code>__iter__</code> マジックメソッドが含まれていないため、変数 <code>perfectNum</code> は反復可能ではないとわかります。</p><pre><code class="language-python">jerseyNums = [43, 10, 7, 6, 8]

print(dir(jerseyNums))

# 出力: ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
</code></pre><p>上記の出力では <code>__iter__</code> マジックメソッドが含まれています。つまり、リスト <code>jerseyNums</code> は反復可能です。</p><h2 id="--1">結論</h2><p>この記事では、「'int' object is not iterable」エラーの原因と解決法について学びました。</p><p>また、オブジェクトやデータが反復可能かどうかを確認する方法についても紹介しました。</p><p>データに <code>__iter__</code> マジックメソッドが含まれていない場合、そのデータをループしようとするのは避けるようにしましょう。</p><p>お読みいただきありがとうございました。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 初心者向け 25 の Python 開発プロジェクト - Python でコーディングを始めるためのシンプルなアイデア ]]>
                </title>
                <description>
                    <![CDATA[  新しい言語を学ぶ最も良い方法は、その言語を使ったプロジェクトを作ることです。 私は、25 の初心者向け Python プロジェクトチュートリアルのリストを作成しました。 これらのチュートリアルに取り組む初心者に向けての私からのアドバイスは、動画を視聴しながら、プロジェクトを作り、分解し、自らの手でもう一度作り上げることです。チュートリアルにない新しい機能の追加や違うメソッドを使うといった実験に取り組むこともおすすめです。 この経験を通して、チュートリアルから得られるコンセプトを本当に学んだかどうかをテストできるのです。 以下のリストからプロジェクト名をクリックすると、この記事の各項目へ飛ぶことができます。 もしも、Python の基礎をしっかり固めたいならば、freeCodeCamp の初心者向けの Python チュートリアル [https://www.youtube.com/watch?v=rfscVS0vtbw]を視聴することをおすすめします。(編集注: 日本語版はこちら [https://www.youtube.com/watch?v=nnjCkgX_ZPQ])  ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/python-projects-for-beginners/</link>
                <guid isPermaLink="false">6537d4a7cdaff103f90d40cc</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Beginners ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ YUUSUKE OKAMOTO ]]>
                </dc:creator>
                <pubDate>Sat, 27 Apr 2024 08:11:02 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2024/04/hitesh-choudhary-D9Zow2REm8U-unsplash.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/python-projects-for-beginners/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">25 Python Projects for Beginners – Easy Ideas to Get Started Coding Python</a>
      </p><p></p><p>新しい言語を学ぶ最も良い方法は、その言語を使ったプロジェクトを作ることです。</p><p>私は、25 の初心者向け Python プロジェクトチュートリアルのリストを作成しました。</p><p>これらのチュートリアルに取り組む初心者に向けての私からのアドバイスは、動画を視聴しながら、プロジェクトを作り、分解し、自らの手でもう一度作り上げることです。チュートリアルにない新しい機能の追加や違うメソッドを使うといった実験に取り組むこともおすすめです。</p><p>この経験を通して、チュートリアルから得られるコンセプトを本当に学んだかどうかをテストできるのです。</p><p>以下のリストからプロジェクト名をクリックすると、この記事の各項目へ飛ぶことができます。</p><p>もしも、Python の基礎をしっかり固めたいならば、freeCodeCamp の初心者向けの <a href="https://www.youtube.com/watch?v=rfscVS0vtbw">Python チュートリアル</a>を視聴することをおすすめします。(編集注: <a href="https://www.youtube.com/watch?v=nnjCkgX_ZPQ">日本語版はこちら</a>)</p><h2 id="-python-"><strong><strong><strong>作成可能な Python プロジェクト</strong></strong></strong></h2><!--kg-card-begin: markdown--><ol>
<li><a href="#mad-libs-python-project">Mad Libs (マッドリブス)</a></li>
<li><a href="#guess-the-number-game-python-project-computer-">数あてゲーム (コンピューター側の数)</a></li>
<li><a href="#guess-the-number-game-python-project-user-">数あてゲーム (ユーザー側の数)</a></li>
<li><a href="#rock-paper-scissors-python-project">じゃんけん</a></li>
<li><a href="#hangman-python-project">ハングマン</a></li>
<li><a href="#countdown-timer-python-project">カウントダウンタイマー</a></li>
<li><a href="#password-generator-python-project">パスワード生成システム</a></li>
<li><a href="#qr-code-encoder-decoder-python-project">QR コードのエンコード／デコード</a></li>
<li><a href="#tic-tac-toe-python-project">○×ゲーム</a></li>
<li><a href="#tic-tac-toe-ai-python-project">AI ○×ゲーム</a></li>
<li><a href="#binary-search-python-project">二分探索アルゴリズム</a></li>
<li><a href="#minesweeper-python-project">マインスイーパー</a></li>
<li><a href="#sudoku-solver-python-project">数独解決</a></li>
<li><a href="#photo-manipulation-in-python-project">画像加工</a></li>
<li><a href="#markov-chain-text-composer-python-project">マルコフ連鎖テキスト作成</a></li>
<li><a href="#pong-python-project">ピンポンゲーム</a></li>
<li><a href="#snake-python-project">スネークゲーム</a></li>
<li><a href="#connect-four-python-project">四目並べ</a></li>
<li><a href="#tetris-python-project">テトリス</a></li>
<li><a href="#online-multiplayer-game-python-project">オンライン多人数ゲーム</a></li>
<li><a href="#web-scraping-program-python-project">Web スクレイピング</a></li>
<li><a href="#bulk-file-re-namer-python-project">ファイル名変更機能</a></li>
<li><a href="#weather-program-python-project">天気プログラム</a></li>
<li><a href="#code-a-discord-bot-with-python-host-for-free-in-the-cloud">Python での Discord Bot 開発 - クラウド上での無料ホスティング</a></li>
<li><a href="#space-invaders-game-python-project">スペースインベーダーゲーム</a></li>
</ol>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><h2 id="mad-libs-python-project">
    Python での Mad Libs (マッドリブス) 開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=100s">「Kylie Ying のチュートリアル」</a>では、ユーザーが入力する情報を取得する方法、Python の文字列フォーマットである f-strings の使い方、そして、コンソールに出力された結果を確認する方法を学びます。</p><p>このチュートリアルは、Python での文字の連結に慣れるにあたり、とても良い初心者向けのプロジェクトとなります。</p><!--kg-card-begin: html--><h2 id="guess-the-number-game-python-project-computer-">
    Python での数あてゲーム開発 (コンピューター側の数)
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=414s">「Kylie Ying のチュートリアル」</a>では、<a href="https://docs.python.org/3/library/random.html">Python のランダムモジュール</a>の動かし方、関数の作り方、ループ処理と条件分岐の使い方、そして、利用者が入力した情報を取得する方法を学べます。</p><!--kg-card-begin: html--><h2 id="guess-the-number-game-python-project-user-">
    Python での数あてゲーム開発 (ユーザー側の数)
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=797s">「Kylie Ying のチュートリアル」のこのパート</a>では、今度はコンピューターがユーザー側の数を予想する数あてゲームを作成します。こちらでも <a href="https://docs.python.org/3/library/random.html">Python のランダムモジュール</a>の動かし方、関数の作り方、ループ処理と条件分岐の使い方、そして、利用者が入力した情報を取得する方法を扱います。</p><!--kg-card-begin: html--><h2 id="rock-paper-scissors-python-project">
    Python でのじゃんけんゲーム開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=797s">「Kylie Ying のチュートリアル」</a>では、<code>random.choice()</code>、if 文、ユーザー入力の取得を扱います。これは、条件分岐や関数のような基礎を固めるのに役立つプロジェクトです。</p><!--kg-card-begin: html--><h2 id="hangman-python-project">
    Python でのハングマン開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=1465s">「Kylie Ying のチュートリアル」</a>では、辞書型、リスト型、そして、条件がネストされている中での活用の仕方を学べます。これらに加えて、文字型と random 関数のモジュールについても理解できるでしょう。</p><!--kg-card-begin: html--><h2 id="countdown-timer-python-project">
    Python でのカウントダウンタイマー開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=SqvVm3QiQVk&amp;t=1992s">「Code With Tomi のチュートリアル」</a>では、<code>time</code> という時刻データへのアクセスと変換の Python のモジュールを利用して、カウントダウンタイマーを開発する方法を学べます。このチュートリアルは、Python における while ループの使い方を学ぶことができるので、Python の初心者におすすめのプロジェクトの一つです。</p><!--kg-card-begin: html--><h2 id="password-generator-python-project">
    Python でのパスワード生成システム開発
</h2><!--kg-card-end: html--><p>同じく<a href="https://www.youtube.com/watch?v=SqvVm3QiQVk&amp;t=2531s">「Code With Tomi のチュートリアル」</a>で、ランダムのパスワードを生成するシステムについて学べます。パスワードの数とパスワードの長さを利用者から受け取り、ランダムなパスワードを生成します。<br>このプロジェクトでは、loop 処理と Python の標準モジュールである <code>random</code> 関数の使い方を学べるでしょう。</p><!--kg-card-begin: html--><h2 id="qr-code-encoder-decoder-python-project">
    Python での QR コードのエンコード／デコード開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=SqvVm3QiQVk&amp;t=3192s">「Code With Tomi」のチュートリアル</a>で、QR コードの作り方、そして、QR コードの情報をエンコード／デコードする処理について学べます。このプロジェクトは、QR コードライブラリを利用します。</p><p>初心者にとって、Pythonの異なるモジュールをインストールして使うことに慣れるのに最適なプロジェクトの一つでしょう。</p><!--kg-card-begin: html--><h2 id="tic-tac-toe-python-project">
    Python での○×ゲーム開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=2153s">「Kylie Ying のチュートリアル」</a>では、コマンドラインで、複数人のプレイヤーとプレイできる〇×ゲームを作る方法を学べます。ネストされた if 文の使い方を練習したり、<code>time</code> と <code>math</code> という 2 つの Python の標準モジュールの使い方を学んだりできます。</p><!--kg-card-begin: html--><h2 id="tic-tac-toe-ai-python-project">
    Python での AI ○×ゲーム開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=3599s">「Kylie Ying のチュートリアル」</a>で、コンピュータが負けることのない〇×ゲームの作り方を学べます。このプロジェクトは、意思決定に用いられる再帰的アルゴリズムであるミニマックス・アルゴリズムを利用します。</p><!--kg-card-begin: html--><h2 id="binary-search-python-project">
    Python での二分探索アルゴリズム開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=4553s">「Kylie Ying のチュートリアル」</a>で、バイナリサーチ (二分探索) と呼ばれる分割統治アルゴリズムの実装方法を学べます。これは、採用面接で出題されることもある検索アルゴリズムで、コードでの実装方法を知っておくことが重要です。</p><!--kg-card-begin: html--><h2 id="minesweeper-python-project">
    Python でのマインスイーパー開発
</h2><!--kg-card-end: html--><p> <a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=5236s">「Kylie Ying のチュートリアル」</a>で、コマンドラインでのマインスイーパーゲームを開発できます。このプロジェクトは、再帰とクラスの処理にフォーカスしたプロジェクトです。</p><!--kg-card-begin: html--><h2 id="sudoku-solver-python-project">
    Python での数独解決開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=6715s">「Kylie Ying のチュートリアル」</a>で、バックトラックの技術を活用する数独の解決を開発できます。バックトラックは、問題を解決するにあたり、あらゆる組み合わせの探索を行う再帰的な技法の一つです。</p><!--kg-card-begin: html--><h2 id="photo-manipulation-in-python-project">
    Python での画像加工開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=7534s"> 「Kylie Ying のチュートリアル」</a>では、画像フィルターを作成して、画像のコントラスト、明るさ、ぼかしを変更する方法を学べます。このプロジェクトを始める前に、<a href="https://github.com/kying18/pyphotoshop">スターターファイル</a>をダウンロードする必要があります。</p><!--kg-card-begin: html--><h2 id="markov-chain-text-composer-python-project">
    Python でのマルコフ連鎖テキスト作成開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=9109s">「Kylie Ying のチュートリアル」</a>では、過去の状態に基づいて未来の状態を予測する確率モデルとして知られるマルコフ連鎖モデルについて、そしてそれを歌詞の関係にどのように適用できるかを学べます。このプロジェクトは、Python での人工知能への素晴らしい入門講座となるでしょう。</p><!--kg-card-begin: html--><h2 id="pong-python-project">
    Python でのピンポンゲーム開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=XGf2GcyHPhc&amp;t=78s">「Christian Thompson のチュートリアル」</a>では、Python での古典的なピンポンゲームの再構築の仕方を学べます。OS の動かし方、そして、タートルの Python モジュールを利用して、ゲームのグラフィックスを作成する方法を学びます。</p><!--kg-card-begin: html--><h2 id="snake-python-project">
    Python でのスネークゲーム開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=XGf2GcyHPhc&amp;t=2736s">「Tech with Tim のチュートリアル」</a>では、Python でなつかしのスネークゲームを再構築する方法を学べます。このプロジェクトは、オブジェクト指向のプログラミングと Python でゲームを作るための人気モジュールである Pygame を使います。</p><!--kg-card-begin: html--><h2 id="connect-four-python-project">
    Python での四目並べ開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=XGf2GcyHPhc&amp;t=5697s">「Keith Galli のチュートリアル」</a>で、昔からある四目並べのコネクトフォーの作り方を学べます。このプロジェクトでは、<code>numpy</code>、<code>math</code>、<code>pygame</code>、そして <code>sys</code> という Python モジュールを活用します。</p><p>このプロジェクトは、既に初心者向けの小規模の Python プロジェクトに取り組んだことがある人に最適です。Python プロジェクトの開発が初めての場合は、ここまで紹介したリストの一つに先に取り組むことを強くおすすめします。</p><!--kg-card-begin: html--><h2 id="tetris-python-project">
    Python でのテトリス開発
</h2><!--kg-card-end: html--><p> <a href="https://www.youtube.com/watch?v=XGf2GcyHPhc&amp;t=9756s">「Tech with Tim のチュートリアル」</a>では、昔からあるテトリスゲームを再開発する方法を学べます。このプロジェクトは、Pygame を活用し、開発初心者が次のレベルのスキルを取得するのに良い機会です。</p><!--kg-card-begin: html--><h2 id="online-multiplayer-game-python-project">
    Python でのオンライン多人数ゲーム開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=XGf2GcyHPhc&amp;t=15732s">「Tech with Tim のチュートリアル」</a>では、世界中の人たちと遊べるオンラインのマルチプレイヤーゲームの開発を学べます。このプロジェクトは、Sockets やネットワーク、そして、Pygame の使い方を学ぶ素晴らしい第一歩となるでしょう。</p><!--kg-card-begin: html--><h2 id="web-scraping-program-python-project">
    Python での Web スクレイピング開発
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=SqvVm3QiQVk&amp;t=37s">「Code With Tomi のチュートリアル」</a>で、利用者が入力する GitHub の利用者リンクに対して、Web スクレイピングを通して、プロフィール画像リンクを出力する方法を学べます。Web スクレイピングは、Web ページからデータを集める手法の一つです。</p><!--kg-card-begin: html--><h2 id="bulk-file-re-namer-python-project">
    Python でのファイル名変更機能開発
</h2><!--kg-card-end: html--><p> <a href="https://www.youtube.com/watch?v=SqvVm3QiQVk&amp;t=833s">「Code With Tomi のチュートリアル」</a>で、コンピュータ上の任意のフォルダにある全てのファイルについて、Python コードに書かれた条件に基づいて名前を変更するプログラムの開発を学べます。</p><!--kg-card-begin: html--><h2 id="weather-program-python-project">
    Python での天気プログラム開発
</h2><!--kg-card-end: html--><p> <a href="https://www.youtube.com/watch?v=SqvVm3QiQVk&amp;t=1494s">「Code With Tomi のチュートリアル」</a>で、特定の地域の利用者データを集めて、集められた地域の詳細な気象情報を出力する仕組みを開発します。これは、API からデータを取得する方法を学び始めるのに適したプロジェクトです。</p><!--kg-card-begin: html--><h2 id="code-a-discord-bot-with-python-host-for-free-in-the-cloud">
    Python での Discord Bot 開発 - クラウド上での無料ホスティング
</h2><!--kg-card-end: html--><p> <a href="https://www.youtube.com/watch?v=SPTfmiYiuok">「Beau Carnes のチュートリアル」</a>で、利用者がオンラインチャットを楽しめるプラットフォームである Discord で機能する bot を開発する方法を学べます。このプロジェクトは、Discord API の仕組み、そして、Replit IDE について教えてくれます。</p><p>このビデオが公開された後、Replit は、環境変数をプログラムに保存する方法を変更しました。Replit の環境変数の設定方法は、この<a href="https://forum.freecodecamp.org/t/steps-on-how-to-setup-environment-variable-for-fcc-python-bot-tutorial/473303">チュートリアル</a>から確認してください。</p><!--kg-card-begin: html--><h2 id="space-invaders-game-python-project">
    Python でのスペースインベーダーゲームプロジェクト
</h2><!--kg-card-end: html--><p><a href="https://www.youtube.com/watch?v=FfWpgLFMI7w"> 「buildwithpython のチュートリアル」</a>では、Pygame を用いたスペースインベーダーゲームの開発方法を学べます。ゲーム上でのループ処理、衝突検出、キープレスイベントなどゲーム開発におけるたくさんの基礎を学べます。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ freeCodeCamp からクリスマスプレゼント – Python と JavaScript の新講座、英語カリキュラム、The Odin Project ]]>
                </title>
                <description>
                    <![CDATA[ freeCodeCamp から世界中のデベロッパー・コミュニティへ、クリスマスプレゼントをお届けします。 No. 1: 新バージョンの「JavaScript のアルゴリズムとデータ構造」認定講座。ブラウザ上でコードを書いて学べる 21 のプロジェクトを用意しました。プロジェクトに取り組みながら学ぶプロジェクトベース形式の講座で、1,000 以上のステップに細分化されたコーディングチャレンジで段階的に学習できます。 No. 2: 新バージョンの「Python を用いた科学計算」認定講座。ブラウザ上で Python のコードを書いて、12 のプロジェクトに取り組みながら学べます。 No. 3: かの有名な The Odin Project のインタラクティブ版。The Odin Project とは、私 (Quincy) の友人であり freeCodeCamp サポーターでもある Erik Trautman によって 2013 年に作成されたコーディング・カリキュラムです。 No. 4: そして私が個人的に最も楽しみにしていたのが「開発者のための英語」カリキュラムです。今年はまず  ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/a-very-freecodecamp-christmas/</link>
                <guid isPermaLink="false">6588c354b302c504a10e7bf1</guid>
                
                    <category>
                        <![CDATA[ freeCodeCamp Curriculum ]]>
                    </category>
                
                    <category>
                        <![CDATA[ freeCodeCamp ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Sun, 24 Dec 2023 23:56:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/12/freeCodeCamp-Christmas.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/a-very-freecodecamp-christmas/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">A Very freeCodeCamp Christmas  – Python &amp; JavaScript Upgrades, English Curriculum, The Odin Project</a>
      </p><p>freeCodeCamp から世界中のデベロッパー・コミュニティへ、クリスマスプレゼントをお届けします。</p><p>No. 1: 新バージョンの<strong>「JavaScript のアルゴリズムとデータ構造」認定講座</strong>。ブラウザ上でコードを書いて学べる 21 のプロジェクトを用意しました。プロジェクトに取り組みながら学ぶプロジェクトベース形式の講座で、1,000 以上のステップに細分化されたコーディングチャレンジで段階的に学習できます。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/D8pqkmZWc9o?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="JavaScript Curriculum Trailer" name="fitvid0"></iframe>
          </div>
        </div>
      </figure><p>No. 2: 新バージョンの<strong>「Python を用いた科学計算」認定講座</strong>。ブラウザ上で Python のコードを書いて、12 のプロジェクトに取り組みながら学べます。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/Qs7QJfvqJrk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Python Curriculum Trailer" name="fitvid1"></iframe>
          </div>
        </div>
      </figure><p>No. 3: かの有名な <strong>The Odin Project</strong> のインタラクティブ版。The Odin Project とは、私 (Quincy) の友人であり freeCodeCamp サポーターでもある Erik Trautman によって 2013 年に作成されたコーディング・カリキュラムです。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/MkjsaMk3nKE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="Odin Project Curriculum Trailer" name="fitvid2"></iframe>
          </div>
        </div>
      </figure><p>No. 4: そして私が個人的に最も楽しみにしていたのが<strong>「開発者のための英語」カリキュラム</strong>です。今年はまず CEFR A2 レベルの講座をリリースしました。B1、B2、C1 レベルの講座も 2024 年から 2025 年にかけてリリース予定です。開発者として働く上で役立つ表現を中心に学べる講座です。</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/cT8lMv_hwdE?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" title="English Curriculum Trailer" name="fitvid3"></iframe>
          </div>
        </div>
      </figure><h3 id="-freecodecamp-">なぜ freeCodeCamp はこんなにたくさんの教材を一度にリリースしたの？</h3><p>なぜなら freeCodeCamp コミュニティにふさわしいクリスマスプレゼントだと思ったからです。🎄</p><p>freeCodeCamp ではこの数年間をかけて JavaScript カリキュラムのアップデートに取り組んできました。</p><p>そして英語カリキュラム、Python カリキュラムの作成にも 2023 のほとんどを費やしました。</p><p>残りの認定講座についても、プロジェクトを通して学ぶ形式にアップデートすることを目指しています。</p><p>この取り組みには少なくとももう 1 年かかると見込んでいます。いつものことですが、<a href="https://www.freecodecamp.org/japanese/donate">サポーター</a>として支援していただくことで、追加の人材を採用できるようになり、開発のスピードアップにつながります。</p><h3 id="-python-">新バージョンの Python カリキュラムと認定講座</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/12/Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1.png" class="kg-image" alt="Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/12/Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/12/Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/12/Learn_Recursion_by_Solving_the_Tower_of_Hanoi_Puzzle__Step_54___freeCodeCamp_org_---1.png 1600w" sizes="(min-width: 720px) 720px" width="1600" height="890" loading="lazy"><figcaption>古典的なコンピューターサイエンスの問題「ハノイの塔」に取り組む様子。ブラウザ上で、段階的な手順に沿って進められます。</figcaption></figure><p>freeCodeCamp では先日、Python を用いた科学計算認定講座のメジャーアップグレードを公開しました。Python プログラミングの基礎を、ブラウザ上で 15 のプロジェクトを作成しながら学ぶことができます。</p><p>以下が全 15 プロジェクトの一覧です。</p><ol><li>文字列操作の学習: 暗号プログラムを作成する</li><li>数値と文字列を扱う学習: Luhn アルゴリズムを実装する</li><li>ラムダ式の学習: 経費記録ツールを作成する</li><li>リスト内包表記の学習: ケース変換プログラムを作成する</li><li>正規表現の学習: パスワード生成プログラムを作成する</li><li>アルゴリズムデザインの学習: 最短経路アルゴリズムを作成する</li><li>再帰処理の学習: パズル「ハノイの塔」を解く</li><li>データ構造の学習: マージソートアルゴリズムを作成する</li><li>クラスとオブジェクトの学習: 数独ソルバーを作成する</li><li>木構造の走査の学習: 二分探索木を作成する</li><li>認定プロジェクト: 計算の縦書き整形プログラム</li><li>認定プロジェクト: 時刻計算プログラム</li><li>認定プロジェクト: 予算アプリ</li><li>認定プロジェクト: 四角形の面積計算プログラム</li><li>認定プロジェクト: 確率計算プログラム</li></ol><p>これは 500 問以上のコーディング・チャレンジに相当します。そして 5 件の認定プロジェクトでは、数十件の自動テストをパスするように、洗練されたプロジェクトを作成します。</p><p>freeCodeCamp では、Python をブラウザでスムーズに実行できるようにするため尽力してきました。結果として非常にスムーズな動作を実現できました。どこかにあるサーバーで Python のコードが実行されて結果が返ってくるまで待つ必要はありません。</p><p>ミリ秒未満でテスト結果が返ってくる freeCodeCamp の JavaScript 講座での体験が気に入っているなら、きっとこの新しい Python 講座も気に入ることでしょう。</p><p><a href="https://www.freecodecamp.org/japanese/learn/scientific-computing-with-python">freeCodeCamp カリキュラムで Python プログラミングを始めましょう</a>。</p><h3 id="-javascript-">新バージョンの JavaScript アルゴリズムとデータ構造認定講座</h3><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/12/RPG-game.png" class="kg-image" alt="RPG-game" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/12/RPG-game.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/12/RPG-game.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/12/RPG-game.png 1600w" sizes="(min-width: 720px) 720px" width="1600" height="676" loading="lazy"><figcaption>JavaScript ロールプレイングゲームのステップ 53</figcaption></figure><p>以下がこの講座で作成する全プロジェクトの一覧です。</p><ol><li>JavaScript 基礎の学習: ロールプレイングゲームを作成する</li><li>フォームバリデーションの学習: カロリー計算機を作成する</li><li>文字列と配列の基礎的なメソッドの学習: 音楽プレイヤーを作成する</li><li>Date オブジェクトの学習: 日付フォーマッターを作成する</li><li>認定プロジェクト: 回文チェッカー</li><li>モダンな JavaScript メソッドの学習: サッカーチームカードを作成する</li><li>localStorage の学習: Todo リストを作成する</li><li>再帰処理の学習: 十進数・二進数変換ツールを作成する</li><li>認定プロジェクト: ローマ数字への変換</li><li>アルゴリズム的思考の学習: 数値ソートを作成する</li><li>文字列と配列の応用的なメソッドの学習: 統計計算機を作成する</li><li>関数プログラミングの学習: スプレッドシートを作成する</li><li>正規表現の学習: スパムフィルターを作成する</li><li>認定プロジェクト: 電話番号の検証</li><li>基礎的なオブジェクト指向プログラミングの学習: ショッピングカートを作成する</li><li>中級オブジェクト指向プログラミングの学習: 横スクロールゲームを作成する</li><li>中級アルゴリズム的思考の学習: ダイスゲームを作成する</li><li>認定プロジェクト: キャッシュレジスター</li><li>Fetch と Promise の学習: freeCodeCamp 著者ページを作成する</li><li>非同期プログラミングの学習: freeCodeCamp フォーラムリーダーボードを作成する</li><li>認定プロジェクト: ポケモン検索アプリ</li></ol><p>新バージョンの JavaScript アルゴリズムとデータ構造認定講座についての詳細情報と実際に動作する様子は、freeCodeCamp スタッフの Jessica による<a href="https://www.freecodecamp.org/news/learn-javascript-with-new-data-structures-and-algorithms-certification-projects">プロジェクトの解説記事</a>で見ることができます。</p><h3 id="-">開発者のための英語カリキュラム</h3><p>CEFR (Common European Framework of Reference) に馴染みのない方のために、こちらの画像を作成しました。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/12/freeCodeCamp-CEFR-Levels-Explained-3.png" class="kg-image" alt="freeCodeCamp-CEFR-Levels-Explained-3" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/12/freeCodeCamp-CEFR-Levels-Explained-3.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/12/freeCodeCamp-CEFR-Levels-Explained-3.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/12/freeCodeCamp-CEFR-Levels-Explained-3.png 1024w" sizes="(min-width: 720px) 720px" width="1024" height="768" loading="lazy"><figcaption>6 段階の CEFR レベルを説明した画像。freeCodeCamp では A2 レベルの講座からスタートし、B1、B2、C1、C2 レベルも開発予定です。</figcaption></figure><p>freeCodeCamp がスタートしてから 9 年間、私たちは主に数学、コンピューターサイエンス、プログラミングの教育に注力してきました。なぜここで急に英語を教えることにしたのでしょうか？</p><p>それは、何百万人もの開発者が、自分のキャリアの可能性を最大限発揮するために英語力の向上を必要としているからです。</p><p>国際的に、英語がテクノロジー業界の主要言語となっており、多くの重要なテクノロジーが英語圏から生まれている状況です。</p><p>また、英語は多くの国でビジネスに使われる言語でもあります。英語圏以外の国に住んでいても仕事で英語を使っているという人が、私の友人にも多くいます。</p><p>つまり、多くの人にとって、英語を上手く話せるようになるために時間を費やす価値があるということです。そして freeCodeCamp はそのような人々の力になりたいと考えています。もちろん無料でです。</p><p>カリキュラムの前半では、多数の実践的練習を通して、英語の文法や使い方に慣れることを目指します。自己紹介、雑談、仕事についての話し合いなどの基礎的な内容を学びます。</p><p>後半では、ソフトウェア開発特有の語彙を練習します。コードを説明したり、テクノロジーのトレンドについて議論したり、スタンドアップ・ミーティングに参加したりする方法を学びます。</p><p>この A2 レベルカリキュラムには 105 種類のダイアログが含まれます。それぞれのダイアログは、語彙力を強化し、テクノロジーのプロとしての環境で自信をもって話せるようになることを目指して設計されています。</p><p>ぜひ<a href="https://www.freecodecamp.org/japanese/learn/a2-english-for-developers">開発者のための英語カリキュラム</a>を試してみてください。そして周りに英語を学んでいる人がいたら勧めてあげてください。</p><h3 id="--1">大学学位プログラムの最新情報 (数学準学士、コンピューターサイエンス学士)</h3><p><a href="https://www.freecodecamp.org/japanese/news/freecodecamp-math-computer-science-degree-update/">大学学位取得プログラム</a>についても着実に進めており、作成中の全 40 のコースのうち 2 番目のコースが完成間近となっています。</p><p>まだやるべきことがかなり残っているように聞こえますね。</p><p>幸い、私たちがあらゆる開発者に学習を推奨するトピックについての一連の認定講座である <a href="https://www.freecodecamp.org/japanese/">freeCodeCamp コアカリキュラム</a>のアップグレードが完了次第、より多くの講師陣が学位取得プログラムの作業にまわる予定です。</p><p>私たちの計画は変わりません。2020 年代中頃に全 40 のコースの完成、2020 年代後半に最初の学生の入学、そして卒業生から 5 年間の長期的なデータが得られ次第正式な認定を得ることを目指しています。</p><p>これは非常に長い期間に渡る取り組みです。スタートアップ企業がこのような事業に取り組むことを許してくれる投資家はほとんどいないでしょう。その点、私たちはパブリック・チャリティーです。私たちには投資家も株主もいません。私たちにあるのはボランティアと<a href="https://www.freecodecamp.org/japanese/donate">サポーター</a>のグローバル・コミュニティだけです。</p><p>freeCodeCamp はいなくなったりしません。世界中の教育制度は多くの問題に溢れ、新しいスキルを学ぶ必要に駆られている多忙な社会人が多数存在しています。freeCodeCamp を始めとする教育機関の力が必要とされているのです。🏕️</p><h3 id="-javascript-python-">従来の JavaScript および Python 認定講座はどうなりますか？</h3><p>従来の認定講座・認定証も引き続きご利用いただけます。従来の認定講座は <a href="https://www.freecodecamp.org/japanese/learn">freecodecamp 学習プラットフォーム</a>の最下部に移動しました。旧カリキュラムはそちらに保管されています。</p><h3 id="-javascript-python-the-odin-project-">新しい JavaScript、Python、英語カリキュラム、The Odin Project のセクションはいつまでベータ版ですか？</h3><p>こうしてこの記事を書いている間にも、引き続きプルリクエストをマージしている状況です。freeCodeCamp の講師陣は、この教材のリリースをクリスマスに間に合わせるため尽力してきました。</p><p>今後数週間に渡って、「coming soon」のラベルが付いたセクションをリリース予定です。来年中にはベータ版のラベルを外し、正式版としてリリースすることを目指しています。</p><h3 id="freecodecamp-">freeCodeCamp が初めての場合、どこからスタートするのが良いですか？</h3><p>これまで通り、<a href="https://www.freecodecamp.org/japanese/learn">freecodecamp 学習プラットフォームの一番上</a>から順に取り組むことをおすすめします。何千時間にもおよぶ学習内容が含まれるので、2024 年中ずっと退屈しないでしょう。率直に言えば、プログラミングをしっかりと学ぶにはそれだけの時間がかかるのです。</p><p>コアカリキュラムでは、何百ものプロジェクトを通して大量の演習に取り組みます。そして今後リリース予定の数学・コンピューターサイエンス学位プログラムでは理論を学ぶことができます。</p><p>長い期間をかけて、あなたの学習をサポートします。千件以上の YouTube 動画講座、1 万件以上のチュートリアル記事も公開しています。1 冊の本に相当するようなボリュームの記事も複数あります。すべて無料で利用可能です。</p><p>2014 年に freeCodeCamp をスタートした時には、私たちの教材がこれほど包括的なものになるとは予想していませんでした。しかし私たちは今、オープンソースの力、無料の教育を支援したいという何千人もの講師・開発者達の力を目の当たりにしています。</p><p>私たちは今、数学、プログラミング、そして英語について地球上で最も詳しいだけでなく、桁違いに詳しいと言える学習リソースとなることを目指しています。</p><h3 id="freecodecamp-9-">freeCodeCamp はまだ 9 歳です。</h3><p>毎日百万人以上の人々が freeCodeCamp で学んでいるという、freeCodeCamp コミュニティの現在の姿には驚かされるばかりです。</p><p>この 1 年だけでも、freeCodeCamp コミュニティは以下のことを成し遂げました。</p><ul><li>YouTube にて<strong>長編講座を 114 件</strong>投稿</li><li><strong>プログラミングチュートリアル記事を 1,045 件</strong>、freeCodeCamp Press として<strong>無料の電子書籍を 20 冊</strong>投稿</li><li>GitHub にて <strong>2,753 件のコードコントリビューション</strong>をマージ</li><li>カリキュラムとチュートリアル記事の多言語化において <strong>200 万ワード以上</strong>を翻訳</li></ul><p>そしてこれはまだほんの始まりです。この先やるべきことがもっとあります。</p><p>再度になりますが、<a href="https://www.freecodecamp.org/japanese/donate">サポーター</a>として支えていただければ幸いです。</p><p>すでに月次サポーターの方でも、当チャリティーのために年末のギフトをご検討いただけるのであれば<a href="https://www.freecodecamp.org/news/how-to-donate-to-free-code-camp/">ぜひお願いいたします</a>。</p><p>当チャリティー団体の使命を支援する方法についての質問や、単に寄付の領収書が必要な場合でも、直接 quincy@freecodecamp.org までお問い合わせいただいて構いません。</p><p>あなたが良いクリスマスを過ごしながら、新しいスキルを学ぶ時間を持てることをお祈りします。Happy coding! 🎅⌨️</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python Do While – ループの例 ]]>
                </title>
                <description>
                    <![CDATA[ ループは、すべてのモダンなプログラミング言語で頻繁に使用されている便利な機能です。 特定の反復的なタスクを自動化したい場合や、プログラム内で反復的なコードを書くのを避けたい場合は、ループを使用するのが最適です。 ループは、条件が満たされるまで繰り返し実行される一連の指示です。Python でループがどのように機能するかについて詳しく学びましょう。 Python におけるループ Python には 2 種類のループが組み込まれています。  * for ループ  * while ループ Python で while ループを作成する方法とその仕組みに焦点を当てましょう。 Python における while ループとは何か Python の while ループの一般的な構文は次のようになります。 while condition:     execute this code in the loop's body while ループは、条件が True の間コードを実行します。その条件が True でなくなるまで、必要なコード文のセットを実行し続けます。 while ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/python-do-while-loop-example/</link>
                <guid isPermaLink="false">656511608d146503e8e3e58e</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Saki Basken ]]>
                </dc:creator>
                <pubDate>Wed, 06 Dec 2023 11:54:32 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/11/pexels-pixabay-106155.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/python-do-while-loop-example/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Do While – Loop Example</a>
      </p><p>ループは、すべてのモダンなプログラミング言語で頻繁に使用されている便利な機能です。</p><p>特定の反復的なタスクを自動化したい場合や、プログラム内で反復的なコードを書くのを避けたい場合は、ループを使用するのが最適です。</p><p>ループは、条件が満たされるまで繰り返し実行される一連の指示です。Python でループがどのように機能するかについて詳しく学びましょう。</p><h2 id="python-">Python におけるループ</h2><p>Python には 2 種類のループが組み込まれています。</p><ul><li><code>for</code> ループ</li><li><code>while</code> ループ</li></ul><p>Python で <code>while</code> ループを作成する方法とその仕組みに焦点を当てましょう。</p><h2 id="python-while-">Python における while ループとは何か</h2><p>Python の <code>while</code> ループの一般的な構文は次のようになります。</p><pre><code class="language-python">while condition:
    execute this code in the loop's body
</code></pre><p>while ループは、条件が True の間コードを実行します。その条件が True でなくなるまで、必要なコード文のセットを実行し続けます。</p><p>while ループは、実行する前に必ずまず条件をチェックします。</p><p>条件が <code>True</code> となった場合、ループはループ内のコードを実行します。</p><p>たとえば、次のループは、<code>number</code> が <code>10</code> 未満である限り実行されます。</p><pre><code class="language-python">number = 0
while number &lt; 10:
    print(f"Number is {number}!")
    number = number + 1
</code></pre><p>出力:</p><pre><code>Number is 0!
Number is 1!
Number is 2!
Number is 3!
Number is 4!
Number is 5!
Number is 6!
Number is 7!
Number is 8!
Number is 9!
</code></pre><p>ここでは、最初に変数 <code>number</code> が <code>0</code> に設定されています。</p><p>コードが実行される前に、Python は条件 (<code>number &lt; 10</code>) をチェックします。True と判断されるため、print 文が実行され、<code>Number is 0!</code> とコンソールに出力されます。</p><p>その後、<code>number</code> の値は <code>1</code> 増加します。条件が再確認され、再び True であるため、<code>number</code> が <code>9</code> に等しくなるまで全体の手順が繰り返されます。</p><p><code>Number is 9!</code> と出力された後、<code>number</code> の値は増加しますが、<code>number</code> は <code>10</code> に等しくなるため、その時点で条件が満たされなくなり、ループは終了します。</p><p>下の例のように、条件を満たさない場合、<code>while</code> ループが全く実行されない可能性もあります。</p><pre><code class="language-python">number = 50
while number &lt; 10 :
    print(f"Number is {number}!")
</code></pre><p>条件は常に False であるため、ループ内のコードは実行されません。</p><h3 id="-">無限ループを作らない</h3><p>上の例でもわかるように、<code>while</code> ループには通常、ループ内に値が変化する変数が伴います。そして最終的にループがいつ終了するかが決まっています。</p><p>この 1 行を追加しないと、無限ループが作成されてしまいます。</p><p><code>number</code> の値は増加も更新もされません。常に最初に設定された <code>0</code> のままであるため、<code>number &lt; 10</code> という条件は永久に True となってしまいます。これは、ループが永遠に続いてしまうことを意味します。</p><pre><code class="language-python">
# don't run this

number = 0
while number &lt; 10:
    print(f"Number is {number}!")
</code></pre><p>出力：</p><pre><code>Number is 0!
Number is 0!
Number is 0!
Number is 0!
Number is 0!
Number is 0!
Number is 0!
...
</code></pre><p>このコードは無限に実行されてしまいます。</p><p>これは、下のコードと同じことです。</p><pre><code class="language-python">
#don't run this
while True:
    print("I am always true")
</code></pre><p>このような状況に陥ったらどうしますか？</p><p><code>Ctrl + C</code> を押すと、ループを終了することができます。</p><h2 id="do-while-">do while ループとは何か</h2><p>他のプログラミング言語における <code>do while</code> ループの一般的な構文は次のようになります。</p><pre><code>do {
  loop block statement to be executed;
  }
while(condition);
</code></pre><p>たとえば、C の do while ループは次のようになります。</p><pre><code class="language-c">#include &lt;stdio.h&gt;
 
int main(void)
 {
   int i = 10;
   do {
      printf("the value of i: %i\n", i);
      i++;
      }
  while( i &lt; 20 );
 }
</code></pre><p>do while ループのユニークな点は、ループブロック内のコードが少なくとも 1 回は実行されるということです。</p><p>ブロック内のコードは 1 回実行され、コードの実行<em>後にのみ</em>条件が確認されます。</p><p>したがって、最初にコードが 1 度実行されてから、条件がチェックされます。</p><p>チェックされた条件が true と判断されると、ループが続行されます。</p><p>コードを少なくとも一度は実行したい場合に、do while ループは便利です。</p><p>たとえば、ユーザーからの入力を受け取るプログラムを作成している場合に、正数のみを求めることがあります。コードは少なくとも 1 回は実行されます。ユーザーが送信した数値が負数の場合、ループは実行し続けます。プラスの場合は停止します。</p><p>Python には他の言語のように <code>do while</code> ループを明確に作成するための組み込み機能はありません。しかし、Python でも <code>do while</code> ループと同じ機能を果たすことは可能です。</p><h2 id="python-do-while-">Python で do while ループを作成する方法</h2><p>Python で <code>do while</code> ループを作成するには、他の言語の <code>do while</code> ループと同様な機能を果たすように、<code>while</code> ループに少し手を加える必要があります。</p><p>これまでのおさらいですが、<code>do while</code> ループは少なくとも 1 回実行されます。条件が満たされると、再度実行されます。</p><p>一方で、<code>while</code> ループは必ず一度は実行されるというわけではなく、実際には一度も実行されないこともあります。条件が満たされたときのみに実行されます。</p><p>では、コード行を少なくとも 1 回は実行したいとしましょう。</p><pre><code class="language-python">secret_word = "python"
counter = 0

while True:
    word = input("Enter the secret word: ").lower()
    counter = counter + 1
    if word == secret_word:
        break
    if word != secret_word and counter &gt; 7: 
        break
</code></pre><p>このコードは少なくとも一度は実行され、ユーザーに入力を求めます。</p><p><code>True</code> があることによって、少なくとも 1 回は実行されることが保証されます。この <code>True</code> は使い方を誤ると無限ループになってしまうため注意してください。</p><p>ユーザーが正しいシークレットワードを入力することで、ループは終了します。</p><p>ユーザーが間違ったシークレットワードを 7 回以上入力すると、ループは終了します。</p><p><code>break</code> 文を使用すると、<code>while</code> ループのフローを制御し、無限ループに陥ってしまうのを防ぐことができます。</p><p><code>break</code> 文は現ループを直ちに終了させます。</p><p>これが、Python で <code>do while</code> ループと同様の機能を作る方法です。</p><p>このループのコードは必ず少なくとも 1 回は実行されます。条件が満たされない場合はループを継続し、条件が満たされた時点で終了します。</p><h2 id="--1">まとめ</h2><p>これで、Python で <code>do while</code> ループを作成する方法がわかりました。</p><p>Python についてさらに詳しく知りたい場合は、freeCodeCamp の YouTube チャンネルの動画、<a href="https://www.youtube.com/watch?v=8ext9G7xspg&amp;t=40s">Python 12 のプロジェクト</a>をご覧ください。初心者向けの動画で、12 個のプロジェクトを作成しながら学べます。</p><p>また、freeCodeCamp には、Python の基礎を十分に理解し、包括的な理解を深められる、無料の <a href="https://www.freecodecamp.org/learn/scientific-computing-with-python/">Python 認定講座</a>もあります。</p><p>認定講座の最後には、学んだことを実践するために 5 つのプロジェクトを作成します。</p><p>読んでいただき、ありがとうございました。Happy learning!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python における %.2f – その意味とは？ ]]>
                </title>
                <description>
                    <![CDATA[ Python では、データ型をフォーマットするためのさまざまな方法があります。 %f フォーマッタは、主に浮動小数点数 (小数を含む数値) を書式設定する際に使用されます。 %f フォーマッタを使うと、浮動小数点数を切り上げたときに返される小数点以下の位を指定することができるのです。 Python で %f フォーマッタを使用する方法 このセクションでは、%f フォーマッタの使い方と、異なるパラメータを使うことで、違う結果を返す使用例をいくつか紹介します。 最初の例は次のとおりです。 floatNumber = 1.9876 print("%f" % floatNumber) # 1.987600 上の例のように %f を使用すると、数値に 2 つのゼロが追加されました。しかし、特筆すべきことは何もありません。結果の値を変更するために他に何ができるかを見ていきましょう。 %f フォーマッタは引用符で囲んでネストする必要があり、フォーマットする浮動小数点数とはモジュロ演算子 (%) で、"%f" % floatNumber  のように区切らなければなりません。 他の例も ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/2f-in-python-what-does-it-mean/</link>
                <guid isPermaLink="false">65301b2d1a8daf03fb83ce39</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Saki Basken ]]>
                </dc:creator>
                <pubDate>Sun, 22 Oct 2023 11:28:40 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/10/susan-holt-simpson-GQ327RPuxhI-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/2f-in-python-what-does-it-mean/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">%.2f in Python – What does it Mean?</a>
      </p><p>Python では、データ型をフォーマットするためのさまざまな方法があります。</p><p><code>%f</code> フォーマッタは、主に浮動小数点数 (小数を含む数値) を書式設定する際に使用されます。</p><p><code>%f</code> フォーマッタを使うと、浮動小数点数を切り上げたときに返される小数点以下の位を指定することができるのです。</p><h2 id="python-f-">Python で <code>%f</code> フォーマッタを使用する方法</h2><p>このセクションでは、<code>%f</code> フォーマッタの使い方と、異なるパラメータを使うことで、違う結果を返す使用例をいくつか紹介します。</p><p>最初の例は次のとおりです。</p><pre><code class="language-python">floatNumber = 1.9876

print("%f" % floatNumber)
# 1.987600</code></pre><p>上の例のように <code>%f</code> を使用すると、数値に 2 つのゼロが追加されました。しかし、特筆すべきことは何もありません。結果の値を変更するために他に何ができるかを見ていきましょう。</p><p><code>%f</code> フォーマッタは引用符で囲んでネストする必要があり、フォーマットする浮動小数点数とはモジュロ演算子 (%) で、<code>"%f" % floatNumber</code> のように区切らなければなりません。</p><p>他の例もみてみましょう。</p><pre><code class="language-python">floatNumber = 1.9876

print("%.1f" % floatNumber)
# 2.0</code></pre><p>上記のコードでは、<code>%f</code> 演算子 % と f の間に .1 を追加しました。これは、数字を小数点第 1 位まで切り上げることを意味します。</p><p>% と f の間に渡した数字の前にあるピリオドまたはドット記号 (.) を省略すると、最初の例と似た結果が得られることに注意してください。</p><p>例で得られた結果は、1.9876 が小数点第 1 位まで切り上げられて 2.0 になったものです。</p><p><code>%.2f</code> を使うとどうなるかみてみましょう。</p><pre><code class="language-python">floatNumber = 1.9876

print("%.2f" % floatNumber)
# 1.99</code></pre><p>予想どおり、浮動小数点数 (1.9876) は小数点第 2 位に切り上げられ、1.99 になりました。したがって、<code>%.2f</code> は小数点以下第 2 位に切り上げることを意味します。</p><p>コードを使って、フォーマッタで数値を変更すると何が起こるかをいろいろ試してみてください。</p><h2 id="python-d-">Python で<strong> </strong><code><strong>%d</strong></code><strong> </strong>フォーマッタを使用する方法</h2><p>Python で浮動小数点数に使用できるもう 1 つの書式設定方法は、<code>%d</code> フォーマッタです。これは浮動小数点数の整数部分を返します。</p><p>以下はその例になります。</p><pre><code class="language-python">floatNumber = 1.9876

print("%d" % floatNumber)
# 1</code></pre><p>上の例では、<code>floatNumber = 1.9876</code> という浮動小数点数を作成しました。</p><p><code>floatNumber</code> 変数が <code>%d</code> を使用してフォーマットされたので、1 のみが返されました。</p><p><code>%d</code> フォーマッタは小数部分を無視し、整数のみを返します。</p><h2 id="-">まとめ</h2><p>この記事では、Python の <code>%f</code> フォーマッタについて説明しました。これを使用することによって、浮動小数点数の位を指定することができます。</p><p>指定されたパラメータに応じて、<code>%f</code> フォーマッタは浮動小数点値を指定された最も近い小数点以下の桁に切り上げます。</p><p>浮動小数点数の整数部分のみを返す <code>%d</code> フォーマッタについても説明しました。</p><p>Happy coding!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python で文字列を追加する – STR 追加 ]]>
                </title>
                <description>
                    <![CDATA[ この記事では、Python で文字列を追加するさまざまな方法を学びます。 文字列の追加について話すときによく使用されるもう 1 つの用語は、連結です。そのため、追加と連結という用語が同じ意味で使用されることがよくあります。 いずれにしても、文字列を追加または連結するとは、ある文字列の値を別の文字列に追加または結合することを意味します。 簡単なコード例を使って、文字列追加のさまざまな方法を見ていきましょう。 + 演算子を使用して Python で文字列を追加する方法 + 演算子を使用して 2 つ以上の文字列を結合できます。例えば、以下のようにすることができます。 first_name = "John" last_name = "Doe" print(first_name + last_name) # JohnDoe 上の例では、first_name と last_name という 2 つの文字列変数を作成しました。それぞれ「John」と「Doe」という値を持ちます。 これらの変数を追加するには、first_name + last_name のように、+ 演算子を使用しまし ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/append-a-string-in-python-str-appending/</link>
                <guid isPermaLink="false">647f6fcf60403f05988fc265</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Saki Basken ]]>
                </dc:creator>
                <pubDate>Fri, 09 Jun 2023 09:07:59 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/06/alex-chumak-zGuBURGGmdY-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/append-a-string-in-python-str-appending/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Append a String in Python – STR Appending</a>
      </p><p>この記事では、Python で文字列を追加するさまざまな方法を学びます。</p><p>文字列の追加について話すときによく使用されるもう 1 つの用語は、連結です。そのため、追加と連結という用語が同じ意味で使用されることがよくあります。</p><p>いずれにしても、文字列を追加または連結するとは、ある文字列の値を別の文字列に追加または結合することを意味します。</p><p>簡単なコード例を使って、文字列追加のさまざまな方法を見ていきましょう。</p><h2 id="-python-"><strong><code>+</code></strong> 演算子を使用して Python で文字列を追加する方法</h2><p><code>+</code> 演算子を使用して 2 つ以上の文字列を結合できます。例えば、以下のようにすることができます。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print(first_name + last_name)
# JohnDoe</code></pre><p>上の例では、<code>first_name</code> と <code>last_name</code> という 2 つの文字列変数を作成しました。それぞれ「John」と「Doe」という値を持ちます。</p><p>これらの変数を追加するには、<code>first_name + last_name</code> のように、<code>+</code> 演算子を使用しました。</p><p>出力された <code>JohnDoe</code> から、2 つの変数がスペースを入れずに結合されたことがわかります。</p><p>"John " のように、<code>first_name</code> の値の後にスペースを追加することができます。または、" Doe" のように、<code>last_name</code> の値の前にスペースを追加することもできます。すると、以下のようになります。</p><pre><code class="language-python">first_name = "John "
last_name = "Doe"

print(first_name + last_name)
# John Doe</code></pre><p>文字列を追加するときに引用符を使用して、次のとおりにスペースを追加することもできます。</p><pre><code class="language-python">first_name = "John "
last_name = "Doe"

print(first_name + "" + last_name)
# John Doe</code></pre><h2 id="join-python-"><strong><code>join()</code></strong> メソッドを使用して Python で文字列を追加する方法</h2><p>Python で文字列を追加するもう 1 つの方法は、<code>join()</code> メソッドを使用することです。</p><p> <code>join()</code> メソッドは、反復可能なオブジェクト (リスト、タプル、文字列、セット、ディクショナリー) をパラメーターとして受け取ります。構文は次のようになります。</p><pre><code class="language-python">string.join(iterable_object)</code></pre><p>以下は、<code>join()</code> メソッドを使用して文字列を追加する方法の一例です。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("".join([first_name, last_name]))
# JohnDoe</code></pre><p>ここでは、2 つの文字列変数をパラメーターとして <code>join()</code> メソッドに渡します。</p><p>また、変数が角括弧 <code>[]</code> でネストされており、文字列のリスト <code>[first_name, last_name]</code> になっていることがわかります。これは、<code>join()</code> メソッドが 1 つのパラメーターしか受け取らず、そのパラメーターは反復可能なオブジェクトである必要があるためです。</p><p><code>join()</code> メソッドの一つ不思議な点は、ピリオド (ドット) の前にくる引用符です。</p><p>これらの引用符を使用して、反復可能なオブジェクトの値の間に表示される内容を指定することができます。例を挙げて説明しましょう。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("#".join([first_name, last_name]))
# John#Doe</code></pre><p>上の例では、<code>"#".join([first_name, last_name])</code> のように、<code>#</code> 記号を引用符に追加しました。この <code>#</code> は、<code>John#Doe</code> でわかるように、文字列の間に追加されました。</p><p>前のセクションでは、文字列間にスペースを追加するためにさまざまな方法を使用する必要がありました。<code>join()</code> メソッドの前にある引用符の中にスペースを追加することで、これを簡単に実現できます。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print(" ".join([first_name, last_name]))
# John Doe</code></pre><h2 id="string-format-python-">String<strong> <code>format()</code> </strong>メソッドを使用して Python で文字列を追加する方法</h2><p>string <code>format()</code> メソッドの構文は次のようになります。</p><pre><code class="language-txt">{}.format(value)</code></pre><p>基本的に、文字列の format メソッドは、上記の構文で指定した値のパラメーターを受け取り、それを波括弧の中に挿入します。結果として得られる値は文字列となります。</p><p>以下はその例になります。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("{} {}".format(first_name, last_name))
# John Doe</code></pre><p>この例では、2 つの波括弧と 2 つのパラメーター (<code>first_name</code> and <code>last_name</code>) を指定したため、string <code>format()</code> メソッドは文字列をそれぞれの波括弧に挿入します。</p><p>波括弧のある引用符内には、さらに文字列を追加することができます。これによって string <code>format()</code> メソッドの処理機能が影響されることはありません。それらの文字列は依然として波括弧に挿入されます。つまり、こうなります。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("My name is {} {}".format(first_name, last_name))
# My name is John Doe</code></pre><h2 id="f-string-python-"><strong>f-string</strong> を使用して Python で文字列を追加する方法</h2><p>この方法は比較的、理解しやすいものです。f-string は、文字列の書式設定と補間を容易にするために Python に導入されましたが、文字列を追加するために使用することもできます。</p><p>f-string を使用するには、<code>f""</code> のように、f の後に引用符を続けるだけです。そうすると、引用符の間に文字列と変数名を挿入できます。変数名はすべて波括弧で囲む必要があります。</p><p>以下の例をご覧ください。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print(f"{first_name} {last_name}")
# John Doe</code></pre><h2 id="-">まとめ</h2><p>この記事では、Python で文字列を追加するために使用できるさまざまな方法について説明しました。</p><p>文字列を別の文字列に追加するということは、文字列を結合することを意味します。</p><p>この記事とコード例で説明したように、Python では <code>+</code> 演算子、<code>join()</code> メソッド、<code>string()</code> フォーマットメソッド、および f-string を使用して文字列を追加できます。</p><p>Happy coding!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python の print で変数を出力 – 文字列と変数の出力方法 ]]>
                </title>
                <description>
                    <![CDATA[ Python は幅広い用途に使える柔軟性の高い言語で、何かを実現する方法が複数存在することもよくあります。 このチュートリアルでは、文字列と変数を一緒に出力する方法をいくつか紹介します。 では始めましょう。 Python の print() 関数の使い方 Python で何かを出力に表示するには print() 関数を使います。キーワード print の後に 1 組の丸括弧 () を続ける構文です。 # 文字列の出力方法 print("Hello world") # 整数の出力方法 print(7) # 変数の出力方法 # 変数の内容だけを出力するには、括弧に変数名を入れます fave_language = "Python" print(fave_language) # 出力 # Hello world # 7 # Python 括弧を省略するとエラーが発生します。 print "hello world" # コードを実行した際の出力内容: # File ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/python-print-variable-how-to-print-a-string-and-variable/</link>
                <guid isPermaLink="false">64242311c549af058e38854d</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Wed, 29 Mar 2023 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/03/denise-jans-_dXkaD3l574-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/python-print-variable-how-to-print-a-string-and-variable/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Print Variable – How to Print a String and Variable</a>
      </p><p>Python は幅広い用途に使える柔軟性の高い言語で、何かを実現する方法が複数存在することもよくあります。</p><p>このチュートリアルでは、文字列と変数を一緒に出力する方法をいくつか紹介します。</p><p>では始めましょう。</p><h2 id="python-print-">Python の <code>print()</code> 関数の使い方</h2><p>Python で何かを出力に表示するには <code>print()</code> 関数を使います。キーワード <code>print</code> の後に 1 組の丸括弧 <code>()</code> を続ける構文です。</p><pre><code class="language-python"># 文字列の出力方法
print("Hello world")

# 整数の出力方法
print(7)

# 変数の出力方法
# 変数の内容だけを出力するには、括弧に変数名を入れます

fave_language = "Python"
print(fave_language)

# 出力

# Hello world
# 7
# Python
</code></pre><p>括弧を省略するとエラーが発生します。</p><pre><code class="language-python">print "hello world"

# コードを実行した際の出力内容:
# File "/Users/dionysialemonaki/python_articles/demo.py", line 1
#     print "hello world"
#     ^^^^^^^^^^^^^^^^^^^
# SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
</code></pre><p>Visual Studio Code で <a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python">Python 拡張機能</a>を使って Python のコードを書いている場合には、誤りがあることを示す下線とヒントも表示されることでしょう。</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/japanese/news/content/images/2023/03/Screenshot-2021-12-07-at-3.08.14-PM.png" class="kg-image" alt="Screenshot-2021-12-07-at-3.08.14-PM" srcset="https://www.freecodecamp.org/japanese/news/content/images/size/w600/2023/03/Screenshot-2021-12-07-at-3.08.14-PM.png 600w, https://www.freecodecamp.org/japanese/news/content/images/size/w1000/2023/03/Screenshot-2021-12-07-at-3.08.14-PM.png 1000w, https://www.freecodecamp.org/japanese/news/content/images/2023/03/Screenshot-2021-12-07-at-3.08.14-PM.png 1590w" sizes="(min-width: 720px) 720px" width="1590" height="318" loading="lazy"></figure><p>先ほど述べたように、print 文はさまざまな情報を出力するために使われます。テキストデータ、数値データ、変数やその他のデータ型などを出力できます。</p><p>そして 1 つの文でテキスト (文字列) と変数を組み合わせて出力することも可能です。</p><p>ここから、その方法をいくつか見ていきましょう。</p><h2 id="-python-">連結 <code>+</code> を使用して、Python の変数と文字列を出力する</h2><p>concatenate (連結) を辞書で調べると、何かを鎖状やひと続きに繋げることという意味が出てきます。</p><p>連結は、Python の加算演算子 <code>+</code> を使用して、さまざまな物 (データ) を互いに足し合わせて実行します。</p><p>連結は文字列に対してのみ使用できることに注意してください。つまり、文字列と連結したい変数が整数型の場合、変数を <code>str()</code> 関数で文字列に変換しなくてはなりません。</p><p>下記は、変数の値を他のテキストと一緒に出力したい場合の例です。</p><p>ダブルクォートで囲んだ文字列と、囲んでいない変数名を、加算演算子を使って連結しています。</p><pre><code class="language-python">fave_language = "Python"

print("I like coding in " + fave_language + " the most")

# 出力
# I like coding in Python the most
</code></pre><p>文字列の連結では、スペースを自分で追加しなければなりません。もし上記の例で引用符の内側にスペースを入れなかった場合、出力は次のようになります。</p><pre><code class="language-python">fave_language = "Python"

print("I like coding in" + fave_language + "the most")

# 出力
# I like coding inPythonthe most
</code></pre><p>スペースを分けて連結しても構いません。</p><pre><code class="language-python">fave_language = "Python"

print("I like coding in" + " " + fave_language + " " + "the most")

# 出力
# I like coding in Python the most
</code></pre><p>ただこの方法はエラーを引き起こしがちで、手間もかかるため、最善の方法ではありません。</p><h2 id="-python--1">カンマ区切りを使用して、Python の変数と文字列を出力する</h2><p>テキストと変数をカンマで区切って並べて、1 つの print 文で出力できます。</p><pre><code class="language-python">first_name = "John"

print("Hello",first_name)

# 出力
# Hello John
</code></pre><p>上記の例では、まずダブルクォートで囲んだテキスト (文字列 <code>Hello</code>) を入れました。</p><p>その後にカンマを追加して区切り、そして変数名 (<code>first_name</code>) を入れました。</p><p>次のように、変数の後にさらにテキストを追加することも可能です。</p><pre><code class="language-python">first_name = "John"

print("Hello",first_name,"good to see you")

# 出力
# Hello John good to see you
</code></pre><p>複数の変数を使うこともできます。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello",first_name,last_name,"good to see you")

# 出力
# Hello John Doe good to see you
</code></pre><p>各項目をカンマで区切ることを忘れないでください。</p><p>上記の例のように、テキストと変数の間にも、変数と変数の間にもカンマを入れて区切ります。</p><p><code>first_name</code> と <code>last_name</code> の間にカンマがないと、次のようなエラーが発生します。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello",first_name last_name,"good to see you")

# 出力
# File "/Users/dionysialemonaki/python_articles/demo.py", line 4
#     print("Hello",first_name last_name,"good to see you")
#                  ^^^^^^^^^^^^^^^^^^^^
# SyntaxError: invalid syntax. Perhaps you forgot a comma?
</code></pre><p>上記のように Python のエラーメッセージはとても分かりやすく、デバッグ作業を楽にしてくれます。</p><h2 id="-python--2">文字列のフォーマットを使用して、Python の変数と文字列を出力する</h2><p>変数の値を追加したい場所に 1 組の波括弧 <code>{}</code> を含めることで、文字列のフォーマットを使用できます。</p><pre><code class="language-python">first_name = "John"

print("Hello {}, hope you're well!")
</code></pre><p>この例では <code>first_name</code> という変数が 1 つあります。</p><p>print 文にはダブルクォートで囲まれた出力対象のテキストが入っています。</p><p>その中で、変数 <code>first_name</code> の値を追加したい場所に 1 組の波括弧を入れてあります。</p><p>ここでこのコードを実行してみると、次のように出力されます。</p><pre><code class="language-python"># 出力
# Hello {}, hope you're well!
</code></pre><p>これだけでは変数 <code>first_name</code> の値が出力されませんでした。</p><p>変数の値を出力するには、文字列の終わりに文字列メソッド <code>.format()</code> を追加しなければなりません。閉じる側のダブルクォートの直後に、次のように追加します。</p><pre><code class="language-python">first_name = "John"

print("Hello {}, hope you're well!".format(first_name))

# 出力
# Hello John, hope you're well!
</code></pre><p>複数の変数がある場合には、出力したい変数の数に合わせて波括弧を追加します。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello {} {}, hope you're well!")
</code></pre><p>この例では 2 つの変数を作成して、その両方を続けて出力したいので、変数と置き換えたい場所に 2 組の波括弧を追加しました。</p><p>ここで <code>.format()</code> メソッドについて、変数名をどの順で渡すかが重要になります。</p><p>つまり、メソッドに 1 つ目として渡された変数の値が 1 つ目の波括弧の場所に入り、2 つ目の変数の値が 2 つ目の波括弧の場所に入ります。</p><p>メソッドに変数名を渡す際にはカンマで区切ることを忘れないでください。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello {} {}, hope you're well!".format(first_name,last_name))

# 出力
# Hello John Doe, hope you're well!
</code></pre><p>メソッドに渡す変数名の順番を入れ替えると、出力も変わります。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print("Hello {} {}, hope you're well!".format(last_name,first_name))

# 出力
# Hello Doe John, hope you're well!
</code></pre><h2 id="f-strings-python-"><code>f-strings</code> を使用して、Python の変数と文字列を出力する</h2><p><code>f-strings</code> は、文字列のフォーマットを、一つ前のセクションで説明したメソッドよりも読みやすく簡潔に書ける方法です。(訳注: フォーマット済み文字列リテラルとも呼ばれます)</p><p>構文が簡単で、手作業が少なく済みます。</p><p><code>f-string</code> を作成する一般的な構文は次の通りです。</p><pre><code class="language-python">print(f"I want this text printed to the console!")

# 出力
# I want this text printed to the console!
</code></pre><p>まず、<code>print()</code> 関数の中でダブルクォートの前に <code>f</code> の文字を入れます。</p><p>変数 1 つと文字列を一緒に出力する場合も、同じようにダブルクォートの前に <code>f</code> の文字を入れます。</p><p>そしてダブルクォートの間に出力したいテキストを入れ、変数の値を入れたい場所に波括弧を追加したら、波括弧の中に変数名を入れます。</p><pre><code class="language-python">first_name = "John"

print(f"Hello, {first_name}!")

# 出力
# Hello, John!
</code></pre><p>複数の変数を出力したい場合は、波括弧の組を追加して 2 つ目の変数名を入れます。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print(f"Hello, {first_name} {last_name}!")

# 出力
# Hello, John Doe!
</code></pre><p>変数名は順番通りに出力されるため、出力したい順番に合わせて記述してください。</p><p>変数名の順番を逆にすると、出力は次のようになります。</p><pre><code class="language-python">first_name = "John"
last_name = "Doe"

print(f"Hello, {last_name} {first_name}!")

# 出力
# Hello, Doe John!
</code></pre><h2 id="-">まとめ</h2><p>最後までお読みいただきありがとうございます！これで、Python で文字列と変数を組み合わせて出力する方法をいくつか学ぶことができました。</p><p>Python をもっと詳しく学びたいなら、freeCodeCamp の <a href="https://www.freecodecamp.org/japanese/learn/scientific-computing-with-python">Python 認定講座</a>をおすすめします。</p><p>基礎からスタートして徐々に高度な概念を学んでいくため、初心者にも最適です。また、最後には 5 つのプロジェクトの開発を通して学習した内容を実践できます。</p><p>Happy coding!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python if __name__ == "__main__" の解説 (コード例付き) ]]>
                </title>
                <description>
                    <![CDATA[ Python インタープリターは、Python ファイルを読み込むとまずいくつか特別な変数を設定します。それからファイルに書かれたコードを実行します。 その変数の 1 つが __name__ です。 順を追ってこの記事とコードスニペットを読んでいけば、if __name__ == "__main__" の使い方とその重要性がわかるようになるでしょう。 Python モジュールの解説 Python ファイルは拡張子 .py が付くファイルで、モジュールとも呼ばれます。モジュールは、関数、クラス、そして変数を定義できます。 インタープリターがモジュールを実行する際、実行されるモジュールがメインプログラムの場合は、__name__ 変数が __main__ に設定されます。 しかしそのモジュールを他のモジュールからインポートしているコードの場合は、__name__ 変数はそのモジュールの名前に設定されます。 例を見てみましょう。file_one.py という名前の Python モジュールを作成し、その中にこのトップレベルコードを貼り付けてください。 # Python file ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/if-name-main-python-example/</link>
                <guid isPermaLink="false">640cea675ba18905807bfc91</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Wed, 15 Mar 2023 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/03/5f9c99de740569d1a4ca2229.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/if-name-main-python-example/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python if __name__ == __main__ Explained with Code Examples</a>
      </p><p>Python インタープリターは、Python ファイルを読み込むとまずいくつか特別な変数を設定します。それからファイルに書かれたコードを実行します。</p><p>その変数の 1 つが <code>__name__</code> です。</p><p>順を追ってこの記事とコードスニペットを読んでいけば、<code>if __name__ == "__main__"</code> の使い方とその重要性がわかるようになるでしょう。</p><h2 id="python-">Python モジュールの解説</h2><p>Python ファイルは拡張子 <code>.py</code> が付くファイルで、モジュールとも呼ばれます。モジュールは、関数、クラス、そして変数を定義できます。</p><p>インタープリターがモジュールを実行する際、実行されるモジュールがメインプログラムの場合は、<code>__name__</code> 変数が <code>__main__</code> に設定されます。</p><p>しかしそのモジュールを他のモジュールからインポートしているコードの場合は、<code>__name__</code> 変数はそのモジュールの名前に設定されます。</p><p>例を見てみましょう。<code>file_one.py</code> という名前の Python モジュールを作成し、その中にこのトップレベルコードを貼り付けてください。</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># Python file_one モジュール

print("file_one の __name__ の設定内容: {}".format(__name__))
</code></pre><figcaption>file_one.py</figcaption></figure><p>このファイルを実行すると、先ほど述べた内容が確認できます。このモジュールの変数 <code>__name__</code> は <code>__main__</code> に設定されます。</p><pre><code>file_one の __name__ の設定内容: __main__
</code></pre><p>(訳注: 実行時に <code>SyntaxError: Non-ASCII character '\xe3' in file file_one.py on line 1, but no encoding declared</code> というエラーが発生する場合は、Python 3.x 系で実行するか、ファイルの先頭に <code># -*- coding: utf-8 -*-</code> という行を追加してください。)</p><p>ではもう 1 つ <code>file_two.py</code> という名前のファイルを追加して、中にこのコードを貼り付けてください。</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># インポートする Python モジュール

print("file_two の __name__ の設定内容: {}".format(__name__))
</code></pre><figcaption>file_two.py</figcaption></figure><p>そして <code>file_two</code> モジュールをインポートするために、<code>file_one.py</code> のコードを次のように変更してください。</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># 実行する Python モジュール
import file_two

print("file_one の __name__ の設定内容: {}".format(__name__))
</code></pre><figcaption>file_one.py</figcaption></figure><p>もう一度 <code>file_one</code> のコードを実行すると、<code>file_one</code> の <code>__name__</code> 変数は変わらず <code>__main__</code> のままですが、<code>file_two</code> の <code>__name__</code> 変数はモジュール名、つまり <code>file_two</code> に設定されます。</p><p>実行結果は次のようになります。</p><pre><code>file_two の __name__ の設定内容: file_two
file_one の __name__ の設定内容: __main__
</code></pre><p>しかし直接 <code>file_two</code> を実行した場合には、<code>__name__</code> が <code>__main__</code> に設定されるのが確認できます。</p><pre><code>file_two の __name__ の設定内容: __main__
</code></pre><p>実行するファイル / モジュールの <code>__name__</code> 変数は常に <code>__main__</code> となります。ですがその他のインポートされたモジュールの <code>__name__</code> 変数は、モジュール名に設定されます。</p><h2 id="python--1">Python ファイルの命名規則</h2><p><code>__name__</code> と <code>__main__</code> は通常このような形で使われます。</p><pre><code class="language-python">if __name__ == "__main__":
    # ここに処理内容を記述
</code></pre><p>これがどのように機能するか、そしてこれらの変数をどうやって使うかを見ていきましょう。</p><p><code>file_one</code> と <code>file_two</code> を次のように変更してください。</p><p><code>file_one</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># 実行する Python モジュール
import file_two

print("file_one の __name__ の設定内容: {}".format(__name__))

if __name__ == "__main__":
    print("file_one が直接実行されました")
else:
    print("file_one がインポートされて実行されました")
</code></pre><figcaption>file_one.py</figcaption></figure><p><code>file_two</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># インポートする Python モジュール

print("file_two の __name__ の設定内容: {}".format(__name__))

if __name__ == "__main__":
    print("file_two が直接実行されました")
else:
    print("file_two がインポートされて実行されました")
</code></pre><figcaption>file_two.py</figcaption></figure><p>先ほどと同様に <code>file_one</code> を実行すると、プログラムが 2 つのモジュールのどちらが <code>__main__</code> かを認識して、<code>if else</code> 文に従ってコードを実行したことが確認できます。</p><p>実行結果は次のようになります。</p><pre><code>file_two の __name__ の設定内容: file_two
file_two がインポートされて実行されました
file_one の __name__ の設定内容: __main__
file_one が直接実行されました
</code></pre><p>今度は <code>file_two</code> を実行してみると、<code>__name__</code> 変数が <code>__main__</code> に設定されることが確認できます。</p><pre><code>file_two の __name__ の設定内容: __main__
file_two が直接実行されました
</code></pre><p>このようなモジュールがインポートまたは実行されると、関数がインポートされ、トップレベルコードが実行されます。</p><p>その処理の動作を確認するために、ファイルを次のように変更しましょう。</p><p><code>file_one</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># 実行する Python モジュール
import file_two

print("file_one の __name__ の設定内容: {}".format(__name__))

def function_one():
    print("function_one が実行されました")

def function_two():
    print("function_two が実行されました")

if __name__ == "__main__":
    print("file_one が直接実行されました")
else:
    print("file_one がインポートされて実行されました")
</code></pre><figcaption>file_one.py</figcaption></figure><p><code>file_two</code>:</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># インポートする Python モジュール

print("file_two の __name__ の設定内容: {}".format(__name__))

def function_three():
    print("function_three が実行されました")

if __name__ == "__main__":
    print("file_two が直接実行されました")
else:
    print("file_two がインポートされて実行されました")
</code></pre><figcaption>file_two.py</figcaption></figure><p>これで関数が読み込まれますが、実行はされません。</p><p>関数を実行するには、<code>file_one</code> の <code>if __name__ == "__main__"</code> の部分を次のように変更してください。</p><pre><code class="language-python">if __name__ == "__main__":
    print("file_one が直接実行されました")
    function_two()
else:
    print("file_one がインポートされて実行されました")
</code></pre><p><code>file_one</code> を実行すると次のように表示されるはずです。</p><pre><code>file_two の __name__ の設定内容: file_two
file_two がインポートされて実行されました
file_one の __name__ の設定内容: __main__
file_one が直接実行されました
function_two が実行されました
</code></pre><p>また、インポートしたファイルの関数を実行することもできます。<code>file_one</code> の <code>if __name__ == "__main__"</code> の部分を次のように変更しましょう。</p><pre><code class="language-python">if __name__ == "__main__":
    print("file_one が直接実行されました")
    function_two()
    file_two.function_three()
else:
    print("file_one がインポートされて実行されました")
</code></pre><p>実行結果は次のようになるでしょう。</p><pre><code>file_two の __name__ の設定内容: file_two
file_two がインポートされて実行されました
file_one の __name__ の設定内容: __main__
file_one が直接実行されました
function_two が実行されました
function_three が実行されました
</code></pre><p>ここで、例えば <code>file_two</code> モジュールが大きくなってたくさんの関数があり (この例では 2 つですが)、その全部はインポートしたくない場合を考えます。<code>file_two</code> を次のように変更してください。</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># インポートする Python モジュール

print("file_two の __name__ の設定内容: {}".format(__name__))

def function_three():
    print("function_three が実行されました")

def function_four():
    print("function_four が実行されました")

if __name__ == "__main__":
    print("file_two が直接実行されました")
else:
    print("file_two がインポートされて実行されました")
</code></pre><figcaption>file_two.py</figcaption></figure><p>モジュールから特定の関数をインポートするには、<code>file_one</code> ファイルで <code>from</code> import ブロックを使います。</p><figure class="kg-card kg-code-card"><pre><code class="language-python"># 実行する Python モジュール
from file_two import function_three

print("file_one の __name__ の設定内容: {}".format(__name__))

def function_one():
    print("function_one が実行されました")

def function_two():
    print("function_two が実行されました")

if __name__ == "__main__":
    print("file_one が直接実行されました")
    function_two()
    function_three()
else:
    print("file_one がインポートされて実行されました")
</code></pre><figcaption>file_one.py</figcaption></figure><h2 id="-">まとめ</h2><p>ファイルをメインプログラムとして実行できるようにしたい場合でも、他のモジュールにインポートされるようにしたい場合でも、<code>__name__</code> 変数が便利に使える場面があります。<code>if __name__ == "__main__"</code> ブロックを使って、モジュールがインポートされた場合にコードの一部を実行可能にしたり、あるいは不可にしたりできます。</p><p>Python インタープリターがファイルを読み込むと、実行中モジュールの場合には <code>__name__</code> 変数は <code>__main__</code> に、インポートされた場合にはモジュール名に設定されます。ファイルを読み込むとすべてのトップレベルコードが実行されますが、関数やクラスは実行されません。(インポートされるだけです。)</p><p>Bra gjort! (スウェーデン語で「よくできました」という意味です！)</p><p>筆者の <a href="https://www.freecodecamp.org/news/author/goran/">freeCodeCamp プロフィール</a>や <a href="https://medium.com/@goranaviani">Medium プロフィール</a>からこのような記事をもっと読むことができます。その他の作品は <a href="https://github.com/GoranAviani">GitHub ページ</a>をチェックしてください。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ list index out of range – Python エラーメッセージの解消方法 ]]>
                </title>
                <description>
                    <![CDATA[ この記事では、Python の list index out of range エラーの原因を解説します。 そもそもなぜこのエラーが起きるのかと併せて、エラーが起きないようにする対処法も説明します。 それでは始めましょう。 Python でリストを作成する方法 Python でリストオブジェクトを作成するのに必要な操作は次の通りです。  * リストに名前を付けて、  * 代入演算子 = を使用して、  * 角括弧 [] の中に 0 個以上の要素を入れる (リストの各要素はカンマで区切る) 例えば、名前のリストを作るには次のようにします。 names = ["Kelly", "Nelly", "Jimmy", "Lenny"] 上記のコードでは、Kelly, Nelly, Jimmy, Lenny という 4 つの値を持つ、names という名前が付いたリストを作成しました。 Python でリストの長さを調べる Python でリストの長さを調べるには、Python の組み込みメソッド ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/list-index-out-of-range-python-error-message-solved/</link>
                <guid isPermaLink="false">63f32b1c721fc106335f1ab3</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Wed, 22 Feb 2023 23:30:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/02/domenico-loia-hGV2TfOh0ns-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/list-index-out-of-range-python-error-message-solved/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">List Index Out of Range – Python Error Message Solved</a>
      </p><p>この記事では、Python の <code>list index out of range</code> エラーの原因を解説します。</p><p>そもそもなぜこのエラーが起きるのかと併せて、エラーが起きないようにする対処法も説明します。</p><p>それでは始めましょう。</p><h2 id="python-">Python でリストを作成する方法</h2><p>Python でリストオブジェクトを作成するのに必要な操作は次の通りです。</p><ul><li>リストに名前を付けて、</li><li>代入演算子 <code>=</code> を使用して、</li><li>角括弧 <code>[]</code> の中に 0 個以上の要素を入れる (リストの各要素はカンマで区切る)</li></ul><p>例えば、名前のリストを作るには次のようにします。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
</code></pre><p>上記のコードでは、<code>Kelly, Nelly, Jimmy, Lenny</code> という 4 つの値を持つ、<code>names</code> という名前が付いたリストを作成しました。</p><h3 id="python--1">Python でリストの長さを調べる</h3><p>Python でリストの長さを調べるには、Python の組み込みメソッド <code>len()</code> を使います。</p><p><code>len()</code> は、リストが持っている要素の数を表す整数を返します。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

# リストの長さを格納する name_length という名前の変数を作成する
name_length = len(names)

# 変数の値をコンソールに出力する
print(name_length)

# 出力
# 4
</code></pre><p>このリストには 4 つの要素が格納されているので、リストの長さは 4 となります。</p><h3 id="python--2">Python でリスト内の個別の要素にアクセスする方法</h3><p>リスト内の各要素は、それぞれ<em>インデックス番号</em>を持っています。</p><p>Python も含め、多くの近代的なプログラミング言語では、インデックスは 0 から始まります。</p><p>つまり、リスト内で最初の要素のインデックスは 0 で、二番目の要素のインデックスは 1、と続きます。</p><p>このインデックス番号を使ってそれぞれの要素にアクセスできます。</p><p>インデックス番号を使ってリスト内の要素にアクセスするには、まずリストの名前を記述します。続いて角括弧の中にインデックス番号を表す整数を入れます。</p><p>先ほどの例で使ったリストの場合、下記のようにしてインデックス番号を使ってリスト内の各要素にアクセスできます。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

names[0] # Kelly
names[1] # Nelly
names[2] # Jimmy
names[3] # Lenny
</code></pre><p>また、Python ではリスト内の要素にアクセスするために負の数のインデックス番号を使うこともできます。</p><p><strong>最後</strong>の要素にアクセスするには、インデックスの値を -1 にします。最後から 2 番目の要素にアクセスするには -2 という値を使用します。</p><p>こちらが負の数を使ってリスト内の各アイテムにアクセスする方法です。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

names[-4] # Kelly
names[-3] # Nelly
names[-2] # Jimmy
names[-1] # Lenny
</code></pre><h2 id="python-indexerror-list-index-out-of-range-">Python で <code>Indexerror: list index out of range</code> というエラーが起きるのはなぜ？</h2><h3 id="-">リストの範囲外のインデックス番号を使用している場合</h3><p>リストのインデックスの範囲外、存在しない値を使用して要素にアクセスしようとすると、<code>Indexerror: list index out of range</code> エラーが発生します。</p><p>これは、リストの最後の要素にアクセスしようとした時や、最初の要素に負の数を使ってアクセスしようとしたときに良く起きるミスです。</p><p>ここまでの例で使ったリストをもう一度使って説明します。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]
</code></pre><p>最後の要素 "Lenny" にアクセスしようとして、次のコードを使ったとします。</p><pre><code class="language-python">print(names[4])

# 出力

# Traceback (most recent call last):
#   File "/Users/dionysialemonaki/python_articles/demo.py", line 3, in &lt;module&gt;
#     print(names[4])
# IndexError: list index out of range
</code></pre><p>通常、リストのインデックスの範囲は <code>0</code> から <code>n-1</code> (<code>n</code> はリスト内の要素数) です。</p><p>上のリストの要素数は <code>4</code> なので、インデックスの範囲は <code>0</code> から <code>3</code> です。</p><p>では、今度は負の数のインデックスを使用してアクセスしてみましょう。</p><p>リスト内の最初の要素 "Kelly" に、負の数のインデックスを使ってアクセスしたいとします。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

print(names[-5])

# 出力

# Traceback (most recent call last):
#   File "/Users/dionysialemonaki/python_articles/demo.py", line 3, in &lt;module&gt;
#     print(names[-5])
# IndexError: list index out of range
</code></pre><p>負の数のインデックスを使用するときには、インデックスの範囲は <code>-1</code> から <code>-n</code> (<code>n</code> はリスト内の要素数) です。</p><p>リストの要素数が <code>4</code> なので、インデックスの範囲は <code>-1</code> から <code>-4</code> です。</p><h3 id="python-for-range-">Python の <code>for</code> ループで <code>range()</code> 関数に誤った値を使用している場合</h3><p>リストの反復処理中に存在しない要素にアクセスしようとした場合も <code>Indexerror: list index out of range</code> が発生します。</p><p>これが起きるよくあるケースは、Python の <code>range()</code> 関数に誤った数を使用した場合です。</p><p><code>range()</code> 関数は通常、カウントがストップする位置を表す 1 つの整数を引数に取ります。</p><p>例えば、<code>range(5)</code> はカウントが <code>0</code> から始まって <code>4</code> で終わることを表します。</p><p>つまりデフォルトでは、カウントは <code>0</code> からスタートして、<code>1</code> ずつ増加し、指定の数まで増加しますが、指定された数はカウントに含まれません。</p><p>次の例を見てみましょう。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(5):
    print(names[name])
    
# 出力

# Kelly
# Nelly
# Jimmy
# Lenny
# Traceback (most recent call last):
#   File "/Users/dionysialemonaki/python_articles/demo.py", line 7, in &lt;module&gt;
#    print(names[name])
# IndexError: list index out of range
</code></pre><p>ここでは、リスト <code>names</code> は 4 つの値を持っています。</p><p>そのリストをループして、それぞれの値を出力しようとしました。</p><p><code>range(5)</code> を使ったことにより、Python インタープリターに <code>0 から 4</code> の位置にある値を出力するよう指示したことになっています。</p><p>ですが、インデックス <code>4</code> の位置には要素がありません。</p><p>最初に位置番号を出力し、次にその位置にある値を出力することで問題を詳しく確認できます。</p><pre><code class="language-python"># 0
# Kelly
# 1
# Nelly
# 2
# Jimmy
# 3
# Lenny
# 4
# Traceback (most recent call last):
#   File "/Users/dionysialemonaki/python_articles/demo.py", line 8, in &lt;module&gt;
#     print(names[name])
# IndexError: list index out of range
</code></pre><p><code>0</code> の位置にあるのが "Kelly"、<code>1</code> が "Nelly"、<code>2</code> が "Jimmy"、<code>3</code> が "Lenny" であることがわかります。</p><p>そして <code>0 から 4</code> の位置を表す <code>range(5)</code> を指定した通りにインデックス番号 4 の位置に来ると、出力するものがないので、インタープリターはエラーを発生させます。</p><p>これを修正する方法の 1 つは、<code>range()</code> で指定する数を小さくすることです。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(4):
    print(name)
    print(names[name])
    
# 出力

# 0
# Kelly
# 1
# Nelly
# 2
# Jimmy
# 3
# Lenny
</code></pre><p>このような <code>for</code> ループの場合に使えるもう 1 つの修正方法は、<code>range()</code> 関数の引数にリストの長さを渡すことです。この方法には前述した Python の組み込み関数 <code>len()</code> を使います。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(len(names)):
    print(names[name])

# 出力

# Kelly
# Nelly
# Jimmy
# Lenny
</code></pre><p><code>range()</code> の引数として <code>len()</code> を渡す場合、次のようなミスを<strong>しない</strong>ように注意してください。</p><pre><code class="language-python">names = ["Kelly", "Nelly", "Jimmy", "Lenny"]

for name in range(len(names) + 1):
    print(names[name])
</code></pre><p>上記のコードを実行すると、また <code>IndexError: list index out of range</code> エラーが発生してしまいます。</p><pre><code class="language-python"># Kelly
# Nelly
# Jimmy
# Lenny
# Traceback (most recent call last):
#   File "/Users/dionysialemonaki/python_articles/demo.py", line 4, in &lt;module&gt;
#     print(names[name])
# IndexError: list index out of range
</code></pre><h2 id="--1">まとめ</h2><p>この記事が、<code>IndexError: list index out of range</code> のエラーが発生する理由とその回避策について理解を深める助けになれば幸いです。</p><p>Python についてもっと詳しく学習したい場合は、freeCodeCamp の <a href="https://www.freecodecamp.org/japanese/learn/scientific-computing-with-python/">Python 認定講座</a>をぜひチェックしてください。初心者にもやさしく、インタラクティブに学べる講座です。講座の最後には 5 つのプロジェクトを通して学んだ内容を実践できます。</p><p>ここまでお読みいただきありがとうございました。Happy coding!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Python での文字列型から整数型への変換 – 文字列型のキャスト方法 ]]>
                </title>
                <description>
                    <![CDATA[  プログラミングの作業中、データの型の変換が必要となることがあるでしょう。  あるデータ型を他のデータ型に変換する知識・経験は、情報を扱うときに、プログラマーにとって、データに対して柔軟に対応できる力となります。 プログラミング言語 Python には、型を変換 (キャスト) する多様な方法が組み込まれています。 この記事では、文字列型を整数型に変換する方法について学べます。  それでは、詳しく見てきましょう。 Python でのデータの種類 Python は、様々なデータ型をサポートしています。 データの型は、コンピュータプログラムで使われるさまざまなタイプのデータを指定、表現、区別するのに使われます。 また、あるデータ型で利用できる処理が、別のデータ型では利用できないといったように、データ型によって利用できる処理が異なります。 データの型の一例として、文字列型があります。 文字列型は、テキストベースの情報を扱うのに使われる文字列です。 文字列型は以下のコードのように、シングル、あるいはダブルクォーテーションで囲われます。 fave_phrase = "Hel ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/python-convert-string-to-int-how-to-cast-a-string-in-python/</link>
                <guid isPermaLink="false">63e8de91721fc106335f184f</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ YUUSUKE OKAMOTO ]]>
                </dc:creator>
                <pubDate>Wed, 22 Feb 2023 13:09:20 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2023/02/glenn-carstens-peters-npxXWgQ33ZQ-unsplash-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文:</strong> <a href="https://www.freecodecamp.org/news/python-convert-string-to-int-how-to-cast-a-string-in-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python Convert String to Int – How to Cast a String in Python</a>
      </p><p></p><p>プログラミングの作業中、データの型の変換が必要となることがあるでしょう。 </p><p>あるデータ型を他のデータ型に変換する知識・経験は、情報を扱うときに、プログラマーにとって、データに対して柔軟に対応できる力となります。</p><p>プログラミング言語 Python には、型を変換 (キャスト) する多様な方法が組み込まれています。</p><p>この記事では、文字列型を整数型に変換する方法について学べます。 </p><p>それでは、詳しく見てきましょう。</p><h2 id="python-">Python でのデータの種類</h2><p>Python は、様々なデータ型をサポートしています。</p><p>データの型は、コンピュータプログラムで使われるさまざまなタイプのデータを指定、表現、区別するのに使われます。</p><p>また、あるデータ型で利用できる処理が、別のデータ型では利用できないといったように、データ型によって利用できる処理が異なります。</p><p>データの型の一例として、文字列型があります。</p><p>文字列型は、テキストベースの情報を扱うのに使われる文字列です。</p><p>文字列型は以下のコードのように、シングル、あるいはダブルクォーテーションで囲われます。</p><pre><code class="language-python">fave_phrase = "Hello world!"

#Hello world! はダブルクォーテーションで囲まれているので文字列です。</code></pre><p>int (integer) は、整数です。</p><p>整数は、数値データを表すのに使われます。そして整数は、+、-、×、÷といった四則演算で使うことができます。 </p><p>整数は、シングル、あるいはダブルクォーテーションで囲われません。</p><pre><code class="language-python">fave_number = 7

#7 は整数型です
#"7" は、数字に見えますが、整数型ではなく文字列型です。
#理由はダブルクォーテーションで囲まれているからです。
</code></pre><h3 id="-">データ型の変換</h3><p>データを保存するとき、あるいは、ユーザー入力データをある型で受け取るとき、そのデータにさまざまな操作を行う必要もあるでしょう。</p><p>型データによって、対応できる処理とできない処理があるので、データ型を変更する必要があります。</p><p>あるデータ型から他のデータ型への変換は、型のコンバージョンあるいはキャストとも呼ばれます。多くのプログラミング言語では、ある型から他の型への変換を組み込み機能として提供しています。</p><h2 id="python--1"><strong>Python で文字列型を整数型に変換する方法</strong></h2><p>Python で文字列型を整数型へ変換するためには、組み込み関数である <code>int()</code> を使います。</p><p>この組み込み関数は、型変換したい文字列を引数として、数値としての値を戻します。</p><p>一般的な文法は、<code>int("str")</code> となります。</p><p>それでは、数値が文字列型となっている次の例を参考に見ていきましょう。</p><pre><code class="language-python">#数字 7 の文字列型
print("7")

#型を確認するメソッド type() を用いてチェックしてみましょう
print(type("7"))

#出力結果

#7
#&lt;class 'str'&gt;
</code></pre><p>文字列の状態の数字を型変換するために、以下のように <code>int()</code> 関数を使います。</p><pre><code class="language-python">#文字列型から整数型へ型変換します
print(int("7"))

#型を確認するメソッドを用いてデータの型をチェックしてみましょう
print(type(int("7")))

#出力結果

#7
#&lt;class 'int'&gt;
</code></pre><h3 id="--1"><strong>文字列型を整数型に変換する事例</strong></h3><p>例えば、利用者の年齢を計算したいとしましょう。そのためには利用者からの入力を受け取ります。入力される型は、常に文字列型となります。</p><p>数字で入力されたとしても、受け取る型は <code>&lt;class 'str'&gt;</code> になります。 </p><p>もし、入力された数字を他の数字から引き算するなど、入力時に計算処理を実行したいならば、文字列型では、計算処理を行えないのでエラーとなります。 </p><p>以下のサンプルコードをご覧ください。</p><pre><code class="language-python">current_year = 2021

#利用者に誕生年を入力してもらいます。
user_birth_year_input = input("何年に生まれましたか? ")

#現在の年から利用者が入力した年を引きます。
user_age = current_year - user_birth_year_input

print(user_age)

#結果

#何年に生まれましたか? 1993
#Traceback (most recent call last):
#  File "demo.py", line 9, in &lt;module&gt;
#    user_age = current_year - user_birth_year_input
#TypeError: unsupported operand type(s) for -: 'int' and 'str'
</code></pre><p>整数型と文字列型の引き算は実行できないというエラーとなります。</p><p><code>type()</code> を使うことで、入力されたデータ型を確認できます。</p><pre><code class="language-python">current_year = 2021

#利用者に誕生年を入力してもらいます。
user_birth_year_input = input("何年に生まれましたか? ")

print(type(user_birth_year_input))

#結果

#何年に生まれましたか? 1993
#&lt;class 'str'&gt;
</code></pre><p>このエラーを避けるためには、利用者の入力を整数型に変換し、新しい変数内に変換したデータを保存します。</p><pre><code class="language-python">current_year = 2021

#利用者に誕生年を入力してもらいます。
user_birth_year_input = input("何年に生まれましたか? ")


#組み込み関数の int() を利用して、利用者が入力した数字を変換し、新しく作成した変数に保存します。
user_birth_year = int(user_birth_year_input)

#現在の年から利用者が入力した年を引きます。
user_age = current_year - user_birth_year

print(user_age)

#結果

#何年に生まれましたか? 1993
#28
</code></pre><h2 id="--2">最後に</h2><p>Python で文字型から数字型へ変換する方法が分かりましたね。 </p><p>もし、Python をもっと学びたいならば、freeCodeCamp に Python の認定講座があります。 </p><p>Python の基礎から始めて、リレーショナルデータベースやデータ構造といった高度なトピックへと進んでいきます。最後には、実践へとつなげるために、5 つのプロジェクトを作成します。</p><p>ここまで読んでくださってありがとうございます、そして、コーディングを楽しみましょうね！</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[ Python 入門: 基礎から始める集中講座 [YouTube 動画講座] ]]>
                </title>
                <description>
                    <![CDATA[ Python は多くの分野で利用されており、直観的に書きやすい文法を持つため、これからプログラミングを始めたい人におすすめの言語です。 この度、日本語版 YouTube チャンネル「freeCodeCamp Japanese」 [https://www.youtube.com/channel/UClLQp_GforzsmSpSec5M7Ww]として初の動画講座「Python入門: 基礎から始める集中講座」を公開しました。 この講座では、Python の基礎を環境構築と Hello World から、条件分岐などの基本的な構文、クラスとオブジェクトの利用まで総合的にカバーします。Python に初めて触れる人、今一度基礎をしっかり固めたい人におすすめの講座です。 本動画は、英語版 freeCodeCamp.org チャンネルで公開されている一番人気の動画「Learn Python - Full Course for Beginners [Tutorial]」 [https://www.youtube.com/watch?v=rfscVS0vtbw]  を元にした日本語版として作成さ ]]>
                </description>
                <link>https://www.freecodecamp.org/japanese/news/learn-python-full-course-for-beginners-japanese/</link>
                <guid isPermaLink="false">630f4b6ea100e207215d454b</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Beginners ]]>
                    </category>
                
                    <category>
                        <![CDATA[ YouTube ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Video Courses ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ まつだようこ ]]>
                </dc:creator>
                <pubDate>Wed, 31 Aug 2022 11:58:30 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/japanese/news/content/images/2022/08/20220727_Python-for-Beginners.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Python は多くの分野で利用されており、直観的に書きやすい文法を持つため、これからプログラミングを始めたい人におすすめの言語です。</p><p>この度、日本語版 YouTube チャンネル<a href="https://www.youtube.com/channel/UClLQp_GforzsmSpSec5M7Ww">「freeCodeCamp Japanese」</a>として初の動画講座「Python入門: 基礎から始める集中講座」を公開しました。</p><p>この講座では、Python の基礎を環境構築と Hello World から、条件分岐などの基本的な構文、クラスとオブジェクトの利用まで総合的にカバーします。Python に初めて触れる人、今一度基礎をしっかり固めたい人におすすめの講座です。</p><p>本動画は、英語版 freeCodeCamp.org チャンネルで公開されている一番人気の動画<a href="https://www.youtube.com/watch?v=rfscVS0vtbw">「Learn Python - Full Course for Beginners [Tutorial]」</a> を元にした日本語版として作成されました。</p><p>日本語版動画作成者の <a href="https://twitter.com/besshy8">Besshy</a> さんは慶應義塾大学の大学院生で、AI や量子コンピューターの研究をされています。また「<a href="https://www.youtube.com/user/kcs1959">KCS :: Keio Computer Society</a>」という YouTube チャンネルも運営されており、そちらでもプログラミングやコンピューターサイエンスに関する動画を多数投稿されています。この度動画講座作成という形で freeCodeCamp コミュニティに貢献してくださいました。</p><p>この講座では以下のトピックを学習します。</p><ul><li>Python と PyCharm のインストール、環境構築</li><li>Hello World</li><li>[演習] 三角形を書いてみる</li><li>変数とデータ型</li><li>文字列を扱う</li><li>数値を扱う</li><li>ユーザー入力を受け取る</li><li>[演習] 基礎的な計算機を作る</li><li>リスト</li><li>リストを操作する関数</li><li>タプル</li><li>関数</li><li>Return 文</li><li>If 文</li><li>If 文と比較演算子</li><li>[演習] 計算機を改善する</li><li>辞書</li><li>While ループ</li><li>[演習] Guessing Game を作る</li><li>For ループ</li><li>[演習] 累乗を計算する関数を書く</li><li>二次元配列と For 文のネスト</li><li>[演習] 翻訳機を作る</li><li>コメント</li><li>Try / Except</li><li>ファイルの読み込み</li><li>ファイルの書き込み</li><li>モジュールと pip</li><li>クラスとオブジェクト</li><li>[演習] クイズゲームを作る</li><li>メソッド</li><li>継承</li><li>Python のインタープリター</li></ul><p>本講座は YouTube で全編無料公開されています。(全 6.5 時間)</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/nnjCkgX_ZPQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Python入門: 基礎から始める集中講座" name="fitvid0"></iframe>
          </div>
        </div>
      </figure> ]]>
                </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>
        
    </channel>
</rss>
