LoginSignup
0
0

自作ライブラリ作成の初心者がGitHubとComposerでソースをパッケージ化する

Last updated at Posted at 2024-02-24

はじめに

自作していたライブラリを

”GitHubとComposerを使ってダウンロードできるようにしておけばカッコいいし便利そう”

と思って

”Composerって依存関係をJSONで書いておけば簡単にダウンロードできるんだったよねー”

ってくらいの気持ちでComposerの初心者がやろうとした結果かなりハマってしまったので(色んな意味で)メモを残しておきます。
また、ハマりポイント(自分の場合ですが)を補足として入れておいたので参考になればと思います。

以下では ”ライブラリ公開側の設定””ライブラリ利用側の設定” に分けて話を進めます。

本記事ではPackagistへの登録をしなくても可能な方法をご紹介しています。

環境

プラットフォーム
Windows10
Composer
v2.6.5
Git
v2.31.1

下準備

Composerを使う前にPHP環境を入れておく必要があります。
自分の場合はXamppを使っているので下記サイトを参考にしました。
Composerのインストール方法も掲載されています。

クライアントサイドで使用するためのGitもインストールしておく必要があります。
個人的にはコマンド派なので下記のサイトを参考にしました。

Gitが使えるようになったらGitHubにアカウント登録しておく必要があります。

ライブラリ公開側の設定

composer.jsonを作る

ライブラリを置きたいフォルダdev-test(例)に移動してからコマンドラインで初期設定を行います。
composer initを使えばjsonファイルをよしなに作ってくれます。

> composer init

[jsonファイルの作成開始]
実行するとLinuxアプリをインストールする時のように対話形式で聞いてきてくれます。

> Package name (<vendor>/<name>) [vendor-example/dev-test]:

[パッケージ名の設定]
[]内のデフォルトのままでいいのでそのままリターン。

ハマりポイント①
composerはパッケージ名を元に検索しているので、ここを間違えるとそもそも認識してくれません。使う側の事を意識してわかり易い名前にしておきましょう。
パッケージ名はベンダー名(=GitHubユーザー名)/リポジトリ名の構成になります。
例えばGitHubユーザー名がuserでリポジトリ名がdev-repoの場合はuser/dev-repoと書き替えてください。

> Description []:vendor-example sample

[パッケージ説明文の設定]
今回はvendor-example sampleと入力。

> Author [vendor-example <vendor-example@example.com>, n to skip]:

[著者の情報設定]
デフォルトのままでいいのでリターン。

> Minimum Stability []:dev

[安定性の設定]devstable
開発中のライブラリなのでdevと入力。

> Package Type (e.g. library, project, metapackage, composer-plugin) []:library

[パッケージタイプの設定]
ライブラリなのでlibraryと入力。

> License []:MIT

[ライセンスタイプの設定]
一番規制が緩そうなMITを入力。

MITライセンスについて詳しく知りたい方は下記ブログが参考になると思います。

> Would you like to define your dependencies (require) interactively [yes]?no

[依存モジュールの設定]
必要ないのでnoを入力。

> Would you like to define your dev dependencies (require-dev) interactively [yes]? no

[開発用の依存モジュールの設定]
こちらも必要ないのでnoを入力。

> Add PSR-4 autoload mapping? Maps namespace "VendorExample\DevTest" to the entered relative path. [src/, n to skip]:

[ソース配置の相対位置の設定](今回はVendorExample\DevTestからの相対位置)
デフォルトのままでいいのでそのままリターン。

{
    "name": "vendor-example/dev-test",
    "description": "vendor-example sample",
    "type": "library",
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "VendorExample\\DevTest\\": "src/"
        }
    },
    "authors": [
        {
            "name": "author-example",
            "email": "author-example@example.jp"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

> Do you confirm generation [yes]?

[最終確認]
そのままで問題ないのでリターン。

同フォルダに上記で入力した内容がcomposer.jsonに生成されているはずです。
そして下記のsrcフォルダとvendorフォルダも同時に生成されます。

image.png

以上で初回のcomposer.jsonの作成は完了です。

GitHubのリポジトリを初期化する

下記日本語サイトでリポジトリを作成する手順が書かれています。

リポジトリ作成時にオプションを選択すればREADMEやLICENSEのファイルも作成してくれるので作っておいた方がいいでしょう。
READMEの内容は何でも構いませんがLICENSEファイルは選択したライセンスの種類によって内容を書き替えてくれるので便利です。

リポジトリの作成が終わったら下記コマンドを実行してGitを使えるようにします。

> git init

gitを初期化してコマンドが使えるようにします。

> git config --local user.name vendor-example

gitのユーザー名を設定する。

> git config --local user.email vendor-example@example.com

ユーザーのEMailを設定する。

git config系のコマンドは設定しなくても動作しますが、大人数による開発ではコミット時の履歴に設定したユーザー名がちゃんと残るので、後になって修正した内容を誰に聞けばいいのかわからないといった状況は防げるでしょう。

> git branch -M main

メインブランチをmainにします。

> git remote add origin https://github.com/vendor-example/dev-test.git

リモートリポジトリを設定します。
(URLはGitHubのリポジトリのページからコピーできます)

> git pull origin main

リモートリポジトリから最新のソースをプルします。

> git add composer.json

先ほど作成したcomposer.jsonをcommitエントリに加えます。

> git commit -m "first commit"

first commitというコメントで最初のコミットを実行します。

> git push -u origin main

リモートリポジトリへコミットをプッシュします。

これで ”ライブラリ公開側の設定” は完了です。

ライブラリ利用側の設定

composer.jsonを作る

ライブラリを利用したいフォルダuse-test(例)に移動してからコマンドラインで初期設定を行います。

> composer init

”ライブラリ公開側の設定” で行った操作と同じ要領で進めます。

> Package name (<vendor>/<name>) [use-example/use-test]:
> Description []:use library
> Author [use-example <use-example@example.com>, n to skip]:
> Minimum Stability []:dev
> Package Type (e.g. library, project, metapackage, composer-plugin) []:project
> License []:MIT
> 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 "UseExample\UseTest" to the entered relative path. [src/, n to skip]:

対話形式の設問に全て答えてcomposer.jsonを作成します。

> composer config repositories.vendor-example/dev-test vcs https://github.com/vendor-example/dev-test.git

ダウンロードしたいパッケージのリポジトリを設定します。
repositoriesの後ろのvendor-example/dev-testはパッケージ名になります。

ハマりポイント②
この時パッケージ名vendor-example/dev-testの部分を間違えないようにしないと認識してくれませんので注意が必要です。

> composer require vendor-example/dev-test:dev-main

パッケージをダウンロード(composer installでも可能です)。
vendor-example/dev-testの部分はcomposer.json内repositories項目のパッケージ名になります。
dev-mainはmainブランチの事を表していて同ブランチ内の最新をとってきてくれます。

ここまで実行すると下記のようなファイルが出来上がります。

composer.json
{
    "name": "use-example/use-test",
    "description": "use library",
    "type": "project",
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "UseExample\\UseTest\\": "src/"
        }
    },
    "authors": [
        {
            "name": "use-example",
            "email": "use-example@example.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "vendor-example/dev-test": "dev-main"
    },
    "repositories": {
        "vendor-example/dev-test": {
            "type": "vcs",
            "url": "https://github.com/vendor-example/dev-test.git"
        }
    }
}

composer configを実行するためにはあらかじめcomposer.jsonを作っておく必要があるので、今回はcomposer initでファイルを1から作りましたが他のファイルを複製して持ってきても構いません。
極端に言えば必要な部分はrepositoriesの項目だけなので他の項目はなくても動作します。

ダウンロードが完了すれば下記のようにvendor/vendor-example/dev-test/src配下(vendor/パッケージ名/srcの形式)にライブラリが設置されます。

image.png

あとはライブラリ修正⇒コミット⇒プッシュするたびに、使う側で

> composer require vendor-example/dev-test:dev-main

を実行すると最新のソースがダウンロードされます。

バージョンを発行する

v1.0.0などの形式でバージョンを指定してダウンロードする方法です。
ライブラリ公開側で最新のソースをプッシュした後はGitHub上でバージョンをつけましょう。

image.png

Create a new releaseというリンクをクリック

image.png

リリース内容の編集画面が開きます

image.png

Choose a tagというプルダウンをクリックしてバージョンを入力してから+ Create new tagをクリック

image.png

タイトルと説明文を入力してからPublish releaseボタンをクリック

あとは下記のようにv0.0.0というバージョンを指定してコマンドを実行するとバージョンに対応した内容がダウンロードできます。

> composer require vendor-example/dev-test:v0.0.0

下記のようにgitコマンドでタグを付けてからバージョン名でプッシュする方法もあります。

> git tag v0.0.0
> git push origin v0.0.0

この場合は別のブランチ名でプッシュする事になるのでdev-mainでダウンロードしようとしても最新のソースは取得できなくなるので注意が必要です。

まとめ

素人考えですがComposerの存在は知っていたけど公開側にもcomposer.jsonが必要だという事を知らなかったので最初はかなり苦労しました。
調べていくうちにGitHubにも多くの機能やサービスの提供がある事にも改めて驚かされました。

というわけで今回のまとめは次の通り。

・composer.jsonはソースの公開者側にも利用者側にも必要だよ
・バージョン管理(v1.0.0などの指定でダウンロード可能)も容易にできるよ
・Packagistへ登録しなくても使えるよ

0
0
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
0
0