👨‍✈️

[Emacs] GitHub Copilotを使ってみる (leaf.el)

2023/04/21に公開

GitHub Copilot、「コパイロット」って読むんですね。
「コピロット」って読んでました。ごめんなさい。

VSCodeなどでは簡単に使えるようですが
私はEmacsからVSCodeに乗り換える気は今の所無いので
Emacsで使ってみたいと思います。

環境

  • OS: macOS 13.2.1
  • Emacs: 28.2
  • Node.js: v16.13.0

GitHub Copilotに申し込む

GitHub Copilot · Your AI pair programmer
https://docs.github.com/ja/copilot

申し込みましょう。
※仕事で使う場合は for Business を使う方がいいでしょう、多分。

Install

https://github.com/zerolfx/copilot.el
↑今回はこちらを使わせていただきます。
※Node.jsが必要です。

公式READMEにuse-packageを使う例がありますが、leaf.elを使ってやってみたいと思います。

init.el
(leaf copilot
  :el-get (copilot
           :type github
           :pkgname "zerolfx/copilot.el"
           )
  :config
  (leaf editorconfig
    :ensure t
    )
  (leaf s
    :ensure t
    )
  (leaf dash
    :ensure t
    )
  (defun my/copilot-tab ()
    (interactive)
    (or (copilot-accept-completion)
        (indent-for-tab-command)))

  (with-eval-after-load 'copilot
    (define-key copilot-mode-map (kbd "<tab>") #'my/copilot-tab))
  )

以上です。

認証

  • M-x copilot-mode で copilotモードにします
  • M-x copilot-login でログインします
    • この時ミニバッファにコードが表示されるのでそれをコピーしておきます
      • 多分自動的にコピーされてクリップボードに入っているはず

  • Enter を押して起動したブラウザの画面に貼り付け

  • Emacs側で Enter を押して、Authenticated as GitHub user xxxx と表示されて終了

使ってみる

Ruby編

RSpec書いてみる

spec/hoge_spec.rb を作って開いてみます

ファイル名から推測して describe Hoge do を補完してくれてます。
便利。

テストを自動生成してもらってみます。

コメントも補完してくれるし、コメント書いたらテストを補完してくれてます。
若干意図からはずれた補完をすることもありますけど、これは思ったより便利そう。

テストしたいコードを書いてみる

テストが書けたので、実際のコードも書いてみます

class名の補完はファイル名から推測してくれたんですかね。
しかし驚いたのは def na って打ち込んだら

def name
  "hoge"
end

って、書いたテストを記憶しているように補完してくれた。
ファイルが別れていても、その前の結果を文脈として保持してくれるのは良いな。

Rust編

簡単なテストを関数を書いてみる

※Zennのファイルサイズ制限にひっかかってしまう為、サイズを小さくしたので見にくいですが、、、

コメントでテストしたいことを書いて
テストコードと実際のコードの自動生成までできました。

少し複雑なテストと関数を書いてみる

最短経路を計算するようなコードを生成してみました。
さすがにuse系までは入れてくれませんでした。
useを入れてもこのままではコンパイルが通らないコードではあったんですが
ゼロから考えるよりは効率上がりそうな雰囲気を感じました。

まとめ

  • VSCodeを使ってないので、VSCodeから使う時の使い勝手の違いはわかりません
    • 印象としてはEmacsでも結構使えそうだと感じました
  • プログラミング以外でも使えそうなので、いろいろ使ってみようと思います
    • Terraformでも使ってみたい
      • 調べるのが結構面倒なので

Discussion