3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

asdfの導入とフックの活用

Posted at

今年の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 系への移行時には重宝しました。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?