【Alexaスキル】リモート会議直前にリマインドするスキルを作ってみた

2021/02/06に公開

要約

「リモート会議リマインダー」というAlexaスキルを作りました、ぜひ使ってみてください

リモート会議に特化したリマインダーです、会議時刻を話すと10分前と1分前にリマインダーをセットしてくれます。

なぜ作ったか

リモートワークが広まってから随分経ちました。
チームメンバーは各自の家で働き、会議の形態はチームメンバー内部の小規模ミーティングから1on1の相談までオンライン通話になりました。
オンライン通話の頻度、会議の頻度は圧倒的に増えた方が多いのではないでしょうか。
私はソースコードを書きつつ日に何度もリモート会議に参加するようなロールで働いています。
これは個人の問題でもあるのですが、Googleカレンダーが会議10分前を教えてくれても、まだ10分コード書けるな、と集中した結果気が付いたら会議の開催時刻を過ぎている事案が何度か発生しました。
そこで会議1分前にアラームを鳴らすため、スマートスピーカーを購入しました。
スマホで良いのでは、というツッコミどころはあります、欲しいから買った所はあります。
スマートスピーカー、エンジニアの嗜みとして持っておきたいけど本当に使うだろうか...という思いを元々持っていましたので、用途が思いついた事で思い切って購入に踏み切ることができました。

大事なのはロマンなので最新のecho dotを購入しました、かわいいですね。

購入当初の目的を実現するためのAlexaの利用方法は下記のようなフローです。
「アレクサ、リマインダー」
「何のリマインダーですか」
「会議」
「いつリマインドしますか」
「12時59分」
「はい、12時59分にお知らせします」
会議1分前に指定するので必然的に29分、59分のような微妙な時間を指定することになります、ちょっと不毛ですね。
また、準備をするために10分前にも教えて欲しい場合は、2回リマインダーをセットする必要があります。
これを解決できるとハッピーだなと思いました。
かくして会議時刻を伝えると会議の10分前と1分前にリマインダーをセットするスキルを作成しました。
欲しいから買ったし作りたいから作った、というだけの話ではあります。

開発してわかったAlexaスキルの概要

Alexaスキルはアーキテクチャとしては音声モデル、lambda関数の2本の柱で構成されています。
自分のAlexaスキル向けに設定した音声認識モデルが、音声入力を整理したデータをペイロードに詰めてlambda関数をフックします。
呼び出されたlambda関数のレスポンスで次のalexaの挙動が決まる、というフローでalexaスキルは動きます。
音声認識モデルの構築にAIの知識は不要です。
理論上lambdaでサポートされている言語であればどのような言語でもAlexaスキルとして開発可能という事になります。
Alexaスキルのsdkが用意されているため、sdkがサポートしている言語で開発することが一般的です。
大抵はNode.jsかpythonで開発することになります。
Goのsdkも発見しましたが、lambda関数のデプロイが開発コンソールに頼らない形となるためちょっとだけ上級者向けだと思います。

開発体験記

自分の予備知識はほぼ0です。
アレクサスキルってどうやって作るんだろうな、lambdaを使うって聞いた覚えあるな、というレベル感で、「Alexa スキル 開発」でググるところからのスタートでした。

現在Alexaスキルの開発は、スキル開発コンソールを使って行うことができます。

このコンソールで、音声モデルの設定、呼び出されるlambda関数の設定、デプロイ、実行ログの確認が行えます。

しかし、現在の形の開発コンソールがリリースされる前の開発フローもあり、開発手法の情報を入手するのが中々大変です。
例えば、昔はダイレクトにlambda関数の管理コンソールで開発を行う事が推奨されており、lambda関数のテンプレートにはAlexaスキルのテンプレートが用意されていました。

現在はAlexaスキルの開発コンソールがあるため、lambda関数のテンプレートからAlexaスキルのテンプレートは消滅しています。

おそらくAlexaスキルの開発者人口は少なく、メジャーな分野ではないのだなと情報を調べている際に、その情報の少なさから感じました。
AlexaスキルはAWSの認定資格が用意されていたものの、残念ながら資格試験が(おそらく受験者の少なさか、意義の薄さからか)消滅したことが記憶に新しいですね。

開発スタイルが大幅に変わるような環境の整備と、そもそもの情報の少なさの合わせ技と、lambda、Alexaのsdkのキャッチアップ、また権限設定などAlexa独自の設定、挙動への理解が求められることから学習障壁は比較的高いと感じました。
更に、スキルの公開にはスマートフォンアプリのような審査があります。
これはamazonの審査担当者が実際にスキルを動かしてリリースして問題ないかを審査してもらえるものです。
公序良俗的に問題ないか、という審査ではなく、ユーザー体験としてalexaの評価を損なわないか、という観点で審査が行われます。
異常系の入力への応答がエラー応答や、無言で終了するような挙動があったり、スキルの挙動に誤解を招くような音声案内があるようなものは審査をパスできません。
私も2回審査に落ち、3回目の審査でリリースまで辿り着くことができました、審査担当の方にはお手数をおかけしました...
このような環境は、今までプログラミングをやった事がないけどちょっとやってみようかな、くらいのレベル感の人が独学でやっていくには現状は辛いかなと感じました。
だからこそ、積極的に情報発信したいなと思うところがあります。
余力があれば鮮度の高い現在の情報として知識0からリリースまで行えるような情報をまとめたいです。

今後の拡張

オプション項目として会議名や何分前に通知するかを適宜調整できると良いかなと思っています。
あと英語にも対応したい、目指せグローバル展開。
GitHubリポジトリにソースコード一式を公開しました、ご意見や改善要望、コントリビューション頂けるとモチベーションが上がりますので、ぜひよろしくお願いします。

Discussion