Google Home向けに音声アプリを作るチュートリアル
このチュートリアルでは、Google HomeやGoogle Nest Hub向けの音声対話アプリを作る方法を説明して行きたいと思います。
第1章:アクションとは
Google Nest Hub, Google Home, あるいはAndroidスマートフォンのGoogle Assistant上で動作する音声アプリのことを「アクション」と言います。英語では「Action」あるいは「Actions on Google」と呼びます。
「OK、Google、おみくじを引いて」
と呼びかけると、Google Homeがおみくじを引いてくれますが、この”おみくじを引いてくれる機能”がスマートフォンでいう1つのアプリのような単位になっており、このアプリのことをアクションと呼びます。
アクションは誰でも開発・公開することができます。このチュートリアルではこのアクションの開発方法をサンプルアプリを開発しながら詳しく説明していきます。
アクションの歴史とアクションが使える製品
アクション(Actions on Google)は2018年に発表されました。
アクションは当初Google HomeとAndroidスマートフォンのGoogle Assistant向けのアプリとして開発方法が開発者に公開されました。
現在アクションが動作する製品をリストアップしてみます。
アクションが動作する当初の製品群
- Google Home:2018年に発売されたスマートスピーカー
- Google Home Mini:Google Homeの小型版
- Androidスマートフォン上のGoogle Assistant:Androidスマフォに向かって「Ok, Google」と言うと起動する音声認識アシスタント
2019年に新たに投入されたアクションが動作する製品群
- Google Nest Hub :ディスプレイ付きのGoogle Home
- Google Nest Hub Mini:ディスプレイのついていないGoogle Home Miniの後継
これらの製品上でアクションは現在動作します。(実はこれ以外にもGoogle Assitantを搭載したスマートスピーカーがGoogle以外のメーカーからも発売されており、これらの製品でもアクションは動作します。)
上で「Androidスマートフォン上のGoogle Assistant」と書いたのは、Google Assistantというのは、Google Home, Google Nest Hubの中にも入っているからです。
要約すると、Google Assistantという音声認識&対話ソフトウェアがGoogle Home、Google Nest Hub、Androidに入っていて、アクションはGoogle Assistantで動作するアプリということになります。
iPhone, iPad -> iOS -> iOSアプリ
Google PIXEL, XPERIA, Galaxy -> Android OS -> Androidアプリ
GoogleHome, NestHub, Androidスマホ -> Google Assistant -> アクション
のような関係と考えるとわかりやすいかもしれません。
このアクションは誰でも無料で開発・公開ができます。
それでは次章からこのアクションの作り方を説明して行きます。長丁場となりますがお付き合いください。
第1章のまとめ
- アクションは音声対話アプリ
- アクションが動作するのはGoogle Assitantという音声対話エンジンの上
- Google Assistantが入っているスーマフォン、スマートスピーカー、スマートディスプレイでアクションが使える
- 開発者は無料でアクションの開発・公開ができる
第2章:アクションの動作フロー
アクションを作るため、Googe Homeを使った一連の会話の流れがどのように処理をされているか説明します。
単純な会話のフロー
単純な会話のフローは上のように、
1.声がGoogle Homeのマイクに拾われる
2.Google Homeの中のGoogle Assitsantが声をテキスト(文字)に変換する。
3.Google Assistantがテキスト変換された文字列の構文を解析・解釈し、アクションを呼び出す
(アクションを呼び出す=Dialog Flowで作られたIntentを呼び出す)
4.Dialog Flowのインテントが呼び出され、我々が作った会話のルールに従って、返答を生成する
5.スピーカーがこの返事を音声で再生する。
という流れになります。
複雑な会話のフロー
複雑な会話のフローは上のように
1.声がGoogle Homeのマイクに拾われる
2.Google Homeの中のGoogle Assistantが声をテキスト(文字)に変換する。
3.Google Assistantがテキスト変換された文字列の構文を解析・解釈し、アクションを呼び出す
(アクションを呼び出す=Dialog Flowで作られたIntentを呼び出す)
4.Dialog Flowのインテントが呼び出される。
5.返答をするためのルールを複雑に構成したい場合をリクエストを一旦、Firebase Functionsに投げる。
6.Firebase Functions内で、リクエストを受け取り、ここで返答を生成する。
7.この返答をDialog Flowを経由してスピーカーに返す
5.スピーカーがこの返事を音声で再生する。
という流れになります。
ここでいう、「単純な場合」と「複雑な場合」の境界は曖昧ですが、
- データベースを使うとき (例:しりとりなどで言葉のデータベースを参照する。)
- 外部のAPIを使いたいとき (例:天気をAPIを使って取得する)
- 外部のファイルを使いたいとき(例:音声ファイルを使ってBGMを流す)
- じゃんけんやしりとりなど返答にゲーム性やロジックが絡むとき
のようなときは、複雑、つまりWebhook(Firebase Functions)を使うことになります。
Webhookとは
Firebase Functionsは、普通のWeb APIを使うときにも使いますが、アクションを作るときには、このFirebase FunctionsのことをWebhookと呼びます。
Webhook = Web APIで、会話をフックする(会話の内容を言葉を引っ掛けて、違う返答を生成する)
というような意味で、Webhookという呼び方をします。
Webhook = 会話をフックするWeb APIということなので、実はFirebase Functions以外でもPythonなど他の言語でも対応するAPIを作ってWebhookとして使うことができるのですが、現在はFirebase Functionsが一番Googleのサポートも厚く王道となっています。
Webhookと言われたら、Firebase Functionsの部分なのだと思って読むと公式のドキュメントも読みやすくなります。
Dialog Flowとは
先にWebhookのほうから説明してしまいましたが、Dialog Flowは一番最初に会話のリクエストを受け付けるゲートウェイです。Dialog Flowには、
1.会話の内容ごとに受け皿を作り、これをインテント呼びます。
1つ1つの会話の受け皿=インテント
2.インテントで受けた後、その中から、こちらの知りたい言葉を抽出します。
このこちらが知りたいキーワードのことをEntity(エンティティ)といいます。
Entity = こちらが知りたいキーワード
こちらが知りたいキーワードとはなんでしょうか?
例えば、我々がユーザーの年齢を知りたいと思い
「あなたは何歳ですか?」
とGoogle Homeを介して聞くとします。
ユーザーが「私は30歳です」と応えた場合、
”私は39歳です”という文字列の中から39という部分だけ抜き取って教えてくれたら便利ですよね?この場合知りたいキーワードは”年齢の値”ということになり、これを1つのEntityとして定義します。
Entityとして定義するとは、
”私は39歳です”という言葉の中にIntegerの値が1つあり、それが年齢に値するはずだ。
と定義することです。
このようにEntityを定義すると、Dialog Flowが勝手に文章を解析し、Integerである部分を探してその値(39)をEntityに格納してくれます。あとは、このEntityを使えば
「えぇ、30歳なんですね?」
というようなオウム返しの返答を作る事もできますし、
「もうすぐ、40ですねえ。。」というような返答を作ることもできます。
このようにDialog Flowの仕事は、Entityに知りたいキーワードの値を入れることと言っていいでしょう。
第3章:アクション開発プロジェクトの作成
それではいよいよアクションを作るプロジェクトを作成していきます。
パーミッションの設定
まずアクションを作り始める前に、自分のGoogleアカウントのパーミッション設定を確認します。
アクションを作るためにはいくつかのパーミッションをオンにしておかなければいけません。
https://myaccount.google.com/activitycontrols
こちらのリンクを開き、開発に使うGoogleアカウントでログインします。
ウェブとアプリのアクティビティにチェックをし、その下にある「Chromeの履歴と。。」という項目、と、「音声録音を含める」という項目にもチェックをします)
(以前は、Device InformationとVoice & Audio Activityというパーミッションが存在し、このチェックマークもオンにする必要がありました。GoogleのActions on Google開発の公式ドキュメントにはこのチェックマークをオンにすると書いてありますが、この2つの設定はなくなっていたので、Googleのサポートに確認をとったところ、以下のように、今はウェブとアプリのアクティビティをオンにすれば、この2つもオンになったことになるということでした。)
Mark
10:34 AM
I just want to set you expectations, that those options you're looking for are no longer there. I think they're now all merged under Web and app Activity.
So, that's turned on. Other 2 you're looking for are also turned On. Our Support website hasn't been updated yet since the changes on the account settings was just recently released.
アクションプロジェクトの作成
開発に使うGoogleアカウントでログインした後に、以下のリンクを開きます。
https://console.actions.google.com
New projectをクリックします。
ここで、プロジェクト名を入力しましょう。
このプロジェクト名は、アクションの名前(アプリの名前)になるわけではないので、安心してネーミングしてください。アプリを公開したあとにユーザーに見えるアプリ名は後ほど設定できます。
Choose a language for your Actions project のところは今回は日本語に対応したアクションをつくるので、 "Japanese" を選択し、
Choose your country or regionのところは日本向けのアクションを今回はつくるので "Japan" にします。
今回私は、「オウム返し」をする単純なものからサンプルを作って見ようと思い、parrotという名前のプロジェクト名にしました。
Create projectボタンを押してプロジェクトを作成します。
次に表示される下のようなページで、一番下の右端にあるConversationalを選択してください。
すると下のようなページが開くので、Build your Actionsという箇所をクリックします。
下のように2つの項目が表示されるので、Add Action(s)をクリックしてください。
ここで、DevelopタブのActionsのページに飛ばされ、目の前に、Add your first actionというボタンが表示されます。
Add your first actionボタンをクリックすると下のようなDialogが表示されます。
ここでBuildボタンを押すとActionが作成されるとともに、会話の受け皿であるIntentがDialogFlow上で作成されます。
最初私がこのステップに来たときに非常に混乱したので、もう一度このBuildボタンが押されたら起きることをまとめますと、
- 最初のActionがつくられる。
- このActionに紐付けられたDialogFlowのプロジェクトのテンプレートが同時にできる
- そのDialogFlowプロジェクトの中にインテント(会話の受け皿)が2つできる。
です。
Dialogflowプロジェクトの作成
ここからがいよいよ、Dialog Flowのセットアップになります。ここまでの手順に従っていう皆さんの画面には上のような画面が表示されていると思います。ブラウザのページのアイコンを見るとActions consoleからDialog FlowにWebsiteが移動してきていることがわかります。
またparrotという私がアクションプロジェクトにつけた名前が受け継がれ、こちらにも同名のDialog Flowプロジェクトが作られようとしている状態ということがわかります。
ここで、DEFAULT LANGUAGEにJapanese-jaを、DEFAULT TIME ZONEにAsia/Tokyoを選択します。
上の設置ができたら、CREATEボタンを押してください。
これで、Dialog Flowプロジェクトが作成され、会話の受け皿であるIntentが作成されます。
以下のページが皆さんの前の画面に表示されていると思います。
ここまで非常に長いステップでしたが、ここまでくれば
https://dialogflow.cloud.google.com/
からいつでもこの画面に戻ってDialogflowの作業を再開できますので、一度コーヒー休憩をとるか散歩をするなどして頭を休めてみてください。
次章はこの画面からスタートします。
第3章のまとめ
1.アクション作成に必要なパーミッションを許可した
2.アクション作成に必要なパーミッションを許可した
3.アクションプロジェクトの作成
4.アクションの作成
5.Dialogflowプロジェクトの作成(同時に最初のIntenentが2つ生成される)
前章で、下のような図でGoogle Homeの会話のフローを説明しましたが、この図でいう一番右のDialogFlowの部分を作り始めるところに、この章できました。
第4章:会話シナリオの作成
前章の終わりの下の画面から再開したいと思います。
ここに2つのIntentがあるのがわかると思います。
Default Fallback Intent
Default Welcome Intent
です。
第2章で、Intent = 会話の受け皿と伝えました。今この状態では2つの受け皿があると考えてください。
Default Welcome Intent = 始めの挨拶用の受け皿
Default Fallback Intent = 他の受け皿がなかったときにFallbackする(落とし所となる)受け皿
Default Fallback Intentは後で、説明することにして、まずはWelcome Intentを開いてみましょう。”Default Welcome Intent”をクリックすると、
このような画面が見えると思います。
Responsesという箇所に「こんにちは!」というフレーズがあります。
この状態では、Google Homeはアプリ起動時に「こんにちは!」と話します。
これを独自の挨拶に変えてみましょう。
「こんにちは!」、を
コケコッコー
に変えてみます。そしてそのしたに2番目の挨拶
カッカドゥー
を入れてみます。
下のようになりました。
Default Welcome Intent (挨拶)をテストする
それではこの変更が動くかテストしてみましょう。
Integrationsを選択し、右の画面のGoogle Assistantというカードの中にある、INTEGRATION SETTINGSをクリックします
下のようなダイアログが表示されるので、Auto-preeview changesの横のスイッチをONにし、TESTというボタンを押します。
Updating Actions on Google...
というローディング画面がでてきて、Actionが再ディプロイされ、下のようなシミュレーターが表示されます。
ここで、「テスト用アプリつないで」、と呼びかけます。
呼びかけ方は、
- マイクから実際に「テスト用アプリつないで」と声に出して呼びかける
- Inputの横のTextViewに、「テスト用アプリつないで」と文字を入力してReturnキーを押す
- "Suggested Input"という項目の下にある、「テスト用アプリにつないで」というボタンを押す。
の3通りがあり、どのやり方でも動きます。
「テスト用アプリつないで」、と呼びかけたら、「コケコッコー」、あるいは「カッカドゥー」とGoogle Assistantが喋ったらテストは成功です!
Default Welcome Intentは挨拶のインテントであり、ここに入力した、コケコッコーとカッカドゥーの2つのうちにランダムにどちらか1つを選んで、Google Homeがしゃべるようになります。
実機でテストする
この状態で、実は皆さんの持っているGoogle Home、あるいはAndroid携帯でもこのテストアプリが動くようになっています。
お手持ちのGoogle Home、Android携帯のGoogle Assistantの設定が現在開発に使っているGoogleアカウントと同じアカウントになっていることを確認してください。
ここが違っていると、自分で作ったアプリを実機で動作させることはできません。(シミューレターと実機は所有者が別と認識されてしまうからです。)
Googleアカウントが同じことが確認できたら、
「OK、Google、テスト用アプリにつないで!」と呼びかけて見てください。
コケコッコー、あるいはカッカドゥーと、応えが返ってきたら実機での動作も大成功です!
第4章のまとめ
Default Welcome Intentは、「「Ok グーグル、***につないで!」と話しかけて自分のActionを呼び出した時の会話の受け皿
Default Welcome IntentのResponsesに登録した挨拶のリストのなかからランダムに1つが返答として再生される
Googleアカウントが共通であれば、自分の持っている実機(Google Home, Nest Hub, Android)でテストアプリを起動できる。呼びかけ方は「OK、Google、テスト用アプリにつないで!」
お疲れ様でした!
次章は、いよいよ自分独自の会話の受け皿、Intentを一から作る方法を説明します。
第4章のおまけ
このDefault Welcome Intentは、「Ok グーグル、***につないで!」と話しかけて自分のActionを呼び出すときに必ず再生されるので、新しい機能を追加したときに本当にその修正したものがActions on Googleにディプロイされているのか確認するときにも私はよく使います。例えば「おはよう」という挨拶分を「おはよう、テスト1」などに変えると、起動したときに変わっていれば自分の修正が反映されたものをいまGoogle Homeが喋っているな、ということがわかります。
第5章:Intentの作成
この章では、会話の受け皿であるIntentを一から作っていく方法を説明します。
前章はDefault Welcome IntentというもともとあるIntentに、「コケコッコー」、「カッカドゥー」などの言葉を入れて、Google Homeから発話させるところをやりました。
このDefault Welcome Intentというのは、アクションが立ち上がったときに一番最初に”一方的に”にしゃべるIntentです。
入力:アプリ起動というイベント
出力:挨拶
というのがDefault Welcome Intentです。
この章では、”ユーザーの呼びかけの言葉に反応して何かを返すIntent”、
入力:ユーザーの何らかの呼びかけ
出力:呼びかけに応じる返答
というIntentを作成していきたいと思います。
Intentを作る
まず、右側のメニューからIntentsをクリックしてIntents一覧を開きます。
ここでCRETAE INTENTボタンをクリックします
(メニューのIntentsの右の+ボタンを押しても同じことができます。)
まずIntentの名前にwhat_is_thisという名前をつけます。
what_is_this=これはなんですか?という名前のIntentにしました。
Training phrasesに、下のようなフレーズをいれてください。
マグロって何?
ばけつは何?
サメはなんですか?
犬はなんですか?
このTraining phrasesとは何でしょうか?、これは
ユーザーが喋ってくるであろう会話の想定です。
"what_is_thisインテントで受ける会話はこういうものだよ"、という想定の例をここに列挙します。
このインテントでは、ユーザーから聞かれたものが、動物なのか、魚なのか、それ以外なのかを判定する会話を作ろうと思います。(そういう意味でwhat_is_thisという名前にしました。)
マグロって何?
などの会話が想定されるため、そのようなフレーズをここに列挙します。
ここは多ければ多いほど、会話をただしくDialog Flowが判定してくれますが、練習ですので、まずはこの4つのフレーズで始めます。
Entityを作る
次にメニューから、Entitiesを選択します。
ここでは、同じように、CREATE ENTITYボタンを押します。
ここで、animalという名前のEntity nameに設定します。
次に下のClick here to edit entityという箇所をタップし、
Enter reference valueに、イヌ
Enter synonymに、犬、いぬ、イヌを代入します。
第2章で、
Entity = こちらが知りたいキーワード
と説明しました。今回、こちらが知りたいキーワードの一つはanimal、つまり動物です。ユーザーが喋った言葉に動物が含まれているか知りたいため、animalという名前のEntityをつくりました。
それでは、動物に該当するワードが入っているかを判断するための辞書がこのanimal Entityになります。
Entityを作ったら、このEntity内に「何が動物なのか?」という辞書を作らないとけません。それが、上で説明した
イヌ : 犬、いぬ、イヌ
です。Reference value (左辺)はイヌというキーワード、右辺のsynonymが類似後です。
このentryの意味は、「犬、いぬ、もしくは、イヌという言葉をGoogle Assistantが聞き取ったら、これを”イヌ”と解釈する」という定義です。
Google Assistantは、音声を文字列に変換するため、変換された文字が漢字の場合もあればカタカナかひらがなである場合もあります。どれがきても”イヌ”と解釈されるようにこのような辞書を登録しました。
これを更に発展させて、したのように「わんちゃん」をいれてみました。
これで、「わんちゃん」という言葉がユーザーの会話に含まれていても、「イヌ」と解釈してくれるようになります。
せっかくなので、下のようにネコとクマをanimal Entityの辞書として登録しておきます。
SAVEボタンを押して一旦セーブした後、
Entitlesメニュー右の+(プラス)ボタンを押して、もう1つEntityを作ります。
fishという名前のEntityにして、サメ、マグロ、アジを登録します。
SAVEボタンを押して保存します。
Intentに戻って、フレーズをブラッシュアップ
先につくったwhat_is_this Intentに戻って作業をつづけます。
先程Training phrasesは
ユーザーが喋ってくるであろう会話の想定です。
であると説明し、「マグロって何?」、「サメはなんですか?」などのフレーズ4つをいれましたが、当然たった4つでユーザーが喋ってくる会話のすべてを想定はできませんよね?
まず考えつくのは、マグロ、サメの部分に違う動物や魚が来るであろうし、ばけつの部分に全然違う言葉、ちりとり、やかん、宇宙船など何でも入ってくる可能性があり、それを列挙したらきりがありません。
このTraining phrasesの想定の幅を一気に広げるのが先程つくったEntityです。
Entityを使ってIntentが受けられる会話の幅を広げる
Training phrasesのマグロの部分をマウスで文字をコピーするときのように選択すると、下のようにEntityのリスト出てきます。
このリストから、@fishというものを選択します。すると、下のように、マグロの部分がピンクでマーカー付され、したのように、fishというentityがついたことがわかります。
同じように、犬をマウスでクリック&ドラッグして選択し、@animalを選択します。
こうすることで、犬の部分がオレンジにマークされ、@animal Entityが割り当てられます。
こうすることで、犬の部分がオレンジにマークされ、@animal Entityが割り当てられます。
これで、
マグロって何?
とうトレーニングフレーズは、fish Entityに登録した他の魚に対しての想定も含むことになります。fish Entityにはさきほど「サメ」と」「アジ」を登録したので、「サメってなに?」と「アジって何?」という言葉も想定に含まれることになりました。fish Entityに魚の名前の辞書を追加することで追加した魚全てにこのフレーズが反応する(想定の対象とする)ようになります。
同様に
犬はなんですか?
というTraining phraseもanimal Entityに含まれる動物(ネコ、クマ)も想定にいれることになりました。
このようにして、what_is_thisインテントが受け皿として受けられるフレーズの幅がEntityによって一気に広がりました。
それでは、残りのサメはなんですか?のサメの部分にも@fish Entityを割り当てましょう。
また、ここまできて、2つのフレーズが抜けているのに気づきましたので、いかのフレーズを足してください。
犬って何?
ばけつはなんですか?
「犬って何?」の犬の部分に@animal Entityを割り付けます。
今、皆さんのTraining phrasesはこのようになっていると思います。オレンジのところに@animal(動物のEntity)、ピンクのところに@fish(魚のEntity)が割り当てられています。
System Entityを使ってIntentが受けられる会話の幅をさらに広げる
次に、
ばけつはなんですか?
ばけつってなに?
の「ばけつ」のところにEntityを割り当てます。
ばけつの部分をマウスで選択し、リストのなかにある@sys:anyというSystem Entityを選択します。
この@sys.anyとは、「any=すべての単語」を意味するEntityであり、この部分には「ありとあらゆる単語が来ます」という想定をつくることができます。
このように定義することで、@animal Entityでも@fish Entityでも想定していないフレーズで「***って何?」、あるいは「***はなんですか?」というフレーズがきたら、すべてこの@sys:anyを使ったフレーズが受け皿として機能するようになります。
最終的にこのようなTraining phrases (フレーズの想定)が出来上がりました。
ここまでで、このwhat_is_thisエンティティが
「***って何?」
と
「***はなんですか?」
の2つのフレーズを受けることができるようになりました。
次にこの受けたフレーズから、応答を作るステップに移ります。
応答を作る
では、次章からWebhookを作成します。前章のDefault Welcome Intentでは、Intentの中のResponseに応答のリストを入れることでDialogFlowから直接応答をするように作りました。
次章は、下の図のように、DialogFlowからWebhookであるFirebase Functionsを介して、応答を作る方法を説明します。
Webhookをオンにする
次章への準備として、what_is_thisインテントがWebhookへリクエストを王来るような設定をしておきます。
what_is_thisインテントのFulfillmentというセクションに移動して、
Enable webhook call for the intentというボタンをOnにします。
お疲れさまでした!、非常に長い回だったので、一度休憩を取ってください!
第5章のまとめ
入力(ユーザーの何らかの呼びかけ)、に対して出力(呼びかけに応じる返答)、をつくるwhat_is_thisインテントを作成した。
Training phrasesには、”ユーザーが喋ってくるであろう会話の想定”を列挙する
フレーズの中で抽出したいキーワードをEentityに割り当てる
Entityは抽出したいキーワードの候補の集合(辞書)
Entityを割り当て得ることでTraining phraseの受け皿の幅を広げる
もともと用意されているシステム Entityのなかの@sys:anyエンティティはあらゆる単語を候補としたEntity
第6章:Webhookの作成
前章までで、Google Homeが会話を受ける部分を全部作ってきました、この章からいよいよ、返答を作る部分にはいります。
第2章で説明しましたが
Webhook ≒ Firebase Functions
ですので、Firebase Functionsの開発環境をセットアップするところから始めたいと思いますが、まず後の章のためにInteractive Canvasの機能を有効にします。
Interactive Canvas機能を有効にする
Interactive Canvasとは、Google Nest Hub以降のディスプレイを持ったスマートスピーカーで、ディスプレイにグラフィカルユーザーインターフェースを表示するための仕組みです。
この機能を使うと、ちょうどソフトバンクロボティクスのPepperが話しながら胸についたタッチパネルに絵やボタンを出したりするように、
Google Assitantも話しながら、ディスプレイに写真やボタンなどのグラフィカルなユーザーインターフェースを表示することができます。
このマガジンでは、後の章でこのInteractive Canvasの開発方法を紹介するため、まず、この時点でInteractive Canvasが使えるプロジェクトを作っておきましょう。
まず、Actions on Google コンソールに行きプロジェクトを選択します。
https://console.actions.google.com
DeployタブからDirectory Informationに移動し、
Categoryから、Games & funを選びます。
そして、このページを下にスクロールしていき、Interactive Canvasの下のYesのところのチェックマークをマークします。
(2020年1月現在、Interactive CanvasはまだGame & funカテゴリーのアクションしか認められていません。他のカテゴリーでもInteractive Canvasが使えるようになるまでもう少し待つ必要があるかもしれません。)
Firebase Command-line Interfaceのインストール
次にFirebaseのコマンドが使えるように、下のコマンドを実行してFirebase Command-line Interfaceをインストールします。
npm -g install firebase-tools
(npmのパーミション設定によっては、sudoをつける場合もあります)
npm(Node.js)のインストールがされていない方は、こちらからインストールしてから上のコマンドを実行してみてください。)
Firebase Functionsプロジェクトの作成
まず、自分のコンピューター上にプロジェクトのディレクトリを作成し、そのディレクトリの下に移動します(以下Mac OSのターミナル(bash)でのコマンド例です)
$ mkdir parrot
$ cd parrot
次に、firebase initを実行して、プロジェクトを作成します。
$ firebase init