SlideShare a Scribd company logo
1 of 30
Download to read offline
LaravelとNuxt.jsを業務で取り入れる際
に得た知見
戎島功
森山智哉
2018/04/25 Laravel/Vue.js勉強会#4 1
自己紹介
森山智哉
エンジニア
Laravel / Vue / Nuxt /
Twitter: @frostndays
2
自己紹介
戎島功(えびすじまいさお)
エンジニア
Laravel / Vue.js / Nuxt.js
Twitter: @isao_x
3
話すこと
1. プロジェクト概要
2. 認証方法について
3. Nuxt.js 環境設定の読み込み
4. axiosのラッパー
5. 開発の際に役立った便利ツール
4
・株式会社ITプロパートナーズで新規開発中
・toC Webサービス
・大規模なSNSみたいなもの
1−1 プロジェクト概要
5
1−2 技術スタック
・MySQL
・Nginx
・AWS
・AmazonLinux
・Docker
・Git
・PHP 7.1.7
・Laravel 5.5
・HTML 5
・CSS 3/SCSS
・JavaScript/ECMAScript2015(ES6)
・Vue.js 2.9.3
・Nuxt.js 1.0.0
6
1−3 サーバー構成
ユーザー
管理者 7
APIサーバー / 管理画面フロント側サーバー
・Laravel Passportとは
APIでログイン認証を行うための Laravelのライブラリ
・使い方
laravelPassportで使用するTableを生成
認証用のルーティングが自動生成される
2−1 認証方法について
8
2−2 Laravel Passportでの認証フロー
③ AccessTokenを渡す
① ID/password
④ ヘッダーにAccessTokenをセット
⑤ 認証が必要なぺージにアクセス
② AccessTokenを発行
9
2−3 Laravel Passport facebook認証
・使用したライブラリ
danjdewhurst/laravel-passport-facebook-login
・使い方
laravelPassportと同様のエンドポイントを使用する
ID/passの代わりにFacebookのアクセストークンを POSTする
userテーブルにはfacebookID用のカラムを用意する
10
2−4 Laravel Passport エンドポイント変更
デフォルトのエンドポイント oauth/token を api/oauth/token に変更
app/Providers/AuthServiceProvider.php
public function boot()
{
$this->registerPolicies();
Route::group([ 'middleware' => 'BarryvdhCorsHandleCors::class'], function() {
$callback = null;
$options = [
'prefix' => 'api/oauth',
'namespace' => 'LaravelPassportHttpControllers',
];
Passport::routes($callback, $options);
});
}
11
2−5 Laravel Passport トークン有効期限
12
・有効期限チェック機能の追加
使用するアクセストークンに有効期限を設定
。。が有効期限をチェックして期限切れかどうかを判定する機能は無いため
2−5 Laravel Passport トークン有効期限
13
・有効期限チェック機能の追加
使用するアクセストークンに有効期限を設定
。。が有効期限をチェックして期限切れかどうかを判定する機能は無いため
有効期限をチェックする機能追加
有効期限が切れていていたらリフレッシュトークンを使用
2−5 Laravel Passport トークン有効期限
14
public function checkToken(ResourceServer $server, Request $request)
{
  // ヘッダーのアクセストークンを取得
   $psr = (new DiactorosFactory)->createRequest($request);
   $psr = $server->validateAuthenticatedRequest($psr);
$reqToken = $psr->getAttribute('oauth_access_token_id');
// 有効期限が切れていないかチェック
$accessToken = OauthAccessToken::where('id', $reqToken)
->where('expires_at', '>', Carbon::now())
->first();
}
nuxt.config.js
module.exports = {
 env: {
    baseUrl: process.env.BASE_URL || 'http://localhost:3000'
 }
}
3−1 Nuxt.js 環境設定の読み込み
15
通常、Nuxt.jsでは、apiサーバーのurlとか、laravel passportで生成したsecret keyと
かっていう環境固有の定数をnuxt.config.jsで定義します。
こんな感じです↓(Nuxt.js公式ドキュメントより引用)
3−2 Nuxt.js 環境設定の読み込み
16
env.js
exports.env = {
 BASE_URL: 'http://localhost:3000',
 CLIENT_ID: 2,
 PASSPORT_SECRET: 'dummyMWN3ojUoBUWww5o3w5TrviGbW8BI9Vdummy',
};
今回、Laravelと同じようにenvファイルを用意してそれで定数を管理したいと思ったの
で、env.jsというファイルを作って、そこで環境固有の定数を定義しました。
こんな感じです↓
nuxt.config.js
const env = require('./env.js');
module.exports = Object.assign(env, {
…
}
env.jsをnuxt.config.jsでrequireする
3−3 Nuxt.js 環境設定の読み込み
17
4−1 axiosのラッパー
services/http.js
import axios from 'axios';
const axiosBase = axios.create({
baseURL: '',
timeout: 10000,
headers: {
'Access-Control-Allow-Origin': '*',
'X-Requested-With': 'XMLHttpRequest',
},
}); 18
4−2 axiosのラッパー
services/http.js
get(url, config = {}) {
 return axiosBase.get(url, config);
},
post(url, data = {}, config = {}) {
 return axiosBase.post(url, data, config);
},
delete(url, config = {}) {
 return axiosBase.delete(url, config);
}, 19
services/http.js
axiosBase.interceptors.request.use((config) => {
 // 特定のURL指定が無い場合のみ、 server/client 判定
 if (!config.baseURL) {
 config.baseURL = process.server ? process.env.API_URL_SERVER : process.env.API_URL_CLIENT;
 }
 return config;
}, error => Promise.reject(error));
4−3 axiosのラッパー
20
4−4 axiosのラッパー
services/http.js
setAuthorizationToken(token) {
 if (token) {
   axiosBase.defaults.headers.common.authorization = `Bearer ${token}`;
 } else {
   delete axiosBase.defaults.headers.common.authorization;
 }
},
21
・Clockwork(ブラウザでのLaravelのデバッグに役立つchrome拡張)
https://chrome.google.com/webstore/detail/clockwork/dmggabnehkmmfmdffgajcflpdjlnoemp
・sequel-pro-laravel-export(migrationを自動生成するsequelPro拡張)
https://github.com/cviebrock/sequel-pro-laravel-export
・SQL to Laravel Builder(SQLからクエリビルダーへ変換するWebサービス)
http://www.midnightcowboycoder.com/
・Vue.js devtools(ブラウザでのVue.jsのデバッグに役立つchrome拡張)
https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hl=ja
5−1 開発の際に役立った便利ツールなど
22
・PHPのコーディング規約はPSR-2を採用
https://www.php-fig.org/psr/psr-2/
・PHPのLintツールはPHP_CodeSnifferを採用
https://github.com/squizlabs/PHP_CodeSniffer
5−2 開発の際に役立った便利ツールなど
23
5−3 開発の際に役立った便利ツールなど
24
・ES6のコーディング規約はeslintのeslint-config-airbnbがベース
https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb
・vue.jsのコーディング規約はvue.js公式のスタイルガイドがベース
https://jp.vuejs.org/v2/style-guide/index.html
・ES6のlintツールはeslintを採用
https://github.com/eslint/eslint
LaravelとVue.js(Nuxt.js)を使ってみて
25
LaravelとVue.js(Nuxt.js)を使ってみて
よかった!!
26
おしまい
ですが、、、
27
おしまい
ですが、、、
ITプロパートナーズではLaravel、Vue.jsで開発したいエンジニア
を募集しています。
28
おしまい
ですが、、、
ITプロパートナーズではLaravel、Vue.jsで開発したいエンジニア
を募集しています。
ご興味のある方は是非お声掛けください!!
29
おしまい
ご清聴ありがとうございました!!
30

More Related Content

What's hot

Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるdavid9142
 
Up ai wolfプレゼン資料
Up ai wolfプレゼン資料Up ai wolfプレゼン資料
Up ai wolfプレゼン資料Takanori Fukui
 
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first timeYusuke Yamada
 
ディレクションのすゝめ
ディレクションのすゝめディレクションのすゝめ
ディレクションのすゝめTakeo Noda
 
WordPressをこれから始める人のためのテーマ講座
WordPressをこれから始める人のためのテーマ講座WordPressをこれから始める人のためのテーマ講座
WordPressをこれから始める人のためのテーマ講座Takami Kazuya
 
オワスプナイト20150115 dependency check
オワスプナイト20150115 dependency checkオワスプナイト20150115 dependency check
オワスプナイト20150115 dependency checkHiroaki Kuramochi
 

What's hot (6)

Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
Up ai wolfプレゼン資料
Up ai wolfプレゼン資料Up ai wolfプレゼン資料
Up ai wolfプレゼン資料
 
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
初めての拡張機能リリースまでの歩み / Road to publishing extension for the first time
 
ディレクションのすゝめ
ディレクションのすゝめディレクションのすゝめ
ディレクションのすゝめ
 
WordPressをこれから始める人のためのテーマ講座
WordPressをこれから始める人のためのテーマ講座WordPressをこれから始める人のためのテーマ講座
WordPressをこれから始める人のためのテーマ講座
 
オワスプナイト20150115 dependency check
オワスプナイト20150115 dependency checkオワスプナイト20150115 dependency check
オワスプナイト20150115 dependency check
 

Similar to LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25

[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用de:code 2017
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみたTakeo Noda
 
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)Masaya Tahara
 
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミLaravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミShohei Okada
 
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]Yuuki Takezawa
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
``完璧に理解した``WEB の裏側の仕組み.pptx
``完璧に理解した``WEB の裏側の仕組み.pptx``完璧に理解した``WEB の裏側の仕組み.pptx
``完璧に理解した``WEB の裏側の仕組み.pptxRyo Higashigawa
 
Hadoop Source Code Reading #17
Hadoop Source Code Reading #17Hadoop Source Code Reading #17
Hadoop Source Code Reading #17Shingo Furuyama
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線Akira Inoue
 
Kerasで可視化いろいろ
Kerasで可視化いろいろKerasで可視化いろいろ
Kerasで可視化いろいろMasakazu Muraoka
 
Azure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュAzure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュYasuaki Matsuda
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Yuuki Takezawa
 
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきことMicroservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきことTakashi Abe
 
Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Etsuji Nakai
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料Recruit Technologies
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructurePreferred Networks
 

Similar to LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25 (20)

[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
 
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
 
Laravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミLaravel における Blade 拡張のツラミ
Laravel における Blade 拡張のツラミ
 
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
俺とHashiCorp
俺とHashiCorp俺とHashiCorp
俺とHashiCorp
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
``完璧に理解した``WEB の裏側の仕組み.pptx
``完璧に理解した``WEB の裏側の仕組み.pptx``完璧に理解した``WEB の裏側の仕組み.pptx
``完璧に理解した``WEB の裏側の仕組み.pptx
 
Hadoop Source Code Reading #17
Hadoop Source Code Reading #17Hadoop Source Code Reading #17
Hadoop Source Code Reading #17
 
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
.NET Core と Container, そして Azure Web Apps on Linux による Web アプリ開発最前線
 
Kerasで可視化いろいろ
Kerasで可視化いろいろKerasで可視化いろいろ
Kerasで可視化いろいろ
 
Azure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュAzure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュ
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
 
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきことMicroservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
 
Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介Open Shift v3 主要機能と内部構造のご紹介
Open Shift v3 主要機能と内部構造のご紹介
 
WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料WebDB Forum 2012 基調講演資料
WebDB Forum 2012 基調講演資料
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure
 

LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25