豊富なプラグインとshellの起動が短くなるという話を聞いて asdf を入れてみました。
anyenvはshellの起動の度にワンテンポ待つ(約1秒ほど)のが少し気になっていました。
Installation
以下に、環境ごとに記載されています。
Getting Started | asdf
私はmacにhomebrewで入れています。
問題点
asdf自体のinstallはうまくいきましたが、ruby3.1のinstallでエラーとなりました。
asdf install ruby 3.1
BUILD FAILED (macOS 11.2 using ruby-build 20211227)
Inspect or clean up the working tree at /var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF
Results logged to /var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.log
Last 10 log lines:
from /private/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF/ruby-3.1.0/lib/fileutils.rb:219:in `block in mkdir_p'
from /private/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF/ruby-3.1.0/lib/fileutils.rb:211:in `each'
from /private/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF/ruby-3.1.0/lib/fileutils.rb:211:in `mkdir_p'
from ./tool/rbinstall.rb:218:in `makedirs'
from ./tool/rbinstall.rb:331:in `prepare'
from ./tool/rbinstall.rb:432:in `block in <main>'
from ./tool/rbinstall.rb:1127:in `block in <main>'
from ./tool/rbinstall.rb:1124:in `each'
from ./tool/rbinstall.rb:1124:in `<main>'
make: *** [do-install-all] Error 1
makedirs のエラーなのでディレクトリの作成で失敗している可能性がありそうです。
logが以下に出力されているとのことで読んでみます。
/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.log
すると、permisson deniedとのこと。
/private/var/folders/xv/rr7v71pn1pb3rf8nj76ws6wr0000gn/T/ruby-build.20211230074811.55722.HM6BgF/ruby-3.1.0/lib/fileutils.rb:240:in `mkdir': Permission denied @ dir_s_mkdir - /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Users (Errno::EACCES)
該当ディレクトリを見ると、symlinkでした。
$ll /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
lrwxr-xr-x 1 root wheel 14B 8 29 14:29 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk@ -> MacOSX11.3.sdk
$ls -al /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/
total 32
drwxr-xr-x 8 root wheel 256 12 30 07:56 ./
drwxr-xr-x 6 root wheel 192 8 29 14:29 ../
-rw-r--r-- 1 root wheel 127 3 16 2021 Entitlements.plist
-rw-r--r-- 1 root wheel 4512 3 16 2021 SDKSettings.json
-rw-r--r-- 1 root wheel 3691 3 16 2021 SDKSettings.plist
drwxr-xr-x 4 root wheel 128 3 16 2021 System/
drwxr-xr-x 3 rochefort wheel 96 12 30 07:56 Users/
drwxr-xr-x 7 root wheel 224 3 16 2021 usr/
解決方法
とりあえず権限付与。
sudo chown $(whoami) /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
これ、CommandLineTools のversionが変更する度にやらないといけなさそう。。
anyenv
anyenv消しても良いですが、一旦保険のために、shellでの読み込みだけコメントアウトしています。
問題なければ、uninstall & .anyenv を削除予定。
Configuration
Configuration | asdf.
.tool-versions
に各種versionを記載すれば自動で読み込んでくれます。
rubyもnodeも1ファイルに書けるのがメリットのようです。
従来の.node-version、.ruby-version を使いたい場合
legacy_version_file
というoptionが用意されています。
Configuration | asdf.
$HOME/.asdfrc
に以下のように書けば、anyenv同様の .node-version、.ruby-version などを読み込んでくれます。
legacy_version_file = yes
メンバー全員の環境を強制できない場合は、これを入れておくのが良さそうです。
どのversionでどのファイルを読み込んでるかは、currentコマンドで確認できます。
$ asdf current
nodejs 14.15.4 /Users/rochefort/work/apps/qiita_advent/.node-version
ruby 3.1.0 /Users/rochefort/work/apps/qiita_advent/.ruby-version
その他
global 設定。
$ asdf global ruby 3.1.0