*

Laravelのパッケージ開発

公開日: : 最終更新日:2016/05/18 Laravel5, PHP

 パッケージ作成

Laraavelのパッケージを作成し、作成したパッケージを他のプロジェクトで利用する手順をメモした記事です。

本記事を作成する時の開発の環境は以下となります。

  • Windows 10 Home x64
  • XAMPP 7.0.5
  • Laravel 5.1 LTS

パッケージを開発するためのプロジェクトを作成

「C:\dev\project」配下に「arubehpkg」プロジェクト(パッケージを作成)を作成します。

  • 《パッケージ開発用プロジェクトの配置場所》:C:\dev\project
  • 《パッケージ開発用プロジェクト名》:arubehpkg

※インストール方法はここをご参照ください。

本記事の例は以下の命名に従います。

  • 《開発者名》:Arubeh
  • 《パッケージ名》:ArubehPkg
  • 《サービス名》:ArubehSrv
  • 《サービスプロバイダ名》:ArubehPrv
  • 《ファサード名》:ArubehFcd

「packages/《開発者名(小文字)》/《パッケージ名(小文字)》/src」フォルダを作成します。本記事の例の場合は「packages/arubeh/arubehpkg/src」となります。

  • 《開発者名(小文字)》フォルダ配下がパッケージが配置される予定。
  • パッケージ毎のバージョン管理する時は《開発者名(小文字)》フォルダ配下が対象になる予定。(本記事ではバージョン管理設定はしていない。)
  • 《開発者名(小文字)》フォルダ配下にパッケージの「composer.json」が配置される予定。
  • 《開発者名(小文字)》/srcフォルダ配下にパッケージのソースコードが配置される予定。

パッケージ作成01

パッケージ作成02

 

composer.jsonを作成

以下の方法で《開発者名(小文字)》フォルダ配下に「composer.json」を作成します。

  • コマンドプロンプトでパッケージの配置場所「《パッケージ開発用プロジェクトの配置場所》/《パッケージ開発用プロジェクト名》/packages/《開発者名(小文字)》/《パッケージ名(小文字)》」フォルダに移動し「composer init」を実行する。本記事の例では「C:\dev\project\arubehpkg\packages\arubeh\arubehpkg」配下で「composer init」を実行する。

Composerの内容は以下とします。

  • nameには「《開発者名(小文字)》/《パッケージ名(小文字)》」を設定する。本記事では「arubeh/arubehpkg」になる。
  • minimum Stabilityには「dev」を設定する。
  • licenseには「MIT」を設定する。(※Laravelのライセンスに合わせる。)

パッケージ作成03

cd 《パッケージ開発用プロジェクトの配置場所》\《パッケージ開発用プロジェクト名》\packages\《開発者名(小文字)》\《パッケージ名(小文字)》
composer init

 

namespace(名前空間)を設定

「composer.jsonを作成」章で作成した「composer.json」にパッケージのnamespaceを設定します。名前空間は「《開発者名》\《パッケージ名》」となります。

Composerを修正した後は「composer dump-autoload」を実行します。

パッケージ作成04

"autoload": {
    "psr-4": {
      "《開発者名》\\《パッケージ名》\\": "src/"
    }
}

パッケージ作成05

 

Rootフォルダ直下にある composer.json にパッケージを追加

パッケージを作成しているプロジェクト(Laravel)に「packages/《開発者名(小文字)》/《パッケージ名(小文字)》/src」フォルダを認識させるために、プロジェクトのcomposerを設定します。本記事の例では「C:\dev\project\arubehpkg\composer.json」を修正することになります。

Composerを修正した後は《パッケージ開発用プロジェクトの配置場所》配下で「composer dump-autoload」を実行します。

パッケージ作成06

《開発者名》\\《パッケージ名》\\": "packages/《開発者名(小文字)》/《パッケージ名(小文字)》/src

パッケージ作成07

Serviceを作成

「packages/《開発者名(小文字)》/《パッケージ名(小文字)》/src」フォルダ配下にServiceファイルを作成します。

  • Serviceファイルには処理のソースコードを記載する。
  • ファイル名、クラス名は「《サービス名》Service」とする。
  • 名前空間は「《開発者名》\《パッケージ名》」とする。

※ 本文書の例ではARUBEHという文字列を返却する処理を実装する。

パッケージ作成08

パッケージ作成09

パッケージ作成10

<?php

namespace 《開発者名》\《パッケージ名》;

class 《サービス名》Service
{
    public function 《サービスの処理名》()
    {
        // サービスの処理をコーディング
    }
}

 

ServiceProviderを作成

Laravelのartisanコマンドを利用してサービスプロバイダを作成して、パッケージフォルダに移動します。

  • サービスプロバイダを作成コマンド:php artisan make:provider 《サービスプロバイダ名》ServiceProvider
  • サービスプロバイダの作成コマンドを投入すると「app/Providers」配下にサービスプロバイダが作成される。
  • 作成されたサービスプロバイダファイルを「packages/《開発者名》/《パッケージ名》/src」フォルダ配下に移動する。

パッケージ作成11

パッケージ作成12

  • サービスプロバイダには「Serviceを作成」章で作成したサービスをサービスコンテナに登録します。
  • 名前空間は「《開発者名》\《パッケージ名》」とします。

package_service_provider

<?php

namespace 《開発者名》\《パッケージ名》;

use Illuminate\Support\ServiceProvider;

class 《サービスプロバイダ名》ServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->singleton('《サービスプロバイダ名》', function () {
            return new 《サービス名》Service();
        });
    }
}

 

Façadeを作成

「ServiceProviderを作成」章でサービスコンテナに登録したサービスを静的なインタフェースで利用するためにファサードを作成します。

  • ファサードを作成するartisanコマンドは用意されていないので、手動で作成する。
  • ファサードファイル名、クラス名は「《ファサード名》Façade」とする。

パッケージ作成14

パッケージ作成15

「ServiceProviderを作成」章で作成したサービスプロバイダを設定します。

名前空間は「《開発者名》\《パッケージ名》」とする。

パッケージ作成16

<?php

namespace 《開発者名》\《パッケージ名》;

use Illuminate\Support\Facades\Facade;

class 《ファサード名》Facade extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return '《サービスプロバイダ名》';
    }
}

 

ServiceProviderとFacadeを追加

プロジェクトがパッケージのサービスプロバイダとファサードを認識できるように「config/app.php」に「ServiceProviderを作成」章、「Façadeを作成」章で作成したサービスプロバイダ、ファサードを追加します。

「config/app.php」修正後には「composer dump-autoload」を実行します。

パッケージ作成17

'providers' => [
     :
    /*
     * Application Service Providers...
     */
     :
    《開発者名》\《パッケージ名》\《サービスプロバイダ名》ServiceProvider::class,
],

'aliases' => [
     :
    /*
     * Application aliases...
     */
    '《ファサード名》' => 《開発者名》\《パッケージ名》\《ファサード名》Facade::class,
],

パッケージ作成18

 

パッケージの動作確認

本文書ではルートファイルでパッケージの処理を利用し、ビューで表示します。

パッケージ作成19

Route::get('/', function () {
    $arubeh_str = 《ファサード名》::《サービスの処理名》();
    return view('welcome', compact('arubeh_str'));
});

パッケージ作成20

<body>
    <div class="container">
        <div class="content">
            <div class="title">{{ $arubeh_str }}</div>
        </div>
    </div>
</body>

以下のように表示されたら成功!

パッケージ作成21

 

パッケージを利用

パッケージを利用するためのプロジェクトを作成

「C:\dev\project」配下に「arubehapp」プロジェクトを作成します。

  • 《パッケージ利用プロジェクトの配置場所》:C:\dev\project
  • 《パッケージ利用プロジェクト名》:arubehapp

 

Composerよりパッケージをインストール

「composer.json」に「パッケージ作成」章で作成したパッケージを追加します。

  • 本文書ではローカルフォルダに配置されているパッケージを追加するので「repositories」のtypeを「path」とする。(※Gitリポジトリからパッケージを追加するときは「vcs」と設定する。詳細はここを参照)
  • urlには「パッケージを開発するためのプロジェクトを作成」章で作成したパッケージの配置場所「《パッケージ開発用プロジェクトの配置場所》\\《パッケージ開発用プロジェクト名》\\packages\\《開発者名(小文字)》\\《パッケージ名(小文字)》」を設定する。本記事の例では「C:\\dev\\project\\arubehpkg\\packages\\arubeh\\arubehpkg」となる。
  • requireに「”《開発者名》/《パッケージ名》”: “dev-master”」を追加する。

パッケージ利用01

"repositories": [
    {
        "type": "path",
        "url": "《パッケージ開発用プロジェクトの配置場所》\\《パッケージ開発用プロジェクト名》\\packages\\《開発者名(小文字)》\\《パッケージ名(小文字)》"
    }
],
"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.1.*",
    "arubeh/arubehpkg": "dev-master"
},

「composer update」コマンドよりパッケージをインストールします。
※何故か「composer install」ではパッケージがインストールされないです。

パッケージ利用02

 

ServiceProviderとFacadeを追加

プロジェクトがパッケージのサービスプロバイダとファサードを認識できるように「config/app.php」にインストールしたパッケージのサービスプロバイダ、ファサードを追加します。

「config/app.php」修正後には「composer dump-autoload」を実行します。

パッケージ利用03

'providers' => [
     :
    /*
     * Application Service Providers...
     */
     :
    《開発者名》\《パッケージ名》\《サービスプロバイダ名》ServiceProvider::class,
],

'aliases' => [
     :
    /*
     * Application aliases...
     */
    '《ファサード名》' => 《開発者名》\《パッケージ名》\《ファサード名》Facade::class,
],

 

パッケージの動作確認

本文書ではルートファイルでパッケージの処理を利用し、ビューで表示します。

パッケージ利用04

Route::get('/', function () {
    $arubeh_str = 《ファサード名》::《サービスの処理名》();
    return view('welcome', compact('arubeh_str'));
});

パッケージ利用05

<body>
    <div class="container">
        <div class="content">
            <div class="title">{{ $arubeh_str }}</div>
        </div>
    </div>
</body>

以下のように表示されたら成功!

パッケージ利用06

 

お問い合わせはこちら!

関連記事

PHPでMicrosoft Translate APIの翻訳機能を使ってみる

photo credit: Robert Scoble via photopin cc レ

記事を読む

Laravel 5.X Queryログ出力例

Laravel 5.1でQueryログを出力する際のメモです。   <?ph

記事を読む

codeigniterで共通のヘッダーフッターの読み出しはCI_LoaderをextendsしたMY_Loaderで実装する

codeigniterで共通のヘッダー、フッターを読み込むときは、CI_Loaderクラスを

記事を読む

Laravel 5.1でLaravel Mixを使ってみた

本投稿の目的は、Laravel 5.1でLaravel Mixを利用してSassをCSSへコンパイル

記事を読む

codeigniterでIE8において別Windowで開くとセッションが切れてログアウトしてしまう

codeigniterで作成したWebサービスをアクセスしているときに、別Windowで開く

記事を読む

codeigniterでselect文にunionを使いたい

select文でunionを使いたいが、調べてみてると普通にできなさそうなので、librar

記事を読む

Laravel 5.1 プロジェクト作成(インストール)

本記事ではLaravel 5.1 LTSを利用して開発するためにLaravelをインストールする手順

記事を読む

Laravelで住所からGoogle Map APIを用いて地図表示

Gmaps.jsを利用して、指定住所の場所をGoogle Map上に表示してみました。 Gma

記事を読む

複数のXAMPPインストール

Windows環境でPHP開発をする際にXAMPPをインストールすることになります。ただし、複数の開

記事を読む

Laravel 5.1の自動ログインのお試し!

セッションの保持時間を1分にする 単位:分 デフォルト:120分 config

記事を読む

お問い合わせはこちら!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

お問い合わせはこちら!

Laravel 5.X Queryログ出力例

Laravel 5.1でQueryログを出力する際のメモです。

no image
Laravelで複数実行したいとき

マルチプロセスで複数に実行してほしい場合は、JOBクラスを利用します。

Laravel5.1 ModelのCollectionからデーターを取得

ModelのCollectionからidのみを取得 <?p

Laravel 5.1でLaravel Mixを使ってみた

本投稿の目的は、Laravel 5.1でLaravel Mixを利用し

Laravel 5.1の自動ログインのお試し!

セッションの保持時間を1分にする 単位:分 デフォルト

→もっと見る

  • AWS構築 - クラウドアドバイザー
PAGE TOP ↑