phpenv
GitHub概要
スター1,740
ウォッチ34
フォーク149
作成日:2012年4月25日
言語:Shell
ライセンス:MIT License
トピックス
hacktoberfestphptools
スター履歴
データ取得日時: 2025/7/20 03:05
言語バージョン管理ツール
phpenv
概要
phpenvは、rbenvをベースにしたシンプルなPHPバージョン管理ツールです。rbenvの設計思想を受け継ぎ、軽量でUNIX的なアプローチでPHPの複数バージョンを管理します。プロジェクトごとに異なるPHPバージョンを使用でき、.php-versionファイルによる自動切り替えをサポートしています。
詳細
主な特徴
- rbenvベース: rbenvの実績ある設計を継承
- シンプルな仕組み: shimを使った透過的なバージョン切り替え
- .php-versionファイル: プロジェクト単位の自動バージョン管理
- php-buildプラグイン: PHPのビルドとインストールを支援
- 軽量動作: 最小限のオーバーヘッドで高速動作
- プラグイン対応: 機能拡張が可能なアーキテクチャ
動作原理
phpenvはrbenvと同様に、~/.phpenv/shimsディレクトリをPATHの先頭に配置します。PHPコマンドが実行される際、shimが適切なバージョンを判定し、該当するPHP実行ファイルにリダイレクトします。バージョンは.php-versionファイルやPHPENV_VERSION環境変数で制御されます。
バージョン優先順位
- PHPENV_VERSION環境変数
- カレントディレクトリの.php-versionファイル
- 親ディレクトリの.php-versionファイル(再帰的)
- グローバル設定(~/.phpenv/version)
- システムPHP
メリット・デメリット
メリット
- シンプルさ: rbenvユーザーにとって学習コストゼロ
- 軽量: 必要最小限の機能で高速動作
- 透明性: 動作が予測可能でデバッグが容易
- プロジェクト分離: 各プロジェクトで独立したPHP環境
- バージョン管理統合: .php-versionをGitで管理可能
- カスタマイズ性: プラグインによる拡張が容易
デメリット
- 機能限定: phpbrewと比較して機能が少ない
- ビルド依存: php-buildプラグインが必須
- Windows非対応: Unix系OSのみサポート
- rbenv競合: rbenvとの共存に注意が必要
- コミュニティ: phpbrewより小規模
- 拡張管理: 拡張機能の管理機能が限定的
参考ページ
書き方の例
インストール
# 自動インストール(推奨)
curl -L https://raw.githubusercontent.com/phpenv/phpenv-installer/master/bin/phpenv-installer | bash
# 手動インストール
git clone https://github.com/phpenv/phpenv.git ~/.phpenv
# php-buildプラグインのインストール
git clone https://github.com/php-build/php-build.git ~/.phpenv/plugins/php-build
# シェル設定(.bashrcまたは.zshrcに追加)
echo 'export PATH="$HOME/.phpenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(phpenv init -)"' >> ~/.bashrc
source ~/.bashrc
# rbenvとの共存設定(rbenv使用者の場合)
# rbenvのPATHを優先させる
export PATH="$HOME/.rbenv/bin:$HOME/.phpenv/bin:$PATH"
基本的な使い方
# 利用可能なPHPバージョンの確認
phpenv install --list
# 特定バージョンのインストール
phpenv install 8.3.0
phpenv install 8.2.13
phpenv install 7.4.33
# インストール済みバージョンの確認
phpenv versions
# グローバルバージョンの設定
phpenv global 8.2.13
# 現在のバージョン確認
phpenv version
php -v
プロジェクトごとの管理
# プロジェクトディレクトリで実行
cd /path/to/my-project
# ローカルバージョンの設定
phpenv local 8.1.26
# .php-versionファイルが作成される
cat .php-version
# 8.1.26
# 別のプロジェクトで異なるバージョン
cd /path/to/legacy-project
phpenv local 7.4.33
# ディレクトリ移動で自動切り替え
cd /path/to/my-project
php -v # PHP 8.1.26
cd /path/to/legacy-project
php -v # PHP 7.4.33
一時的なバージョン切り替え
# シェルセッション内でのみ有効
phpenv shell 8.3.0
# 環境変数での指定
export PHPENV_VERSION=8.3.0
# 設定解除
phpenv shell --unset
# または
unset PHPENV_VERSION
インストールオプション
# デフォルト設定でインストール
phpenv install 8.2.13
# カスタムconfigureオプション
PHP_BUILD_CONFIGURE_OPTS="--with-pdo-mysql --with-mysqli" phpenv install 8.2.13
# 複数のオプション指定
PHP_BUILD_CONFIGURE_OPTS="--enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-pdo-mysql --with-openssl" phpenv install 8.2.13
# デバッグビルド
PHP_BUILD_CONFIGURE_OPTS="--enable-debug" phpenv install 8.2.13
# インストール先の確認
ls ~/.phpenv/versions/
拡張機能の管理
# 現在のPHPバージョンに拡張をインストール
phpenv shell 8.2.13
pecl install redis
pecl install xdebug
# shimの再生成(重要)
phpenv rehash
# インストール済み拡張の確認
php -m
# 特定バージョンの拡張管理
cd ~/.phpenv/versions/8.2.13
./bin/pecl install imagick
コマンドとユーティリティ
# PHPバイナリのパス確認
phpenv which php
phpenv which composer
# shimの再生成(新しいコマンドを認識)
phpenv rehash
# バージョンの削除
rm -rf ~/.phpenv/versions/7.4.33
phpenv rehash
# phpenv自体のアップデート
cd ~/.phpenv
git pull
# php-buildのアップデート
cd ~/.phpenv/plugins/php-build
git pull
Composerとの連携
# グローバルComposerのインストール
curl -sS https://getcomposer.org/installer | php
mv composer.phar ~/.phpenv/versions/$(phpenv version-name)/bin/composer
phpenv rehash
# プロジェクトでの使用
cd /path/to/project
phpenv local 8.2.13
composer install
# 各PHPバージョンにComposerをインストール
for version in $(phpenv versions --bare); do
phpenv shell $version
curl -sS https://getcomposer.org/installer | php
mv composer.phar ~/.phpenv/versions/$version/bin/composer
done
phpenv rehash
トラブルシューティング
# ビルドエラーの確認
tail -n 50 /tmp/php-build.*.log
# OpenSSLエラーの対処(macOS)
brew install openssl
PHP_BUILD_CONFIGURE_OPTS="--with-openssl=$(brew --prefix openssl)" phpenv install 8.2.13
# 依存関係の確認(Ubuntu/Debian)
sudo apt-get install -y \
build-essential \
libxml2-dev \
libssl-dev \
libsqlite3-dev \
libcurl4-openssl-dev \
libjpeg-dev \
libpng-dev \
libonig-dev \
libzip-dev
# shimの問題解決
phpenv rehash
phpenv init -
# PATH確認
echo $PATH | tr ':' '\n' | grep phpenv
CI/CD環境での使用
# GitHub Actions例
- name: Setup PHP
run: |
git clone https://github.com/phpenv/phpenv.git ~/.phpenv
git clone https://github.com/php-build/php-build.git ~/.phpenv/plugins/php-build
echo "$HOME/.phpenv/bin" >> $GITHUB_PATH
eval "$(phpenv init -)"
phpenv install 8.2.13
phpenv global 8.2.13
# Travis CI例(.travis.yml)
language: php
php:
- 8.2
- 8.1
- 8.0