ラベル 独自パッケージ の投稿を表示しています。 すべての投稿を表示
ラベル 独自パッケージ の投稿を表示しています。 すべての投稿を表示

2016-03-25

【PHP】独自パッケージを composer で使えるようにする方法

以前「Laravel の独自パッケージを作成する「PackageCreator」を公開しました」で書いたように、今回は作成した独自パッケージを公開し、さらに composer でインストールするまでを紹介したいと思います。



手順としては、以下の2点です。

1.Githubへパッケージをアップする 
2.Packagistへパッケージ登録

(※事前準備として、GithubPackagistにアカウント登録し、composer 、git が使えるようにしておいてください。)



それでは、ひとつずつ見ていきましょう。


1. Githubへパッケージをアップする

まずGithub にログインし、独自パッケージ用のレポジトリを作成します。
右上にあるボタンをクリックした時に出てくる「New repository」をクリック。



パッケージ名と説明文を入力、さらに「Initialize this repository with a README」にチェック✔を入れてボタンをクリックすれば完了です。



次にローカル環境でターミナルを開き、cd コマンドをつかって独自パッケージのディレクトリまで移動しましょう。


ここで git の初期化コマンドを実行します。

git init


そして、git pull を使って先ほど Github レポジトリからファイルを取り込みます。

git pull https://github.com/xxxxxxxx/xxxxxxxx.git

※ちなみに、レポジトリの git URLは以下の場所に書かれています。




はい!
これでローカル環境からファイルをアップロードできるようになりました。



続いて composer init を使って composer に必要なファイル「composer.json」を作成しましょう。
以下のコマンドを実行すると、パッケージ名や説明文を聞かれるので入力していきます。
重要なのは以下の3つ。

Package name (<vendor>/<name>)  ・・・ パッケージ名
Description ・・・ パッケージの説明文
License・・・ パッケージのライセンス。後でPackagistで注意されるので^^;

これで composer.json が出来上がります。


ちなみに、もしコマンドラインが好きじゃない人は普通に composer.json を作ってもOKですし、後から変更するのも普通にエディタから変更することができます。


そして、README.md も適宜変更しましょう。
このファイルは markdown という形式で作成する必要があります。(こちらのページがとても便利だと思います。)


さぁ、それではやっと Github へのアップロードです。
実際には以下のようにして行います。

git add .
git commit -m="First commit"
git push https://github.com/xxxxxxxx/xxxxxxxx.git master

この時ログインID, パスワードを聞かれたら入力してください。
アップロードがうまくいっていれば Github ページが変更になっているはずです。


はい!
ここまでがGithubへのアップロード手順です。



(今回は記事が長いね...分けたほうが、良かったね....)



2.Packagistへパッケージ登録

では次に packagist です。
ログインして右上の「submit」から登録ページへ移動し、githubで先ほどつくったページのURLを入力してパッケージを登録します。


これでパッケージが composer からインストールできるようになっているはずです。
実際にはこのような形になります。

composer require sukohi/xxxxxx:dev-master

※sukohi/xxxxx の部分は composer.json の name にかかれている値です。



ちなみに、Github のウェブフックを使えば git push されるたびに自動で packagist も最新版にアップされるのでぜひ設定しておきましょう。
やり方はこんな感じです。

1.まず packagist からトークンを取得します。


2.先ほどつくった Github のパッケージページから setting > Webhooks & services へ移動し、「Add Service」ボタンの中から Packagist を選択します。
すると、以下のようなページが表示されるので先ほど Packagist のユーザー名と取得したAPIトークンを入力しましょう。

これでウェブフックの設定は終了です。


(あと1トピックだけ、、、)


また将来のことを考えると git で 1.0 や 1.0.0などブランチとタグをつかってバージョンを作成しておくといいと思います。
やり方は以下。

(ブランチ)

git branch 1.0
git checkout 1.0
git push https://github.com/xxxxxxxx/xxxxxxxx.git 1.0

(タグ)
git tag 1.0.0
git push https://github.com/xxxxxxxx/xxxxxxxx.git 1.0.0

※もしバクを修正したり新しい機能を追加したらブランチを同じようにpush し、タグを「1.0.1」というのようにバージョンを上げて push しましょう。
ウェブフックを設定しているなら自動で packagist も最新版になっているはずです。


composer でバージョンを指定してインストールするには以下のようにします。

composer require sukohi/xxxxx:1.*

はい!
これで終了です。

独自パッケージを作って公開しておけば、後から同じ作業を省略できますし、もしバグがあれば他のユーザーから教えてもらえるかもしれないのでメリットは多いですよ!

なにより自分のパッケージにスターがついたりするととてもテンションが上がります。
ぜひみなさんもトライしてみてくださいね。
ではでは〜!(^o^)


 (スマホで記事の原案を書くとなぜか記事が長くなるなー)


2016-03-06

Laravel の独自パッケージを作成する「PackageCreator」を公開しました。

Laravelでの開発を行っていると「この機能はきっとまた必要になるときが来るはず!」という場面に多々出会います。
そんなときは独自パッケージを作りましょう。
Laravelの強みのひとつは「世界中のプログラマが作成した独自パッケージ」が利用できるという点にあると思います。

ただ、パッケージを作成するには「Laravel の独自パッケージを作成する手順 」 「Laravel 5 の独自パッケージを作成する手順 」でも紹介しましたが多少の労力が必要になります。
毎回やっているとこれはなかなかめんどくさかったりします。

そこで!
今回はこの独自パッケージに必要なファイルを自動で作成してくれる「PackageCreator」というLaravel用パッケージをGitHubで公開しました。
少しでもパッケージ開発が楽にできれば嬉しいです。
(今のところはLaravel 5+です。)

※追記・・・「package_creator」コマンドは「make:package」に入れ替わりました。(記事中の古いコマンドは全て修正されています)


■PackageCreator
https://github.com/SUKOHI/PackageCreator


ではインストール方法から。
PackageCreator 自体も Laravel の独自パッケージですので Composer でのインストールが可能です。
 composer require sukohi/package-creator:2.*  

次にサービス・プロバイダーを登録しましょう。
 Sukohi\PackageCreator\PackageCreatorServiceProvider::class,  

はい。
これで独自パッケージ生成のコマンド「php artisan make:package」が使えるようになっていると思います。


コマンドの使い方
 php artisan make:package (ベンダー名) (パッケージ名) (保存するフォルダ名)  

引数の説明

・ベンダー名: そのままベンダー名(あなたの名前)。必須。
・パッケージ名: 作成したいパッケージの名前。もし名前が複数の単語からできている場合はハイフンつなぎにしてください。必須
・保存するフォルダ名: パッケージを作成/保存する場所です。任意。デフォルトは packages

実際の例)
 php artisan make:package sukohi my-package test_packages  


オプション

--views

もし独自パッケージで view を使いたい場合はこのオプションを使ってください。


--publish

もし独自パッケージで publish 機能を付けたい場合はこのオプションを使ってください。


パッケージを生成するとその後どうすればいいかが表示されますのでその指示に従ってください。
後はController などからこんな感じアクセスすることができます。
↓↓↓

MyPackage::test();


ちなみにパッケージの開発手法は「Developing your packages in Laravel 5」を参考にしたものです。感謝!

以上です。
できればそのうち独自パッケージを公開する方法もブログ記事にしたいと思っています。
Let's develop! ^^


2015-08-26

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

少し前に第二の故郷、カナダのバンクーバーでの生活が始まり、最近は少し落ち着いてきたので、そろそろLaravel5(現在5.1)を見据えた活動をしていきたいと考えています。
ということで、今回はLaravel 5 の独自パッケージを作る手順を今回も備忘録的にお届けしたいと思います。

※ここでの開発手順を自動でやってくれるパッケージ「PackageCreator」を公開しました。詳しくは以下のページをご覧ください。
Laravel の独自パッケージを作成する「PackageCreator」を公開しました。





[結論] おそらく自由度が上がった分、より根本を理解する必要がでてきたなー、という印象です。


まず、前提として

1.Laravel 5以上(私の場合は5.1)がインストールされていること。
2.composer がインストールされていること。

として話を進めます。


では!
実際にパッケージの作成に移りましょう。
手順は以下の6点です。

1.パッケージ開発をするためのフォルダ構造を作成
2.composer.json を作成
3.Rootフォルダ直下にある composer.json にパッケージを追加
4.ServiceProvider を作成
5.パッケージのクラス本体を作成
6.ServiceProvider を登録






1.パッケージ開発をするためのフォルダ構造を作成


まずパッケージを開発するためのフォルダを作成します。

(Laravel5のフォルダ)/packages/Vendor/Package/src


※便宜上、ベンダー名には「Vendor」、パッケージ名は「Package」として説明します。
そのため、もしあなたの開発者名が「Sukohi」で、これから開発する独自パッケージが「Own」の場合は「(Laravel5のフォルダ)/packages/Sukohi/Own/src」となります。


2.composer.json を作成


1番で作成した (Laravel5のフォルダ)/package/Vendor/Package へコマンドで移動し、

composer init

を実行してください。色々と質問を聞かれるので自分にあった情報を打ち込み composer.json を作成します。

※composer.json は後でエディタで変更可能ですので、あまり深く考える必要はありません。


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

以下のように「autoload/psr-4」内に独自パッケージのネームスペースとパスを追加します。

"autoload": {
    "psr-4": {
        "App\\": "app/",
        "Vendor\\Package\\": "packages/Vendor/Package/src"
    }
}
※もちろんカンマで区切ることで複数のパッケージを指定できます。



4.ServiceProvider を作成

(Laravel5のフォルダ)/packages/Vendor/Package/src」 内に PackageServiceProvider.php を作成し、以下をコピペする。

<?php namespace Vendor\Package;

use Illuminate\Support\ServiceProvider;

class PackageServiceProvider extends ServiceProvider {

    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = true;

    /**
     * Bootstrap the application events.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        $this->app['package'] = $this->app->share(function($app)
        {
            return new Package;
        });
    }

    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return ['package'];
    }

}

※実際には  を以下のようにあなたのベンダー名とパッケージ名に置き換える必要があります。

PackageServiceProvider ・・・ (独自パッケージ名)ServiceProvider
package ・・・ (独自パッケージ名)
Vendor ・・・ (あなたの開発者名)


※独自に view を利用する場合は boot() 内に「loadViewsFrom()」で読み込みができます。
※独自にpublishする必要がある場合は同じく boot() 内で publishes() を使う。

詳しくはこちら
↓↓↓

Resources
Publishing File Groups


5.パッケージのクラス本体を作成

以下のようにネームスペース付きでクラスを作成

<?php namespace Vendor\Package;

class Package {

    // ここにプログラムを作成

}

6.ServiceProvider を登録


(Laravel5のフォルダ)/config/app.php に、


(i)ServiceProvider を登録

    'providers' => [

        // その他のServiceProvider

        /*
         * Package Service Providers
         */

        Vendor\Package\PackageServiceProvider::class,

    ],
(ii)エイリアスを登録

    'aliases' => [

        'Package'       => Illuminate\Support\Facades\Package::class,

    ]


(iii)コマンドラインでルートフォルダへ移動し、以下のコマンドを実行

composer dumpautoload -o


はい!
これで Controller 内などから

 Package::something();

という形で独自パッケージを呼び出すことができます。


[参考ページ](参考というかほぼ全体的に訳しただけです^-^;)

https://laracasts.com/discuss/channels/tips/developing-your-packages-in-laravel-5

Thank you, davidxd33!
Your tip helped me out. :)))



■おまけ(Laravel5.1に関して)

※これからは実際に Laravel 5.1を使って開発をしていきたいと考えています。だけど、5.1は要件がPHP5.5.9以上ということもあり、いわゆるレンタルサーバーと呼ばれる環境では使えるようになるにはまだまだ時間がかかりそうってとこがネックになりそうですねー。


以上です。
おつかれさまでした!



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. :)))