ビデオ会議に悩まされ続けた編集部が、AWSで「バーチャル司会者」を作った話

  • Sponsored By アマゾン ウェブ サービス ジャパン株式会社
  • author 小暮ひさのり
ビデオ会議に悩まされ続けた編集部が、AWSで「バーチャル司会者」を作った話
Image: ギズモード・ジャパン, shutterstock

オンラインならではの利点、体験できました。

2020年は、テレワーク元年となりましたね。ギズモード編集部もいち早くテレワークを採用し、すでに半年以上が経過しています。でも、いまだに慣れないのが「ビデオ会議」

音声を繋いでも最初の挨拶を誰もせずにただ流れていく時間。発言をしても相槌もなく、世界に1人だけ取り残されたような虚無感。そしてだらだらと長引く会議は誠に遺憾…。

この散々たる状況に頭を抱えているのが、編集部のアミトー(綱藤)。まるで盛り上がらない会議に出ながら、彼は考えました。

2018110gizmodo_aws_B0A9331

そうだ、「バーチャル司会者」だ!


ビデオ会議の司会進行役にバーチャルな司会者をたてれば、ビデオ会議もスムーズにいくはず! タイムキーパーも任せられるし、相槌を打ってもらえば、もっと会議がはかどるかもしれない。バーチャル司会者を作って、ダラダラした会議からおさらばだ!

そうときまれば、「全自動幹事ボタン」を作った時にお世話になった「AWS Loft Tokyo」に相談してみよう。AmazonのクラウドコンピューティングサービスのAWSを使った開発相談ができる「AWS Loft Tokyo」なら、きっと「ぼくのかんがえた バーチャル司会者」を実現できるに違いない!

エンジニアの聖地AWS Loft Tokyoがオンライン相談に対応!

こうして「AWS Loft Tokyo」へ行こうとしたのですが、目黒にあるコワーキング&相談スペースの「AWS Loft Tokyo」は休館中(2021年1月15日までを予定)でした。行けない!

しかし、現在はオンライン相談の「Online Ask an Expert」がスタートしていて、自宅から相談できるとのこと。よし、リモートの悩みはリモートで解決。AWS Loft Tokyoへ登録してオンライン相談を予約してみましょう。

201008AWS08
Image: AWS

まずは、AWS Loft利用登録をウェブアプリケーションから登録します。ちなみに登録時、AWS アカウント IDが必須です。

AWS Loft Tokyo」のページを開き「今すぐ、無料登録」をクリックして会員情報を入力しましょう。AWS Loft Tokyoのウェブページとは別なので要注意です。メールで確認コードが届くので、コードを入力して「確認」をクリック。登録したメールアドレスとパスワードでサインインすればOKです。この辺りはよくある質問のAsk an Expertのコーナーに詳細が記載していますよ。

AWS Loft Tokyoの登録は、2〜3分もあればできますよ。登録は無料なので、サクッと済ませておきましょう。 すでに登録済みの方はそのまま予約に勧めます。

201008AWS10
Image: AWS

オンラインでの相談は「AWS Loft Tokyo」にログイン後、上部の「オンライン相談」ボタンから予約できますよ。ちなみに、18時以降に翌日の予約が行なえます。予約完了メールが届くのでそこに記載のURLから当日相談ルームにログインします。初めての人は「承認依頼メールを送信する」でAWSアカウントのID確認手続きを行ないましょう。

ということで、いざ相談!

こんな「バーチャル司会者」作りたいんです!

201008AWS11

オンライン相談(Online Ask an Expert)では、オンラインミーティングツールで、「AWS Loft Tokyo」と同じように、相手の顔を見ながら相談できるんです。今回相談を受けてくれたのはAWSエキスパートの永山大輔さん。通称「じゃが」さんです。ちなみにこのやりとりは複数回、相談した内容をまとめています。

アミトー:今日はよろしくおねがいします。突然なのですが、ビデオ会議用にバーチャル司会者を作りたいです!

じゃが:バーチャル司会者ですか。まずはどんなサービスにしたいのか、欲しい機能を詳しく教えてください。

アミトー:わかりました! えーっとですね…、こんなイメージです。

【バーチャル司会者のイメージ】


1. アミトーがカレンダーに会議の予定を登録

2. 自動でカレンダーから議題や参加メンバーを取得。同時にニュースサイトから最新ニュースを取得

3. 会議時間になったら、discordのボイスチャンネルに自動でログイン

4. バーチャル司会者が最初に挨拶をし、最新ニュースの感想を参加者に求めて和やかな雰囲気に

5. カレンダーに登録された議題を読み上げ、タイムキーパーの役目もこなす(議題の数だけループ)

6. 会議が膠着状態になった場合、気分が乗る相槌を打つ

7. 最後の議題が終わったら『蛍の光』を流し、会議を終わりに導く

じゃが:なるほど。面白いですね。

アミトー:ギズモードの会議では無音の時間が度々生まれるので、そのときに「え〜」「嘘だろ」「信じられない」と相づちを打ってほしいんです! あと会議が長くなりがちなので、一つの議題で一定時間経過したら「盛り上がってますね、あと2分くらいでまとめますか!」なんて、タイムキーパーもやって欲しいなと。

じゃが:状況に合わせて発話させたいわけですね。

アミトー:会議の締め方もうまくいかず、いつもグダグダになってしまうので、ランダムで参加者を名指しして「〇〇さん最後いい感じに締めてください」と無茶振りして会議を終わらせるとかどうでしょう。

じゃが:ユニークですし、現代のニーズにマッチした発想だと思います! それでは順番に見ていきましょうか。こちらの画面を共有しますね。

アミトー:よろしくおねがいします! あっ、オンラインだからじゃがさんの画面見られるんですね

下準備:会議前にカレンダー&ニュースから情報を取得

201008AWS12A

じゃが:そうしたら先ほどの構成を、会議前の「下準備」、会議の入り口の「アイスブレイク」、本題の「会議進行」の3つに分けて考えていきましょうか。まずは、下準備からですね。

メンバーや議題はカレンダーのAPIで取得しましょう(図①)。毎朝1回、カレンダーをチェックすれば済むので、この役目は「AWS Lambda」が適しています。Lambdaは必要なときだけプログラムを実行できる環境で、稼働した時間しかお金が掛かりません。サーバーのメンテナンスも不要なので、運用コストを最小限にすることができます。

アミトー:なるほど。ニュースはどうするのがベストでしょうか? やはり自動取得してほしいのですが…。

じゃが:こちらも同様にLambdaを使って、会議当日の朝にニュースサイトのRSSからニュースを取得して保存する流れ(図②)はいかがでしょうか。 botに喋らせることができそうです。それぞれのLambdaは、アプリケーションを接続できるAmazon EventBridge」で毎朝1回、指定時刻に起動させましょう(図③)。こうして取得したデータは、NoSQLデータベースサービスであるAmazon DynamoDB」に置いておけばOKですね(図④)。

アミトー:すごい!これで、準備段階の議題やメンバー、ニュースの取得はできそうですね。図にしてもらえると、すごくわかりやすくて助かります!

アイスブレイク:AWS以外のことも一緒に調べてくれました

じゃが:続いてアイスブレイクを見ていきましょう。これは音声を流す必要がありますね。もしよければ、Discord内でそれができるのか、一緒に確認してみましょうか。

アミトー:えっ、AWSじゃないことも一緒に調べてくれるんですね!

じゃが:もちろんです。できる範囲でサポートします。たしかDiscordには「discord.js(Discordにプログラムからアクセスするための開発キット)」があるので、それを確認してみましょうか。…あっ、ありましたね。MP3ファイルを再生する機能があるので、botを喋らせられそうですよ。このURL送っておきますね。

201008AWS13

アミトーチャットですぐにURL共有してもらえるの、すごくいいですね! このあたりは対面での相談より便利かも。

201008AWS14A

じゃが:図で描くと、アイスブレイク機能はこうなります。日本語の音声の生成には「Amazon Polly」がおすすめです。Amazon Pollyに喋らせたいテキストを与えると、発話した音声ファイルが得られます(図⑥)。

アミトー:僕が吹き込まなくても良いんですね! ぜひAmazon Pollyで!

じゃが:終わりを告げる『蛍の光』は、mp3ファイルをオブジェクトストレージの「Amazon Simple Storage Service(Amazon S3)」に格納して、それを参照してもらいましょう(図⑦)。あとは前準備で用意したDynamoDBにある「ニュース」「メンバーリスト」を使って、ランダムに選んだメンバーにニュースの話題を振れば、アイスブレイク機能はOKですね(図⑧)。

会議進行:プロダクト・ビジネス要件に合わせてサービスを提案

じゃが:議論のパートはやや複雑ですね。こちらも図に描いてみましょう。

giz-meeting-bot-interview_vol2
じゃがさんに書いていただいた図をデジタル化しました

じゃが:ここでは「発話Aをして○分後に発話Bをする」とか「議題の分のループ」など、時間や条件で処理の変わるフローを実装しなければなりません。方法はいくつかあるのですが、ワークフローを管理するための専用サービス「AWS Step Functions」を使うと、ワークフローを簡単に記述できます。それだけでなく、フローチャートも自動で書いてくれるので、視覚的にフローが確認できるのがメリットです。

アミトー:開発しやすさで考えても、馴染みのプログラミング言語でやっつけちゃうのよりおすすめですか?

じゃが:簡単なフローなら慣れたプログラミング言語で書く方が開発スピードは速いと思うので、それもいいと思います。ただ、今後、機能をどんどん追加したいのであれば、「Step Functions」を使っておいた方が可読性や拡張性、メンテナンス性は高いと思います。また、Amazon Elastic Container Service(Amazon ECS)などと合わせて使うこともできるので、ビジネスの要件にあわせて柔軟に組み合わせていただければと思います。こちらもURL共有しておきますね。

アミトー:なるほど。そのあたりは結構柔軟に変更できるんですね。Step Functions、よく調べてみます。


相談の結果、こんな構成になりました。難しめなので、ここは読み飛ばしてもOKです。

giz-meeting-bot-interview_vol1-1

事前準備

・ユーザーはカレンダーに会議予定を登録。議題、議題の担当者、議題の所要時間を記載する。

・EventBridgeが毎朝決まった時刻にLambdaを起動する

・起動したLambdaがカレンダーから情報を取得、開始・終了時刻やメンバー、議題のデータをDynamoDBへ保存する

・さらにLambdaがニュースサイトから最新ニュースを取得し、DynamoDBへ保存する


アイスブレイク

・DynamoDBに保存されたミーティング開始時刻になると、Amazon EC2内のbotプログラムが起動、Discordのボイスチャットにログインする

・botプログラムがDynamoDBにあるニュースとメンバーをランダムに選び「〇〇さん、このニュースどう思いますか?」と話題を振る。

・1分経ったら「いい意見ですね。それでは会議を始めましょう。」と会議に誘導する

※botプログラムは発言するテキストをAmazon Pollyに渡し、Amazon Pollyは発話した音声ファイルを返す。その音声ファイルをbotプログラムがボイスチャットにストリーミングすることで発言ができる。


会議進行

EC2内のbotプログラムは以下のとおり進行する

・DynamoDBにある議題と担当者を読み上げ、所要時間までカウントする。

・途中、「え〜」「嘘だろ」「信じられない」の3パターンでランダムに相槌をうつ。

・議題の終了2分前に「そろそろまとめてください」とリマインドする。

・所要時間が経過したら、次の議題にすすむ。

※議題の数だけ繰り返す


・最後の議題の終了2分前になったら、Amazon S3に格納した「蛍の光.mp3」を再生する。

・最後の議題が終了したら、メンバーからランダムに1人選び「〇〇さん、いい感じに締めてもらっていいですか?」と締めを振る。

ところでこのサービス、多くの人に使ってほしいんです!

アミトー:ワークフローはぼんやりと頭の中にはあったのですが、可視化してもらえて改めて具体性が増しました! これから制作に取り掛かるんですが、コードのレビューもしてくれるんでしょうか?

じゃがもちろん可能な限り対応します。オンラインであれば画面共有してコードを見せていただくこともできます。プログラミングって一人で黙々とやるよりも、複数人で同じコードを見ながら書いていく方が(モブプログラミング)効率が良いことが多いので、ぜひ活用してください。

アミトー:助かります!おかげで、めちゃくちゃいいサービスができそうな気がしてきたんですけど、サービス化してビジネスにしたい!ってなっても相談できます?

じゃが:はい。サービス化するとなると、ユーザー管理や、管理者用のアプリケーションなども必要になりそうですね。僕たちはいろんな会社のプロダクトの相談に乗っているので、サービス化にあたっての知見もあります。ぜひお気軽にご相談ください。

アミトー:ありがとうございます。欲が出たらまた相談させてください!

相談を元に、ついにバーチャル司会者が完成!

こうして「AWS Loft Tokyo」でオンライン相談してから約1カ月、アミトーが頭の中に描いていた「バーチャル司会者」が見事に実装されました。

image

あの後も改めてエキスパートの方に相談し、少しだけ構成を変更することになりました。具体的には、

・下準備のフローをStep Functionsに置き換え

・Lambdaで常時カレンダーを監視して会議情報を取得

・会議の開始時刻になったらbotサーバーに会議データをプッシュする仕様に

・botのworkflowはStep FunctionsではなくEC2を選択。使い慣れたプログラミング言語で開発スピードを優先しました

これによりbotサーバーが定期的にDynamoDBのデータを確認しに行く必要がなくなり、よりスマートな構成になりました。また、常時監視する仕様にしたので当日の会議予定の変更にも対応できます。

そして完成したバーチャル司会者がこちら!

20201026gizmodo_aws_1


Video: ギズモード・ジャパン / YouTube

ちゃんと司会してくれている! しかも、相槌してくれるの嬉しい!

設計段階からしっかりと相談できたおかげで、大きなトラブルもなく開発はスムーズだったようです。また、今回オンライン相談ならではのメリットも感じられたとのこと。アミトーさん、具体的にはどこが良かったですか?

画面を通じた説明も手書きで図を書いてくれて、対面相談とほとんど変わりませんでした。オンラインだと、参考サイトのURLをすぐにシェアしてもらえるのが便利でしたね。なにより、家の中ですべて完結できるのがいい! 今回のサービスを作るにあたって、相談スタートからサービスができるまで、一歩も外出しませんでしたよ。オンライン、相談めちゃくちゃ便利なのでは?

201008AWS18

目黒の「AWS Loft Tokyo」は、対面相談ができて、見晴らしもよく、カフェも完備。キーボードを叩く手も思わず弾む良環境でしたが、目黒まで行ける人は限られてしまっていました。しかし、オンライン化されたことで、相談の機会が日本中に広まったわけですね。

AWSは本当に多機能で何でもできちゃいます。でも、選択肢が多ければ多いほど、すべてのサービスを使いこなすのって難しいと思うんですよね。サービスが選べない、思ったように開発が進まないといった悩みも出てくるでしょう。

もし、そうした悩みを抱えているなら、ぜひ一度「AWS Loft Tokyo」のオンライン相談に申し込んでみましょう。頼もしいAWSのエキスパートは、無数にあるAWSのサービスの中から最適なものを提示してくれたり、問題解決やコストを減らすアドバイスをくれたり、新しいサービスを生み出すお手伝いをしてくれますよ。

なお、相談できる時間は45分1枠です。でも、別日であれば何回相談してもOKなので、有効に使っちゃいましょう。

日本全国のエンジニア・デベロッパーに光(ヒラメキ)あれ!


開発協力:株式会社Envbest

Source: AWS Loft

あわせて読みたい