Composerでローカルのパッケージを取り込む

タグ: Composer  

Composerはパッケージをインストールしてくれます。

自分や会社で使用しているライブラリーなどもパッケージとして利用できますよ。

今回は同じコンピューター内にあり、Gitでバージョン管理を行なっているソースを取り込んでみましょう。

サンプルを通して学習します。実例を通して見てもらえば、一発で理解できます。Composerの仕組みを理解するにも最適でしょう。

ディレクトリー構造

ホームディレクトリーかどこか適当な場所に、以下の構造でディレクトリー/ファイルを設置します。

+ ComposerPrivateRepoTest
    + DummyProject
        - composer.json
        - test.php
    + RepoProject
        + src
            + Ralabel
                - Output.php
        - composer.json

後片付けが簡単なように、同じディレクトリー下にリポの提供側と、利用側を置いています。

リポ提供側

RepoProjectがリポ提供側のディレクトリーです。

src/Ralabel以下をPSR-0規約でオートローディングするように、composer.jsonで指定してあります。Output.phpがダミーのライブラリーファイルです。

<?php

namespace Ralabel;

class Output
{
    static function sample()
    {
        return "エアコン・扇風機の適正使用を!";
    }
}

composer.jsonは提供のための情報をメインで設定しています。最低限度のものだけです。

{
    "name": "sample-vendor/ralabel",
    "description": "Composerサンプルプロジェクト",
    "license": "MIT",
    "autoload": {
        "psr-0": {
            "Ralabel\\": "src/"
        }
    }
}

descriptionlicenseは省略できるのですが、composer validateでチェックする時に警告メッセージが表示されるため、入れてあります。

PSR-0規約ではないライブラリーやパッケージは、クラスマップでも指定できます。クラスを使用していないコードはfilesで取り込めますが、リクエストを受けたり、コマンドラインから起動駈けられると、必ず読み込まれます。

このディレクトリーはGitリポにします。

git init
git add --all
git commit -m "initial commit"

これでデフォルトであれば、masterブランチが用意されます。ブランチ名も重要です。他のものも利用できます。

リポ利用側

利用側でメインとなるのはcomposer.jsonのみです。

{
    "repositories": [
        {
            "type": "vcs",
            "url": "/home/hiro/ComposerPrivateRepoTest/RepoProject/"
        }
    ],
    "require": {
        "sample-vendor/ralabel" : "dev-master"
    }
}

composerのデフォルトはpackagistに指定されたパッケージを探しに行きます。今回のローカルライブラリーは、当然登録していませんので、読み込み先を指定する必要があります。それがrepositoriesセクションです。

typevcs、バージョンコントロールシステムです。Git以外も使えますが、まあGitでしょう。urlは通常リポのあるURLを指定します。ローカルの場合はご覧の通り、絶対パスでディレクトリーを指定してください。当然皆さんの環境では、絶対パスは異なるはずです。変更してください。

今回はローカル上のリポですが、当然ながらWeb上のリポを指定可能です。

requireセクションではパッケージを指定します。その時のバージョンにブランチを指定し、コミットされている最新版を取り込めます。dev-masterはmasterブランチから取り込みます。ですからどのブランチも利用できるのですが、名前を覚えておくのが重要だったわけです。

では、リポを取り込んでみましょう。

composer install

vendorディレクトリーが作成され、オートローダーとsample-vendor/ralabelがコピーされます。

では、実際に動くか確かめましょう。test.phpを作成します。

<?php

include_once "vendor/autoload.php";

use Ralabel\Output;

echo Output::sample();

コマンドで実行しましょう。

php test.php

ライブラリーからリターンされた文字列が表示されます。

リリース時の注意

言うまでもなく、composer.jsonはローカルファイルを示しています。そのままどこかのサーバーへcomposer.jsonを上げてcomposer installでインストールできませんし、composer updateで自前パッケージを更新することもできません。

公開できるものであればGitHubにあげてしまう手があります。公開できなければGitHubを始め有料・無料のプライベートリポを利用するか、もしくは自前の公開サーバーをお持ちなら、そこから読めるようにしましょう。

もしくは、リリースしたサーバーではcomposer操作を行わず、ローカルで作業したものを常にFTPやrsyncなどで、転送する方法もありますね。

リリースやデプロイの前に、後々の管理方法を考えておきましょう。