😊

asdf + VsCodeの起動設定

2023/02/26に公開

弊社では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