個人ブログ

インフラ、アプリケーションまわり

Composerが分らなかったから触ってみた.part1

背景

よく開発のときにcomposer installして、必要なパッケージを手元に落としてきたりします。

しかし、このコマンドを打って実際に何が起きているのか分かりませんでした。

そこで、Composerを軽く触ってみて、挙動について調べてみました。

そもそもComposerとは

Composerは「パッケージ管理ツール」という呼ばれ方をされます。

たとえば、Aというパッケージを利用したいとしましょう。

このとき、Aに属するファイルを1つ1つ手動でインストールする、という方法もあります。

しかし、 A を利用するために B というライブラリが必要だった場合はどうでしょうか?

手作業の場合は、依存関係があるファイルも1つ1つ収集する必要がありますが、これは面倒ですね。

Composerでできること

しかし、Composerを使えば、このような依存関係を自動的に解決してくれます。

1つ1つインストールする必要はなく、コマンド1つで、パッケージを利用するために必要なファイル群も含めてインストールしてくれるわけです!

さっそく使ってみる

簡略のため、あらかじめComposerがインストールされているものとします。

まず、適当なディレクトリを作成。

そのディレクトリ内でcomposer initを実行します。

$ mkdir composer_p
$ cd composer_p
$ composer init

対話形式でいくつか設定を加えることになりますが、一旦すべてスキップで構いません。

すると、ディレクトリ内にcomposer.jsonというファイルが作成されます。

ファイルをみると"require": {}という箇所があるかと思います。ここに、下記の記述をしましょう。

{
 省略,
 "require": {
        "nesbot/carbon": "^2.21"
 }
}

今回は、PHPで日付処理を簡単に扱うことのできるライブラリ、Carbonをインストールしてみます。

qiita.com

Composerでは、インストールすべきパッケージは、composer.jsonのrequireキーの配下に列挙していきます。

パッケージ名は、Packagistから確認できます。

nesbot/carbon - Packagist

それでは、列挙したパッケージをインストールするために、同じディレクトリ内で下記コマンドを実行しましょう!

$ composer install

するとvendorというフォルダが作成されます。Composerでインストールしたパッケージ群が、すべてこのフォルダ内に放り込まれます。

またcomposer.lockというファイルも作成されました。composer.lockは、先ほどcomposer.jsonに列挙したパッケージを取得するために、実際にどのファイルをインストールしたのかをひとまとめにしたものになります。

実際にパッケージが利用できるか確認

さて、Composerによってインストールしたライブラリ、Carbonが実際に利用できるか確認してみましょう。

Carbonを利用するためのtest.phpを作成し、下記を記述します。

<?php

require 'vendor/autoload.php';

use Carbon\Carbon;

$dt = Carbon::now();
echo $dt. "\n";

Carbonの詳しい使い方については、上にも貼ったリンクなどを参考にしてみてください。

冒頭でrequire 'vendor/autoload.php';という記述をしています。

Composerを用いてパッケージをインストールした際、vendor配下にautoload.phpというファイルが生成されます。

上記ファイルをrequireすることによって、vendor配下のファイルをオートロードすることができます。

そのため、namespaceをuseすることによって、Carbonインスタンスの使用が可能になります。

結果

$ php test.php
2019-07-28 11:29:31

想定通り、Carbonインスタンスによる現在時刻の出力ができています。