26
25

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 5 years have passed since last update.

composerパッケージ開発の流れ(Laravel用)

Last updated at Posted at 2018-04-25

下記を参考にパッケージ作成環境構築を試した時のメモ。
https://medium.com/laravelapps/laravel-package-development-step-by-step-guide-743d9e5e076e

大まかな流れ

  • Laravelをセットアップする(いつもの)
  • パッケージ開発環境を作る
  • パッケージ開発をする
  • composer install 動作確認
  • packagist登録

Laravelをセットアップする(いつもの)

ベースにするLaravelをインストールする。

laravel new core

パッケージ開発環境を作る

パッケージは通常 vendor ディレクトリ内にインストールされる。
まだ公開していないパッケージを作るので適当なディレクトリを作成し、その中で開発をしていく。
今回は /package/username/hoge にパッケージを作っていく
上記ディレクトリに移動し、composer.json を準備する
この先作成パッケージの composer.json とLaravel動作環境の /composer.json が出て来るので注意。

まず初期化

composer init

作成されたcomposer.json

composer.json
{
    "name": "username/hoge",
    "description": "Hoge",
    "authors": [
        {
            "name": "username",
            "email": "username@example.com"
        }
    ],
    "require": {}
}

これに必要情報を追加していく。

  • 依存ファイル
  • 名前空間とオートロード
  • Laravel用のサービスプロバイダ、ファサード

依存ファイル

動作に必要なパッケージやphpバージョンを指定する

    "require": {
        "php": "^7.0",
        "laravel/framework": "5.6.*",
    },

名前空間とオートロード

パッケージに割り当てる名前空間とファイルパスを指定する

    "autoload": {
        "psr-4": {
            "Username\\Hoge\\": "src/"
        }
    },

Laravel用のサービスプロバイダ、ファサード

Laravelのアプリケーション起動時に自動的に読み込まれるサービスプロバイダやファサードを指定する。

    "extra": {
        "laravel": {
            "providers": [
                "Username\\Hoge\\HogeServiceProvider"
            ]
        }
    }

今回はサービスプロバイダのみ使う。
サービスプロバイダはartisanコマンドで作成したものを移動、名前空間を変更して使う。
動作確認も兼ねてbootメソッドにdumpメッセージを入れておく。

php artisan make:provider HogeServiceProvider
# app/Providers/HogeServiceProvider.php が生成される
packages/username/hoge/src/HogeServiceProvider.php
<?php

namespace Username\Hoge;    // 名前空間を修正

use Illuminate\Support\ServiceProvider;

class HogeServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        // 動作確認用メッセージ
        dump('Hello Laravel!');
    }

    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

完成品

composer.json
{
    "name": "username/hoge",
    "description": "hoge",
    "authors": [
        {
            "name": "username",
            "email": "username@gmail.com"
        }
    ],
    "require": {
        "php": "^7.0",
        "laravel/framework": "5.6.*"
    },
    "autoload": {
        "psr-4": {
            "Username\\Hoge\\": "src/"
        }
    },
    "extra": {
        "laravel": {
            "providers": [
                "Username\\Hoge\\HogeServiceProvider"
            ]
        }
    }
}

あとはLaravel実行時にこのディレクトリがロードされるようにすればよい。
repositories にパッケージディレクトリを指定すると、パッケージインストール時に

/composer.json
    "repositories": [
        {
            "type": "path",
            "url": "packages/username/hoge",
            "symlink": true
        }
    ],
    "require": {
        "php": "^7.1.3",
        "fideloper/proxy": "^4.0",
        "laravel/framework": "5.6.*",
        "laravel/tinker": "^1.0",
        "username/hoge": "dev-master"
    },

これでcomposer install (またはupdate)を実行すれば、 packages/username/hoge とシンボリックリンク(winならジャンクション)で vendor/username/hoge にリンクを貼ってくれる。

$composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
  - Installing username/hoge (dev-master): Junctioning from packages/username/hoge

Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
"Hello Laravel!"
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Discovered Package: username/hoge
Package manifest generated successfully.

インストールが完了したらLaravelが動作する度にコンソールに動作確認用のデバッグメッセージが出るようになるはず。

php artisan
"Hello Laravel!"
Laravel Framework 5.6.17

Usage:
  command [options] [arguments]
  ...

パッケージ開発をする

省略

packagist登録

作成したパッケージをgithubなどに上げてから登録。
審査などもないようですぐに反映される。
https://packagist.org/

composer install 動作確認

動作確認用のLaravelを別途用意しておくとよい。
composer require username/hoge でpackagistから導入できるはず
開発用Laravelのcomposer.json内のrepositoriesのローカルパス参照を削除しても可能。

26
25
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
26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?