はじめに
広島のnikkieです。
めちゃ基本的なことだと思うのですが、使い方をようやく得心したことについて書いていきます。
目次
PHPUnitをPHARでインストール
PHPUnitのドキュメントに沿って進めていきます。
https://docs.phpunit.de/en/10.5/installation.html#manual-download-of-phar
% php --version PHP 8.3.1 (cli) (built: Dec 21 2023 17:49:39) (NTS) Copyright (c) The PHP Group Zend Engine v4.3.1, Copyright (c) Zend Technologies with Zend OPcache v8.3.1, Copyright (c), by Zend Technologies
wget
でPHP Archive (PHAR)を取得します。
% wget https://phar.phpunit.de/phpunit-10.phar % php phpunit-10.phar --version PHPUnit 10.5.10 by Sebastian Bergmann and contributors.
PHPUnitは先日バージョン11がリリースされました。
バージョン11もダウンロードします。
% wget https://phar.phpunit.de/phpunit-11.phar % php phpunit-11.phar --version PHPUnit 11.0.2 by Sebastian Bergmann and contributors.
2つのバージョンのPHPUnitは以下に置くことにしました。
~/opt/phpunit/ ├── phpunit-10.phar └── phpunit-11.phar
PHAR自体を実行できるようにします
% chmod u+x phpunit-1[01].phar
シンボリックリンクを使えば、PHPUnitのバージョンを簡単に切り替えられる!
ドキュメントには以下のようにあります
It is a common practice to use different versions of PHPUnit on a per-project basis.
意訳 プロジェクトごとに異なるバージョンのPHPUnitを使うのは、よくあるプラクティスです
(私はPython歴が長いのですが、プロジェクトごとの仮想環境にpytestを入れるので、それと同様の話と理解しました)
PHPUnitのPHARはtoolsディレクトリの下に置く方法が案内されています。
The tools directory contains tools such as PHPUnit packaged as PHP archives.
. ├── src ├── tests └── tools
このドキュメントにはPhiveなるツールを使ったインストール方法も案内されているのですが、
https://docs.phpunit.de/en/10.5/installation.html#installing-phpunit-with-phive
それを見て、「toolsの下にphpunitへのシンボリックリンクを作ればバージョンを簡単に切り替えられるじゃん!」と気づきました。
% ln -s ~/opt/phpunit/phpunit-10.phar tools/phpunit
この状態でtools/phpunit
を実行すれば、10系のPHARファイルが実行されます
% tools/phpunit --version PHPUnit 10.5.10 by Sebastian Bergmann and contributors.
11系への切り替えはこちら。
すでにあるシンボリックリンクをunlinkした上で、11系へのシンボリックリンクを作っています(-f
)
% ln -s -f ~/opt/phpunit/phpunit-11.phar tools/phpunit
切り替わりました!
% tools/phpunit --version PHPUnit 11.0.2 by Sebastian Bergmann and contributors.
実際のPHPプロジェクトではやらないのかもしれませんが、私は直近でPHPUnitのトークを控えており、バージョンを簡単に切り替えて動作確認できるのはとても役に立っています。
終わりに
PHPUnitを例に、シンボリックリンクでコマンドのバージョンを切り替えられることをようやく理解しました。
同じ仕組みを$PATH
と組み合わせる2こともできますよね(例:kubectl)。
例えばコマンドのバイナリはopt下に置いておき、$PATH
に含まれるディレクトリに特定のバージョンのコマンドへのシンボリックリンクを作ります。
白状すると、このあたりが分かっていなかったので、「バージョンアップするときに考えよう」と何でも雑に$PATH
に置いたり、$PATH
を追加したりしてきました3。
シンボリックリンクの一手間を加えればバージョン切り替えが簡単になるということですね。
切り戻しが簡単なのが嬉しみです。