前書き
Composerは、PHPで人気のあるdependency managementツールであり、主にプロジェクトの依存関係のインストールと更新を容易にするために作成されています。 特定のプロジェクトが依存する他のパッケージをチェックし、プロジェクトの要件に応じて適切なバージョンを使用してそれらをインストールします。
このチュートリアルでは、Ubuntu 16.04システムにComposerをインストールして開始する方法について説明します。
前提条件
このチュートリアルでは、次のものが必要です。
-
Ubuntu 16.04を実行しているシステム
-
sudo permissionを使用した通常のユーザーとしてのサーバーへのアクセス
[[step-1 -—- installing-the-dependencies]] ==ステップ1—依存関係のインストール
Composerをダウンロードしてインストールする前に、サーバーにすべての依存関係がインストールされていることを確認する必要があります。
まず、次を実行してパッケージマネージャーキャッシュを更新します。
sudo apt-get update
それでは、依存関係をインストールしましょう。 Composerをダウンロードするにはcurl
が必要であり、インストールして実行するにはphp-cli
が必要です。 php-mbstring
パッケージは、使用するライブラリに関数を提供するために必要です。 git
は、Composerがプロジェクトの依存関係をダウンロードするために使用し、unzip
はzip形式のパッケージを抽出するために使用します。 すべては、次のコマンドでインストールできます。
sudo apt-get install curl php-cli php-mbstring git unzip
これで、次の手順に進むことができます。
[[step-2 -—- downloading-and-installing-composer]] ==ステップ2—Composerのダウンロードとインストール
Composerは、PHPで記述されたインストーラーを提供します。 ホームディレクトリにいることを確認し、curl
を使用してインストーラーを取得します。
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
次に、短いPHPスクリプトを実行して、インストーラーがComposer Public Keys / Signaturesページにある最新のインストーラーのSHA-384ハッシュと一致することを確認します。 以下の強調表示された値を最新のハッシュに置き換えることを確認する必要があります。
php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
出力
Installer verified
composer
をグローバルにインストールするには、以下を使用します。
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
これにより、Composerが/usr/local/bin
の下のcomposer
という名前のシステム全体のコマンドとしてダウンロードおよびインストールされます。 出力は次のようになります。
OutputAll settings correct for using Composer
Downloading 1.1.1...
Composer successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer
インストールをテストするには、次を実行します。
composer
そして、次のような出力が得られるはずです。
Output ______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 1.1.1 2016-05-17 12:25:44
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.
. . .
これは、Composerがシステムに正常にインストールされたことを意味します。
[.note]#このサーバーでホストするプロジェクトごとに個別のComposer実行可能ファイルを使用する場合は、プロジェクトごとにローカルにインストールするだけです。 NPMのユーザーはこのアプローチに精通しています。 この方法は、システムユーザーがシステム全体にソフトウェアをインストールする権限を持っていない場合にも役立ちます。
#
この場合、上記のようにインストールスクリプトをダウンロードして検証した後、次のようにインストールを実行できます。
php composer-setup.php
これにより、現在のディレクトリにcomposer.phar
ファイルが生成され、./composer.phar command
で実行できます。
[[step-3 -—- generate-the-composer-json-file]] ==ステップ3—composer.jsonファイルの生成
プロジェクトでComposerを使用するには、composer.json
ファイルが必要です。 composer.json
ファイルは基本的に、プロジェクトにダウンロードする必要のある依存関係と、各パッケージのインストールが許可されているバージョンをComposerに通知します。 これは、プロジェクトの一貫性を維持し、下位互換性の問題を引き起こす可能性のある不安定なバージョンのインストールを避けるために非常に重要です。
このファイルを手動で作成する必要はありません。そうすると、構文エラーが発生しやすくなります。 require
コマンドを使用してプロジェクトに依存関係を追加すると、Composerはcomposer.json
ファイルを自動生成します。 このファイルを手動で編集する必要なく、同様の方法で依存関係を追加することもできます。
Composerを使用してパッケージをプロジェクトの依存関係としてインストールするプロセスには、通常、次の手順が含まれます。
-
アプリケーションに必要なライブラリの種類を特定する
-
Composerの公式パッケージリポジトリであるPackagist.orgで適切なオープンソースライブラリを調査します
-
依存したいパッケージを選択してください
-
composer require
を実行して、依存関係をcomposer.json
ファイルに含め、パッケージをインストールします
シンプルなデモアプリケーションを使用して、これが実際にどのように機能するかを確認します。
このアプリケーションの目的は、特定の文をURLに適した文字列(slug)に変換することです。 これは通常、ページタイトルをURLパスに変換するために使用されます(このチュートリアルのURLの最後の部分など)。
プロジェクトのディレクトリを作成することから始めましょう。 これをslugifyと呼びます。
cd ~
mkdir slugify
cd slugify
Packagistでパッケージを検索する
次に、slugsの生成に役立つパッケージをPackagist.orgで検索します。 Packagistで「スラッグ」という用語を検索すると、次のような結果が得られます。
リスト内の各パッケージの右側に2つの数字が表示されます。 上部の数字はパッケージがインストールされた回数を表し、下部の数字はパッケージがGitHubでスターを付けられた回数を示します。 これらの番号に基づいて検索結果を並べ替えることができます(検索バーの右側にある2つのアイコンを探します)。 一般的に言って、インストール数とスター数が多いパッケージは、非常に多くの人が使用しているため、より安定する傾向があります。 また、パッケージの説明で関連性を確認することも重要です-それが本当にあなたが探しているものですか?
必要なのは、単純な文字列からスラグへのコンバータです。 検索結果から、パッケージcocur/slugify
は、適切な数のインストールとスターがあり、適切に一致しているようです。 (パッケージは、スクリーンショットが示すよりもページの少し下にあります。)
Packagistのパッケージにはvendor名とpackage名があることに気付くでしょう。 各パッケージには、GitHubがリポジトリに使用するのと同じ形式の一意の識別子(名前空間)があります:vendor/package
。 インストールするライブラリは、名前空間cocur/slugify
The namespace is what we need in order to require the package in our project.を使用します
パッケージを要求する
インストールするパッケージが正確にわかったので、composer require
を実行してそれを依存関係として含め、プロジェクトのcomposer.json
ファイルを生成することもできます。
composer require cocur/slugify
OutputUsing version ^2.1 for cocur/slugify
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
- Installing cocur/slugify (v2.1.1)
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 17 10:24 composer.json
-rw-rw-r-- 1 sammy sammy 2894 May 17 10:24 composer.lock
drwxrwxr-x 4 sammy sammy 4096 May 17 10:24 vendor
composer.lock
ファイルは、各パッケージのどのバージョンがインストールされているかに関する情報を格納するために使用され、他の誰かがプロジェクトのクローンを作成してその依存関係をインストールする場合は、同じバージョンが使用されるようにします。 vendor
ディレクトリは、プロジェクトの依存関係が配置されている場所です。 vendor
フォルダーはnotをバージョン管理にコミットする必要があります-composer.jsonファイルとcomposer.lockファイルのみを含める必要があります。
[.note]#すでにcomposer.json
ファイルが含まれているプロジェクトをインストールする場合、プロジェクトの依存関係をダウンロードするには、composer install
を実行する必要があります。
#
バージョンの制約について
composer.json
ファイルの内容を確認すると、次のように表示されます。
cat composer.json
Output{
"require": {
"cocur/slugify": "^2.1"
}
}
composer.json
のバージョン番号の前に特殊文字^
があることに気付くかもしれません。 Composerは、プロジェクトの安定性を保ちながら柔軟性を提供するために、必要なパッケージバージョンを定義するためのいくつかの異なる制約と形式をサポートしています。 自動生成されたcomposer.json
ファイルで使用されるキャレット(^
)演算子は、semantic versioningに続く、相互運用性を最大化するための推奨演算子です。 この場合、互換性のある最小バージョンとして2.1を定義し、3.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のバージョン制約の詳細については、the official documentationを参照してください。
[[step-4 -—- include-the-autoload-script]] ==ステップ4—Autoloadスクリプトを含める
PHP自体はクラスのロードを自動的に処理しないため、Composerは自動ロードスクリプトを提供します。これをプロジェクトに含めると、無料でオートロードを取得できます。 これにより、依存関係を操作し、独自の名前空間を定義することがはるかに簡単になります。
クラスをインスタンス化する前に、PHPスクリプトにvendor/autoload.php
ファイルを含めるだけです。
slugifyのサンプルアプリケーションに戻りましょう。 nano
を使用してtest.php
スクリプトを作成し、cocur/slugifyライブラリを使用します。
nano test.php
test.php
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
が生成されます。
[[step-5 -—- updating-the-project-dependencies]] ==ステップ5—プロジェクトの依存関係を更新する
プロジェクトの依存関係を更新するときはいつでも、update
コマンドを実行する必要があります。
composer update
これにより、プロジェクトで必要なライブラリの新しいバージョンがチェックされます。 新しいバージョンが見つかり、composer.json
ファイルで定義されているバージョン制約と互換性がある場合、インストールされている以前のバージョンが置き換えられます。 composer.lock
ファイルは、これらの変更を反映するように更新されます。
次を実行して、1つ以上の特定のライブラリを更新することもできます。
composer update vendor/package vendor2/package2
結論
このチュートリアルでは、Ubuntu 16.04でComposerを使用するための基本事項を説明しました。 Composerは、すべてのPHP開発者がユーティリティベルトに持つべき強力なツールです。
プロジェクトの依存関係を管理する簡単で信頼できる方法を提供するだけでなく、コミュニティによって作成されたPHPパッケージを共有および検出するための新しい事実上の標準も確立します。