Voiceflowをためしてみた！


この記事は[「【マイスター・ギルド】本物の Advent Calendar 2020」](https://adventar.org/calendars/5454)　17日目の記事です。


#はじめに
初めまして！11月から株式会社マイスター・ギルド（以下、MG）の「ギルメン」の一員となりましたtknbです！
Qiita投稿も初ですので、優しい気持ちで読んでいただければうれしいです！

##なにをする？
MGがAdvent Calendarを行っているのは知っていました。なんか変わったことやってんなー程度に。

実際、入社してすぐに参加するとは思っていませんでした(;^ω^)
が！参加するからには新しいことに挑戦してみたい！せっかくのお祭りですしね(^^)/

では、どうするか？
技術者集団の一員になったことだし開発すべきでは？

でもでも、自信がないよ！


てことで、ノーコード/ローコードでなにかできないかと考えました。

ご存知でしょうか？[ノーコード/ローコード。](https://qiita.com/kento_gm/items/34c46a9bc6b3017c9345)

つまり、ナウでヤングなエンジニアはこれで開発を始めているってことじゃあないでしょうか？？

じゃあ、やるしかないじゃん？？

でもでも、なにをどれでつくればいいの？？？


悩める私に天の声が聞こえます。

「グーグル止めて。ねえ？グーグル止めて。」

これだ！！！！！
※MGでは、「Google Home」君がお昼と業務終了時にアラームを鳴らしてくれるのです。
（「Google Home」君を止めようとしてなかなか止められない代表）
※のちに「Alexa」君も増えました。

いいじゃん！
ローコードで音声アシスタントの開発をして、
私も「Google Home」君とおしゃべりしてみたい！！！！

てことで、今回私は「voiceflow」を使って「ローコード」で「スキル」をつくります！
※スキル：機能のことスマートフォンでいうところの「アプリ」のことらしい

#今回の前提
・プログラミング初心者向け
・作業環境(OS:Windows10 ブラウザ:chrome)

#アカウント登録

https://www.voiceflow.com/


![top.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/30e29128-0a25-2cdf-2ac7-49ca89361ac4.jpeg)

[Get Started for Free]か[Sign up]をクリック
アカウント認証画面もしくは、登録画面へと遷移します。

![signin.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/a22e1e44-97eb-2b40-a059-61ca2a1a0d66.jpeg)

アカウント登録をなにで行うかの確認画面に遷移します。

・メールアドレス
・Google
・Facebook
・SSO

上記から選べます。

![anket.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/87659196-5f65-eea0-6cf5-c98be04d2b6f.jpeg)

welcomeページに遷移したのち初回はアンケートを求められます。
※あくまでアンケートですので、気軽に考えていいです。
（2020年12月時点のアンケート画面です）
Google翻訳にかけ私なりの解釈を含みます。

Choose your role:あなたの役割を選択してください

Conversation Designer : 会話デザイナー（スマートスピーカーの開発者ですかね？）
UI/UX Designer : デザイナーさんですね。オサレなデザイン考える人
Content Writer : ライターさん？ブログとか記事を書く人ですかね？
Project Manager : プロジェクトの責任者。監督みたいな人
Developer : 開発者
Marketing : マーケティングしている人
Sales : 営業さん
VP/Manager : VP(Vice President)日本では副社長クラスのことらしい。そのような人が選べばいいと思うよ。
Student : 学生さん
Educator : 教育関係者（教師とはちょっとちがうらしい）

近い職業を選択すればいいみたいですね

What channels are you creating for? :どのチャンネルに接続していますか？

<dl>
 <dt>Voice</dt>
  <dd>Amazon Alexa</dd>
  <dd>Google Assistant</dd>
  <dd>IVR</dd>
  <dd>Samsung Bixby</dd>
  <dd>Siri</dd>
<dt>Chat</dt>
 <dd>Website</dd>
 <dd>Whatsapp</dd>
 <dd>SMS</dd>
 <dd>Slak</dd>
 <dd>Apple Business Chat</dd>
 <dd>RCS</dd>
 <dd>Vicer</dd>
 <dd>Wechat</dd>
 <dd>Twitter</dd>
</dl>
チャンネルというのが、調べてもテレビの話しか出てきませんでしたが、
選択肢から読み取るに、どういった媒体で使うことを想定しているかを聞いているのかと思います。

How big is Your team?:あなたのチームはどれくらいの大きさですか？

何人で開発をしているか選択すればいいみたいです。

![workspaceSeting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/41a7002f-396a-6057-f2fc-1143019efc6b.jpeg)


workspaceでの名前を設定できます。
画像も設定できるので設定してみました。



チームで開発したいときなど、workspaceのURLをメールで送信できるみたいです。
枠自体は100件は追加できました。もしかして無制限なんですかね？
（実際にアドレスを入力していないので、なんともいえませんが）

はい！
ここまで完了すると開発のトップページが表示されます！

サンプルのプロジェクトが作成されていて、簡単な操作のデモが流れます。

これでオリジナルの「スキル」開発ができます！

##プロジェクトの準備

サンプルのプロジェクトの左上の「＜」をクリックすると自分のworkspaceにあるプロジェクトの一覧ページへ遷移できます。
![toList.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/17fc47b5-8d07-09c0-22c9-651254f9b26b.jpeg)

サンプルのプロジェクトは不要な人は削除しても大丈夫です。
Listからプロジェクト名左横の「丸いアイコン」をクリック
[Remove Project]　で削除できます。
※削除すると元に戻せません！

![project_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/3f5a2329-4d64-30bb-d94c-483bb16d51fd.jpeg)

新しく作りたい場合は、
[Create Project]をクリック

![createproject.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/b73f829b-c83f-451d-19ba-76d04a598bf3.jpeg)

channel（使用する媒体（スマートスピーカーなど））を選択
![channelchoice.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/b6c13894-659c-a0c3-7bfa-de19a03135a2.jpeg)
新しく作るプロジェクト名と使用言語を決めて
[Create Project]をクリックで新しくまっさらなプロジェクトが作成されます。

![newproject.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/7f57b3e2-681f-60a7-46c4-0247b5bbe50d.jpeg)
##さわってみよう！
[公式ドキュメント](https://docs.voiceflow.com/#/)

ふむふむ。
基本の流れは、左のリスト「ステップとフローメニュー」から「ブロック」を右の「キャンバス」エリアへ持っていく、
右の「キャンバス」エリアで、それぞれ動作や処理「ステップ」を設定していくみたいです。

##なにをつくろう？

とりあえず、挨拶をするスキルをつくってみました。

![test-Google-Chrome-2020-12-22-16-40-30.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/7ac9ba27-6814-cddd-c502-19c5391c7b94.gif)

クリック＆ドロップで作っていく感覚はとてもいいです！
楽しい！！
これだけでもワクワクします！

###設定の中身

Startブロックの次にResponseより[Speak]ブロックをクリック＆ドロップ
※[Speak]ブロックでは、「スマートスピーカー」がしゃべる内容を入力します。

User Inputより[Choice]ブロックをクリック＆ドロップ
※[Choice]ブロックでは、ユーザの行動（会話）の選択肢を入力します。

[path]
Name new intent or select exiting intent：の欄に選択肢の名前を入力
※日本語入力ができません。
[Utterances]
Add synonyms of the user response：選択肢を入力
※スマートスピーカーへ話しかけ方を入力しておくことで、その「言葉をトリガーとする」という設定のようです

![choice.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/b19f48b6-ba85-a169-1f90-3406b260414e.jpeg)
![utterances.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/9046c579-ee4d-1aab-4ae0-aad3b0e422cd.jpeg)

作成した[path]に応じた反応を[Speak]ブロックをクリック＆ドロップして設定
![choice_test.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/54c1b108-5736-673d-0fb5-42e151878e53.jpeg)

か、簡単だ…。
簡単すぎてここで終わったら、みんなからこいつサボってんな？て思われてしまう…。
（MGではそんなことはありえませんけどね！）


では、もう少しそれっぽいものを作りましょう！


##Googleスプレッドシートと連携したスキル

voicecflowでは、「Googleスプレッドシートと連携したスキル」も簡単に作れちゃうみたいです！

###どういったものを作る？
弊社MGには、たくさんのボードゲームがあります。
お昼休みにはみんなで楽しく遊んでいます！（最近はもっぱら「ニンテンドースイッチ」で遊んでいますが）

ボードゲームがたくさんあるので、どれで遊ぶか悩む時間でプレイ時間が減っていくこともしばしば。
では、それを解決する「スキル」を作ろう！

まずは「Googleスプレッドシート」を用意します。

![SPS_bdg_line.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/e9f94893-bf72-15a7-8a1b-846345be7d24.png)


変更箇所
(1)スプレッドシートのタイトル（わかりやすいやつでいいです）
(2)A1に呼び出す情報のカラム名を入力
(3)Aの列に呼び出す情報を入力
※MGにあるボードゲームのほんの一部です。

用意ができたら、voicecflowの作業に移ります
画面左下のボタン「キャンバスコントロール」の「インタラクションモデルビュー」をクリック
![variables_make.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/b5031da2-d1b0-e921-10f7-9ab978e8def4.jpeg)

変数ビューが表示されます
Add Variableの欄に変数名を入力します

変数？【variables（ヴァリアブル？バーリアブル？）】
>プログラミングにおける変数（へんすう、英: variable）とは、高水準言語のプログラムのソースコードにおいて、扱うデータを読み書きする記憶域 (storage) のことであり、固有の名前（識別子）によって識別される。変数を用いることで、データを一定期間記憶し必要なときに利用することができる。

フリー百科事典『ウィキペディア（Wikipedia）』

つまり、中身を管理するための名前のコトですね。
焼肉定食には焼き肉が入っているんですよ。
焼き魚は入らないようにしようねってことですね（知らんけど）

わかりやすい名前（変数名）をつけます。
※17文字の文字制限がありました。
![variables_add.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/0e246fbd-89f9-71c9-90b4-3e0ef9241108.jpeg)

「ステップとフローメニュー」から、「Google Sheets」をクリック＆ドロップ
※▶ Integrationの中にあります。クリックすれば表示されます。

「キャンバス」エリアに置いた「Google Sheets」ブロックをクリック
画面右端に入力エリアが出てきますので順に入力していきます。

As user
[+ Add User]をクリックするとGoogleアカウントの認証画面が表示されます。

![SPS_conect.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/75a0908e-72d7-126a-e05d-dcd0cb45608f.jpeg)

用意した「Googleスプレッドシート」のアカウントを選択してください。
![SPS_account.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/2a034166-cb6c-a708-cb49-8979e4f3a1c0.jpeg)

Spreadsheet：「Googleスプレッドシート」のタイトル(1)
※スプレッドシートを複数保存している場合は、該当するスプレッドシートを選択してください。
Sheet：編集したシートを選択してください。
※シート名を編集してもしていなくても、読み取ってくれました。（わかりやすい名前にしておくと複数のシートを使いたいときに楽です）
![SPS_choice.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/728d9aaf-6aa0-d078-eaa9-63fc8ba88cf6.jpeg)


With Settings
Column：A1につけたカラムを選択してください(2)
Value to Match：何も入力しない（＝ランダムに取得するという設定になります）
![SPS_setting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/f1ea0e96-9e16-74c0-a757-613d0ac81412.jpeg)

Mapping Output
Column：A1につけたカラム名を選択してください(2)
Value to Match：作った変数を選択してください

![variables_mapping.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/372ab9ec-a3ce-f33e-8123-0327a38dfa0e.jpeg)

Test Integration
クリックすると上記で設定した情報をもとに返ってきた値を表示してくれます。((3)の内容です）
![SPS_test_integration.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/8e86ce03-9a8c-03ef-a075-6b19db3225b7.jpeg)

[Speak]ブロックに作った変数を入力
※「Google Sheets」ブロックの「Mapping Output」の結果を「スマートスピーカー」に話すようにする設定です。
![SPS_res.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/2bee115d-769d-b38c-68cf-c0bea5bae072.jpeg)


完成したのがこちら！
![cat_SPS.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/922656/7aada872-a4d1-84e5-f56b-d4602368776b.gif)


テストの時点でも、
マイクをオンにすれば「スマートスピーカー」とお話できました！

とりあえず、今回はここまで！

#感想まとめ

・（どのアカウントで始めるかで少しの差はあるかと思いますが）アカウント登録から開発を始められるまで、めちゃくちゃ簡単です！
インストールの必要がなくブラウザ上ですべて完結するのでインストールやセットアップなどの準備がおっくうに感じる人でも始めやすいと思います！
・操作も簡単なのでアイデアさえあればいろんなスキルがつくれそう！
・apiや複雑なフローを作るには、プログラミングの知識があればより簡単に作成できるかな？と思いました（なくてもブロックとフローを組み合わせればできるので問題なし！）
・無料版では1つのworkspaceにプロジェクトが2つしか作れないので、ものたりなさは感じますが、無料でここまでできるのなら十分ではないでしょうか。
もっといろいろと作りたいひとは、有料版にアップグレードしたらまだまだ作れますよ！(2020/12時点　$40/month)

#こちらの記事を参考にさせていだたきました
https://qiita.com/kento_gm/items/34c46a9bc6b3017c9345
https://zenn.dev/kun432/books/e7360ee23138cfe74d64/viewer/4154fae0733f65025e89
https://kun432.hatenablog.com/entry/voiceflow_tips_7_fact_skill_integrated_with_google_sheets


ありがとうございます！