Saba note

醜悪コード Ugly hacks ITものづくり

Packagist & Githubで開発をするPHPライブラリ

前提条件

  • composerをそこそこ使える人。
  • gitをそこそこ使える人。
  • Githubのアカウントを作ってpush出来るように鍵の設定などを行っておく。
  • Travis CIのアカウントを作っておく。 (Githubのアカウントでログイン。)
  • Packagistのアカウントを作っておく。 (Githubのアカウントでログイン。)

Githubで適当なリポジトリを作成する

Pachagistに登録するリポジトリとして適当なリポジトリを作成します。
ここでは

osamuya/testPackage
https://github.com/osamuya/testPackage.git

として作成しておきます。
testPackage/としてプロジェクトを作成する感じでよいかと思います。

Packageとして開発するディレクトリの作成

Githubのリポジトリと連動してtestPackage/ディレクトリを作成しておきます。(ここで例のgit initとかリモートリポジトリの設定とか諸々やっておきます。)

mkdir /SOMEWHERE/testPackage
cd /SOMEWHERE/testPackage
git init
echo "# testPackage" >> README.md
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:osamuya/testPackage

こんな感じでいつものようにGithubでソース管理できるようにしておきます。

Composerの準備

この開発ディレクトリ内にコンポーザーを準備します。

cd PROJECTDIR
curl -s http://getcomposer.org/installer | php

準備ができたらcomposer.jsonを作成します。
composer initという対話型のコマンドがあるんですが、面倒なので私は基本使いません。viで開いてババっと書いた方がはやいです。
何をどう書くかはパッケージの内容に依存しますがミニマムでこんな感じになります。

{
    "name": "osamuya/test-package",
    "version": "0.1",
    "description": "testPackage",
    "keywords": ["Test", "API", "Develop"],
    "type": "library",
    "license": "MIT",
    "require": {
        "monolog/monolog": "^1.23.0",
    },
    "autoload": {
        "psr-4": {
            "osamuya\\TestPackage\\": "src/"
        }
    }
}

というような感じで必要最低限の情報を書けば大丈夫です。
nameは大文字禁止と言われるので小文字+ハイフンとかで設定するとよいです。通常testPackageのようなキャメルケースをtest-packageにする感じになります。

コンポーザーでインストールするといつものように指定したライブラリーがvendor以下に落ちてきます。
実際に特に依存ライブラリーは考えていなかったのですが、とりあえずチュートリアルとしてmonolog/monolog入れましたが、phpunitとかユニットテスト用のライブラリとか入れることになるような気がします。パッケージ開発に便利なパケージがパッケージストにたくさんあるのでそのパッケージを使ってみてください。(ややこしい)

php composer.phar install

ここまでで開発の準備自体は整いました。

Packagistからオートロードできるようにする

先のcomposer.jsonの

....
    "autoload": {
        "psr-4": {
            "osamuya\\TestPackage\\": "src/"
        }
    }
....

という記述でオートローダーが自動的に読み込んでくれるように設定するところになっています。
ここが最初ややこしくてよくわからなかったのですが、開発自体は、

vi /SOMEWHERE/testPackage/src/xxxxxx.php

として開発します。この/SOMEWHERE/testPackage/src/xxxxxx.phpをライブラリーとして、/SOMEWHERE/testPackage/test.phpみたいな感じで開発すればOKかと思います。
ある程度開発しちゃったら、Githubにコミット&プシュしてPackagistからcomposerで落とせるようにします。
自分で開発したものを自分でPackagistから落としてくると、/SOMEWHERE/vendor/testPackage/test.php

pachagistに登録

Packagistにアカウントがあれば、SubmitのところからGithubのリポジトリを登録するだけで完了します。https://の方のURIを登録します。
成功したら「My Packages」にライブラリーが登録されます。

自分のライブラリーを自分で落としてくる

登録が完了したらcomposerで自分が作成したライブラリーを落としてみます。

php composer require osamuya/testPackage:dev-master

コミットの再にtag(通常バージョンを入れる)を入れていなかったらPackagistに叱られます。まだ開発中で特にバージョンがない場合は:dev-masterで落とすことができます。
これで自動的にオートロードされるのでvendor以下のライブラリとして使うことができます。

おまけ

This package is not auto-updated. Please set up the GitHub Service Hook for Packagist so that it gets updated whenever you push!

というメッセージがPackagistの方で出ます。これはGithubのpush更新がPackagistに自動的に反映されないのでhookを作成して自動的に反映されるようにしなさいということです。Githubのサービスフックなので簡単に設定できます。


ComposerとPackagistでPHPライブラリを開発、テスト、公開する(1/2)
ComposerとPackagistでPHPライブラリを開発、テスト、公開する(2/2)
Composer による依存管理 と Packagist によるライブラリの公開
Laravel 5 パッケージのつくり方
PHP開発でComposerを使わないなんてありえない!Packagist公開編

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です