phpenv

バージョン管理PHP開発環境CLIrbenv派生

GitHub概要

phpenv/phpenv

Simple PHP version management

スター1,740
ウォッチ34
フォーク149
作成日:2012年4月25日
言語:Shell
ライセンス:MIT License

トピックス

hacktoberfestphptools

スター履歴

phpenv/phpenv Star History
データ取得日時: 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環境変数で制御されます。

バージョン優先順位

  1. PHPENV_VERSION環境変数
  2. カレントディレクトリの.php-versionファイル
  3. 親ディレクトリの.php-versionファイル(再帰的)
  4. グローバル設定(~/.phpenv/version)
  5. システム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