hysryt / wiki

https://hysryt.github.io/wiki/
0 stars 0 forks source link

Composer #54

Open hysryt opened 6 years ago

hysryt commented 6 years ago

https://getcomposer.org/

hysryt commented 6 years ago

概要

PHP 用のパッケージ管理システム。 JavaScript の npm のようなもの。

リポジトリは packagist.org を使っている。 composer と packagist.org の運営はたぶん同じ。 packagist.org には誰でも登録してパッケージを公開できるが、オープンソースにする必要がある。 プライベートなリポジトリを使いたい場合は有料の packagist.com を使用する。 リポジトリとしてgitリポジトリも使用可能

autoload 機能も付いている。 composer でインストールしたライブラリなどは vender/autoload.php だけ読み込めば使用できるようになる。 さらに、自分用に名前空間とディレクトリの関連付けを追加で登録できる。 自分で autoload.php を書く必要はない。

hysryt commented 6 years ago

インストール

Mac なら Homebrew からインストールできる

$ brew install composer

そのほかのOSの場合はドキュメントを見る。

hysryt commented 6 years ago

オートロード

autoload 機能のためだけに composer を使うこともできる。

適当なディレクトリにcomposer.jsonを作成して、名前空間とディレクトリの関連を記述

{
    "autoload": {
        "psr-4": {
            "MySrc\\": "src/"
        }
    }
}

autoload.php を作成するために以下のコマンドを実行

$ composer install

すると vender ディレクトリと、その中に autoload.php が作成されるので、あとは各ファイルでこの autoload.php を読み込めば、autoload 機能を使うことができる。


autoload機能だけなら composer installcomposer dump-autoload でも良い。


PSR-4 ではクラス名とファイル名を同じにする必要がある。 クラス名とファイル名を別々にしたい場合(WordPressの規約など)は composer.json を以下のようにする。

{
    "autoload": {
        "classmap": ["src/"]
    }
}

autoload.php 生成時にファイルを解析して、ファイル名とクラス名を対応づけしてくれる。

hysryt commented 6 years ago

create-project

git clone + composer install と同じらしい Composerのcreate-projectが何をやっているのか調べてみた - Qiita

オプション 説明
--prefer-source ソースを使用する。開発中のものなど。
--prefer-dist パッケージを使用する。安定版など。

ちなみに source と dist は show コマンドで詳細を見ることができる

$ composer show phpunit/phpunit
(略)
source   : [git] https://github.com/sebastianbergmann/phpunit.git e2f8aa21bc54b6ba218bdd4f9e0dac1e9bc3b4e9
dist     : [zip] https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e2f8aa21bc54b6ba218bdd4f9e0dac1e9bc3b4e9 e2f8aa21bc54b6ba218bdd4f9e0dac1e9bc3b4e9
(略)
hysryt commented 6 years ago

実行スクリプト

インストールしたパッケージに実行スクリプトが含まれる場合、vendor/bin に配置される。

例えば phpunit をインストールすると、実行スクリプトとして vendor/bin/phpunit が配置される

hysryt commented 6 years ago

Changelog

1.7.0

1.9.0

hysryt commented 4 years ago

設定ファイル

composer.json に各種設定を記述する。

repositories

packagist 以外のカスタムパッケージリポジトリを設定する。 追加できるリポジトリのタイプとして次の種類が存在する。

タイプ 内容
composer composerリポジトリを指す。実体はサーバー上の packages.json ファイル。packages.json ファイルには distsource が記載された composer.json のリストが含まれている。
vcs git 、svn 、fossil 、hg を指定する。
pear 任意のpearリポジトリを設定できる
package composer をサポートしないプロジェクト用に使用する

Repositories

{
  "repositories": [
    {
      "type": "composer",
      "url": "http://packages.example.com"
    },
    {
      "type": "vcs",
      "url": "https://github.com/Seldaek/monolog"
    },
    {
      "type": "pear",
      "url": "https://pear2.php.net"
    },
    {
      "type": "package",
      "package": {
        "name": "smarty/smarty",
        "version": "3.1.7",
        "dist": {
          "url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
          "type": "zip"
        },
        "source": {
          "url": "https://smarty-php.googlecode.com/svn/",
          "type": "svn",
          "reference": "tags/Smarty_3_1_7/distribution/"
        }
      }
    }
  ]
}

リポジトリを追加することで require でそのリポジトリ内のパッケージへの依存関係を設定できる。 追加したリポジトリは上から順に検索され、最初に見つかったパッケージを使用する。

hysryt commented 4 years ago

バージョン指定

https://getcomposer.org/doc/articles/versions.md

VCS のバージョンとの関係

hysryt commented 2 years ago

PHPバージョン

Composerをそのまま使用するとComposerを動かしているPHPのバージョンに依存してしまう。 (PHPのバージョンによってインストールされるパッケージが変わるっぽい?) Composerを動かす環境と本番環境のPHPバージョンが同じとは限らないため、その場合はプラットフォームの情報を指定する必要がある。

https://getcomposer.org/doc/06-config.md#platform

また、composer check-platform-reqs を実行することで、その環境がインストール済みのパッケージの要件を満たしているかどうかを調べることができる。 https://getcomposer.org/doc/03-cli.md#check-platform-reqs