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! ^^


2016-02-02

【無料HTTS】 Let's Encrypt を試してみた!

先日Googleが 「HTTPS ページが優先的にインデックスに登録されるようになります」というアナウンスをしたんで、さすがに私が運営している個人サイトでも https通信に対応させないとまずいだろうと思い、最近話題になっている「Let's Encrypt」を試してみました。

※なお、2016/02/01現在でまだパブリックベータですので企業向けサイトにはまだ利用するべきではないと個人的には思っています。




今回の結論:
無料でHTTPSを利用できるようにしてくれてホントにありがとう!(^-^)b でも、できればもう少し有効期間を伸ばしてくれたらなー。


インストール

Gitでパッケージをコピーしてコマンドを実行するだけです。

こちらのページがとても親切に説明してくれていますのでインストール方法については省略します。
↓↓↓
無料SSL証明書の Let's Encrypt が公開されたので実際に試してみた


私の場合は --webroot をつけてウェブルート・モードを利用しました。
その際に少しハマってしまったのが以下2点です。

  • sudo をつけないと認証に必要なファイルを作成できなかった。
  • 作成するファイルのパスが正しくなかったので認証できなかった。

つまり流れとしては、

1. 指定したウェブルート/.well-known/acme-challenge 内に認証ファイルを作成

2. 指定したドメイン/.well-known/acme-challenge/*********** にアクセスがあることで認証を完了

というものでしたので、私の好きな Laravel では「ウェブルート/public」にしなければいけないのでした。^-^;
(Google Analyticsとかの認証と同じやり方ですねー。)


しかし、結果として以下のように証明書をゲット。


あとは httpdのコンフィグファイル(httpd.conf等)に以下のように追加すればOK!

1.NameVirtualHost を追加
 NameVirtualHost *:443  
2.SSL接続の設定を追加
 <VirtualHost *:443>  
   SSLEngine on  
   SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem  # ゲットした証明
   SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem  # ゲットした証明キー
   DocumentRoot /var/www/html/www.example.com/public  
   ServerName www.example.com  
   ServerAlias example.com  
 </VirtualHost>  
3.最後に忘れちゃいけない restart
 service httpd restart  

はい!
これで https://example.com に接続が可能になるはずです!

※ ちなみに、iptablesの443ポートを開けるのをお忘れなく(←私です^-^;)


自動で証明を更新

あとは、90日で証明の期限がきれるので crontab を使って自動で再取得をしましょう。

↓こんな感じです

 0 5 1 * * /YOUR_PATH/letsencrypt-auto certonly --webroot -w /var/www/html/example.com/public -d example.com --renew-by-default --debug && service httpd restart  


(追記: 20160724)

どうやらLetsencrypt の仕様が変わって上記の「letsencrypt-auto」コマンドは使えなくなってしまったようで実行しても以下のようなエラーが発生してしまいます。

【エラー】
You are running with an old copy of letsencrypt-auto that does not receive updates, and is less reliable than more recent versions. We recommend upgrading to the latest certbot-auto script, or using native OS packages.

【エラー訳】

古い letsencrypt-auto を実行しようとしていますがアップデートできないですし、現バージョンよりも信頼性が低いです。
最新の certbot-auto scriptへのアップグレードかOSパッケージの利用をおすすめします。

・・・ということで新しい更新プログラムのインストールは以下をご覧ください。


1.どこか適当なフォルダにcertbotをインストール

といっても git clone で自動でダウンロードができます。以下を実行しましょう。
(現在いるフォルダ直下にフォルダを作成する例になります。)

 git clone https://github.com/certbot/certbot ./certbot

2.自動で更新ができるように cron に以下を追加しましょう。

 0 5 1 * * /YOUR_PATH/certbot-auto certonly --webroot -w /var/www/html/example.com/public -d example.com --renew-by-default --debug && service httpd restart  



以上です。
次は mod_spdy か mod_http2 とかを試してみようかな〜。^-^


(追記 1)いつも忘れちゃうので apacheのコンフィグファイルの内容を保存。
どうやら apache のバージョンによってアクセスするべきファイルが少し違うらしい。
 <VirtualHost *:443>  
   SSLEngine on  
   SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem  
   SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem  
   SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem  
   DocumentRoot /var/www/html/example.com/public  
   ServerName example.com  
   <Directory "/PATH/TO/example.com/public"> 
     AllowOverride All
   </Directory> 
 </VirtualHost>  


(追記 2)ちなみにHTTPSへ移行した後、ブラウザでアクセスすると「混在コンテンツ」として警告をうけることがあります。
これは、HTTPSでアクセスしたページに「http://」で始まっているCSSやJavaScriptなどが存在しているという意味です。

解決するためには、以下のように「http:」の部分を削除してしまえばOK。
あとはブラウザが自動でプロトコルを選択してくれます。

 <link href='//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>  


2016-01-31

PHPでユーザー管理するならSentinelが便利すぎる!

カナダからの帰国後気持ち的にも少し落ち着いてきたので、ここいらでよく利用しているパッケージの使い方を再度おさらいしようというモチベーションが(なぜか)高まってきました。
そこで、今回は機能が豊富でとても使いやすいユーザー管理パッケージ「Sentinel」をご紹介したいと思います。



【Sentinelの感想】まさにかゆいところに手が届く感謝感激のパッケージです!


1.まずは主な特徴
  • ログイン/ログアウト(当たり前ですけど^-^;)
  • ユーザーに役割をもたせられる
  • パスワードリマインダー機能
  • パスワードを自動で暗号化して保存
  • ユーザー登録時のアクティベーション機能(選択可)
  •  ユーザー名(姓と名)をデフォルトで保存可能
などなど。
あとは私の大好物、Laravelにも対応しています。(バージョン>=5.0)


2.次にインストール

PHPの自動パッケージ管理システム composer でインストールします。
composerは便利すぎて一度使うとやめられませんね(笑)
こんなカンジです。
composer require cartalyst/sentinel "2.0.*"

3-1.初期設定(Laravel)

Laravelで利用するには、app.php の中にある providers へ ServiceProviderを追加。
 'providers' => [  
   Cartalyst\Sentinel\Laravel\SentinelServiceProvider::class,  
 ]  
aliases へ以下3つを追加
  'aliases' => [  
     'Activation' => Cartalyst\Sentinel\Laravel\Facades\Activation::class,  
     'Reminder'  => Cartalyst\Sentinel\Laravel\Facades\Reminder::class,  
     'Sentinel'  => Cartalyst\Sentinel\Laravel\Facades\Sentinel::class,  
 ]  
あとは、データベースにテーブルを作成して完了です。
便利なので migration で一気に作成しましょう。

※注意

DBテーブル名の衝突をさけるためにデフォルトで存在する「users」作成マイグレーションは事前に削除するかプログラム部分をコメントアウトしておきましょう。
私の環境では「2014_10_12_000000_create_users_table.php」でした。

(1)Publish でmigrationファイルをパッケージからコピー
php artisan vendor:publish --provider="Cartalyst\Sentinel\Laravel\SentinelServiceProvider"
(2)Migration 実行
php artisan migrate

3-2.初期設定(Laravel以外)

illuminate/database パッケージがあれば通常のPHPからでも利用できるようです。
(ただし、この部分は検証していません。なにぶんLove Laravelなもので、、、^^;)
composer require illuminate/database
でインストールして以下のように設定をします。

(以下本家ページからの引用)
 // 必要なクラスをインポート
 use Cartalyst\Sentinel\Native\Facades\Sentinel;  
 use Illuminate\Database\Capsule\Manager as Capsule;

 // autoloadを読み込む
 require 'vendor/autoload.php';

 // Eloquent Capsule インスタンスを生成
 $capsule = new Capsule;  
 $capsule->addConnection([  
   'driver'  => 'mysql',  
   'host'   => 'localhost',  
   'database' => 'sentinel',  
   'username' => 'user',  
   'password' => 'secret',  
   'charset'  => 'utf8',  
   'collation' => 'utf8_unicode_ci',  
 ]);  
 $capsule->bootEloquent();  
そして、DBの構造はこんな感じです。
 CREATE TABLE IF NOT EXISTS `activations` (  
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
  `user_id` int(10) unsigned NOT NULL,  
  `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  
  `completed` tinyint(1) NOT NULL DEFAULT '0',  
  `completed_at` timestamp NULL DEFAULT NULL,  
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  PRIMARY KEY (`id`)  
 );  
 CREATE TABLE IF NOT EXISTS `persistences` (  
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
  `user_id` int(10) unsigned NOT NULL,  
  `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  PRIMARY KEY (`id`),  
  UNIQUE KEY `persistences_code_unique` (`code`)  
 );  
 CREATE TABLE IF NOT EXISTS `reminders` (  
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
  `user_id` int(10) unsigned NOT NULL,  
  `code` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  
  `completed` tinyint(1) NOT NULL DEFAULT '0',  
  `completed_at` timestamp NULL DEFAULT NULL,  
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  PRIMARY KEY (`id`)  
 );  
 CREATE TABLE IF NOT EXISTS `roles` (  
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
  `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  
  `permissions` text COLLATE utf8_unicode_ci,  
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  PRIMARY KEY (`id`),  
  UNIQUE KEY `roles_slug_unique` (`slug`)  
 );  
 CREATE TABLE IF NOT EXISTS `role_users` (  
  `user_id` int(10) unsigned NOT NULL,  
  `role_id` int(10) unsigned NOT NULL,  
  `created_at` timestamp NULL DEFAULT NULL,  
  `updated_at` timestamp NULL DEFAULT NULL,  
  PRIMARY KEY (`user_id`,`role_id`)  
 );  
 CREATE TABLE IF NOT EXISTS `throttle` (  
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
  `user_id` int(10) unsigned DEFAULT NULL,  
  `type` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  
  `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  PRIMARY KEY (`id`),  
  KEY `throttle_user_id_index` (`user_id`)  
 );  
 CREATE TABLE IF NOT EXISTS `users` (  
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  
  `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  
  `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL,  
  `permissions` text COLLATE utf8_unicode_ci,  
  `last_login` timestamp NULL DEFAULT NULL,  
  `first_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  
  `last_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,  
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',  
  PRIMARY KEY (`id`),  
  UNIQUE KEY `users_email_unique` (`email`)  
 );  


4.基本的な使い方

さあ、ではやっと実際の使い方です。
おそらくSentinelは直感的に使えると思います。

1.新規ユーザーの追加
 $credentials = [  
   'email'  => 'taro.yamada@example.com',  
   'password' => 'password',  
   'first_name' => '太郎',  // 省略可
   'last_name' => '山田'  // 省略可
 ];  
 $user = Sentinel::registerAndActivate($credentials);  
これだけでOK!
パスワードは自動的に暗号化されているのでセキュリティにも強くなっています。

  • 必要がない場合は「first_name」「last_name」は省略できます。
  •  「メール送信→URLをクリックで本登録」という流れにしたい場合は「6.アクティベーション」を参照してください。

2.ログイン
 $credentials = [  
   'email'  => 'taro.yamada@example.com',  
   'password' => 'password',  
 ];  
 $user = Sentinel::authenticate($credentials);  
もし次からのログインを省略する場合は以下のように第二引数に true をセットします。
 Sentinel::authenticate($credentials, true);   

3.ユーザーの取得

(1)IDから取得
 $user = Sentinel::findById(1);  
(2)メールアドレスから取得
 $credentials = [  
   'login' => 'taro.yamada@example.com',  
 ];  
 $user = Sentinel::findByCredentials($credentials);  
あとは、Persistence code  などからでもユーザーを取得できるようです。


4.ユーザー情報の変更/削除

変更は update() を使います。
 $user = Sentinel::findById(1);  
 $credentials = [  
   'email' => 'new.taro.yamada@example.com',  
   'password' => 'new_password',  
   'first_name' => '二郎',  
   'last_name' => '鈴木'  
 ];  
 $user = \Sentinel::update($user, $credentials);  
削除は delete() です。
 $user = Sentinel::findById(1);  
 $user->delete();  


5.役割の設定

Sentinel では、例えば
  • Aさん → 管理者
  •  Bさん → 一般ユーザー
というようにログインする人たちに役割を設定することができます。

(1)新しい役割を追加する
 $role = Sentinel::getRoleRepository()  
   ->createModel()  
   ->create([  
     'name' => '管理者',  
     'slug' => 'admin'  
  ]);  
(2)役割をユーザーに割り当てる/解除する
 $user = Sentinel::findById(1);  
 $role = Sentinel::findRoleByName('管理者');  
 $role->users()->attach($user);  // 割り当てる  
 $role->users()->detach($user);  // 割り当てを解除する  
(3)役割を取得
 $role = Sentinel::findRoleById(1);  // ID
 $role = Sentinel::findRoleBySlug('admin');  // Slug(ユニークIDみたいなもの)  
 $role = Sentinel::findRoleByName('管理者');  // 役割の名前

6.アクティベーション

サイトによっては、ユーザー登録をするときまず「本登録URL」をメール送信し、そのURLがクリックされた時点で本登録するという流れが必要な場合があると思います。
アクティベーションはこの機能を実現するため利用できます。

(1)本登録コードの取得
 $user = \Sentinel::register([  
   'email'  => $email,  
   'password' => 'password'  
 ]);  
 $activation = \Activation::create($user);  
 $activation_code = $activation->code;  
$activation_code に本登録に必要なコードが入っていますので、このコードを使って
http://example.com/activation/****************************************
のような本登録のURLを作成することができます。

(2)本登録を実行
 $user = Sentinel::findById(1);  
 if (Activation::complete($user, '本登録コード'))  
 {  
   // 本登録完了!
 }  
 else  
 {  
   // 失敗,,,
 }  
※ちなみに本登録していない状態でログインを試みると「NotActivatedException」エラーが帰ってきます。


7.パスワード・リマインダー

ユーザーがパスワードを忘れたときに利用する再発行の機能です。

(1)リマインダー・コードを取得する
 $user = \Sentinel::findById(1);  
 $reminder = \Reminder::create($user);  
 $reminder_code = $reminder->code;  
(2)新パスワードの設定
 $user = Sentinel::findById(1);  
 if ($reminder = Reminder::complete($user, 'リマインダー・コード', '新パスワード'))  
 {  
   // 成功!
 }  
 else  
 {  
   // 失敗,,,
 }  

ということで少し長くなってしまいましたが、Sentinelの主な機能は以上です。他にもまだいくつか機能がありますが、それはまたの機会ということで ^-^
ではでは〜。



Thank you, Cartalyst.
Sentinel is a great package!

2016-01-28

【Ubuntu】PHP 5.6 を PHP 7 へアップグレード

2015年の12月3日にリリースされたのでそろそろこの新バージョンを体験をしてみたくなりいつも開発使っているUbuntu14.04にPHP7をインストールしてみました。
でも、どういうわけかうまく「PHP5.6→PHP7」への切り替えがうまくいかなかったので備忘録としてこの記事をお届けします。




PHP7を体験してみた感想: 
超絶速いーーーーーーーー!はず(プラシーボ効果?)


まず以下の記事を参考にPHP7をUbuntuへインストールしました。

How To Upgrade to PHP 7 on Ubuntu 14.04


【PHP7をインストールする3つの手順】


1.以下のコマンドでリポジトリを追加
sudo add-apt-repository ppa:ondrej/php
2.アップデート
sudo apt-get update
3.PHP7本体をインストール
sudo apt-get install php7.0
 
(おまけ)もしMySQLを使ってるなら次のコマンドも実行しましょう。
sudo apt-get install php7.0-mysql

これでインストールは完了です。


・・・と思いapache2を再起動し、phpinfo() で確認してみましたが以前のPHP5.6のままでした。

でも、コマンドで php -v を実行するとPHP7はきちんとインストールされているのに、、、



なぜウェブの方だけPHP7が動いていない、、、!?



そこで先ほどの記事を確認してみると

「PHP5のコンフィグファイルはそのまま残ってるから注意してねー」

とのこと。



そうでした。
ウェブサーバーである apache2にPHP7を使う設定をしてあげないといけないんでした。

ということで、ここからはapache2の設定を変更することに。


【apache2にPHP7を読み込ませるように変更する3つの手順】


1.設定フォルダへ移動

コマンドで設定ファイルが読み込まれるフォルダへ移動(私のUbuntuの環境では以下)。

/etc/apache2/mods-enabled

2.元のPHPバージョンのシンボリックリンクを無効にする

このフォルダの中には「php5.conf」「php5.load」というシンボリックリンクがあるので、この2つをリネームしてそれぞれ「php5.conf.org」「php5.load.org」に変更。


3.代わりのPHP7へのシンボリックリンクを2つ作成する

sudo ln -s /etc/apache2/mods-available/php7.0.conf php7.0.conf
sudo ln -s /etc/apache2/mods-available/php7.0.load php7.0.load


さあ!
これで apache2 の設定は終了です。

sudo service apache2 restart

を実行して phpinfo() を確認してみましょう。
きっと新しいPHP7がデビューしているはずです。


お疲れ様でしたーーー!



※ひとりごと

どうやらLaravel 4.2 は PHP7をサポートしてないらしく、インストールされてるのに mcrypt でエラーが発生しまう。
PHP7はスピード速い(と思う)ので使いたいんだけど、どうしたもんかなー(^-^;




2016-01-21

スクリーンショットを使ってバグ報告できるサービスを公開してみた【無料】

2016年のはじめに半年間のカナダ生活から帰国し、やっと生活が落ち着いてきたのでタイトルにもあるスクリーンショットを使ってバグ報告をするサービス「BUG-GUI」を作成し、公開してみました。

開発環境は相変わらず「Laravel (5.1) + jQuery + BootStrap」です。
(もはやこの3点は至れり尽くせりなので、自前で全て開発となるとできれば遠慮したいというのが本音になってきました。^^;)

では!
公開したサービスのテーマは以下です。


ブラウザで見たまま直感的にバグ報告できるよ!




実際にどのようになるかは以下の動画をご覧ください。(実際の体験デモはこちら
↓↓↓

BUG-GUI - Let's report bug instinctively!




つまり、HTML5の Canvas を使って、画面を見たままバグ報告が行えるサービスになっています。



でも、別にテキストとか電話でのバグ報告でいいんじゃん!?


 はい。もちろんいいんです…それが小説をかけるぐらいの文才がある方、もしくはお笑い芸人ぐらいおしゃべりが達者な方からのバグ報告だったら。
(ついでにいうと私の読解力が相当程度あるなら..... ^-^;)

つまり、テキストや電話でのバグ報告に限界を感じたわけです。
画像の方が文章よりはるかに情報伝達は優れていますしね。


てか、Chrome とか FireFox の拡張機能でそういうのあるよ? 

 ですよね。Awesome Screenshot なんかはとても便利なのでまさに私自身は手放せない存在になっています(笑)
ただ、拡張機能はブラウザ毎にインストールをしないといけないので、PCに詳しくないクライアント様の場合だと、、、ってな話になるわけです。
しかも、そのスクリーンショットをメールに添付して送信してもらうには多少の手間ひまがかかりますので。



【サービス本体に利用しているJavaScript 3パッケージ】

jQuery

これは説明はいりませんね。
JavaScriptフレームワークの王者です。

html2canvas 

HTMLのスクリーンショットを取ることができるパッケージ。
このライブラリにであったことがこのサービス開発の発端になりました。
(・・・と、いうよりほぼこのパッケージが本サービスの心臓部分です(笑))

jquery.bug-gui

html2canvas で取得したスクリーンショットに様々な描画をするためのパッケージ。
私の作品です。



・・・ということで、もしクライアント様からのバグ報告に困っているようでしたら「BUG-GUI(ばぐじーゆーあい)」を試してみてください。
無料で利用できます。
↓↓↓

BUG-GUI - Let's report bug instinctively!



■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 


※もしご要望等がありましたら、以下のGitHubから投稿してください。m_ _m

 https://github.com/SUKOHI/bug-gui-message

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以上ということもあり、いわゆるレンタルサーバーと呼ばれる環境では使えるようになるにはまだまだ時間がかかりそうってとこがネックになりそうですねー。


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



2015-07-09

私がウェブ開発で行っている「時短」テクニック【全9件】

今回はいつものITに関する技術紹介とは違って、普段私がウェブ開発で利用している「時短テクニック=(時間を短縮する方法)」をまとめてみました。
中にはテクニックというよりアプリやサービスを使ってるだけ、というものもありますが時間を短縮することにつながっている全9テクニックです。




【紹介の前に】

今回は 「時短度」を最大5つとして独断と偏見で評価しています。

では以下から実際のテクニックの紹介です!



1.マウスジェスチャ

これはブラウザだけでなくデスクトップでも使っています。
昔はいちいちアプリケーションやページを閉じるのも「x」と書かれた右上のボタンをクリックしていましたが今では「マウスを右クリックしながら下へ移動させる」だけですのでとても時短に貢献してくれています。

ちなみに、私が利用しているのは

(1) Linux ・・・ Easystroke
(2) Windows ・・・ Smalker
(3) ブラウザ ・・・ Fire GesturesSmooth Gestures Plus

です。
マウスジェスチャは一度使い出すと本当に便利で、たまに他人のPCを使ったりするとイライラするぐらいです。


【時短度】 ★★★★☆



2.パソコンの機能アップ、改善

これは多少お金が必要ですが、劇的に時間短縮ができるようになります。

(1) HDD → SSD

特に他のものと比べても効果が高いですね。
SSDは今は比較的安く購入できるのでとてもオススメです。


(2) メモリーの増強、CPUの変更

現在の環境ではメモリーの増強のみですがこちらも効果が高いです。


(3)OSにLinuxを利用する

現在はWindowsのスピードも速いようですし、Linuxもものによっては重いものもありますので、選択するディストリビューションによってはとそれほど効果は高くないかもしれません。


【時短度】 ★★★★★



3.grunt

Grunt はいろいろな開発支援をしてくれますが、その中でもファイルを保存した瞬間にブラウザを自動で再読み込みしてくれる「livereload」は手放せないツールです。
これを使ってからは毎回毎回リロードするのがバカらしくなりました。
※最近話題になっているGulpでもリロードが利用できるみたいですね。


【時短度】 ★★★★★



4. パッケージ管理ツール

その昔は必要なパッケージがあると、GitHubなどからダウンロードしてきて、そのパッケージを解凍して、適当な場所に設定して、、、という流れでしたが次の2つを使うようになってからその作業を自動実行できるようになりました。
しかも composer などは使っているPHPの環境や依存までチェックしてくれているようなのでいたれりつくせりといった感じです。

(1)PHP: composer
(2)JSなど: bower


【時短度】 ★★★★☆



5.PhpStorm(IDE)

PhpStorm はPHP開発に特化したソフトウェアなので全ての人に当てはまらないかもしれませんが、とても軽く動作しますしファイル検索も楽にできるのでとてもおすすめです。
有料ですがお金を払う価値は間違いなくあります。

※使ったことはないのですが、Sublime Text も評価が高いようですのでこれを機に開発環境を見なおしてみてはいかがでしょうか。


【時短度】 ★★★☆☆



6.英語

よく言われることですが、ITなどの情報はやはり日本語だけでは情報収集がしにくいことが多いです。
例えば、何かのエラーが発生した場合に日本語だけで探しても全く参考になるページが見つからなくても英語ならほぼどんなものでも紹介ページを見つけることができます。
(いつも Stack Overflow には助けられっぱなしです。日本語版も活発になればいいですね ^-^)


【時短度】 ★★★★☆




7.プラグイン(汎用クラス)の作成

コンピュータの最も有利な点のひとつに「コピーが何でも簡単にできてしまう」というものが挙げられると思います。
これをウェブ開発でも最大限利用するために、私は常に「一度作ったプログラム」をいつでも他のものに流用できるよう心がけています。
私は最近Laravelでのウェブ開発が多いのですが、Laravel用のプラグインを作成しGitHubで公開することで時短を実現しています。


【時短度】 ★★★★★



8.外字登録


IMEにプログラム用の外字を登録することで毎回同じ文字を打たなくてもよくするというテクニックです。
例えば私の場合ですと、「p」と入力すると

echo '<pre>'. print_r($array, true) .'</pre>';

という文字が変換候補に現れるなどの設定を行っています。


【時短度】 ★★☆☆☆



9.MailCatcher

MailCatcher はプログラムからメール送信した際に実際にはPC外へは送信せず、送信されたメール内容の確認ができるというツールになります。(ダミーSmtpっていうんでしょうか?)
以前はメールの送信テストをする際にはG-Mail を利用して実際にメール受信してチェックをしていました。
このやり方でもほぼ問題は無いのですが、やはり受信するまでにタイムラグがあるのでMailCatcherを導入しました。
メールの誤送信もなくなりますし、スピードアップもできるのでとてもいい感じです。


【時短度】 ★★★☆☆



(おまけ) Git FTP

Git FTP はGitを使いつつFTP(SFTPなどもOK)でファイルをアップロードできるツールになります。
これがあれば、更新したファイルのみをアップロードできますし、.gitignore なども利用できるのでとっても便利です。


と、いうことで以上が私が行っているウェブ開発の「時短」テクニックでした。
皆さんももっとこんなものがあるよ!というのがあったらぜひ教えてください。
「時短」、好きです。^-^
お疲れ様でした。