Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


composer:1.9:phpswitch

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
composer:1.9:phpswitch [2020/03/13 09:50]
y2sunlight [Composerを起動するPHPのバージョンを変更する方法]
composer:1.9:phpswitch [2020/11/19 17:29] (現在)
y2sunlight [ComposerとPHPの関係]
行 5: 行 5:
  
 [[composer:top|Composer に戻る]] [[composer:top|Composer に戻る]]
 +
 +関連記事
 +
 +  * [[composer:1.9:install|Composerのインストール]]
 +  * ComposerをPHPバージョンで使い分ける
 +  * [[composer:1.10:local-install|Composerのローカルインストール]]
 +  * [[composer:1.9:basic-usage|Composer 基本的な使い方]]
 +  * [[composer:1.9:command-list|Composer コマンド一覧]]
 +  * [[composer:1.9:version-constraints|Composer バージョン制約]]
 +
 +----
 +
 +===== 概要 =====
  
 「Windowsの開発環境下で各プロジェクト毎のPHPのバージョンを変えたい」と言う要求はよくあると思います。[[xampp:top|XAMPP]]を使っていれば複数のPHPバージョンをインストールでき、起動するApacheも簡単に変更できます。また、[[eclipse:top|Eclipse]]でもプロジェクト毎に好きなバージョンのPHPを設置できます。このように、Windows上にPHPの開発環境作るだけなら特に難しいことはありません。 「Windowsの開発環境下で各プロジェクト毎のPHPのバージョンを変えたい」と言う要求はよくあると思います。[[xampp:top|XAMPP]]を使っていれば複数のPHPバージョンをインストールでき、起動するApacheも簡単に変更できます。また、[[eclipse:top|Eclipse]]でもプロジェクト毎に好きなバージョンのPHPを設置できます。このように、Windows上にPHPの開発環境作るだけなら特に難しいことはありません。
行 10: 行 23:
 ところが、Composerに関しては少し事情が違ってきます。問題の本質は、ComposerがPHPスクリプトで実装されているという点です。PHPスクリプトなので当然のことですがPHPによって起動され、そのPHPは通常PATH環境変数上のものが起動されます。従って、Composerを使う場合、PHPのバージョンがPATH環境変数上のものに制限されるので、プロジェクトによってPHPのバージョンを変えるには多少の工夫が必要になります。 ところが、Composerに関しては少し事情が違ってきます。問題の本質は、ComposerがPHPスクリプトで実装されているという点です。PHPスクリプトなので当然のことですがPHPによって起動され、そのPHPは通常PATH環境変数上のものが起動されます。従って、Composerを使う場合、PHPのバージョンがPATH環境変数上のものに制限されるので、プロジェクトによってPHPのバージョンを変えるには多少の工夫が必要になります。
  
-プロジェクト毎に環境変数を変える方法には、[[https://scoop.sh/|Scoop]]や[[https://chocolatey.org/|Chocolatey]]などのWindows用パッケージマネージャを使う方法も考えられますが、ここでは、あくまでもXAMPPとEclipseの使用を前提とした方法で実現してみたいと思います。また、ここではComposerがWinodwsインストーラを使用して[[composer:1.9:install|自動インストール]]されている事を前提とします。+プロジェクト毎にPHP環境を変える方法には、[[https://scoop.sh/|Scoop]]などのWindows用パッケージマネージャを使う方法も考えられますが、ここでは、あくまでもXAMPPとEclipseの使用を想定した方法で実現してみたいと思います。また、ここではComposerがWinodwsインストーラを使用して[[composer:1.9:install|自動インストール]]されている事を前提とします。 
 + 
 +\\
  
-==== ComposerとPHPの関係 ====+===== ComposerとPHPの関係 =====
  
 Composerがパッケージを検索する時、対象となるPHPのバージョンはComposerを実行したPHPのバージョンに一致します。例えば、PHP7.2.8の環境下で以下のコマンドを実行します。([[basic-library:phpdotenv:4.1|phpdotenv]]は環境設定のファイル(.env)のPHP版です) Composerがパッケージを検索する時、対象となるPHPのバージョンはComposerを実行したPHPのバージョンに一致します。例えば、PHP7.2.8の環境下で以下のコマンドを実行します。([[basic-library:phpdotenv:4.1|phpdotenv]]は環境設定のファイル(.env)のPHP版です)
行 38: 行 53:
 この時、ComposerはPHP7.2.8を対象としたphpdotenvパッケージを探します。以下は、自動生成されたcomposer.jsonです。phpdotenvのバージョンが4.1である点に注目しておいて下さい。 この時、ComposerはPHP7.2.8を対象としたphpdotenvパッケージを探します。以下は、自動生成されたcomposer.jsonです。phpdotenvのバージョンが4.1である点に注目しておいて下さい。
  
-<code json composer.json>+<code javascript composer.json>
 { {
     "require": {     "require": {
行 54: 行 69:
 最初に思いつくのは「composer.jsonでPHPのバージョンを指定できないか?」という事です。勿論これは可能で、Composer.jsonに config.php を追加します。 最初に思いつくのは「composer.jsonでPHPのバージョンを指定できないか?」という事です。勿論これは可能で、Composer.jsonに config.php を追加します。
  
-<code json composer.json>+<code javascript composer.json>
 { {
     "config": {     "config": {
行 99: 行 114:
  
 <code> <code>
-D:\usr\workspace3\y2sunlight\sandbox>composer require vlucas/phpdotenv+C:\sandbox>composer require vlucas/phpdotenv
 Using version ^3.6 for vlucas/phpdotenv Using version ^3.6 for vlucas/phpdotenv
 ./composer.json has been updated ./composer.json has been updated
行 114: 行 129:
 この時、ComposerはPHP5.4.19を対象としたphpdotenvパッケージを探します。以下が、composer.jsonの内容です。 この時、ComposerはPHP5.4.19を対象としたphpdotenvパッケージを探します。以下が、composer.jsonの内容です。
  
-<code json composer.json>+<code javascript composer.json>
 { {
     "name": "sunlight/sandbox",     "name": "sunlight/sandbox",
行 130: 行 145:
 このようにPHP5.4.19を指定した場合、phpdotenvのバージョンが(PHP7.2.8を対象とした4.1ではなくて)3.6になっています。 このようにPHP5.4.19を指定した場合、phpdotenvのバージョンが(PHP7.2.8を対象とした4.1ではなくて)3.6になっています。
  
-この方法でComposerをPHPバージョンで使い分けるによる方法の利点は、プロジェクトで使用するIED(Eclipse)で設定しているPHPのバージョンと同じものをcomposer.jsonで指定するだけで良く、設定が非常に分かり易い点です。但し、php.exeとcomposer.batにPATHしておく必要があります。+この方法でComposerをPHPバージョンで使い分けるによる方法の利点は、IED(Eclipse)で設定しているPHPのバージョンと同じものをcomposer.jsonで指定するだけで良く、設定が非常に分かり易い点です。但し、php.exeとcomposer.batをPATH環境変数に設定しておく必要があります。
  
 \\ \\
行 146: 行 161:
 </code> </code>
  
-  * [1行名] コメント +  * [2行名] コメント 
-  * [2行名] 遅延環境変数の展開を無効にする +  * [3行名] 遅延環境変数の展開を無効にする 
-  * [3行目] PATH環境変数の通っているphp.exeでcomposer.pharを起動する(%~dp0 は composer.bat の存在するドライブ文字とパスを表す。上のに場合 C:\ProgramData\ComposerSetup\bin\ )+  * [4行目] PATH環境変数の通っているphp.exeでcomposer.pharを起動する(%~dp0 は composer.bat の存在するドライブ文字とパスを表す。上のに場合 C:\ProgramData\ComposerSetup\bin\ )
  
 composer.batで何が起こっているか分かれば話は簡単です。インストールされているcomposer.pharはこのまま使う事にして、composer.batだけをプロジェクトフォルダ(composer.jsonと同じフォルダ)にコピーしてcomposer.batを以下のように変更します。 composer.batで何が起こっているか分かれば話は簡単です。インストールされているcomposer.pharはこのまま使う事にして、composer.batだけをプロジェクトフォルダ(composer.jsonと同じフォルダ)にコピーしてcomposer.batを以下のように変更します。
行 160: 行 175:
 </code> </code>
  
-変更箇所は3行目です。php.exeとcomposer.pharを絶対パスに変更します。この例ではPHPのバージョンを現在使用しているもの(7.2.8)から7.3.15に上げています。+変更箇所は4行目です。php.exeとcomposer.pharを絶対パスに変更します。この例ではPHPのバージョンを現在使用しているもの(7.2.8)から7.3.15に上げています。 
 + 
 +Composer diag 以下を実行すると確かに動いていることが確認できます。 
 + 
 +<code> 
 +C:\sandbox>composer diag 
 +Checking platform settings: OK 
 +Checking git settings: OK 
 +Checking http connectivity to packagist: OK 
 +Checking https connectivity to packagist: OK 
 +Checking github.com rate limit: OK 
 +Checking disk free space: OK 
 +Checking pubkeys: 
 +Tags Public Key Fingerprint: ******** 
 +Dev Public Key Fingerprint: ******** 
 +OK 
 +Composer version: 1.9.3 
 +PHP version: 7.3.15 
 +PHP binary path: D:\usr\xampp7.3.15\php\php.exe 
 +</code> 
 + 
 +この方法では、composer.batをプロジェクトに取り込んでいるので既定のPHPバージョンを意識する必要が無く、PATH環境変数も必要ありません(Eclipseもphp.exeは絶対Path指定、Composer以外でPATHを使用していない場合php.exeのPATHは不要になります)。但し、composer.batは絶対パスを含むので環境依存となり、プロジェクトメンバでこのファイルを共有する場合は注意が必要です。悩ましい限りです。 
 + 
 +\\
  
-composer.batをプロジェクトフォルダ内に保存することで分かり易くなります。また、この方法ではPATH環境変数が必要なくなります(Eclipseではphp.exeは絶対Path指定、Composer以外でPATHを使用していない場合)。但し、composer.batは絶対パスを含むので環境依存となり、プロジェクトメンバでこのファイルを共有する場合は、注意が必要です。 
composer/1.9/phpswitch.1584060634.txt.gz · 最終更新: 2020/03/13 09:50 by y2sunlight