k-holyのPHPとか諸々メモ

Webで働くk-holyがPHP(スクリプト言語)とか諸々のことをメモしていきます。ソースコードはだいたいWindowsで動かしてます。

Windowsでwgetとcomposer

今更ながら Composer というものを使ってみようと思い立ち、Windows7wgetコマンドとcomposer.pharを使ってみたメモです。

検索してみたら、GNU toolsのWindows版プロジェクト「GnuWin32」にwgetコマンドが移植されていることが分かったので、まずはそちらをインストールします。
Wget for Windowsから、BinariesとDependenciesのZipファイルをダウンロード。
(現在のバージョンは1.11.4)

両方を展開して、Dependenciesの方のbinディレクトリにある4つのDLLファイル(libeay32,libiconv2,libintl3,libssl32) を、Binariesの方のbinディレクトリにコピー。
Binariesの方を適当な名前で適当な場所に移動。今回は c:\Applications\GnuTools としました。

以下、Console2にて。wgetコマンドでcomposer.pharをダウンロードしてみます。

$ c:/Applications/GnuTools/bin/wget http://getcomposer.org/composer.phar
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = c:\Applications\GnuTools/etc/wgetrc
--2012-05-08 21:59:57--  http://getcomposer.org/composer.phar
getcomposer.org をDNSに問いあわせています... 94.23.218.218
getcomposer.org|94.23.218.218|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 464824 (454K) [application/octet-stream]
`composer.phar' に保存中

100%[======================================>] 464,824     77.0K/s 時間 6.2s

2012-05-08 22:00:04 (73.0 KB/s) - `composer.phar' へ保存完了 [464824/464824]

無事にダウンロードできました。

次にComposerを入れてみます。

Composerとは、JSON形式のファイルでパッケージの依存情報など記述しておけば、コマンドでまとめてインストールできる仕組みで、ここ半年くらいでよく目にするようになりました。
PEARパッケージマネージャ(pear)の後継として pyrus というものがありますが、ComposerはPHPのパッケージ配布サービス Packagist を標準としつつ、PEARパッケージも取り込むもののようです。

まずは、以下のように必要なパッケージの情報を記述した、composer.jsonファイルを用意します。

{
    "require": {
        "symfony/class-loader": "2.1.*",
        "symfony/http-foundation": "2.1.*"
    }
}

composer.pharを使ってインストールしてみます。

$ php composer.phar install
Installing dependencies
  - Package symfony/http-foundation (dev-master)
    Cloning 54c22f4bf8625303503a117dcc68544d3f8ac876




  [RuntimeException]

  Failed to clone http://github.com/symfony/HttpFoundation, git was not found, check that it is installed and in your PATH env.


  'git' は、内部コマンドまたは外部コマンド、

  操作可能なプログラムまたはバッチ ファイルとして認識されていません。







install [--prefer-source] [--dry-run] [--dev]

どうやら内部的にgitコマンドが呼ばれるらしいのですが、Console2からだと失敗してしまいました。
gitコマンド自体は一応使えるようにしてるんですが…

とりあえずGit Bashで試してみます。

$ php composer.phar install
Installing dependencies
  - Package symfony/http-foundation (dev-master)
    Cloning 54c22f4bf8625303503a117dcc68544d3f8ac876

  - Package symfony/class-loader (dev-master)
    Cloning 0e6ee8d07dda6920106048247d41249201604e76

Writing lock file
Generating autoload files

うまくいきました。
コマンドを実行したディレクトリにcomposer.lockファイルが作成され、vendorディレクトリ直下にautoload.phpスクリプト、vendor/composerディレクトリにはそこから利用されているクラスローダ(Composer\Autoload\ClassLoader)などが作成されています。
vendor/composerディレクトリには、autoload_namespaces.phpやinstalled.jsonといったファイルが作成されており、どうやら前者はcomposerからインストールしたパッケージの名前空間を定義、後者はインストールしたパッケージの依存情報を一括して管理しているようです。
もちろん、composer.jsonで指定した symfony/http-foundation (SymfonyのHttpFoundationコンポーネント) と symfony/class-loader (ClassLoaderコンポーネント) も、vendorディレクトリにインストールされています。

そして何をするのかというと…

Create your own framework... on top of the Symfony2 Components (part 1) - Fabien Potencier
http://fabien.potencier.org/article/50/create-your-own-framework-on-top-of-the-symfony2-components-part-1

Fabienさんのシリーズ記事を参考にしながら、SymfonyのHttpFoundationコンポーネントを色々試してみようかと。


ちなみに現在、上記パート1は日本語訳もされてます。

[追記]
パート12まで日本語翻訳されました。
@masakielastic様ありがとうございます!

Web フレームワークをつくろう - Symfony コンポーネントの上に (パート 1) | Symfony2日本語ドキュメント
http://docs.symfony.gr.jp/symfony2/create-your-framework/part01.html


Composerの概要や主旨については、こちらの記事を読めばいいと思います。(英語ですが)

Composer: Part 1 – What & Why | Nelmio Blog
http://nelm.io/blog/2011/12/composer-part-1-what-why/

Composer: Part 2 – Impact | Nelmio Blog
http://nelm.io/blog/2011/12/composer-part-2-impact/