明滅するプログラマの思索

WEBエンジニアとして勤務している一介の男が、日々気づいたことをまとめるブログです

自作ライブラリをSubversionでバージョン管理し、composer でインストールする

自作のライブラリを composer 経由でインストールできるようにしたい。
ただし社内だけに公開したい。

そういった場合に、VCS(バージョン管理システム)にコミットしたものを composer 経由でインストール(チェックアウト)できます。
今回は、社内で VCS として Subversion を利用している場合の構築についてまとめます。

※以下 composer はインストール済みであるとします。
composer のインストールには、

lab.loose-leaf.com

を参考にしてください。

ライブラリを composer が扱えるよう構成する

まず、ベンダー を決めなければいけません。
通常ベンダーは所属する会社名や個人名を基につけられます。
今回はMyVendorとします。
Subversion にベンダー名のリポジトリを作成し、ローカルにチェックアウトしておきます。

svn co https://xxx.com/rep/myvendor myvendor

チェックアウトしたディレクトリをカレントディレクトリとして、話を進めます。

次に、パッケージ名を決めます。
今回はMyLibraryというパッケージ名にすることにします。
mylibrary ディレクトリを作成します。
今回は開発ブランチにソースコードを展開するため、その中に trunk ディレクトリを作っておきます。
trunk ディレクトリ内に src ディレクトリを作り、そこにライブラリのソースコードをコピーします(src ディレクトリが実際のソースコードの置き場となります)。

cd myvendor
mkdir mylibrary
cd mylibrary
mkdir trunk
cd trunk
mkdir src

その他 tests ディレクトリ、logs ディレクトリを設置しておきます。

mkdir tests
mkdir logs

tests ディレクトリは PHPUnit のテストケースの格納場所、logs ディレクトリは各種ログの置き場所となります。

composer.json を用意する

composer.json は自前で書くこともできますが、コマンドを使うと非常に楽に作成できます。

composer init

Package name (<vendor>/<name>) [myvendor/mylibrary]:myvendor/mylibrary
Description []: 
Author [, n to skip]: n
Minimum Stability []: stable
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
License []: MIT

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? 
Search for a package: 
Would you like to define your dev dependencies (require-dev) interactively [yes]? 
Search for a package: 

{
    "name": "myvendor/mylibrary",
    "type": "library",
    "license": "MIT",
    "minimum-stability": "stable",
    "require": {}
}

Do you confirm generation [yes]?

いくつか設問がありますが、上記のような感じで入力すればOKです。
これで composer.json が作成されます。
このcomposer.json を編集し、autoload の設定を入れておきます。

vi composer.json

# 以下を追記
    "autoload": {
        "psr-4": {
            "myvendor\\mylibrary\\": "src/"
        }
    }

※ ライブラリのソースコード命名規則が PSR-4 に則っている場合は上記でOKですが、そうでない場合は psr-0 としておきます。

これでmylibrary 内のファイル構成は以下のようになりました。

trunk ┳ src
      ┣ tests
      ┣ logs
      ┗ composer.json

これで Subversion にコミットします。

composer でインストールする

上記のライブラリを composer からインストールするための設定を行います。
インストール先のプロジェクト内の composer.json に、以下の設定を追記します。

vi composer.json

# 以下を追記
  "repositories": [
    {
      "type": "svn",
        "url": "https://xxx.com/rep/myvendor/mylibrary",
        "trunk-path" : "trunk",
        "branches-path": false,
        "tags-path": false
    }
  ],
  "require": {
      "myvendor/mylibrary": "@dev"
  }

バージョン指定の部分に @dev と記述することで、trunk からインストールすることができます。
そしてインストールを実行します。

composer install

vendor ディレクトリ内に myvendor/mylibrary が作成されれば成功です。