はじめに
こんにちは、コンテナソリューション事業部の髙井です。
GitHub Copilot、とても便利ですね。
こんなに便利だと、vscodeだけじゃなくvimでも使いたいですよね。
つい最近、copilot.vimというのがあるのに気付いたので使ってみました。
私はvimキーバインドとUSキーボードがないと生まれたての小鹿のような状態になってしまう人間ですが、そういう人には朗報です。
おそらく日本国民の90%がそれに該当すると思いますので、ブログにしました。
インストール
リポジトリにある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
で確認します。
参考までに、私が導入したときのversion情報です。
動作確認
使い方は従来のGitHub Copilotとあまり変わりません。
- 変数名や型付けがちゃんとしていて可読性の高いリポジトリを用意する
- 何かしらの新規機能を書き始める
- 元のコードがよいので、よいサジェストが出る
- ひたすらTabとEnterを押し続ける
- 人間としての尊厳と叡智をもってAI風情のコードを手直しする
copilot.vimも、Tabでサジェストを受け入れます。
vimをカスタマイズしていてTabをほかに割り当ててしまっている人は:help copilot
を参照して対処しましょう。
その他キーバインド
C-]
:サジェストを拒否M-]
:次のサジェストM-[
:前のサジェストM-\
:強制的にサジェスト誘起
vscodeのように、単語単位でサジェストを受け入れるコマンドはなさそうでした。
そこはvimの有り余る編集能力でカバーすればよいと思います。
vscodeと同じサジェストをさせてみる
動作に差がないかチェックしてみます。
まずは、ナイーブな実装でフィボナッチ数列を求めさせてみましょう。
上がvscode、下がvscode内のターミナルで開いたNeovimです。
ナイーブな実装
工夫された実装
次に、ナイーブでない実装で求めさせてみましょうかね。
両方とも微妙なサジェストをしてきたので、誘導します。
メモ化による高速化を促すために、追加引数の存在をカンマで知らせます。
このように、GitHub Copilotの便利さを最大限引き出すためには、サジェストの内容を素早く判断し、より優れた実装を導く必要があります。
AIによりエンジニアが不要になるどころか、表層より深い部分でのエンジニアのスキルアップが求められることが体感できます。
copilot.vimのほうがマトモなサジェストを返していますね。
これは、vimmerの大勝利でしょうか。
複数ファイルを開いて再チャレンジ
vscodeだと、いま開いているファイル群がサジェストの材料になっているらしいので、複数ファイルを開いたときの挙動の違いを見てみます。
vimのほうはnvim -O main.py sub.py
で開きます(-O
は最初から縦スプリットされた状態で開くオプションです、-o
だと水平スプリットになります)。
あれー、vimは複数ファイルを同時に開いててもダメなのかもしれないですね。まあ、個別にバッファ持ってますからね。
設定や工夫次第でいけるのかもしれませんが、このあたりは無設定でサクサク思い通りということではなさそうです。
おわりに
私も普段はvscode-neovimプラグインを入れてvscodeで作業しているのですが、ターミナル上でnvimを使ってパパパとやりたいシーンも多いので、このような選択肢があることは素晴らしいと思いました。
複数ファイルオープン時のサジェストには課題がありそうですが、もし解決策を見つけたらこのブログに追記しておこうと思います。
私達ACS事業部はAzure・AKSを活用した内製化のご支援をしております。ご相談等ありましたらぜひご連絡ください。
また、一緒に働いていただける仲間も募集中です!
切磋琢磨しながらスキルを向上できる、エンジニアには良い環境だと思います。ご興味を持っていただけたら嬉しく思います。