Photoruction工事中!

Photoructionの開発ブログです!

「一つのツールは、すべてを統べ」

開発者がよく作業上で使っている言語のツールチェインを変えたりはします。

最新版のプロジェクトなら、ほとんどの場合はツールチェインの最新版で実装されるだろう。

けれど、X年前からずっとサポートしないといけないプロジェクトもあります。

結局プロジェクトそれぞれ別のツールチェインに依存するのが珍しくありません。

おそれるな!バージョン管理ツールのお出ましだ!

幸いに、もうほとんどの言語のツールチェインがバージョン管理ツールをサポートしています。

はい、問題解決。

記事終わりです。皆さんありがとうございました。

と言いたいが、言語ごとバージョン管理ツールを使わなければなりません。

Pythonなら、pyenvです。NodeJSなら、nvmがメインです。などなど。

大きなシステムの開発者は大体言語一つでコードをすべて書くというわけではありません。

 

レガシーアプリケーションを考えるだけで難しいし、言語はそれぞれ、得意点、不得意点があります。フロントエンドコードなら、Javascript・Typescriptから逃げられません。

Webの一般的なバックエンドなら、PHPPythonRubyなどを使ってもおかしくないです。

 

パフォーマンスが必要なWebアプリケーションなら、Goも考えられます。

最速が必要な特殊な機能なら、C系又はRustが良いかもしれません。

結果として、各言語のバージョン管理ツールが必要になってしまいます。

NodeJS が好きな開発者の声を聞こえます。

 

はい、Nodeで全部かけるかもしれません。ただそれが一番いいですか?「出来る」からと言って、「良い」に限りません。(個人的な意見ですが・・・)



各ツールに特殊なコマンドと使い方を覚えないといけません。

正直、頭は別のことで使いたいです・・・

では、どうすればいいですか?

asdf と言うツールを紹介しましょう。プロジェクトホームはこちらです。

asdf はまず意外と覚えやすくて、打ちやすいコマンドです。

asdf を使って、言語ツールチェインに限らず、様々なツールやソフトのバージョン管理ができます。

一つのツールですべてを管理するのが絶好です。

ツール毎にプラグインがあります。そのプラグインをインストールすれば、簡単にバージョン管理ができます。

asdf のインストール

必要なツール(前提条件): curlgitMacの場合は 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

これでインストールできたがまだ使用されていません!

バージョンアクテイブ化する

やり方は複数があります。目的によって、適切な方法を選択してください。

  1. 現在のシェルだけに使う

    asdf shell nodejs <バージョン>
    



    戻すために、シェルを閉じる、又は前のバージョンに戻すがいいです。

  2. 現在のフォルダの配下に使う

    asdf local nodejs <バージョン>
    

    これを実行すると .tool-versions ファイルが作成されます。

    このフォルダに入ると自動的に設定したバージョンが有効になります。



    注意: asdf shell.tool-versions のより優先されます。

    こちらはおすすめのやり方です。

  3. システム全体のデフォルトとして使う

    asdf global nodejs <バージョン>
    

    全体的にバージョンを設定します(ログイン中のユーザーのみ)。

追記①:特別な system バージョンがあります。使用中のバージョンを system にするとシステムにインストールされているバージョンになります。

追記②:例は nodejs で書いたが、他にサポートされているツールは色々あります。

  • terraform みたいなツールもありますし
  • sqlitepostgresql のようなDBも
  • 他のCLIツールもサポートされています: ripgreppeconeovim などなど

注意点

  • ツールチェインがバイナリーをインストールするとパスに入れられるためにたまに

    asdf reshim <プラグイン> 
    

    を実行する必要があります。

ツールのバージョン管理地獄から脱出できて何という幸せ!

株式会社フォトラクションでは一緒に働く仲間を募集しています