UbuntuにComposerをインストールする方法

今回はWSL2上のUbuntu 24.04LTSに、Composerと呼ばれるPHP用のパッケージマネージャーをインストールしてみます。Laravelの様なフレームワークと呼ばれる仕組みを使用する場合などに必要になります。Windows用のインストーラーもありますので、MAMPなどでも使用可能と思われます。Windowsへのインストール方法はこちらのサイト様等をご参照ください。

Composerをインストールします

こちらのサイト様等を参考にインストールを行っていきます。Ubuntuのパッケージマネージャーを更新して、インストールに必要なUbuntuのパッケージをインストールします。今回はユーザー権限で実行しています。

cd ~
sudo apt update
sudo apt install curl unzip php php-curl

以下のコマンドを入力して、Composerをダウンロードしてインストールします。

curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

「composer –version」と入力して、正常にインストールされたか確認します。
Xdebugのクライアントに接続できないというメッセージが出ますが、これはVSCode等でPHPのデバッグモードで待ち受けをしていると表示されなくなる様です。特にエラーではない様なのでこのまま続けます。

user01@DESKTOP-CQEA49P:~$ composer --version
Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
Composer version 2.8.4 2024-12-11 11:57:47
PHP version 8.3.6 (/usr/bin/php8.3)
Run the "diagnose" command to get more detailed diagnostics output.
user01@DESKTOP-CQEA49P:~$

表示されたメッセージに従って、「composer diagnose」と入力してさらに詳細を表示してみます。

何かエラーが出ている様なので、表示に従って「composer self-update –update-keys」と入力してみます。

user01@DESKTOP-CQEA49P:~$ composer self-update --update-keys
Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port).
Open https://composer.github.io/pubkeys.html to find the latest keys
Enter Dev / Snapshot Public Key (including lines with -----):

公開鍵を入力する様に促されるので、表示に従い「https://composer.github.io/pubkeys.html」を開いて、「Dev / Snapshot Public Key」欄の文字列をすべてコピーしてWSL2のターミナル画面に貼り付けます。ターミナル画面上でマウスを右クリックするか、Ctrl + Vキーを押すと文字列を貼り付けられます。

以下の様な画面が表示されたら、「強制的に貼り付け」を選択してenterキーを押します。

さらに「Enter Tags Public Key (including lines with —–):」と表示されますので、今度は先ほどのページにある「Tags Public Key」欄にある文字列をすべてコピーして、先ほどと同様にWSL2のターミナルに貼り付けます。

「Public keys stored in /home/user01/.config/composer」などと表示されれば正常にアップデートされている様です。再度「composer diagnose」と入力して詳細を表示してみます。

正常に動作している様です。

ComposerはUbuntuのパッケージにもありますが、「sudo apt install composer」と入力してインストールした後、「composer diagnose」と入力して検証すると、以下の様に「正規のインストールではない」というメッセージが表示される様です。また、バージョンも少し古い(2.7.1)様です。現在の最新のバージョンは2.8.4になっています。

Composerの動作確認をします

実際に何かパッケージをインストールして、動作確認を行ってみます。今回は「amphp」というパッケージをインストールして、C#やJavaScript等にある非同期処理(async / await)と同様の機能を実行してみます。(PHPのバージョンが8.1以上であれば動作します。)

ホームディレクトリに何かフォルダを作成して移動します。今回は「amphp-test」としました。

cd ~
mkdir amphp-test
cd amphp-test

パッケージをインストールします。

composer require amphp/amp

パッケージがインストールされるとフォルダ内に、「composer.json」と「composer.lock」というファイルが自動的に作成されます。両ファイルともComposer用の管理ファイルなので、通常は何も編集する必要はない様です。実際のパッケージ(ライブラリ)は「vendor」というフォルダ内に格納される様です。

VSCodeでテスト用のフォルダ(amphp-test)を開いて、「index.php」というファイルを新規作成します。こちらのサイト様のサンプルコードを参考にして、index.phpファイルを以下の様に修正します。

<?php 

require 'vendor/autoload.php';

use function Amp\async;
use function Amp\delay;
use function Amp\Future\await;

$future1 = async(function () {
    echo 'Hello ';
    delay(2); // 2ミリ秒待機します
    echo 'the future! ';
});

$future2 = async(function () {
    echo 'World ';
    delay(1); // 1ミリ秒待機します
    echo 'from ';
});

echo "Let's start: ";

await([$future1, $future2]);

このままではブラウザで表示できないので、WSL2のターミナルに以下の様に入力して、テスト用のフォルダ以下をすべて「/var/www/html」以下にコピーして、所有者を変更します。

sudo cp -r ~/amphp-test/ /var/www/html
sudo chown -R www-data:www-data /var/www/html/amphp-test/

ブラウザを起動して、URL欄に「localhost/amphp-test/index.php」と入力すると以下の様な文字列が表示されます。

文字列を見てわかる通り、1番目のメソッド($future1)と2番目のメソッド($future2)の実行結果が混じっています。通常PHPは上から下に記述順に実行されますが、amphpライブラリで非同期(同時)実行したため、1番目のメソッドと2番目のメソッドでそれぞれ、HelloとWorldを表示した後、待ち時間の短い2番目のメソッドが先に実行されて、表示する順番が入れ替わっています。

非同期実行処理は、待ち時間が長くなりがちなデータベースの書き込み処理等の合間に、表示を更新したりできるため非常に有用な機能と思われます。これ以外にも「Yield」と呼ばれる、処理の途中で結果を返すことができる機能もある様です。この機能を使用すると、巨大なデータファイル等を解析しながら画面やデータベースを更新する様な処理を実装できます。

その他

今回はPHP版のnpmともいえる、Composerというパッケージマネージャーをインストールしました。元々npmを参考にして作成されている様なので、使用感もnpmに似ています。余談ですが、WordpressのLightningテーマのフォルダ内にも「vendor」というフォルダがありますので、LightningテーマもComposerを使用している様です。

Composerを入れておくと、「PHPStan」と呼ばれる静的解析ツールを使用できる様になります。このツールを使用するとバグの早期発見や潜在的なセキュリティの脆弱性等が発見できる様です。これ以外にも、自分で実装するととても時間がかかる機能もお手軽に追加できるので便利かもしれません。

以上です。よろしかったらお試しください。