量産メモ帳

忘れっぽいのでメモを残しています。浅く適当に書きます。

WSLのUbuntu環境にasdfを導入

スポンサーリンク

初めに

複数の言語やツールのバージョンを一元管理できるバージョンマネージャー「asdf」をWSLのUbuntu環境に導入しました。

本記事はWSLのUbuntu環境の構築とHomeBrewのインストールが前提となっています。 rms-099.hatenablog.jp rms-099.hatenablog.jp


asdfとは

asdfはGolang・Java・Node.js・Pythonなど様々な言語やツールのバージョンをプラグイン形式で一元管理できるバージョンマネージャーです。

バージョンマネージャーは次のように各言語ごとに用意されていますが、個々にインストールするのは勿論のこと各々の環境変数をrcファイルに定義したり各マネージャーごとにサブコマンドが異なったりするので、その点においてasdfは便利です。

  • Golang ⇒ g, goenv
  • Java ⇒ javm, jenv
  • Node.js ⇒ n, nodebrew, nodenv, nvm
  • Python ⇒ pyenv

実はv0.16.0で大規模な刷新が行われ、それまでのBashスクリプトの集合体からGo言語でコンパイルされた単一バイナリへと生まれ変わったようです。


インストール

HomebrewからインストールするのがWSL環境では最も簡単です。

brew install asdf

asdfを最新化する場合は次のコマンドで実行できますが、上記のv0.16.0のように使用方法が変わってしまうバージョンアップもあるので注意が必要です。

brew update asdf

~/.zshrcへの設定

旧バージョン(v0.15.0以前)ではBashスクリプトをsourceする以下の記述が必要でした。

# 旧バージョンの書き方(v0.15.0以前)
. "$(brew --prefix asdf)/libexec/asdf.sh"

v0.16.0以降はasdf本体がシェルスクリプトからバイナリに変わったため、上記の書き方は使えません。代わりにshimsディレクトリをPATHに追加する形式になりました。

# 新バージョンの書き方(v0.16.0以降)
export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"

追記後、設定を反映させます。

source ~/.zshrc

基本的な使い方

プラグインの追加

次のコマンドでGo言語のプラグインをインストールできます。

asdf plugin add golang

インストール可能なバージョンの一覧表示

asdf list all golang

指定バージョンのインストール

asdf install golang 1.24.0

バージョンの設定

旧バージョンでは globallocal といったサブコマンドを使っていましたが、v0.16.0以降は set に統一されたようです。

# 旧バージョンの書き方(v0.15.0以前)
asdf global golang 1.24.0
asdf local golang 1.24.0

# 新バージョンの書き方(v0.16.0以降)
asdf set golang 1.24.0          # カレントディレクトリの.tool-versionsに書き込む
asdf set -u golang 1.24.0       # グローバル設定(~/.tool-versionsに書き込む)

現在のバージョン確認

asdf current

WSL外からGoのビルドを実行する

WSL2ではPowerShellやコマンドプロンプトからwslコマンドを介してWSL内のコマンドを直接呼び出せます。

wsl go build ./...

Goプロジェクトのルートディレクトリでこのコマンドを実行すると、WSL内にインストールされたGoでビルドが行われます。

Windows側のパスをWSL内に渡す場合はwslpathコマンドでパスを変換できます。

wsl go build $(wsl wslpath -u 'C:\Users\username\project')

複数のディストリビューションをインストールしている場合は-dオプションで対象を指定できます。

wsl -d Ubuntu go build ./...