Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバーレス環境で スピーディーに構築するLINE Platform アプリ

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for sumihiro3 sumihiro3
November 14, 2020

サーバーレス環境で スピーディーに構築するLINE Platform アプリ

LPF REVUP 2020 大阪トラック登壇資料
https://revup.jp/

Avatar for sumihiro3

sumihiro3

November 14, 2020
Tweet

More Decks by sumihiro3

Other Decks in Programming

Transcript

  1. 加川 澄廣(かがわ すみひろ) 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
  2. LINE pf アプリ と サーバーレス との親和性 nLINE の特徴 Ø ユーザーが⽇常使うサービス

    Ø ユーザーとの距離が近すぎる(良い意味で) Ø ミニアプリ普及でもっと⽣活に密接なる 15
  3. LINE pf アプリ と サーバーレス との親和性 nそのため、LINE 上で動くサービスは更新頻度が⾼い Ø ユーザーを飽きさせない

    Ø 状況に応じて新しいことをどんどん取り込む - 利⽤状況の変化 - ニューノーマルなど世情の変化 Ø 実験的なサービスをやりやすい など 16
  4. LINE pf アプリ と サーバーレス との親和性 nLINE Platform 上で動かすアプリでの特徴 認証は

    LINE 側で実施 ステートレスを求められがち ⾮同期処理がしやすい API 構成 UI は LINE アプリに依存しがち 17
  5. LINE pf アプリ と サーバーレス との親和性 nLINE Platform 上で動かすアプリでの特徴 認証は

    LINE 側で実施 ステートレスを求められがち ⾮同期処理がしやすい API 構成 αʔόʔϨεͱͷ ਌࿨ੑ͕ߴ͍ UI は LINE アプリに依存しがち 18
  6. Webhook イベントの受け付けとリプライ n Webhook イベント受け付けと、リプライは分けて実⾏ l Webhook リクエストへのレスポンスは即返す l イベント処理はQueue

    を挟んで⾮同期での処理後に返す Webhook event Response Reply API Webhook処理 ビジネスロジック Reply API 実行 25
  7. Webhook処理 ビジネスロジック Reply API 実行 Webhook イベントの受け付けとリプライ n Webhook イベント受け付けと、リプライは分けて実⾏

    l Webhook リクエストへのレスポンスは即返す l イベント処理はQueue を挟んで⾮同期での処理後に返す Webhook event Response Reply API Webhook event の 振り分けのみ実施 実際のロジックは ⾮同期の後続で実施 Reply には時間的な 余裕あり(数⼗秒程度) 26
  8. Webhook処理 ビジネスロジック Reply API 実行 Webhook イベントの受け付けとリプライ n 受け付けと処理・リプライを分ける⽬的 l

    ユーザーへのレスポンスを優先 l 責任分界点の明確化 Ø ビジネスロジックはLINE API への依存を薄くして他 Platform へも展開可とする Ø 単体テストをしやすく Webhook event Response Reply API LINE の「Webhookイベント オブジェクト」への依存は ここで留める ビジネスロジックは LINE API への依存を 薄くする 頻繁に利⽤する API 実⾏処理は分離・共通化 27
  9. Messaging API 実⾏エラー時のリトライ処理 n ビジネスロジックからAPI 実⾏処理を分離 l 責任分界点の明確化 Ø ビジネスロジックに

    LINE API 独⾃の仕様を 混⼊しない "1* ࣮ߦ 3FUSZLFZ 3FUSZLFZ 3FUSZLFZ 3FUSZLFZ ビジネスロジックから API 実⾏処理を分離する ビジネスロジック LINE API 実行 32
  10. Messaging API 実⾏エラー時のリトライ処理 n ビジネスロジックからAPI 実⾏処理を分離 l API 実⾏側でもインフラに任せられる部分(リトライ)は任せる Ø

    インフラ側で担保されているのであれば、 むやみに⾃前で実装しない "1* ࣮ߦ API 実⾏エラーが発⽣しても Queue のリトライ機能で安全に 再実⾏できる Push API などの実⾏処理を共通化し、 リクエスト拒否(Conflict) 時は 再実⾏しないようにしておく 3FUSZLFZ 3FUSZLFZ 3FUSZLFZ 3FUSZLFZ ビジネスロジック LINE API 実行 33
  11. ユーザー⾏動履歴の記録・分析 n ユーザーへの即応を優先 l ⾏動履歴の記録や分析など、即応が求められないものは極⼒⾮同期で処理する Ø その他 - エラー通知、課⾦に必要なサービス利⽤履歴の記録など ユーザーへのレスポンスは

    最優先で返す 形式が求められない場合は 既存の可視化ツールを活⽤ (kintone, QuickSight など) データ分析⽤の処理はDB トリガーや 定期実⾏などで後から処理する 35
  12. LIFF アプリ on SPA nLINE アプリ(Native app)上のアプリだからこそ ページ切り替えを素早く⾏う l ユーザーからすれば

    Native app/Web app の違いなど気に しない Ø 逆に⾔うと Native app 相当のものが求められる 現状、SPA (Single Page App) を選択 37
  13. LIFF アプリ on SPA nSPA + クラウドストレージ + CDN l

    LIFF アプリやミニアプリには、従来のWeb アプリと⽐べ、 画⾯切り替え時間が短い SPA を選択 SPA 部分のアプリリソースをS3 に 配置し、CloudFront でCDN 配信する BFF (Backend For Frontend) となる API は API Gateway + Lambda で展開する 38
  14. SSG x LIFF で静的サイトを LIFF アプリ化 nLIFF を静的サイトに組み込んでユーザー⾏動を分析 l オウンドメディアやブログを

    LIFF アプリ化 Ø サイト上で実⾏される LIFF SDK (JS) でLINE ログインす ることでユーザー識別も可能 - LINE アプリ上で表⽰すれば、ログイン操作不要でユーザー識別可 - LIFF SDK は LINE アプリ内ブラウザ以外にも対応しているため、既存サイ トにも簡単に適⽤できる 40
  15. SSG x LIFF で静的サイトを LIFF アプリ化 n Headless CMS +

    SSG(Static Site Generator) + LIFF SDK l CMS でのコンテンツ更新時に、コンテンツを静的サイトとして⽣成 Ø アクセスの度にDB 等へアクセスしないので⾼速 - いわゆる JAMStack 構成 メディア担当者などが CMS で 記事を更新時にビルド(SSG)実⾏ SPA と同様にサイトリソースをS3 に 配置し、CloudFront でCDN 配信する LIFF SDK で LINE ログインや、 ShareTargetPicker などを利⽤できる 41
  16. LPF REVUP 2020 Landing Page n静的サイト + LIFF を JAMStack

    構成で構築 l LIFF + Headless CMS + SSG の例 Ø 登壇情報の配信 + 予約状況の表⽰ - セッション情報などのコンテンツは microCMS へ事務局担当者が投稿 • 投稿をトリガーにして、SSG がメディアサイトをビルド - CDN であるNetlify へ配信 - 予約状況は connpass API を実⾏してセッションページなどに表⽰ - ShareTargetPicker などの LIFF 機能を利⽤ 43
  17. 44

  18. 46

  19. 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
  20. LPF REVUP 2020 LP (https://revup.jp) Netlify Functions REVUP 事務局 microCMS

    Netlify NuxtJS Vue.js LIFF 開発者 GitHub connpass Speaker Deck 更新通知 コンテンツ取得 ビルド&デプロイ git push 更新通知 ソースコード取得 システム構成図 セッション、スピーカー などのイベント情報編集 参加者 サイト閲覧・申込み 48
  21. C向けオンライン予約システム nBot + LIFF でサービス提供 l 予約フォーム Ø 予約データを⼊⼒すると BFF

    経由で記録、予約担当者へ通知 l 診断フォーム Ø LIFF アプリ上でいくつかの質問に回答してデータ収集、BFF 経由でユーザー情報としてデータ登録 - データ記録と並⾏して、分析データをS3 へ保管し データ分析(Firehose + Athena + Lambda + QuickSight)へ 49
  22. C向けオンライン予約システム n システム構成 l フロント Ø SPA (Nuxt.js) + S3

    + CloudFront l BFF Ø API Gateway + Lambda + DynamoDB + SQS + SNS (Email + kintone) l データ分析 Ø Firehose + Athena + Lambda + QuickSight l CD Ø GitHubActions + Zappa 50
  23. システム構成図 ユーザー SPA (LIFF) 管理者 予約・診断 予約・診断 予約・診断 予約・診断 予約通知

    診断データ分析 診断データ確認 ユーザー 予約・診断 データ確認 予約・診断 51 BFF データ分析
  24. LINE Pay Drink Bar nLIFF + LINE Pay API で構築

    l 書籍「 LINE API 実践ガイド」に掲載した実装例 Ø ドリンクの注⽂・決済・くじ引き - LIFF アプリ • 商品⼀覧での選択 • ドリンク抽出画⾯でのプログレス表⽰ • くじびき抽選など - サーバーサイド • LINE Pay API、obniz Cloud と連携 52
  25. LINE Pay Drink Bar n システム構成 l フロント Ø SSR(Nuxt.js)

    + Google App Engine l サーバーサイド Ø Nuxt.js + Firestore l CD Ø GitHubActions + firebase CLI l ハードウェア Ø obniz + エアーポンプ + シリコンチューブ 54
  26. 55

  27. 56

  28. 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
  29. 書籍「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