イマドキ は Visual Studio Code で GitHub Copilot を動かすのだそうです。(本当?)Vim に引き篭もるばかりでは健康にも悪そうです。
というわけでちょっと外の空気でも・・むむ、大きな壁が。導入の段階において Windows や macOS であればスムーズに構築できるのですが、悲しいかな NixOS だとそうもいきません。
NixOS 以外のユーザから見たら「なんでこんなに長いのw」と笑っていただけるような内容になったかもしれません。(基本的に私に向けた記録です。)
さて本当かどうか、さっそく Visual Studio Code(以下OSS版)を入れてみましょう。
いきなり面を食らったかと思います。NixOS には「Unfreeなパッケージは事前の許可が必要」という仕組みが存在するためです。
とりあえず「NIXPKGS_ALLOW_UNFREE
」を利用してみます。shell.nix
を用意しておけば以下で成立すると思います。(shellHook
にcode
を入れておくと起動の手間を省けます。)
code
で起動できたと思います。さてここでユーザ空間に正式に導入するか考えてみます。
ユーザ空間に導入するメリットを列挙してみます。
- nix-shell を起動する必要が無い。
- 事前に「
NIXPKGS_ALLOW_UNFREE
」を考慮しなくて良い。 Extensions
をNix側で管理できる。(有効なパッケージが存在する場合に限る。)
書いた手前、最後はあまりオススメできません。理由は以下の通りです。
- 欲しい
Extension
のパッケージが存在しない場合がある。 - 機能の一部が正常に動作しない場合がある。(
github.copilot.suggest.terminal.command
など。)
また Visual Studio Code 内のExtensions
から管理する場合は素直にvscode
(パッケージ)を利用した方が良いです。(同期は「Settings Sync
」に任せるのが手かもしれません。)私の環境では以下の結果になりました。
vscode
:Extension
をインストールでき、正常に動作する。vscode-with-Extensions
:Extension
をインストールできない。vscodium
:Extension
をインストールできるが、機能の一部が正常に動作しない。(またログイン状態を維持できないかも。)
まあ折角なのでユーザ空間に導入しましょう。最初のエラーを回避するには、flake.nix
などに以下の宣言を加えます。
Unfreeなパッケージがvscode
だけの場合、ここは口惜しいポイント(デメリット)かと思います。しかしトレードオフだと考えるしかなさそうです。
この残念な気持ちを少し緩和するために「Unfreeという目印」が欲しいところです。方法はいくつか考えられます。
私の場合はvscode
を宣言しているディレクトリの名称をunfree-vscode
としました。unfree
を先頭にしたのはソートを考慮してのことです。
vscode-extensions.github.copilot
を宣言すればExtensions
に追加されますが、先の理由から実施しません。Visual Studio Code を開いて「Sign in to GitHub
」を押下します。
ウェブブラウザに遷移して GitHub の認証画面が表示されれば問題ありません。が、何の反応も無い(ウェブブラウザに遷移しない)パターンもあると思います。
この問題は環境によって様々なため、可能性が高そうな解決策をご紹介します。デスクトップ環境に Freedesktop.org が絡んでいる場合「xdg
」が関係している可能性が高いです。
というのも Visual Studio Code は Freedesktop.org による XDG Base Directory に沿っているようです。したがって xdg-utils によって解決されるという道理です。
xdg-utils
を導入し「デフォルトのブラウザ」を表示してみます。
正しく表示されない場合、ウェブブラウザから設定しますが、コマンドも用意されています。
「なぜ Firefox(firefox.desktop
)を例に出さないのか」と思われたかもしれません。どうやら Visual Studio Code は Chromium の OS Crypt(モジュール)を使っているからだそうです。
これで「Sign in to GitHub
」からウェブブラウザ(GitHub の認証画面)に遷移できるようになったかと思います。
GitHub へログイン後、Visual Studio Code に戻るとエラーが出るかもしれません。
キーリング(例: GNOME Keyring)が機能していないからのようです。以下がヒントになると思います。
- Linux: An OS keyring couldn’t be identified for storing the encryption related data in your current desktop environment #187338
- Settings Sync#Troubleshooting keychain issues
- Settings Sync#(recommended) Configure the keyring to use with VS Code
キーリング周りをスタートラインから詳解すると大変なことになりますので簡単(詳細な設定内容は省略)に。ミニマルな例として pass(password-store
)および libsecret(pass-secret-service
)を有効にし、~/.vscode/argv.json
(VSCodium の場合は~/.vscode-oss/argv.json
)に"password-store": "gnome"
(code --password-store="gnome"
の永続化)を加えると良さそうです。argv.json
への適用は以下が参考になると思います。
「Use weaker encryption
」で先に進むことはできますが「キーリングが使えていない状態」ということに留意しておく必要があります。
GitHub Copilot のアクセス権が無い場合はエラーが出ます。
これは「Signup for GitHub Copilot
」から画面(ウェブブラウザ)の案内に従えば GitHub Copilot のアクセス権を取得できると思います。それでも失敗する場合は再ログインで解消するかもしれません。
お疲れ様でした。これでようやく「イマドキ」に到達ですね。
ちょっと試すだけのつもりが、なんだか長旅になってしまいました。しばらく動かしてみて、フリートライアル終了後の対応を考えたいと思います。
ということで、よっこらしょっと。