1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

背景

ある日、休暇をとって気儘に記事でも書くかと思ってたら
GitHub Copilot CLI が動かなくなっていることに気づいた

GitHub Copilot CLI: no platform package found.
Reinstall with `npm install -g @github/copilot` to fetch the package for your platform.

で、install させると、以下の Install GitHub Copilot CLI? (y/N): の繰り返しで終わらない・・

Cannot find GitHub Copilot CLI (https://docs.github.com/en/copilot/how-tos/set-up/install-copilot-cli)
Install GitHub Copilot CLI? (y/N):

でも不思議なことに、Windows Terminal で gh copilot を打つと普通に動く

同じマシン、同じ PowerShell 7、なのに VS Code だけ壊れてる……?

さらに謎なことに、VS Code で gh copilot を実行すると PowerShell 5.1 で動こうとする という問題も発覚。

Windows PowerShell version 5.1.26100.8655
 with: C:\Users\IORI\OneDrive\ドキュメント\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

かなり面倒な雰囲気を感じていたので放置していたんだけど

  • 今なら GLM5.2 という優秀な秘書がいる :laughing:

ってことで、原因を探る旅をはじめた記録

すべて壁打ちしながら、token 節約と暴走防止の為に、手作業でやりました :sweat_smile:
PC 操作させて解決させてたらもっとあっという間に終わったのかもしれない・・・

導入は以下でやったやつ

結論

原因は色々あった・・ :sweat_smile:

  • VS Code が PATH の先頭に壊れた npm 版 Copilot CLI ラッパーを見つけて優先していた
  • Windows Terminal は gh copilot(GitHub CLI 内蔵)を使うので正常だった
  • npm 版の postinstall が platform package を正しく展開できていなかった
  • VS Code が内部で PowerShell 5.1 を呼んでしまう 問題もあった
  • そもそも、環境変数 PATH がボロボロだった

最終的に、効いたこと:

  1. 環境変数を整理
  2. WinGet で standalone 版をインストール

他、試したり、対処したりしたやつも・・

修正の旅

① PATH がぐちゃぐちゃで where が効いてなかった

ここが一番時間食ったんだけど、VS Code の環境変数がぐちゃぐちゃになってた。

まず、VS Code のターミナルで PATH を表示してみると、Windows Terminal にはない謎のパスが先頭に追加されてた。

c:\Users\IORI\AppData\Roaming\Code\User\globalStorage\github.copilot-chat\debugCommand
c:\Users\IORI\AppData\Roaming\Code\User\globalStorage\github.copilot-chat\copilotCli

これ、VS Code の Copilot Chat 拡張が勝手に追加してたやつ。しかも PATH の重複もひどくて、PowerShell 7dotnetGitnvmnodejs あたりが2〜3回ずつ出てきてた。

さらに悪いことに、where copilot が VS Code では何も返さない時があったり、where pwsh も VS Code だけ出なかったりした。winget すら VS Code で動かない状態になってた(WindowsApps が PATH から消えてた)。

つまり、windows の PATH が壊れてたせいで where がまともに効かず、原因特定がめちゃくちゃ遅れた 😅

Path 自体が壊れた理由は、Path の追加を LLM のいう通りに script でやったりして増えてったのかな?という気がする。で、重複して長くなり、文字数制限を超えて壊れていたってのが予想 :sweat:

で、その対処をした結果、

  • VS Code と Windows Terminal で PATH が違う

ことにようやく気づいた

② PowerShell 5.1 が勝手に起動する問題

VS Code で gh copilot を実行すると、なぜか PowerShell 5.1 が起動してしまう問題もあった。

これを直そうとして、settings.json で PowerShell 7 を明示的に指定してみたり、automationShell を設定してみたりした。

"terminal.integrated.automationShell.windows": "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
"terminal.integrated.defaultProfile.windows": "PowerShell",
"terminal.integrated.agentHostProfile.windows": "PowerShell 7",
"terminal.integrated.enableShellIntegration": true

もともと vscode の terminal は、7.6.3 で起動してたけど どうやっても、gh copilot 起動時に相変わらず 5.1 を呼ぶ 😅

where pwsh で pwsh が PATH にあることも確認したのに、VS Code の内部プロセスが呼ぶ PowerShell は 5.1 のままだった。

これも、確か path 修正で治った記憶

③ VS Code の設定で CLI フックを無効化

copilot cli が npm 版や、powershell 5.1 側で動く原因?と考えて試してみた

settings.json にいろいろ入れてみた。

"github.copilot.enableCommandLineInterface": false,
"github.copilot-chat.enableCommandLineInterface": false,
"github.copilot-chat.experimental.cliBootstrap": false,
"terminal.integrated.inheritEnv": false

結果:効かない。

④ VS Code の globalStorage を退避

VS Code の Copilot Chat 拡張が globalStorage に自動生成してる CLI ブートストラップが怪しかったので退避。

Rename-Item "$env:USERPROFILE\AppData\Roaming\Code\User\globalStorage\github.copilot-chat\copilotCli" "copilotCli.bak"

結果:直らず、VS Code を再起動すると復活する 😇

④-補足 copilot.ps1 の中身を解析した

「なんで復活するんだ?」と思って、globalStorage\github.copilot-chat\copilotCli の中にあった copilot.ps1 を読んでみた。

すると、これは VS Code の Copilot Chat 拡張が自動生成した 旧 Copilot CLI ブートストラップ だった。

中身を要約するとこんな感じ:

# Minimum required Copilot CLI version
$RequiredVersion = "0.0.394"
$PackageName = "@github/copilot"

function Find-RealCopilot {
    # PATH から copilot を探す(自分自身は除外)
    # ...
}

function Install-CopilotCLI {
    # npm install -g @github/copilot を実行
    # ダメなら winget install GitHub.Copilot にフォールバック
    # ...
}

function Test-AndLaunchCopilot {
    # copilot が見つからなければ「Install GitHub Copilot CLI? (y/N)」
    # バージョンが古ければ「Update GitHub Copilot CLI? (y/N)」
    # ...
}

Test-AndLaunchCopilot $finalArgs

つまり、このスクリプトは:

  1. PATH から copilot を探す
  2. 見つからなければ「インストールする?」と聞く
  3. npm install -g @github/copilot を実行
  4. ダメなら winget install GitHub.Copilot にフォールバック
  5. 見つかれば本物の copilot を起動

これが VS Code のターミナルで copilot と打つと「Install GitHub Copilot CLI? (y/N)」が出る原因だった。

なぜ Windows Terminal では出ないのか

この copilot.ps1 は VS Code が globalStorage\github.copilot-chat\copilotCli を PATH に追加するため、VS Code のターミナルだけで発火する。Windows Terminal はこの PATH を持たないので、このスクリプトが呼ばれない。

ここで「VS Code が自動生成してるなら、消しても復活するわけだ」と完全に納得できた。

⑤ npm 再インストール

で、npm 版が壊れてるのか?と疑って・・

npm install -g @github/copilot

結果:インストールは成功するけど、VS Code で相変わらず no platform package found 😅

--verbose つけても postinstall は成功してるように見えるのに、platform package が展開されてない。

⑥ VS Code の再インストール

もう VS Code ごと入れ直すか……となって、本体+ユーザーデータ+キャッシュ+拡張を全部消して再インストール。

結果:それでも copilotCli が復活する 😇😇😇

VS Code の再インストールは時間かかるし、設定のバックアップも必要で、ほんとに無駄だった

最終的に・・

1. npm 版をアンインストール

npm uninstall -g @github/copilot

2. nodejs 配下の残骸を削除

たぶんこれはどっちでもよいと思う。npm のもだけど
アンインストールしてもラッパーが残ることがあるので、手動で消す。管理者 PowerShell で実行推奨。

Remove-Item "C:\Program Files\nodejs\node_modules\@github\copilot" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Program Files\nodejs\copilot.ps1" -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Program Files\nodejs\copilot.cmd" -Force -ErrorAction SilentlyContinue
Remove-Item "C:\Program Files\nodejs\copilot" -Recurse -Force -ErrorAction SilentlyContinue

3. VS Code の拡張ローカル CLI を退避

これもどっちでもよい気がしてる
VS Code を完全に終了してから実行。

Rename-Item "$env:USERPROFILE\AppData\Roaming\Code\User\globalStorage\github.copilot-chat" "$env:USERPROFILE\AppData\Roaming\Code\User\globalStorage\github.copilot-chat.bak" -ErrorAction SilentlyContinue

4. WinGet で standalone 版をインストール

これが本命

winget install --id GitHub.Copilot

公式ドキュメントでも、Windows では WinGet でのインストールが案内されている。npm 版と違い、standalone 版は platform package の展開に失敗しないので安定する。

5. 動作確認

where.exe copilot
copilot --version

期待する結果:

C:\Users\<you>\AppData\Local\Microsoft\WinGet\Links\copilot.exe
GitHub Copilot CLI 1.0.69.
Run 'copilot update' to check for updates.

長い戦いの末の勝利 :laughing:

copilot update も動くようになった。

copilot update
Checking for updates...
Checking GitHub for the latest release...
No update needed, current version is 1.0.69, fetched latest release is v1.0.69

memo

  • VS Code は PATH を独自に追加編集してる
  • where が効かないときは、path を疑え
  • PATH は定期的に見直したほうが良い、重複は消す
  • Windows では standalone 版が安定:npm 版に比べて壊れにくそう
  • Copilot 拡張の local CLI が壊れることもある:困ったら globalStorage を退避するのが早い。(といっても、これは、古いバージョンのだから今はもうゴミかも)
  • VS Code が内部で PowerShell 5.1 を呼ぶことがあるsettings.jsonautomationShell を pwsh(7.*) に指定しても、拡張の内部プロセスは PATH を見て powershell.exe を呼ぶことがある。

あとがき

VS Code の再インストールとか、設定いろいろいじるとか、無駄なこと結構やっちゃったけど、結果的に PATH も奇麗になったし、where pwsh が表示されない問題とかもなおあったので結果オーライ :laughing:

なにより、一人でやってたらとっくにあきらめてたけど、GLM5.2 さんには感謝 :bow:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?