laravel5 introduction (2014/11/20)

52
Laravel5 Introduc0on Laravel Tokyo Camp Vol.1 2014/11/20 古川 文生 井上 翔太

Upload: fumio-furukawa

Post on 15-Jul-2015

1.445 views

Category:

Software


2 download

TRANSCRIPT

Laravel5  Introduc0on

Laravel  Tokyo  Camp  Vol.1  2014/11/20  

古川 文生  井上 翔太

Laravel5の系譜

 •  2014年6月  – Laravel4.2リリース(最新版は4.2.11)  

•  2014年9月  – 開発中のLaravel4.3の名称をLaravel5.0に変更  

•  2014年11月現在  – Laravel  5.0-­‐DEV、Dras0cに変更なう  

 

Laravel5で何が変わるのか?

•  脱Webフレームワーク(脱Rails)  •  PHP名前空間受け入れ〜ファサードはいずこ??  •  外部Webサービス連携の組み込み      

Laravel5: ベースアーキテクチャ

1.  New  Folder  Structure  &  App  Namespace  アプリ構造改革とPHP名前空間の強制。  

2.  Spiffy  Authen0ca0on  ユーザー認証パッケージいらず!?  

3.  Contracts  &  Method  Injec0on  さようならファサード。  

4.  Form  Requests  オートバリデーション。  

Laravel5: 新機能

5.  Mul0ple  Filesystem  (Flysystem  based)  ファイルI/Oをクラウドストレージにも簡単に。  

6.  Socialite  (BETA)  SNS認証をお手軽に。  

7.  Elixer  Laravelに統合されたWebアセット管理。  

Laravel5: そのほかにも

8.  New  Environment  Detec0on  システム環境に設定しない環境変数の登場。  

9.  Route  Annota0on  Pyramid的な、アレ。  

10. Event  Annota0on  Java的な、アレ。  

11. Route  Caching  12. New  File  Generator  

New  Folder  Structure  ・Laravelを起動するアプリケーションタイプごとにフォルダが用意される  

 app/Console    app/H`p  

 ・アプリケーションタイプごとにオブジェクト構成を指定するKernelが導入される  

 app/Console/Kernel.php      アプリ固有のar0sanコマンド定義など。    app/H`p/Kernel.php      middlewareの定義など。

1/12

New  Folder  Structure Laravel5   Laravel4

app/Console/Commands app/commands

app/H`p/Controllers app/controllers

config app/config

database app/database

resource/lang app/lang

resources/views app/views  

bootstrap bootstrap  

public public  

tests tests  

1/12

App  Namespace    <?php    class  DashboardController  {  

 //  …  }  

1/12

   <?php  namespace  App\H`p\Controllers;    class  DashboardController  {  

 //  …  }

Before:Laravel4 Aker:Laravel5

App  Namespace  ・PHP名前空間が強制されるようになった。  

 ・指定箇所はcomposer.json    ・`php  ar0san  app:name`  コマンドで一括変更可能。  

 ・ファサードが素直に使えなくなった。  

 ・ファサードクラスはグローバル名前空間にある。  

1/12

App  Namespace  ・ファサード問題      app下にPHP名前空間が設定されるようになったため、`Log::debug()`と書くとLogクラスが解決できずエラーとなる。Laravel4でもPHP名前空間を使っていれば同じ問題が起きる。 解決方法は3つ。 1.  use文を使う。 use  Log;                      class  DashboardController  extends  Controller  {  …  }              2.  ファサードの完全修飾名を指定する。 public  func0on  getIndex()                      {                                \Log::debug(__METHOD__);                      }  

1/12

App  Namespace  ・ファサード問題(続き)   3.  laravel-­‐plus/extensionパッケージを入れる。app/addon下の名前空間内でファサードクラスを自動解決してくれる。

 <Laravel5-­‐DEV>    “require”:  {      “laravel-­‐plus/extension":  "dev-­‐master”    }  

   <Laravel4>    “require”:  {      "laravel-­‐plus/extension":  “~1.0”    }  

 ※laravel-­‐plus/extensionを組み込み済みのプロジェクトスケルトンは以下で生成可能

 composer  create-­‐project  laravel-­‐plus/laravel5=dev-­‐master  <project-­‐name>  

1/12

Spiffy  Authen0ca0on

•  標準で    AuthController.php          PasswordController          が追加された!    →認証関連でパッケージに頼ることが無くなる?  →Controllerは用意されているが紐づくViewは用意されていない・・・    

2/12

Contracts  &  Method  Injec0on

 ・Contracts  =  インターフェースクラスたち    ・アプリケーションコンテナ内にある全てのオブジェクトにインターフェースが追加された。  

 Illuminate/Contracts名前空間    ファサードよりインジェクション(コンストラクタ・メソッド)推奨!?  

3/12

Contracts  &  Method  Injec0on 3/12

※Laravel東京スクール資料より抜粋

Contracts  &  Method  Injec0on 3/12

※Laravel東京スクール資料より抜粋

Contracts  &  Method  Injec0on 3/12

クロージャにも指定できる!

※Laravel東京スクール資料より抜粋

Form  Requests

•  今までのValida0onはroutes.phpかControllerに書くなどで対応。  

→Requestを作成し、使用したいメソッドに対してインジェクションを行う形に変更された!  

4/12

今までのValida0on 4/12

これからのValida0on

•  Valida0onRuleなど記述した、          FormRequestsクラスを作成する。  

•  使用するメソッドにインジェクションする。    

4/12

Mul0ple  Filesystem

・ファイルの保存先にWebストレージを選択できるようになる。    ローカル  ($root/storage/appフォルダ)    AWS  S3    Rackspace  

 

・Flysystem  (by  PHP  League)をベースとしている。    ※DropboxはFlysystemでもオプション扱いなので、Laravel5でサポートな

し?    

5/12

Mul0ple  Filesystem

・設定    config/filesystems.php  

 ・オブジェクトの取得  

 app(‘filesystem.disk’)  -­‐  configの’filesystems.default’で指定    app(‘filesystem.cloud’)  -­‐  configの’filesystem.cloud’で指定  

 ・インジェクション  

 Illuminate\Contracts\Filesystem\Filesystem  =  app(‘filesystem.disk’)    Illuminate\Contracts\Filesystem\Cloud  =  app(‘filesystem.cloud’)  

 ・ファサード  

 みつからない。

5/12

Socialite  (BETA) ・SNS認証を行う追加パッケージ

 2014/11/19時点でβ版

 ・対応サービス

 Facebook    Github    Google    Twi`er  

 ・インストール  

 composer.jsonに以下を追加。

 "laravel/socialite”:  “2.0@dev”    

6/12

Socialite  (BETA) ・設定  

 config/services.php

 

6/12

Socialite  (BETA) ・実装 (こんな感じ)    

6/12

Elixer  Laravel5に統合されたWebアセット管理機能(gulpベース)  

 node/npm/gulpのインストールが必要    Homestead(2.0?)にはインストール済みのようだ  

 ・機能  

 アセットのコンパイル Less  /  Sass  /  CoffeeScript    アセットの連結  CSS  /  JavaScript    アセットファイルのコピー    アセットファイルのバージョン管理(Hash)    Route  /  Eventのスキャン    ユニットテストの起動 PHPUnit  /  PHPSpec  

 ・拡張nodeモジュール  

 Stylus  /  Codecep0on  /  Browserify  /  Jade  /  Bower  

5/12

New  Environment  Detec0on

[Laravel4]  bootstrap/start.php  に記述    ホスト名か環境変数で判定。

$env  =  $app->detectEnvironment([

         'local'  =>  [‘*'],

]);

 [Laravel5]  .envに環境変数として指定する。  

 .envは.gi0gnoreに登録されている。

APP_ENV=local

DB_USERNAME=dbuserDB_PASSWORD=dbpass

   マシン名や任意の環境変数名で指定することはできなくなった??

8/12

Annota0on

•  Laravel5ではAnnota0onによる処理を扱えるように!  

•  Routeに使う場合  •  Eventに使う場合  

•  doctrine/annota0onsを使ってる!  

9/12

Route  Annota0on

•  ControllerのメソッドにAnnota0onをつけるとRouteとして扱うことが出来る!  

9/12

Route  Annota0on •  RouteServiceProvider.phpに対象となるコントローラ名を記述      

9/12

Route  Annota0on

•  Annota0onを記述したControllerを読み取って・・・

•  Routeを表示させてみると・・・

9/12

Route  Annota0on 9/12

Event  Annota0on

•  EventにAnnota0onをつけるとEventListenerが登録できる!  

10/12

Event  Annota0on •  EventServiceProvider.phpに対象となるコントローラ名を記述      

10/12

Event  Annota0on

•  Annota0onを記述したEventを読み取って・・・

• コンパイルされたEventを確認してみると・・・

10/12

Event  Annota0on 10/12

Route  Cache

•  php  ar0san  route:cacheでルーティングがキャッシュ出来るようになった!

11/12

Route  Cache

• キャッシュの削除はphp  ar0san  route:clear

• ただし、キャッシュしてもあまりパフォーマンス改善にはならないという話も・・・

11/12

New  File  Generator

•  Controllerや、Ar0san  Commandのひな形がmakeコマンドから作成出来るようになった!  

 

12/12

New  File  Generator

Laravel4で既にあったコマンド    •  php  ar0san  make:console  →  php  ar0san  command:make    •  php  ar0san  make:controller  →  php  ar0san  controller:make    •  php  ar0san  make:migra0on  →  php  ar0san  migra0on:make  

12/12

New  File  Generator

Laravel5で追加されたコマンド    •  php  ar0san  make:middleware  →Middlewareディレクトリへのファイルの追加    

12/12

New  File  Generator

Laravel5で追加されたコマンド  

•  php  ar0san  make:provider  →Providersディレクトリへのファイルの追加  

12/12

New  File  Generator

Laravel5で追加されたコマンド    •  php  ar0san  make:request  →Requestsディレクトリへのファイルの追加  

12/12

Laravel5のリリースは・・・    

Symfony2.6リリース後?  2015年1月?

既存のLaravel4アプリの移行は時期尚早か・・・  新規アプリをプロトタイプ的に作るなら  

トライする価値あり!

五反田コワーキングスペース「VACANCY  OFFICE」にて  次回 2014年12月11日(木)  19:30〜  

Laravel  Tokyoメンバー募集  [email protected]  まで連絡ください。  

[活動内容]  勉強会・イベント開催  

Laravel  TokyoのWebサイト開発  (デザイン・プログラミング)  

書籍執筆  OctoberCMS研究、など  

 [活動場所]  

都内コワーキングスペース(月2回予定)