Composerのディレクトリが~/.config/composer以下になる場合

CentOS 7環境で、新規案件のためにLaravel入れたのだがlaravelコマンドが入ってない。~/.composer/vendor/binにパスは通ってるのになあ、とよく見てみると、~/.composer/vendor/bin自体がなかった。

もうちょっと調べてみると、~/.config/composerというのがある。どうも~/.composerではなくこちらにインストールされているようだ。

また、Laravelのドキュメントに以下のようなことが書いてあった。

グローバルなComposerのbinディレクトリを$PATHへ登録してください。このディレクトリはオペレーティングシステムにより場所が異なります。通常は、以下の場所です。

でも今まで同じ設定で動いてたしおかしいな、最近変更あったのかなと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