windowsでマルチPHPを実現するという記事を見かけたのですが、ジャンクションを使ったほうがもっと楽なのでやり方を紹介します。
シンボリックリンクでもいいんだけど何故か管理者権限が必要だし、今回の用途であればジャンクションで十分です。
なおショートカットでは駄目です。
PHPをインストール
PHP For Windowsから適当にファイルをダウンロードして、適当にディレクトリに展開します。
今回はとりあえず
C:\xampp\php7.4.26
C:\xampp\php8.0.13
ってかんじに配置しました。
なんでxampp
なのかって?
そりゃXAMPPを使ってるからに決まってる。
エイリアスを設定
参考記事に合わせて記述すると、こんなかんじになるでしょうか。
vi /c/php/php
#!/usr/bin/bash
"/c/xampp/php/php.exe" $*
vi /c/php/php.bat
@echo off
"C:\xampp\php\php.exe" %*
vi ~/.bash_profile
alias php='/c/xampp/php/php'
私は環境変数PATHにC:\xampp\php
って突っ込んで済ませますが。
ジャンクションを作成
cmdで以下のコマンドを打つと、C:\xampp\php
というジャンクションが作成されます。
mklink /J C:\xampp\php C:\xampp\php8.0.13
一見ショートカットに見えるのですが実際はジャンクションです。
見分け方はコマンドラインでdir
かcd
してみればいいです。
これで無事に、phpコマンドでPHP8.0.13が実行されるようになりました。
PHPバージョンを変更
phpコマンドでPHP8.0.13が実行されるようになりましたが、これを変更してみましょう。
やりかたは以下のコマンドを打つだけです。
rmdir C:\xampp\php
mklink /J C:\xampp\php C:\xampp\php7.4.26
これでphpコマンドで実行されるPHPが、PHP7.4.26になりました。
何処から使用するかを気にせず、ジャンクションを変更するだけで常に全てのPHPバージョンが切り替えられるようになります。
べんりですね。
これでコマンドを2個打つだけで、好きにPHPのバージョンを切り替えられるようになりました。
切り替えコマンドをバッチにしてphpvm use 8.1.0
みたいに書けるようにすると、もっと便利になるかもしれませんね。
というか実際それをやったのがNVM for Windows
です。
NVM for Windows
NVM for Windowsは、バージョン切り替えに上記と同じような仕組みを使っています。
nvm install
でNodeをインストールするとC:\Program Files\nodejs\
ディレクトリができるのですが、このnodejs
はシンボリックリンクです(ジャンクションではない)。
実際の中身はC:\Users\hoge\AppData\Roaming\nvm\v1.2.3
みたいなところに配置されて、nodejs
はそこを参照するという構造です。
nvm use 4.5.6
と打つと、このシンボリックリンクがC:\Users\hoge\AppData\Roaming\nvm\v4.5.6
と切り替わり、以後は何処からnodeコマンドを打っても変更後のバージョンになります。
べんりですね。
このように、PHPやNodeだけではなく、インストールを必要としないソフトウェアであれば何にでも使える手法です。
なにか面白い使い方があったら教えてくださいね。
まとめ
Docker使え?
知るか。