LoginSignup
6
3

More than 5 years have passed since last update.

phpenvでlocalを設定するとなぜか.ruby-versionな件

Last updated at Posted at 2015-10-12

2017年1月3日 追記

今日、まっさらな状態のところへphpenvをインストールしたところ、スクリプトの該当箇所が全て/.php-versionになっていました。いつの間に直されたんでしょうね…?とりあえず、手間が一つ減りましたね。

compassが使えない!!

PHPで複数人で開発をしているので、バージョンを合わせるためにphpenv localでバージョンを設定すると、なぜか.ruby-versionファイルが生成されています。

$ phpenv local 5.4.32
$ ls -ahlF
total 152
drwxr-xr-x  27 user  staff   918B 10 13 00:02 ./
drwxr-xr-x   5 user  staff   170B 10  7 11:05 ../
-rw-r--r--@  1 user  staff    10K 10 12 22:22 .DS_Store
-rw-r--r--   1 user  staff   205B 10 12 22:32 .buildpath
-rw-r--r--   1 user  staff   557B 10  9 14:16 .project
-rw-r--r--   1 user  staff     7B 10 13 00:02 .ruby-version  <== アイエエエ! Ruby!? Rubyナンデ??????
drwxr-xr-x  17 user  staff   578B 10  9 14:31 .sass-cache/
drwxr-xr-x   3 user  staff   102B 10  7 11:11 .settings/
drwxr-xr-x   7 user  staff   238B 10 12 23:50 .svn/
・・・

Rubyは関係ないプロジェクトだから別にいいか…と思って気にせず使っていたのですが、compassを使おうとしたら問題発生!

$ compass compile ・・・
rbenv: version `5.4.32` is not installed (set by /path/to/project/.ruby-version)

ですよねー!!でもどうやって回避する!?

と思って、ちょっと調べてみると**env系って殆どシェルスクリプトらしい…
ならば書き換えてしまえば良い、という安直な発想に至ったわけです。

phpenvのスクリプトを書き換える

以下の内容は私の環境では問題なく動作しているものですが、保証は致しません。自己責任にてお願いします。

まず、.ruby-versionが含まれるスクリプトを洗い出します。

$ grep -l .ruby-version $(phpenv root)/libexec/phpenv-*
/Users/user/.anyenv/envs/phpenv/libexec/phpenv-local
/Users/user/.anyenv/envs/phpenv/libexec/phpenv-version-file

というわけで、この2つの中身の.ruby-versionを全て.php-versionに書き換えるというかなり横暴な手段に出ます。

$ sed -i -e 's/.ruby-version/.php-version/g' $(phpenv root)/libexec/phpenv-local
$ sed -i -e 's/.ruby-version/.php-version/g' $(phpenv root)/libexec/phpenv-version-file

さくっとワンライナーにてやりたい方はこちら。

$ grep -l .ruby-version $(phpenv root)/libexec/phpenv-* | xargs -n1 sed -i -e 's/.ruby-version/.php-version/g'

xargsコマンドってめちゃ便利ですね、最近知ったばかりですが(ーー;)

以上で、phpenvのローカルのバージョン設定が.php-versionに書き出されるようになりました。

$ ls -ahlF
total 144
drwxr-xr-x  26 user  staff   884B 10 13 00:20 ./
drwxr-xr-x   5 user  staff   170B 10  7 11:05 ../
-rw-r--r--@  1 user  staff    10K 10 12 22:22 .DS_Store
-rw-r--r--   1 user  staff   205B 10 12 22:32 .buildpath
-rw-r--r--   1 user  staff     7B 10 12 23:42 .php-version    <== これでOK!
-rw-r--r--   1 user  staff   557B 10  9 14:16 .project
drwxr-xr-x  17 user  staff   578B 10  9 14:31 .sass-cache/
drwxr-xr-x   3 user  staff   102B 10  7 11:11 .settings/
drwxr-xr-x   7 user  staff   238B 10 12 23:50 .svn/

何か背景があるのでしょうか?

この事については、他の**envはそれぞれの名前になってるし、PHPでWebサイトを作るならば、その中でcompassを使うことも多々ある筈なので、どこかしかで話題に登っていると思い、Googleで調べてみました。
しかし、私の調べ方が悪いのか、あるいはそもそも話題に登っていないのか、それらしき情報が全くヒットしませんでした。

何か、phpenvだけ.ruby-versionである理由があるのでしょうか?ご存知の方、ご教授頂ければ幸いです。

6
3
2

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
6
3