【PHP】ライブラリを公開する方法


# はじめに

初めまして。エンジニアのkeita_Maxです。

今回は、以下のサイトの手順に従ってPHPのライブラリを公開してみようと思います。

https://kinsta.com/jp/blog/create-composer-package/


# PHPライブラリの作成

参考のサイトにあるように、`TemperatureConverter.php`を作成します。

```php:TemperatureConverter.php
<?php

namespace RexfordnyrkTempconv;

class TemperatureConverter
{
    public function convert($temperature, $unit)
    {
        if ($unit === 'C') {
            $fahrenheit = ($temperature * 9 / 5) + 32;
            return $fahrenheit;
        } elseif ($unit === 'F') {
            $celsius = ($temperature - 32) * 5 / 9;
            return $celsius;
        } else {
            throw new InvalidArgumentException('Invalid unit, only C (Celsius) or F (Fahrenheit) are allowed');
        }
    }
}
```

# Composerパッケージを作成する

以下のコマンドをたたいてcomposer.jsonファイルを生成します。


```
composer init
```

色々質問されたので、以下のように解答しました。

```
Package name (<vendor>/<name>) [keita/sample-php-package]: keitamax/sample-package  
Description []:
Author [NiheiKeita <86122925+NiheiKeita@users.noreply.github.com>, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: library  
License []:

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
Add PSR-4 autoload mapping? Maps namespace "Keitamax\SamplePackage" to the entered relative path. [src/, n to skip]:

{
    "name": "keitamax/sample-package",
    "type": "library",
    "autoload": {
        "psr-4": {
            "Keitamax\\SamplePackage\\": "src/"
        }
    },
    "authors": [
        {
            "name": "NiheiKeita",
            "email": "86122925+NiheiKeita@users.noreply.github.com"
        }
    ],
    "require": {}
}

Do you confirm generation [yes]?
Generating autoload files
Generated autoload files
Would you like the vendor directory added to your .gitignore [yes]?
PSR-4 autoloading configured. Use "namespace Keitamax\SamplePackage;" in src/
Include the Composer autoloader with: require 'vendor/autoload.php';
PS C:\develop\sample-php-package> 
```

# GitにPushしてリリースバージョンを作成

>GitHubのリポジトリに移動し、「About」セクションの下にある「Releases」をクリックします。このページにはまだ何もない状態です。中央にある「Create a new release」をクリックしてください。
(引用：https://kinsta.com/jp/blog/create-composer-package/)

これの通りに行っていきます。

まずPushして、PushしたGitHubのリポジトリに移動します。

そこで、Releasesをクリックします。場所は以下の画像の赤丸のところです。

![スクリーンショット 2024-04-10 215608.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/03fad952-2c56-dcd1-21d3-58e30c74d68d.png)

すると以下のようなページに飛びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/a1fedf30-f90f-b689-b2e0-635091766843.png)

そして、`Create a new release`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/3bd8c809-717d-a5d1-0cff-26220806c407.png)

'Choose a Tag'をクリックし、v1.0.0を入力して`Create a new tag'を押します。

最後に`Publish release`をクリックします。

すると、以下の画面のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/3f8cf627-c041-e0b8-126f-2f37278cd8b4.png)


# Packagistに登録・ログインする

https://packagist.org/login/

上記のサイトにアクセスし、ログインをします。`Log in with GitHub`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/df49646f-bac1-c168-63d3-b3643ce490b7.png)


# 公開してみる

ヘッダの`Submit`ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/57592f37-df03-ac1c-254d-d075fd3fbba7.png)

リポジトリのURLを入力して`Check`を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/58e8ae98-0778-8260-29e6-3d6e3175215f.png)


その後でてきた`Submit`ボタンを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/a17215f0-1b03-372b-a4f2-15cb0e826d68.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/385db506-4739-7645-c151-8b4b587d4cbd.png)


これで公開完了です。

# 実際にinstallしてみる

どこか適当なファイルにいき、以下のコマンドでインストールしてみましょう。

```
composer require keitamax/sample-package
```

インストールが完了すると、以下のように自分の作成したPHPファイルがインストールされていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/abf7a95d-6911-12f6-b6ae-17b0340d2f52.png)


# おわりに

とても簡単に公開することができました！
`composer require`で自分の公開したソースをインストールできるのは感動します。

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました！