SlideShare a Scribd company logo
LaravelでVueを使うアレコレ
2019/04/12 sh-ogawa
Lara-Vue
● 全部Vueで作る
● 永続データはVuexに放り込む
● 多言語化はLaravel -> Vue I18n
● サーバサイドバリデーションエラーの表示
● サーバサイドからのflashメッセージの扱い
● ドメインロジックのエラーメッセージ
● アセットコンパイルするjsファイルは分ける
● webpackの設定を認識させる
全部Vueで作る
● async、deferが使えるようになるため、
ターンアラウンドタイムが短くなる可能性
● Blade噛ませると、タグ内が一瞬見える
● 部分的にやるなら、リアクティブに画面を動か
す場所だけに限定する
永続データはVuexに
放り込む
● コンポーネントが疎結合になる
● 永続化済データだけを入れるのがポイント
● 編集中データは入れてはいけない
● Vuex storeがmutation以外で更新されると
エラーログが出るので即修正
● storeの読込みはNuxt.jsをパクると良い
多言語化はLaravel
-> Vue I18n
● Composer required 
martinlindhe/laravel-vue-i18n-generato
● php artisan vue-i18n:generate
https://github.com/martinlindhe/laravel-vue-i18n-
generator
サーバサイドバリデーシ
ョンエラーの表示
● VueのerrorCapturedを使う
● rsp.data.errorsに入ってるからそれを投げる
● ErrorBoundaryで拾って表示
<error-boundary>
<hoge-screen />
</error-boundary>
サーバサイドからのflash
メッセージの扱い
● エラーはerrorCaptureに拾わせる
● 成功時は、Promise内でhref書き換えればOK
● その場で表示したい場合は、Event Hub使う
Event Hub
● 名前付いてるけど、専用のVueインスタンスを作
って、Vueプラグインとしてインストールするだ
け
● グローバルインスタンス経由でイベントのやり
取りを行うTIPS
Event Hub
const eventHub = {
install: function (Vue, options) {
Vue.prototype.$eventHub = new Vue()
}
}
export default eventHub
Event Hub
import EventHub from '@/EventHub'
Vue.use(EventHub)
```component.vue
this.$eventHub.$on(‘event-name’, (value) => {/* 処理 */})
this.$eventHub.$emit(‘event-name’, value)
ドメインロジックの
エラーメッセージ
● IlluminateSupportViewErrorBag使う
● PHPの癖にイミュータブルだから使い方注意
● response()->json([‘errors’ => $errors])
で返すとバリデーションエラーと同じになる
アセットコンパイルする
jsファイルは分ける
● 自前のjsとライブラリを分ける
● Laravel Mixのversionはファイルのハッシュ
取ってるだけだから、中身変わらなければ、
versionのIDは変わらない
● extractに外部ライブラリは全部記述する
アセットコンパイルする
jsファイルは分けるmix.js('resources/js/app.js', 'public/js')
.extract(['axios', 'bulma', 'lodash.defaultsdeep', 'vee-validate', 'vue', 'vue-i18n', 'vue-template-compiler', 'vuex'])
.sass('resources/sass/app.scss', 'public/css', {
implementation: require('node-sass')
})
.options({
processCssUrls: false
})
.version()
webpackの設定を認識
させる
● 相対パスがとにかく怠い
● エイリアスが無いと実際詰むと思う
● __ide.webpack.config.js作ってideaに認識さす
const path = require('path')
module.exports = {
entry: path.resolve(__dirname, "resources/js/app.js"),
output: {
path: path.resolve(__dirname, 'public/js'),
filename: 'app.js'
},
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': __dirname + '/resources/js'
}
}
}
Lara vue

More Related Content

Similar to Lara vue

[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
Kazuchika Sekiya
 
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門irix_jp
 
OpenStack Object Storage; Overview
OpenStack Object Storage; OverviewOpenStack Object Storage; Overview
OpenStack Object Storage; Overviewirix_jp
 
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
Shinji Takao
 
Kubernetes環境で実現するWebアプリケーションセキュリティ
Kubernetes環境で実現するWebアプリケーションセキュリティKubernetes環境で実現するWebアプリケーションセキュリティ
Kubernetes環境で実現するWebアプリケーションセキュリティ
NGINX, Inc.
 
モダンJavaScript入門.pdf
モダンJavaScript入門.pdfモダンJavaScript入門.pdf
モダンJavaScript入門.pdf
omochids0113
 
react-ja.pdf
react-ja.pdfreact-ja.pdf
react-ja.pdf
ssuser65180a
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
samemoon
 

Similar to Lara vue (9)

[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration[JavaOne Tokyo 2012] JavaFX and Web Integration
[JavaOne Tokyo 2012] JavaFX and Web Integration
 
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
 
OpenStack Object Storage; Overview
OpenStack Object Storage; OverviewOpenStack Object Storage; Overview
OpenStack Object Storage; Overview
 
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
 
Kubernetes環境で実現するWebアプリケーションセキュリティ
Kubernetes環境で実現するWebアプリケーションセキュリティKubernetes環境で実現するWebアプリケーションセキュリティ
Kubernetes環境で実現するWebアプリケーションセキュリティ
 
モダンJavaScript入門.pdf
モダンJavaScript入門.pdfモダンJavaScript入門.pdf
モダンJavaScript入門.pdf
 
react-ja.pdf
react-ja.pdfreact-ja.pdf
react-ja.pdf
 
CloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloudCloudStackユーザ会 OSC.cloud
CloudStackユーザ会 OSC.cloud
 

More from 小川 昌吾

Effective flutter
Effective flutterEffective flutter
Effective flutter
小川 昌吾
 
Flutter first impression
Flutter first impressionFlutter first impression
Flutter first impression
小川 昌吾
 
Flutter management statement
Flutter management statementFlutter management statement
Flutter management statement
小川 昌吾
 
Laravel vue-project-upload
Laravel vue-project-uploadLaravel vue-project-upload
Laravel vue-project-upload
小川 昌吾
 
Atomic design+vue
Atomic design+vueAtomic design+vue
Atomic design+vue
小川 昌吾
 
今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り
小川 昌吾
 
Njug docker-20180623
Njug docker-20180623Njug docker-20180623
Njug docker-20180623
小川 昌吾
 
アプリ屋のための Docker入門
アプリ屋のための Docker入門アプリ屋のための Docker入門
アプリ屋のための Docker入門
小川 昌吾
 
Njug 20180414
Njug 20180414Njug 20180414
Njug 20180414
小川 昌吾
 
Java屋からPHPerになって1年くらい経った
Java屋からPHPerになって1年くらい経ったJava屋からPHPerになって1年くらい経った
Java屋からPHPerになって1年くらい経った
小川 昌吾
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js
小川 昌吾
 
受託、SES、WEBと経験したので比較してみた
受託、SES、WEBと経験したので比較してみた受託、SES、WEBと経験したので比較してみた
受託、SES、WEBと経験したので比較してみた
小川 昌吾
 
ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)
小川 昌吾
 
非エンジニアに捧ぐツアーオブ構成管理
非エンジニアに捧ぐツアーオブ構成管理非エンジニアに捧ぐツアーオブ構成管理
非エンジニアに捧ぐツアーオブ構成管理
小川 昌吾
 
Dynamo db はじめの一歩
Dynamo db はじめの一歩Dynamo db はじめの一歩
Dynamo db はじめの一歩
小川 昌吾
 
スキトラGit
スキトラGitスキトラGit
スキトラGit
小川 昌吾
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
小川 昌吾
 
テストコード入門
テストコード入門テストコード入門
テストコード入門
小川 昌吾
 
IoT検定
IoT検定IoT検定
IoT検定
小川 昌吾
 
MySQL入門
MySQL入門MySQL入門
MySQL入門
小川 昌吾
 

More from 小川 昌吾 (20)

Effective flutter
Effective flutterEffective flutter
Effective flutter
 
Flutter first impression
Flutter first impressionFlutter first impression
Flutter first impression
 
Flutter management statement
Flutter management statementFlutter management statement
Flutter management statement
 
Laravel vue-project-upload
Laravel vue-project-uploadLaravel vue-project-upload
Laravel vue-project-upload
 
Atomic design+vue
Atomic design+vueAtomic design+vue
Atomic design+vue
 
今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り今年はある意味当たり年だった! という一年振り返り
今年はある意味当たり年だった! という一年振り返り
 
Njug docker-20180623
Njug docker-20180623Njug docker-20180623
Njug docker-20180623
 
アプリ屋のための Docker入門
アプリ屋のための Docker入門アプリ屋のための Docker入門
アプリ屋のための Docker入門
 
Njug 20180414
Njug 20180414Njug 20180414
Njug 20180414
 
Java屋からPHPerになって1年くらい経った
Java屋からPHPerになって1年くらい経ったJava屋からPHPerになって1年くらい経った
Java屋からPHPerになって1年くらい経った
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js
 
受託、SES、WEBと経験したので比較してみた
受託、SES、WEBと経験したので比較してみた受託、SES、WEBと経験したので比較してみた
受託、SES、WEBと経験したので比較してみた
 
ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)ITの開発現場における最近の当たり前これからの当たり前(主観)
ITの開発現場における最近の当たり前これからの当たり前(主観)
 
非エンジニアに捧ぐツアーオブ構成管理
非エンジニアに捧ぐツアーオブ構成管理非エンジニアに捧ぐツアーオブ構成管理
非エンジニアに捧ぐツアーオブ構成管理
 
Dynamo db はじめの一歩
Dynamo db はじめの一歩Dynamo db はじめの一歩
Dynamo db はじめの一歩
 
スキトラGit
スキトラGitスキトラGit
スキトラGit
 
スキトラ Spring + mybatis
スキトラ Spring + mybatisスキトラ Spring + mybatis
スキトラ Spring + mybatis
 
テストコード入門
テストコード入門テストコード入門
テストコード入門
 
IoT検定
IoT検定IoT検定
IoT検定
 
MySQL入門
MySQL入門MySQL入門
MySQL入門
 

Lara vue

Editor's Notes

  1. jsが動かないブラウザなら使えるテクニック。 ただ、全部くろみうむ化している現代において、ぶっちゃけそんなことはどうでも良くなりつつある 画面の特定部分だけに使う場合は、グローバルに登録はせずに、new Vueして使う。
  2. 画面の特定部分だけに使う場合は、グローバルに登録はせずに、new Vueして使う。
  3. これで、フロントとバックエンドで生成する文言のブレを排除する
  4. jsが動かないブラウザなら使えるテクニック。 ただ、全部くろみうむ化している現代において、ぶっちゃけそんなことはどうでも良くなりつつある 画面の特定部分だけに使う場合は、グローバルに登録はせずに、new Vueして使う。
  5. jsが動かないブラウザなら使えるテクニック。 ただ、全部くろみうむ化している現代において、ぶっちゃけそんなことはどうでも良くなりつつある 画面の特定部分だけに使う場合は、グローバルに登録はせずに、new Vueして使う。
  6. 多用すると死ぬので、必要な箇所だけに限定する。 イベントハブに登録するイベント名は、定数で管理しても良いかも