開発者がよく作業上で使っている言語のツールチェインを変えたりはします。
最新版のプロジェクトなら、ほとんどの場合はツールチェインの最新版で実装されるだろう。
けれど、X年前からずっとサポートしないといけないプロジェクトもあります。
結局プロジェクトそれぞれ別のツールチェインに依存するのが珍しくありません。
おそれるな!バージョン管理ツールのお出ましだ!
幸いに、もうほとんどの言語のツールチェインがバージョン管理ツールをサポートしています。
はい、問題解決。
記事終わりです。皆さんありがとうございました。
と言いたいが、言語ごとバージョン管理ツールを使わなければなりません。
Pythonなら、pyenvです。NodeJSなら、nvmがメインです。などなど。
大きなシステムの開発者は大体言語一つでコードをすべて書くというわけではありません。
レガシーアプリケーションを考えるだけで難しいし、言語はそれぞれ、得意点、不得意点があります。フロントエンドコードなら、Javascript・Typescriptから逃げられません。
Webの一般的なバックエンドなら、PHP・Python・Rubyなどを使ってもおかしくないです。
パフォーマンスが必要なWebアプリケーションなら、Goも考えられます。
最速が必要な特殊な機能なら、C系又はRustが良いかもしれません。
結果として、各言語のバージョン管理ツールが必要になってしまいます。
NodeJS が好きな開発者の声を聞こえます。
はい、Nodeで全部かけるかもしれません。ただそれが一番いいですか?「出来る」からと言って、「良い」に限りません。(個人的な意見ですが・・・)
各ツールに特殊なコマンドと使い方を覚えないといけません。
正直、頭は別のことで使いたいです・・・
では、どうすればいいですか?
asdf と言うツールを紹介しましょう。プロジェクトホームはこちらです。
asdf はまず意外と覚えやすくて、打ちやすいコマンドです。
asdf を使って、言語ツールチェインに限らず、様々なツールやソフトのバージョン管理ができます。
一つのツールですべてを管理するのが絶好です。
ツール毎にプラグインがあります。そのプラグインをインストールすれば、簡単にバージョン管理ができます。
asdf のインストール
必要なツール(前提条件): curl
と git
(Macの場合は Homebrew )
Mac & bash
brew install asdf
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ~/.bash_profile
echo -e "\\n. $(brew --prefix asdf)/etc/bash_completion.d/asdf.bash" >> ~/.bash_profile
Mac & zsh
brew install asdf
echo -e "\\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
Linux / WSL2 & bash
git clone <https://github.com/asdf-vm/asdf.git> ~/.asdf --branch v0.10.2
echo -e "\\n. $HOME/.asdf/asdf.sh" >> ~/.bashrc
echo -e "\\n. $HOME/.asdf/completions/asdf.bash" >> ~/.bashrc
Linux / WSL2 & zsh
git clone <https://github.com/asdf-vm/asdf.git> ~/.asdf --branch v0.10.2
echo '. $HOME/.asdf/asdf.sh' >> ~/.zshrc
echo 'fpath=(${ASDF_DIR}/completions $fpath)' >> ~/.zshrc
echo 'autoload -Uz compinit && compinit' >> ~/.zshrc
ツールのプラグインをインストールする
どんなプラグインはデフォルトに入っているのかを分かるために、下記のコマンドを実行できます。
asdf plugin-list-all
仮にみんなの大好きな nodejs をインストールしたい場合は
asdf plugin add nodejs
plugin-list-all
に含まれていないプラグインなら、追加パラメータのGitURLをプラグインの後に追加してください。
asdf plugin add hoge-matsuri <https://github.com/hogehoge/hoge-matsuri.git>
そして、NodeJS をインストールします。
# 特定のNodeJSをインストールする
asdf install nodejs <バージョン>
インストール出来るバージョンは
# インストール出来るNodeJSバージョンを取得
asdf list-all nodejs
で取得できます。
インストールした後、正式インストールできたかどうか
# インストール済みのNodeJSバージョンを取得
asdf list nodejs
これでインストールできたがまだ使用されていません!
バージョンアクテイブ化する
やり方は複数があります。目的によって、適切な方法を選択してください。
-
現在のシェルだけに使う
asdf shell nodejs <バージョン>
戻すために、シェルを閉じる、又は前のバージョンに戻すがいいです。
-
現在のフォルダの配下に使う
asdf local nodejs <バージョン>
これを実行すると
.tool-versions
ファイルが作成されます。このフォルダに入ると自動的に設定したバージョンが有効になります。
注意:
asdf shell
が.tool-versions
のより優先されます。こちらはおすすめのやり方です。
-
システム全体のデフォルトとして使う
asdf global nodejs <バージョン>
全体的にバージョンを設定します(ログイン中のユーザーのみ)。
追記①:特別な system
バージョンがあります。使用中のバージョンを system
にするとシステムにインストールされているバージョンになります。
追記②:例は nodejs で書いたが、他にサポートされているツールは色々あります。
terraform
みたいなツールもありますしsqlite
やpostgresql
のようなDBも- 他のCLIツールもサポートされています:
ripgrep
、peco
、neovim
などなど
注意点
-
ツールチェインがバイナリーをインストールするとパスに入れられるためにたまに
asdf reshim <プラグイン>
を実行する必要があります。
ツールのバージョン管理地獄から脱出できて何という幸せ!
株式会社フォトラクションでは一緒に働く仲間を募集しています