序章

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

このチュートリアルでは、Debian9にComposerをインストールして使用を開始します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

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

Composerをダウンロードしてインストールする前に、サーバーにすべての依存関係がインストールされていることを確認してください。

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

  1. sudo apt update

それでは、依存関係をインストールしましょう。 Composerをダウンロードするにはcurlが必要であり、インストールして実行するにはphp-cliが必要です。 php-mbstringパッケージは、使用するライブラリの関数を提供するために必要です。 gitは、Composerがプロジェクトの依存関係をダウンロードするために使用し、unzipはzip形式のパッケージを抽出するために使用します。 次のコマンドですべてをインストールできます。

  1. sudo apt install curl php-cli php-mbstring git unzip

前提条件がインストールされたら、Composer自体をインストールできます。

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

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

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

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

次に、インストーラーが[Composer Public Keys /Signatures][composer-sigs]ページにある最新のインストーラーのSHA-384ハッシュと一致することを確認します。 そのページからハッシュをコピーし、シェル変数として保存します。

  1. HASH=544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061

強調表示された値の代わりに最新のハッシュを使用してください。

次に、次のPHPスクリプトを実行して、インストールスクリプトが安全に実行できることを確認します。

  1. php -r "if (hash_file('SHA384', '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という名前のシステム全体のコマンドとしてダウンロードしてインストールします。

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

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

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

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

  1. composer

そして、Composerのバージョンと引数を表示するこの出力が表示されます。

Output
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.7.2 2018-08-16 16:57:12 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. -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug . . .

これにより、Composerがシステムに正常にインストールされ、システム全体で使用可能であることが確認されます。

注:このサーバーでホストするプロジェクトごとに個別のComposer実行可能ファイルを使用する場合は、プロジェクトごとにローカルにインストールできます。 NPMのユーザーは、このアプローチに精通しています。 この方法は、システムユーザーがシステム全体にソフトウェアをインストールする権限を持っていない場合にも役立ちます。

これを行うには、コマンドphp composer-setup.phpを使用します。 これにより、現在のディレクトリにcomposer.pharファイルが生成され、./composer.phar commandで実行できます。

次に、Composerを使用して依存関係を管理する方法を見てみましょう。

ステップ3—PHPプロジェクトでのComposerの使用

PHPプロジェクトは多くの場合、外部ライブラリに依存しており、それらの依存関係とそのバージョンの管理には注意が必要です。 Composerは、依存関係を追跡し、他のユーザーがそれらを簡単にインストールできるようにすることで、これを解決します。

プロジェクトでComposerを使用するには、composer.jsonファイルが必要です。 composer.jsonファイルは、プロジェクトにダウンロードする必要のある依存関係と、各パッケージのインストールが許可されているバージョンをComposerに通知します。 これは、プロジェクトの一貫性を維持し、下位互換性の問題を引き起こす可能性のある不安定なバージョンのインストールを回避するために非常に重要です。

このファイルを手動で作成する必要はありません。作成すると、構文エラーが発生しやすくなります。 requireコマンドを使用してプロジェクトに依存関係を追加すると、Composerはcomposer.jsonファイルを自動生成します。 このファイルを手動で編集しなくても、同じ方法で依存関係を追加できます。

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

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

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

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

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

  1. cd ~
  2. mkdir slugify
  3. cd slugify

次に、 Package.org を検索して、slugsの生成に役立つパッケージを探します。 Packagistで「スラッグ」という用語を検索すると、次のような結果が得られます。

Packagist Search: easy-slug/easy-slug, muffin/slug, ddd/slug, zelenin/slug, webcastle/slug, anomaly/slug-field_type

リストの各パッケージの右側に2つの数字が表示されます。 上の数字はパッケージがインストールされた回数を表し、下の数字はパッケージがGitHubでスターされた回数を示します。 これらの番号に基づいて検索結果を並べ替えることができます(検索バーの右側にある2つのアイコンを探します)。 一般的に言って、インストール数と星数が多いパッケージは、非常に多くの人が使用しているため、より安定する傾向があります。 パッケージの説明に関連性があるかどうかを確認して、必要なものであることを確認することも重要です。

単純なストリングからスラグへのコンバーターが必要です。 検索結果から、パッケージcocur/slugifyは、適度な量のインストールとスターがあり、よく一致しているようです。 (パッケージは、スクリーンショットが示すよりもページの少し下にあります。)

Packagistのパッケージには、ベンダーの名前とパッケージの名前があります。 各パッケージには、GitHubがリポジトリに使用するのと同じ形式の一意の識別子(名前空間)がvendor/packageの形式であります。 インストールするライブラリは、名前空間cocur/slugifを使用します。 プロジェクトでパッケージを要求するには、名前空間が必要です。

インストールするパッケージが正確にわかったので、composer requireを実行して依存関係として含め、プロジェクトのcomposer.jsonファイルを生成します。

  1. composer require cocur/slugify

Composerが依存関係をダウンロードすると、次の出力が表示されます。

Output
Using version ^3.1 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 (v3.1): Downloading (100%) Writing lock file Generating autoload files

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

  1. ls -l
Output
total 12 -rw-r--r-- 1 sammy sammy 59 Sep 7 16:03 composer.json -rw-r--r-- 1 sammy sammy 2934 Sep 7 16:03 composer.lock drwxr-xr-x 4 sammy sammy 4096 Sep 7 16:03 vendor

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

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

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

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

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

クラスをインスタンス化する前に、PHPスクリプトにvendor/autoload.phpファイルを含めるだけです。 このファイルは、最初の依存関係を追加したときにComposerによって自動的に生成されます。

アプリケーションで試してみましょう。 ファイル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はインストールされている以前のバージョンを置き換えます。 composer.lockファイルは、これらの変更を反映するように更新されます。

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

  1. composer update vendor/package vendor2/package2

依存関係を更新した後は、必ずcomposer.jsonファイルとcomposer.lockファイルをチェックインして、他の人がこれらの新しいバージョンをインストールできるようにしてください。

結論

Composerは、すべてのPHP開発者がユーティリティベルトに持つべき強力なツールです。 このチュートリアルでは、ComposerをDebian 9にインストールし、単純なプロジェクトで使用しました。 これで、依存関係をインストールおよび更新する方法がわかりました。

プロジェクトの依存関係を管理するための簡単で信頼性の高い方法を提供するだけでなく、コミュニティによって作成されたPHPパッケージを共有および検出するための新しいデファクトスタンダードも確立します。