|||||||||||||||||||||

なんぶ電子

- 更新: 

PHPのパッケージ管理アプリComposer

Composer(PHP)

ここではWindowsとDebianでのComposerのインストールの方法と、基本的な利用方法について書いています。

ComposerはPHPのパッケージ管理アプリです。パッケージとは機能を単位とするアプリやライブラリ群です。

自分で全てのコードを書く場合は必要がないですが、世に多く出回るパッケージを利用することでコードの省力化ができます。

パッケージの例を上げるとPHPからメールを送ることができるPHPMailerなどがあります。そのようなライブラリを利用する際に、Composerのコマンドを利用することで自作のコードと連携ができるようになります。

また、ひとつのパッケージが別のパッケージに依存しているという場合も、Composerが自動でその依存関係にあるパッケージをダウンロードしてくれます。

Windowsでインストール

Windows環境でインストールするには。ComposerのダウンロードページからWindows用のインストーラをダウンロードします。

インストラーに従い進めます。途中Setting Checkの箇所で、自分が利用しているPHPバイナリへのパスを求められます。その際、PATHに登録するか聞いてきますのでPATHに含めておきます。

もしプロキシを利用しているようなら、そのあとのプロキシの設定も環境に合わせて入力します。

Debianでインストール

Debianの方がWindowsよりも簡単です。DebianにはDebianのパッケージ管理アプリであるaptがありますので、それを利用してインストールすることができます。

$ su -
...
# apt update
...
# apt install composer
...

JSON

ComposerはJSONファイルによってコントロールされるので、先にJSONファイルについて簡単に説明しておきます。

詳しくはWikipedia:JavaScript Object Notationに載っていますが、JSONはJavaScript Object Notationの頭文字からとった言葉で、データの表記方法です。

Jsonファイルに含められるデータは次の通りです。

  • オブジェクト

    キーと値の組み合わせです。{ "Subject" : "How to JSON", "Price" : 1800 }といった風に、{}で囲み、:(コロン)で対を作り、,(カンマ)で区切ります。

  • 配列

    ["abc",123,true]というふうに、[]で囲み、,(カンマ)で区切ります。

  • 数値

    10進数の整数と浮動小数点数が利用できます。指数表記は1.234e+1のように記述します。この時eは大文字のEでもいいです。

  • 文字列

    常に"(ダブルクォーテーション)で囲います。エスケープにはバックスラッシュを使います。

  • true,false,null

    すべて小文字で表記します。

composer.json

Composerを制御するファイルはcomposer.jsonというファイル名になっています。ここにパッケージの依存関係やメタデータなどを記載します。

最もシンプルな書き方は次の通りです。nameというキーに、プロジェクトを作成するベンダー名/プロジェクト名(自分の名前とアプリ名)を記述します。requireに依存する外部のプロジェクト名をセットします。依存するプロジェクトがない場合は空のオブジェクト{}にしておきます。

{
  "name":"own-vendor/own-project-name",
  "require":{}
}

requireの中身を記述する際は、オブジェクトの中に、依存するベンダー名/プロジェクト名をキーにして、バージョンの条件をセットします。

バージョンはワイルドカード*をつかったり、「>=1.0 <1.1」等と入力して範囲を指定することもできます。

公式ページでサンプルとして記載されているmonologというログライブラリを使う場合のcomposer.jsonの記述は次のようになります。

{
  "name":"own-vendor/own-project-name",
  "require":{ "monolog/monolog":"1.0.*" }
}

comopser init

説明のためにここまでファイルを手書する前提で紹介しましたが、このファイルは「composer init」コマンドで対話的に作成するのが普通です。このダイアログの途中でファイルを自動で読み込むautoloadの設定も聞かれるので利用するようにしておきます。

>composer init

Welcome to the Composer config generator
  
This command will guide you through creating your composer.json config.
  
Package name (<vendor>/<name>) [vendor/composer]:
Description []:
Author [, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:
  
Define your dependencies.
  
Would you like to define your dependencies (require) interactively [yes]?
Search for a package: monolog/monolog
Enter the version constraint to require (or leave blank to use the latest version):
Using version ^2.3 for monolog/monolog
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]? n
Add PSR-4 autoload mapping? Maps namespace "Vendor\Composer" to the entered relative path. [src/, n to skip]:

Do you confirm generation [yes]? yes
Would you like to install dependencies now [yes]? no

途中で、依存(dependencies)パッケージを聞かれるので名前を入力します。dev-dependenciesは開発時にのみ使う依存パッケージを設定しますが、ここでは設定していません。Add PSR-4 autoload mapping?で始まる行がオートローダの設定です。デフォルトである空白のまま進めれば同時にインストールされます。

依存パッケージの設定をまったくしない場合は、このあと紹介するrequireコマンドで必要なパッケージを追加しながらプロジェクトを作成していくことになると思います。

依存パッケージを設定した場合、最後にそれをインストールするか聞いてきます。通常はyesで問題ないですが、ここでは説明の為あえてnoにしました。

comopser install

さきほど初期化時に依存関係を設定しながらインストールしませんでした。この場合composer.jsonがあるだけで、その中に記述されているパッケージはインストールされていません。この状態はgitなどからプロジェクトをcloneした状態と似ています。

composer.jsonファイルがある状態で、それと同じ階層で「composer install」を実行すると、中に書かれたライブラリのインストールが始まります。

インストールが終わると「composer.lock」というファイルが作られます。これは他の開発環境と同期をとるためのファイルです。依存するパッケージや、そのバージョンを全く同じにする際に用いられます。

composer.jsonとcomposer.lockの両方がある場合にcomposer installを実行すると、composer.lockファイルの内容が優先されます。ただしこの時もcomposer.jsonファイルは必須です。ふたつの間に差がある場合は、警告がでます。

requireとupdate

新しいパッケージを追加したい場合は「composer require パッケージ名」とすることで可能です。また、requireコマンドはインストール済パッケージのバージョンを変更したい場合にも利用可能です。

composer.lockファイルがある状態で、依存パッケージを変更したい場合は、composer.jsonファイルを修正した後「composer update」コマンドを実行します。composer.jsonファイルの修正がcomposer.lockファイルに伝播します。

バージョン指定の方法

composer.lockに記述するバージョン指定の方法についてもう少し詳しく書きます。

先に紹介したものを含め、バージョンの書式には次のようなものがあります。

  • ワイルドカード

    *をワイルドカードとして利用できます。1.*とすると1系という表現になります。

  • 比較演算子

    !=、<、<=、>、>=、が使えます。=を使いたいときは演算子なしで記述します。

  • and or

    andはスペースで区切ります「">=1.5 <2.00"」といった感じになります。

    orは||を利用します。「"1.8 || >2.5"」

  • バージョン範囲

    ~(チルダ)を使うとバージョンの範囲を指定できます。「"~2.3"」とすると2.3以上から指定されたメジャーバージョン(2)が変わらないところまで許容されます。「"~2.34"」とするとマイナーバージョン(3)が変わらないところまで許容されます。

    ^(キャレット)を使うと、セマンティック バージョニングのルールに則り互換性のあるバージョンまでをアップデート可能にします。具体的にはメジャーバージョンが1以上の時はメジャーバージョンを上げる更新をせず、メジャーバージョンが0の時はマイナーバージョンを上げる更新をしません。

セマンティック・バージョニング2.0.0

バージョン内の数値にもセマンティック・バージョニング2.0.0というバージョン表記に関する規格があります。

これは簡単に説明すると、バージョンを「メジャー.マイナー.パッチ」と区切り、後方互換のない場合はメジャーバージョンを、ある場合はマイナーバージョンを、後方互換のあるバグ修正はパッチバージョンを増やすというものです。

vendorフォルダ

インストールが終わるとvendorというフォルダができます。実際にインストールされたパッケージはこのフォルダ以下に収められます。

vendorディレクトリの中にはautoload.phpというファイルがあり、「require __DIR__ .'/vendor/autoload.php';」とPHPファイルに記述することで必要なパッケージをロードできるようになっています。

名前空間

composerでインストールするライブラリには名前空間が設定されています。

クラスやメソッド名の衝突を防ぐための仕組みです。

PHPファイルの最初の表記で「namespace sample;」とする事で名前空間を設定できます。名前空間はバックスラッシュか¥で階層的に持たせることもできます。

利用する際は、samplie¥method()と名前空間を指定して記述する方法や、該当のファイルにも同じ名前空間を設定することでmethod()とそのまま利用することもできます。

また複数の階層にわかれる場合は、相対的に指定することも可能です。ちなみに読み出しでは¥から始めることで絶対指定を表します。

use

名前空間に別名を付けたり、特定の名前空間にあるクラス名を設定することで修飾のないシンプルな表記にすることができます。

useを使う場合は常に絶対パスを指定するルールとなっている為、先頭に¥はつけません。

use some¥name¥space as alias;

これでsome¥name¥spaceの代わりにaliasという別名を使うことができます。別名を使って関数を呼び出す際も先頭に¥はつけません。

別名を付けずにuseを記述するとインポートとなります。

use some¥name¥space;

というインポートの書式は

use some¥name¥space as space

とほぼ同義になります。

なおインポートではクラスの指定もできます。

use some¥name¥space¥class;

このようにクラス名まで指定すれば、そのクラスは名前空間なしで使えます。

この辺りの話は【PHP超入門】名前空間(namespace・use)についてがわかりやすかったです。ありがとうございます。

長くなりましたが、require autload.phpと、useを使ってcomposerでインストールしたライブラリを使うのが肝となります。

レポジトリ

他、どんなライブラリがあるかというのはPackagistで探すことができます。

また以前は、先のサイトへの接続が遅かったこともあり、日本にミラーhttps://packagist.jp/も存在します。

こちらを利用するには、次のコマンドで設定します。

> composer config -g repos.packagist composer https://packagist.jp

元に戻すには、次のようにします。

> composer config -g --unset repos.packagist

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告