## 背景
[[VSCode Insiders]]で[[GitHub Copilot]]を試してみた。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📜2025-02-13 GitHub Copilotを試してみた
</div>
<div class="link-card-v2-content">GitHub Copilotが世に誕生してから既に数年が経った。楽しい未来が見えなかったのでずっと静観していたが、先日遂にAIエージェントに対応したとの話を聞いたので、そろそろやっておかないとまずいかなと思い試してみることにした。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" />
<a data-href="📜2025-02-13 GitHub Copilotを試してみた" class="internal-link"></a>
</div>
%%[[📜2025-02-13 GitHub Copilotを試してみた]]%%
[[VSCode]]はUI面で優れているものの、できれば[[Neovim]]でも[[GitHub Copilot]]を利用してみたい。[[copilot.vim]]と[[copilot.lua]]のどちらがいいかを聞いてみたが、[[copilot.lua]]の方が良さそうとなった。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://cdn.oaistatic.com/assets/favicon-miwirzcw.ico" />
<span class="link-card-v2-site-name">ChatGPT</span>
</div>
<div class="link-card-v2-title">
ChatGPT - Copilot.vim vs Copilot.lua
</div>
<div class="link-card-v2-content">
Shared via ChatGPT
</div>
<img class="link-card-v2-image" src="https://cdn.oaistatic.com/assets/chatgpt-share-og-u7j5uyao.webp" />
<a href="https://chatgpt.com/share/67b18e84-57dc-800a-bb01-047b4903b5d8"></a>
</div>
[[copilot.lua]]を作成した理由についても同感できる。
> While using copilot.vim, for the first time since I started using neovim my laptop began to overheat. Additionally, I found the large chunks of ghost text moving around my code, and interfering with my existing cmp ghost text disturbing. As lua is far more efficient and makes things easier to integrate with modern plugins, this repository was created.
## 環境
| 対象 | バージョン |
| ------------- | ----------- |
| [[Ubuntu]] | 24.04.1 LTS |
| [[Neovim]] | 0.10.3 |
| [[lazy.nvim]] | `f15a939` |
## インストール
[[lazy.nvim]]を使う。
`copilot.lua`
```lua
return {
"zbirenbaum/copilot.lua",
cmd = "Copilot",
event = "InsertEnter",
opts = {},
}
```
## 認証
`:Copilot auth` を実行。しかし何も起きない。。。回避策は見つけたのでそれで凌ぐ。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📝copilot.luaでCopilot authコマンドを実行しても何も起こらず認証できない
</div>
<div class="link-card-v2-content">`auth.lua` の `copytoclipboard` を削除したら認証処理が実行された。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" />
<a data-href="📝copilot.luaでCopilot authコマンドを実行しても何も起こらず認証できない" class="internal-link"></a>
</div>
%%[[📝copilot.luaでCopilot authコマンドを実行しても何も起こらず認証できない]]%%
ポップアップに表示されたコードをコピーし、ポップアップに表示されたURLにアクセスして認証を進める。しばらくすると元のポップアップは消える。
### 認証されたことを確認
`:Copilot status` の結果が以下のようになっていればOK。
```console
[Copilot] Authenticated as GitHub user: tadashi-aikawa
```
## nvim-cmpを入れる
[[nvim-cmp]]で補完が表示されるようにする。[[copilot-cmp]]を使う。
`copilot-cmp.lua`
```lua
return {
"zbirenbaum/copilot-cmp",
opts = {},
}
```
`nvim-cmp.lua` の差分
```diff
sources = cmp.config.sources({
+ { name = "copilot" },
{
name = "nvim_lsp",
},
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
{ name = "lazydev", group_index = 0 },
}),
```
ただ、候補がノイズになることも多かったのでこの機能は使わないことにした。特に間違って選択したときのストレスが凄い。
## Copilot Chat for Neovimを入れる
やはり[[GitHub Copilot]]に求める一番の機能はchat機能なので、[[Copilot Chat for Neovim]]を入れてみる。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - CopilotC-Nvim/CopilotChat.nvim: Chat with GitHub Copilot in Neovim
</div>
<div class="link-card-v2-content">
Chat with GitHub Copilot in Neovim. Contribute to CopilotC-Nvim/CopilotChat.nvim development by creating an acco ...
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/a44507e2247e15243b14d76fd4c0ea244f1867d6bd259f61e822cd25be2e9d80/CopilotC-Nvim/CopilotChat.nvim" />
<a href="https://github.com/CopilotC-Nvim/CopilotChat.nvim"></a>
</div>
`CopilotChat.lua`
```lua
return {
{
"CopilotC-Nvim/CopilotChat.nvim",
dependencies = {
{ "zbirenbaum/copilot.lua" },
{ "nvim-lua/plenary.nvim" },
},
build = "make tiktoken", -- Only on MacOS or Linux
opts = {},
},
}
```
とりあえずChatは動いたけど、Webから検索をしてはくれないので厳しい。[[o3-mini]]でも無理だったので、[[copilot.lua]]の制約だろうか。
## copilotのLSPをインストールしてみる
[[Copilot Language Server]]をインストールする。[[mise]]の[[npm Backend (mise)|npm Backend]]を使う。
```console
$ mise use -g npm:@github/copilot-language-server
Reshimming mise 22.8.0...
mise npm:@github/
[email protected] ✓ installed
mise ~/.config/mise/config.toml tools: npm:@github/
[email protected]
```
以下の記事を参考に設定をしてみた。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://syu-m-5151.hatenablog.com/icon/favicon" />
<span class="link-card-v2-site-name">じゃあ、おうちで学べる </span>
</div>
<div class="link-card-v2-title">
Neovimで始めるGitHub Copilot - copilot.lua による Language Server の設定方法 - じゃあ、おうちで学べる
</div>
<div class="link-card-v2-content">
github.blog この設定は一時的なものであり、LSPのインストーラーが対応したらそちらで対応してください。 github.com はじめに 2025年2月10日、GitHubはCopilot Language Ser ...
</div>
<img class="link-card-v2-image" src="https://ogimage.blog.st-hatena.com/8454420450094081900/6802418398327874248/1739407920" />
<a href="https://syu-m-5151.hatenablog.com/entry/2025/02/11/183337"></a>
</div>
[[mise]]を使ったので `copilot-language-server` コマンドのパスは異なる。
`copilot.lua`
```lua
return {
"zbirenbaum/copilot.lua",
cmd = "Copilot",
event = "InsertEnter",
config = function()
require("copilot").setup({
suggestion = { enabled = false },
panel = { enabled = false },
server_opts_overrides = {
trace = "verbose",
cmd = {
vim.fn.expand("~/.local/share/mise/shims/copilot-language-server"),
"--stdio",
},
settings = {
advanced = {
listCount = 10,
inlineSuggestCount = 3,
},
},
},
})
end,
}
```
これで結果は変わったっぽい。ただ、Web検索はできない。
## Web検索について
検索している限り、[[GitHub Copilot]]はWeb検索できなさそう。なので、最新情報を取得したりそれを考慮する結果を期待することは難しそうだ。
その場合はおとなしく[[ChatGPT Plus]]を使うのがよい。そういう棲み分けが必要ということか。
![[Pasted image 20250216183553.png|frame]]
*VSCodeの公式プラグインでも断られるので厳しそう*
## NeovimとVSCodeのどちらでCopilotを使うべきか
[[VSCode]]の方が総じて何も考えずに利用できる点は良い。状態やAIからの回答もリッチな表現可能なため見やすい。一方で、[[VSCode]]で該当プロジェクトを開く必要はあるので、軽い利用には[[Neovim]]から直接実行したいこともある。
## 結局...
[[CodeCompanion]]に[[GitHub Copilotのアダプタを設定 (CodeCompanion)|GitHub CopilotのAdapterを設定]]することにした。
今回インストールしたものはすべてアンインストール済。
## 参考
- [NeovimへのGithub Copilot, Copilot Chat導入までの道のり \#Vim \- Qiita](https://qiita.com/haw_ohnuma/items/1ec8ef5091b440cbb8bd)
- [Neovimで始めるGitHub Copilot \- copilot\.lua による Language Server の設定方法 \- じゃあ、おうちで学べる](https://syu-m-5151.hatenablog.com/entry/2025/02/11/183337)