Composer

aptやnpmのようなphp向けのパッケージ管理システム。ライブラリやプロジェクトの依存関係を管理する。
composer.jsonというファイルでプロジェクトの依存関係を記載し、composer.lockで依存するパッケージのバージョンを固定している。
Packagist.orgは、Composerのリポジトリ。Composerはなにも指定されていない場合、ここから入手可能なパッケージを自動的に検索し取得する。

 sudo apt install php-curl
 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
 php composer-setup.php
 php -r "unlink('composer-setup.php');"
 mv composer.phar /usr/local/bin/composer

インストール手順

コマンド

Command-line interface / Commands

  • init
    • プロジェクトの初期設定としてcomposer.jsonを作成する
  • self-update
    • Composer自身を最新のバージョンのアップデートする
  • install
    • composer.jsonをもとに依存関係を解決しながらvendorフォルダにパッケージをインストールする
    • composer.lockが存在する場合、記載されたバージョンでインストールする
    • reinstallってのをつかうと指定したパッケージをクリーンインストールできる
  • remove
    • 指定したパッケージをcomposer.jsonから削除する
  • update
    • composer.lockに含まれるパッケージのバージョンを最新にする
    • packageを指定した場合、そのパッケージのバージョンをアップグレードする
  • require
    • composer.jsonのrequireフィールドに追加してインストールする
    • --devオプションを付けた場合、require-devフィールドに追加される
    • code:bash
      • $composer require [package name]
  • show
    • 利用できるパッケージのリストを表示する
    • パッケージを指定すると詳細を確認できる
    • --platformオプションを指定することでcomposerでインストールできないphpやphpの拡張機能を参照できる
  • depends
    • あるパッケージの他のパッケージの依存関係を確認できる

Composer.json

パッケージのバージョン指定方法

composer installcomposer updateされた場合にインストールするバージョンをcomposer.jsonで指定する方法について

  • x.y.z
    • 固定のバージョン指定
  • x.y.*
    • *を指定した任意のバージョンの最新のバージョンを取得する
    • パッチバージョンで指定した場合、マイナーバージョン内で最新のパッチバージョンのパッケージを取得
    • マイナーバージョンで指定した場合、メジャーバージョン内で最新のマイナーバージョンのパッケージを取得
  • ^x.y.z
    • 指定したバージョンより最新のパッチバージョンのパッケージを取得
  • ~x.y.x
    • 指定したバージョンより最新のマイナーバージョンのパッケージを取得

composer内の各キー

The composer.json schema

  • require
    • composer.jsonが配置されたプロジェクトが依存しているパッケージとそのバージョンを記載する
  • autoload / autoload-dev
    • composerはvendor/autoload.phpを生成し、ライブラリが提供するクラスなどをかんたんに利用できるようにしている

    • 自分のソースコードをオートローダーに追加したい場合、このautoloadフィールドに追加することで可能になる

    • exclude-from-classmapを設定することで特定のフォルダやファイルをクラスマップから除外できる

      "autoload": {
        "psr-4": {
          "Shoma\\Laratest\\": "src/"
        }
      },