4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

composerのプロジェクトをPackagistに公開して,composer require で利用できるようにする

Posted at

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 の画面に表示されてるやつです.

image.png

使う側のサンプルプログラム

使う側のサンプルプログラムも,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'),
);

おわり.

Special Thanks For...

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?