Composer: ローカルのパッケージをrequireする方法


ComposerはオンラインのレポジトリであるPackagistにホスティングされたパッケージをrequireするのが通常の使い方だが、ローカルのパッケージをrequireすることもできる。この機能は、自作のライブラリをPackagistに公開する前に、composerでインストールを試して使ってみたりする用途に使える。

Composerでローカルのパッケージを使用する方法

Composerでローカルのパッケージを使用するには、ローカルのパッケージを使いたい側のcomposer.jsonにrepositoriesを足す。repositoriesは配列で、その中にtype"path"のリポジトリ設定を追加する。urlは絶対パスでも相対パスでも構わない。相対パスの場合は、ローカルのパッケージを使いたい側のcomposer.jsonからの相対パスにする。options.symlinkfalseにすると、ローカルパッケージをcomposer installしたときにシンボリックリンクではなく、コピーして持ってくるようになる。

ローカルパッケージを使いたい側のcomposer.json
{
    "name": "suin/main-project",
    "repositories": [
        {
            "type": "path",
            "url": "../LocalPackage",
            "options": {
                "symlink": false
            }
        }
    ],
    "require": {
        "suin/local-package": "dev-master"
    }
}

一方のローカルパッケージのcomposer.jsonは特に細工する必要はない。

ローカルパッケージのcomposer.json
{
    "name": "suin/local-package",
    "autoload": {
        "psr-4": {
            "Suin\\ComposerUsingLocalRepository\\LocalPackage\\": "src/"
        }
    }
}

ローカルパッケージを使いたい側のcomposer.jsonを書いたら、composer installすればローカルパッケージが入ってくる:

$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing suin/local-package (dev-master): Mirroring from ../LocalPackage
Writing lock file
Generating autoload files

ちなみに完全なサンプルコードはGitHubに公開しているので、参考にされたし。