asdf + VsCodeの起動設定
弊社ではasdfを使ってプロジェクト毎にバージョンの切り替えをしてます。
asdfを使ったVsCodeのlunch.jsonの設定メモです。
OS: Ubuntu
Java (Spring Boot)
追加した拡張機能
- vscjava.vscode-gradle
- vscjava.vscode-java-pack
- vmware.vscode-spring-boot
.tool-versions
gradle 7.6
java openjdk-17.0.2
.vscode/setting.json
{
"java.jdt.ls.java.home": "/home/username/.asdf/installs/java/openjdk-17.0.2",
"java.import.gradle.home": "/home/username/.asdf/installs/gradle/7.6",
}
注意点としては、フルパスでないと実行されません。
~/
とか、${env:JAVA_HOME}
とかしてみてもだめ、そのまま実行パスとして処理されるみたいです。
asdfでの実行パスがわからない場合は、
echo $(asdf where java)
echo $(asdf where gradle)
で確認できます。
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Spring Boot Application",
"request": "launch",
"cwd": "${workspaceFolder}",
"mainClass": "path.to.Application",
"projectName": "application name",
"args": "",
"vmArgs": "-Dspring.profiles.active=profile_name",
"envFile": "${workspaceFolder}/.env",
"console": "internalConsole"
}
]
}
consoleの箇所をinternalConsoleに変更したのはターミナルが起動してzellijが起動して出力が大変な感じなってしまったので、同様に問題がある人はconsoleを変えてみるといいと思います。
Python
Ctrl + Shift + p
のコマンドパレットを開いてPythonインタープリターを選択するだけです。
.venv
をプロジェクトルートに作成している場合は★でサジェストされます。
pythonのパッケージ管理はpoetryを使っていますが、poetryとasdfのバージョン間で上手く仮想環境が作成されない場合は、下記で上手く行きます
python -m .venv venv
poetry install
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "django",
"type": "python",
"request": "launch",
"program": "manage.py",
"console": "internalConsole",
"args": [
"runserver"
]
},
]
}
Node (npm)
npm run xxx
でローカルサーバーを起動する場合です。
.tool-versions
nodejs 16.17.0
.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Remix",
"type": "node",
"request": "launch",
"cwd": "${workspaceFolder}",
"runtimeExecutable": "/home/username/.asdf/installs/nodejs/16.17.0/bin/npm",
"runtimeArgs": ["run", "dev"],
"console": "internalConsole",
}
]
}
ポイントはruntimeExecutable
でフルパスでnpmを指定することですが、
nodeのバージョンが異なると怒られました。
VsCodeは/usr/bin/env node
で、グローバルなnodeを探そうとしますが、/usr/bin/node
は既に別のバージョンがインストールされていました。
そこでバイナリをリネームしてみます。
sudo mv /usr/bin/node /usr/bin/node-10
その後実行すると、
/usr/bin/env: `node': そのようなファイルやディレクトリはありません
と表示されます。
そこで、which node
でパスを確認し、
sudo ln -s /home/username/.asdf/shims/node /usr/bin/node
と、シンボリックリンクを貼ることで解決しました。
Discussion