Composerって何?!PHPのライブラリをインストールするのにPEARやPECLは古い?

2020年7月27日システムcomposer,PHP,php-fpm

Composerって何?!PHPのライブラリをインストールするのにPEARやPECLは古い?
Composerって何?!PHPのライブラリをインストールするのにPEARやPECLは古い?

どうも、UT(@ut_1029)です。今回はPHPのライブラリを使う際に利用する「Composer」について調べました。

これまでPHPのライブラリをインストールする際に利用していたPEARやPECLとComposerって何が違うのかも合わせて調べました。

この記事でわかること

  • Composerって何?利点は?
  • ComposerってPEARやPECLと何が違うの?
  • Composerの使い方は?

Composerについて

PHPでプログラミングしていると、Composerという言葉をよく耳にします。

例えば「Composerでライブラリ入れてね」など開発現場で言われます。そんな時に「分かりました」っと一つ返事できるようにComposerについて理解しておきましょう!

※PHP7.4からPEARがデフォルトでインストールされなくなりました。なので、これからはComposerを積極的に利用することをおすすめします。詳しくは「PHP7.4ではPEARがインストールされなくなる」で解説されています。

Composerって何?

Composerとは、PHP向けのソフトウェアで必要なライブラリの依存関係を管理するパッケージ管理システムです。よく似たツールでnode.jsのパッケージ管理システムのnpmなどがあります。

Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.
Composerは、PHPでの依存関係管理のためのツールです。プロジェクトが依存するライブラリを宣言することができ、ライブラリを管理(インストール/更新)します。

https://getcomposer.org/doc/00-intro.md

ざっくり説明すると、ライブラリ(パッケージ)とそれに必要なライブラリをサクッと自動でインストール出来る便利なツールです。

パッケージとは

まとまったライブラリのこと。

ライブラリの依存関係とは

ライブラリを利用するために必要な環境(ライブラリや環境設定など)の関係性。

使うメリットは?

Compoerを使うメリットについて紹介します。

ライブラリの依存関係を解決してくれる

Composerを利用する最大の利点であるライブラリの依存関係を解決してくれる点です。

依存関係の一例として、ライブラリAをインストールするとします。すると、ライブラリAをインストールするにはライブラリBが必要だとエラーで失敗したとします。

つまりライブラリAはライブラリBに依存していると言えます。この場合ライブラリBを先にインストールしてライブラリAをインストールする必要があります。

Composerを利用するとライブラリAをインストールすると、自動でライブラリBもインストールしてくれます。しかもコマンド一発(超便利)

$ composer require ライブラリA

PHP7.4からPEARがデフォルトでインストールされなくなった

PHP7.4からPEARがデフォルトでインストールされなくなりました。なので、これからはComposerを積極的に利用することをおすすめします。

詳しくは「PHP7.4ではPEARがインストールされなくなる」で解説されています。

Composerを使った流れ

Composerを使った簡単な流れを紹介します。詳しくは「PHPのライブラリ管理ツール「Composer」入門」で解説されています。

composer.jsonを用意

ますはcomposer.jsonというJSONファイルを作成します。

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

composer.jsonには、利用するパッケージ(ライブラリ)を定義します。列挙したパッケージがComposer によって管理されることになります。

composer.jsonの詳しい書き方については「composer 導入をまじめに考える」で紹介されています。

Composerでインストール

composer.jsonで定義したパッケージをComposerでインストールします。

$ composer install

すると、vendorフォルダが出来上がります。

vendor

vendorというフォルダの中には、composer.jsonで定義したパッケージがダウンロードされ格納されます。

./
├── composer.json
├── composer.lock
└── vendor
    ├── autoload.php
    ├── composer
    └── monolog

autoload.php

vendorフォルダの直下には、autoload.phpというファイルも生成されます。このautoload.phpを読み込むことでcomposer.jsonで定義したパッケージを利用することができます。

require_once("vendor/autoload.php");

Composerを使ってみる

それでは実際にComposerを使ってみましょう!

Composerをインストールする

まずはComposerをインストールします。公式のComposerサイトの「Download Composer Latest: v1.10.9」を見ながらやります。

PHPがインストールされていることを前提に進めます。またPHPが複数インストールされている場合は、対象のPHPにてcomposer-setup.phpを実行しましょう!

あと一応ドキュメントルートへcomposer-setup.phpを配置しないよう注意しましょう!セキュリティ的に危ないので!

composer-setup.phpを取得

公式composerサイトよりcomposer-setup.phpを取得します。
(自分は/tmpへ移動して/tmpへcomposer-setup.phpを配置しました。)

$ cd /tmp
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

一応ちゃんとcomposer-setup.phpを取得できたか確認します。

$ ls -la | grep composer
-rw-rw-r--  1 user user 277509  7月 24 16:40 composer-setup.php

取得したcomposer-setup.phpが壊れていないか確認します。

$ php -r "if (hash_file('sha384', 'composer-setup.php') === 'e5325b19b381bfd88ce90a5ddb7823406b2a38cff6bb704b0acc289a09c8128d4a8ce2bbafcd1fcbdc38666422fe2806') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified

composer-setup.phpをPHPで実行してcomposer.pharを作成

$ php composer-setup.php
All settings correct for using Composer
Downloading...

Composer (version 1.10.9) successfully installed to: /tmp/composer.phar
Use it: php composer.phar

一応composer.pharができていることを確認します。

$ ls -la | grep composer
-rw-rw-r--  1 user user  277509  7月 24 16:40 composer-setup.php
-rwxr-xr-x  1 user user 1980987  7月 24 16:46 composer.phar

composer-setup.phpは不要なので、削除します。

$ php -r "unlink('composer-setup.php');"

一応削除できたか確認します。

$ ls -la | grep composer
-rwxr-xr-x  1 user user 1980987  7月 24 16:46 composer.phar

Composerの動作確認

composer.pharの動作確認をします。

$ ./composer.phar -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.10.9 2020-07-16 12:57:00

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message
(以下略)

Composerコマンドをどこからでも利用できるように

/usr/local/binフォルダへcomposer.pharを移動させて、どこからでも実行できるようにします。
(/usr配下へファイルを配置するにはrootユーザーの権限が必要となります)

/usr/local/binフォルダとは

一般的には自作のスクリプトなどを配置しておくことディレクトリです。またLinuxディストリビューションをインストールしたばかりのときは、このディレクトリは空であることも多い。

参照:「/bin」「/usr/bin」「/usr/local/bin」ディレクトリの使い分け

$ sudo mv composer.phar /usr/local/bin/composer
$ ls -la /usr/local/bin/ | grep composer
-rwxr-xr-x  1 user user 1980987  7月 24 16:46 composer

動作確認をします。

$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.10.9 2020-07-16 12:57:00

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display this help message

Composerを使ってPHPフレームワークの環境を構築

ToDo:CakePHPとLarabelを予定…

ComposerがPEARとPECLの違う点について

PHPを使って開発する人の中に、ComposerってPEARやPECLと何が違うの?と思っている人もいると思います。なので、CompoerはPEARやPECLと何が違うのかについて調べました。

PEARやPECLよりComposerを積極的に使う理由

  • PEARは、PHPをインストールしてもデフォルトで用意されなくなった。(PHP 7.4以降)
  • PEARを用意するオプションが非推奨となった。
  • PEARライブラリは、更新頻度が低下している。

詳しい内容は「[PHP]pecl,phpize,extensionという単語を見て頭痛がするあなたへの処方箋」で解説されていました。

PHPでライブラリをインストールする方法

PHPでライブラリをインストールする方法は、大きく分けると以下のようなものがあります。

ツールライブラリの種類配布先
ComposerPHPで書かれたライブラリPackagist (https://packagist.org/)
PECLC言語で書かれたライブラリPECL (https://pecl.php.net/)
PEARPHPで書かれたライブラリPEAR (https://pear.php.net/)
PHPでライブラリをインストールする方法

PECLについて

PECL(ピクル:PHP Extension Community Library)とは、PHPで利用できる拡張ライブラリ(パッケージ)を提供しているサービスです。

PECL is a repository for PHP Extensions, providing a directory of all known extensions and hosting facilities for downloading and development of PHP extensions.
PECLはPHP拡張機能のリポジトリであり、既知のすべての拡張機能のディレクトリと、PHP拡張機能のダウンロードと開発のためのホスティング機能を提供します。

The packaging and distribution system used by PECL is shared with its sister, PEAR.
PECLが使用するパッケージングおよび配布システムは、姉妹のPEARと共有されています。

https://pecl.php.net/

PECLの公式サイトに書かれている文章だと分かりにくいですが、簡単に言うと、PHPエクステンションを配布するWebサイトおよびツールの名前であり、コマンド名でもあります。

PECLの特徴と補足知識

PECLで提供されるライブラリは、C言語で書かれています。なので高速に動作します。ただPECLのライブラリは、PHP内部の処理に依存することがあるのでPHPのアップデート時に注意が必要です。

PECLコマンドは内部的にPEARライブラリを使っています。

PEARについて

PEAR(PHP Extension and Application Repository)とは、PHPで利用する事ができるライブラリ(パッケージ)を提供しているサービスです。

PEAR is a framework and distribution system for reusable PHP components.
PEARは、再利用可能なPHPコンポーネント用のフレームワークおよび配布システムです。

https://pear.php.net/

PEARの特徴と補足知識

PEARが提供しているライブラリは、PECLと違いPHPで書かれています。なのでPECLより速度は劣ります。

PEARのインストールには、–with-pearで明示的にPEARを有効にしなければなりません。ただし、このオプションは非推奨であり、将来削除される可能性があります。

まとめ

今回はPHPのライブラリをインストール際によく利用されるComposerやPEAR、PECLについて解説しました。これからは、PEARやPECLよりComposerを利用することをおすすめします。

またPHPやphp-fpmの環境について仕組みを理解するために解説した「PHP-fpmの環境設定するにあたって理解出来るように仕組みについて調べてみた!」も是非ご覧ください。

プログラミング解説講座

UT
UTの日常

当ブログ(UTの日常)を運営しているUTは「プログラミング関係の仕事をしている30代1児の父親」です。詳しくは「UTのプロフィール」をご覧ください。

UTの日常では、システム開発における LinuxPHPJavaScriptJQueryMySQLなどの知識やプログラミング技術、サーバ構築や運用などAWSをメインに知識を紹介しています。

内容としては、Webシステムの開発中や運用中に発生したトラブルやエラーの対応や解決方法をまとめた備忘録やWebシステム開発の方法を未経験者の人を対象に説明したプログラム教科書を記事にしています。
Webシステム開発の知識やプログラム技術の備忘録

2020年7月27日システムcomposer,PHP,php-fpm

Posted by UT