【PHP】windowsにComposerをインストール

PHP

 ComposerプロジェクトをUbuntu上に作成して、Windowsでソース作って、FTPでUbuntuにアップロードして、テストを行っていたのですが、いまさらながら
   WindowsにComposer入れたらいいじゃん
に至りましたので、WindowsにComposerをインストールしてみました。
 起動実験としてMonolog\Loggerが動くところまで確認できました。

● 環境

 Windows11 
 PHP 8.3.4

● ダウンロード先

 ダウンロード先 Composer (getcomposer.org) ※ ちなみにComposerは作曲家という意味らしいです
 セットアップファイルリンク https://getcomposer.org/Composer-Setup.exe

● インストール手順

① ダウンロード

  上のセットアップファイルリンクから、インストーラをダウンロードして実行します。
 次のコマンドでhashチェックします。
  (執筆時の最新VerはComposer version 2.7.7でした)

c:\ > cd C:\Users\?????\Downloads
c:\ > dir composer
C:\Users\kirabbit\Downloads>dir Composer*
 : 
 2024/06/11  20:11         1,804,192 Composer-Setup.exe
 :
c:\ > certutil -hashfile Composer-Setup.exe
SHA1 hash of Composer-Setup.exe:
ba1859d5d2f964f4ad2d3f6eeddb2f34b4699a44     <- hashが合っているか確認すると安心できます
CertUtil: -hashfile command completed successfully.

②インストール
 Composer-Setup.exeをダブルクリックして実行します。

すべてのユーザにインストールするなら上、ログインアカウントのみなら下を選択。(私は上を選びました)

チェックすると開発者モードインストールとなり、アンインストーラーが含まれなくなります。(チェック入れました)

インストール先の選択
 (私は C:\tool\Composer にしています。)

PHPの実行ファイル位置(自動で入力されました)

proxyを使っていれば指定してください。(私は使っていないのでノーチェックです)

インストールを始めるよ! という最終確認画面です
innstall をクリックします。

Composerを有効にするためには、コマンドプロンプトを再起動してというようなことが書いてあります。

インストールが完了しました(ジャン!)

③確認

コマンドプロンプトを起動して、次のコマンドを入力しました

C:\Users\?????\Downloads>composer -V
Composer version 2.7.7 2024-06-10 22:11:12
PHP version 8.3.4 (C:\tool\php834\php.exe)
Run the "diagnose" command to get more detailed diagnostics output.

● プロジェクトの作成(monolog\loggerを実行)

とりあえずフォルダを作って、次のコマンドを入力しました。

c:\ > cd c:\data\test
c:\data\test > composer init

  Welcome to the Composer config generator
This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [????/test]: ????/test
Description []: nasi
Author [keiaiusagi <?????@????.com>, n to skip]: ?????
Minimum Stability []: stable
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
License []: MIT

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
Add PSR-4 autoload mapping? Maps namespace "?????\test" to the entered relative path. [src/, n to skip]: src/

{
    "name": "????/test",
    "description": "nasi",
    "type": "project",
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "????\\test\\": "src/"
        }
    },
    "authors": [
        {
            "name": "????"
        }
    ],
    "minimum-stability": "stable",
    "require": {}
}

Do you confirm generation [yes]? y
Generating autoload files
Generated autoload files
PSR-4 autoloading configured. Use "namespace ????\test;" in src/
Include the Composer autoloader with: require 'vendor/autoload.php';

とりあえずcomposerDocで紹介されていた、Monolog\Loggerを入れてみることにしました。(ソース4行♪)PHPソースはサンプルソースをそのまま実行 ファイル名はtest.phpとしています。

<?php
require __DIR__ . '/vendor/autoload.php';

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->warning('Foo');
?>

Monolog\Loggerを入れないで実行した様子

c:\data\test>php test.php
PHP Fatal error:  Uncaught Error: Class "Monolog\Logger" not found in C:\data\test\test.php:4
Stack trace:
#0 {main}
  thrown in C:\data\test\test.php on line 4

new Monolog\Logger(‘name’); でクラスが見つけられずにエラーになっているようです。
次はライブラリをインストールして実行します。

c:\data\test>composer require Monolog\Logger
Could not find package Monolog\Logger.
Pick one of these or leave empty to abort:
  [0] monolog/monolog
  [1] amphp/log
  [2] inpsyde/wonolog
  [3] pulse00/monolog-parser
  [4] logtail/monolog-logtail
 > 0
0←[K
←[32m./composer.json has been updated←[39m
←[32mRunning composer update monolog/monolog←[39m
←[32mLoading composer repositories with package information←[39m
←[32mUpdating dependencies←[39m
←[32mLock file operations: 2 installs, 0 updates, 0 removals←[39m
  - Locking ←[32mmonolog/monolog←[39m (←[33m3.6.0←[39m)
  - Locking ←[32mpsr/log←[39m (←[33m3.0.0←[39m)
←[32mWriting lock file←[39m
←[32mInstalling dependencies from lock file (including require-dev)←[39m
←[32mPackage operations: 2 installs, 0 updates, 0 removals←[39m
  - Downloading ←[32mpsr/log←[39m (←[33m3.0.0←[39m)
  - Downloading ←[32mmonolog/monolog←[39m (←[33m3.6.0←[39m)
 0/2 [>---------------------------]   0%←[1G←[2K 1/2 [==============>-------------]  50%←[1G←[2K 2/2 [============================] 100%←[1G←[2K  - Installing ←[32mpsr/log←[39m (←[33m3.0.0←[39m): Extracting archive
  - Installing ←[32mmonolog/monolog←[39m (←[33m3.6.0←[39m): Extracting archive
 0/2 [>---------------------------]   0%←[1G←[2K 1/2 [==============>-------------]  50%←[1G←[2K 2/2 [============================] 100%←[1G←[2K←[32m11 package suggestions were added by new dependencies, use `composer suggest` to see details.←[39m
←[32mGenerating autoload files←[39m
←[32m2 packages you are using are looking for funding.←[39m
←[32mUse the `composer fund` command to find out more!←[39m
←[32mNo security vulnerability advisories found.←[39m
Using version ←[32m^3.6←[39m for ←[32mmonolog/monolog←[39m

c:\data\test>php test.php
c:\data\test>

実行してもエラーが表示されなくなりました。(Class “Monolog\Logger” not foundが解消)
ログの出力は、同じディレクトリのapp.logに出力されるようです。

c:\data\test>dir
 Directory of c:\data\test
:
2024/06/11  20:48                59 app.log
2024/06/11  20:48               406 composer.json
2024/06/11  20:48            13,200 composer.lock
2024/06/11  20:48    <DIR>          src
2024/06/11  20:45               206 test.php
:
c:\data\test>type app.log
[2024-06-11T11:48:46.491153+00:00] name.WARNING: Foo [] []

シンプルだし使いやすいと思います。
標準インストールだと、表示時間はUTC(世界標準時)なのですね。
date_default_timezone_setを加えると、JSTになるとのこと。

date_default_timezone_set("Asia/Tokyo");

さっそく実験です。

c:\data\test>type test.php
<?php
require __DIR__ . '/vendor/autoload.php';

date_default_timezone_set("Asia/Tokyo");    # 追加した行

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->warning('Boooo');
?>
c:\data\test>php test.php
c:\data\test>type app.log
c:\data\program\php\qrtest>type app.log
[2024-06-11T11:48:46.491153+00:00] name.WARNING: Foo [] []
[2024-06-11T21:10:27.757096+09:00] name.WARNING: Boooo [] []

追加した行だけJSTになっていることが確認できました。
とりあえず、Composerの起動実験は完了しました。