加川 澄廣(かがわ すみひろ)
n Keywords
l LINE API Expert
l python , TypeScript, Nuxt.js,
AWS, GCP
l “LINE Pay API SDK for python“
Contributor
sumihiro3 sumihiro.kagawa
3
Slide 4
Slide 4 text
本⽇のテーマ
Slide 5
Slide 5 text
LINE Platform
Application
Serverless
Architecture
5
Webhook イベントの受け付けとリプライ
n Webhook イベント受け付けと、リプライは分けて実⾏
l Webhook リクエストへのレスポンスは即返す
l イベント処理はQueue を挟んで⾮同期での処理後に返す
Webhook
event
Response
Reply API
Webhook処理 ビジネスロジック
Reply API 実行
25
Slide 26
Slide 26 text
Webhook処理 ビジネスロジック
Reply API 実行
Webhook イベントの受け付けとリプライ
n Webhook イベント受け付けと、リプライは分けて実⾏
l Webhook リクエストへのレスポンスは即返す
l イベント処理はQueue を挟んで⾮同期での処理後に返す
Webhook
event
Response
Reply API
Webhook event の
振り分けのみ実施
実際のロジックは
⾮同期の後続で実施
Reply には時間的な
余裕あり(数⼗秒程度)
26
Slide 27
Slide 27 text
Webhook処理 ビジネスロジック
Reply API 実行
Webhook イベントの受け付けとリプライ
n 受け付けと処理・リプライを分ける⽬的
l ユーザーへのレスポンスを優先
l 責任分界点の明確化
Ø ビジネスロジックはLINE API への依存を薄くして他 Platform へも展開可とする
Ø 単体テストをしやすく
Webhook
event
Response
Reply API
LINE の「Webhookイベント
オブジェクト」への依存は
ここで留める
ビジネスロジックは
LINE API への依存を
薄くする
頻繁に利⽤する API
実⾏処理は分離・共通化
27
Slide 28
Slide 28 text
Messaging API
実⾏エラー時の
リトライ処理
28
Slide 29
Slide 29 text
Messaging API 実⾏エラー時のリトライ処理
nAPI 再実⾏時に “リトライキー” を設定していないと
https://developers.line.biz/ja/docs/messaging-api/retrying-api-request/
スクリーンショット 2020-11-10 13.44.02
"1* ϦΫΤετ͕
ೋॏͰ࣮ߦ͞ΕΔ߹
29
Slide 30
Slide 30 text
Messaging API 実⾏エラー時のリトライ処理
nAPI 実⾏エラーに備え “リトライキー” の設定が推奨
https://developers.line.biz/ja/docs/messaging-api/retrying-api-request/
スクリーンショット 2020-11-10 13.44.02
-*/&QGଆͰೋॏ࣮ߦΛ
੍ޚͯ͘͠ΕΔ
30
Slide 31
Slide 31 text
Messaging API 実⾏エラー時のリトライ処理
nとはいえ、リトライ判別処理を各所に実装︖
スクリーンショット 2020-11-10 13.44.02
https://developers.line.biz/ja/docs/messaging-api/retrying-api-request/ 31
Slide 32
Slide 32 text
Messaging API 実⾏エラー時のリトライ処理
n ビジネスロジックからAPI 実⾏処理を分離
l 責任分界点の明確化
Ø ビジネスロジックに LINE API 独⾃の仕様を
混⼊しない
"1* ࣮ߦ
3FUSZLFZ
3FUSZLFZ
3FUSZLFZ
3FUSZLFZ
ビジネスロジックから
API 実⾏処理を分離する
ビジネスロジック
LINE API 実行
32
Slide 33
Slide 33 text
Messaging API 実⾏エラー時のリトライ処理
n ビジネスロジックからAPI 実⾏処理を分離
l API 実⾏側でもインフラに任せられる部分(リトライ)は任せる
Ø インフラ側で担保されているのであれば、
むやみに⾃前で実装しない
"1* ࣮ߦ
API 実⾏エラーが発⽣しても
Queue のリトライ機能で安全に
再実⾏できる
Push API などの実⾏処理を共通化し、
リクエスト拒否(Conflict) 時は
再実⾏しないようにしておく
3FUSZLFZ
3FUSZLFZ
3FUSZLFZ
3FUSZLFZ ビジネスロジック
LINE API 実行
33
Slide 34
Slide 34 text
ユーザー⾏動履歴の記録・分析
34
Slide 35
Slide 35 text
ユーザー⾏動履歴の記録・分析
n ユーザーへの即応を優先
l ⾏動履歴の記録や分析など、即応が求められないものは極⼒⾮同期で処理する
Ø その他
- エラー通知、課⾦に必要なサービス利⽤履歴の記録など
ユーザーへのレスポンスは
最優先で返す
形式が求められない場合は
既存の可視化ツールを活⽤
(kintone, QuickSight など)
データ分析⽤の処理はDB トリガーや
定期実⾏などで後から処理する
35
LPF REVUP 2020 Landing Page
n システム構成
l Headless CMS
Ø microCMS
l SSG
Ø Nuxt.js (Full static generation)
l CDN
Ø Netlify Hosting
l BFF
Ø Netlify functions
l CD
Ø Netlify
47
LINE Pay Drink Bar
nLIFF + LINE Pay API で構築
l 書籍「 LINE API 実践ガイド」に掲載した実装例
Ø ドリンクの注⽂・決済・くじ引き
- LIFF アプリ
• 商品⼀覧での選択
• ドリンク抽出画⾯でのプログレス表⽰
• くじびき抽選など
- サーバーサイド
• LINE Pay API、obniz Cloud と連携
52
Slide 53
Slide 53 text
Ұཡ ܾࡁ࣮ߦ ܾࡁྃ υϦϯΫநग़ நબ։࢝ நબྃ
画⾯遷移
53
Slide 54
Slide 54 text
LINE Pay Drink Bar
n システム構成
l フロント
Ø SSR(Nuxt.js) + Google App Engine
l サーバーサイド
Ø Nuxt.js + Firestore
l CD
Ø GitHubActions + firebase CLI
l ハードウェア
Ø obniz + エアーポンプ + シリコンチューブ
54
Slide 55
Slide 55 text
55
Slide 56
Slide 56 text
56
Slide 57
Slide 57 text
LINE Pay Drink Bar
(ソフトウェア)
LINE Pay Drink Bar
(ハードウェア)
obniz Board
ユーザー
LINE
LINE Front-end
Framework
(LIFF)
エアーポンプ
Google App
Engine
Cloud Firestore
NuxtJS
Vue.js
決済実⾏
注⽂・決済
ドリンク注⽂・決済
システム構成図
ドリンク抽出
57
Slide 58
Slide 58 text
まとめ
Slide 59
Slide 59 text
まとめ
nまずやってみる場合サーバーレスを最初の選択肢に
l 必ず適する訳ではないが、⽴上げ期には良い選択肢
nLINE Platform アプリとの親和性は⾼い
l API 実⾏箇所だけ使うのでも良いかも
n組み合わせは要件次第でいくつものパターン有り
59
Slide 60
Slide 60 text
宣伝
Slide 61
Slide 61 text
書籍「LINE API実践ガイド」発売中︕
nLINE API はコレを⾒れば分かる
l Expert 達が思い思いに綴った480P
Ø なんと 8.3円/ページとお買得︕
Ø 最終章(7.2)のHW 連携を担当
l 本イベントで
Twitter キャンペーン
実施中︕
https://book.mynavi.jp/ec/products/detail/id=117310
(税込: 3,993円)
61
Slide 62
Slide 62 text
SNS アカウントなど
@sumihiro3
Sumihiro.Kagawa
LINE API Expert
62