SlideShare a Scribd company logo
Laravel Echo + Vue.js + axiosで
簡単チャットアプリ開発
・福岡生まれの福岡育ち
・IT企業で企画・ディレクター
・嫁と一緒に同時多発的に退社
・ハウススタジオ運営(今も)
・グロースハッカーとして活動
・プログラミングを学んで個人サービス開発
・スキル:PHP/JS/Laravel/Vue.js/ReactNative
・学習:DDD/TDD/OS/C言語...etc
・興味:アプリ開発/洋楽(エドさん、メンさん、プッさん)
香月 宜浩(かつき よりひろ)
Twitter:ピーターパン@エンジニア(@hukuzatsu)
好きなアイドルで繋がろう
アイドルファン限定友達作りサービス
背景
ファン友同士のチャット機能を作りたかった
フロント:Vue.js
サーバー:Laravel
背景
チャットと言えばnode.js
チャットと言えばsocket.io
↓
サーバーを1から作るの大変そう。。
↓
Laravelでなんとか出来ないか
背景
そうだ!
Laravel Echoだ
Laravel + Vue.jsを使ったチャットアプリの開発を通
して、
・LaravelとVue.jsの連携
・Laravel Echo、axiosの使い方
・Vue.jsでのデータの扱い
・通知や既読処理の簡単な実装
等お話出来ればと思います。
今日のお話
リアルタイムのメッセージのやり取り
既読判定
メッセージの永続化
未読時の通知
実装したチャットの機能
Vue.js チャットUI / メッセージの即時反映
axios 非同期処理(サーバーとのメッセージのやり取り)
Laravel メッセージの永続化、読み込みのAPIを提供
Laravel Echo + Pusher WebSocketを介したリアルタイム通信
前提
Laravel Echoとは
Laravelで簡単にリアルタイムのチャンネル購読やイベントのリッ
スンが出来るJavascriptのライブラリ
・Laravelでトリガされたイベントをリッスン
・認証が必要なプライベートチャンネルやプレゼンスチャンネルの
 作成・購読も可能
・チャンネル購読中のユーザー情報の取得
 →Vue.jsと組み合わせて既読判定が便利
・ドライバとしてPusherかsocket.ioが使える
Laravel Echoとは
Pusherとは
ブラウザ、モバイル、Iot等のクライアントを
即座にアップデートするPub/Subメッセージ
ングプラットフォーム
・チャンネル購読中ユーザーの管理
・ユーザー認証
etc..
axiosとは
・非同期処理のHTTPクライアント(Promiseベース)
・非同期処理が簡単に書ける
axiosとは
・Make XMLHttpRequests from the browser
・Make http requests from node.js
・Supports the Promise API
・Intercept request and response
・Transform request and response data
・Cancel requests
・Automatic transforms for JSON data
・Client side support for protecting against XSRF
https://cacoo.com/diagrams/2g0kee04u
xP5a5ab/simple#6CE46
処理の流れ
実装 - app.js
コンポーネント登録
実装 - app.js
Vueインスタンスの生成
(参考)Vueライフサイクル
(参考)dataオブジェクト
・dataオブジェクトの全てのプロパティは変更が検出され自動で
再描画される
↓
・messagesにmessageが追加することで、
 追加されたmessageの内容を即座にビューに反映出来る
実装 - メッセージの追加(フロント)
Vueインスタンス
template
methods
addMessage()
入力データをイベン
トを通してコンポー
ネントに渡す
ChatComposer
コンポーネント
イベントを受け取り次第
定義して置いたメソッドを
実行
data
messages[]
<input>
<button>
ChatLog
コンポーネント
dataオブジェクトに
データを追加
ChatMessage
ChatMessage
propsとして渡す
propsとして渡す
(参考)データの受け渡し
Vueインスタンス
template
methods
addMessage()
ChatComposer
コンポーネント
data
messages[]
<input>
<button>
ChatLog
コンポーネント
ChatMessage
ChatMessage
子から親はイベントで
vm.$emit
親から子はpropsで
v-on:messages=”messages”
実装 - メッセージの追加(フロント)
ChatComposer.vue
messageTextという名前で
入力データを取得
実装 - メッセージの追加(フロント)
messagesentという名前の
イベントを通してmessage
を渡す
ChatComposer.vue
実装 - メッセージの追加(フロント)
実装 - メッセージの追加(フロント)
dataオブジェクトに
messge追加
非同期でmessage
をDBに永続化
返り値はresponse.data
で取得できる
実装 - メッセージ追加(サーバー)
messageの永続化
イベント発行
実装 - イベント(MessagePosted)
リスナに渡すデー
タをプロパティに設
定
配信先チャンネル
を設定
実装 - 認可
PresenceChannel
の場合はtrueでは
なくuserを返す
実装 - メッセージの受け取り(準備)
・Laravel Echoを使うため予めbootstrap.js等でEchoインスタン
スを生成しておく
実装 - メッセージの受け取り
インスタンス生成時に
登録したいので
created()の中に記述
MessagePostedという
名前のイベントをリッス
ン
‘chatroom.’ +roomIdという
チャンネル名
実装 - メッセージの受け取り
チャンネルに指定するroomId取得
実装 - ユーザーの参加・離脱
参加中ユーザーを把握出来る
↓
既読判定に使う
ユーザーが参加した時
点でdataオブジェクト
のusersInRoomに
userを追加
ユーザーが離脱した時
点でdataオブジェクト
のusersInRoomから
userを削除
実装 - 既読判定
メッセージ送信後usersInRoomの要素数を見て
既読・未読を判定
実装 - 既読が無い場合の通知
Notification
Notificationとは
メール送信、SMS、Slack等複数チャネルへの通知
を簡単に実装出来るLaravelの機能
実装 - 既読が無い場合の通知
Mailableクラスの継承
チャネルを指定
実装 - 既読が無い場合の通知
非同期でNotificationを
使って通知
・Vueライフサイクルを理解すると適切なタイミングで処理を行える
・dataオブジェクトはリアクティブ
・親 -> 子:v-bind + props、子 -> 親:vm.$emit
・Laravel Echo + pusherにリアルタイムの実装はお任せできる
・Vue.js + axiosで非同期処理が簡単に行える
・通知処理はNotificationクラスを使い簡単に色んなチャネルを選べる
まとめ
今後やりたいこと
WebPushを使いたい
Push.js
Push.js
絶賛 転職活動中
最後に

More Related Content

What's hot

FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
dena_study
 
ゲームと報酬
ゲームと報酬ゲームと報酬
ゲームと報酬
itkr
 
MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~
MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~
MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~
Chica Matsueda
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Masahito Zembutsu
 
強力なグラフィック機能を備えた組版処理システムTwightの開発
強力なグラフィック機能を備えた組版処理システムTwightの開発強力なグラフィック機能を備えた組版処理システムTwightの開発
強力なグラフィック機能を備えた組版処理システムTwightの開発
WadaYuto
 
実践イカパケット解析α
実践イカパケット解析α実践イカパケット解析α
実践イカパケット解析α
Yuki Mizuno
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
Rui Watanabe
 
Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点
誠一郎 栗原
 
Hack言語に賭けたチームの話
Hack言語に賭けたチームの話Hack言語に賭けたチームの話
Hack言語に賭けたチームの話
Yuji Otani
 
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
Unity Technologies Japan K.K.
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
エピック・ゲームズ・ジャパン Epic Games Japan
 
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
Life Robotics
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
gree_tech
 
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
Takashi Takizawa
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
 
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
mariydi1
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
Yuki Mizuno
 
トリコの動かし方
トリコの動かし方トリコの動かし方
トリコの動かし方
株式会社ジェンデザイン
 

What's hot (20)

FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術FINAL FANTASY Record Keeperのマスターデータを支える技術
FINAL FANTASY Record Keeperのマスターデータを支える技術
 
ゲームと報酬
ゲームと報酬ゲームと報酬
ゲームと報酬
 
MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~
MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~
MediaPipeを使ったARアプリ開発事例 ~カメラをかざして家䛾中で売れるも䛾を探そう~
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
強力なグラフィック機能を備えた組版処理システムTwightの開発
強力なグラフィック機能を備えた組版処理システムTwightの開発強力なグラフィック機能を備えた組版処理システムTwightの開発
強力なグラフィック機能を備えた組版処理システムTwightの開発
 
実践イカパケット解析α
実践イカパケット解析α実践イカパケット解析α
実践イカパケット解析α
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点Laravel Blade×vue.js 混在させる場合の注意点
Laravel Blade×vue.js 混在させる場合の注意点
 
Hack言語に賭けたチームの話
Hack言語に賭けたチームの話Hack言語に賭けたチームの話
Hack言語に賭けたチームの話
 
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
【Unity道場スペシャル 2018仙台】物理シミュレーション完全マスター
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
協働ロボットCOROの開発における形式的仕様記述KMLの開発と適用
 
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
Cocos2d-x 3.0を使ったゲーム “消滅都市” の開発事例
 
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
初心者がRSA暗号を教わったら自力でCTFの問題が解けるようになった話
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
実践イカパケット解析
実践イカパケット解析実践イカパケット解析
実践イカパケット解析
 
トリコの動かし方
トリコの動かし方トリコの動かし方
トリコの動かし方
 

Similar to Laravel echo + vue.js + axiosで簡単チャットアプリ開発

ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁 ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
宜浩 香月
 
YYPHP #13 初めてのコードレビュー
YYPHP #13 初めてのコードレビューYYPHP #13 初めてのコードレビュー
YYPHP #13 初めてのコードレビュー
宜浩 香月
 
Flex入門
Flex入門Flex入門
Flex入門
Shinjiro Watanabe
 
Try to operate cloud firestore with flutter
Try to operate cloud firestore with flutterTry to operate cloud firestore with flutter
Try to operate cloud firestore with flutter
Iwamoto Nana
 
Docker meetup tokyo_public_r001
Docker meetup tokyo_public_r001Docker meetup tokyo_public_r001
Docker meetup tokyo_public_r001
cyberblack28 Ichikawa
 
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現
Kei Yagi
 
``完璧に理解した``WEB の裏側の仕組み.pptx
``完璧に理解した``WEB の裏側の仕組み.pptx``完璧に理解した``WEB の裏側の仕組み.pptx
``完璧に理解した``WEB の裏側の仕組み.pptx
Ryo Higashigawa
 
スマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTCスマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTC
Natsuki Yamanaka
 
JavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについてJavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについて
Seigo Tanaka
 
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙Chrome拡張で改善 表紙
Chrome拡張で改善 表紙
Wataru Terada
 
複数言語に触れてIoTの表現の幅を広げよう
複数言語に触れてIoTの表現の幅を広げよう複数言語に触れてIoTの表現の幅を広げよう
複数言語に触れてIoTの表現の幅を広げよう
Core Concept Technologies
 
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
hmimura_embarcadero
 
Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門
Shinobu Kawano
 
html5funosgeo
html5funosgeohtml5funosgeo
html5funosgeo
yasutomog
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
Yoshito Tabuchi
 
PaaSで簡単Railsアプリを公開しよう!
PaaSで簡単Railsアプリを公開しよう!PaaSで簡単Railsアプリを公開しよう!
PaaSで簡単Railsアプリを公開しよう!
Yoshitake Takata
 
endeworksでのWebAppの作り方
endeworksでのWebAppの作り方endeworksでのWebAppの作り方
endeworksでのWebAppの作り方33rpm
 
自作flutterアプリをリファクタリングしてみた!
自作flutterアプリをリファクタリングしてみた!自作flutterアプリをリファクタリングしてみた!
自作flutterアプリをリファクタリングしてみた!
とさ はるき
 
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Terui Masashi
 
Startup on Heroku Demo Day - Dozens
Startup on Heroku Demo Day - DozensStartup on Heroku Demo Day - Dozens
Startup on Heroku Demo Day - Dozens
Akira Matsuda
 

Similar to Laravel echo + vue.js + axiosで簡単チャットアプリ開発 (20)

ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁 ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
ほぼ初心者からのマッチングサービス開発のリアル Feat. 嫁
 
YYPHP #13 初めてのコードレビュー
YYPHP #13 初めてのコードレビューYYPHP #13 初めてのコードレビュー
YYPHP #13 初めてのコードレビュー
 
Flex入門
Flex入門Flex入門
Flex入門
 
Try to operate cloud firestore with flutter
Try to operate cloud firestore with flutterTry to operate cloud firestore with flutter
Try to operate cloud firestore with flutter
 
Docker meetup tokyo_public_r001
Docker meetup tokyo_public_r001Docker meetup tokyo_public_r001
Docker meetup tokyo_public_r001
 
three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現three.jsによる一歩進めたグラフィカルな表現
three.jsによる一歩進めたグラフィカルな表現
 
``完璧に理解した``WEB の裏側の仕組み.pptx
``完璧に理解した``WEB の裏側の仕組み.pptx``完璧に理解した``WEB の裏側の仕組み.pptx
``完璧に理解した``WEB の裏側の仕組み.pptx
 
スマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTCスマホ(Android・iPhone)でWebRTC
スマホ(Android・iPhone)でWebRTC
 
JavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについてJavaScript使いならきっととっつきやすいNode-REDについて
JavaScript使いならきっととっつきやすいNode-REDについて
 
Chrome拡張で改善 表紙
Chrome拡張で改善 表紙Chrome拡張で改善 表紙
Chrome拡張で改善 表紙
 
複数言語に触れてIoTの表現の幅を広げよう
複数言語に触れてIoTの表現の幅を広げよう複数言語に触れてIoTの表現の幅を広げよう
複数言語に触れてIoTの表現の幅を広げよう
 
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
デブサミ2013 【15-B-2】iOS/Android向け開発をビジュアルに!
 
Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門Delphi開発者のためのSencha入門
Delphi開発者のためのSencha入門
 
html5funosgeo
html5funosgeohtml5funosgeo
html5funosgeo
 
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
C#でのクロスプラットフォーム モバイル開発環境 Xamarin のご紹介
 
PaaSで簡単Railsアプリを公開しよう!
PaaSで簡単Railsアプリを公開しよう!PaaSで簡単Railsアプリを公開しよう!
PaaSで簡単Railsアプリを公開しよう!
 
endeworksでのWebAppの作り方
endeworksでのWebAppの作り方endeworksでのWebAppの作り方
endeworksでのWebAppの作り方
 
自作flutterアプリをリファクタリングしてみた!
自作flutterアプリをリファクタリングしてみた!自作flutterアプリをリファクタリングしてみた!
自作flutterアプリをリファクタリングしてみた!
 
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
Infra as Code Sapppro Casual 札幌の開催趣旨とTest-Kitchenの話
 
Startup on Heroku Demo Day - Dozens
Startup on Heroku Demo Day - DozensStartup on Heroku Demo Day - Dozens
Startup on Heroku Demo Day - Dozens
 

Laravel echo + vue.js + axiosで簡単チャットアプリ開発