{"meta":{"title":"リモート セッション","intro":"リモート セッションを使用すると、ユーザーは Mission Control 経由でGitHub Web およびモバイルからCopilot セッションにアクセスできます。 有効にすると、SDK は各セッションを Mission Control に接続し、リンクまたは QR コードとして共有できる URL を生成します。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/ja/enterprise-cloud@latest/copilot/how-tos","title":"方法"},{"href":"/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features","title":"機能"},{"href":"/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/remote-sessions","title":"リモート セッション"}],"documentType":"article"},"body":"# リモート セッション\n\nリモート セッションを使用すると、ユーザーは Mission Control 経由でGitHub Web およびモバイルからCopilot セッションにアクセスできます。 有効にすると、SDK は各セッションを Mission Control に接続し、リンクまたは QR コードとして共有できる URL を生成します。\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\nGitHubホスト型コンピューティングでのセッションの実行については、[クラウド セッション](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/cloud-sessions) を参照してください。\n\n## Prerequisites\n\n* ユーザーは認証されている必要があります (GitHub トークンまたはログイン ユーザー)\n* セッションの作業ディレクトリは、GitHub リポジトリである必要があります\n\n## リモート セッションの有効化\n\n### 常時オン（クライアントレベル）\n\nクライアントの作成時に `enableRemoteSessions: true` を設定します。 GitHub リポジトリ内のすべてのセッションで、リモート URL が自動的に取得されます。\n\n<!-- tabs:start -->\n\n#### TypeScript\n\n<!-- docs-validate: skip -->\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient({ enableRemoteSessions: true });\nconst session = await client.createSession({\n  workingDirectory: \"/path/to/github-repo\",\n  onPermissionRequest: async () => ({ allowed: true }),\n});\n\nsession.on(\"session.info\", (event) => {\n  if (event.data.infoType === \"remote\") {\n    console.log(\"Remote URL:\", event.data.url);\n  }\n});\n```\n\n#### Python\n\n<!-- docs-validate: skip -->\n\n```python\nfrom copilot import CopilotClient\n\nclient = CopilotClient(enable_remote_sessions=True)\nsession = await client.create_session(\n    working_directory=\"/path/to/github-repo\",\n    on_permission_request=lambda req: {\"allowed\": True},\n)\n\ndef on_event(event):\n    if event.type == \"session.info\" and event.data.info_type == \"remote\":\n        print(f\"Remote URL: {event.data.url}\")\n\nsession.on(on_event)\n```\n\n#### Go\n\n<!-- docs-validate: skip -->\n\n```golang\nclient := copilot.NewClient(&copilot.ClientOptions{EnableRemoteSessions: true})\nsession, _ := client.CreateSession(ctx, &copilot.SessionConfig{\n    WorkingDirectory: \"/path/to/github-repo\",\n    OnPermissionRequest: func(req copilot.PermissionRequest, inv copilot.PermissionInvocation) (rpc.PermissionDecision, error) {\n        return &rpc.PermissionDecisionApproveOnce{}, nil\n    },\n})\n\nsession.On(func(event copilot.SessionEvent) {\n    if event.Type == \"session.info\" {\n        // Check infoType and extract URL\n    }\n})\n```\n\n#### C\\#\n\n<!-- docs-validate: skip -->\n\n```csharp\nvar client = new CopilotClient(new CopilotClientOptions { EnableRemoteSessions = true });\nvar session = await client.CreateSessionAsync(new SessionConfig\n{\n    WorkingDirectory = \"/path/to/github-repo\",\n    OnPermissionRequest = (req, inv) =>\n        Task.FromResult(PermissionDecision.ApproveOnce()),\n});\n\nsession.On((SessionEvent e) =>\n{\n    if (e is SessionInfoEvent info && info.Data.InfoType == \"remote\")\n    {\n        Console.WriteLine($\"Remote URL: {info.Data.Url}\");\n    }\n});\n```\n\n#### Rust\n\n<!-- docs-validate: skip -->\n\n```rust\nuse github_copilot_sdk::{Client, ClientOptions, SessionConfig};\nuse github_copilot_sdk::handler::PermissionResult;\n\nlet client = Client::start(\n    ClientOptions::new().with_enable_remote_sessions(true)\n).await?;\nlet session = client.create_session(\n    SessionConfig::new(\"/path/to/github-repo\")\n        .with_permission_handler(|_req, _inv| async {\n            Ok(PermissionResult::approve_once())\n        }),\n).await?;\n\nlet mut events = session.subscribe();\nwhile let Ok(event) = events.recv().await {\n    if event.event_type == \"session.info\" {\n        // Check info_type and extract URL\n    }\n}\n```\n\n<!-- tabs:end -->\n\n### オンデマンド (セッションごとの切り替え)\n\n`session.rpc.remote.enable()`を使用してセッションの途中でリモート アクセスを開始し、`session.rpc.remote.disable()`して停止します。 これは、CLI の `/remote on` コマンドと `/remote off` コマンドと同じです。\n\n<!-- tabs:start -->\n\n#### TypeScript\n\n<!-- docs-validate: skip -->\n\n```typescript\nconst result = await session.rpc.remote.enable();\nconsole.log(\"Remote URL:\", result.url);\n\n// Later: stop sharing\nawait session.rpc.remote.disable();\n```\n\n#### Python\n\n<!-- docs-validate: skip -->\n\n```python\nresult = await session.rpc.remote.enable()\nprint(f\"Remote URL: {result.url}\")\n\n# Later: stop sharing\nawait session.rpc.remote.disable()\n```\n\n#### Go\n\n<!-- docs-validate: skip -->\n\n```golang\nresult, err := session.RPC.Remote.Enable(ctx)\nif result.URL != nil {\n    fmt.Println(\"Remote URL:\", *result.URL)\n}\n\n// Later: stop sharing\nerr = session.RPC.Remote.Disable(ctx)\n```\n\n#### C\\#\n\n<!-- docs-validate: skip -->\n\n```csharp\nvar result = await session.Rpc.Remote.EnableAsync();\nConsole.WriteLine($\"Remote URL: {result.Url}\");\n\n// Later: stop sharing\nawait session.Rpc.Remote.DisableAsync();\n```\n\n#### Rust\n\n<!-- docs-validate: skip -->\n\n```rust\nlet result = session.rpc().remote().enable().await?;\nif let Some(url) = &result.url {\n    println!(\"Remote URL: {url}\");\n}\n\n// Later: stop sharing\nsession.rpc().remote().disable().await?;\n```\n\n<!-- tabs:end -->\n\n## QR コードの生成\n\nリモート URL は、モバイル アクセスを容易にする QR コードとしてレンダリングできます。 SDK には URL が用意されています。任意の QR コード ライブラリを使用します。\n\n* **TypeScript**: [qrcode](https://www.npmjs.com/package/qrcode)\n* **Python**: [qrcode](https://pypi.org/project/qrcode/)\n* **Go**: [go-qrcode](https://github.com/skip2/go-qrcode)\n* **C#**: [QRCoder](https://www.nuget.org/packages/QRCoder)\n* **Rust**: [qrcode](https://crates.io/crates/qrcode)\n\n## メモ\n\n* `enableRemoteSessions` クライアント オプションは、SDK がランタイムを開始するときに、子プロセスまたはインプロセス ホストとして適用されます。 既に実行されているランタイムに接続する場合は無視されます。\n* 作業ディレクトリがGitHub リポジトリでない場合、リモート セットアップはサイレント モードでスキップされるか (常時オン モード)、エラー (オンデマンド モード) が返されます。\n* リモート セッションには認証が必要です。\n  `gitHubToken`または`useLoggedInUser`が構成されていることを確認します。"}