Soumettre la recherche
Mettre en ligne
LaravelとNuxt.jsを業務で取り入れる際に得た知見
•
Télécharger en tant que PPTX, PDF
•
6 j'aime
•
8,695 vues
S
ssuserb6dacf
Suivre
Laravel/Vue.js勉強会#4
Lire moins
Lire la suite
Ingénierie
Signaler
Partager
Signaler
Partager
1 sur 30
Télécharger maintenant
Recommandé
Laravel echo + vue.js + axiosで簡単チャットアプリ開発
Laravel echo + vue.js + axiosで簡単チャットアプリ開発
宜浩 香月
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
宜浩 香月
YYPHP #13 初めてのコードレビュー
YYPHP #13 初めてのコードレビュー
宜浩 香月
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
Daisuke Tamada
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
Get started with future C# .Net development with Docker
Get started with future C# .Net development with Docker
Oshitari_kochi
安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識
Fumito Mizuno
Recommandé
Laravel echo + vue.js + axiosで簡単チャットアプリ開発
Laravel echo + vue.js + axiosで簡単チャットアプリ開発
宜浩 香月
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
宜浩 香月
YYPHP #13 初めてのコードレビュー
YYPHP #13 初めてのコードレビュー
宜浩 香月
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
Daisuke Tamada
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
Get started with future C# .Net development with Docker
Get started with future C# .Net development with Docker
Oshitari_kochi
安全なテーマ作成のためのPHPの知識
安全なテーマ作成のためのPHPの知識
Fumito Mizuno
Slackを導入しよう
Slackを導入しよう
Yoshiyuki Nakahara
Visual Studio 拡張機能の作り方
Visual Studio 拡張機能の作り方
Yuki Igarashi
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
takenao
WP REST API の活用事例と今後
WP REST API の活用事例と今後
Yuusuke Yoshida
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版
baroqueworksdev
師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013
hiboma
Flex入門
Flex入門
Shinjiro Watanabe
Rancher select
Rancher select
cyberblack28 Ichikawa
初歩から始めるJava勉強会 プレゼンテーション資料
初歩から始めるJava勉強会 プレゼンテーション資料
Terumi Tamura
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13
Sho Douhashi
Engineer can change the world with Drew
Engineer can change the world with Drew
Yoshio Terada
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
DIVE INTO CODE Corp.
RancherのWindowsサポートと事始め
RancherのWindowsサポートと事始め
cyberblack28 Ichikawa
「Delphiで作るデータベースツール。その開発のポイントは・・」
「Delphiで作るデータベースツール。その開発のポイントは・・」
Embarcadero Technologies
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
Isao Ebisujima
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
Masahito Zembutsu
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
Masaya Tahara
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
de:code 2017
OSC福岡 20111203
OSC福岡 20111203
Hiroshi Bunya
AITCオープンラボ: Pepper x IoT x Web
AITCオープンラボ: Pepper x IoT x Web
dsuke Takaoka
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
DIVE INTO CODE Corp.
俺とHashiCorp
俺とHashiCorp
Toru Makabe
Contenu connexe
Tendances
Slackを導入しよう
Slackを導入しよう
Yoshiyuki Nakahara
Visual Studio 拡張機能の作り方
Visual Studio 拡張機能の作り方
Yuki Igarashi
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
takenao
WP REST API の活用事例と今後
WP REST API の活用事例と今後
Yuusuke Yoshida
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版
baroqueworksdev
師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013
hiboma
Flex入門
Flex入門
Shinjiro Watanabe
Rancher select
Rancher select
cyberblack28 Ichikawa
初歩から始めるJava勉強会 プレゼンテーション資料
初歩から始めるJava勉強会 プレゼンテーション資料
Terumi Tamura
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13
Sho Douhashi
Engineer can change the world with Drew
Engineer can change the world with Drew
Yoshio Terada
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
DIVE INTO CODE Corp.
RancherのWindowsサポートと事始め
RancherのWindowsサポートと事始め
cyberblack28 Ichikawa
「Delphiで作るデータベースツール。その開発のポイントは・・」
「Delphiで作るデータベースツール。その開発のポイントは・・」
Embarcadero Technologies
Tendances
(14)
Slackを導入しよう
Slackを導入しよう
Visual Studio 拡張機能の作り方
Visual Studio 拡張機能の作り方
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
デザイナーのためのはじめてPHP ~Codex、どう使いこなす?~
WP REST API の活用事例と今後
WP REST API の活用事例と今後
自動テストとJenkinsの活用 公開版
自動テストとJenkinsの活用 公開版
師弟登壇・新米サムライの集い 2013
師弟登壇・新米サムライの集い 2013
Flex入門
Flex入門
Rancher select
Rancher select
初歩から始めるJava勉強会 プレゼンテーション資料
初歩から始めるJava勉強会 プレゼンテーション資料
Redmine4時代のプラグイン開発 redmine.tokyo #13
Redmine4時代のプラグイン開発 redmine.tokyo #13
Engineer can change the world with Drew
Engineer can change the world with Drew
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
【入門】3時間でアプリ公開!ゼロからのプログラミングRails講座
RancherのWindowsサポートと事始め
RancherのWindowsサポートと事始め
「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/25
Isao Ebisujima
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
Masahito Zembutsu
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
Masaya Tahara
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
de:code 2017
OSC福岡 20111203
OSC福岡 20111203
Hiroshi Bunya
AITCオープンラボ: Pepper x IoT x Web
AITCオープンラボ: Pepper x IoT x Web
dsuke Takaoka
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
DIVE INTO CODE Corp.
俺とHashiCorp
俺とHashiCorp
Toru Makabe
Laravel5を使って開発してみた
Laravel5を使って開発してみた
Takeo Noda
[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...
NTT DATA Technology & Innovation
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
Serverworks Co.,Ltd.
UShareSoft_20130425
UShareSoft_20130425
Satoru Watanabe
UShareSoft_20130425
UShareSoft_20130425
Satoru Watanabe
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Yuuki Takezawa
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
Recruit Technologies
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
Takashi Abe
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
DeNA
Hadoop Source Code Reading #17
Hadoop Source Code Reading #17
Shingo Furuyama
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSC
Daisuke 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/25
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
「DevSecOpsとは?」の一歩先 (CloudNative Days Tokyo 2021)
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
OSC福岡 20111203
OSC福岡 20111203
AITCオープンラボ: Pepper x IoT x Web
AITCオープンラボ: Pepper x IoT x Web
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
アイデアを形にする ③3時間でアプリ公開!ゼロからのプログラミング講座
俺とHashiCorp
俺とHashiCorp
Laravel5を使って開発してみた
Laravel5を使って開発してみた
[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例
[DO12] ナビタイムジャパン CTO 菊池氏が語る IT リーダのための開発を加速させる DevOps の実践例
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
OSSプロジェクトへのコントリビューション はじめの一歩を踏み出そう!(Open Source Conference 2022 Online/Spring...
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
UShareSoft_20130425
UShareSoft_20130425
UShareSoft_20130425
UShareSoft_20130425
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
リクルートにおけるFirefox OSアプリへの取り組み ~0.8人月でできるアプリ!?~
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
Microservicesを実現するために、インフラエンジニアと開発者がすべきこと
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
Hadoop Source Code Reading #17
Hadoop Source Code Reading #17
OSC2018 hiroshima session slide by OSSC
OSC2018 hiroshima session slide by OSSC
LaravelとNuxt.jsを業務で取り入れる際に得た知見
1.
LaravelとNuxt.jsを業務で取り入れる際 に得た知見 株式会社ITプロパートナーズ 戎島功 森山智哉 2018/04/25 Laravel/Vue.js勉強会#4 1
2.
自己紹介 森山智哉 株式会社ITプロパートナーズ エンジニア Laravel / Vue
/ Nuxt / Twitter: @frostndays 2
3.
自己紹介 戎島功(えびすじまいさお) 株式会社ITプロパートナーズ エンジニア Laravel / Vue.js
/ Nuxt.js Twitter: @isao_x 3
4.
話すこと 1. プロジェクト概要 2. 認証方法について 3.
Nuxt.js 環境設定の読み込み 4. axiosのラッパー 5. 開発の際に役立った便利ツール 4
5.
・株式会社ITプロパートナーズで新規開発中 ・toC Webサービス ・大規模なSNSみたいなもの 1−1 プロジェクト概要 5
6.
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
7.
1−3 サーバー構成 ユーザー 管理者 7 APIサーバー
/ 管理画面フロント側サーバー
8.
・Laravel Passportとは APIでログイン認証を行うためのLaravelのライブラリ ・使い方 laravelPassportで使用するTableを生成 認証用のルーティングが自動生成される 2−1 認証方法について 8
9.
2−2 Laravel Passportでの認証フロー ③
AccessTokenを渡す ① ID/password ④ ヘッダーにAccessTokenをセッ ト ⑤ 認証が必要なぺージにアクセス ② AccessTokenを発行 9
10.
2−3 Laravel Passport
facebook認証 ・使用したライブラリ danjdewhurst/laravel-passport-facebook-login ・使い方 laravelPassportと同様のエンドポイントを使用する ID/passの代わりにFacebookのアクセストークンをPOSTする userテーブルにはfacebookID用のカラムを用意する 10
11.
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
12.
2−5 Laravel Passport
トークン有効期限 12 ・有効期限チェック機能の追加 使用するアクセストークンに有効期限を設定 。。が有効期限をチェックして期限切れかどうかを判定する機能は無い ため
13.
2−5 Laravel Passport
トークン有効期限 13 ・有効期限チェック機能の追加 使用するアクセストークンに有効期限を設定 。。が有効期限をチェックして期限切れかどうかを判定する機能は無い ため 有効期限をチェックする機能追加 有効期限が切れていていたらリフレッシュトークンを使用
14.
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(); }
15.
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公式ドキュメントより引用)
16.
3−2 Nuxt.js 環境設定の読み込み 16 env.js exports.env
= { BASE_URL: 'http://localhost:3000', CLIENT_ID: 2, PASSPORT_SECRET: 'dummyMWN3ojUoBUWww5o3w5TrviGbW8BI9Vdummy', }; 今回、Laravelと同じようにenvファイルを用意してそれで定数を管理したいと思 ったので、env.jsというファイルを作って、そこで環境固有の定数を定義しまし た。 こんな感じです↓
17.
nuxt.config.js const env =
require('./env.js'); module.exports = Object.assign(env, { … } env.jsをnuxt.config.jsでrequireする 3−3 Nuxt.js 環境設定の読み込み 17
18.
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
19.
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
20.
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
21.
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
22.
・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
23.
・PHPのコーディング規約はPSR-2を採用 https://www.php-fig.org/psr/psr-2/ ・PHPのLintツールはPHP_CodeSnifferを採用 https://github.com/squizlabs/PHP_CodeSniffer 5−2 開発の際に役立った便利ツールなど 23
24.
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
25.
LaravelとVue.js(Nuxt.js)を使ってみて 25
26.
LaravelとVue.js(Nuxt.js)を使ってみて よかった!! 26
27.
おしまい ですが、、、 27
28.
おしまい ですが、、、 ITプロパートナーズではLaravel、Vue.jsで開発したいエンジ ニアを募集しています。 28
29.
おしまい ですが、、、 ITプロパートナーズではLaravel、Vue.jsで開発したいエンジ ニアを募集しています。 ご興味のある方は是非お声掛けください!! 29
30.
おしまい ご清聴ありがとうございました!! 30
Notes de l'éditeur
【森山】30秒 今回は、LaravelとNuxt.jsを業務で取り入れる際に得た知見について ITプロパートナーズの森山と戎島の二人でお話させて頂きます! 弊社ではLaravelとVue.jsのフレームワークであるNuxt.jsを使ってプロダクトを開発中です。 Laravelは以前から使っていたのですが、Nuxt.jsは今回始めて使いました。 その際に調べたり自分たちで考えてたまった知見を一部紹介したいと思います。
【森山】30秒 まずは自己紹介をさせていただきます。 ITプロパートナーズでエンジニアやってます!森山と申します もともとにいてSierにいてwebベンチャーに転職してきました 昔はSierで電子カルテとか触ってました 最近laravelとNuxtでプロダクト開発をメインでやっています!
【戎島】30秒 株式会社ITプロパートナーズでエンジニアをやっているエビスジマイサオといいます。 ベンチャー企業を何社か経験しているエンジニアです。 以前はruby書いていましたが、最近はlaravelとvue書いています。 最近はマネジメント業務が多めです。
【森山】20秒 今日お話したいことはこちらです。 本当はもっとたくさんお話したいことがあるのですが、プロダクトがまだ完成していないので、そこまで複雑ではない部分をお話します。
【森山】10秒 今回、弊社で作っているLaravel、Nuxt.jsのプロダクトの概要はこんな感じです。 toC向けの大規模なSNSみたいなものです。
【森山】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のリリースが発表されたので、そちらもリリース前に余裕あればバージョンあげちゃおうかと思ってます。 次は全体のシステム構成についてお話します
【森山】60秒 今回のサーバー構成はこんな感じです。 サーバはユーザー側の画面のレンダリングを行っているNuxt.jsとAPIサーバーとして使用してるlaravelの2台構成になります ユーザー側のレンダリングを行っているNuxtはSSRモードで使用しています NuxtはSSRモードとSPAモードというのがありますが、今回はSSRモードで使用しています SPAモードを選択しなかった理由は、ユーザがコンテンツを作成し、そのコンテンツをTwitterやFacebookにシェアするといった機能があるため OGPタグなどの懸念もあり今回はSSRモードを選択しました LaraveはAPIサーバー兼、管理用ページのレンダリングを担当しています 次に今回のプロダクトの認証方法についてお話させていただきます
【森山】30秒 APIでログイン認証を行うためにLaravelPassportというライブラリをつかいました フロントからの使いかたは、vue.jsだとlaravel Passport VueなどlaravalPassport用の認証用のライブラリがありますが、 APIを叩くだけなので、ライブラリを使わないでも簡単に認証機能が実装出来ます ルーティングファイルにルーティングは書き込まれないですが、Laravel起動時にlaravelPassport用の認証に使用するルーティングが読み込まれます
【森山】50秒 LaravelPassportを使用した ID/Password認証のフローを説明します 最初に起動時に自動読み込まれるエンドポイント(oauth/token)に対して シークレットキーやID、passwordをpostしてアクセストークンを取得します ユーザー側は発行されたアクセストークンをヘッダーにセットすることで、認証が必要なページに対してアクセスすることができるようになります 認証が必要なルートに対しては、middlewareを設定することで、ヘッダーにアクセストークンがない場合はそのルートに対するアクセスできなくなります 次にlaravelPassportで追加設定した箇所などを説明させて頂きます
【森山】30秒 今回はFacebookでのログイン認証も実装しました laravel-passport-facebook-loginというライブラリを導入することで laravelPassportの機能を拡張しています これを導入することで、アクセストークン取得するときに、ID/passの代わりにFaceBookのアクセストークンを POSTすることで、ユーザー認証ができます ユーザーのカラムにID/PASSの代わりにfacobookIDを持たせる必要があります
【森山】30秒 次にエンドポイントの変更についてお話します。 アクセストークンを生成するエンドポイントはlaravelPassportで自動読み込みされます 今回プロジェクトの設計上、自動生成されるエンドポイントを変更したかったので サービスプロバイダーのbootメソッドで引数として変更したいパスを指定することで 自動生成されるエンドポイントを変更しています アクセストークンを取得するデフォルトのエンドポイントはoauth/tokenなのですが、 laravelのapiのエンドポイントはプレフィックスにapiがついています そのため統一するために頭にapiをつけて、api/oauth/tokenとしました 次にトークンの有効期限についてお話させていただきます
【森山】40秒 laravelPassportでは生成するアクセストークンに有効期限を設定できます 手順も公式に載っていて、設定するのは簡単なので アクセストークンの有効期限が切れていたらアクセス禁止にするという機能を実現したかったんですが。。。。 有効期限をチェックしてアクセス出来なくするっていう機能がなかったので
自分で用意しました 今回は有効期限をチェックする機能を追加して もし有効期限が切れていたら、リフレッシュトークンを使用して アクセストークンを再発行するようにしました
アクセストークンをチェックする実際のソースコードはこんな感じになります リクエストのヘッダーにセットされているアクセストークンを DBに問い合わせて有効期限を確認しています 認証周りについては以上になります 次にNuxtとvue周りについて戎島よりお話させて頂きます
【戎島】40秒 あと、Nuxt.jsで工夫したのが環境設定の読み込みです。 通常、Nuxt.jsでは、apiサーバーのurlとか、laravel passportで生成したsecret keyとかっていうproductionとかlocalとか環境固有の定数をnuxt.config.jsで定義します。 こんな感じです。この例はnuxt.jsの公式のドキュメントから引用しました。 で、今回はこんな感じにしました
【戎島】 こちらですね。 Laravelと同じようにenvファイルを用意してそれで定数を管理するようにしました。 env.js自体はgitignoreしてて、env.js.exampleというファイルをgit管理するというLaravelと同じ方法を取っています。
このenv.jsをnuxt.config.jsで読み込むんですが、nuxt.config.jsはes5なので、imoprtではなく、requireする必要があります。 ここはちょっと注意が必要です。
axiosのラッパー(1/4) 今回のプロジェクトでは、axiosを直接使わずに、axiosをラッピングして使いました。 目的としては、 ヘッダーにデフォルトの値をセットしたいっていうのと、 動的にヘッダーに値をセットしたいからです。 axiosBaseというデフォルトのパラメータを持つオブジェクトを定義しています。 ここで定義しておくことでaxiosを使う各vueで同じ値をセットしなくても済みます。
axiosのラッパー(2/4) http.jsでは、各vueにてaxiosと同じ使用感で扱えるように、axiosとインタフェースを揃えています。 get, post, put, delete, patchなどがそれにあたります。
axiosのラッパー(3/4) また、今回はサーバーサイドとクライアントサイドのどちらでajax通信をするかによって、APIサーバーのURLを変えています。 同じプライベートネットワークにいるAPIサーバーにリクエストを飛ばすので、サーバーサイドからajaxするときはプライベートIPでサーバーを指定しています。 仕組みとしては、interceptors.request(インターセプターズ・リクエスト)によって、リクエストを送る前に処理を割り込ませてURLを切り替えています。
axiosのラッパー(4/4) また、独自のメソッドも定義しています。 これはlaravelPassportでの認証の際に必要になるのですが、動的に取得したtokenをheaderにセットしています。
開発の際に役立ったツールをいくつか紹介します。 一つ目は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の中身や、発生したイベントのログが見れます
【戎島】30秒 PHPのコーディング規約はphp-figという団体が定めているPSR-2という規格を採用しています。 lintツールはPHP_CodeSnifferを使ってます。
【戎島】40秒 JSのコーディング規約はairbnbが公開しているes6の規約をベースに使っています。 また、es6ではなく、vue.jsに関する部分はvue.jsの公式のスタイルを参考にしています。 で、lintツールはeslintを使ってます。
はい。LaravelとVue.jsを使って、良かったと思うことが何個かあります。 まず、採用ページへの応募者のレベルが上がありました!! 面接で、「Laravelやりたい」っていう人や「Vue.js」やりたいっていう人がよくいます。 あと、イベントなどでVue.jsをやっていると言うと、興味を持ってもらいやすいなとも感じますね。 SCOUTERさんと一緒にこうやってイベント開けたのもLaravelとVueやってたからですしね。
で、最後にお伝えしたいことがあります。
ITプロパートナーズではLaravel、Vue.jsで開発したいエンジニアを募集しています!!
ご興味のある方は是非お声掛けください!! また、ご質問などあれば、この後の懇親会でお声掛けください!!
ご清聴ありがとうございました!!
Télécharger maintenant