Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Vue.js + socket.io で簡単に実装できるリアルタイム更新処理 / Coral ...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takamichi Aso
October 16, 2019
Programming
2.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vue.js + socket.io で簡単に実装できるリアルタイム更新処理 / Coral Developers Night #1
Takamichi Aso
October 16, 2019
More Decks by Takamichi Aso
See All by Takamichi Aso
開発環境から本番環境までのDocker活用方法 / Fintech Engineer 20210604
unk2072
0
200
WordPressが技術負債になった話 / Coral Developers 20210525
unk2072
3
3.7k
インフラエンジニア歴2ヶ月の私がCDKを使ってECS(Fargate)環境を構築する話 / Coral Developers Night AWS LT
unk2072
0
750
健康第一の話 / Coral Developers Meeting #1
unk2072
0
200
Other Decks in Programming
See All in Programming
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
400
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
200
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
180
Creating Composable Callables in Contemporary C++
rollbear
0
150
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
160
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
140
Oxlintのカスタムルールの現況
syumai
6
1.1k
net-httpのHTTP/2対応について
naruse
0
500
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
560
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
260
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
660
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Six Lessons from altMBA
skipperchong
29
4.3k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Bash Introduction
62gerente
615
220k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Building Adaptive Systems
keathley
44
3.1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Side Projects
sachag
455
43k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
230
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Crafting Experiences
bethany
1
180
Transcript
Credit Engine, Inc. 2019/10/16 Vue.js + socket.io で 簡単に実装できる リアルタイム更新処理
麻生隆道 1
Credit Engine, Inc. 2019/10/16 2 今日話す内容(言いたいこと) • 便利なライブラリを使って素早く開発しよう •
ムチャ振りされたらチャンスですよ! • 後々のためにしっかりと設計しよう
Credit Engine, Inc. 2019/10/16 3 自己紹介 クレジットエンジン株式会社 麻生 隆道(あそう たかみち)
たぶんフルスタックエンジニアやってます 趣味はプログラミングで、 最近はFlutter(iOS/Androidのアプリを同時に かけるやつ)にハマってます! 前職は12年ほど組み込みエンジニアやってま したー
Credit Engine, Inc. 2019/10/16 • 日々メモリ破壊と戦う人たち • ログ・メモリダンプとお友達
• デバッグに強い(たまにログ無しでデバッグとかも) モダンなライブラリとか使えない環境でツラい デバッグスキルだけが高くなっていったような気が・・・ 4 組み込みエンジニアってどんな人たち?(偏見含む)
Credit Engine, Inc. 2019/10/16 Credit Engine の紹介 5 “かす”をかえる。“かりる”をかえる。 ミッション
中小事業者が融資を受ける際には 様々な紙ベースの書類が必要であった オンラインで完結するので簡単に使え 空いた時間で本来の事業に集中できる
Credit Engine, Inc. 2019/10/16 Credit Engine Platformの紹介 6 ミッション実現のためLENDYで培ってきたノウハウを金融機関などに提供 三菱UFJ銀行
『Biz LENDING』 みずほ銀行 『みずほスマートビジネスローン』
Credit Engine, Inc. 2019/10/16 Credit Engine Platformをバージョンアップ 提供先に合わせて簡単にカスタマイズし 素早くサービスを提供できるように構成を見直した 7
Credit Engine, Inc. 2019/10/16 アプリケーション構成 8 サーバ エンド ユーザー画面 オペレーター
画面
Credit Engine, Inc. 2019/10/16 複数ユーザーで編集するんでロック機能がほしいよね! ロック機能なんでリアルタイム更新でよろしくー やったことないけどやっちゃいますかー! (マジか!ムチャ振りが来たよ!でもチャンスだしやるかー)
9 9 要求もいろいろとでてきますよね・・・
Credit Engine, Inc. 2019/10/16 ロック機構の話 オペレーターが編集しているときに、他のオペレーターに編集中の通知を出してさわれ ないようにする機能です!(あたりまえ?) 10 自分が編集中 他人が編集中
Credit Engine, Inc. 2019/10/16 どうやって実現するか? 最初は Django Channels で WebSocketやろうかと思ったけど
socket.ioの方が以下のようなことができて良さげでした! • WebSocket と LongPolling を自動で切り替えてくれるので WebSocketに制限のある環境でも使える • 再接続などもライブラリ側でやってくれるので簡単に使える 11
Credit Engine, Inc. 2019/10/16 ちなみにsocket.ioの表記はどれが正しいだろう? 12 ロゴ: トップページ表記: ドキュメント: これが一番多そう?
Credit Engine, Inc. 2019/10/16 まずやったこと 公式ページの Get Started を見て徐に git
pull してサンプルを動かしてみる 約1時間位でサンプル動作確認&ドキュメント内容を理解する 13
Credit Engine, Inc. 2019/10/16 あとは実装するだけ(こんな感じです) クライアント側(16行) 14 var app =
require('express')() var http = require('http').Server(app) var io = require('socket.io')(http, { path: '/pathto/socket.io' }) var axios = require('axios') const SERVER_PORT = process.env.SERVER_PORT io.on('connection', socket => { socket.on('event', msg => { console.log('event: ' + msg) io.emit('event', msg) }) }) http.listen(SERVER_PORT, () => { console.log('Socket.IO on *:' + SERVER_PORT) }) import io from 'socket.io-client' var socket = io({ path: '/pathto/socket.io', query: { token: token } }) socket.on('event', message => { let event = JSON.parse(message) switch (event.name) { case 'lock': // ロック時の処理 break case 'unlock': // ロック開放時の処理 break } }) function sendEvent (payload) { socket.emit('event', JSON.stringify(payload)) } サーバ側(14行) ※socket.io部分以外は省略しました
Credit Engine, Inc. 2019/10/16 APIサーバと分かれてしまうので認証がない・・・ 認証用のミドルウェアをサーバ側に追加 15 const AUTH_URL =
process.env.AUTH_URL io.use((socket, next) => { let token = socket.handshake.query.token; console.log('token: ' + token) axios.post(AUTH_URL, { token: token }, { withCredentials: true }).then(() => { console.log('Authentication success') next() }).catch(() => { console.log('Authentication error') next(new Error('Authentication error')) }) }) API サーバ オペレーター画 面 socket.io
Credit Engine, Inc. 2019/10/16 エンドポイントの場所を変えたいなー サンプルだとポートは指定できるが、エンドポ イントがルートに置かれてしまう ドキュメントを読んだら、path
指定ができそう だったので、やってみたらできた(先程のコード には反映済み) https://socket.io/docs/server-api/ 16
Credit Engine, Inc. 2019/10/16 socket.ioが死んでも大丈夫 17 API サーバ オペレーター画 面
socket.io socket.io のサーバは通知の機能だけに専念 API サーバ オペレーター画 面 socket.io 止まってもロック機能自体は問題なく動く
Credit Engine, Inc. 2019/10/16 アトミックデザインなのでUIの実装も簡単でした ロック表示の部分がテンプレートになっていて実装して元のデザインに追加するだけ リスト表示の作業者アバターも実装しています 18
Credit Engine, Inc. 2019/10/16 リアルタイム更新よりもムズいロック解除 実は実装した後に地獄が待っていた! 19 ロック解除のパターン • 更新ボタン
• キャンセルボタン • ページ遷移 • ログアウト • ウィンドウクローズ
Credit Engine, Inc. 2019/10/16 これから実装する機能 チャット機能 → マジでがんばる! 各種通知 → 仕組みはできたので、仕様が決まれば簡単 Multi-AZ対応 → socket.io-redisを使えば良いらしい
20
Credit Engine, Inc. 2019/10/16 21 今日話した内容(言いたかったこと) • 便利なライブラリを使って素早く開発しよう •
ムチャ振りされたらチャンスですよ! • 後々のためにしっかりと設計しよう
Credit Engine, Inc. 2019/10/16 フロントエンドエンジニア募集中です 私達と一緒にオンラインレンディングのスタンダードとなるような仕 組みを作ってくれる、フロントエンドエンジニアを募集しています! 22
Credit Engine, Inc. 2019/10/16 Vue.jsもくもく会やります フロントエンドエンジニア同士が、ゆるく繋がれる場を用意したいなー と思いまして、Vue.jsもくもく会をやってみることになりました! 経験がないので至らない部分も ありますがぜひご参加くださいー 23
https://cucchaberiengine.connpass.com/event/151502/
Credit Engine, Inc. 2019/10/16 appendix : Flutterやろうぜ! FlutterはGoogleが作ったモバイルアプリケーションフレームワーク で、iOS/Androidのアプリを同時に作れます! 最近はWebアプリも作れるらしい。
言語はDart、ライブラリは基本的に公式のものが多い。 24
Credit Engine, Inc. 2019/10/16 ここが良いよね!Flutter • ホットリロードが便利でめちゃ早い • ネイティブにコンパイルした後の動作が早い(らしい) •
UIもDartで書くのでプログラマ的には書きやすい Dart言語はスクリプト言語としても動くのでホットリロードもできる が、コンパイル言語の側面もあるのでネイティブにすると早いらしい 25
Credit Engine, Inc. 2019/10/16 こんなの作ってます 先程紹介したCredit Engine Platformのアプリ版をひっそりと作っ ています 26