PHPComplete: 複数のPHPバージョンを一括インストール

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940/f91e0b2a-1fd7-e658-d5c8-4f5520b4fe75.png" width="50%" alt="brewworks logo">


以前紹介した、[Macで複数のバージョンのPHPを同時に使う](https://qiita.com/koriym/items/17662cd9c44c43081bf9#%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%A7%E9%81%B8%E6%8A%9E)のニューバージョンです。

複数のPHPバージョンを簡単に一度にインストールできる便利なHomebrewフォーミュラ「PHPComplete」を紹介します。

## PHPCompleteとは？

PHPCompleteは、複数のPHPバージョンを一度にインストールできるHomebrewフォーミュラです。XDebugやその他のPECLパッケージも含まれています。

## 他との違い

[phpenv](https://github.com/phpenv/phpenv)と違いディレクトリ単位で切り替えたりすることや、`[phpbrew](https://github.com/phpbrew/phpbrew)のようなインストールツールではありません。

実体は単なるhomebrewフォーミュラです。[shivammathur/php](https://github.com/shivammathur/homebrew-php)で用意されている複数のPHPを一度にinstallします。グローバルなユーティリティなどなくクリーンです。

## 主な特徴

PHPだけでなく開発に必要なPECLも同時に複数バージョンのPHPにインストールされます。

1. **複数のPHPバージョン**: PHP 5.6から8.3まで一度にインストールされます。
2. **XDebugの自動インストール**: 各PHPバージョンに適したXDebugが自動的にインストールされます。特に古いバージョンのPHPのXdebugはバージョン番号指定が必要ですがその面倒が軽減されます。

3. **追加のPECLパッケージ**: PHP 8.1、8.2、8.3向けには以下のパッケージが含まれています：
   - pcov (コードカバレッジドライバー)
   - apcu (APCユーザーキャッシュ)
   - redis (Redisクライアント)
   - xhprof (階層的プロファイラー)
   - imagick (画像処理ライブラリ)
   - memcached (Memcachedクライアント)

4. **柔軟なカスタマイズ**: 必要なPHPバージョンやエクステンションを簡単にコメントアウトできます。例えば上記のpeclをPHP5.6からでもインストールできます。


## 使い方

1. タップしてフォーミュラをインストール：

   ```
   brew tap koriym/brewworks
   brew install phpcomplete
   ```

2. インストール完了後、各PHPバージョンとエクステンションが使用可能になります。

## カスタマイズと再インストール

PHPCompleteの素晴らしい点は、必要なPHPバージョンやPECLパッケージを柔軟に選択できることです。

1. フォーミュラを編集：
   ```
   brew edit phpcomplete
   ```

2. 必要なPHPバージョンやPECLパッケージを選択（または選択解除）します。

3. 変更を反映するために再インストール：
   ```
   brew reinstall phpcomplete
   ```

このように開発環境をコントロールできます。

## アンインストール

アンインストールを行うと、このパッケージのみに依存しているPHPは全てアンインストールされます。

```
brew uninstall phpcomplete
```

## クリーンなPHPスイッチ

切り替えユーティリティを使わずPATH環境変数の値を変えるだけでphpを切り替えます。

```shell
alias php56='export PATH="/opt/homebrew/opt/php@5.6/bin:$PATH" && export PATH="/opt/homebrew/opt/php@5.6/sbin:$PATH"'
alias php70='export PATH="/opt/homebrew/opt/php@7.0/bin:$PATH" && export PATH="/opt/homebrew/opt/php@7.0/sbin:$PATH"'
alias php71='export PATH="/opt/homebrew/opt/php@7.1/bin:$PATH" && export PATH="/opt/homebrew/opt/php@7.1/sbin:$PATH"'
alias php72='export PATH="/opt/homebrew/opt/php@7.2/bin:$PATH" && export PATH="/opt/homebrew/opt/php@7.2/sbin:$PATH"'
alias php73='export PATH="/opt/homebrew/opt/php@7.3/bin:$PATH" && export PATH="/opt/homebrew/opt/php@7.3/sbin:$PATH"'
alias php74='export PATH="/opt/homebrew/opt/php@7.4/bin:$PATH" && export PATH="/opt/homebrew/opt/php@7.4/sbin:$PATH"'
alias php80='export PATH="/opt/homebrew/opt/php@8.0/bin:$PATH" && export PATH="/opt/homebrew/opt/php@8.0/sbin:$PATH"'
alias php81='export PATH="/opt/homebrew/opt/php@8.1/bin:$PATH" && export PATH="/opt/homebrew/opt/php@8.1/sbin:$PATH"'
alias php82='export PATH="/opt/homebrew/opt/php@8.2/bin:$PATH" && export PATH="/opt/homebrew/opt/php@8.2/sbin:$PATH"'
alias php83='export PATH="/opt/homebrew/opt/php@8.3/bin:$PATH" && export PATH="/opt/homebrew/opt/php@8.3/sbin:$PATH"'
alias php84='export PATH="/opt/homebrew/opt/php@8.4/bin:$PATH" && export PATH="/opt/homebrew/opt/php@8.3/sbin:$PATH"'
```

`~/.zshrc`などに以上の`alias`を追加すると簡単に切り替えられます。

```
php81  # Switch to PHP 8.1
php74  # Switch to PHP 7.4
```

- シンプルで直感的： 簡単なコマンドでPHPのバージョンを素早く切り替えられます。
- 追加ツール不要： シェルの機能のみを使用するため、追加のソフトウェアは必要ありません。（brew updateで壊れることもありません！）

他にはターミナルのスクリプトを設定して、Windows単位で指定する方法もあります。

前述の以下の記事の「ターミナルで選択」をご覧ください。

https://qiita.com/koriym/items/17662cd9c44c43081bf9#%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%81%A7%E9%81%B8%E6%8A%9E

## リソース使用量について

## 切り替え


PHPCompleteを使用する際、リソース使用量について心配する必要はあまりありません：

- 各PHPバージョンは約80-100MBのディスク容量を使用します。
- インストールしたが使用していないPHPバージョンは、ディスク容量を占有するだけで、メモリやCPUには影響しません。
- そのため、使用頻度の低いバージョンをインストールしていても、システムパフォーマンスへの影響は最小限です。

あまり心配しないで、使わないバージョンがインストールされていてもまあいいのではないでしょうか。PHPコレクションとしてcompleteしましょう😃

## まとめ

PHPCompleteは、複数のPHPバージョンを扱う開発者にとって便利なツールです。複数のPHP環境構築の時間を１コマンドでXdebug付きで（ここ重要）インストールする手間を大幅に削減し、異なるPHPバージョン間でのテストや開発を容易にします。カスタマイズが簡単で、リソース使用量も気にする必要がなく、ツールもインストールされません。

このフォーミュラでPHPを"コンプリート"してください！😆