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が削除されたようです。
なので、これからは自分でインストールする必要があるようです。
おわりに
長くなりましたが以上です。
何でこんなに長いんでしょう。