PHP パッケージ管理の観点から見ると、PHP の開発は非常に遅く、その結果、PEAR のようなツールを使用するプログラマーはほとんどいません。代わりに、ほとんどの開発者は、DB インタラクション、ORIM、Oauth、Amazon S3 統合など、コードを処理するための独自のお気に入りのフレームワークを選択します。欠点は、フレームワークを切り替える (またはフレームワークの使用に戻る) ことが悪夢のように感じられることです。新しいツールを使用するにはすべてを学び直す必要があり、それは簡単ではないからです。 Composer は、これらの問題の解決を支援します。
はじめに
Composer は、自らを「すべてのプロジェクトのグルー メーター」として位置づけることで問題の解決に乗り出しました。これは、他の開発者がアプリケーションに簡単にプラグインできる形式でパッケージを作成、開発、共有できることを意味します。
この記事では、Composer パッケージのインストール方法と使用方法について説明します。記事の最後では、コード ブロックを任意のフレームワークに挿入して体験することができます。CodeIgniter、FuelPHP、Laravel、Symfony2、Lithium、Yii、Zend などを使用できます。
インストール
Composer は 2 つの論理部分で構成されます。1 つはパッケージの保存に使用され、もう 1 つはコードの検出、ダウンロード、更新、共有を支援するコマンド ライン アプリケーションです。
$ cd/path/to/my/project $ curl -s http://getcomposer.org/installer| php
プロジェクト リストには、すべての論理コード ライン ツールを含むcomposer.phar ファイルがあります。次のコードを実行すると、インストールが成功したかどうかを確認できます。
$ php composer.phar
このコマンドを実行すると、使用可能なすべてのコマンドが表示されます。
個人的には、次のコマンドを使用することをお勧めします:
$ sudo mv composer.phar /usr/bin/composer
このファイルを bin ディレクトリに移動すると、コマンドを簡素化できます。
$ composer about
Windows で実行している場合は、このファイルをダウンロードし、PHP パーサー経由でどこにでもインストールできます。
コンポーザー.json ファイルを解析します
Ruby プログラマーであれば、このファイルは Gemfile ファイルに非常に似ていると感じるでしょう。また、Node プログラマーであれば、このファイルは package.json ファイルに非常に似ていると感じるでしょう。同様に、Composer は、composer.json ファイルを使用して、アプリケーションのニーズに基づいて設定とパッケージ化を指定します。
ほとんどの基本的な形式では、コンポーザー ファイルは次のようになります:
{ "require": { "kriswallsmith/assetic": "*" } }
これは、「kriswallsmith」によって作成され、指定されたバージョンの「assetic」パッケージが必要であることを意味します。代わりに次のコマンドを使用して、特定のバージョンを指定することもできます:
"kriswallsmith/assetic": "1.0.3"
次のメソッドを使用することもできます:
"kriswallsmith/assetic": "1.0.*"
これには若干の変更が加えられていますが、1.1.0 にはアップグレードされません。プログラマーはインターフェイスの微妙な変更に注意する必要があります。
インストール要件
これで、composer.json ファイルの下に 1 つ以上のパッケージが存在し、この時点で実行できるようになります:
$ phpコンポーザー.pharインストール
あるいは、私のアドバイスに従えば、Unix マシン上で実行するだけです:
$コンポーザーインストール
ファイルがダウンロードされ、アプリケーションのルート ディレクトリの下のベンダー フォルダーに配置されることがわかります。このロジックでは、次の構成も使用できます:
{ "require": { "kriswallsmith/assetic": "1.0.*" }, "config" : { "vendor-dir" : "packages" } }
オートロード
PHP ではオートローディングは少し面倒なので、開発者は独自の方法でオートローディングを行う必要があります。たとえば、Smarty パッケージは独自の自動読み込みを使用します。開発者によっては、複数のクラスを 1 つのファイルに入れたり、ファイル名を小文字にしたりすることがあります。このようなやり方はカジュアルすぎます。
公式 PHP コミュニティは、これらの恣意的な慣行を標準化するために PSR-0 標準を作成しました。 Composer はデフォルトでこの標準をサポートします。 Composer には PSR-0 自動読み込みメカニズムが付属しています。次のコード行をプロジェクトに追加します。
include_once './vendor/autoload.php';
当然のことながら、autoload.php ファイルのディレクトリが変更された場合は、コードにも対応する変更を加える必要があります。
以下では、アプリケーションで次のコードを使用できます:
<?php use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; $js = new AssetCollection(array( new GlobAsset('/path/to/js/*'), new FileAsset('/path/to/another.js'), )); // the code is merged when the asset is dumped echo $js->dump();
PSR-0 の命名規則の本質は次のとおりです:
次の例は Buzz HTTP パッケージです:
$browser = new Buzz\Browser; $response = $browser->get('http://www.google.com'); echo $browser->getLastRequest()."\n"; echo $response;
看起来像是被美化的file_get_contents(),但是它处理所有类型的智能逻辑,并且在后台处理HTTP Response/Request,你也会发现命名空间语法也不是那么的强烈。
真实的世界
目前,大多数PHP存储依靠主代码库。如果你使用Facebook SDK,例如,你仅仅从GitHub或者zip文件中通过复制粘贴的方式把版本推到你的代码中,然后把它放到你的版本控制系统里面,将会变更。
版本和你的代码只是作为静态文件放在里面,在某种意义上,你可能会忘记升级,如果你关注到Facebook已经发布了一个新版本。最新版本文件会显示在最上面。
使用Composer就无需关注版本变化情况,你只需运行一下更新,那么所有需要更新的都会自动更新。但是为什么还会有大量的代码在你的仓库里呢?你不需要它们在那里吗?
最干脆的做法是添加vendors到你的“Ignore”列表里面(例如gitignore)并且让你的代码完全离开那里。当你在部署代码的时候,你只需运行composer install或者composer update。
如果你想使用更熟练,你可以手动运行整个过程,如果你有云端托管你可以设置hooks,一旦代码发布,就运行。
总结
将来,你将会看到更多的Composer,各种丰富多彩的框架已经开始提供了多种层次的集成。FuelPHP将构建Composer包,CodeIgniter提供自动加载并且已经在Symfony2上广泛使用。
使用Composer添加相关包到你的项目里面是一个很好的方式,无需安装PECLI扩展或者复制粘贴一个系列文件。那种方式已经很过时了,并且还浪费你大量的时间。