phpフレームワークlaravel 5でのサービスリニューアル実例

38
PHP フフフフフフフ Laravel 5 フフ フフフフフフフフフフフフ 2015/07/14 ヒヒ ヒヒ

Upload: takashi-sugiyama

Post on 15-Aug-2015

175 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: PHPフレームワークLaravel 5でのサービスリニューアル実例

PHP フレームワーク Laravel 5 でのサービスリニューアル実例

2015/07/14 @ヒカ☆ラボ

Page 2: PHPフレームワークLaravel 5でのサービスリニューアル実例

自己紹介杉山 隆( Takashi Sugiyama )@best_not_best

Python, PHP

2008/04 〜 2013/03 : ヤフー株式会社

2013/04 〜 2015/03 : 株式会社アイ・エム・ジェイ

2015/04 〜 : 株式会社インテリジェンスdots. 開発リーダー

Page 3: PHPフレームワークLaravel 5でのサービスリニューアル実例

dots.http://eventdots.jp/

エンジニアのためのイベント情報検索サービス

2013 年 10 月リリース

ユーザー数 20,000 人突破!!

Page 4: PHPフレームワークLaravel 5でのサービスリニューアル実例

dots.

各種イベントサービス API (一部はページを直接スクレイピング)からイベント情報を取得。(全イベントの約 9 割)

取得したイベントは本文を形態素解析して、自動でタグ付け

dots. 主催のイベントも 1 割ほどある

Page 5: PHPフレームワークLaravel 5でのサービスリニューアル実例

dots.CakePHP + Nginx + Apache + mod_php + MariaDB … 等

Page 6: PHPフレームワークLaravel 5でのサービスリニューアル実例

dots.

コードが汚い!!

Page 7: PHPフレームワークLaravel 5でのサービスリニューアル実例

dots.

もともと外注

消えることの無い「 TODO 」コメント

大量のコメントアウト

View の大半を占める「 <?...?> 」

Unit テスト?何それ?

運用しづらい・・・

Page 8: PHPフレームワークLaravel 5でのサービスリニューアル実例

dots.

よろしい

ならばリニューアルだ

Page 9: PHPフレームワークLaravel 5でのサービスリニューアル実例

リニューアルにおける前提

「エンジニア」のためのサービスなのだから、エンジニアから見てイケてる技術を使おう!

新しい技術に挑戦したい!

決して「 CakePHP がイケてない」というわけではないです(とても重要)

Page 10: PHPフレームワークLaravel 5でのサービスリニューアル実例

FW 選定にあたって

Page 11: PHPフレームワークLaravel 5でのサービスリニューアル実例

Laravel

ウェブ職人のための PHP フレームワーク

Best PHP Frameworks for 2014cf. http://www.sitepoint.com/best-php-frameworks-2014/

名前は「ナルニア国物語」からcf. http://www.slideshare.net/KenichiMukai/php-study74

Page 12: PHPフレームワークLaravel 5でのサービスリニューアル実例

今回話すこと

dots. のサーバ構成、アプリケーション構成

導入したモジュール … 等

Page 13: PHPフレームワークLaravel 5でのサービスリニューアル実例

今回話さないこと

Laravel の基本機能や artisan コマンドについて

→ 直接お声掛けください。

Page 14: PHPフレームワークLaravel 5でのサービスリニューアル実例

サーバ構成

Page 15: PHPフレームワークLaravel 5でのサービスリニューアル実例

ファイル構成Web 、 Admin 、 Batch で同じ repository を使用

Controller

Page 16: PHPフレームワークLaravel 5でのサービスリニューアル実例

ルーティングroute.php でドメインによってルーティング指定

// Set environmentswitch (getenv('APP_ENV')) { case 'production': $env = ''; break; case 'staging': $env = 'stg.''; ...}Route::group([ 'namespace' => 'Web', 'domain' => $env . 'eventdots.jp', ], function () { Route::get('/', ['as' => 'web.event.index', 'uses' => 'EventController@index]); (中略) });

Page 17: PHPフレームワークLaravel 5でのサービスリニューアル実例

ファイル構成View

Page 18: PHPフレームワークLaravel 5でのサービスリニューアル実例

レンダリングコントローラから

$this->render('index’);

または

View::make('web.index');

で呼び出す。

Page 19: PHPフレームワークLaravel 5でのサービスリニューアル実例

Laravel for Web Application

Page 20: PHPフレームワークLaravel 5でのサービスリニューアル実例

ルーティングswitch (getenv('APP_ENV')) { case 'production': $env = ''; $https = 'https'; break; ...}

Route::group([ 'namespace' => 'Web', 'domain' => $env . 'eventdots.jp', ‘middleware’ => [‘csrf’, 'cors']], function () use ($https) { Route::get('/', ['as' => 'web.event.index’, 'uses' => 'EventController@index', 'http']); });

Page 21: PHPフレームワークLaravel 5でのサービスリニューアル実例

ルーティングswitch (getenv('APP_ENV')) { case 'production': $env = ''; $https = 'https'; break; ...}

Route::group([ 'namespace' => 'Web', 'domain' => $env . 'eventdots.jp', ‘middleware’ => [‘csrf’, 'cors']], function () use ($https) { Route::get('/', ['as' => 'web.event.index’, 'uses' => 'EventController@index', 'http']); });

Page 22: PHPフレームワークLaravel 5でのサービスリニューアル実例

ルーティング

プロコトルを指定

指定外のプロトコルでアクセスしようとすると、指定されたプロトコルの URL にリダイレクトされる。

本番環境以外は、オレオレ証明書を使っていることもあるため、環境によってプロトコル指定。(オレオレの環境で https 指定すると 404 になる・・・。)

Page 23: PHPフレームワークLaravel 5でのサービスリニューアル実例

ルーティングswitch (getenv('APP_ENV')) { case 'production': $env = ''; $https = 'https'; break; ...}

Route::group([ 'namespace' => 'Web', 'domain' => $env . 'eventdots.jp', ‘middleware’ => [‘csrf’, 'cors']], function () use ($https) { Route::get('/', ['as' => 'web.event.index’, 'uses' => 'EventController@index', 'http']); });

Page 24: PHPフレームワークLaravel 5でのサービスリニューアル実例

ルーティングミドルウェア

全てのルートで CSRF 対策( Illuminate\Foundation\Http\Middleware\VerifyCsrfToken )と CORS 設定を追加

CSRF

Illuminate\Foundation\Http\Middleware\VerifyCsrfToken を使用

CORS

cf. https://github.com/barryvdh/laravel-cors

Page 25: PHPフレームワークLaravel 5でのサービスリニューアル実例

ルーティングミドルウェア名は app/Http/Kernel.php で設定

protected $routeMiddleware = [

'csrf'

=> 'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken',

'web.auth'

=> 'Dots\Http\Middleware\WebAuthenticate',

'web.guest'

=> 'Dots\Http\Middleware\RedirectIfWebAuthenticated',

...

];

Page 26: PHPフレームワークLaravel 5でのサービスリニューアル実例

ソーシャルログイン

Laravel Socialite

cf. https://github.com/laravel/socialite

以下のようにして実装。

Socialite::with($socialType)->redirect();

Page 27: PHPフレームワークLaravel 5でのサービスリニューアル実例

ログ

monolog + FluentHandlercf. https://github.com/dakatsuka/MonologFluentHandler

fluentd を使って IDCF のオブジェクトストレージへ。(本番環境のみ)

Page 28: PHPフレームワークLaravel 5でのサービスリニューアル実例

画像ファイル管理ツールからアップロードされた画像ファイルも IDCF のオブジェクトストレージへcf. https://github.com/aws/aws-sdk-php-laravelconfig/filesystems.php で以下のように設定

'disks' => [ 'private' => [ 'local' => [ 'driver' => 'local', 'root' => env('PRIVATE_LOCAL_ROOT', storage_path() . '/app'), ], 's3' => [ 'driver' => 's3', 'key' => env('STORAGE_KEY'), 'secret' => env('STORAGE_SECRET'), 'base_url' => env('STORAGE_BASE_URL'), 'bucket' => env('PRIVATE_BUCKET'), ], ], 'public' => [ .... ],],

Page 29: PHPフレームワークLaravel 5でのサービスリニューアル実例

Laravel for Batch

Page 30: PHPフレームワークLaravel 5でのサービスリニューアル実例

Laravel for Batch

特別なことは特にしていない

Artisan scheduler で cron 設定

Queue で非同期処理

外部イベント取得処理、メール配信処理を実行

Laravel に機能が充実している

Page 31: PHPフレームワークLaravel 5でのサービスリニューアル実例

その他

Web サービス構築に必要な機能は大抵そろっている( Redis 、 Cache 、 Cashier 等)

かゆい所に手がとどく関数がたくさんある( camel_case(), srt_limit() )

メンテナンスモードへの切り替え機能もある

Page 32: PHPフレームワークLaravel 5でのサービスリニューアル実例

要検証

メモリの問題cf. http://blog.a-way-out.net/blog/2015/03/26/php-framework-benchmark/

Page 33: PHPフレームワークLaravel 5でのサービスリニューアル実例

dots.2015 年 8 月リニューアル予定

絶賛テスト中!

Page 34: PHPフレームワークLaravel 5でのサービスリニューアル実例

今後やること

イベントのタグ付け(分類、形態素解析)の精度向上

そもそもバッチは PHP で良いのか・・・?

アクセスログや Google Analytics のデータを使ったデータ解析基盤の構築

Page 35: PHPフレームワークLaravel 5でのサービスリニューアル実例

and more...

Page 36: PHPフレームワークLaravel 5でのサービスリニューアル実例

イベント・コワーキングスペース dots.

2015 年 8 月オープン予定

渋谷駅 ハチ公口から徒歩 3 分

最大収容人数 約 200 名(着席)

http://eventdots.jp/space

Page 37: PHPフレームワークLaravel 5でのサービスリニューアル実例

イベント・コワーキングスペース dots.

※画像はイメージです。

Page 38: PHPフレームワークLaravel 5でのサービスリニューアル実例

ご清聴ありがとうございました。