Ubuntu20.04にComposerをインストールして使用する方法
序章
Composer は、PHPで人気のある依存関係管理ツールであり、主にプロジェクトの依存関係のインストールと更新を容易にするために作成されました。 特定のプロジェクトが依存している他のパッケージをチェックし、プロジェクトの要件に応じて適切なバージョンを使用してそれらをインストールします。 Composerは、SymfonyやLaravelなどの一般的なPHPフレームワークに基づく新しいプロジェクトをブートストラップするためにもよく使用されます。
このチュートリアルでは、Ubuntu20.04システムにComposerをインストールして使用を開始します。
前提条件
このガイドに従うには、非ルートsudo
ユーザーとしてUbuntu20.04サーバーにアクセスし、サーバーでファイアウォールを有効にする必要があります。 これを設定するには、 Ubuntu20.04の初期サーバー設定ガイドに従ってください。
ブラウザの端末を使用してこのチュートリアルを実行する場合は、インタラクティブ端末の起動!ボタンをクリックして開始してください。 ブラウザで直接すべてのコマンドを試して実行することができます。
ステップ1—PHPと追加の依存関係のインストール
git
やcurl
など、Ubuntu 20.04システムにすでに含まれているはずの依存関係に加えて、ComposerではコマンドラインでPHPスクリプトを実行するためにphp-cli
が必要です。およびunzip
は、zip形式のアーカイブを抽出します。 これらの依存関係を今すぐインストールします。
まず、以下を実行してパッケージマネージャーのキャッシュを更新します。
- sudo apt update
次に、次のコマンドを実行して、必要なパッケージをインストールします。
- sudo apt install php-cli unzip
Y
、ENTER
の順に入力して、インストールの確認を求めるメッセージが表示されます。
前提条件がインストールされたら、Composerのインストールに進むことができます。
ステップ2—Composerのダウンロードとインストール
Composerは、PHPで記述されたインストーラースクリプトを提供します。 ダウンロードし、破損していないことを確認してから、Composerをインストールします。
ホームディレクトリにいることを確認してから、curl
を使用してインストーラーを取得します。
- cd ~
- curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php
次に、ダウンロードしたインストーラーが、Composer公開鍵/署名ページにある最新のインストーラーのSHA-384ハッシュと一致することを確認します。 検証手順を容易にするために、次のコマンドを使用して、Composerページからプログラムで最新のハッシュを取得し、それをシェル変数に格納できます。
- HASH=`curl -sS https://composer.github.io/installer.sig`
得られた値を確認したい場合は、以下を実行できます。
- echo $HASH
Outpute0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a
次に、Composer ダウンロードページで提供されている次のPHPコードを実行して、インストールスクリプトが安全に実行できることを確認します。
- php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
次の出力が表示されます。
Installer verified
出力にInstaller corrupt
と表示されている場合は、インストールスクリプトを再度ダウンロードして、正しいハッシュを使用していることを再確認する必要があります。 次に、検証プロセスを繰り返します。 検証済みのインストーラーがあれば、続行できます。
composer
をグローバルにインストールするには、次のコマンドを使用して、Composerを/usr/local/bin
の下にcomposer
という名前のシステム全体のコマンドとしてダウンロードしてインストールします。
- sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer
次のような出力が表示されます。
OutputAll settings correct for using Composer
Downloading...
Composer (version 2.2.9) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
インストールをテストするには、次を実行します。
- composer
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version Composer version 2.2.9 2022-03-15 22:13:37
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
--profile Display timing and memory usage information
--no-plugins Whether to disable plugins.
-d, --working-dir=WORKING-DIR If specified, use the given directory as working directory.
--no-cache Prevent use of the cache
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
...
これにより、Composerがシステムに正常にインストールされ、システム全体で使用可能であることが確認されます。
注:このサーバーでホストするプロジェクトごとに個別のComposer実行可能ファイルを使用する場合は、プロジェクトごとにローカルにインストールできます。 この方法は、システムユーザーがシステム全体にソフトウェアをインストールする権限を持っていない場合にも役立ちます。
これを行うには、コマンドphp /tmp/composer-setup.php
を使用します。 これにより、現在のディレクトリにcomposer.phar
ファイルが生成され、php composer.phar
で実行できます。
次に、Composerを使用して依存関係を管理する方法を見てみましょう。
ステップ3—PHPプロジェクトでのComposerの使用
PHPプロジェクトは多くの場合、外部ライブラリに依存しており、それらの依存関係とそのバージョンの管理には注意が必要です。 Composerは、プロジェクトのバージョンと依存関係を追跡すると同時に、プロジェクトに必要なパッケージを検索、インストール、および更新するプロセスを容易にすることで、この問題を解決します。
プロジェクトでComposerを使用するには、composer.json
ファイルが必要です。 composer.json
ファイルは、プロジェクトにダウンロードする必要のある依存関係と、各パッケージのインストールが許可されているバージョンをComposerに通知します。 これは、プロジェクトの一貫性を維持し、下位互換性の問題を引き起こす可能性のある不安定なバージョンのインストールを回避するために非常に重要です。
このファイルを手動で作成する必要はありません。作成すると構文エラーが発生するのが一般的です。 Composerは、ユーザーの入力に基づいて新しいcomposer.json
ファイルを作成するインタラクティブな方法を提供します。これは、後でPackagistのパブリックパッケージとしてプロジェクトを共有する場合に適しています。 composer require
コマンドを実行して、新しく作成されたプロジェクトに依存関係を含めると、Composerは必要最低限のcomposer.json
ファイルも自動生成します。
Composerを使用して、プロジェクトの依存関係としてパッケージをインストールするプロセスには、次の手順が含まれます。
- アプリケーションに必要なライブラリの種類を特定します。
- Composerの公式パッケージリポジトリであるPackagist.orgで適切なオープンソースライブラリを調べてください。
- 依存したいパッケージを選択してください。
composer require
を実行して、composer.json
ファイルに依存関係を含め、パッケージをインストールします。
デモアプリケーションでこれを試してみましょう。
このアプリケーションの目的は、特定の文をURLに適した文字列( slug)に変換することです。 これは通常、ページタイトルをURLパスに変換するために使用されます(このチュートリアルのURLの最後の部分など)。
プロジェクトのディレクトリを作成することから始めましょう。 これをslugifyと呼びます。
- cd ~
- mkdir slugify
- cd slugify
必須ではありませんが、composer init
コマンドを実行して、プロジェクトの詳細なcomposer.json
ファイルを作成できるようになりました。 私たちのプロジェクトの唯一の目的はComposerで依存関係をインストールする方法を示すことなので、最初のパッケージが必要になったときに自動生成される、より単純なcomposer.json
ファイルを使用します。
次に、 Package.org を検索して、slugsの生成に役立つパッケージを探します。 Packagistで「スラッグ」という用語を検索すると、次のような結果が得られます。
リストの各パッケージの右側に2つの数字が表示されます。 上の数字は、Composerを介してパッケージがインストールされた回数を表し、下の数字は、GitHubでパッケージがスターされた回数を示します。 一般的に言って、インストール数と星数が多いパッケージは、非常に多くの人が使用しているため、より安定する傾向があります。 パッケージの説明に関連性があるかどうかを確認して、必要なものであることを確認することも重要です。
文字列からスラッグへのコンバーターが必要です。 検索結果から、そのページの最初の結果として表示されるパッケージcocur/slugify
は、適度な数のインストールとスターがあり、よく一致しているようです。
Packagistのパッケージには、ベンダーの名前とパッケージの名前があります。 各パッケージには、GitHubがリポジトリに使用するのと同じ形式の一意の識別子(名前空間)があります:vendor/package
。 インストールするライブラリは、名前空間cocur/slugify
を使用します。 プロジェクトでパッケージを要求するには、パッケージの名前空間が必要です。
インストールするパッケージが正確にわかったので、composer require
を実行して依存関係として含め、プロジェクトのcomposer.json
ファイルを生成することもできます。 パッケージを要求するときに注意することが重要なことの1つは、Composerがアプリケーションレベルの依存関係とシステムレベルの依存関係の両方を追跡することです。 システムレベルの依存関係は、パッケージが依存するPHPモジュールを示すために重要です。 cocur/slugify
パッケージの場合、まだインストールしていないPHPモジュールが必要です。
必要なパッケージが現在サーバーにインストールされていないシステムライブラリに依存している場合、どの要件が欠落しているかを示すエラーが表示されます。
- composer require cocur/slugify
OutputUsing version ^4.0 for cocur/slugify
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for cocur/slugify ^4.0 -> satisfiable by cocur/slugify[v4.0.0].
- cocur/slugify v4.0.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
...
システム依存関係の問題を解決するために、apt search
を使用して不足しているパッケージを検索できます。
- apt search mbstring
OutputSorting... Done
Full Text Search... Done
php-mbstring/focal 2:7.4+75 all
MBSTRING module for PHP [default]
php-patchwork-utf8/focal 1.3.1-1 all
UTF-8 strings handling for PHP
php7.4-mbstring/focal 7.4.3-4ubuntu1 amd64
MBSTRING module for PHP
正しいパッケージ名を見つけたら、apt
をもう一度使用して、システムの依存関係をインストールできます。
- sudo apt install php-mbstring
インストールが完了したら、composer require
コマンドを再度実行できます。
- composer require cocur/slugify
OutputUsing version ^4.0 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing cocur/slugify (v4.0.0): Downloading (100%)
Writing lock file
Generating autoload files
出力からわかるように、Composerは使用するパッケージのバージョンを自動的に決定しました。 ここでプロジェクトのディレクトリを確認すると、composer.json
とcomposer.lock
の2つの新しいファイルと、vendor
ディレクトリが含まれています。
- ls -l
Outputtotal 12
-rw-rw-r-- 1 sammy sammy 59 May 4 13:56 composer.json
-rw-rw-r-- 1 sammy sammy 3229 May 4 13:56 composer.lock
drwxrwxr-x 4 sammy sammy 4096 May 4 13:56 vendor
composer.lock
ファイルは、各パッケージのインストールされているバージョンに関する情報を格納するために使用され、他の誰かがプロジェクトのクローンを作成してその依存関係をインストールする場合に同じバージョンが使用されるようにします。 vendor
ディレクトリは、プロジェクトの依存関係が配置されている場所です。 vendor
フォルダーをバージョン管理にコミットしないでください。必要なのはcomposer.jsonファイルとcomposer.lockファイルのみです。
すでにcomposer.json
ファイルが含まれているプロジェクトをインストールする場合は、composer install
を実行して、プロジェクトの依存関係をダウンロードしてください。
バージョンの制約を簡単に見てみましょう。 composer.json
ファイルの内容を確認すると、次のように表示されます。
- cat composer.json
Output{
"require": {
"cocur/slugify": "^4.0"
}
}
composer.json
のバージョン番号の前に特殊文字^
があることに気付くかもしれません。 Composerは、プロジェクトを安定させながら柔軟性を提供するために、必要なパッケージバージョンを定義するためのいくつかの異なる制約と形式をサポートしています。 自動生成されたcomposer.json
ファイルで使用されるcaret(^
)演算子は、セマンティックバージョニングに続く、相互運用性を最大化するための推奨演算子です。 この場合、互換性のある最小バージョンとして 4.0 を定義し、5.0より前の将来のバージョンへの更新を許可します。
一般的に、composer.json
ファイルのバージョン制約を改ざんする必要はありません。 ただし、必要なライブラリのメジャーな新しいバージョンがリリースされてアップグレードする場合や、使用するライブラリがセマンティックバージョンに準拠していない場合など、状況によっては制約を手動で編集する必要がある場合があります。
以下に、Composerのバージョン制約がどのように機能するかをよりよく理解するための例をいくつか示します。
制約 | 意味 | 許可されるバージョンの例 |
---|---|---|
^1.0 | > = 1.0 <2.0 | 1.0, 1.2.3, 1.9.9 |
^1.1.0 | > = 1.1.0 <2.0 | 1.1.0, 1.5.6, 1.9.9 |
~1.0 | > = 1.0 <2.0.0 | 1.0, 1.4.1, 1.9.9 |
~1.0.0 | > = 1.0.0 <1.1 | 1.0.0, 1.0.4, 1.0.9 |
1.2.1 | 1.2.1 | 1.2.1 |
1.* | > = 1.0 <2.0 | 1.0.0, 1.4.5, 1.9.9 |
1.2.* | > = 1.2 <1.3 | 1.2.0, 1.2.3, 1.2.9 |
Composerのバージョン制約の詳細については、公式ドキュメントを参照してください。
次に、Composerを使用して依存関係を自動的にロードする方法を見てみましょう。
ステップ4—自動ロードスクリプトを含める
PHP自体はクラスを自動的にロードしないため、Composerは、プロジェクトで自動ロードを機能させるためにプロジェクトに含めることができる自動ロードスクリプトを提供します。 このファイルは、最初の依存関係を追加したときにComposerによって自動的に生成されます。
クラスをインスタンス化する前に、PHPスクリプトにvendor/autoload.php
ファイルを含めるだけです。
デモアプリケーションで試してみましょう。 テキストエディタでtest.php
という新しいファイルを開きます。
- nano test.php
vendor/autoload.php
ファイルを取り込み、cocur/slugify
依存関係をロードし、それを使用してスラッグを作成する次のコードを追加します。
<?php
require __DIR__ . '/vendor/autoload.php';
use Cocur\Slugify\Slugify;
$slugify = new Slugify();
echo $slugify->slugify('Hello World, this is a long sentence and I need to make a slug from it!');
ファイルを保存して、エディターを終了します。
次に、スクリプトを実行します。
- php test.php
これにより、出力hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it
が生成されます。
新しいバージョンがリリースされたときに依存関係を更新する必要があるので、それを処理する方法を見てみましょう。
ステップ5—プロジェクトの依存関係を更新する
プロジェクトの依存関係をより新しいバージョンに更新する場合は、update
コマンドを実行してください。
- composer update
これにより、プロジェクトで必要なライブラリの新しいバージョンがチェックされます。 新しいバージョンが見つかり、composer.json
ファイルで定義されているバージョン制約と互換性がある場合、Composerはインストールされている以前のバージョンを置き換えます。 composer.lock
ファイルは、これらの変更を反映するように更新されます。
次のように指定することで、1つ以上の特定のライブラリを更新することもできます。
- composer update vendor/package vendor2/package2
依存関係を更新した後は、バージョン管理システム内のcomposer.json
ファイルとcomposer.lock
ファイルをチェックインして、他のユーザーもこれらの新しいバージョンをインストールできるようにしてください。
結論
Composerは、PHPプロジェクトの依存関係を管理する作業を大幅に容易にする強力なツールです。 これは、プロジェクトが依存するPHPパッケージを検出、インストール、および更新するための信頼できる方法を提供します。 このガイドでは、Composerをインストールする方法、プロジェクトに新しい依存関係を含める方法、および新しいバージョンが利用可能になったらこれらの依存関係を更新する方法について説明しました。