SlideShare une entreprise Scribd logo
1  sur  30
LaravelとNuxt.jsを業務で取り入れる際
に得た知見
株式会社ITプロパートナーズ
戎島功
森山智哉
2018/04/25 Laravel/Vue.js勉強会#4
1
自己紹介
森山智哉
株式会社ITプロパートナーズ
エンジニア
Laravel / Vue / Nuxt /
Twitter: @frostndays
2
自己紹介
戎島功(えびすじまいさお)
株式会社ITプロパートナーズ
エンジニア
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' => 'Barryvdh¥Cors¥HandleCors::class'], function() {
$callback = null;
$options = [
'prefix' => 'api/oauth',
'namespace' => '¥Laravel¥Passport¥Http¥Controllers',
];
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

Contenu connexe

Tendances

Visual Studio 拡張機能の作り方
Visual Studio 拡張機能の作り方Visual Studio 拡張機能の作り方
Visual Studio 拡張機能の作り方Yuki Igarashi
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~takenao
 
WP REST API の活用事例と今後
WP REST API の活用事例と今後WP REST API の活用事例と今後
WP REST API の活用事例と今後Yuusuke Yoshida
 
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版baroqueworksdev
 
師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013 師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013 hiboma
 
初歩から始めるJava勉強会 プレゼンテーション資料
初歩から始めるJava勉強会 プレゼンテーション資料初歩から始めるJava勉強会 プレゼンテーション資料
初歩から始めるJava勉強会 プレゼンテーション資料Terumi Tamura
 
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Sho Douhashi
 
Engineer can change the world with Drew
Engineer can change the world with DrewEngineer can change the world with Drew
Engineer can change the world with DrewYoshio Terada
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座DIVE INTO CODE Corp.
 
RancherのWindowsサポートと事始め
RancherのWindowsサポートと事始めRancherのWindowsサポートと事始め
RancherのWindowsサポートと事始めcyberblack28 Ichikawa
 
「Delphiで作るデータベースツール。その開発のポイントは・・」
「Delphiで作るデータベースツール。その開発のポイントは・・」「Delphiで作るデータベースツール。その開発のポイントは・・」
「Delphiで作るデータベースツール。その開発のポイントは・・」Embarcadero Technologies
 

Tendances (14)

Slackを導入しよう
Slackを導入しよう Slackを導入しよう
Slackを導入しよう
 
Visual Studio 拡張機能の作り方
Visual Studio 拡張機能の作り方Visual Studio 拡張機能の作り方
Visual Studio 拡張機能の作り方
 
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
 
WP REST API の活用事例と今後
WP REST API の活用事例と今後WP REST API の活用事例と今後
WP REST API の活用事例と今後
 
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版
 
師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013 師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013
 
Flex入門
Flex入門Flex入門
Flex入門
 
Rancher select
Rancher selectRancher select
Rancher select
 
初歩から始めるJava勉強会 プレゼンテーション資料
初歩から始めるJava勉強会 プレゼンテーション資料初歩から始めるJava勉強会 プレゼンテーション資料
初歩から始めるJava勉強会 プレゼンテーション資料
 
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13
 
Engineer can change the world with Drew
Engineer can change the world with DrewEngineer can change the world with Drew
Engineer can change the world with Drew
 
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
 
RancherのWindowsサポートと事始め
RancherのWindowsサポートと事始めRancherのWindowsサポートと事始め
RancherのWindowsサポートと事始め
 
「Delphiで作るデータベースツール。その開発のポイントは・・」
「Delphiで作るデータベースツール。その開発のポイントは・・」「Delphiで作るデータベースツール。その開発のポイントは・・」
「Delphiで作るデータベースツール。その開発のポイントは・・」
 

Similaire à LaravelとNuxt.jsを業務で取り入れる際に得た知見

LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25Isao Ebisujima
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)Masaya Tahara
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用de:code 2017
 
AITCオープンラボ: Pepper x IoT x Web
AITCオープンラボ: Pepper x IoT x WebAITCオープンラボ: Pepper x IoT x Web
AITCオープンラボ: Pepper x IoT x Webdsuke Takaoka
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座DIVE INTO CODE Corp.
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみたTakeo Noda
 
[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例
[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例
[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例de:code 2017
 
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...NTT DATA Technology & Innovation
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」Serverworks Co.,Ltd.
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Yuuki Takezawa
 
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~Recruit Technologies
 
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきことMicroservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきことTakashi Abe
 
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconアバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconDeNA
 
Hadoop Source Code Reading #17
Hadoop Source Code Reading #17Hadoop Source Code Reading #17
Hadoop Source Code Reading #17Shingo Furuyama
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCDaisuke Nishino
 

Similaire à LaravelとNuxt.jsを業務で取り入れる際に得た知見 (20)

LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
 
OSC福岡 20111203
OSC福岡 20111203OSC福岡 20111203
OSC福岡 20111203
 
AITCオープンラボ: Pepper x IoT x Web
AITCオープンラボ: Pepper x IoT x WebAITCオープンラボ: Pepper x IoT x Web
AITCオープンラボ: Pepper x IoT x Web
 
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座アイデアを形にする  ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
 
俺とHashiCorp
俺とHashiCorp俺とHashiCorp
俺とHashiCorp
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
 
[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例
[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例
[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例
 
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
 
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
 
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
 
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきことMicroservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
 
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechconアバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
 
Hadoop Source Code Reading #17
Hadoop Source Code Reading #17Hadoop Source Code Reading #17
Hadoop Source Code Reading #17
 
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSCOSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSC
 

LaravelとNuxt.jsを業務で取り入れる際に得た知見

Notes de l'éditeur

  1. 【森山】30秒 今回は、LaravelとNuxt.jsを業務で取り入れる際に得た知見について ITプロパートナーズの森山と戎島の二人でお話させて頂きます! 弊社ではLaravelとVue.jsのフレームワークであるNuxt.jsを使ってプロダクトを開発中です。 Laravelは以前から使っていたのですが、Nuxt.jsは今回始めて使いました。 その際に調べたり自分たちで考えてたまった知見を一部紹介したいと思います。
  2. 【森山】30秒 まずは自己紹介をさせていただきます。 ITプロパートナーズでエンジニアやってます!森山と申します もともとにいてSierにいてwebベンチャーに転職してきました 昔はSierで電子カルテとか触ってました 最近laravelとNuxtでプロダクト開発をメインでやっています!
  3. 【戎島】30秒 株式会社ITプロパートナーズでエンジニアをやっているエビスジマイサオといいます。 ベンチャー企業を何社か経験しているエンジニアです。 以前はruby書いていましたが、最近はlaravelとvue書いています。 最近はマネジメント業務が多めです。
  4. 【森山】20秒 今日お話したいことはこちらです。 本当はもっとたくさんお話したいことがあるのですが、プロダクトがまだ完成していないので、そこまで複雑ではない部分をお話します。
  5. 【森山】10秒 今回、弊社で作っているLaravel、Nuxt.jsのプロダクトの概要はこんな感じです。 toC向けの大規模なSNSみたいなものです。
  6. 【森山】60秒 使っている技術としてはこんな感じです。 弊社の他のプロダクトはほぼほぼこんな感じですが、Nuxt.jsは今回初めて使いました。 今回はLarvelバージョン5.5を採用しています。 このプロダクト1月くらいからは作りはじめました。それと同じくらいの時期に、Laravelが5.6がリリースされて、ライブラリとか使えなくなったら困ると思って、以前から実績のある5.5で作りました。 実際やってみたら、主要なライブラリが結構5.6にすぐに対応していて、5.6にしておいたら良かったんですが、タイミングを逃してしまいました。。。 余裕があれば今からでも5.6に上げれないかと検討してます。 また、Nuxt.jsは1.0を採用したのですが、 こちらも開発しだしてしばらく経ったころ、Nuxt.js2.0のリリースが発表されたので、そちらもリリース前に余裕あればバージョンあげちゃおうかと思ってます。 次は全体のシステム構成についてお話します
  7. 【森山】60秒 今回のサーバー構成はこんな感じです。 サーバはユーザー側の画面のレンダリングを行っているNuxt.jsとAPIサーバーとして使用してるlaravelの2台構成になります ユーザー側のレンダリングを行っているNuxtはSSRモードで使用しています NuxtはSSRモードとSPAモードというのがありますが、今回はSSRモードで使用しています SPAモードを選択しなかった理由は、ユーザがコンテンツを作成し、そのコンテンツをTwitterやFacebookにシェアするといった機能があるため OGPタグなどの懸念もあり今回はSSRモードを選択しました LaraveはAPIサーバー兼、管理用ページのレンダリングを担当しています 次に今回のプロダクトの認証方法についてお話させていただきます
  8. 【森山】30秒 APIでログイン認証を行うためにLaravelPassportというライブラリをつかいました フロントからの使いかたは、vue.jsだとlaravel Passport VueなどlaravalPassport用の認証用のライブラリがありますが、 APIを叩くだけなので、ライブラリを使わないでも簡単に認証機能が実装出来ます ルーティングファイルにルーティングは書き込まれないですが、Laravel起動時にlaravelPassport用の認証に使用するルーティングが読み込まれます
  9. 【森山】50秒 LaravelPassportを使用した ID/Password認証のフローを説明します 最初に起動時に自動読み込まれるエンドポイント(oauth/token)に対して シークレットキーやID、passwordをpostしてアクセストークンを取得します ユーザー側は発行されたアクセストークンをヘッダーにセットすることで、認証が必要なページに対してアクセスすることができるようになります 認証が必要なルートに対しては、middlewareを設定することで、ヘッダーにアクセストークンがない場合はそのルートに対するアクセスできなくなります 次にlaravelPassportで追加設定した箇所などを説明させて頂きます
  10. 【森山】30秒 今回はFacebookでのログイン認証も実装しました laravel-passport-facebook-loginというライブラリを導入することで laravelPassportの機能を拡張しています これを導入することで、アクセストークン取得するときに、ID/passの代わりにFaceBookのアクセストークンを POSTすることで、ユーザー認証ができます ユーザーのカラムにID/PASSの代わりにfacobookIDを持たせる必要があります
  11. 【森山】30秒 次にエンドポイントの変更についてお話します。 アクセストークンを生成するエンドポイントはlaravelPassportで自動読み込みされます 今回プロジェクトの設計上、自動生成されるエンドポイントを変更したかったので サービスプロバイダーのbootメソッドで引数として変更したいパスを指定することで 自動生成されるエンドポイントを変更しています アクセストークンを取得するデフォルトのエンドポイントはoauth/tokenなのですが、 laravelのapiのエンドポイントはプレフィックスにapiがついています そのため統一するために頭にapiをつけて、api/oauth/tokenとしました 次にトークンの有効期限についてお話させていただきます
  12. 【森山】40秒 laravelPassportでは生成するアクセストークンに有効期限を設定できます 手順も公式に載っていて、設定するのは簡単なので アクセストークンの有効期限が切れていたらアクセス禁止にするという機能を実現したかったんですが。。。。 有効期限をチェックしてアクセス出来なくするっていう機能がなかったので
  13. 自分で用意しました 今回は有効期限をチェックする機能を追加して もし有効期限が切れていたら、リフレッシュトークンを使用して アクセストークンを再発行するようにしました
  14. アクセストークンをチェックする実際のソースコードはこんな感じになります リクエストのヘッダーにセットされているアクセストークンを DBに問い合わせて有効期限を確認しています 認証周りについては以上になります 次にNuxtとvue周りについて戎島よりお話させて頂きます
  15. 【戎島】40秒 あと、Nuxt.jsで工夫したのが環境設定の読み込みです。 通常、Nuxt.jsでは、apiサーバーのurlとか、laravel passportで生成したsecret keyとかっていうproductionとかlocalとか環境固有の定数をnuxt.config.jsで定義します。 こんな感じです。この例はnuxt.jsの公式のドキュメントから引用しました。 で、今回はこんな感じにしました
  16. 【戎島】 こちらですね。 Laravelと同じようにenvファイルを用意してそれで定数を管理するようにしました。 env.js自体はgitignoreしてて、env.js.exampleというファイルをgit管理するというLaravelと同じ方法を取っています。
  17. このenv.jsをnuxt.config.jsで読み込むんですが、nuxt.config.jsはes5なので、imoprtではなく、requireする必要があります。 ここはちょっと注意が必要です。
  18. axiosのラッパー(1/4) 今回のプロジェクトでは、axiosを直接使わずに、axiosをラッピングして使いました。 目的としては、 ヘッダーにデフォルトの値をセットしたいっていうのと、 動的にヘッダーに値をセットしたいからです。 axiosBaseというデフォルトのパラメータを持つオブジェクトを定義しています。 ここで定義しておくことでaxiosを使う各vueで同じ値をセットしなくても済みます。
  19. axiosのラッパー(2/4) http.jsでは、各vueにてaxiosと同じ使用感で扱えるように、axiosとインタフェースを揃えています。 get, post, put, delete, patchなどがそれにあたります。
  20. axiosのラッパー(3/4) また、今回はサーバーサイドとクライアントサイドのどちらでajax通信をするかによって、APIサーバーのURLを変えています。 同じプライベートネットワークにいるAPIサーバーにリクエストを飛ばすので、サーバーサイドからajaxするときはプライベートIPでサーバーを指定しています。 仕組みとしては、interceptors.request(インターセプターズ・リクエスト)によって、リクエストを送る前に処理を割り込ませてURLを切り替えています。
  21. axiosのラッパー(4/4) また、独自のメソッドも定義しています。 これはlaravelPassportでの認証の際に必要になるのですが、動的に取得したtokenをheaderにセットしています。
  22. 開発の際に役立ったツールをいくつか紹介します。 一つ目はLaravelのデバッグツールClockworkです。 chromeの拡張機能なのですが、これをインストールすると、デベロッパーツールにClockworkというタブが増えます。 デバッグを有効にしているlaravelのアプリケーションでこれを使うと、発行しているクエリがみれたり、スタックトレースが見れて、デバッグに役立ちます。 同じような機能を持つcomposerのライブラリでデバッグバーというのがありますが、Clockworkはライブラリを入れる必要がないので、こちらを使っています。 (実演する) 二つ目はLaravelのマイグレーションファイルを自動生成してくれるsequel-pro-laravel-exportです。 前提として、sequelproっていうmysqlのGUIクライアントアプリを使っている前提です。 sequelproっていうのはmysqladminみたいなもので、guiでdb操作できるアプリです。windowsやmacに対応しています。 このsequelproのプラグインである、sequel-pro-laravel-exportをインストールすると、既存のdbからマイグレーションファイルを生成できます。便利ですね。 (実演する) 【クエリビルダ変換ツール(実演する)】 sqlをlaravelのクエリビルダに自動変換してくれます 生のクエリを書くほうに慣れている方はこちらを使うと便利です 複雑なSQLだと正しく変換されないので注意してください select admins.display_name, users.email from user_test inner join users on user_test.user_id = users.id inner join user_codes on users.id = user_codes.user_id inner join admins on user_codes.admin_id = admins.id group by admins.display_name,users.email 【vueデバッグツール】 chromeの拡張ツールvue-xのstoreの中身や、発生したイベントのログが見れます
  23. 【戎島】30秒 PHPのコーディング規約はphp-figという団体が定めているPSR-2という規格を採用しています。 lintツールはPHP_CodeSnifferを使ってます。
  24. 【戎島】40秒 JSのコーディング規約はairbnbが公開しているes6の規約をベースに使っています。 また、es6ではなく、vue.jsに関する部分はvue.jsの公式のスタイルを参考にしています。 で、lintツールはeslintを使ってます。
  25. はい。LaravelとVue.jsを使って、良かったと思うことが何個かあります。 まず、採用ページへの応募者のレベルが上がありました!! 面接で、「Laravelやりたい」っていう人や「Vue.js」やりたいっていう人がよくいます。 あと、イベントなどでVue.jsをやっていると言うと、興味を持ってもらいやすいなとも感じますね。 SCOUTERさんと一緒にこうやってイベント開けたのもLaravelとVueやってたからですしね。
  26. で、最後にお伝えしたいことがあります。
  27. ITプロパートナーズではLaravel、Vue.jsで開発したいエンジニアを募集しています!!
  28. ご興味のある方は是非お声掛けください!! また、ご質問などあれば、この後の懇親会でお声掛けください!!
  29. ご清聴ありがとうございました!!