
プログラミングBot Framework (マイクロソフト関連書)
- 作者: Joe Mayo,大澤文孝、清水美樹
- 出版社/メーカー: 日経BP社
- 発売日: 2018/10/27
- メディア: 単行本
- この商品を含むブログを見る
を読んだのだが、Node.js ではなく C# が開発言語の前提だった。
フロントエンドのボット(チャネル)は何でもよい、という建前の汎用的なフレームワークなので、アーキテクチャは小難かったが大体理解はできた。
しかし Line、Alexa などの勝ち組は、わざわざマイクロソフトの相手をする気もなさそうであり、実質的に Cortana、Skype、Slack ぐらいしか繋がりそうもない。
開発言語 TypeScript / JavaScirpt (Node.js) の場合
たまたま読んでいた
では、Node.js での説明があった。
ほとんど同じであり、難しくもなかったが記録しておく。
Bot Framework Emurator インストール
ボット・フレームワーク・エミュレータ本体は、以前に GItHub からダウンロードしてインストールしていた。
が、他に Home · microsoft/BotFramework-Emulator Wiki · GitHub の Resources にあるようなものが必要らしい。
このうち Bot Builder V4 SDK は開発言語別となっているので、Node.js の場合には npm でインストールすることになる。
まずはサンプルプログラム用のレポジトリとプロジェクトを用意
プロジェクト名は BotFrameworkSample とした。
GItHub でレポジトリ生成するさいに、Node.js 用の.gitignore を生成させたところ、ひとくハマってしまった。(ロス2時間)
Bot Builder V4 SDK を追加
MSDN のブログも発見したので、
と見比べながら設定を進めた。
前者のブログには
ローカル環境で開発をする方法について紹介します。
とあるので内容的にちょうどよかった。
Git はさきほど設定したので git init は飛ばして、その後の手順を忠実に実行。
entry point は app.js としてください。
がポイントらしい。
SDK を取得すると、node_modules 配下に大量にファイルが追加されたので、.gitignore ファイルを作成&記述して GIt 管理下からnode_modules 配下を外した。
サンプルプログラムを追加
先ほどのブログの途中で、別のブログのページに飛び、そこにある説明どおりにエコーボットを作成した。
Yeoman と JavaScript のジェネレーターをインストールします。
ジェネレーターを使用してエコー ボットを作成します。
Yeoman を使って、サンプルプログラムの生成すらも完全自動化している。
これには自己診断機能があるらしく、全て問題なし!と言い切ってくれた。
Yeoman Doctor
Running sanity checks on your system
√ Global configuration file is valid
√ NODE_PATH matches the npm root
√ Node.js version
√ No .bowerrc file in home directory
√ No .yo-rc.json file in home directory
√ npm version
√ yo version
Everything looks all right!
これは、安心だ(嘘じゃなければネ…)
ジェネレーターを使用してエコー ボットを作成
途中で TypeScript か JavaScript か選ばされた。
本心は TypeScript なのだが、今は手順どおりに稼働確認を優先するため、JavaScript を選択しておく。
JavaScript を選択したのに、Python 実行ファイルが見つからないとのエラー
最終的には
------------------------
Your new bot is ready!
------------------------
Open the README.md to learn how to run your bot.
Thank you for using the Microsoft Bot Framework.
と出力されているので問題ないと思うが、途中で Python 環境に関するものらしきエラーが出力されているので、一応記録はしておく。
E:\Users\tombi\Projects\BotFrameworkSample\my-chat-bot\node_modules\dtrace-provider>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack at PythonFinder.failNoPython (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:484:19)
gyp ERR! stack at PythonFinder.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:509:16)
gyp ERR! stack at C:\Program Files\nodejs\node_modules\npm\node_modules\graceful-fs\polyfills.js:284:29
gyp ERR! stack at FSReqWrap.oncomplete (fs.js:153:21)
gyp ERR! System Windows_NT 10.0.17134
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd E:\Users\tombi\Projects\BotFrameworkSample\my-chat-bot\node_modules\dtrace-provider
gyp ERR! node -v v10.15.3
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
エコーボットの生成を完了
参照先のブログ Bot Framework SDK for JavaScript を使用してボットを作成する - Bot Service | Microsoft Docs では npm start で起動と書かれており、
参照元のブログ Node.js ではじめる Bot 開発 (基本編) – monoe's blog では node app.js で起動と書かれている。
とりあえず参照元のほうの手順で実行したが、モジュールが発見できないとのこと。
node app.js
internal/modules/cjs/loader.js:584
throw err;
^
Error: Cannot find module 'E:\Users\tombi\Projects\BotFrameworkSample\app.js'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:582:15)
at Function.Module._load (internal/modules/cjs/loader.js:508:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
app.js の場所を確認してみたところ、BotFrameworkSample 直下ではなくて、サブディレクトリの my-chat-bot 配下に生成されていた。
しかも my-chat-bot 配下にも、それ専用の package.json ファイルが二重に存在するという最悪な事態に w
トラブルの匂いがプンプンする・・・
エコーボットを起動
とりあえず稼働確認だけなので、あまり手間をかけたくない。
参照先のブログでは、作成したボットのディレクトリに移動して npm start で起動と書かれていたので、その手順で、そのとおりにやってみる。
起動して、対話待ちになった。いちおう成功といえそうだ。
npm start
> myChatBot@1.0.0 start E:\Users\tombi\Projects\BotFrameworkSample\my-chat-bot
> node ./index.js
restify listening to http://[::]:3978
Get Bot Framework Emulator: https://aka.ms/botframework-emulator
To talk to your bot, open the emulator select "Open Bot"
ポート 3978 でリスンしているとのこと。参照元のブログのほうに戻る。
Bot エミュレーターでの実行(失敗)
ウィンドウ上部の「Enter your endpoint URL」をクリック
は最新のエミュレータには存在せず、かわりに「Open Bot」ボタンがあったので、これに読み替えて手順どおり実施した。
http://localhost:3978/api/messages
・・・しかしエミュレータは何も反応せず、繋がってはいないように思えた。
さきほどの起動メッセージにある
restify listening to http://[::]:3978
がすげえ怪しい・・・
Bot エミュレーターでの実行(失敗)
いきなり「Open Bot」ボタンではなくて、ボット設定ファイルを先に作ってから、Open Bot する方法に変えてみた。
真っ白な画面が表示されており、メッセージ入力欄すらも出てこない。
Converstion - Send System Activity - ping
を送ってみたが、画面のほうもサーバ側ボットの方も、微動だにしなかった。
これは長引きそうだ…
エミュレータ、サーバのどちらとも停止した。
両方とも再起動したら、あっさり治った。
Windows といえば再起動。サーバ、エミュレータの順に再起動した。
あっさり治った。
restify listening to http://[::]:3978 は犯人ではなかったらしい。