# デバッグ ガイド

このガイドでは、サポートされているすべての言語でCopilot SDK の一般的な問題とデバッグ手法について説明します。

<!-- markdownlint-disable GHD046 GHD005 -->

<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->

## 目次

* [デバッグ ログを有効にする](#enable-debug-logging)
* [一般的な問題](#common-issues)
* [MCP サーバーのデバッグ](#mcp-server-debugging)
* [接続の問題](#connection-issues)
* [ツールの実行に関する問題](#tool-execution-issues)
* [プラットフォーム固有の問題](#platform-specific-issues)

## デバッグログを有効化する

デバッグの最初の手順は、詳細ログを有効にして、内部で何が起こっているかを確認することです。

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient({
  logLevel: "debug",  // Options: "none", "error", "warning", "info", "debug", "all"
});
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
from copilot import CopilotClient

client = CopilotClient(log_level="debug")
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
import copilot "github.com/github/copilot-sdk/go"

client := copilot.NewClient(&copilot.ClientOptions{
    LogLevel: "debug",
})
```

</div>

<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

<!-- docs-validate: skip -->

```csharp
using GitHub.Copilot;
using Microsoft.Extensions.Logging;

// Using ILogger
var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.SetMinimumLevel(LogLevel.Debug);
    builder.AddConsole();
});

var client = new CopilotClient(new CopilotClientOptions
{
    LogLevel = "debug",
    Logger = loggerFactory.CreateLogger<CopilotClient>()
});
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
import com.github.copilot.CopilotClient;
import com.github.copilot.rpc.*;

var client = new CopilotClient(new CopilotClientOptions()
    .setLogLevel("debug")
);
```

</div>

</div>

### ログ ディレクトリ

CLI は、ディレクトリにログを書き込みます。 カスタムの場所を指定できます。

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="typescript" data-label="TypeScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">TypeScript</div>

```typescript
const client = new CopilotClient({
  cliArgs: ["--log-dir", "/path/to/logs"],
});
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
# The Python SDK does not currently support passing extra CLI arguments.
# Logs are written to the default location or can be configured via
# the CLI when running in server mode.
```

> \[!NOTE]
> PYTHON SDK ログの構成は制限されています。 高度なログ記録を行う場合は、 `--log-dir` を使用して CLI を手動で実行し、 `RuntimeConnection.for_uri(...)`経由で接続します。

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
client := copilot.NewClient(&copilot.ClientOptions{
    Connection: copilot.StdioConnection{
        Args: []string{"--log-dir", "/path/to/logs"},
    },
})
```

</div>

<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
var client = new CopilotClient(new CopilotClientOptions
{
    Connection = RuntimeConnection.ForStdio(args: new[] { "--log-dir", "/path/to/logs" })
});
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

<!-- docs-validate: skip -->

```java
// The Java SDK does not currently support passing extra CLI arguments.
// For custom log directories, run the CLI manually with --log-dir
// and connect via cliUrl.
```

</div>

</div>

## 一般的な問題

### "CLI が見つかりません" / "Copilot: コマンドが見つかりません"

**Cause:** Copilot CLI が PATH にインストールされていないか、インストールされていません。

**Solution:**

1. CLI のインストール: [インストール ガイド](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli)

2. インストールを確認します。

   ```bash
   copilot --version
   ```

3. または、完全なパスを指定します。

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="javascript" data-label="JavaScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">JavaScript</div>

```typescript
const client = new CopilotClient({
  cliPath: "/usr/local/bin/copilot",
});
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
client = CopilotClient({"cli_path": "/usr/local/bin/copilot"})
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
client := copilot.NewClient(&copilot.ClientOptions{
    Connection: copilot.StdioConnection{Path: "/usr/local/bin/copilot"},
})
```

</div>

<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
var client = new CopilotClient(new CopilotClientOptions
{
    CliPath = "/usr/local/bin/copilot"
});
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
var client = new CopilotClient(new CopilotClientOptions()
    .setCliPath("/usr/local/bin/copilot")
);
```

</div>

</div>

### "認証されていません"

**Cause:** CLI はGitHubで認証されません。

**Solution:**

1. CLI を認証します。

   ```bash
   copilot auth login
   ```

2. または、プログラムでトークンを指定します。

<div class="ghd-codetabs">
<div class="ghd-codetab" data-lang="javascript" data-label="JavaScript"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">JavaScript</div>

```typescript
const client = new CopilotClient({
  gitHubToken: process.env.GITHUB_TOKEN,
});
```

</div>

<div class="ghd-codetab" data-lang="python" data-label="Python"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Python</div>

```python
import os
client = CopilotClient({"github_token": os.environ.get("GITHUB_TOKEN")})
```

</div>

<div class="ghd-codetab" data-lang="go" data-label="Go"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Go</div>

```golang
client := copilot.NewClient(&copilot.ClientOptions{
    GitHubToken: os.Getenv("GITHUB_TOKEN"),
})
```

</div>

<div class="ghd-codetab" data-lang="dotnet" data-label=".NET"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">.NET</div>

```csharp
var client = new CopilotClient(new CopilotClientOptions
{
    GitHubToken = Environment.GetEnvironmentVariable("GITHUB_TOKEN")
});
```

</div>

<div class="ghd-codetab" data-lang="java" data-label="Java"><div class="ghd-codetab-fallback-label" role="heading" aria-level="3">Java</div>

```java
var client = new CopilotClient(new CopilotClientOptions()
    .setGitHubToken(System.getenv("GITHUB_TOKEN"))
);
```

</div>

</div>

### "セッションが見つかりません"

**原因：** 破棄されたセッションまたは存在しないセッションを使用しようとしています。

**Solution:**

1. `disconnect()`後にメソッドを呼び出していないことを確認します。

   ```typescript
   await session.disconnect();
   // Don't use session after this!
   ```

2. セッションを再開する場合は、セッション ID が存在することを確認します。

   ```typescript
   const sessions = await client.listSessions();
   console.log("Available sessions:", sessions);
   ```

### "接続が拒否されました" / "ECONNREFUSED"

**原因：** CLI サーバー プロセスがクラッシュしたか、開始に失敗しました。

**Solution:**

1. CLI が正しくスタンドアロンで実行されているかどうかを確認します。

   ```bash
   copilot --server --stdio
   ```

2. TCP モードを使用している場合は、ポートの競合を確認します。

   ```typescript
   const client = new CopilotClient({
     useStdio: false,
     port: 0,  // Use random available port
   });
   ```

## MCP サーバーのデバッグ

MCP (モデル コンテキスト プロトコル) サーバーは、デバッグが難しい場合があります。 包括的な MCP デバッグ ガイダンスについては、専用 **[MCP サーバー デバッグ ガイド](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging)** を参照してください。

### クイック MCP チェックリスト

* [ ] MCP サーバー実行可能ファイルが存在し、独立して実行される
* [ ] コマンド パスが正しい (絶対パスを使用)
* [ ] ツールが有効になっています。 `tools: ["*"]`
* [ ] サーバーが `initialize` 要求に正しく応答する
* [ ] 作業ディレクトリ (`cwd`) が必要に応じて設定される

### MCP サーバーをテストする

SDK と統合する前に、MCP サーバーが動作することを確認します。

```bash
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | /path/to/your/mcp-server
```

詳細なトラブルシューティングについては、 [MCP サーバー デバッグ ガイド](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging) を参照してください。

## 接続に関する問題

### stdio と TCP モード

SDK では、次の 2 つのトランスポート モードがサポートされています。

| モード            | Description                    | ユースケース(事例)         |
| -------------- | ------------------------------ | ------------------ |
| **Stdio** (既定) | CLI はサブプロセスとして実行され、パイプ経由で通信します | ローカル開発、単一プロセス      |
| **TCP**        | CLI は個別に実行され、TCP ソケット経由で通信します  | 複数のクライアント、リモート CLI |

**Stdio モード (既定):**

```typescript
const client = new CopilotClient({
  useStdio: true,  // This is the default
});
```

**TCP モード:**

```typescript
const client = new CopilotClient({
  useStdio: false,
  port: 8080,  // Or 0 for random port
});
```

**既存のサーバーに接続します。**

```typescript
const client = new CopilotClient({
  cliUrl: "localhost:8080",  // Connect to running server
});
```

### 接続エラーの診断

1. **クライアントの状態を確認します。**

   ```typescript
   console.log("Connection state:", client.getState());
   // Should be "connected" after start()
   ```

2. **状態の変化を監視する:**

   ```typescript
   client.on("stateChange", (state) => {
     console.log("State changed to:", state);
   });
   ```

3. **CLI プロセスが実行されていることを確認します。**

   ```bash
   # Check for copilot processes
   ps aux | grep copilot
   ```

## ツールの実行に関する問題

### カスタム ツールが呼び出されない

1. **ツールの登録を確認します。**

   ```typescript
   const session = await client.createSession({
     tools: [myTool],
   });

   // Check registered tools
   console.log("Registered tools:", session.getTools?.());
   ```

2. **ツール スキーマが有効な JSON スキーマであることを確認します。**

   ```typescript
   const myTool = {
     name: "get_weather",
     description: "Get weather for a location",
     parameters: {
       type: "object",
       properties: {
         location: { type: "string", description: "City name" },
       },
       required: ["location"],
     },
     handler: async (args) => {
       return { temperature: 72 };
     },
   };
   ```

3. **ハンドラーが有効な結果を返すことを確認します。**

   ```typescript
   handler: async (args) => {
     // Must return something JSON-serializable
     return { success: true, data: "result" };
     
     // Don't return undefined or non-serializable objects
   }
   ```

### ツール エラーが表示されない

エラーイベントを購読する:

```typescript
session.on("tool.execution_error", (event) => {
  console.error("Tool error:", event.data);
});

session.on("error", (event) => {
  console.error("Session error:", event.data);
});
```

## プラットフォーム固有の問題

### ウィンドウズ

1. **パス区切り文字:** raw 文字列またはフォワードスラッシュを使用します。

   ```csharp
   CliPath = @"C:\Program Files\GitHub\copilot.exe"
   // or
   CliPath = "C:/Program Files/GitHub/copilot.exe"
   ```

2. **PATHEXT の解決:** SDK はこれを自動的に処理しますが、問題が解決しない場合:

   ```csharp
   // Explicitly specify .exe
   Command = "myserver.exe"  // Not just "myserver"
   ```

3. **コンソール エンコード:** 適切な JSON 処理のために UTF-8 を確認します。

   ```csharp
   Console.OutputEncoding = System.Text.Encoding.UTF8;
   ```

### macOS

1. **ゲートキーパーの問題:** CLI がブロックされている場合:

   ```bash
   xattr -d com.apple.quarantine /path/to/copilot
   ```

2. **GUI アプリでの PATH の問題:** GUI アプリケーションはシェル PATH を継承できません。

   ```typescript
   const client = new CopilotClient({
     cliPath: "/opt/homebrew/bin/copilot",  // Full path
   });
   ```

### Linux

1. **アクセス許可の問題:**

   ```bash
   chmod +x /path/to/copilot
   ```

2. **不足しているライブラリ:** 必要な共有ライブラリを確認します。

   ```bash
   ldd /path/to/copilot
   ```

## ヘルプを受ける

まだ解決しない場合:

1. **デバッグ情報を収集します。**
   * SDK のバージョン
   * CLI バージョン (`copilot --version`)
   * オペレーティング システム
   * デバッグ ログ
   * 最小限の再現コード

2. **既存の問題を検索する:**[GitHub Issues](https://github.com/github/copilot-sdk/issues)

3. 収集された情報に関する**新しい問題を開く**

## こちらも参照ください

* [初めてのCopilot搭載アプリを構築する](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/getting-started)
* [GitHub Copilot SDK での MCP サーバーの使用](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/mcp) - MCP の構成とセットアップ
* [MCP サーバー デバッグ ガイド](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging) - MCP の詳細なトラブルシューティング
* [API リファレンス](https://github.com/github/copilot-sdk)