自作フレームワークをPackagistに公開する

# はじめに

PHPで自作フレームワークを作成したので、この機会にPackagistに公開してComposerで取ってこれるようにしようと思いました。
初めての公開なので間違ってる部分が、あればご指摘を頂ければ幸いです。

https://github.com/fumiya5863/CherryTI

公開するまでの流れを紹介していきます。

# 目次

1. composer.jsonの作成
2. ライセンスファイルの作成
3. GitHubにpush
4. Packagistに登録
5. Composerで確認
6. 最後に
7. 参考文献

# composer.jsonの作成

最初に、composer.jsonを自分が作成したプロジェクトのルートディレクトリに作成していきます。

```json
{
    "name": "fumiya5863/cherry-ti",
    "type": "project",
    "description": "The CherryTI Framework.",
    "homepage": "https://github.com/fumiya5863/CherryTI",
    "license": "MIT",
    "authors": [
        {
            "name": "fumiya5863"
        }
    ],
    "require": {
        "illuminate/database": "^7.0",
        "vlucas/phpdotenv": "^5.0"
    },
    "config": {
        "vendor-dir" : "./system/external"
    }
}
```

上記の内容がcomposer.jsonの設定です。keyの用語の意味は下記になります。

|key |意味 |
|----|---- |
|name|ベンダー名/プロジェクト名|
|type|パッケージのタイプ (デフォルトはlibrary、今回はproject) |
|description|パッケージの簡単な説明|
|homepage|プロジェクトのウェブサイトへのURL|
|authors|パッケージの作者|
|license|パッケージのライセンス|
|require|このパッケージに必要なパッケージのマップ|
|config|設定オプションのセット(どこにvendorフォルダをおくか)|

> 参考 [The composer.json schema](https://getcomposer.org/doc/04-schema.md)

今回は、composer.jsonのファイルを自分で作成して記入しましたが、対話形式からでも作成できます。
下記のコマンドを叩いてもらうと対話形式でcomposer.jsonが作成されます。

```shell
composer init
```

一通りの設定を記入した後に、バリデーションチェックをしましょう。

```shell
composer validate
```

バリデーションチェックに通った場合は、`./composer.json is valid`と表示されます。

次にライセンスファイルの作成をします。

# ライセンスファイルの作成

今回、GitHubで[MIT](https://ja.wikipedia.org/wiki/MIT_License)ライセンスを設定していたのでLICENSEファイルの中身の内容は下記になります。

```
MIT License

Copyright (c) 2021 fumiyan

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```

GitHubでのライセンス設定は、下記の記事を参考にさせて頂きました。
> 参考文献: https://qiita.com/shibukk/items/67ad0a5eda5a94e5c032

# GitHubにpush
次に、フレームワークのバージョンを指定したいので下記のgitコマンドを叩きます。

```shell
git tag v1.0.0
```

バージョンの指定が出来たので、次に下記のコマンドを叩きます。

```shell
git push origin v1.0.0
```

これでリモート上にタグが反映されます。

次に、Packagistに登録して終了です。

#Packagistに登録

[Packagist](https://packagist.org/)に登録します。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605875/2ef07fa9-7b59-ca78-9e12-1ee1d8778a29.png)

登録が完了したら、次にフレームワークを登録します。

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605875/b963ccec-5808-04f7-7bcf-127d8d815a33.png)

上記の画像のヘッダー部分にあるsubmitを押すと上記の画面が表示されます。

次に下記画像の`Repository URL`に自分のリポジトリのURLを記入して下さい。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605875/c7664c88-d11a-c265-f16d-48dc56bc106b.png)

これで、登録出来たので検索して確認してみましょう。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605875/8abda89a-c6b4-9d04-b1d2-37a483885f86.png)

実際に検索をすると検索にヒットして表示されます。

最後に、Composerで落とせてこれるか確認しましょう。

# Composerで確認

下記のコマンドを叩いて頂くと落とせてこれます。

```shell
composer create-project fumiya5863/cherry-ti
```

![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605875/671d0670-91eb-cb3c-2c1e-ef280b93ec1d.png)

実際に、落とせることが出来ました！！

#最後に
いかがだったでしょうか、自分が作成してみたライブラリやフレームワークなどを実際にあげてみることでこういった仕組みでいつも使っているライブラリやフレームワークを落とせてくるのかと分かると思います。皆さんも是非やってみて下さい。
他にも、GitHubにpushした時に、自動でPackagist側に通知を設定するとかもやっておいた方が楽になるかもしれません。

自分が作成したフレームワークも触って頂けると幸いです(笑)

#参考文献
http://vdeep.net/composer-packagist
[The composer.json schema](https://getcomposer.org/doc/04-schema.md)
https://qiita.com/shibukk/items/67ad0a5eda5a94e5c032
https://qiita.com/soyanchu/items/72095a7c9fdb7f71b2c3