2014-10-01

Laravel の独自パッケージを作成する手順

ここのところ多忙のためブログ投稿をサボってしまっていますが、Laravel(CakePHP)は常に触っていて、知れば知るほどその便利さがよくわかっきている今日このごろです。

さて、そんな多忙な中なのになぜブログ投稿をするのか?というと今はクライアント様の判断待ちで、さらにタイトルにある独自パッケージの作成方法を備忘録として残しておきたかったからです。

以前作成したこがあるのにやることが多くて忘れてしまっていました(汗)
ということで今回はLaravelの独自パッケージの作成法をまとめてみたいと思います。


[最終結論] Laravel 5.0ではもっと楽にできればいいなー^^


では、早速作業を開始しましょう。
前提としまして、パッケージの名前は、

sukohi/hoge

として話をすすめていきます。
これは、「ベンダー名(あなたの名前)/パッケージ名」になります。

では、ターミナルを開いて Laravelがインストールされている場所(artisanのあるフォルダ)まで移動して以下を実行してください。

php artisan workbench sukohi/hoge --resources


実行が完了すると、

laravel
├ app
├ bootstrap
├ public
├ vendor
└ workbench

という形で workbench フォルダが作成されています。
では、この中にある以下のフォルダを開きましょう。

laravel/workbench/sukohi/hoge/src/Sukohi/Hoge/

このフォルダで独自クラスの作成&「HogeServiceProvider.php」の設定をします。

では、独自クラスを作成しましょう。このサンプルでは「Hoge.php」です。
フォルダ構成は以下のようになります。


Sukohi
 └ Hoge
   ├ Hoge.php
   └ HogeServiceProvider.php


そして、このHoge.php 内にご自身でやりたいことができるようプログラムを作成しましょう。
書き方は通常のPHPクラスとまったく同じですが、クラス名とファイル名は同じにする必要があります。また、ネームスペースをいれることにも注意してください。


(Hoge.php)

<?php namespace Sukohi\Hoge;

class Hoge {

    // Something...

}


では、次に「HogeServiceProvider.php」の設定を見ていきましょう。
やることは2つ。
register() と provides() メソッドにそれぞれ決まり文句を追加するだけです。

1.register()

 public function register()
  {
  $this->app['hoge'] = $this->app->share(function($app)
  {
   return new Hoge;
  });
  }

※「hoge」「Hoge」はあなたのパッケージ名に置き換えてください。


2.provides() 

 public function provides()
 {
  return array('hoge');
 }


はい。
これでここの作業は終了です。


では、次に以下のような形でクラスを呼び出せるように Facades を作成しましょう。

Hoge::method();

HogeServiceProvider.phpがあるフォルダに「Facades」というフォルダを作成し、さらにその中に「Hoge.php」を作成してください。
フォルダ構成は以下のようになります。

Sukohi
 └ Hoge
   ├ Facades 
   ├ Hoge.php
   └ HogeServiceProvider.php

そして Hoge.phpの中に以下のプログラムを書き込みましょう。


<?php namespace Sukohi\Hoge\Facades;

use Illuminate\Support\Facades\Facade;

class Hoge extends Facade {

  /**
   * コンポーネントの登録名を取得
   *
   * @return string
   */
  protected static function getFacadeAccessor() { return 'hoge'; }

}

※太字の部分がベンダー名とパッケージ名になります。大文字/小文字に気をつけてください。



では、次に Laravel からこのパッケージを呼び出せるように設定しましょう。
(いつものパッケージを composer からインストールしたときの手順と同じです。^-^)

Laravel/app/config/app.php 

を開いて、配列の providers の最後に「HogeServiceProvider」を登録し、

'providers' => array(

 (他のパッケージ), 
 'Sukohi\Hoge\HogeServiceProvider', 

),


さらに同じファイルにある「エイリアス」も設定します。


'aliases' => array(

 (他のパッケージ), 
  'Hoge' => 'Sukohi\Hoge\Facades\Hoge',

),


はい!
これでパッケージが完成しました。
もしエラーがでるようなら、フォルダの階層がまちがっていないか(←これは私のことです^^)、もしくは composer dump-autoload 、 composer update などをするとうまくいくことがあるようです。

ということで少し複雑でしたが、独自パッケージを作成手順でした。
ちなみに、フリーランスとしてプログラムの著作権をすべて渡してしまう約束の場合、こういったパッケージの開発は私はしません。全部持って行かれるのが悔しいパッケージは後のことを考えると便利ですが作成するのに少し時間がかかるので。(笑)
なので、プロジェクトとは別でゼロからパッケージを作成するようにしています。
でも、これってプロジェクトにとってもマイナスなんだけどなー。。。
この辺みんなはどうしてるんでしょう?

とにかくお疲れ様でした。



[参考ブログ(というかほぼ訳しただけ)]

http://culttt.com/2013/06/24/creating-a-laravel-4-package/

Thank you the author(s) of Culttt.com.
Your tip is really useful!
So I've just followed your twitter. :)))

0 件のコメント:

コメントを投稿