xshoji's blog

OpenCode の GitHub Copilot 連携機能の仕組みを読み解く(注意点あり)

目次

[ ! ] 2026-01-16(金) 追記

OpenCode on X: “OpenCode can now officially be used with your Github Copilot subscription …”
https://x.com/opencode/status/2011790750543983072

にある通り公式に GitHub Copilot 連携がサポートされたようです。 こちらの記事は、公式連携がサポートされる前にどのように OpenCode が GitHub Copilot 連携を実現していたのかの調査の記録として残しておきます。

はじめに

Claude Code の OSS 版と言われている

OpenCode | The open source AI coding agent
https://opencode.ai/

が話題になっています。 私は普段 GitHub Copilot を利用しているのですが、この OpenCode は GitHub Copilot との連携に対応しています。 …となると、 Claude Code を使わずとも、 OpenCode を使えば、追加料金なしで Claude Code っぽい環境を手に入れられるのでは?と思い、興味が湧きました。

ただ、利用する前に一点気になることがありました。 それは、 GitHub Copilot って 3rd パーティ製アプリに対して Copilot を使った操作の API を公開してない認識だったので、どのように連携してるんだろう?という点でした。 この部分について調べてみたところ、興味深い点と少し注意が必要な状況であることがわかったので、 今回はその内容について共有したいと思います。

OpenCode の GitHub Copilot 連携の仕組み

OpenCode の GitHub Copilot 連携の仕組みを理解するために、まずは OpenCode のソースコードを確認してみました。 以下のリポジトリに、 GitHub Copilot 連携に関するコードがありました。

L5 - opencode-copilot-auth/index.mjs - anomalyco/opencode-copilot-auth https://github.com/anomalyco/opencode-copilot-auth/blob/main/index.mjs#L5

ここを見ると、以下のような仕組みで GitHub Copilot との連携を実現していることが分かります。

項目説明
連携方式OAuth 2.0 Device Flow による認可
OAuth Client IDIv1.b507a08c87ecfe98

次に、連携の仕組みもう少し深く知るために、この Client ID の実態が何なのかを少し詳しく調べてみました。

Client ID: Iv1.b507a08c87ecfe98 の正体を調べる

調べてみたところ、面白いことがわかりました。 この Client ID: Iv1.b507a08c87ecfe98 の実体は

Connection with GitHub Copilot Plugin https://github.com/settings/connections/applications/Iv1.b507a08c87ecfe98

こちらの GitHub提供の公式アプリの Client ID と一致しているようです。 この GitHub Copilot Plugin というのは、 Visual Studio Code や JetBrains IDE 向けの公式プラグインが利用しているアプリケーションです。

OAuthに詳しい方なら、「あれ?」と思うかもしれません。 本来であれば、OpenCode のような 3rd パーティ製アプリは、自分たちで独自に OAuth アプリケーションを GitHub 上に登録し、そのアプリケーションの Client ID を使って OAuth の認可を行うべきです。 ただし、OpenCode は、現状この GitHub Copilot Plugin の Client ID を流用し、あたかも自信が公式の GitHub Copilot Plugin であるかのようにユーザーに認可画面を表示し、 OAuth の認可を行っているようです。

GitHub.com の Applications を見ると、GitHub Copilot Plugin は以下のように表示されているので、 OpenCode から利用する場合の実情と比較すると乖離があるように見えますね。

具体的にどんな問題があるのか?注意点について考える

大前提として、この方法で OAuth の認可を行うこと自体は技術的には可能ですし、トークンが第三者に渡ったり、悪用されてしまうような心配は基本的にはありません。 ただし、以下のような注意点や問題が発生する可能性があります。

  • Authorized OAuth Apps に認可したつもりの「 OpenCode 」のアプリが表示されない
    • GitHub Copilot Plugin の Client ID を流用しているため、システム上はこの「 GitHub Copilot Plugin 」という GitHub.com 公式のツールに対して認可を与えたことになり、ユーザーが認可したはずの OpenCode のアプリは存在しない状態になります
  • OpenCode への認可を単体で取り消せない
    • Authorized OAuth Apps に OpenCode のアプリが存在しないため、認可を取り消したい場合は、 GitHub Copilot Plugin 全体の認可を取り消す必要があります
  • GitHub.com の管理画面上で、 OpenCode へ認可を与えていることが把握できない
  • そもそも GitHub.com 側のポリシーに準拠してるのか曖昧

このため、 2026-01-07時点では、 OpenCode の GitHub Copilot 連携機能を利用する際には

“GitHub Copilot Plugin” という GitHub 公式アプリに対して認可を与えた扱いになる

という点を意識して利用する必要がありそうです。

そもそもなぜ3rdパーティ製ツールは独自の GitHub Apps を用意しないのか

これは、 Copilot のスコープを要求する GitHub Apps を作成しようとするとすぐ気づけるのですが、 一般ユーザーは、 GitHub Apps を作成する際の Permission として、 Copilot 関連の機能をフルで使う権限を選択できないようになっています。

OAuth Apps も同様で、Coplot に関するスコープは公開されていません。

Scopes for OAuth apps - GitHub Docs
https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps

…ということで、GitHub Copilot と連携するための OAuth Apps や GitHub Apps を一般ユーザーが独自に作成することは現状できないために、仕方なく(半分Hack的に)公式の Client ID を流用している、というのが実情のようでした。

本件について指摘してる人がいました

potential misconfiguration: Copilot Auth Flow · Issue #316 · anomalyco/opencode
https://github.com/anomalyco/opencode/issues/316

こちらの Issue では、 OpenCode の GitHub Copilot 連携機能の仕組みについて指摘がなされており、 OpenCode チームもこの点を認識しているようです。 その上、以下のようなコメントが書かれてました。

This has to be done this way. It is actually not originating from neovim plugin but from vscode. It is just this is the standard for all tools… they all copy from vscode.

これはこの方法でやるしかないんだ。実際には neovim プラグインから来ているわけではなく、vscode から来ているんだ。ただ、これはすべてのツールの標準で… みんな vscode からコピーしているんだ。

…え?まじ?と思いましたが、どうやら実際他の3rdパーティ製ツールも同様の方法で連携しているケースがあるようです😨

CopilotChat.nvim (こちらは過去の実装でそうなってただけで現在は修正されてそうです)

CopilotChat/config/providers.lua - CopilotC-Nvim/CopilotChat.nvim
https://github.com/CopilotC-Nvim/CopilotChat.nvim/blob/9db5d3eaafe9fc3c91ce9ecfc416de2798982487/lua/CopilotChat/config/providers.lua#L169

eclipse-github-copilot-integration

GitHubDeviceAuthService.java - masecla22/eclipse-github-copilot-integration
https://github.com/masecla22/eclipse-github-copilot-integration/blob/2237ae268339711844d49bcdffefeb6995ecc059/src/com/github/copilot/github/GitHubDeviceAuthService.java#L65

BerriAI/litellm

github_copilot/authenticator.py - BerriAI/litellm
https://github.com/BerriAI/litellm/blob/69aa111fddc73ab3cc18f3075e767878d48a5f36/litellm/llms/github_copilot/authenticator.py#L21

じゃあ正攻法としてはどうすればいいのか

github-copilot-chat - LLM Providers | Zed Code Editor Documentation
https://zed.dev/docs/ai/llm-providers?highlight=copilot#github-copilot-chat

Zed Code Editor というエディタのドキュメントを見ると、 GitHub Copilot 連携の手順が書かれています。 こちらはオープンソースなので、実装を覗いてみましょう。

copilot.rs - zed-industries/zed
https://github.com/zed-industries/zed/blob/efeea7973eb2a6fcf9f60971329361832eef76c1/crates/copilot/src/copilot.rs#L1170-L1172

ふむふむ、どうやら Zed Code Editor は、 GitHub.com が提供している @github/copilot-language-server というサーバーを利用して連携を実現しているようです。

github/copilot-language-server-release: Feedback for the GitHub Copilot Language Server
https://github.com/github/copilot-language-server-release

(ちなみにこのサーバーの実装元のコードは非公開のようでした)

このサーバーを使うことで、 Zed Code Editor は正攻法で GitHub Copilot 連携を実現しているようです。

…ただ、このサーバーのREADMEを読むと、結局 OAuth 2.0 Device Flow による認可を行うようです。となると、また最初の「じゃあどの OAuth Client ID を使うの?」という問題に戻ってしまいます。

幸い、このサーバーはjsで実装されてるようだったんで、DLして中身のコードを確認してみました。 その結果、なんとやっぱり最終的には

Connection with GitHub Copilot Plugin https://github.com/settings/connections/applications/Iv1.b507a08c87ecfe98

に認可を与える形で OAuth の認可を行っていることが分かりました…😨😨😨

[01-07 02:42:55] macbookpro copilot-language-server-js-1.406.0$ ag Iv1.b507a08c87ecfe98
main.js
..."editorVersionHeaders");var gT="Iv1.b507a08c87ecfe98",zii="350ee525b5da0e4a54c6e8e043edc1b...
[01-07 02:42:59] macbookpro copilot-language-server-js-1.406.0$

このため、仮に GitHub.com の提供する @github/copilot-language-server を利用した方法で GitHub Copilot と連携する仕組みを実装したとしても、 認可を与えるアプリケーションは結局はみな同じ Client ID = Iv1.b507a08c87ecfe98 = GitHub Copilot Plugin を使って OAuth の認可を行うことになる、ということがわかりました。

まとめ

OpenCode の GitHub Copilot 連携機能の仕組みを読み解く流れで、現状の 3rdパーティ製のツールの GitHub Copilot 連携の実装方式の実態について理解が深まりました。

余談1

ちなみに、Zed の GitHub Sign in 機能を利用してる場合

what-features-require-signing-in - Authenticate | Zed Code Editor Documentation
https://zed.dev/docs/authentication#what-features-require-signing-in

Authorized GitHub Apps を見ると

  • Zed Industries

が表示されます。 このため、もし Zed の GitHub Sign in 機能を利用していて、かつ GitHub Copilot との連携も行なっている場合、 Authorized GitHub Apps を見るとぱっと見 GitHub Copilot 連携もこの「 Zed Industries 」のクライアントを通じて行なっているように見えてしまうなーと思いました。

実際には

  • GitHub Copilot Plugin: Zed からの GitHub Copilot 連携 はこちらのクライアントの権限が利用される
  • Zed Industries: Zed のコラボレーション機能などはこちらのクライアントの権限 ( read:user GitHub scope ) が利用される

という状態になるので、この点に注意する必要がありそうです。

余談2

Zed というエディタ、あまり詳しくは追ってなかったんですが

zed-industries/zed: Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
https://github.com/zed-industries/zed

Welcome to Zed, a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.

とあるように、 今はなき Atom の開発チームが手掛けているみたいです。 で、 Atom といえば、 GitHub が Microsoft に買収された後も長らく開発が続けられていましたが、最終的には開発終了がアナウンスされました。

そして、この Zed を開発してる組織 Zed Industries に対して

Zed Announces $10M Series A and Launches its Collaborative Code Editor
https://www.prweb.com/releases/Zed_Announces_10M_Series_A_and_Launches_its_Collaborative_Code_Editor/prweb19217168.htm

Zed Industries, the maker of a high-performance, multiplayer code editor, today announced it raised a $10 million Series A funding round, bringing total investment in the company to $12.5 million. The round was led by Redpoint Ventures, with participation from existing investor Root Ventures as well angel investors including Dylan Field of Figma, Tom Preston Werner of GitHub, Spencer Kimball of CockroachDB, and Rahul Vohra and Todd Goldberg of Superhuman.

高性能でマルチプレイヤーのコードエディタを作成するZed Industriesは、本日、1000万ドルのシリーズA資金調達ラウンドを発表し、同社の総投資額を1250万ドルに引き上げました。このラウンドはRedpoint Venturesが主導し、既存投資家のRoot Venturesと、エンジェル投資家であるFigmaのDylan Field、GitHubのTom Preston Werner、CockroachDBのSpencer Kimball、SuperhumanのRahul VohraとTodd Goldbergが参加しました。

とある通り、 GitHub の共同創業者 Tom Preston Werner 氏もエンジェル投資家として参加しているようです。 また Zed は GitHub.com の仕組みをベースとしており、ここまで関わりが深いエディタが採用している方式なので、 現状は @github/copilot-language-server を使った連携方法しか選択肢が無いのかもしれませんね。