Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

アジェンダ - ⾃⼰紹介 - Eightの簡単な紹介 - Meetsでのイベント運営への取り組み - 運⽤パート:急激な時代の変化に合わせて⾏った柔軟なチーム体制 - 技術パート:インタラクティブなコンテンツの仕組みとその実装について

Slide 3

Slide 3 text

2 ⿑藤 実 (Minoru Saito) Sansan株式会社 Eight事業部@名古屋⽀店 WEBエンジニア Sier・ベンチャー企業を経て、2020年にSansan株式会社へ⼊社、 名古屋⽀店に配属。 Eight事業部で主にビジネスイベント「Meets」や、Eightの広告事 業に関する開発・運⽤に携わる。 最近では、参加型オンラインイベント 「Meets Online Live」の⽴ ち上げに関わり、技術調査、インフラ構築からフロントエンド開発 までを担当。 新しいサービスを考えることが⼤好き。

Slide 4

Slide 4 text

Eight 3

Slide 5

Slide 5 text

名刺でつながる、ビジネスのためのSNS

Slide 6

Slide 6 text

オンラインでも専⽤のバーチャル背景で繋がりを

Slide 7

Slide 7 text

イベント事業への展開 Meets Eight ONAIR Climbers

Slide 8

Slide 8 text

Meetsにおけるイベント運営の取り組み

Slide 9

Slide 9 text

運⽤パート:急激な時代の変化に合わせて⾏った柔軟なチーム体制

Slide 10

Slide 10 text

Meetsは元々オフラインによるビジネスマッチングイベントとして運営

Slide 11

Slide 11 text

急速なオンラインシフト

Slide 12

Slide 12 text

11 めまぐるしく開発が進む中での課題感 💦 開発途中で仕様が変わったり、中⽌になることもしばしば。 💦 💦 PMとの仕様の合意 他チームとの連携 技術的課題の改善 プロジェクトの スケジューリング プロジェクト単位での 振り返りの実施 FWのバージョンアップの スケジューリング チームのプロセスの改善

Slide 13

Slide 13 text

12 プロジェクトの進捗、技術的改善、チームビルディングに 同じレベルで全員がアテンション張るのは厳しい。 さらに今はフルリモートという状況で共有もしにくい。 どうしたものか。。。

Slide 14

Slide 14 text

13 スイッチスリーリード制 の導⼊

Slide 15

Slide 15 text

- プロダクトリード、アーキテクトリード、チームリードの役割を各メンバー にアサイン。⼀ヶ⽉ごとにその役割を交代する。 - プロダクトリード: 健全なスプリント計画をリードする - アーキテクトリード: 健全な開発をリードする - チームリード: チームビルディング をリードする スイッチスリーリード制 14 アーキテクト リード プロダクト リード チーム リード 1ヶ⽉で役割交代

Slide 16

Slide 16 text

15 結果どうなった?

Slide 17

Slide 17 text

16 アテンションを張るべきポイントが絞られることで、 集中して改善に動けるようになった! FWのバージョンアップは アーキテクトリードが管理 PMとのやりとりのIFは 常にプロダクトリード プロジェクト終了時の振り返りは チームリードがセッティング

Slide 18

Slide 18 text

17 リードをローテーションすることで多視点からの改善が進んだ! Aさんはこういうアプローチを取り⼊れてい たけど⾃分はこうしてみよう プロダクトリードをやっていたときはこのあたりに課題があったか らアーキテクトリードではこういうサポートする動きをしてみよう プロダクトリードは負荷が⾼いので 他リードでフォローしてもらおう

Slide 19

Slide 19 text

18 それぞれが各リードを経験することで相互理解が深まり、 認識齟齬が減った! この課題はいつまでに何をゴールに してやればいいんだな この機能の実装は このやり⽅で作ればいいんだな この技術的負債はこんな影響が あるから、優先しなくてはいけないんだな

Slide 20

Slide 20 text

19 • やる事が絞られるため動きやすい • 役割を交代することで相互理解が高まり、フォローがしやすくなる • 違う視点からも改善を図ることができる • 役割を与えられることで、リモートでのモチベーションの維持につながる まとめ

Slide 21

Slide 21 text

20 技術パート:インタラクティブなコンテンツの仕組みとその実装について

Slide 22

Slide 22 text

MISSION: Meets Online Liveを実装せよ!

Slide 23

Slide 23 text

セールスピッチ配信 デモ選択画⾯ デモ配信 アンケート表⽰ A B C D デモ1 デモ1 デモ2 デモ4 デモ1を選択 デモ1を選択 デモ2を選択 デモ4を選択 運営 運営 オンラインイベントの流れ 運営

Slide 24

Slide 24 text

リアクション機能 拍⼿をクリック 他のユーザの画⾯に 即時に表⽰される

Slide 25

Slide 25 text

技術選定 特にインタラクティブなインターフェース部分の実装⽅法 - ポーリング or WebSocket - 工数削減のためインフラの作業はなるべく減らしたい - インタラクティブな機能で必要となる情報は、ユーザIDとリアクション情 報のみ

Slide 26

Slide 26 text

API Gateway(WebSocket版)を使おう

Slide 27

Slide 27 text

構成 追加

Slide 28

Slide 28 text

WebSocket接続確⽴までの流れ

Slide 29

Slide 29 text

リアクション時の流れ

Slide 30

Slide 30 text

運営サイドからユーザ宛への通知の流れ

Slide 31

Slide 31 text

いざ本番

Slide 32

Slide 32 text

実績 - 同時最⼤接続数:180 - リアクション数:1,000/H - Push通知に要した最⼤の時間:7s - 負荷テストでの計測値どおり - 料⾦: - API Gateway ≒ $0.1〜0.2, Lambda ≒ $0.01, DynamoDB ≒ $0.02 - ∴1開催あたり、50円もかかっていない - ⼩規模なら、API Gatewayを使った実装で問題ない

Slide 33

Slide 33 text

今後の課題 - 接続をより確実に - 配信に時間がかかっているため、並列化等をして⾼速化できないか - より⼤⼈数での配信を可能にする - APIを複数⽤意して、ALBでのバランシング

Slide 34

Slide 34 text

TIPS - SAMのWebSocket対応はまだ未定 - https://github.com/aws/aws-sam-cli/issues/896 - API Gateway WebSocket クォータは事前に確認しておく - Lambda Authorizer関連 - 呼び出しは接続時のみなので返すポリシーに注意 - contextオプション便利 - コンソールでの接続確認はwscat, awscurlが便利

Slide 35

Slide 35 text

負荷テスト - 使⽤ツール > artillery( https://artillery.io/ ) > 簡単な設定を書くイメージでテストが書ける

Slide 36

Slide 36 text

AWSの技術サポートを最⼤限活⽤しよう - サービス規模等を伝えることで懸念点をフィードバックしてもらえる - 実装⽅法や参考事例を紹介してもらえることも - 以前もGlueで⼤変お世話になりました

Slide 37

Slide 37 text

参考⽂献 - https://aws.amazon.com/jp/serverless/sam/ - https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/limits.htm l#apigateway-execution-service-websocket-limits-table - https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api- gateway-lambda-authorizer-output.html - https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigatew ay-how-to-call-websocket-api-wscat.html - https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigatew ay-how-to-call-websocket-api-connections.html - https://artillery.io/

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

No content