前回のブログにも書きましたが、最近はCodespacesをVSCodeで開いて開発をしています。
想像していた以上に違和感なく使えていて、例えばVSCodeのターミナル(Codespaces上)でcode /path/to/file
を実行すると、普通にCodespaces上にあるファイル/path/to/file
がそのままVSCodeで開けたりして、大変便利です。
…ただ、時折こういうエラーが出ることがありました:
Unable to connect to VS Code server: Error in request. Error: connect ENOENT /tmp/vscode-ipc-XXXX.sock at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1611:16) { errno: -2, code: 'ENOENT', syscall: 'connect', address: '/tmp/vscode-ipc-XXXX.sock' }
少なくともCodespacesのコンテナをrebuildすれば回復することを確認したのですが、たまに(週1くらい?)発生しており、都度rebuildするのは大変面倒でした。
あれこれ調べていた結果、$VSCODE_IPC_HOOK_CLI
環境変数で指定されたsockファイルが、/tmp
にある vscode-ipc-
がprefixなsockファイルのうち最新のものより古い場合、前述のエラーが発生している… ということに気づきました(いつもはCodespaces上でtmux+zshの環境を構築して使っていて、問題が発生したときにたまたまbashで実行してみたら前述のエラーが発生せず、違いを調べていたときに、$VSCODE_IPC_HOOK_CLI
が異なることに気づきました)。
ひとまず対症療法として、以下のコマンドで/tmp
以下にある最新のvscode-ipc-
がprefixなsockファイルを引いてきて、それを$VSCODE_IPC_HOOK_CLI
に設定することで問題を解決することができました。
export VSCODE_IPC_HOOK_CLI="/tmp/$(ls /tmp -t | grep 'vscode-ipc' | head -n 1)"
おそらく、$VSCODE_IPC_HOOK_CLI
を更新するような仕組みがあるはずなのですが、自分があれこれCodespacesをいじくりまわした結果、うまく動いていないのかもしれません。そのあたりの調査は時間があったときに委ねようと思います…。取り急ぎ、対症療法だけ忘備録がてら書き残しておきます。