多分わかりやすいDurable Functions 〜サーバーレスは次のステージへ〜【番外編】

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

こんにちは、サイオステクノロジー技術部 武井です。全4回シリーズでお送りしております「多分わかりやすいDurable Functions」シリーズも今回で最後です。

 

せっかくいろいろ勉強をしたので、最後にDurable Functionsで社会貢献をしてみたいと思います。

政府による働き方改革の推進

労働人口の減少に伴う経済力の低下が懸念されています。少ない労働人工の中でも効率的に日本の経済を回す方法の模索が急務です。以下の3つの視点で働き方が見直されています。

労働の効率化残業して長時間働くのではなく、労働の生産性を上げることを目標とします。
労働の多様化
ITやクラウドツールを活用し、オフィス以外で仕事ができるようにします。テレワークとも呼ばれています。
労働の一般化
労働市場に参加できる人を今まで以上に拡大します。高齢者や育児中の女性などが労働しやすい環境を作ります。

 

「働き方改革」により労働形態が多様化、出社時間もより自由になります。日々変わる起床時間に対応した「確実に気持ちよく起きることのできる」ことが必要となります。

そこで、Durable Functionsで目覚まし(二度寝防止機能付き)を作りました。

Durable Functions目覚ましの動き

Durable Functions目覚ましは以下のように動作します。

  1. 指定した時刻になると、あらかじめ指定した電話番号に対して、10桁のコードをプッシュ入力するようにアナウンスが流れる。
  2. 指定された10桁の番号をプッシュ入力する。
  3. 正しい10桁のコードを入力すれば終わり。間違っていれば、一旦電話が切れて、最初に戻り、再び10桁のコードをプッシュ入力するようにアナウンスが流れる。

つまり、音声ガイダンスで流れる10桁のコードを正確にプッシュしない限り延々とアナウンスが流れ続けます。正確に10桁のコードをプッシュ入力できるくらい、頭が働いているならば、きっちり起きることもできるでしょう。

アーキテクチャ

Durable Functions目覚ましで使っている技術は以下のとおりです。

Azure Functions Azureが提供するサーバーレスアーキテクチャであり、オンデマンドでコードを実行でき、必要に応じてスケーリングするサービスです。
Durable Functions
Azure Functionsのオーケストレーションサービスです。Azure Functionsの実行状態を管理し、ワークフローのような処理を実現します。
Twilio
指定した電話番号にメッセージやSMSを送信したり、ユーザーのプッシュ入力を受け取ってインタラクティブな処理を行うクラウドAPIサービスです。
Open JTalk 入力された日本語テキストに基づいて自由な音声を生成するHMMテキスト音声合成システムです。電話で流す音声メッセージの生成に使っています。

処理シーケンス

Durable Functions目覚ましの処理シーケンスをご説明致します。


■ その1:コード入力依頼のメッセージ送信

Screen Shot 2019-04-19 at 14.37.04

  1. Durable Functionsは、指定した時刻になると、クライアント関数経由でメッセージ送信関数(アクティビティ関数gatherCode)を起動します。ここで、イベントを受信するまで、Durable Functionsは待機状態となります。
  2. メッセージ送信関数(アクティビティ関数gatherCode)は、Twilioに対して、指定した番号にメッセージを流すよう、命令します。このとき、Twilio独自の言語「Twiml」を使います。
  3. Twilioは指定された番号に対して、コードを入力する旨のメッセージ(おはようございます!!次の指定した10桁の番号を入力してね。8395…)を流します。

■ その2:ユーザーのコード入力

Screen Shot 2019-04-19 at 14.42.53

  1. ユーザーは、メッセージで指定された10桁のコードをスマートフォンなどからプッシュ入力します。
  2. Twilioは、ユーザーが入力した10桁のコードをクエリパラメータに付与して、入力コードチェック関数(アクティビティ関数checkCode)をHTTPプロトコルにて呼び出します。

■ その3:入力コードのチェック

Screen Shot 2019-04-19 at 15.19.38

入力コード送信関数は、ユーザーが入力したコードが、最初に要求したコードと一致しているかをチェックします。そして、その結果を、Durable Functionsにイベントとして送信します。Durable Functionsはイベントを受け取ると、処理を再開します。


■ その4:最終チェック

Screen Shot 2019-04-19 at 14.57.14

もしユーザーが入力したコードと、最初に要求したコードが一致してなければ、一旦電話を切り、再度メッセージ送信関数を起動し、ユーザーに電話をかけて、コード入力のメッセージを送信します。ユーザーが正しいコードを入力するまで、延々とこのフローを繰り返します。


音声メッセージの作成

ユーザーに流す音声を作成します。先程もご説明したように、Open JTalkで作成することとします。インストール手順は以下のとおりです。

# wget https://sourceforge.net/projects/hts-engine/files/hts_engine%20API/hts_engine_API-1.10/hts_engine_API-1.10.tar.gz/download -O hts_engine_API-1.10.tar.gz
# mkdir /usr/local/hts_engine_API
# tar xzvf hts_engine_API-1.10.tar.gz
# cd hts_engine_API-1.10
# ./configure --prefix=/usr/local/hts_engine_API
# make
# make install
 
# wget https://downloads.sourceforge.net/open-jtalk/open_jtalk-1.09.tar.gz
# mkdir /usr/local/open_jtalk
# tar xvzf open_jtalk-1.09.tar.gz
# cd open_jtalk-1.09
# ./configure --prefix=/usr/local/open_jtalk --with-hts-engine-header-path=/usr/local/hts_engine_API/include --with-hts-engine-library-path=/usr/local/hts_engine_API/lib --with-charset=UTF-8
# make
# make install
 
# wget https://sourceforge.net/projects/open-jtalk/files/Dictionary/open_jtalk_dic-1.09/open_jtalk_dic_utf_8-1.09.tar.gz
# tar xzvf open_jtalk_dic_utf_8-1.09.tar.gz
# cp -r open_jtalk_dic_utf_8-1.09 /usr/local/open_jtalk/
 
# wget https://excellmedia.dl.sourceforge.net/project/mmdagent/MMDAgent_Example/MMDAgent_Example-1.4/MMDAgent_Example-1.4.zip
# unzip MMDAgent_Example-1.4.zip
# mkdir /usr/local/hts_engine_API/hts_voice
# cp -r MMDAgent_Example-1.4/Voice/mei/*htsvoice /usr/local/hts_engine_API/hts_voice/

では、実際に音声を作ってみましょう。

# echo "こんにちは" | /usr/local/open_jtalk/bin/open_jtalk -m /usr/local/hts_engine_API/hts_voice/mei_normal.htsvoice -ow output.wav -x /usr/local/open_jtalk/open_jtalk_dic_utf_8-1.09

上記のコマンドを実行しますと、output.wavが出力されます。今回作らなければいけない音声は以下のとおりです。

  • ユーザーが電話を取ったら一番最初に流す音声(コードを入力してねみたいなもの)
  • ユーザーが入力したコードが正しい場合に流す音声(コードは正しいよみたいなもの)
  • ユーザーが入力したコードが間違っている場合に流す音声(コードが間違っているよもう一回入力してねみたいなもの)

やっぱり、きれいな萌え声で起こしてほしいと思います。いろいろチューニングした結果、以下のコマンドが一番気持ちよく起きることができると思いました。

# echo "こんにちは" | /usr/local/open_jtalk/bin/open_jtalk -a 0.5 -m /usr/local/hts_engine_API/hts_voice/mei_happy.htsvoice -ow output.wav -x /usr/local/open_jtalk/open_jtalk_dic_utf_8-1.09

ソースコード

本システムのソースコードは、以下のGitHubに登録してあります。言語はC#で書いております。

https://github.com/noriyukitakei/durable-moemoe-alarm

ソースコードの解説は以下のとおりです。

まとめ

全4回シリーズでお送りしたDurable Functionsですが、いかがでしたでしょうか?私は、Durable Functionsには限りない可能性を感じております。これからも、どんどん使っていきたいと思います。

アバター画像
About 武井 宜行 269 Articles
Microsoft MVP for Azure🌟「最新の技術を楽しくわかりやすく」をモットーにブログtech-lab.sios.jp)で情報を発信🎤得意分野はAzureによるクラウドネイティブな開発(Javaなど)💻「世界一わかりみの深いクラウドネイティブ on Azure」の動画を配信中📹 https://t.co/OMaJYb3pRN
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

3人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる