copilotとは
copilotはAIがコードを提案して生産性を上げてくれるツールで、最近プレビュー版での公開から一般公開に変わりました。
VSCodeやNeovim、JetBrains IDEsなどに対応していますが、Emacsでも利用できそうだったので、実際に導入してみました。
copilotに申込む
まずこちらを参考にcopilotに申し込みます。
初回60日は無料となります。
学生など一部の条件を満たせば無料で使用できますが、基本的には月額10ドルまたは年間100ドルとなります。
Emacsの設定
Emacsではcopilot.elを導入して、copilotを利用します。
準備
copilot.elではnode.jsが必要ですが、バージョンが12.xから17.xでないといけません。
私は18.1でしたので、nvmを使用して、17をダウンロードしました。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
nvm install 17
init.el
私はstraight.el
でパッケージ管理をしているので、init.elは下記のようになりました。
(straight-use-package
'(copilot :type git :host github :repo "zerolfx/copilot.el" :files ("dist" "*.el")))
;; 使用するnode.jsを指定
(setq copilot-node-executable "~/.nvm/versions/node/v17.9.1/bin/node")
;; プログラムモードの場合、copilot-modeを実行
(add-hook 'prog-mode-hook 'copilot-mode)
;; copilot用にキーバインドを設定
(defun my-tab ()
(interactive)
(or (copilot-accept-completion)
(company-indent-or-complete-common nil)))
(global-set-key (kbd "C-TAB") #'my-tab)
(global-set-key (kbd "C-<tab>") #'my-tab)
(with-eval-after-load 'company
(define-key company-active-map (kbd "C-TAB") #'my-tab)
(define-key company-active-map (kbd "C-<tab>") #'my-tab)
(define-key company-mode-map (kbd "C-TAB") #'my-tab)
(define-key company-mode-map (kbd "C-<tab>") #'my-tab))
インストール後、copilot-mode
を起動して、M-x copilot-login
を実行します。
ミニバッファー上に6桁のワンタイムパスワードが表示されるので、パスワードをメモしてEnterを押下します。
するとGithubのリンクに飛ぶので、先程のパスワードを入力し、githubのアカウントを認証します。
認証が完了するとcopilotが利用できるようになります。
実際に使ってみた
関数名から補完したり、コメントから補完したりするだけでなく、日本語も補完してくれます。
また、下の動画はjavascript
ですが、init.el
等のemacs lisp
でもいい感じに補完してくれました。
感想
無料期間があるとはいえ月10ドル…と思っていましたが、実際に使ってみるとこれはお金を払ってもいいかなと思えるくらいよくできていました。
法人向けプランがまだ出ていませんが、職場でも使えるようにしたい…