packagist.org にパッケージを公開する方法について記載します.
下記の記事が非常に良いのですが,情報が古くなってきている箇所があるため新規に記事とします.
一度やってみないとわからないよねということで,手順に従っていけば,サンプルプロジェクトのような自作パッケージを公開できる形で作成しました.
ただ,説明については元記事のほうが詳しいため,元記事を参照しつつ読んでいただければと思います.
サンプルプロジェクト
上記のサンプルプロジェクトを作成し,公開するという形で説明していきます.
手順と解説
必要なディレクトリとファイルの作成
まずは前述の記事同様,サンプルプロジェクト用のディレクトリを作成します.
mkdir MyLibrary
cd MyLibrary
curl -s http://getcomposer.org/installer | php
composer.jsonを作成します.
name
, authors
, autoload
あたりの項目についてはこのままではアップロードできないと思いますので,適宜変更してください.
{
"name": "tarohida/tarohida",
"description": "composer publish test",
"keywords": ["tarohida"],
"type": "library",
"license": "MIT",
"homepage": "https://github.com/tarohida/composer_publish_lib",
"authors": [
{
"name": "Taro Hida",
"email": "sk8trou@gmail.com"
}
],
"require-dev": {
"phpunit/phpunit": "*"
},
"autoload": {
"psr-4": {
"Tarohida\\Tarohida\\": "src/Tarohida/Tarohida/"
}
}
}
次に,psr-4形式で読み込む対象としている src/Tarohida/Tarohida/
ディレクトリを作成します.
autoload
で指定している箇所です.
mkdir -p src/Tarohida/Tarohida/
ディレクトリ以下,src/Tarohida/Tarohida/Tarohida.php
を作成します.
ファイル名とクラス名が一致していれば,クラス名は何でもよかろうと思います.
<?php
namespace Tarohida\Tarohida;
class Tarohida
{
private $word;
public function say()
{
return $this->word;
}
public function __construct($word)
{
$this->word = $word;
}
}
namespace
を, composer.json
に記載した Tarohida\Tarohida\
(私の場合) に設定してください.
テストの作成
※ パッケージ公開に必須のものではないため,とりあえず動かしてみたいみたいな場合は飛ばしても大丈夫です.
テストも作成してみます.
以下発行すると,require-dev
に記載してある phpunit/phpunit
がインストールされるはずです.
php composer.phar install
phpunit.xml
は作成しなくても問題なかったため,作成していません.
実際に tests/TarohidaTest.php
という名称のテストを作成し,実行して成功することを確認します.
mkdir tests/
<?php
require_once 'vendor/autoload.php';
use PHPUnit\Framework\TestCase;
class TarohidaTest extends TestCase
{
public function testTarohidaSay()
{
$tarohida = new Tarohida\Tarohida\Tarohida('Hello, World');
$this->assertSame('Hello, World', $tarohida->say());
}
}
vendor/bin/phpunit ./tests/TarohidaTest.php
ライブラリをGitに登録
.gitignore
を作成.
vendor/
composer.lock
composer.phar
.phpunit.result.cache
タグ付けを行います.
参考元の記事とは異なり,どうもvx.y.zの形式が望ましいようです.
git tag v1.0.0
git add -A
git commit -m 'init'
git remote add origin https://example.com/hogeuser/hogerepo/
git push origin main
Githubのレポジトリにプッシュします.
Packagistへの公開
いよいよPackagistへの公開を行います.
composer.json
のフォーマットチェックを行います.
php composer.phar validate
packagist.org アカウントの作成と,パッケージのSubmit
https://packagist.org にアクセス.
ユーザ登録を行い,https://packagist.org/packages/submitSubmit のURLからGithubのプロジェクトをSubmit します.
これで,Packagistへの登録が完了します.簡単!
例:https://packagist.org/packages/tarohida/tarohida
ライブラリを使う.
任意のディレクトリで,
composer require tarohida/tarohida
を実行すると,nsbot/carbon
等を利用するのと同じような感覚で自分の作成したライブラリを利用することができます.
$ composer require tarohida/tarohida
Using version ^1.0 for tarohida/tarohida
./composer.json has been created
Running composer update tarohida/tarohida
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking tarohida/tarohida (v1.0.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Downloading tarohida/tarohida (v1.0.0)
- Installing tarohida/tarohida (v1.0.0): Extracting archive
Generating autoload files
タグを打っていない場合は,dev-main
というバージョンを指定しておかないと require
処理に失敗します.
composer require tarohida/tarohida:dev-main
のように,dev-{branch}
の文言を指定してください.
packagist の画面に表示されてるやつです.
使う側のサンプルプログラム
使う側のサンプルプログラムも,Githubレポジトリとして用意しました.動作確認にどうぞ.
https://github.com/tarohida/composer_publish_lib_use
使い方はきわめて簡単.vendor/autoload.php
をいつものように読み込んでから,クラスを利用するだけです.
use
キーワードを使えば,フルパスで指定せず利用することも可能です.
<?php
require_once 'vendor/autoload.php';
$tarohida = new Tarohida\Tarohida\Tarohida('I use tarohida/tarohida!');
var_dump($tarohida->say());
ちなみに,以下ファイルを確認すれば読み込まれていることが確認できます.
トラブルの際の切り分けに利用できます.
$ cat vendor/composer/autoload_psr4.php
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Tarohida\\Tarohida\\' => array($vendorDir . '/tarohida/tarohida/src/Tarohida/Tarohida'),
);
おわり.