{"meta":{"title":"GitHub Copilotを使用したデバッグの学習","intro":"コード内のエラーを特定して修正するには、GitHub Copilot に助けを求めましょう。","product":"概要","breadcrumbs":[{"href":"/ja/get-started","title":"概要"},{"href":"/ja/get-started/learning-to-code","title":"コードの学習"},{"href":"/ja/get-started/learning-to-code/learning-to-debug-with-github-copilot","title":"Copilotを使用したデバッグ"}],"documentType":"article"},"body":"# GitHub Copilotを使用したデバッグの学習\n\nコード内のエラーを特定して修正するには、GitHub Copilot に助けを求めましょう。\n\nコード内のバグを見つけて修正するのは、特に開発初心者の場合はフラストレーションがたまるものです。 幸い、GitHub Copilot のようなツールを使うと、バグをすばやく特定して修正できるので、よりクリエイティブで興味深い作業に集中できるようになります。\n\n## 前提条件\n\nこの記事の例では、GitHub Copilot を使用してVisual Studio Code (VS Code) のPython プロジェクトをデバッグしていることを前提としています。 この例に従うには、次のことを行う必要があります。\n\n* Visual Studio Code ドキュメントで「[Copilot を使用してVisual Studio Code をセットアップする手順](https://code.visualstudio.com/docs/copilot/setup-simplified)」を完了します。\n* ```\n          [download Python](https://www.python.org/downloads/)。\n  ```\n* Visual Studio Code</c0> の <c0>Python 拡張機能をインストールします。\n\n## 例を通してデバッグを学ぶ\n\nバグのあるコードを実行しようとすると、主に 2 つの状況が発生します。\n\n* 実行が完了する前にコードが終了し、エラー メッセージを受け取る。\n* コードはエラーなしで実行されるが、想定と異なる出力になる。\n\n幸い、Copilot は、どちらの状況でもコードのデバッグに役立ちます。 その方法については、次の例を参照してください。\n\n### GitHub Copilot を使ってエラーをデバッグする\n\nバグのあるコードを実行すると、多くの場合、エラー メッセージを受け取ります。 メッセージには、エラーが発生したファイルと行が示され、何が問題だったかが簡単に説明されています。 ただし、エラー メッセージはわかりにくい場合があります。 バグを完全に理解して修正するには、Copilot に助けを求めることができます。\n\n例のリポジトリを使ってこれを試してみましょう: [`new2code/debug-with-copilot`](https://github.com/new2code/debug-with-copilot).\n\n#### サンプルリポジトリをコピーする\n\nまず、リポジトリのローカル コピーを作成する必要があります。\n\n1. まず VS Code で [new2code/debug-with-copilot リポジトリをクローン](vscode://vscode.git/clone?url=https://github.com/new2code/debug-with-copilot)します。 <!-- markdownlint-disable-line GHD003 -->\n2. コンピューター上のリポジトリを保存する場所を選び、**\\[Select as Repository Destination]** をクリックします。\n3. プロンプトが表示されたら、リポジトリを開きます。\n\n#### バグのあるファイルの実行\n\n次に、[`bugged_dice_battle.py`](https://github.com/new2code/debug-with-copilot/blob/main/bugged_dice_battle.py) ファイルを実行してみましょう。 このプログラムは、2 人のプレイヤーによるサイコロを使った戦いをシミュレートします。\n\n1. VS Code で `bugged_dice_battle.py` ファイルを開いて確認します。\n\n2. コマンド パレットを開くには、<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> (Windows linux) または <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> (Mac)。\n\n3. 「`Terminal: Create New Terminal`」と入力して <kbd>Enter</kbd> キーを押します。\n\n4. ターミナル タブに次のコマンドを貼り付けます。\n\n   Windows:\n\n   ```shell copy\n   py bugged_dice_battle.py\n   ```\n\n   Mac または Linux:\n\n   ```shell copy\n   python bugged_dice_battle.py\n   ```\n\n5. ```\n          <kbd>Enter</kbd> キーを押してプログラムを実行します。\n   ```\n\n残念ながら、ターミナルに次のメッセージで終わるエラー テキストが表示されます。\n\n> TypeError: str に連結できるのは、(\"int\" ではなく) str のみです\n\n#### ファイルのデバッグ\n\nこのエラーの意味を理解するには、[VS Code で コパイロットチャット を開き、次のプロンプトを貼り付けて入力します。](vscode://GitHub.Copilot-Chat?ref_product=copilot\\&ref_type=engagement\\&ref_style=text) <!-- markdownlint-disable-line GHD003 -->\n\n```text copy\nExplain in depth why my code produces the following error and how I can fix it:\n\nTypeError: can only concatenate str (not \"int\") to str\n```\n\nCopilot から、エラーが発生する理由は整数 `die_1` と `die_2` を文字列に連結しようとしているためであり、文字列は文字列にのみ連結できる、と回答されます。\n\n弊社のコードの**更新版**も提供され、整数を文字列に変換してから連結する`str()` ファイルに Copilot の提案を適用して、デバッグの最後のステップを練習します。\n\n### GitHub Copilot を使って正しくない出力をデバッグする\n\nときどき、バグのあるコードを実行してもエラーが発生せず、出力が明らかに正しくないことがあります。 この場合、VS Code ではバグの場所や説明を示すことができないため、デバッグがより困難になることがあります。\n\nこのような \"目に見えない\" バグの場合は、Copilot が特に役立ちます。 サンプル リポジトリの他のファイル (`bugged_factorial_finder.py`) で実際に体験してみましょう。 これは、階乗を計算することになっているPythonプログラムです。\n\n#### バグのあるファイルの実行\n\nまず、プログラムを実行して、正しくない出力を確認しましょう。\n\n1. ```\n          `bugged_factorial_finder.py` ファイルを開いて確認します。\n   ```\n\n2. 先ほど作成したターミナルに、次のコマンドを貼り付けます。\n   Windows:\n\n   ```shell copy\n   py bugged_factorial_finder.py\n   ```\n\n   Mac または Linux:\n\n   ```shell copy\n   python bugged_factorial_finder.py\n   ```\n\n3. ```\n          <kbd>Enter</kbd> キーを押してプログラムを実行します。\n   ```\n\n残念ながら、コードは期待どおりに機能しません。 戻り値は 6 階乗の正しい値である `720` になるはずですが、出力はそれよりもはるかに大きい値です。\n\n#### ファイルのデバッグ\n\n問題の原因を理解するには、[open コパイロットチャット](vscode://GitHub.Copilot-Chat?ref_product=copilot\\&ref_type=engagement\\&ref_style=text) を開き、以下のプロンプトを送信します。 <!-- markdownlint-disable-line GHD003 -->\n\n```text copy\nWhy is the output of this code so much higher than expected? Please explain in depth and suggest a solution.\n```\n\nCopilot により、`*=` 演算子を使っているため、実際には `factorial` に `i`**と**`factorial` の両方を乗算していることが指摘されます。 つまり、ループの反復ごとに余計な `factorial` が乗算されています。\n\nこのエラーを修正するために、数式から余計な `factorial` を削除するか、`*=` 演算子を `=` に変更するコードが Copilot から提案されます。 さっそく変更しましょう。\n\n## 自分のプロジェクトをデバッグする\n\nCopilot を使って簡単なプログラムのデバッグを演習したので、同じ手法を使って、自分の作業に隠れているバグを見つけて修正することができます。\n\nたとえば、コードによって生成されたエラー メッセージをデバッグするには、次のプロンプトを Copilot に送信します。\n\n```text copy\nExplain in depth why my code produces the following error and how I can fix it:\n\nYOUR-ERROR-MESSAGE\n```\n\nそうではなく、正しくない出力をデバッグする場合は、出力が正しくない理由とその修正方法を Copilot に問い合わせます。 最良の結果を得るには、出力が想定とどのように異なるかについて、できるだけ多くのコンテキストを提供します。\n\nこのような戦術があれば、プロジェクト内のバグ修正を始める準備は万全です。\n\n## 次のステップ\n\nコーディングを続けていると、デバッグが難しい特定の問題シナリオやエラーが発生することがあります。 考えられる issue の一覧と、それらを修正するための コパイロットチャット プロンプトの例については、「[エラーをデバッグする](/ja/copilot/copilot-chat-cookbook/debugging-errors)」を参照してください。"}