Help us understand the problem. What is going on with this article?

composerとは

More than 3 years have passed since last update.

composerとはPHPのパッケージ管理システムである。

なんでそんなものを使う必要があるのか。

パッケージ管理システムがない環境では、メンバーがそれぞれ必要なライブラリの公式サイトにアクセスし、zipファイルをダウンロードし、ローカルに展開する。
DB接続用に○○、ログ出力用に△△等々、さまざまなライブラリが必要になる。

パッケージ管理システムはそれらを個人の裁量に依存せずに導入できる仕組みを提供する。

以下のようなデメリットというかイニシャルコストが必要になるが、いまどきのPHPプロジェクトでは必須である。
- パッケージ管理システム自体のインストールが必要
- パッケージ管理システムの使い方の理解が必要(コマンドオプション、設定ファイルの記述方法)

composerを使えば、コマンド一発で必要なパッケージをすべてインストールできる。

  • composerはPackagistからパッケージを取得する。
    • Packagistはインターネット上に公開されているメインリポジトリである。
  • パッケージAをインストールするときに、Aに依存するB,C,Dも自動的にインストールしてくれる

実際に使ってみる

composerをインストール

下記からComposer-Setup.exeをDLして普通にインストールする。
(Windowsの場合)
https://getcomposer.org/download/

するとコマンドライン(cmd.exe)でcomposerが使えるようになる

任意のフォルダに下記のとおりcomposer.jsonをおく

composer.json
{
    "require": {
        "ircmaxell/random-lib": "1.0.0",
    }
}
  • composer.jsonのrequire内にあるパッケージをインストールする。
  • パッケージ名は"ベンダー名/プロジェクト名"となっている
  • バージョンを固定で指定してもよいし、範囲を指定してもよい。
    • "1.0.0"とすれば1.0.0が固定でインストールされる。
    • "1.0.*"のようにワイルドカードを指定すれば、その範囲で最新がインストールされる。

ちなみにこのライブラリはこれです。

https://packagist.org/packages/ircmaxell/random-lib

ランダムな数値や文字列を生成してくれます。

今回はサンプルなので、これひとつですが、使いたいライブラリがあればドンドンcomposer.jsonに追加していきます。

composer.jsonが配置されているディレクトリでcomposer installします。

c:\tmp>composer install
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.or
g/xdebug
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing ircmaxell/security-lib (1.0.0)
    Downloading: 100%

  - Installing ircmaxell/random-lib (v1.0.0)
    Downloading: 100%

Writing lock file
Generating autoload files

下記のとおりパッケージがダウンロードされ、ファイルが配置されます。

C:.
└─vendor
    ├─composer
    └─ircmaxell
        ├─random-lib
        │  ├─lib
        │  │  └─RandomLib
        │  │      ├─Mixer
        │  │      └─Source
        │  └─test
        │      ├─Mocks
        │      │  └─Random
        │      ├─Unit
        │      │  └─RandomLib
        │      │      ├─Mixer
        │      │      └─Source
        │      └─Vectors
        │          └─Random
        └─security-lib
            ├─lib
            │  └─SecurityLib
            │      └─BigMath
            └─test
                ├─Mocks
                └─Unit
                    └─Core
                        └─BigMath

はじめてcomposer installをすると、composer.lockが生成される。

composer.lockはチーム内で同じバージョンを共有するための仕組み。
文字通りバージョンを固定(ロック)する。

composer.lockが存在する状態でcomposer installをすると、composer.lockに記されたバージョンのパッケージがインストールされる。

composer updateをすると、composer.lockに記されたバージョンを無視して、composer.jsonに記載の範囲で最新版に更新される。

パッケージはvendor配下に配置される。

オートローダが自動的に配置される。

composer updateをすれば追加分が最新が反映される。

次は、インストールしたパッケージを使用します。

sample.php
<?php
require_once 'vendor/autoload.php';

$factory = new RandomLib\Factory;
$generator = $factory->getMediumStrengthGenerator();

$randomInt = $generator->generateInt(5, 15);
echo $randomInt;

echo "\n";

$randomString = $generator->generateString(32, 'abcdef');
echo $randomString;
?>

autoload.phpをrequireすればcomposerでインストールしたクラスを自動的にロードしてくれます。

実行結果はこんな感じです。

c:\tmp>php sample.php
13
cccdcbdfbdcbdfdaafdebdbbbffacbbc
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした