# GitHub Copilotを使用したデバッグの学習

GitHub Copilotにヘルプを依頼して、コード内のエラーを特定して修正します。

コード内のバグを見つけて修正するのは、特に開発初心者の場合はフラストレーションがたまるものです。 幸いなことに、 GitHub Copilot のようなツールはすぐにバグを特定してスカッシュすることができ、より創造的で興味深い作業に集中することができます。

## 前提条件

この記事の例では、GitHub Copilot (Visual Studio Code) で VS Code を使用してPython プロジェクトをデバッグしていることを前提としています。 この例に従うには、次のことを行う必要があります。

* [
  Visual Studio CodeドキュメントのCopilotを](https://code.visualstudio.com/docs/copilot/setup-simplified)使用したVisual Studio Codeのセットアップを完了します。
* [download Python](https://www.python.org/downloads/)。
* Visual Studio Codeの[Python拡張機能を](https://marketplace.visualstudio.com/items?itemName=ms-python.python)インストールします。

## 例を通してデバッグを学ぶ

バグのあるコードを実行しようとすると、主に 2 つの状況が発生します。

* 実行が完了する前にコードが終了し、エラー メッセージを受け取る。
* コードはエラーなしで実行されるが、想定と異なる出力になる。

幸いなことに、 Copilot は両方の状況でコードをデバッグするのに役立ちます。 その方法については、次の例を参照してください。

### でエラーをデバッグする GitHub Copilot

バグのあるコードを実行すると、多くの場合、エラー メッセージを受け取ります。 メッセージには、エラーが発生したファイルと行が示され、何が問題だったかが簡単に説明されています。 ただし、エラー メッセージはわかりにくい場合があります。 バグを完全に理解して修正するために、 Copilot にヘルプを依頼できます。

例のリポジトリを使ってこれを試してみましょう: [`new2code/debug-with-copilot`](https://github.com/new2code/debug-with-copilot).

#### サンプルリポジトリをコピーする

まず、リポジトリのローカル コピーを作成する必要があります。

1. VS Code
   [で new2code/debug-with-copilot リポジトリの複製を開始します](vscode://vscode.git/clone?url=https://github.com/new2code/debug-with-copilot)。 <!-- markdownlint-disable-line GHD003 -->
2. コンピューター上のリポジトリを保存する場所を選び、**\[Select as Repository Destination]** をクリックします。
3. プロンプトが表示されたら、リポジトリを開きます。

#### バグのあるファイルの実行

次に、[`bugged_dice_battle.py`](https://github.com/new2code/debug-with-copilot/blob/main/bugged_dice_battle.py) ファイルを実行してみましょう。 このプログラムは、2 人のプレイヤーによるサイコロを使った戦いをシミュレートします。

1. VS Codeで、`bugged_dice_battle.py` ファイルを開いて確認します。

2. コマンド パレットを開くには、<kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> (Windows linux) または <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> (Mac)。

3. 「`Terminal: Create New Terminal`」と入力して <kbd>Enter</kbd> キーを押します。

4. ターミナル タブに次のコマンドを貼り付けます。

   Windows:

   ```shell copy
   py bugged_dice_battle.py
   ```

   Mac または Linux:

   ```shell copy
   python bugged_dice_battle.py
   ```

5. <kbd>Enter</kbd> キーを押してプログラムを実行します。

残念ながら、ターミナルに次のメッセージで終わるエラー テキストが表示されます。

> TypeError: str に連結できるのは、("int" ではなく) str のみです

#### ファイルのデバッグ

このエラーの意味を理解するには、[Copilot ChatでVS Codeを開](vscode://GitHub.Copilot-Chat?ref_product=copilot\&ref_type=engagement\&ref_style=text)き、次のプロンプトを貼り付けて送信します。 <!-- markdownlint-disable-line GHD003 -->

```text copy
Explain in depth why my code produces the following error and how I can fix it:

TypeError: can only concatenate str (not "int") to str
```

Copilot は、文字列に `die_1` および `die_2` 整数を連結しようとしているため、エラーが発生したことを返します。文字列を連結できるのは文字列のみです。

弊社のコードの**更新版**も提供され、整数を文字列に変換してから連結する`str()`
Copilotの提案をファイルに適用して、デバッグの最後の手順を練習します。

### で正しくない出力をデバッグする GitHub Copilot

ときどき、バグのあるコードを実行してもエラーが発生せず、出力が明らかに正しくないことがあります。 この場合、 VS Code がバグの場所や説明を伝えることができないため、デバッグがより困難になる可能性があります。

これらの "非表示" バグの場合、 Copilot は特に便利です。 サンプル リポジトリの他のファイル (`bugged_factorial_finder.py`) で実際に体験してみましょう。 これは、階乗を計算することになっているPythonプログラムです。

#### バグのあるファイルの実行

まず、プログラムを実行して、正しくない出力を確認しましょう。

1. `bugged_factorial_finder.py` ファイルを開いて確認します。

2. 先ほど作成したターミナルに、次のコマンドを貼り付けます。
   Windows:

   ```shell copy
   py bugged_factorial_finder.py
   ```

   Mac または Linux:

   ```shell copy
   python bugged_factorial_finder.py
   ```

3. <kbd>Enter</kbd> キーを押してプログラムを実行します。

残念ながら、コードは期待どおりに機能しません。 戻り値は 6 階乗の正しい値である `720` になるはずですが、出力はそれよりもはるかに大きい値です。

#### ファイルのデバッグ

問題の原因を理解するには、[Copilot Chatを開](vscode://GitHub.Copilot-Chat?ref_product=copilot\&ref_type=engagement\&ref_style=text)き、次のプロンプトを送信します。 <!-- markdownlint-disable-line GHD003 -->

```text copy
Why is the output of this code so much higher than expected? Please explain in depth and suggest a solution.
```

Copilot
`*=`演算子を使用しているため、実際には`factorial`に`i`**と**`factorial`の両方を乗算しています。 つまり、ループの反復ごとに余計な `factorial` が乗算されています。

このエラーを修正するために、 Copilot は、数式から余分な `factorial` を削除するか、 `*=` 演算子を `=`に変更するコードを提案します。 さっそく変更しましょう。

## 自分のプロジェクトをデバッグする

Copilotを使用していくつかの簡単なプログラムのデバッグを練習したので、同じ手法を使用して、自分の作業に隠れているバグを見つけて修正できます。

たとえば、コードによって生成されたエラー メッセージをデバッグするには、次のプロンプト Copilot 送信します。

```text copy
Explain in depth why my code produces the following error and how I can fix it:

YOUR-ERROR-MESSAGE
```

それ以外の場合は、正しくない出力をデバッグしている場合は、出力が正しくない理由と修正方法 Copilot 問い合わせください。 最良の結果を得るには、出力が想定とどのように異なるかについて、できるだけ多くのコンテキストを提供します。

このような戦術があれば、プロジェクト内のバグ修正を始める準備は万全です。

## 次のステップ

コーディングを続けていると、デバッグが難しい特定の問題シナリオやエラーが発生することがあります。 潜在的な問題の一覧と、問題を修正するための Copilot Chat プロンプトの例については、 [エラーをデバッグする](/ja/copilot/tutorials/copilot-cookbook/debug-errors) を参照してください。