Composerのディレクトリが~/.config/composer以下になる場合
CentOS 7環境で、新規案件のためにLaravel入れたのだがlaravel
コマンドが入ってない。~/.composer/vendor/bin
にパスは通ってるのになあ、とよく見てみると、~/.composer/vendor/bin
自体がなかった。
もうちょっと調べてみると、~/.config/composer
というのがある。どうも~/.composer
ではなくこちらにインストールされているようだ。
また、Laravelのドキュメントに以下のようなことが書いてあった。
グローバルなComposerのbinディレクトリを$PATHへ登録してください。このディレクトリはオペレーティングシステムにより場所が異なります。通常は、以下の場所です。
- macOS:
$HOME/.composer/vendor/bin
- GNU/Linuxディストリビューション:
$HOME/.config/composer/vendor/bin
でも今まで同じ設定で動いてたしおかしいな、最近変更あったのかなとComposerのリポジトリ調べてみる。どうもこの辺で設定されている模様。
XDGがどうこうだとディレクトリが変わるらしい。さっそく環境変数をチェックしてみると、今まで使っていた環境(の一部、確認したのは)ではXDG_*
という環境変数はなく、しかし今回の環境ではXDG_RUNTIME_DIR
, XDG_SESSION_ID
と2つ設定されいた。
どうもこれが原因のようだ。しかしこのXDGというのはそもそもなんなのか? そしてなぜ今まで設定されていなかったのに、今回設定されているのか?
後者の疑問はまだ解決していないが、前者については解決した。ArchLinuxのWikiに詳しい情報があるが、freedesktop関係の、ユーザディレクトリ内のディレクトリ構成の規格関係らしい。そういえばなんとなく聞き覚えがあるような。
解決策として、生のパスを入れるのではなく、Composerを叩いてパスを教えてもらうことにした。
export PATH=$(composer config --global --absolute home)/vendor/bin:$PATH