2017年2月28日火曜日

2017年2月27日月曜日

Linuxで重複したファイルを探し出す「fdupes」

Linuxで重複したファイルを探し出す「fdupes」をインストールしてみました。

Ubuntuでのインストール
$ sudo apt-get install fdupes
使い方
Usage: fdupes [options] DIRECTORY...

 -r --recurse           for every directory given follow subdirectories
                        encountered within
 -R --recurse:          for each directory given after this option follow
                        subdirectories encountered within
 -s --symlinks          follow symlinks
 -H --hardlinks         normally, when two or more files point to the same
                        disk area they are treated as non-duplicates; this
                        option will change this behavior
 -n --noempty           exclude zero-length files from consideration
 -f --omitfirst         omit the first file in each set of matches
 -1 --sameline          list each set of matches on a single line
 -S --size              show size of duplicate files
 -m --summarize         summarize dupe information
 -q --quiet             hide progress indicator
 -d --delete            prompt user for files to preserve and delete all
                        others; important: under particular circumstances,
                        data may be lost when using this option together
                        with -s or --symlinks, or when specifying a
                        particular directory more than once; refer to the
                        fdupes documentation for additional information
 -N --noprompt          together with --delete, preserve the first file in
                        each set of duplicates and delete the rest without
                        prompting the user
 -p --permissions       don't consider files with different owner/group or permission bits as duplicates
 -v --version           display fdupes version
 -h --help              display this help message
コマンド例
$ fdupes -r /path/to/dir
$ fdupes -rf /path/to/dir | sort | uniq | grep -v '^$' > fdupes.txt

参考サイト
違うファイル名なのに中身が同じ、重複したファイルを一括で整理する(Divide et imperaさん)
Linux上で重複したファイルを探して削除する(Scribbleさん)

2017年2月25日土曜日

JavaとPythonにFTPインジェクションの脆弱性

JavaとPythonにFTPインジェクションの脆弱性が見つかったそうです「JavaとPythonに脆弱性、ファイアウォールを迂回できる恐れ」。こんなことがあるんですねという、ちょっとビックリするニュースです。

脆弱性の原因は、JavaがFTPプロトコルのユーザー名の構文を適切に検証していないことにある。 FTPでは認証がサポートされているが、JavaのXML eXternal Entity(XXE)は、ユーザー名中のキャリッジリターン(CR)とラインフィード(LF)の有無を検証していないという。


参考サイト
JavaとPythonに脆弱性、ファイアウォールを迂回できる恐れ--研究者ら報告(ZDNet Japan)

2017年2月24日金曜日

Composerで「the requested PHP extension curl is missing from your system」のエラー

Composerで「the requested PHP extension curl is missing from your system」のエラーが出たので、対処です。環境はUbuntu 16.04。php-curlが入っていないために出ているエラーらしい。というわけで、インストールです。

$ sudo apt-get install php7.0-curl
# あるいは、
$ sudo apt-get install php5-curl

参考サイト
Composer install error - requires ext_curl when it's actualy enabled(Stack Overflow)

2017年2月23日木曜日

Laravel5.4でDropboxにバックアップ

Laravel5.4で、Dropboxにバックアップです。Tim Lelandさんのブログに書かれている通りに試してみました。見事にDropbox上に、バックアップが保存されています。感動であります!

まずは、Dropbox APIのAppを作成。OAuth用のアクセストークンを取得する。

.env(「Access Token」は「App key」とは違うので注意)
DROPBOX_ACCESS_TOKEN=abcdefghijklmn1234567890
DROPBOX_APP_SECRET=abcdefghijklmn

Dropbox用のファイルシステムアダプター「league/flysystem-dropbox」を追加。

サービスプロバイダを作成
$ php artisan make:provider DropboxFilesystemServiceProvider

/app/Providers/DropboxFilesystemServiceProvider.php
namespace App\Providers;

use Storage;
use League\Flysystem\Filesystem;
use Dropbox\Client as DropboxClient;
use League\Flysystem\Dropbox\DropboxAdapter;
use Illuminate\Support\ServiceProvider;

class DropboxFilesystemServiceProvider extends ServiceProvider
{
  public function boot()
  {
    Storage::extend('dropbox', function ($app, $config) {
      $client = new DropboxClient($config['accessToken'], $config['appSecret']);

      return new Filesystem(new DropboxAdapter($client));
    });
  }
}

/config/app.php(サービスプロバイダを登録)
  'providers' => [
    App\Providers\DropboxFilesystemServiceProvider::class,
  ],

/config/filesystems.php(ファイルシステムの設定に「dropbox」を追加)
  'disks' => [
    'dropbox' => [
      'driver' => 'dropbox',
      'accessToken' => env('DROPBOX_ACCESS_TOKEN'),
      'appSecret' => env('DROPBOX_APP_SECRET'),
    ]
  ],

/config/laravel-backup.php(laravel-backupの保存先を「dropbox」に変更)
  'destination' => [
    'disks' => [
      'dropbox',
    ],
  ],

あとは、こちらの要領でバックアップ



参考サイト
Backup your Laravel 5 App to Dropbox(Tim Lelandさん)
thephpleague/flysystem-dropbox: Flysystem Adapter for Dropbox(GitHub)
Laravel5.4でバックアップ「spatie/laravel-backup」

2017年2月22日水曜日

Laravel5.4でバックアップ「spatie/laravel-backup」

Laravel5.4で、バックアップ「spatie/laravel-backup」を設定してみました。データベース、プログラムファイル、その他諸々、まとめてバックアップできます。

/config/app.php
  'providers' => [
    Spatie\Backup\BackupServiceProvider::class,
  ],
/config/laravel-backup.php を作成する
$ php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"

/config/laravel-backup.php が出来上がるので、適当に編集。

コマンド確認
$ php artisan list

 backup
  backup:clean         Remove all backups older than specified number of days in config.
  backup:list          Display a list of all backups.
  backup:monitor       Monitor the health of all backups.
  backup:run           Run the backup.
バックアップ実行
$ php artisan backup:run

/config/laravel-backup.php の設定で保存先の「disks」が「local」のままだと、

/storage/app/

ディレクトリの中に、データベースからプログラムファイルから、その他諸々、ごっそりzipファイルでバックアップされます。素晴らしい。



参考サイト
Installation and setup(Laravel Backup Docs)

2017年2月21日火曜日

Laravel5.4でパスワード再設定メールテンプレートをカスタマイズ

Laravel5.4で、パスワード再設定メールテンプレートをカスタマイズです。HTMLメールではなく、テキストメールで送信するように設定してみたかったのですが、挫折しました。たぶん、テキストでは送れないような気がします(?)

$ php artisan make:notification TextPasswordReset
/app/User.php
use App\Notifications\TextPasswordReset;

class User extends Authenticatable
{
  // sendPasswordResetNotificationをオーバーライド
  public function sendPasswordResetNotification($token)
  {
    $this->notify(new TextPasswordReset($token));
  }
}
/app/Notifications/TextPasswordReset.php
use Illuminate\Auth\Notifications\ResetPassword; 

class TextPasswordReset extends ResetPassword
{
  use Queueable;

  public $token;

  public function __construct($token)
  {
    $this->token = $token;
  }

  public function via($notifiable)
  {
    return ['mail'];
  }

  public function toMail($notifiable)
  {
    return (new MailMessage)
      ->subject('パスワード再設定') 
      ->view('emails.reset') 
   // ->markdown('emails.reset') これは、HTMLメールになってしまう。
      ->action('再設定', url('/password/reset', $this->token));
  }
}
/resources/views/emails/reset.blade.php(結局、改行などはHTMLタグを使うしかない。)
下記URLをクリックして、パスワードを再設定してください。<br>
<br>
{{ $actionUrl }}

参考サイト
Laravel5.3でパスワードリセットメールをテキスト形式で送りたいのですがどうすればできますか。(teratail)
Laravel 5.3 Redefine reset email blade template(Stack Overflow)
Illuminate\Notifications\Messages\MailMessage(Laravel API)

2017年2月20日月曜日

Laravel5.4でDateTime()がエラーになる

Laravel5.4で、DateTime()がエラーになるのは、名前空間(namespace)にDateTimeクラスを見つけられないかららしい。「use DateTime;」、あるいは「use Carbon\Carbon;」などとインポートステートメントを追加すれば解決します。

/app/Http/Controllers/BlogsController.php
use DateTime;
use Carbon\Carbon;

  public function test()
  {
    $now = new DateTime();
    $now = Carbon::now();
  }

参考サイト
how to use php DateTime() function in Laravel 5(Stack Overflow)

2017年2月19日日曜日

MariaDBやMySQLで利用できる大規模システム用分散ストレージエンジン「Spider」

MariaDBやMySQLで利用できる大規模システム用分散ストレージエンジン「Spider」 その機能に感動しました。これ最高に素晴らしいです!!

  • Spiderは、MySQLの既存のアーキテクチャーを更新して改善するストレージデータベースとリモートデータベースにアクセスする際の最初のステップです。
  • Spiderはデータベーストランザクションをサポートします。
  • Spiderは無制限のユーザーがMySQLデータベースにすばやくアクセスできるようにします。
  • SpiderはMySQLのパーティショニングをサポートしています。
  • Spiderは、無制限の並列処理をサポートする単一のシステムとして機能します。
  • 分散トランザクションとテーブル分割自体をサポートするために、Spiderもデータベースシャーディング用に作成されています。




参考サイト
ストレージエンジン「Spider」が目指す世界(エンタープライズジン)
Spiderストレージエンジンのご紹介
快適スケールアウト生活への第一歩。SPIDERストレージエンジンを使ってみよう!(漢(オトコ)のコンピュータ道さん)

2017年2月18日土曜日

セキュリティに特化した組み込み独自OS「KasperskyOS」

セキュリティに特化した組み込み独自OS「KasperskyOS」 IoTの時代を感じさせますねぇ。

OS自体にセキュリティ機能を備え、通信機器のサイバーリスクを低減し、IoT機器に適したセキュリティポリシーを備える。


ロシア語の解説。全くわからない。

参考サイト
カスペルスキー、セキュリティ特化の組み込み向け独自OS「KasperskyOS」(マイナビニュース)

2017年2月17日金曜日

Laravel5.4でデータベーストランザクション(Database Transactions)

Laravel5.4で、データベーストランザクション(Database Transactions)です。DBファサードのトランザクションメソッドを使用することで、クエリビルダーとEloquent ORMのトランザクションも制御できるとのこと。

/app/Http/Controllers/BlogsController.php
use Illuminate\Support\Facades\DB;

  public function destroy($id)
  {
    DB::beginTransaction();
    try {
      $blog = Blog::find($id);
      $blog->comments()->detach();
      $blog->delete();
      DB::commit();
      $success = true;
    } catch (\Exception $e) {
      $success = false;
      DB::rollback();
    }

    if ($success) {
      // 成功した場合の処理

    }
  }

参考サイト
Database Transactions(Laravel)
Transaction with Eloquent Laravel 5(Stack Overflow)

2017年2月16日木曜日

Laravel5.4でグローバル変数

Laravel5.4で、グローバル変数です。サービスプロバイダ内で、Config::set()で値を設定すると、各コントローラーからは、Config::get()で値を参照できるようになります。

/app/Providers/AppServiceProvider.php
use Config;

  public function boot()
  {
    Config::set(['user' => ['name' => 'John']]);
  }
/app/Http/Controllers/BlogsController.php
use Config;

  public function test()
  {
    $user_name = Config::get('user.name') ;
  }

参考サイト
Laravel 5 - Share variables in Service Providers(Stack Overflow)
Laravel5.3で、すべてのビューでデータを共有

2017年2月15日水曜日

Laravel5.4でリアルタイムエラートラッキングの「Sentry」

Laravel5.4に、リアルタイムエラートラッキングの「Sentrysentry-laravel)」を設定してみました。わざとエラーを起こしてみても、何も起こらないので、設定が間違っているのかも。信じて、しばらく様子を見ることにします(?)。

/config/app.php
  'providers' => [
    Sentry\SentryLaravel\SentryLaravelServiceProvider::class,
  ],

  'aliases' => [
    'Sentry' => Sentry\SentryLaravel\SentryFacade::class,
  ],
/app/Exceptions/Handler.php
  public function report(Exception $exception)
  {
    if ($this->shouldReport($exception)) {
        app('sentry')->captureException($exception);
    }
    parent::report($exception);
  }
/config/sentry.php(設定ファイルの作成)
$ php artisan vendor:publish --provider="Sentry\SentryLaravel\SentryLaravelServiceProvider"
/config/sentry.php
return array(
  'dsn' => env('SENTRY_DSN'),
  'breadcrumbs.sql_bindings' => true,
);

参考サイト
The Exception Handler(Laravel)
sentry-laravel(GitHub)
イベントログ収集ツールの Sentry が凄そう(Memoさん)

2017年2月14日火曜日

Laravel5.4で配列のバリデーション

Laravel5.4で、配列のバリデーションです。ショッピングカートなどで、商品数が増減し、すべての商品に入力チェックをかけたい場合などに有効です。最初はなんだかよくわかりませんでしたが、ちょっと慣れると、どんなものでもチェックできそうな気になります(笑)。

フォームのリクエストクラスを作成
$ php artisan make:request OrderRequest
/app/Http/Requests/OrderRequest.php
use App\Http\Requests\Request;

  public function rules()
  {
    // 名前とメールアドレスのチェック
    $rules = [
      'name' => 'required',
      'email' => 'required|email',
    ];

    // 選択された商品の入力チェック
    foreach($this->reitem->get('item') as $key => $val)
    {
      $rules['item_quantity.'.$key] = 'required';
      $rules['item_size.'.$key] = 'required';
      $rules['item_color.'.$key] = 'required';
    }
    return $rules;
  }

  // エラーメッセージの設定
  public function messages()
  {
    $messages = [];
    foreach($this->reitem->get('item') as $key => $val)
    {
      $messages['item_quantity.'.$key.'.required'] = '商品'.$key.'の数を入力してください';
      $messages['item_size.'.$key.'.required'] = '商品'.$key.'のサイズを選択してください';
      $messages['item_color.'.$key.'.required'] = '商品'.$key.'の色を選択してください';
    }
    return $messages;
  }

参考サイト
Validation(Laravel)
Validate an array of form fields with Laravel(Eric L. Barnesさん)

2017年2月13日月曜日

Laravel5.4の「array_has」は「array_key_exists」的な振る舞い

Laravel5.4の「array_has」は「array_key_exists」的な振る舞いなんですね。

PHPのいわゆる「in_array」的な動作なのかと思いこんでいたので、ハマりました。

確かに、ドキュメントを読むと、そのとおりなのですが、ちょっとわかりにくい気がしました。

bladeテンプレートで利用したい場合は、自前でヘルパーを用意する必要があるのかなと思います。

参考サイト
Helper Functions(Laravel)
Laravel array helpers if array has a value(Stack Overflow)
support/Arr.php(GitHub)
Laravel5.3でカスタムヘルパー(Custom Helpers)

2017年2月12日日曜日

Android版Chromeが「WebVR」に正式対応

Android版Chromeが「WebVR」に正式対応したそうです。WebVRはバーチャルリアリティデバイスへのアクセスを提供する実験的なJavaScript APIです。

WebVRの利点はインストールが不要なだけでなく、リンクアドレスを通して別のコンテンツを手軽に行き来できることにもあります。


参考サイト
アプリではなくブラウザでVR Android版Chromeが「WebVR」に正式対応(Mogura VR)
WebVRを触ってみる(Qiita)

2017年2月11日土曜日

Wine 2.0がリリース

仮想マシンなどを使わずにWindowsアプリを実行できるソフト「Wine」の最新版「Wine 2.0」がリリースされました。

WineのようにAPIをオペレーティングシステムがサポートしているシステムコールなどに置き換えることでバイナリを実行する方式は、仮想マシンを使う方法と比較して実行速度が速くなると言われている。


参考サイト
Mac/LinuxでWindowsアプリを動かす「Wine 2.0」が公開、「Microsoft Office 2013」対応など(窓の杜)
Wine 2.0登場、Microsoft Office 2013に対応(マイナビニュース)

2017年2月10日金曜日

Laravel5.4で静的ファイルのコンパイル(Laravel Mix)

Laravel5.4静的ファイルのコンパイル(Laravel Mix)です。Laravel5.3から、またガラッと変わりましたね。

$ node -v
$ npm -v
$ npm install
$ npm run dev
$ npm run production
$ npm run watch
webpack.mix.js
mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css')
   .version();

指定している下記2つのファイルを、いろいろ変更して試してみると、どういうことなのかよくわかります。

resources/assets/js/app.js
resources/assets/sass/app.scss

参考サイト
Compiling Assets (Laravel Mix)(Laravel)
Laravel5.3で静的ファイルのコンパイル(Laravel Elixir)

2017年2月9日木曜日

Laravel5.3から5.4へのアップグレードでエラー「Call to undefined method Illuminate\Database\MySqlConnection::setFetchMode()」

Laravel5.3から5.4へのアップグレードでエラー「Call to undefined method Illuminate\Database\MySqlConnection::setFetchMode()」が出ました。

悩んだ挙句、

bootstrap/cache/compiled.php

を削除したら、うまく動きました。 コンパイル済みサービスファイルは使用されなくなったらしい(?)。ドキュメントは、よく読むべし。

参考サイト
Upgrading To 5.4.0 From 5.3(Laravel)

2017年2月8日水曜日

Laravel5.4でページ送りViewのカスタマイズ

Laravel5.4ページ送りViewのカスタマイズです。やってみるまで面倒だなと思い、及び腰でしたが、意外と簡単です。

artisanコマンドで雛形を作成
$ php artisan vendor:publish --tag=laravel-pagination

出来上がった

/resources/views/vendor/pagination/default.blade.php
/resources/views/vendor/pagination/simple-default.blade.php

を、

/resources/views/paginate.blade.php

などにコピーして利用できます。

/resources/views/blog/index.blade.php
{{ $blogs->links('paginate') }}

参考サイト
Customizing The Pagination View(Laravel)

2017年2月7日火曜日

Laravel5.4で、整数から短いユニークIDを生成する「Laravel Hashids」

Laravel5.4に、整数から短いユニークIDを生成する「Laravel Hashids」を組み込んでみました。なんでこんなに短い文字列で識別できてしまうのでしょうか(笑)?! とにかく素晴らしい。

/config/app.php
  'providers' => [
    Vinkla\Hashids\HashidsServiceProvider::class,
  ],

  'aliases' => [
    'Hashids' => Vinkla\Hashids\Facades\Hashids::class,
  ],
/config/hashids.php を生成。
$ php artisan vendor:publish
/config/hashids.php
  'connections' => [
    'main' => [
      'salt' => 'your-salt-string',
      'length' => 6,
      'alphabet' => 'abcedfghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPAQRSTUVWXYZ1234567890',
    ],
  ]
/app/Http/Controllers/BlogsController.php
use Vinkla\Hashids\Facades\Hashids;

  public function hashids()
  {
    $encode_id = Hashids::encode(123456789);
    $decode_id = Hashids::decode($encode_id);
  }



参考サイト
Hashids
Hashidsから、短いユニークID(UUID)を作る(Qiita)
Introduction to Laravel Hashids(My Blogさん)

2017年2月6日月曜日

Laravel5.4のコンソールでプログレスバー(Progress Bars)

Laravel5.4コンソールでプログレスバー(Progress Bars)です。これ面白い。プロフェッショナルな仕上がりになります(笑)。

実際に表示されるプログレスバー(Progress Bars)
 28/200 [===>------------------------]  14% 3 secs/21 secs 10.0 MiB
155/200 [=====================>------]  77% 16 secs/21 secs 10.0 MiB
200/200 [============================] 100% 20 secs/20 secs 10.0 MiB
/app/Console/Commands/MyTestCommand.php
  public function handle()
  {
    $users = User::all(['name', 'email'])->toArray();

    // プログレスバー
    $bar = $this->output->createProgressBar(count($users));

    // プログレスバーのフォーマット
    $bar->setFormat(' %current%/%max% [%bar%] %percent:3s%% %elapsed:6s%/%estimated:-6s% %memory:6s%');

    // 処理前の表示
    $bar->setEmptyBarCharacter('-');

    // 処理後の表示
    $bar->setBarCharacter('=');

    // 処理中の表示
    $bar->setProgressCharacter(">");

    // テーブルのヘッダ
    $headers = ['Name', 'Email'];

    foreach ($users as $user) {
      usleep(10000);
      // 実際の処理
      // $this->performTask($user);
      $bar->advance();
    }

    print "\n" ;

    // テーブル描画
    $this->table($headers, $users);

    $bar->finish();
    print "\n" ;

  }

参考サイト
Artisan Console(Laravel)
Progress Bar (Symfony)
Laravelでコマンドラインアプリケーションを作成する(Qiita)
Fun with Symfony's Console Component(KnpUniversityさん)
Laravel5.4でコマンド作成(Writing Commands)

2017年2月5日日曜日

オンライン機械学習向け分散処理フレームワーク「Jubatus(ユバタス)」

オンライン機械学習向け分散処理フレームワーク「Jubatus(ユバタス)」 まあ、よくわかりませんが、とにかくメモです。

Jubatusの特徴
  • オンライン機械学習ライブラリ: 多値分類、線形回帰、推薦(近傍探索)、グラフマイニング、異常検知、クラスタリング
  • 特徴ベクトル変換器 (fv_converter): データの前処理と特徴抽出
  • フォルトトレラントな分散機械学習のためのフレームワーク



参考サイト
AIがネットワーク障害の原因究明

2017年2月4日土曜日

AIがネットワーク障害の原因究明

AIがネットワーク障害の原因を究明する技術が開発されたそうです。こんなところでもAIが活躍するんですね。

障害時にネットワーク装置等から発せられるアラーム等のイベントから、その障害に特有のイベントの組み合わせを抽出することで、障害原因とイベントのルールを導き出すアルゴリズムです。さらには、保守者の日々の運用ノウハウを学習することでルールの精度を向上することができます。


参考サイト
NTTグループのAI技術「corevo™」としてネットワーク分野のAI技術を開発(NTT)
AIがネットワーク障害の原因を推測(ASCII.jp)

2017年2月3日金曜日

Laravel5.4でRedis

Laravel5.4Redisです。Redisにはデータ型が無く、文字列しか保存されないようなので、配列を保存したい場合などは、JSONでエンコードするのがコツのようです。

/app/Http/Controllers/BlogsController.php
use Illuminate\Support\Facades\Redis;

  public function redis()
  {
    // データを配列で用意
    $blogs = Blog::orderBy('created_at','desc')->take(10)->get()->toArray() ;

    // JSONでエンコード
    $json = json_encode($blogs);

    // Redisに保存
    Redis::set('blogs', $json);

    // Redisから読み込む
    $blogs = Redis::get('blogs') ;

    // JSONデコード
    $blogs = json_decode($blogs, true) ;
  }

参考サイト
Redis(Laravel)
Storing an array of data using Redis (from Laravel)(Stack Overflow)
phpで、json_encodeした配列に、json_decodeするとオブジェクトで返って来てしまう(カサヒラボさん)
メモリ内データストアの「Redis」をUbuntuにインストール

2017年2月2日木曜日

メモリ内データストアの「Redis」をUbuntuにインストール

メモリ内データストアの「Redis」をUbuntu16にインストールしてみました。

$ sudo apt-get install redis-server
$ sudo systemctl start redis
$ redis-cli ping
$ redis-cli

127.0.0.1:6379> keys *
1) "test"
127.0.0.1:6379> set aaa 'bbb'
OK
127.0.0.1:6379> keys *
1) "aaa"
2) "test"
127.0.0.1:6379> get aaa
"bbb"



参考サイト
Ubuntu環境に、Redisをインストールして、使ってみる(Qiita)
UbuntuにRedisをインストールしてCLIで基本的なコマンドを実行する(WEBサービス創造記さん)
Redis Quick Start(Redis)

2017年2月1日水曜日

Laravel5の「APP_KEY」は暗号化用のもので、パスワードハッシュには関係ない

Laravel5の「APP_KEY」は暗号化用のもので、パスワードハッシュには関係ないようです。「APP_KEY」が変わるとログインできなくなってしまうのではと不安になり、変更して試してみましたが、「APP_KEY」を変えてもログインはできました。暗号化したデータは、「APP_KEY」を変更すると、確かに、復号化できなくなりました。

$ php artisan key:generate
アプリケーションキー「APP_KEY」は、Illuminate暗号化サービスで使用され、32文字のランダムな文字列を設定する必要があります。 正しく設定しないと、暗号化された文字列は安全ではありません。 アプリケーションキー「APP_KEY」は、セッションなどのすべての暗号化されたデータに使用されます。

参考サイト
App Key?(Laracasts)
Encryption(Laravel)
Laravel5.3で暗号化(Encryption)