メモ
Copilot SDK は現在 テクニカル プレビューです。 機能と可用性は変更される場合があります。
"GitHub Copilot アカウント認証をアプリケーション内で直接提供することで、ユーザーをGitHubに接続します。
**次の場合に最適です。** マルチユーザー アプリ、組織のアクセス制御を備えた内部ツール、SaaS 製品、ユーザーが既に GitHub アカウントを持っているアプリ。
どのように機能するのか
GitHub OAuth アプリ (またはGitHub App) を作成し、ユーザーがそれを承認し、アクセス トークンを SDK に渡します。
Copilot 要求は、 Copilot サブスクリプションを使用して、認証された各ユーザーに代わって行われます。 このフローとアーキテクチャの詳細なシーケンス図については、 `github/copilot-sdk`[repository](https://github.com/github/copilot-sdk/blob/main/docs/setup/github-oauth.md#how-it-works) を参照してください。
**主な特性:**
- 各ユーザーは、独自の GitHub アカウントで認証を行います。
-
Copilot 使用状況は、各ユーザーのサブスクリプションに課金されます。 -
GitHub組織とエンタープライズ アカウントをサポートします。 - アプリがモデル API キーを処理することはありません。GitHub はすべてを管理します。
手順 1: GitHub OAuth アプリを作成する
-
**[GitHub設定] > [開発者向け設定] > [OAuth アプリ] > [新しい OAuth アプリ**] に移動します。 組織の場合は、[ **組織の設定] > [開発者向け設定]** に移動します。 - 以下の項目に入力してください。
*
アプリケーション名: アプリの名前。
*
ホーム ページ URL: アプリの URL。
*
承認コールバック URL: OAuth コールバック エンドポイント (
https://YOUR-APP.com/auth/callbackなど)。YOUR-APP.comをあなたのドメインに置き換えてください。 -
**クライアント ID を**メモし、**クライアント シークレット**を生成します。
メモ
GitHub Appsと OAuth Apps の両方が SDK で動作します。
GitHub Apps は、よりきめ細かいアクセス許可を提供し、新しいプロジェクトに推奨されます。 OAuth アプリの設定は簡単です。 トークン フローは、SDK の観点から見ると同じです。
手順 2: OAuth フローを実装する
アプリケーションは、標準の GitHub OAuth フローを処理します。 サーバー側のトークン交換を次に示します。
// Server-side: exchange authorization code for user token
async function handleOAuthCallback(code: string): Promise<string> {
const response = await fetch("https://github.com/login/oauth/access_token", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({
client_id: process.env.GITHUB_CLIENT_ID,
client_secret: process.env.GITHUB_CLIENT_SECRET,
code,
}),
});
const data = await response.json();
return data.access_token; // gho_xxxx or ghu_xxxx
}
手順 3: トークンを SDK に渡す
認証されたユーザーごとに SDK クライアントを作成し、トークンを渡します。
Node.js/ TypeScript
import { CopilotClient } from "@github/copilot-sdk";
// Create a client for an authenticated user
function createClientForUser(userToken: string): CopilotClient {
return new CopilotClient({
githubToken: userToken,
useLoggedInUser: false, // Don't fall back to CLI sign-in
});
}
// Usage
const client = createClientForUser("USER-ACCESS-TOKEN");
const session = await client.createSession({
sessionId: `user-${userId}-session`,
model: "gpt-4.1",
});
const response = await session.sendAndWait({ prompt: "Hello!" });
`USER-ACCESS-TOKEN`をユーザーの OAuth アクセス トークン (`gho_xxxx` など) に置き換えます。
Python
from copilot import CopilotClient, PermissionHandler
def create_client_for_user(user_token: str) -> CopilotClient:
return CopilotClient({
"github_token": user_token,
"use_logged_in_user": False,
})
# Usage
client = create_client_for_user("USER-ACCESS-TOKEN")
await client.start()
session = await client.create_session(
on_permission_request=PermissionHandler.approve_all,
model="gpt-4.1",
session_id=f"user-{user_id}-session",
)
response = await session.send_and_wait({"prompt": "Hello!"})
Go
func createClientForUser(userToken string) *copilot.Client {
return copilot.NewClient(&copilot.ClientOptions{
GithubToken: userToken,
UseLoggedInUser: copilot.Bool(false),
})
}
// Usage
client := createClientForUser("USER-ACCESS-TOKEN")
client.Start(ctx)
defer client.Stop()
session, _ := client.CreateSession(ctx, &copilot.SessionConfig{
SessionID: fmt.Sprintf("user-%s-session", userID),
Model: "gpt-4.1",
})
response, _ := session.SendAndWait(ctx, copilot.MessageOptions{Prompt: "Hello!"})
.NET
CopilotClient CreateClientForUser(string userToken) =>
new CopilotClient(new CopilotClientOptions
{
GithubToken = userToken,
UseLoggedInUser = false,
});
// Usage
await using var client = CreateClientForUser("USER-ACCESS-TOKEN");
await using var session = await client.CreateSessionAsync(new SessionConfig
{
SessionId = $"user-{userId}-session",
Model = "gpt-4.1",
});
var response = await session.SendAndWaitAsync(
new MessageOptions { Prompt = "Hello!" });
エンタープライズおよび組織のアクセス
GitHub OAuth は、エンタープライズ シナリオを自然にサポートします。 ユーザーが GitHubで認証を行うと、組織のメンバーシップと企業の関連付けが含まれます。
組織のメンバーシップを確認する
OAuth の後、ユーザーが組織に属していることを確認できます。
async function verifyOrgMembership(
token: string,
requiredOrg: string
): Promise<boolean> {
const response = await fetch("https://api.github.com/user/orgs", {
headers: { Authorization: `Bearer ${token}` },
});
const orgs = await response.json();
return orgs.some((org: any) => org.login === requiredOrg);
}
// In your auth flow
const token = await handleOAuthCallback(code);
if (!await verifyOrgMembership(token, "YOUR-ORG")) {
throw new Error("User is not a member of the required organization");
}
const client = createClientForUser(token);
`YOUR-ORG`をGitHubの組織名に置き換えます。
エンタープライズ マネージド ユーザー (EMU)
マネージド ユーザー アカウントの場合、フローは同じです。 EMU ユーザーは他のユーザーと同様に GitHub OAuth を使用して認証を行い、エンタープライズ ポリシー (IP 制限、SAML SSO) は GitHub によって自動的に適用されます。
// No special SDK configuration needed for EMU
const client = new CopilotClient({
githubToken: emuUserToken,
useLoggedInUser: false,
});
サポートされているトークンの種類
| トークン プレフィックス | 情報源 | サポートされている |
|---|---|---|
gho_ | OAuth ユーザー アクセス トークン | はい |
ghu_ |
GitHub App ユーザー アクセス トークン | はい |
| github_pat_ | Fine-grained personal access token | はい |
| ghp_ | Personal access token (classic) | いいえ (終了) |
トークンライフサイクル管理
アプリケーションは、トークンのストレージ、更新、および有効期限の処理を担当します。 SDK では、指定したトークンが使用されます。OAuth ライフサイクルは管理されません。
トークン更新パターン
async function getOrRefreshToken(userId: string): Promise<string> {
const stored = await tokenStore.get(userId);
if (stored && !isExpired(stored)) {
return stored.accessToken;
}
if (stored?.refreshToken) {
const refreshed = await refreshGitHubToken(stored.refreshToken);
await tokenStore.set(userId, refreshed);
return refreshed.accessToken;
}
throw new Error("User must re-authenticate");
}
マルチユーザー パターン
ユーザーごとに 1 つのクライアント (推奨)
各ユーザーは、独自のトークンを使用して独自の SDK クライアントを取得します。 これにより、最も強力な分離が提供されます。
const clients = new Map<string, CopilotClient>();
function getClientForUser(userId: string, token: string): CopilotClient {
if (!clients.has(userId)) {
clients.set(userId, new CopilotClient({
githubToken: token,
useLoggedInUser: false,
}));
}
return clients.get(userId)!;
}
制限事項
| 制限事項 | 詳細情報 |
|---|
**
Copilot サブスクリプションが必要** | 各ユーザーには、アクティブな GitHub Copilot サブスクリプションが必要です。 |
| トークン管理はユーザーの責任です | トークンの有効期限を格納、更新、および処理する必要があります。 | | ** GitHub アカウントが必要** | ユーザーは GitHub アカウントを持っている必要があります。 | | ユーザーあたりのレート制限 | 使用には、各ユーザーの Copilot レート制限が適用されます。 |
次のステップ
- サーバーで SDK を実行するには、 バックエンド サービス用の Copilot SDK の設定 を参照してください。
- 多数の同時実行ユーザーを処理するには、 Copilot SDK デプロイのスケーリング を参照してください。
- インストールと最初のメッセージについては、 Copilot SDK のはじめに を参照してください。