Help us understand the problem. What is going on with this article?

asdfの導入とフックの活用

More than 1 year has passed since last update.

今年の4月初頭から、これまで使っていた rbenvnvm の代わりとして、複数の言語ランタイムのバージョンを統合的に管理するツールとして asdf を試しています。

言語だけでなく、いくつかのツール類 1 にも対応しています。

インストール

私は zplug を使っているので、

zplug 'asdf-vm/asdf'

導入 し、初期化コードを

# .zshrc
source $ZPLUG_REPOS/asdf-vm/asdf/asdf.sh
source $ZPLUG_REPOS/asdf-vm/asdf/completions/asdf.bash

のように ロードし ました。

2つめのファイルは補完定義ですが、 zsh でも bash 用でOKのようです。他に fish 用も 付属して います。

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

さきほどインストールしたのは asdf のコア部分で、各言語のサポートはこのあとインストールするプラグインで実現しています。
ここでは RubyプラグインNode.jsプラグイン を入れてみます。

$ asdf plugin-add ruby
$ asdf plugin-add nodejs
  • ビルドに必要なライブラリ (readline など) は適宜インストールしておきます。
  • nodejs プラグインは GnuPG で署名を検証するのでこれもインストールし、開発チームの鍵をインポート しておきましょう。

各言語の使用

インストール

$ asdf install ruby 2.6.3
$ asdf install nodejs 8.16.0
# etc.

バージョン指定

$ asdf global ruby 2.6.2
$ asdf local ruby 2.4.3

それぞれホームディレクトリもしくはカレントディレクトリの .tool-versions ファイルに記録されます。カレントディレクトリから親を辿って最初に見つかった .tool-versions ファイルに記載されたバージョンが使われます。

なお、 ~/.asdfrc ファイルに

legacy_version_file = yes

書いておく と、 .ruby-version や .node-version も認識してくれるようになります。

バージョン確認

$ asdf current
$ asdf current ruby

フックについて

~/.asdfrc に

pre_asdf_install_ruby = コマンド文字列
post_asdf_install_ruby = コマンド文字列

のように書くことで、指定のタイミングでフックコマンドを実行することが出来ます。

設定ファイルからの値の読み出しは grep や awk を駆使したシンプルな処理 なので、やりたいことが2行以上になるようであれば、外部スクリプトファイルにした上で、 設定ファイルでは それらを source する ようにしたほうが無難でしょう。

たとえば、 Ruby のインストール前に configure に渡す引数を環境変数から渡すように設定 したり、 Ruby のインストール後に bundler が付属していなければインストールしたり、 gem コマンドを最新にしたり することができます。


  1. たとえば terraform にも対応しており、 0.11 系から 0.12 系への移行時には重宝しました。 

sakuro
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした