Visual Studio Code(以下vscode)をターミナル上から起動するためのcodeコマンドを使えるようにします。
※以下はズルいので無しです:
alias code='open -a "Visual Studio Code"'
Windowsだとvscodeをインストールするだけで、codeコマンドにも自動でパスが通るようです。
なので、以下はmacOS(特にMonterey)の人向け内容です。
環境
% sw_vers ProductName: macOS ProductVersion: 12.4 # Monterey BuildVersion: 21F79 % code -v 1.62.3 ccbaa2d27e38e5afa3e5c21c1c7bef4657064247 x64 % date 2022年 7月 4日 月曜日 06時44分03秒 JST
手順
まず、vscodeは事前にインストールしておいてください。
標準でcodeコマンドが使えないか確認(最新バージョンならできるかも):
% code ## -> 成功すればvscodeアプリが起動する
ダメだったら、コマンドが見つからないとエラーが出る:
% code zsh: command not found: code
vscodeを起動して、cmd + shift + Pで表示される窓にshellと入力します。

表示されるサジェストから、codeコマンドをインストールします。

ターミナルを起動して、codeコマンドが使えればOK。
% code ## -> vscodeアプリが起動するハズ?
成功した人は以上、成功しなかった人は以下に続く。
pythonコマンドのパスが通ってない
私の環境では以下のようなエラーが出ました:
% code /usr/local/bin/code: line 6: python: command not found /usr/local/bin/code: line 10: ./MacOS/Electron: No such file or directory
pythonコマンドが見つからないということですが、macでは標準でpython 2系がインストールされていたような?
と思いましたが、Montereyではpythonが削除されたようです。
なので、pythonをインストールしていない人はインストールします。
※覚えてない人はwhereコマンドで探してみて下さい:
where python python2 python3
homebrewでインストールするなら:
brew install python@3.9
多分、/usr/local/Cellar/python@3.9/以下に、pipとかも含めてインストールされます。
また、おそらく、シンボリックリンク/usr/local/bin/python3が作られるはずです。
% where python3 /usr/local/bin/python3 <- たぶんこれ /usr/bin/python3 <- こっちはXcodeでインスコされたやつ
リンク先はls -go(ls -l)で確認できる:
% ls -go /usr/local/bin/python3 lrwxr-xr-x 1 38 9 13 2021 /usr/local/bin/python3@ -> ../Cellar/python@3.9/3.9.7/bin/python3
以上でpythonのインストールは確認できたが、まだやることがある。
今、python3コマンドで、インストールしたpythonを実行できる環境にあるが、codeコマンド実行に失敗したときを思い出すと、以下のようなエラーであった:
python: command not found
つまり、code内で呼んでいるのは「python」コマンド。
なので、pythonコマンドでもインストールしたpythonが呼ばれるように、シンボリックリンクを作成する:
## ln -s リンク先 リンク元 ln -s ../Cellar/python@3.9/3.9.7/bin/python3 /usr/local/bin/python
第1引数で指定してるpythonの実行ファイル(あるいはシンボリックリンク)は、各自の環境に合わせて修正して下さい。
第2引数の方は、シンボリックリンクのファイルですが、ファイル名は必ずpythonとし、配置する場所はパスが通っているところであればどこでも良いです。
以上で、任意ディレクトリからpythonコマンドが利用できるので、codeコマンドも実行できるようになっているはずです。
% code ## -> 今度こそvscodeアプリが起動するハズ
codeコマンドの中身
vscodeのコマンドパレットからcodeコマンドをインストールすると、/usr/local/bin/codeに/Applications/Visual Studio Code.app/Contents/Resources/app/bin/codeのシンボリックリンクが作られるようです。
% ls -go /usr/local/bin/code lrwxr-xr-x 1 68 7 2 15:40 /usr/local/bin/code@ -> /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code
そして、codeの実体はただのシェルスクリプトです。
中身は以下で全てです:
#!/usr/bin/env bash # # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. function realpath() { python -c "import os,sys; print(os.path.realpath(sys.argv[1]))" "$0"; } CONTENTS="$(dirname "$(dirname "$(dirname "$(dirname "$(realpath "$0")")")")")" ELECTRON="$CONTENTS/MacOS/Electron" CLI="$CONTENTS/Resources/app/out/cli.js" ELECTRON_RUN_AS_NODE=1 "$ELECTRON" "$CLI" --ms-enable-electron-run-as-node "$@" exit $?
確かに、エラーメッセージ通り6行目でpythonコマンドを実行しています。
これが見つからなくてエラーが出ていました。
シンボリックリンクを作成する代わりに、codeファイル自体を弄っても対応できますが、まあ前者にしておきましょう。
試行錯誤:エイリアスじゃダメ
そもそも、私の環境ではpythonコマンドが使えました!
というのも、pythonという名前でエイリアスを作成していたんですよね:
alias python='/usr/local/bin/python3'
でも、これはzsh用の設定ファイル~/.zshrcにしか書いていませんでした。
codeで呼ばれるシェル(shebang)はbashなので、bash用の設定ファイル.bash_profileにもエイリアスを追加してみましたが、それでもダメでした。
結局、よくわからないのですが、エイリアスじゃダメっぽいです。
実際、codeのファイル内に直接aliasコマンドを書いてみましたが、それでもcommand not foundでした。
というわけで、このあたりの仕様がエイリアスとシンボリックリンクの使い分け方になるのかなと思います。
余談:macとpython
昔はmacOSに標準でpython 2系がインストールされていて、pythonコマンドが使えたはずです。
どうやらMontereyのバージョンからランタイムpythonが削除されたようです。
なので、これからは自分でインストールする必要があるようです。
おわりに
長くなりましたが以上です。
何でこんなに長いんでしょう。