PHPで単体テストをするとき、 単体テストフレームワークPHPUnit と static methodsの挿げ替えに tototoshi/staticmock を利用している。
普段の開発サーバーで意識していなかったが、macOSで開発環境を構築するときに手間取った。
macOSにビルトインされているPHPは扱いづらいため、新たに homebrew でPHPをインストールする
$ brew search php
==> Formulae
brew-php-switcher php-code-sniffer php@7.1 phplint phpmyadmin
php php-cs-fixer php@7.2 phpmd phpunit
==> Casks
eclipse-php eclipse-php netbeans-php netbeans-php phpstorm phpstorm
特に理由がなければ、 php
フォーミュラをインストールすれば良い(私は php@7.1
を利用)。 php
フォーミュラを選んだ場合、2019年2月14日段階では、PHP 7.3.2がインストールされる。
php@7.1
を選んだ場合、 brew link されないのでCLIの出力に従ってPATHに追加すること。
tototoshi/staticmock は実装の書き換えでrunkitを使用しているため、 runkit のインストールを別途行う必要がある。ただし、peclのrunkitはPHP7に対応していないので、runkit7/runki7からインストールする。
- 関連記事:PHP7でStaticMockを動かす
- 関連記事:runkit と uopz について
インストール方法はrunkit7のリポジトリに従えば良い。runkit7のインストール前に、phpのパスがHomebrewでインストールされたパスであることを確認すること。
$ ls -al $(which php)
-r-xr-xr-x 1 tamanobi staff 11559124 2 14 10:39 /usr/local/opt/php@7.1/bin/php
$ brew --prefix php@7.1
/usr/local/opt/php@7.1
Homebrewでインストールしたphpに、PHP拡張を伝えるためにphp.iniを編集する。php.iniのパスは php --ini
で調べられる。
$ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/7.1
Loaded Configuration File: /usr/local/etc/php/7.1/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.1/conf.d
Additional .ini files parsed: /usr/local/etc/php/7.1/conf.d/ext-opcache.ini
php.iniを開くと extension=msql.so
などのサンプルを見ながら extension=runkit.so
を追加する。
最後に以下のコマンドで runkit
が使えるようになっているか確認する。 bool(true)
となれば読み込まれている。
$ php -r 'var_dump(extension_loaded("runkit"));'
bool(true)
もし、ApacheやNginxでPHPを利用している場合は、CLIと違ってリロードが必要。