こんちには。よっしーです(^^)
今日は、「asdf」というバージョン管理ツールを紹介します。
みなさんは、プログラミング言語をインストールするときに複数バージョンをインストールして使用しないといけないといった状況になったことはないでしょうか。
例えば、Java 8で開発されたアプリケーションとJava 11で開発されたアプリケーションの開発運用をするとなった場合、それぞれのバージョンをインストールし、必要に応じて切り替える必要があります。
Javaのバージョンを切り替える方法の一つにJAHA_HOMEという環境変数を変更して対応することがあります。この方法だと必要に応じてバージョンに書き換えて、環境変数を反映して、バージョンが変わっていることを確認する、といった一連の作業をする必要があり、切り替える頻度が多くなるほど、手間に感じてしまい、開発体験が非常にわるくなります。
Javaの複数バージョン管理
この他にも、Javaの複数バージョン管理をするときには下記のような問題が起こりえます。
Javaバージョンの切り替えに失敗する
Javaの複数バージョンを管理する場合、環境変数を設定したり、PATHを設定したりする必要があります。しかし、これらの設定を間違えると、Javaバージョンを切り替えることができない場合があります。たとえば、複数のJavaバージョンをインストールしているにもかかわらず、常に同じバージョンが使用されているという問題が発生する可能性があります。
バージョンの競合が発生する
複数のJavaバージョンを管理する場合、複数のバージョンが同じ環境で共存することがあります。しかし、バージョンの競合が発生することがあり、それぞれのバージョンで必要なライブラリが正しく読み込まれない場合があります。この場合、プログラムの実行時にエラーが発生する可能性があります。
バージョンアップの管理が面倒
Javaのバージョンアップが頻繁に行われるため、複数のJavaバージョンを管理する場合、定期的にバージョンアップを行う必要があります。しかし、手動でバージョンアップを行う場合、手間がかかるだけでなく、うまくいかない可能性もあります。また、複数のJavaバージョンを管理することで、どのバージョンが必要なのかを把握することが困難になる場合があります。
asdfとは
そこで登場するのが、asdf というバージョン管理ツールです。このツールは、複数のプログラミング言語やツールのバージョン管理を行うためのツールで、以下のような場合に効果を発揮します。
複数の開発プロジェクトに参加している場合
複数の開発プロジェクトに参加している場合、それぞれのプロジェクトで使用する言語やツールのバージョンが異なることがあります。そのため、それぞれのプロジェクトで必要なバージョンを手動で切り替える必要があります。asdf ツールを使うことで、開発プロジェクトごとに異なるバージョンを簡単に切り替えることができます。
複数のバージョンを使い分ける必要がある場合
プログラミング言語やツールのバージョンがアップデートされると、新しい機能や改善点が追加されることがあります。しかし、それぞれのバージョンで互換性のない変更がある場合もあります。そのため、古いバージョンのまま開発を続ける必要がある場合があります。asdf ツールを使うことで、複数のバージョンを同時に管理することができます。
環境構築を簡略化したい場合
複数のプログラミング言語やツールを使用する場合、それぞれの環境を構築する必要があります。しかし、手動で行うと手間がかかります。asdf ツールを使うことで、一度インストールするだけで、必要な言語やツールのバージョンを簡単に管理することができます。
asdf の公式サイは下記になります。
asdfのインストール方法
ここでは、asdfのインストール方法をご紹介します。
自身の環境が、Macでbrewとzshを使用していますので、インストール方法はそれを前提に書いています。その他の方は、ご使用の環境に合わせて、下記のサイトを参考にインストール手順をご確認頂ければと思います。
asdf の動作に必要なツールをインストール
brew install coreutils curl git
asdf をダウンロード
brew install asdf
asdf のインストール
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
asdf の動作確認
asdf --version
asdfを使用したJavaのインストール方法
ここでは、asdf を利用してJavaをインストールする方法についてご紹介します。
asdf でプログラミング言語をインストールする場合、各プログラミング言語に対応したプラグインと呼ばれるものを追加して、各バージョンをインストールしていきます。
プラグインは、各プログラミング言語またはツールのバージョンをサポートするための、いくつかの実行可能スクリプトを備えたgitリポジトリに。
asdfで管理されていない言語やツールがあれば、このプラグインを作成して、管理対象にすることが可能になります。
プラグインの確認
それでは、自身が管理したいプラグインがあるか調べて見ましょう。今回はJavaなので、Javaで抽出しました。
asdf plugin-list-all | grep java
下記の結果が表示されると思います。
java https://github.com/halcyon/asdf-java.git
プラグインの追加
プラグインの存在が確認できたら、プラグインを追加します。
asdf plugin-add java
特定のバージョンをインストール
下記のコマンドでインストール可能なJavaのバージョンを確認します。
asdf list-all java
確認できたらインストールします。今回は、openjdk-19.0.2を指定していますが、ご自身の環境に合わせて修正してください。
asdf install java openjdk-19.0.2
このままだと、まだインストールしたjavaを使用できる状態になっていないので、下記のコマンドで使用できるようにします。
asdf local java openjdk-19.0.2
環境変数の設定を追加します。一度追加すれば大丈夫なので、すでに追加されている場合は、追加する必要はありません。
echo -e "\n. ~/.asdf/plugins/java/set-java-home.zsh" >> ${ZDOTDIR:-~}/.zshrc
環境変数を反映させます。
source ${ZDOTDIR:-~}/.zshrc
これで、インストールしたJavaが使用できるようになっていると思いますので、下記のコマンドでバージョンを確認します。
java -version
また現状だと、javaコマンドは、今いるディレクト配下でしか使用できないので、ディレクトリを移動すると javaコマンドがエラーになると思います。
なので、お使いのPCでどのディレクトリでもjavaコマンドを使用したいときは、下記のコマンドを実行します。
asdf global java openjdk-19.0.2
複数のバージョン管理
アプリケーションごとにバージョンを管理する場合は、下記のコマンドのように対象の各アプリケーションのディレクトリで asdf local java xxx
コマンドを実行します。
cd アプリケーションAのディレクトリ
asdf local java openjdk-19.0.2
cd アプリケーションBのディレクトリ
asdf local java openjdk-17.0.2
これで、各アプリケーションで違うバージョンを指定して、動作させることができます。
おわりに
いかがだったでしょうか。今回は、asdf を使用した複数バージョン管理についてご紹介しました。
asdf を使いだして、気軽に特定のバージョンをインストールできるようになったので、複数バージョンに悩まされていた方は使用してみることをおすすめします。
またあしたお会いしましょう(^^)
コメント