APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

vimでも動くGitHub Copilot

はじめに

こんにちは、コンテナソリューション事業部の髙井です。

GitHub Copilot、とても便利ですね。
こんなに便利だと、vscodeだけじゃなくvimでも使いたいですよね。

つい最近、copilot.vimというのがあるのに気付いたので使ってみました。

私はvimキーバインドとUSキーボードがないと生まれたての小鹿のような状態になってしまう人間ですが、そういう人には朗報です。

おそらく日本国民の90%がそれに該当すると思いますので、ブログにしました。

インストール

github.com

リポジトリにあるREADMEの通りに進めればOKですが、私の場合はWSL2のNeovimに導入したかったので、以下のコマンドでした。

git clone https://github.com/github/copilot.vim.git \
  ~/.config/nvim/pack/github/start/copilot.vim

Neovim上では、:Copilot setupをコマンド入力するとブラウザ上でワンタイムコードを入力できて、セットアップは完了します。

ブラウザ側でワンタイムコードを入力

あっという間 劇場

とてもシンプルでいいですね。

ちゃんと有効になっているかは:Copilot statusで確認します。

`Enabled and online`になっていればOK

参考までに、私が導入したときのversion情報です。

`:Copilot version`で見れます

動作確認

使い方は従来のGitHub Copilotとあまり変わりません。

  1. 変数名や型付けがちゃんとしていて可読性の高いリポジトリを用意する
  2. 何かしらの新規機能を書き始める
  3. 元のコードがよいので、よいサジェストが出る
  4. ひたすらTabとEnterを押し続ける
  5. 人間としての尊厳と叡智をもってAI風情のコードを手直しする

copilot.vimも、Tabでサジェストを受け入れます。
vimをカスタマイズしていてTabをほかに割り当ててしまっている人は:help copilotを参照して対処しましょう。

その他キーバインド

  • C-]:サジェストを拒否
  • M-]:次のサジェスト
  • M-[:前のサジェスト
  • M-\:強制的にサジェスト誘起

vscodeのように、単語単位でサジェストを受け入れるコマンドはなさそうでした。

そこはvimの有り余る編集能力でカバーすればよいと思います。

vscodeと同じサジェストをさせてみる

動作に差がないかチェックしてみます。

まずは、ナイーブな実装でフィボナッチ数列を求めさせてみましょう。

上がvscode、下がvscode内のターミナルで開いたNeovimです。

ナイーブな実装

絶妙に違う

工夫された実装

次に、ナイーブでない実装で求めさせてみましょうかね。

ちょっと待て

両方とも微妙なサジェストをしてきたので、誘導します。

メモ化による高速化を促すために、追加引数の存在をカンマで知らせます。

このように、GitHub Copilotの便利さを最大限引き出すためには、サジェストの内容を素早く判断し、より優れた実装を導く必要があります。

AIによりエンジニアが不要になるどころか、表層より深い部分でのエンジニアのスキルアップが求められることが体感できます。

copilot.vimのほうが賢い……?

copilot.vimのほうがマトモなサジェストを返していますね。

これは、vimmerの大勝利でしょうか。

複数ファイルを開いて再チャレンジ

vscodeだと、いま開いているファイル群がサジェストの材料になっているらしいので、複数ファイルを開いたときの挙動の違いを見てみます。

vimのほうはnvim -O main.py sub.pyで開きます(-Oは最初から縦スプリットされた状態で開くオプションです、-oだと水平スプリットになります)。

vscodeはモジュールをまたいだ正確なサジェストがされている

あれー、vimは複数ファイルを同時に開いててもダメなのかもしれないですね。まあ、個別にバッファ持ってますからね。

設定や工夫次第でいけるのかもしれませんが、このあたりは無設定でサクサク思い通りということではなさそうです。

おわりに

私も普段はvscode-neovimプラグインを入れてvscodeで作業しているのですが、ターミナル上でnvimを使ってパパパとやりたいシーンも多いので、このような選択肢があることは素晴らしいと思いました。

複数ファイルオープン時のサジェストには課題がありそうですが、もし解決策を見つけたらこのブログに追記しておこうと思います。


私達ACS事業部はAzure・AKSを活用した内製化のご支援をしております。ご相談等ありましたらぜひご連絡ください。

www.ap-com.co.jp

また、一緒に働いていただける仲間も募集中です!
切磋琢磨しながらスキルを向上できる、エンジニアには良い環境だと思います。ご興味を持っていただけたら嬉しく思います。

www.ap-com.co.jp

本記事の投稿者: 髙井 比文
AKSをメインにしたインフラとアプリの領域際をご支援することが多いです。Azureは11冠です。
Hifumi Takai - Credly