序章

Composer は、PHPで人気のある依存関係管理ツールであり、主にプロジェクトの依存関係のインストールと更新を容易にするために作成されました。 特定のプロジェクトが依存している他のパッケージをチェックし、プロジェクトの要件に応じて適切なバージョンを使用してそれらをインストールします。 Composerは、SymfonyLaravelなどの一般的なPHPフレームワークに基づく新しいプロジェクトをブートストラップするためにもよく使用されます。

このチュートリアルでは、Ubuntu22.04システムにComposerをインストールして使用を開始します。

前提条件

このガイドに従うには、非ルートとしてUbuntu22.04サーバーにアクセスする必要があります sudo ユーザー、およびサーバーで有効になっているファイアウォール。 これを設定するには、 Ubuntu22.04の初期サーバー設定ガイドに従ってください。

ステップ1—PHPと追加の依存関係のインストール

Ubuntu22.04システムにすでに含まれているはずの依存関係に加えて gitcurl、Composerには php-cli コマンドラインでPHPスクリプトを実行するため、および unzip zip形式のアーカイブを抽出します。 これらの依存関係を今すぐインストールします。

まず、以下を実行してパッケージマネージャーのキャッシュを更新します。

  1. sudo apt update

次に、次のコマンドを実行して、必要なパッケージをインストールします。

  1. sudo apt install php-cli unzip

次のように入力して、インストールの確認を求められます Y その後 ENTER.

前提条件がインストールされたら、Composerのインストールに進むことができます。

ステップ2—Composerのダウンロードとインストール

Composerは、PHPで記述されたインストーラースクリプトを提供します。 ダウンロードし、破損していないことを確認してから、Composerをインストールします。

ホームディレクトリにいることを確認してから、を使用してインストーラーを取得します curl:

  1. cd ~
  2. curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php

次に、ダウンロードしたインストーラーが、 Composer Public Keys /Signaturesページにある最新のインストーラーのSHA-384ハッシュと一致することを確認します。 検証手順を容易にするために、次のコマンドを使用して、Composerページからプログラムで最新のハッシュを取得し、それをシェル変数に格納できます。

  1. HASH=`curl -sS https://composer.github.io/installer.sig`

得られた値を確認したい場合は、以下を実行できます。

  1. echo $HASH
Output
906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8

次に、Composer ダウンロードページで提供されている次のPHPコードを実行して、インストールスクリプトが安全に実行できることを確認します。

  1. 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をシステム全体のコマンドとしてダウンロードしてインストールします。 composer、 下 /usr/local/bin:

  1. sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer

次のような出力が表示されます。

Output
All settings correct for using Composer Downloading... Composer (version 2.3.5) successfully installed to: /usr/local/bin/composer Use it: php /usr/local/bin/composer

インストールをテストするには、次を実行します。

  1. composer
Output
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 2.3.5 2022-04-13 16:43:00 Usage: command [options] [arguments] Options: -h, --help Display help for the given command. When no command is given display help for the list command -q, --quiet Do not output any message -V, --version Display this application version --ansi|--no-ansi Force (or disable --no-ansi) ANSI output -n, --no-interaction Do not ask any interactive question --profile Display timing and memory usage information --no-plugins Whether to disable plugins. --no-scripts Skips the execution of all scripts defined in composer.json file. -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 ファイル。 The composer.json fileは、プロジェクトにダウンロードする必要のある依存関係と、各パッケージのインストールが許可されているバージョンをComposerに通知します。 これは、プロジェクトの一貫性を維持し、下位互換性の問題を引き起こす可能性のある不安定なバージョンのインストールを回避するために非常に重要です。

このファイルを手動で作成する必要はありません。作成すると構文エラーが発生するのが一般的です。 Composerは、新しいものを作成するためのインタラクティブな方法を提供します composer.json ユーザーの入力に基づいたファイル。後でPackagistのパブリックパッケージとしてプロジェクトを共有する場合に適しています。 Composerは、ベアボーンも自動生成します composer.json あなたが実行するときにファイル composer require 新しく作成されたプロジェクトに依存関係を含めるコマンド。

Composerを使用して、プロジェクトの依存関係としてパッケージをインストールするプロセスには、次の手順が含まれます。

  • アプリケーションに必要なライブラリの種類を特定します。
  • Composerの公式パッケージリポジトリであるPackagist.orgで適切なオープンソースライブラリを調べてください。
  • 依存したいパッケージを選択してください。
  • 走る composer require に依存関係を含めるには composer.json ファイルを作成し、パッケージをインストールします。

デモアプリケーションでこれを試してみましょう。

このアプリケーションの目的は、特定の文をURLに適した文字列( slug)に変換することです。 これは通常、ページタイトルをURLパスに変換するために使用されます(このチュートリアルのURLの最後の部分など)。

プロジェクトのディレクトリを作成することから始めましょう。 これをslugifyと呼びます。

  1. cd ~
  2. mkdir slugify
  3. 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モジュールが必要です。

必要なパッケージが現在サーバーにインストールされていないシステムライブラリに依存している場合、どの要件が欠落しているかを示すエラーが表示されます。

  1. composer require cocur/slugify:4.1
Output
./composer.json has been created Running composer update cocur/slugify Loading composer repositories with package information Updating dependencies Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires cocur/slugify 4.1 -> satisfiable by cocur/slugify[v4.1.0]. - cocur/slugify v4.1.0 requires ext-mbstring * -> it is missing from your system. Install or enable PHP's mbstring extension. ...

システム依存関係の問題を解決するために、次を使用して不足しているパッケージを検索できます。 apt search:

  1. apt search mbstring
Output
Sorting... Done Full Text Search... Done php-mbstring/jammy 2:8.1+92ubuntu1 all MBSTRING module for PHP [default] php-symfony-polyfill-mbstring/jammy 1.24.0-1ubuntu2 all Symfony polyfill for the Mbstring extension php8.1-mbstring/jammy 8.1.2-1ubuntu2 amd64 MBSTRING module for PHP

正しいパッケージ名を見つけたら、次を使用できます apt もう一度、システム依存関係をインストールします。

  1. sudo apt install php-mbstring

インストールが完了したら、を実行できます composer require もう一度コマンド:

  1. composer require cocur/slugify
Output
Using version ^4.1 for cocur/slugify ./composer.json has been created Running composer update cocur/slugify Loading composer repositories with package information Updating dependencies Lock file operations: 1 install, 0 updates, 0 removals - Locking cocur/slugify (v4.1.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing cocur/slugify (v4.1.0): Extracting archive Generating autoload files

出力からわかるように、Composerは使用するパッケージのバージョンを自動的に決定しました。 ここでプロジェクトのディレクトリを確認すると、2つの新しいファイルが含まれています。 composer.jsoncomposer.lock、および vendor ディレクトリ:

  1. ls -l
Output
total 12 -rw-r--r-- 1 sammy sammy 59 Apr 18 14:17 composer.json -rw-r--r-- 1 sammy sammy 3462 Apr 18 14:17 composer.lock drwxr-xr-x 4 sammy sammy 4096 Apr 18 14:17 vendor

The composer.lock fileは、各パッケージのインストールされているバージョンに関する情報を格納するために使用され、他の誰かがプロジェクトのクローンを作成してその依存関係をインストールした場合に同じバージョンが使用されるようにします。 The vendor ディレクトリは、プロジェクトの依存関係が配置されている場所です。 The vendor フォルダをバージョン管理にコミットしないでください。必要なのはcomposer.jsonファイルとcomposer.lockファイルだけです。

すでに含まれているプロジェクトをインストールする場合 composer.json ファイル、実行 composer install プロジェクトの依存関係をダウンロードするため。

バージョンの制約を簡単に見てみましょう。 内容を確認すれば composer.json ファイルの場合、次のように表示されます。

  1. cat composer.json
Output
{ "require": { "cocur/slugify": "^4.1" } }

特殊文字に気付くかもしれません ^ のバージョン番号の前 composer.json. Composerは、プロジェクトを安定させながら柔軟性を提供するために、必要なパッケージバージョンを定義するためのいくつかの異なる制約と形式をサポートしています。 キャレット(^)自動生成された演算子によって使用されます composer.json ファイルは、セマンティックバージョニングに続いて、相互運用性を最大化するために推奨される演算子です。 この場合、互換性のある最小バージョンとして 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によって自動的に生成されます。

あなたがする必要がある唯一のことは含めることです vendor/autoload.php クラスのインスタンス化の前に、PHPスクリプトでファイルを作成します。

デモアプリケーションで試してみましょう。 と呼ばれる新しいファイルを開きます test.php テキストエディタで:

  1. nano test.php

次のコードを追加して、 vendor/autoload.php ファイル、ロード cocur/slugify 依存関係、およびスラッグを作成するためにそれを使用します:

test.php
<?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!');

ファイルを保存して、エディターを終了します。

次に、スクリプトを実行します。

  1. php test.php

これにより、出力が生成されます hello-world-this-is-a-long-sentence-and-i-need-to-make-a-slug-from-it.

新しいバージョンがリリースされたときに依存関係を更新する必要があるので、それを処理する方法を見てみましょう。

ステップ5—プロジェクトの依存関係を更新する

プロジェクトの依存関係をより新しいバージョンに更新する場合は常に、 update 指図:

  1. composer update

これにより、プロジェクトで必要なライブラリの新しいバージョンがチェックされます。 新しいバージョンが見つかり、それがで定義されたバージョン制約と互換性がある場合 composer.json ファイルの場合、Composerはインストールされている以前のバージョンを置き換えます。 The composer.lock これらの変更を反映するようにファイルが更新されます。

次のように指定することで、1つ以上の特定のライブラリを更新することもできます。

  1. composer update vendor/package vendor2/package2

必ずチェックインしてください composer.jsoncomposer.lock 依存関係を更新した後のバージョン管理システム内のファイル。これにより、他のユーザーもこれらの新しいバージョンをインストールできるようになります。

結論

Composerは、PHPプロジェクトの依存関係を管理する作業を大幅に容易にする強力なツールです。 これは、プロジェクトが依存するPHPパッケージを検出、インストール、および更新するための信頼できる方法を提供します。 このガイドでは、Composerをインストールする方法、プロジェクトに新しい依存関係を含める方法、および新しいバージョンが利用可能になったらこれらの依存関係を更新する方法について説明しました。