SlideShare a Scribd company logo
JavaScript何も判らんマンが、
Vueなら扱えそうだと思って、
業務システムのGUIをほぼVueで作った話
2019/07/12 sh-ogawa
自己紹介
sh-ogawa
SNSアカウント
■Twitter:@kroyeeg
■Qiita:sh-ogawa
■GitHub:sh-ogawa
■SlideShare:sh-ogawa
■はてブロ:sh-ogawa
■AWSで自責高額請求
&支払い免除された人 New!!
今日の話
フロント弱者がVueを使って
業務システムを1から作りながら、
俺的スタイルを構築していった
という話
目的
(得た知見と)悩みを共有して、
あとで意見交換をしたい
中身について
● MPA
● 業務システム
バックエンドフロント
UIコンポーネント
最初期の要素
(Vue + Vuex)
言語ファイル
画面構成
ヘッダーメニュー
サ
イ
ド
メ
ニ
ュ
|
フッター
メインコンテンツ
タイトル + beadcrumb
タイトル(errorCapturedでのエラーメッセージの表示含む)
レベル1
● ログイン画面
○ formのサブミットで入力値を送信
○ サーバサイドのバリデーションエラーは
Laravelの機能で表示
○ クライアントサイドバリデーション自作
ベターJQuery的な使い方
レベル2
DB管理のマスタデータ
Laravelのbladeテンプレートから、
$root.$dataに対してデータを設定
mounted時はundefinedなので課題を感じてる
レベル2
● 動的な画面
○ やたら動的に増える項目が多いから
Vueの恩恵
○ 配列削除に弱い
■ Keyの壁
○ Atomic Designの恩恵
○ vee-validate導入
レベル3
<hoge-view
:data="{{ $hoge->toJson() }}"
hoge1-url="{{ route('web.hoge1.index') }}"
hoge2-url="{{ route('web.hoge2.store', [$hoge2_id]) }}"
hoge3-url="{{ route('web.hoge3.update', [$hoge3_id]) }}"
hoge4-url="{{ route('web.hoge4.delete', [$hoge4_id]) }}"
hoge5-url="{{ route('web.hoge5.store', [$hoge5_id]) }}"
hoge6-url="{{ route('web.hoge6.store', [$hoge6_id]) }}"
hoge7-url="{{ route('web.hoge7.update', [$hoge7_id]) }}"
hoge8-url="{{ route('web.hoge8.update', [$hoge8_id]) }}"
/>
レベル3
● 項目が増え続ける画面
○ URLの追加がしんどい
○ そのバケツリレーに心底疲れる
■ Vuexのストアに放り込む
● ziggyの追加
○ notify messageの表示が怠い問題
■ EventHubの追加
● ステップ入力しないといけないような長大画面
ziggy
● Laravelのルーティング定義をjson形式にする
● Laravelのrouteヘルパーと同じ書き口で書ける
● vuexから呼ぶと気分が微妙になる()
Laravel
route(‘web.home’)
vue
route(‘web.home’)
vuex
this._vm.route(‘web.home’)
EventHub
● 専用のVueインスタンスを作って、
Vueプラグインとしてインストールするだけ
● グローバルインスタンス経由で
イベントのやり取りを行うTIPS
EventHub
import EventHub from '@/EventHub'
Vue.use(EventHub)
```component.vue
this.$eventHub.$on(‘event-name’, (value) => {/* 処理 */})
this.$eventHub.$emit(‘event-name’, value)
this.$eventHub.$on(‘event-name’, (value) => {
// 何か処理
・・・
this.$eventHub.$emit(‘return-event-name’, returnValue)
})
this.$eventHub.$once(‘return-event-name’, (value) => {処理})
this.$eventHub.$emit(‘event-name’, value)
EventHubの応用
画面構成
ヘッダーメニュー
サ
イ
ド
メ
ニ
ュ
|
フッター
メインコンテンツ
タイトル + beadcrumb
タイトル(errorCapturedでのエラーメッセージの表示含む)
notification(event Hub)
モーダル表示(event Hub)
バックエンドフロントエンド
UIコンポーネント
今現在の要素
Vue + Vuex 言語ファイル
ルーティング
ファイル
まとめ
● 簡単すぎる画面からやらない
● サーバサイドFWのリソース
  -> Vueで使用するリソースを自動生成
● $refsは積極採用
● イベントハブは重要
● Nuxtの仕組みは参考になる
課題
● DBに持ってるデータで入力フォーム生成するとき
のデータの取り方
● 画面遷移以外で画面の表示をガサっと変えたい
○ 今日扱えなかった
○ イベントハブで通知してv-if
○ vue-rouerで履歴登録させないとか出来ると達
成できるんだけど、、情報求む
参考
● Buefy
https://buefy.org/
● ziggy
https://github.com/tightenco/ziggy
● generate vue-i18n file
https://github.com/martinlindhe/laravel-vue-i18n-generator
● VeeValidate
https://baianat.github.io/vee-validate/
● Vue.js入門 基礎から実践アプリケーション開発まで

https://www.amazon.co.jp/dp/4297100916/ref=cm_sw_em_r_mt_dp_U_BKbkDb2XSD6QF 



おしまい
Ad

Recommended

PWA aruaru
PWA aruaru
n_harada
 
PWAを使ってWebXRコンテンツをオフラインで動くようにする手順について
PWAを使ってWebXRコンテンツをオフラインで動くようにする手順について
WheetTweet
 
XRにおけるプロトタイピングについて
XRにおけるプロトタイピングについて
WheetTweet
 
PWAがOculus Storeに配信できるようになる
PWAがOculus Storeに配信できるようになる
TAM
 
PWAでタイマーを 作ってみた
PWAでタイマーを 作ってみた
Yuhei FUJITA
 
現代的ウェブデザイン学習
現代的ウェブデザイン学習
Takenaka Kiyohiro
 
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
GUIツールで送る快適な Gitライフ@Creators MeetUp #29
Erina Takei
 
Webサイトに動きをつける、jQueryプラグインの設置方法 先生:田中 晶子
Webサイトに動きをつける、jQueryプラグインの設置方法 先生:田中 晶子
schoowebcampus
 
レスポンシブおっぱいでまなぶスケーラブルグラフィックス
レスポンシブおっぱいでまなぶスケーラブルグラフィックス
minoru nakanou
 
ぱんちら.js -JavaScriptでテクスチャマッピング- HTML5飯発表資料
ぱんちら.js -JavaScriptでテクスチャマッピング- HTML5飯発表資料
minoru nakanou
 
Web Speech API でおっさんの声を美少女化してみた
Web Speech API でおっさんの声を美少女化してみた
minoru nakanou
 
終わりなきWebの旅
終わりなきWebの旅
Yasuhisa Hasegawa
 
効果的なブログの書き方 ~仕事につながるブログ術、3つのポイント~
効果的なブログの書き方 ~仕事につながるブログ術、3つのポイント~
毅 佐藤
 
好感度をアップさせるための表情トレーニング【男性編】 先生:内田 佳代
好感度をアップさせるための表情トレーニング【男性編】 先生:内田 佳代
schoowebcampus
 
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
Erina Takei
 
ディレクタ兼エンジニアの仕事@Creators MeetUp #36
ディレクタ兼エンジニアの仕事@Creators MeetUp #36
Erina Takei
 
最近知ったBootstrapの注意点
最近知ったBootstrapの注意点
Kawaji Masaki
 
Bootstrapを使ってみよう
Bootstrapを使ってみよう
Kawaji Masaki
 
[Service worker] プッシュ通知の使い方
[Service worker] プッシュ通知の使い方
Van Trung Phan
 
PWA A Go-Go !! @ABC2018A 20181013
PWA A Go-Go !! @ABC2018A 20181013
Ryu Shindo
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
Toshihiro Kawachi
 
Webデザイナーが身に付けておきたい定番スキル ー WordPress 初級・導入編 ー
Webデザイナーが身に付けておきたい定番スキル ー WordPress 初級・導入編 ー
Kite Koga
 
とある情報の超整理術
とある情報の超整理術
Masahito Zembutsu
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
Seiji Noro
 
Gitライフをはじめましょう〜GUIツールで簡単運用 Mac編〜
Gitライフをはじめましょう〜GUIツールで簡単運用 Mac編〜
Erina Takei
 
JS非同期処理のいま
JS非同期処理のいま
Masakazu Muraoka
 
Mozapps installがなくなったことへの不平不満
Mozapps installがなくなったことへの不平不満
Masakazu Muraoka
 
Sapporo OSC 2015
Sapporo OSC 2015
kmaeda
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?
好洋 山崎
 

More Related Content

What's hot (20)

レスポンシブおっぱいでまなぶスケーラブルグラフィックス
レスポンシブおっぱいでまなぶスケーラブルグラフィックス
minoru nakanou
 
ぱんちら.js -JavaScriptでテクスチャマッピング- HTML5飯発表資料
ぱんちら.js -JavaScriptでテクスチャマッピング- HTML5飯発表資料
minoru nakanou
 
Web Speech API でおっさんの声を美少女化してみた
Web Speech API でおっさんの声を美少女化してみた
minoru nakanou
 
終わりなきWebの旅
終わりなきWebの旅
Yasuhisa Hasegawa
 
効果的なブログの書き方 ~仕事につながるブログ術、3つのポイント~
効果的なブログの書き方 ~仕事につながるブログ術、3つのポイント~
毅 佐藤
 
好感度をアップさせるための表情トレーニング【男性編】 先生:内田 佳代
好感度をアップさせるための表情トレーニング【男性編】 先生:内田 佳代
schoowebcampus
 
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
Erina Takei
 
ディレクタ兼エンジニアの仕事@Creators MeetUp #36
ディレクタ兼エンジニアの仕事@Creators MeetUp #36
Erina Takei
 
最近知ったBootstrapの注意点
最近知ったBootstrapの注意点
Kawaji Masaki
 
Bootstrapを使ってみよう
Bootstrapを使ってみよう
Kawaji Masaki
 
[Service worker] プッシュ通知の使い方
[Service worker] プッシュ通知の使い方
Van Trung Phan
 
PWA A Go-Go !! @ABC2018A 20181013
PWA A Go-Go !! @ABC2018A 20181013
Ryu Shindo
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
Toshihiro Kawachi
 
Webデザイナーが身に付けておきたい定番スキル ー WordPress 初級・導入編 ー
Webデザイナーが身に付けておきたい定番スキル ー WordPress 初級・導入編 ー
Kite Koga
 
とある情報の超整理術
とある情報の超整理術
Masahito Zembutsu
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
Seiji Noro
 
Gitライフをはじめましょう〜GUIツールで簡単運用 Mac編〜
Gitライフをはじめましょう〜GUIツールで簡単運用 Mac編〜
Erina Takei
 
JS非同期処理のいま
JS非同期処理のいま
Masakazu Muraoka
 
Mozapps installがなくなったことへの不平不満
Mozapps installがなくなったことへの不平不満
Masakazu Muraoka
 
Sapporo OSC 2015
Sapporo OSC 2015
kmaeda
 
レスポンシブおっぱいでまなぶスケーラブルグラフィックス
レスポンシブおっぱいでまなぶスケーラブルグラフィックス
minoru nakanou
 
ぱんちら.js -JavaScriptでテクスチャマッピング- HTML5飯発表資料
ぱんちら.js -JavaScriptでテクスチャマッピング- HTML5飯発表資料
minoru nakanou
 
Web Speech API でおっさんの声を美少女化してみた
Web Speech API でおっさんの声を美少女化してみた
minoru nakanou
 
効果的なブログの書き方 ~仕事につながるブログ術、3つのポイント~
効果的なブログの書き方 ~仕事につながるブログ術、3つのポイント~
毅 佐藤
 
好感度をアップさせるための表情トレーニング【男性編】 先生:内田 佳代
好感度をアップさせるための表情トレーニング【男性編】 先生:内田 佳代
schoowebcampus
 
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
オープンソースプロジェクトのはじめかた@Creators MeetUp #25
Erina Takei
 
ディレクタ兼エンジニアの仕事@Creators MeetUp #36
ディレクタ兼エンジニアの仕事@Creators MeetUp #36
Erina Takei
 
最近知ったBootstrapの注意点
最近知ったBootstrapの注意点
Kawaji Masaki
 
Bootstrapを使ってみよう
Bootstrapを使ってみよう
Kawaji Masaki
 
[Service worker] プッシュ通知の使い方
[Service worker] プッシュ通知の使い方
Van Trung Phan
 
PWA A Go-Go !! @ABC2018A 20181013
PWA A Go-Go !! @ABC2018A 20181013
Ryu Shindo
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
Toshihiro Kawachi
 
Webデザイナーが身に付けておきたい定番スキル ー WordPress 初級・導入編 ー
Webデザイナーが身に付けておきたい定番スキル ー WordPress 初級・導入編 ー
Kite Koga
 
とある情報の超整理術
とある情報の超整理術
Masahito Zembutsu
 
20140517 knockoutjs hands-on
20140517 knockoutjs hands-on
Seiji Noro
 
Gitライフをはじめましょう〜GUIツールで簡単運用 Mac編〜
Gitライフをはじめましょう〜GUIツールで簡単運用 Mac編〜
Erina Takei
 
JS非同期処理のいま
JS非同期処理のいま
Masakazu Muraoka
 
Mozapps installがなくなったことへの不平不満
Mozapps installがなくなったことへの不平不満
Masakazu Muraoka
 
Sapporo OSC 2015
Sapporo OSC 2015
kmaeda
 

Similar to Laravel vue-project-upload (20)

プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?
好洋 山崎
 
初めてのvue.js(2.x系)
初めてのvue.js(2.x系)
健人 井関
 
Vue入門
Vue入門
Takeo Noda
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
Kei Yagi
 
Vue.js入門
Vue.js入門
Takuya Sato
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Kei Yagi
 
はじめてのVue.js
はじめてのVue.js
Kei Yagi
 
Learn vue.js
Learn vue.js
yuxiang21
 
20200304 vuejs
20200304 vuejs
yamamotomsc
 
Vue.js で XSS
Vue.js で XSS
tobaru_yuta
 
Vue.js Outline
Vue.js Outline
Kei Yagi
 
Vuejs meetup
Vuejs meetup
Kamimura Taichi
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.js
小川 昌吾
 
Flux react現状確認会
Flux react現状確認会
VOYAGE GROUP
 
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
DeNA
 
Vue Router + Vuex
Vue Router + Vuex
Kei Yagi
 
Saitowotsukutsutemita
Saitowotsukutsutemita
hmatumoto
 
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
K Tsukada
 
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
Yusaku Kinoshita
 
プロダクトに 1 から Vue.js を導入した話
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?
好洋 山崎
 
初めてのvue.js(2.x系)
初めてのvue.js(2.x系)
健人 井関
 
Vue.js 基礎 + Vue CLI の使い方
Vue.js 基礎 + Vue CLI の使い方
Kei Yagi
 
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Vue.jsの関連ツール・ライブラリ(Vuex, Vue-Router, Nuxt)
Kei Yagi
 
はじめてのVue.js
はじめてのVue.js
Kei Yagi
 
Learn vue.js
Learn vue.js
yuxiang21
 
Vue.js Outline
Vue.js Outline
Kei Yagi
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.js
小川 昌吾
 
Flux react現状確認会
Flux react現状確認会
VOYAGE GROUP
 
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
アバター着せ替えアプリ開発におけるフロントエンド技術(Vue.js活用事例) #denatechcon
DeNA
 
Vue Router + Vuex
Vue Router + Vuex
Kei Yagi
 
Saitowotsukutsutemita
Saitowotsukutsutemita
hmatumoto
 
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
RESTful開発フロントエンド編(SPA・AltJS・フレームワーク)
K Tsukada
 
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
Yusaku Kinoshita
 
Ad

More from 小川 昌吾 (20)

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

Laravel vue-project-upload