Windowsでも使えるVersion Manager、vfoxをインストールする

# What's？

使用する言語などをインストールしたり、バージョンを切り替えられるツール（Version Manager）としては[asdf](https://asdf-vm.com/)が有名だとは思いますが、あいにくWindowsでは難があります。

~~個人的には別にWindowsで使えなくても困らないのですが~~ Windowsでも使えるツールはないかなと思って調べたところ、vfoxが使えそうだったので少し試してみました。

# vfox

vfoxはasdfなどと同様、様々なSDKをプラグインとしてインストールして、言語やバージョンを切り替えられるVersion Managerです。

https://vfox.lhan.me/

使用できるプラグインの一覧はこちら。

https://vfox.lhan.me/plugins/available.html

現時点でこれだけ対応しています。

- bun
- clang
- cmake
- crystal
- dart
- deno
- dotnet
- elixir
- erlang
- etcd
- flutter
- gcc-arm-none-eabi
- golang
- gradle
- groovy
- java
- julia
- kotlin
- kubectl
- make
- maven
- mongo
- ninja
- nodejs
- php
- protobuf
- python
- ruby
- scala
- terraform
- vlang
- zig

ちなみに、Windowsで使う場合はこちらのvmというツールを使ってもよさそうです。

https://vdocs.vmr.us.kg/

対応しているプラグインはvfoxよりもずっと多いのですが、自分が使う範囲ではvfoxで十分なのとwingetでインストールできることからvfoxを選びました。

# 環境

```powershell
PS > $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  5129

```

# vfoxをインストールする

vfoxのインストールはwingetでできます。

```powershell
PS > winget install vfox
```

[Quick Start / Installation / Windows](https://vfox.lhan.me/guides/quick-start.html#windows)

インストール後、PowerShellを起動すれば使えるようになっています。

また`$PROFILE`に以下を追加しておきます。

```powershell
Invoke-Expression "$(vfox activate pwsh)"
```

[FAQ / Switch xxx not work or the vfox use command does not work ?](https://vfox.lhan.me/guides/faq.html#switch-xxx-not-work-or-the-vfox-use-command-does-not-work)

現時点のバージョンはこちら。

```powershell
PS > vfox --version
vfox version 0.5.4
```

ヘルプ。

```powershell
PS > vfox --help
NAME:
   vfox - vfox is a tool for runtime version management.

USAGE:
   vfox [command] [command options]

VERSION:
   0.5.4

DESCRIPTION:
   vfox is a cross-platform version manager, extendable via plugins. It allows you to quickly install and switch between different environment you need via the command line.

COMMANDS:
   upgrade  upgrade vfox to the latest version
   config   Setup, view config
   cd       Launch a shell in the VFOX_HOME or SDK directory
   help, h  Shows a list of commands or help for one command
   Plugin:
     info       Show plugin info
     available  Show all available plugins
     update     Update specified plugin, use --all/-a to update all installed plugins
     remove     Remove a plugin
     add        Add a plugin or plugins
   SDK:
     install, i     Install a version of the target SDK
     current, c     Show current version of the target SDK
     use, u         Use a version of the target SDK
     list, ls       List all versions of the target SDK
     uninstall, un  Uninstall a version of the target SDK
     search         Search a version of the target SDK
     env

GLOBAL OPTIONS:
   --debug            show debug information (default: false)
   --help, -h         show help
   --version, -v, -V  print version (default: false)

COPYRIGHT:
   Copyright 2024 Han Li. All rights reserved.
```

# プロキシ設定

プロキシが必要な環境では、こちらを見て設定します。

```yaml:$HOME/.version-fox/config.yaml
proxy:
    url: "http://[your-proxy-host]:[your-proxy-port]"
    enable: true
```

[Configuration / Proxy Settings](https://vfox.lhan.me/guides/configuration.html#proxy-settings)

設定ファイル（`config.yaml`）自体は、vfoxをインストールすると作成されています。

# 使ってみる

## プラグインの一覧表示

使用できるプラグインの一覧。

```powershell
PS > vfox available
NAME                     OFFICIAL        HOMEPAGE                                                DESCRIPTION
bun                      NO              https://github.com/ahai-code/vfox-bun                   Bun plugin, https://bun.sh/
clang                    YES             https://github.com/version-fox/vfox-clang               Clang plugin, https://clang.llvm.org
cmake                    YES             https://github.com/version-fox/vfox-cmake               Cmake plugin, https://cmake.org/
crystal                  NO              https://github.com/yanecc/vfox-crystal                  Crystal plugin, supports version ≥ 0.24.2 and nightly builds, https://crystal-lang.org
dart                     YES             https://github.com/version-fox/vfox-dart                dart plugin, support for getting stable, dev, beta version
deno                     YES             https://github.com/version-fox/vfox-deno                Deno plugin, https://deno.com/
dotnet                   YES             https://github.com/version-fox/vfox-dotnet              dotnet plugin, support for dotnet sdks 6.0, 7.0, 8.0
elixir                   YES             https://github.com/version-fox/vfox-elixir              Elixir vfox plugin, support for managing multiple Elixir language versions in Windows & Uinx-like system.
erlang                   YES             https://github.com/version-fox/vfox-erlang              Erlang/OTP vfox plugin, support for managing multiple Erlang/OTP versions in Windows & Uinx-like system.
etcd                     YES             https://github.com/version-fox/vfox-etcd                etcd vfox plugin. Use the vfox to manage multiple etcd server & etcdctl & etcductl versions in Linux/Darwin/Windows. Also can be used to install an etcd with failpoint.
flutter                  YES             https://github.com/version-fox/vfox-flutter             Flutter plugin, https://flutter.dev
gcc-arm-none-eabi        NO              https://github.com/leoli0605/vfox-gcc-arm-none-eabi     Arm GNU Toolchain bare-metal target (arm-none-eabi) plugin for the vfox version manager
golang                   YES             https://github.com/version-fox/vfox-golang              Golang plugin, https://go.dev/dl/
gradle                   YES             https://github.com/version-fox/vfox-gradle              Gradle runtime environment.
groovy                   YES             https://github.com/version-fox/vfox-groovy              Groovy plugin, https://groovy.apache.org/
java                     YES             https://github.com/version-fox/vfox-java                Support for multiple JDK distributions, such as: Oracle, Graalvm, Eclipse & more.
julia                    NO              https://github.com/ahai-code/vfox-julia                 Julia plugin, https://julialang.org/
kotlin                   YES             https://github.com/version-fox/vfox-kotlin              Kotlin plugin
kubectl                  NO              https://github.com/ahai-code/vfox-kubectl               Kubectl plugin
make                     NO              https://github.com/leoli0605/vfox-make                  GNU Make plugin for the vfox version manager
maven                    YES             https://github.com/version-fox/vfox-maven               Maven runtime environment.
mongo                    NO              https://github.com/yeshan333/vfox-mongo                 mongo vfox plugin, support for managing multiple mongo versions.
ninja                    NO              https://github.com/leoli0605/vfox-ninja                 Ninja plugin for the vfox version manager
nodejs                   YES             https://github.com/version-fox/vfox-nodejs              Node.js runtime environment.
php                      YES             https://github.com/version-fox/vfox-php                 php plugin
protobuf                 NO              https://github.com/ahai-code/vfox-protobuf              Protobuf plugin, https://github.com/protocolbuffers/protobuf#protobuf-compiler-installation
python                   YES             https://github.com/version-fox/vfox-python              Python language support, https://www.python.org
ruby                     NO              https://github.com/yanecc/vfox-ruby                     Ruby plugin, https://www.ruby-lang.org
scala                    YES             https://github.com/version-fox/vfox-scala               Scala plugin, https://www.scala-lang.org/
terraform                NO              https://github.com/enochchau/vfox-terraform             Terraform plugin, https://www.terraform.io/
vlang                    NO              https://github.com/ahai-code/vfox-vlang                 Vlang plugin
zig                      YES             https://github.com/version-fox/vfox-zig                 Zig runtime environment.

Please use vfox add <plugin name> to install plugins
```

[Plugins / Available](https://vfox.lhan.me/usage/plugins-commands.html#available)

## プラグインのインストール

JavaとApache Mavenのプラグインをインストールしてみます。

```powershell
PS > vfox add java maven
```

[Plugins / Add](https://vfox.lhan.me/usage/plugins-commands.html#add)

各プラグインのリポジトリはこちらです。

https://github.com/version-fox/vfox-java

https://github.com/version-fox/vfox-maven

各プラグイン自体の説明は、それぞれのGitHubリポジトリーの内容を見ることになるでしょう。

# SDKをインストールしてみる

[Core / Install](https://vfox.lhan.me/usage/core-commands.html#install)

## OpenJDK（Eclipse Temurin）をインストールしてみる

Javaの場合、複数のOpenJDKディストリビューションがあるのでその中から選ぶことになります。

Javaのインストール可能なディストリビューションを表示。

```powershell
PS > vfox search java all
```

こんな感じで表示結果からインストールしたい対象を選べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309669/260647d1-9982-fece-89fa-8a50d2e6488c.png)

ディストリビューションをEclipse Temurinに絞る場合。

```powershell
PS > vfox search java tem
```

明示的なインストール。

```powershell
PS > vfox install java@v21.0.5+11-tem
```

## Apache Mavenをインストールしてみる

Apache Mavenをインストール。

```powershell
PS > vfox install maven@3.9.9
```

## インストールされているSDKを確認する

インストールすると`vfox list`で表示されるようになります。

```powershell
PS > vfox list
All installed sdk versions
├─┬java
│ └──v21.0.5+11-tem
└─┬maven
  └──v3.9.9
```

# SDKを使う

インストールしただけではSDKは使えません。`use`での指定が必要です。

`use`には3種類のスコープがあります。

```powershell
PS > vfox use --help
NAME:
   vfox use - Use a version of the target SDK

USAGE:
   vfox use [command options] [arguments...]

CATEGORY:
   SDK

OPTIONS:
   --global, -g   Used with the global environment (default: false)
   --project, -p  Used with the current directory (default: false)
   --session, -s  Used with the current shell session (default: false)
   --help, -h     show help
```

[Core / Use](https://vfox.lhan.me/usage/core-commands.html#use)

グローバル（`--global, -g`）、カレントディレクトリ（`--project, -p`）、現在のセッション（`--session, -s`）の3種類です。

試してみます。

```powershell
PS > vfox use java@21.0.5+11-tem
```

デフォルトだと現在のセッションが対象になるようです。

```powershell
PS > java --version
openjdk 21.0.5 2024-10-15 LTS
OpenJDK Runtime Environment Temurin-21.0.5+11 (build 21.0.5+11-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.5+11 (build 21.0.5+11-LTS, mixed mode, sharing)
```

グローバルに設定。

```powershell
PS > vfox use -g java@21.0.5+11-tem
```

もうひとつEclipse Temurinをインストール。

```powershell
PS > vfox install java@17.0.13+11-tem
```

現在のセッションで設定。

```powershell
PS > vfox use -s java@17.0.13+11-tem
```

`list`で確認。

```powershell
PS > vfox list
All installed sdk versions
├─┬java
│ ├──v21.0.5+11-tem
│ └──v17.0.13+11-tem
└─┬maven
  └──v3.9.9

```

# SDKをアンインストールする

SDKをアンインストールするには`uninstall`コマンドを実行します。

```powershell
PS > vfox uninstall java@17.0.13+11-tem
PS > vfox list
All installed sdk versions
├─┬java
│ └──v21.0.5+11-tem
└─┬maven
  └──v3.9.9

```

[Core / Uninstall](https://vfox.lhan.me/usage/core-commands.html#uninstall)

# アップデート

vfox自体のアップデートは、`upgrade`コマンドです。

```powershell
PS > vfox upgrade
```

[Core / Upgrade](https://vfox.lhan.me/usage/core-commands.html#upgrade)

プラグインのアップデートは、`update [プラグイン名]`か`update --all`（すべてのプラグイン）です。

```powershell
PS > vfox update java
PS > vfox update --all
```

[Plugin / Update](https://vfox.lhan.me/usage/plugins-commands.html#update)

こんなところでしょうか。

WindowsでもVersion Managerを使ってみましょう、ということで。