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 なども利用できるのでとっても便利です。


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




2015-03-09

Modern.ie を Ubuntu で使う方法(IEを使った実行テストができます)

とんでもなく前回の投稿から時間が開いてしまいました。
もちろんいろんな開発をしていると「お!これはブログにのっけようかな。」というアイデアも浮かぶのですが、なかなか実行には移すのは難しいものですね。
さてさて、というわけで今回はそんな重い腰をあげ、私の大好きなOS「Ubuntu(14.04)」内でInternet Explore 11 を起動し、ローカル環境のサイトへアクセスする方法を備忘録的にお届けしたいと思います。




最終結論: Microsoftさん心からありがとう!(詳しくないけど社長が交代したからこんないいものがでてきたのかな?)

【前提条件】

Ubuntu に VirtualBox がインストールされていること。(Oracleにも感謝^^)


では、まずModern.ie に必要となるファイルを以下のサイトからダウンロードしましょう。

https://www.modern.ie/ja-jp


【ダウンロード方法】

※注:ダウンロードするファイルの容量はバカでかいので注意が必要です。私はパーティションの関係上いろいろなファイルを消す羽目になりました(汗)


1.ではまず、「仮想マシン」をクリックします。


2.画面下のバーチャルマシンを選びましょう(私の場合はWindows 7 の IE 11です。)


3.次にプラットフォームです。Linux用を選びましょう。


4.手順が楽なので、一番上の single-file を選んでダウンロードを実行します。


先ほど書きましたがダウンロードは時間がかかると思います。
気長に待ちましょう。

・・・


さぁ、ダウンロード が完了したら解凍して、「IE11 - Win7.ova」というファイルを取り出します。
では次からはVirtualBox へこのファイルをインポートする手順を紹介しましょう。(簡単ですけど)


 【VirtualBox へのインポート】


1.VirtualBoxを起動します。

2.仮想アプライアンスのインポートをクリックし、先ほどの 「IE11 - Win7.ova」を選択すると自動で開始されます。


※私の場合その他の設定はデフォルトで実行しました。
以上でインポートは完了です。
次は実際に起動をしましょう。

VirtualBox に IE11 - Win7と表示されているのでそこからWindowsを起動します。
ほんの少し時間はかかりますが・・・




はい。Ubuntu内で Windows 7 が起動しました!

ではここからは、このWindows 7内のIE 11 から起動元であるUbuntuのローカルホストを表示する方法をご紹介します。


【ローカルホスト参照する方法】

1.スタートメニューから Command Prompt(コマンドプロンプト)を実行します。



2.「ipconfig」と入力しエンターキーを押すといろいろな情報が表示されるので、その中にある「Default Gateway」の横に表示されている文字列を覚えておきましょう。(以下の例では 10.0.2.2です。)


3.では次に host 情報を変更するためにNotepad を開きます。(スタートメニューから 「Notepad」で出てきます)。

※この時通常どおり起動すると権限の関係から保存ができませんので、以下のように右クリックして「Run as administrator」から起動します。つまり管理者権限で実行するということですね。



4.Windows がOKかどうか尋ねてくるので、Yesをクリックしましょう。



5.ではやっと host ファイルの変更です。Notepadの「File」→「Open」をクリック。
その中から「C\Windows\System32\drivers\etc」のフォルダにある 「hosts」というファイルを開きましょう。

※もしこのフォルダに何も表示されない場合は、右下にあるドロップボックスの「All Files」を選択してください。

6.次に host ファイルの設定です。以下のようにファイルの最後に設定を書き込みます。(10.0.2.2は先ほど確認した Default Gateway になります。)



※私の場合は Ubuntu にも開発用ドメインを設定もしているので「****.dev」のようなアドレスも追加されていますが、必要なければ localhost のみで問題ありません。

7.さぁ、少し長かったですがこれで hostファイルの設定が完了です。このファイルを保存して Windows を再起動しましょう。


次にIEを開いた際には http://localhost/ へアクセスが可能なはずです。
お疲れ様でした。


【おまけ】

Modern.ie を使っていてまず最初にとまどったのですが、キーボード配列の違いから

1.:(半角コロン)
2.@(半角アットマーク)

の入力方法がわかりませんでした。

結論から言うと、

「:」は「Shift + ;(セミコロン)」で、
「@」は「Shift + 2(←テンキーではない方)」

で入力が可能です。ちょっと不便ですが実行テストだけなので覚えておいたほうがいいですね。
(もしかすると日本語化できるのかな?)


 【おまけ2】

次に困ったのが「コピペ」です。
そう。Ubuntu上でクリップボードにコピーしたテキストを Windows内でペーストしたい、、、けどできなかったので調べてみると、VirtualBoxの方で設定することでコピペが可能なようです。

手順としては、

画面中央の「一般」をクリックすると設定画面が出てくるので、「高度」タブを選択、

「クリップボードの共有」を「ホストOSからゲストOSへ」にして OKを押せば完了です。

※ちなみにその下はドラッグ&ドロップの設定です。お好みでここも設定しておくと便利ですよ。




以上です。
お疲れ様でした。^^





2014-10-09

Laravelでローカリゼーションするなら「Translation Manager」がすごく便利!(多言語翻訳ファイルも紹介してます)

さて今回はLaravelのローカリゼーションに関する便利なパッケージを発見したので備忘録として使い方+αをお届けしたいと思います。

実際少し前にLaravelを英語と日本語でローカリゼーションする機会があったのですが、この作業が地味に大変なんです。

つまり、英語のファイルと日本語のファイルが(もちろん)別れているため、一回一回キーを追加したり探したりする必要があります。

いつか自分で管理パッケージをつくろうかと思っていたらやはり先に同じことを考えている人がいたようですね。
さすがはLaravelです。^-^


出典:M. Adiputra


最終結論: ローカリゼーションが必要でなくてもバリデーション用にも使えるパッケージでした!


まず今回使わせていただくパッケージの紹介から。

barryvdh/laravel-translation-manager

※この作者は他にも「laravel-debugbar」や「laravel-ide-helper」などの有名なパッケージを作成しているようですね。心から感謝です。m_ _m



では、早速インストールしましょう。

Laravelをインストールしたフォルダ直下にある「composer.json」を開いて以下のように require にパッケージを追加します。

composer.json

"require": {
(その他のパッケージ),
"barryvdh/laravel-translation-manager": "0.1.x"
},


そして、コマンドから `compser update` を実行しましょう。
自動でパッケージがインストールされます。


そして、パッケージを使えるように設定をします。

app/config/app.php

'providers' => array( (その他のパッケージ),  'Barryvdh\TranslationManager\ManagerServiceProvider',
),
※追記

すみません。migrationする作業が抜けていました。T_T
以下を実行してDBに専用テーブルを作成してください。

php artisan migrate --package="barryvdh/laravel-translation-manager"


つぎに通常のパッケージインストールではあまり使わない以下のコマンドを実行してパッケージ内にある config ファイルをLaravel本体へコピーします。

php artisan config:publish barryvdh/laravel-translation-manager

※注: なぜかわかりませんが、私の場合存在するはずの 


vendor/barryvdh/laravel-translation-manger/src/config/
vendor/barryvdh/laravel-translation-manger/src/config/config.php

が見つかりませんでした。
もし同じことが発生していたら configフォルダを作成し、その中にconfig.php をコピペしてください。


そして、 app/routes.php に

Route::group(array('before' => 'auth_admin'), function() {
    Route::controller('translations', 'Barryvdh\TranslationManager\Controller');
});

を追加すると、http://***.com/translations にアクセスできるようになります。


※もし本番環境で表示したくない場合は、App::isLocal() などを使って場合分けをしたほうがいいですね。



使い方

※まだ app/lang/ja を作っていない場合はフォルダを作成しましょう。


まず、画像にある「import groups」をクリックしましょう。すでに「lang」登録されている単語を抽出します。



それが完了したら、ページを再読み込みすれば以下のようにどのファイルを編集するかを選択できるようになりますのでクリックしましょう。


あとは単語一覧が表示されるので個別に編集していくだけです。
(※まだファイル自体には反映されてません次の「ファイルへの反映」をみてください)




ファイルへの反映

ページには「publish translations」ボタンを押すとファイルに反映されると書いてますが実際はできなかった(おそらく権限を変更すればいけるのかな?)のでもうひとつの方法である「コマンドでの反映」をご紹介します。

コマンドでLaravelをインストールしているフォルダへ移動し、

php artisan translation:export ***

を実行しましょう。
言語ファイルに変更が反映されます。


※ ***は .phpをぬいたファイル名。例えば「messages」「validation」です。


はい!
ということで Translation Manager の紹介は終了です。


おまけ

世界各国の翻訳データを集めたファイルが以下のページからダウンロードできます。
もし、サイト内容が日本だけでなく世界に向けたものなら言語ファイルだけでも追加しておいて損はしないかもしれませんね。

https://github.com/caouecs/Laravel4-lang



Thank you barryvdh and caouecs!
You guy's works must save my time when developing websites.:)))