20201024のNode.jsに関する記事は7件です。

Node.js Express4 でエラー "request entity too large" 発生時の対応法

現象

Node.js + Express4 で Request body に JSON 形式の大量のデータ(100kb以上)を添付すると、
HTTP Response で 400 Bad Request , error: "request entity too large" が発生した。

発生時環境:
* Node.js 12.19.0
* TypeScript 4.0.3
* express 4.17.1

(プロジェクトは express-generator-typescript 1.7.1 で作成)

解決策

Express の初期設定時に、下記のように Request body size の上限を大きく設定する。

Server.ts
app.use(express.json({ limit: '100mb' }));

原因

Express 4 の Request Body サイズ上限のデフォルト値が 100kb であるため。
Express の API リファレンスに記載されています。)

謝辞

こちらも参考にしました。(ですが、執筆時では middleware の body-parser の設定を変更する必要はありませんでした。)
* https://qiita.com/PianoScoreJP/items/3fbcebc43ebf821074d8
* https://qiita.com/Safire/items/dee77bf01fe35deb1535

補足

上記の解決策は、 Request body の Content-Type が JSON の場合の対応ですが、
raw データを受信する場合は、

app.use(express.raw({ limit: '10gb' });

url-encoded データを受信する場合は、

app.use(express.urlencoded({ limit: '100tb' });

のように設定すれば良いようです。(これらは未確認)
詳細は、Express の API リファレンスを参照してください。
また、指定可能な補助単位(k,g,t, etc.) はbytesを参照してください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

node.jsでneo4jを使ってみる

neo4jドライバーのインストール

#npm install neo4j-driver

neo4jサーバーへの接続

const neo4j = require('neo4j-driver')

const driver = neo4j.driver("bolt://サーバーアドレス:7687", neo4j.auth.basic("ユーザー名", "パスワード"))
const session = driver.session()
const personName = 'Alice'

try {
  const result = await session.run(
    'CREATE (a:Person {name: $name}) RETURN a',
    { name: personName }
  )

  const singleRecord = result.records[0]
  const node = singleRecord.get(0)

  console.log(node.properties.name)
} finally {
  await session.close()
}

// on application exit:
await driver.close()

参考:https://neo4j.com/developer/javascript/
APIマニュアル:https://neo4j.com/docs/api/javascript-driver/4.1/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Electron-Builderでnode.jsのパッケージを含めてビルドする際の注意点

screen0010.png

ElectronとExpressを使ったアプリを開発していたのだが、Electron-builderを使ってパッケージ化した際に、設置したはずのexpressが見つからないというエラーが表示された。

調べてみると、どうやらプロジェクト毎のnode_modulesnpm install --save-dev expressではなく、環境毎のnode_modulesnpm install --save expressである必要があるそうだ。

ちなみに、npm install --save expressでインストールした後にパッケージ化したものは、ちゃんとパッケージ内にexpressが内包されているらしく、別端末からも起動できた。

...
  "devDependencies": {
    "electron": "^10.1.4",
    "electron-builder": "^22.9.1"
  },
  "dependencies": {
    "express": "^4.17.1"
  },
...
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails6でサーバーを立ち上げるまで(環境構築)

Rails6で$ rails s をしてもエラーが出る

ProgateのRuby on Rails環境構築をやってみました。
Ruby on Railsの環境構築をしてみよう!(macOS)

Progateで扱っているバージョンは5.2.4.1で、自分はバージョン6を使用したかったため、バージョンのところだけ6.0.3.4としました。
(Rubyのバージョンは2.6.6を使用しました)

そして無事最後まで行き、$ rails s のコマンドを実行すると...エラーが出ました。
=> Booting Puma
=> Rails 6.0.3.4 application starting in development
(省略)
Webpacker configuration file not found /Users/name/Desktop/ruby_lesson/sample_app/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /Users/name/Desktop/ruby_lesson/sample_app/config/webpacker.yml (RuntimeError)

どうやらWebpackerというものが必要だとのこと。
実際に調べてみると、Rails6ではwebpackerが標準になったそうです。

参考にした記事
Rails6サーバー起動時webpackerエラー(Node.jsアップデート, yarnインストール)
Rails6 開発時につまづきそうな webpacker, yarn 関係のエラーと解決方法

上記の記事を読み、$ rails webpacker:install を実行しました。しかしこれもエラー...
node: command not found
nodejs: command not found
Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/

Node.jsがダウンロードされていないようだったので、ダウンロードしました。
Node.jsのHP

インストールまでの流れは下記を参照。
Node.jsをインストールする

nodeとnpmのバージョン確認をコマンドで行い、
再び、$ rails webpacker:installを実行すると...

Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/

今度はyarnをインストールしろとのこと。
$ brew install yarn を実行。
(なぜ上記のコマンドになるのかは分かりません...いろんなコマンドを試しましたが、上記でやっとインストール成功しました)

$ yarn -v でバージョン確認しインストールできていることが分かりました。

そしてやっと、$ rails webpacker:install を実行。
Webpacker successfully installed ? ?が表示されました!!

$ rails sでエラーは出ていないのにサーバーが起動しない

やっと最初の目的だった $ rails s を実行。
エラー文出てない!!!
あとはProgateの記事どおりブラウザでlocalhost:3000をURLに入れるだけ...

入れてみるとブラウザにはあの画面が表示されません...
なぜか分からず、調べてみると、こちらの記事にたどり着きました。
Rails 6 で rails s をすると起こる Webpacker エラーを解決

$ rails s -b 0.0.0.0 をして、
localhost:3000ではなく、上記コマンド実行後に出てくるIPを入力しました。

そうするとあの画面が出てきました!
成功のようです!

※その後コマンドを閉じて、$ rails sをしてlocalhost:3000にアクセスすると、立ち上げ成功しました。

yarnインストールまでの流れはしっくりきましたが、その後の流れについてはよく理解できませんでした。
とりあえず環境構築はできたということで、学習を進めていこうと思います。

Rails6の環境構築に苦戦されているプログラミング初学者の方が一人でも救われましたら幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

? MS Teams 開発の初心者向けガイド その2: Bots

こんにちは。Microsoft Teams 開発シリーズ前回のチュートリアルを楽しんでもらえたことをを願っています。

これは、初心者シリーズの第二弾です。今回は、対話式のチャットボットを構築する方法を説明します。
2-bots-cover-1000x420.png
Teams アプリの作成方法を学ぶ方法にはさまざまな道のりがあるのですが、このチュートリアルでは、コンセプトを学んでもらうことを重視したいので、最低限のコードと最小限のツールセットを使用しています。また、マイクロソフト Azure から Bot をセットアップすることもできますが、今回はそのプロセスを使わず、どの環境でも実行することができます。 (MS 社員だから、ほんとは Azure の宣伝したほうがよいのだけど ?)


前回のチュートリアルでは、Teams クライアントにタブを埋め込む方法を紹介しましたが、このチュートリアルでは、全く異なる機能、botsを紹介します。

チームの機能: 「Bot」

タブ、メッセージ・エクステンション、など Teams アプリではいろいろな機能がありますが使えますが、Bot をうまく使えば、Teams 内でさまざまなワークフローを自動でやってもらうことができます。
Bot がコマンドをアクションに変換し、たとえば、タスクの生成、コードのレビュー、管理チケットのステータスの確認などを行う、などといったことができるようになります。
MS Teams bots

このチュートリアルで今からすること

さて、今から作っていくのは、みなさんが入力した言葉を、ただただ後ろから言って返すという単純な bot を作成します。正直これはまったく役に立つ bot ではないのですが、これがきっかけで、みなさんがもっといいアイデアを生むことを期待してます。

  1. App Studioでアプリを構成する
  2. ブラウザでうごく IDE でコードを設定し、実行する
  3. ボットフレームワークを使ってBot の会話を処理

最終的な結果は次のようになります。
bot-app-ja.png

? 必須科目

Teams にアプリをインストールできるようにするには、組織の管理者がアクセス許可を付与する必要があります。
それ以外の場合は、無料のMicrosoft 365 開発者プログラム に登録しましょう。このプログラムでは、開発者テナントのサンドボックス、サンプル データ パックに付属しているモック ユーザーデータなどが使え、サブスクリプションはなどでもリニューアルできます。

  • 開発の許可がある Teams テナント、または開発専用テナント (M365 開発者プログラムにサインアップしよう
  • App Studio - チームクライアントのアプリメニューからアプリを探し、テナントのワークスペースにインストールしてね
  • Node.js の基礎知識

Building a chat bot

? コード サンプルの取得

このチュートリアル シリーズでは、プロジェクトのコードのホスティングと実行を簡略化するために、サードパーティのツール、Glitchを使用しています。

Glitch は、node.jsコードを記述して実行できるWebベースのIDEなので、少なくとも今のところ、localhostのトンネル、デプロイを気にすることなく、Teamsアプリ開発の概念と基本を学ぶことに集中できます。(Glitch はチュートリアルのために使っていますが、本来は開発に必要ありません。今後ゆくゆく Azure へのデプロイも含め、しっかりカバーしていきたいと思います。)

まず、この Glitch プロジェクトの remix ができるリンクをクリックしてください。リミックスとは GitHub で言うところのリポジトのをフォークのようなようなもので、自分用のプロジェクトのコピーが生成されるため、元のコードに影響なく自分用に好きなように変更できます。
Remix on Glitch
さて、自分専用プロジェクトのリポを取得すると、自動的に独自のWebサーバーURLを取得します。たとえば、生成されたプロジェクトは、3単語ほどでできたランダムな語で構成されています。たとえばそのプロジェクト名が achieved-diligent-bell だったら、ウェブサーバーのURLは https://achieved-diligent-bell.glitch.me になります。必要に応じて名前をカスタマイズすることもできます。
glitch project name

⚙️ App Configuration: App Studioを使ってアプリ マニフェストを作成

Teams 用のアプリを作成する場合は、Teams クライアントにインストールするアプリ パッケージを作成する必要があります。パッケージには以下が含まれます。

? your-app-package
    └── ? manifest.json
    └── ? color.png (192x192)
    └── ? outline.png (32x32)

残りの、アプリに必要なコードと画像などのアセットは、Web サーバーでホストする必要があります。(このチュートリアルでは、 Glitch からアプリを自動的にランするので特別なサーバの必要はありませんが、将来的に自分でアプリを作成する場合は用意してください。)
現時点ではマニフェスト ファイルを手動で作成するのではなく、App Studio というビジュアル ツールを使用してチーム クライアントに直接アプリ パッケージを作成、インストールできるようにします。

? Using App Studio

App Studio をまだインストールしていない方はインストール、すでにした場合は App Studio を開きます。

App Studio 上部の Manifest Editor(マニフェスト エディター) タブをクリックし、Create a new app(新しいアプリの作成)を選択します。

 App URLs セクションで、プライバシーと利用規約の Web ページ URL も入力します。この例では、プレースホルダ URL である、https://example.comを使用していますが、公開するアプリを開発する場合は、フェイクではない URL が必要になってきます。

そして Generate ボタンをクリックして App ID を生成してください。
bot-appstudio-01-details.png

? Configuring a bot

左側のメニューから、 Capabilities > Bots を選択

次に Set up をクリックして新しい bot を設定します。

Bot 名を入力し、ここでは Personal スコープを選択します。この個人用、パーソナル・ボットでは、bot と単一ユーザーの間で会話を行うことができます。 (スコープの詳細については、 Conversation basics 参照。)
bot-appstudio-02-new-bot.png
次に Generate new password ボタンをクリックします。ダイアログが開いたら、そこで表示されるパスワードをコピーしてください。次のステップに必要になります。
bot-appstudio-03-bot.png

? App credentials

ボット名の横にある ID (2cd53e8a-e698-4exx-... のような文字列) をコピーし、隠しファイルである.envファイルに環境変数として貼り付けます (.env-sample の名前を .env に変更します)。

App Passwordsの下で新規パスワードを生成し、それをコピーし、これも .env ファイルに貼り付けます。

これらの情報は、bot アダプターを初期化するために使用されます。(index.js を参照してください。

Messaging Endpoint で、bot サーバーを入力します。今回は、Glitch サーバ上でコードを動かしているので、 https://[your project].glitch.me/api/messages のように自分のプロジェクト名が入った URL がサーバとなります。

? App manifest package をインストール

Finish > Test and distribute へ行きます。

エラーが発生した場合は、それを修正してください、そうでなければ、Install をクリックしてクライアントにインストールしてください。
bot-appstudio-04-install.png
また、後でインストール、または配布するために、manifest.json と 2 つのアイコン画像を含む zip ファイルをダウンロードすることもできます。

チュートリアル通り、Glitch コード サンプルをリミックスしている場合は bot は既に動作するはずです。

でも bot を試す前に、これがどのようにコーディングされているかを簡単に説明してみましょう。

? Microsoft Bot Framework

マイクロソフト Bot Framework は、エンタープライズ・グレードの bot を構築できるオープンソース SDK です。

この SDK は、Teams だけでなく、Web やモバイル チャット、Skype、Facebook、Amazon Alexa、Slack、Twilio など、幅広い種類のチャット ボットで動作するように設計された強力なプラットフォームです。

? Initiating the bot service

まず、Glitch コードサンプルのリポジトリには、index.js、および bots.js に 2 つの JS ファイルがあります。

*注: Glitch は、事前定義された package.json からすべての依存モジュールを自動的にインポートするので、パッケージを手動でインストールする必要はありません。

index.js では、botbuilder ライブラリ、および HTTP サーバーと HTTP ルーティング要求を設定するためのライブラリを含める必要があります。ここでは私は Express を使用していますが、Restify など、他のものを使用することができます。

index.js:

// Import Express & set up HTTP server
const express = require('express');
const app = express();
const server = app.listen(process.env.PORT || 3978);

// Import bot services
const { BotFrameworkAdapter } = require('botbuilder');

// Bot's main dialog
const { ReverseBot } = require('./bot');

注: この例では、私は botbuilder のバージョン4.10.0を使用しています。コードが期待どおりに動作しない場合は、使用しているバージョンを確認してください!

次に、bot がユーザーと通信し、応答を送信できるようにするアダプターをセットアップします。

const adapter = new BotFrameworkAdapter({
  appId: process.env.MicrosoftAppId,
  appPassword: process.env.MicrosoftAppPassword
});

// Error handlings (See the Glitch sample for details!)

// Create the main dialog
const myBot = new ReverseBot();

? Bot ロジックへの要求の転送

Express を使用して、着信要求をリスニングするルーティングを処理します。

app.post('/api/messages', (req, res) => {
  adapter.processActivity(req, res, async context => {
    await myBot.run(context);
  });
});

前の手順で、 App Studio で URL を設定しました。/api/messages は、クライアント要求に応答するアプリケーションのエンドポイント URL です。

? 要求の処理とボットの返信の投稿

エンドポイントで要求を受信し、ボット ロジックに転送すると、アプリは要求のコンテキストを受け取り、bots.js でカスタム応答を作成します。

要求に対する適切なハンドラーを作成するために拡張された TeamsActivityHandler を参照してください。

const { TeamsActivityHandler, MessageFactory } = require('botbuilder');

class ReverseBot extends TeamsActivityHandler {
  constructor() {
    super();
    this.onMessage(async (context, next) => {
      const backward = [...context.activity.text].reverse().join(''); // reverse string
      const replyText = `? *${ backward }*`; // you can use markdown
      await context.sendActivity(MessageFactory.text(replyText));

      await next();
    });
  }
}

TeamsActivityHandler は、メッセージ イベント (*例えば onMembersAdded メソッドが会話にメンバーが追加されるたびに呼び出される) などのメッセージを処理し、返信を送信するチーム固有のクラスです。

例では、メッセージがクライアントに送信されると、onMessage がトリガーされ、メッセージ テキストを取得して、カスタム応答を作成するために使用できます。

?? Trying your bot

それでは、ボットを試してみましょう! Teams クライアントに移動し、左側のメニューバーからボットを起動するをクリックします。
すべてがちゃんと動作する場合は、次のように bot と会話できるはずです ??
bot-app-ja.png

この例では、テキスト返信を送信する方法のみを示しますが、ボタンやその他の UI コンポーネントを使用して、よりインタラクティブなメッセージを作成できます。これについては後で詳しく説明してゆきたいと思っています。

さて、チュートリアルを楽しんでいただけましたか?ぜひこれよりも良いユースケースを見つけて、素晴らしいアプリを作成することを願っています!

では、また次回 ?

?? この記事を英語で読みたいという方は dev.to のリンクからどうぞ!


? Learn more

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

? Microsoft Teams 開発の初心者向けガイド その2: Bots

こんにちは。Microsoft Teams 開発シリーズ前回のチュートリアルを楽しんでもらえたことをを願っています。

これは、初心者シリーズの第二弾です。今回は、対話式のチャットボットを構築する方法を説明します。
2-bots-cover-1000x420.png
Teams アプリの作成方法を学ぶ方法にはさまざまな道のりがあるのですが、このチュートリアルでは、コンセプトを学んでもらうことを重視したいので、最低限のコードと最小限のツールセットを使用しています。また、マイクロソフト Azure から Bot をセットアップすることもできますが、今回はそのプロセスを使わず、どの環境でも実行することができます。 (MS 社員だから、ほんとは Azure の宣伝したほうがよいのだけど ?)


前回のチュートリアルでは、Teams クライアントにタブを埋め込む方法を紹介しましたが、このチュートリアルでは、全く異なる機能、botsを紹介します。

チームの機能: 「Bot」

タブ、メッセージ・エクステンション、など Teams アプリではいろいろな機能がありますが使えますが、Bot をうまく使えば、Teams 内でさまざまなワークフローを自動でやってもらうことができます。
Bot がコマンドをアクションに変換し、たとえば、タスクの生成、コードのレビュー、管理チケットのステータスの確認などを行う、などといったことができるようになります。
MS Teams bots

このチュートリアルで今からすること

さて、今から作っていくのは、みなさんが入力した言葉を、ただただ後ろから言って返すという単純な bot を作成します。正直これはまったく役に立つ bot ではないのですが、これがきっかけで、みなさんがもっといいアイデアを生むことを期待してます。

  1. App Studioでアプリを構成する
  2. ブラウザでうごく IDE でコードを設定し、実行する
  3. ボットフレームワークを使ってBot の会話を処理

最終的な結果は次のようになります。
bot-app-ja.png

? 必須科目

Teams にアプリをインストールできるようにするには、組織の管理者がアクセス許可を付与する必要があります。
それ以外の場合は、無料のMicrosoft 365 開発者プログラム に登録しましょう。このプログラムでは、開発者テナントのサンドボックス、サンプル データ パックに付属しているモック ユーザーデータなどが使え、サブスクリプションはなどでもリニューアルできます。

  • 開発の許可がある Teams テナント、または開発専用テナント (M365 開発者プログラムにサインアップしよう
  • App Studio - チームクライアントのアプリメニューからアプリを探し、テナントのワークスペースにインストールしてね
  • Node.js の基礎知識

Building a chat bot

? コード サンプルの取得

このチュートリアル シリーズでは、プロジェクトのコードのホスティングと実行を簡略化するために、サードパーティのツール、Glitchを使用しています。

Glitch は、node.jsコードを記述して実行できるWebベースのIDEなので、少なくとも今のところ、localhostのトンネル、デプロイを気にすることなく、Teamsアプリ開発の概念と基本を学ぶことに集中できます。(Glitch はチュートリアルのために使っていますが、本来は開発に必要ありません。今後ゆくゆく Azure へのデプロイも含め、しっかりカバーしていきたいと思います。)

まず、この Glitch プロジェクトの remix ができるリンクをクリックしてください。リミックスとは GitHub で言うところのリポジトのをフォークのようなようなもので、自分用のプロジェクトのコピーが生成されるため、元のコードに影響なく自分用に好きなように変更できます。
Remix on Glitch
さて、自分専用プロジェクトのリポを取得すると、自動的に独自のWebサーバーURLを取得します。たとえば、生成されたプロジェクトは、3単語ほどでできたランダムな語で構成されています。たとえばそのプロジェクト名が achieved-diligent-bell だったら、ウェブサーバーのURLは https://achieved-diligent-bell.glitch.me になります。必要に応じて名前をカスタマイズすることもできます。
glitch project name

⚙️ App Configuration: App Studioを使ってアプリ マニフェストを作成

Teams 用のアプリを作成する場合は、Teams クライアントにインストールするアプリ パッケージを作成する必要があります。パッケージには以下が含まれます。

? your-app-package
    └── ? manifest.json
    └── ? color.png (192x192)
    └── ? outline.png (32x32)

残りの、アプリに必要なコードと画像などのアセットは、Web サーバーでホストする必要があります。(このチュートリアルでは、 Glitch からアプリを自動的にランするので特別なサーバの必要はありませんが、将来的に自分でアプリを作成する場合は用意してください。)
現時点ではマニフェスト ファイルを手動で作成するのではなく、App Studio というビジュアル ツールを使用してチーム クライアントに直接アプリ パッケージを作成、インストールできるようにします。

? Using App Studio

App Studio をまだインストールしていない方はインストール、すでにした場合は App Studio を開きます。

App Studio 上部の Manifest Editor(マニフェスト エディター) タブをクリックし、Create a new app(新しいアプリの作成)を選択します。

 App URLs セクションで、プライバシーと利用規約の Web ページ URL も入力します。この例では、プレースホルダ URL である、https://example.comを使用していますが、公開するアプリを開発する場合は、フェイクではない URL が必要になってきます。

そして Generate ボタンをクリックして App ID を生成してください。
bot-appstudio-01-details.png

? Configuring a bot

左側のメニューから、 Capabilities > Bots を選択

次に Set up をクリックして新しい bot を設定します。

Bot 名を入力し、ここでは Personal スコープを選択します。この個人用、パーソナル・ボットでは、bot と単一ユーザーの間で会話を行うことができます。 (スコープの詳細については、 Conversation basics 参照。)
bot-appstudio-02-new-bot.png
次に Generate new password ボタンをクリックします。ダイアログが開いたら、そこで表示されるパスワードをコピーしてください。次のステップに必要になります。
bot-appstudio-03-bot.png

? App credentials

ボット名の横にある ID (2cd53e8a-e698-4exx-... のような文字列) をコピーし、隠しファイルである.envファイルに環境変数として貼り付けます (.env-sample の名前を .env に変更します)。

App Passwordsの下で新規パスワードを生成し、それをコピーし、これも .env ファイルに貼り付けます。

これらの情報は、bot アダプターを初期化するために使用されます。(index.js を参照してください。

Messaging Endpoint で、bot サーバーを入力します。今回は、Glitch サーバ上でコードを動かしているので、 https://[your project].glitch.me/api/messages のように自分のプロジェクト名が入った URL がサーバとなります。

? App manifest package をインストール

Finish > Test and distribute へ行きます。

エラーが発生した場合は、それを修正してください、そうでなければ、Install をクリックしてクライアントにインストールしてください。
bot-appstudio-04-install.png
また、後でインストール、または配布するために、manifest.json と 2 つのアイコン画像を含む zip ファイルをダウンロードすることもできます。

チュートリアル通り、Glitch コード サンプルをリミックスしている場合は bot は既に動作するはずです。

でも bot を試す前に、これがどのようにコーディングされているかを簡単に説明してみましょう。

? Microsoft Bot Framework

マイクロソフト Bot Framework は、エンタープライズ・グレードの bot を構築できるオープンソース SDK です。

この SDK は、Teams だけでなく、Web やモバイル チャット、Skype、Facebook、Amazon Alexa、Slack、Twilio など、幅広い種類のチャット ボットで動作するように設計された強力なプラットフォームです。

? Initiating the bot service

まず、Glitch コードサンプルのリポジトリには、index.js、および bots.js に 2 つの JS ファイルがあります。

*注: Glitch は、事前定義された package.json からすべての依存モジュールを自動的にインポートするので、パッケージを手動でインストールする必要はありません。

index.js では、botbuilder ライブラリ、および HTTP サーバーと HTTP ルーティング要求を設定するためのライブラリを含める必要があります。ここでは私は Express を使用していますが、Restify など、他のものを使用することができます。

index.js:

// Import Express & set up HTTP server
const express = require('express');
const app = express();
const server = app.listen(process.env.PORT || 3978);

// Import bot services
const { BotFrameworkAdapter } = require('botbuilder');

// Bot's main dialog
const { ReverseBot } = require('./bot');

注: この例では、私は botbuilder のバージョン4.10.0を使用しています。コードが期待どおりに動作しない場合は、使用しているバージョンを確認してください!

次に、bot がユーザーと通信し、応答を送信できるようにするアダプターをセットアップします。

const adapter = new BotFrameworkAdapter({
  appId: process.env.MicrosoftAppId,
  appPassword: process.env.MicrosoftAppPassword
});

// Error handlings (See the Glitch sample for details!)

// Create the main dialog
const myBot = new ReverseBot();

? Bot ロジックへの要求の転送

Express を使用して、着信要求をリスニングするルーティングを処理します。

app.post('/api/messages', (req, res) => {
  adapter.processActivity(req, res, async context => {
    await myBot.run(context);
  });
});

前の手順で、 App Studio で URL を設定しました。/api/messages は、クライアント要求に応答するアプリケーションのエンドポイント URL です。

? 要求の処理とボットの返信の投稿

エンドポイントで要求を受信し、ボット ロジックに転送すると、アプリは要求のコンテキストを受け取り、bots.js でカスタム応答を作成します。

要求に対する適切なハンドラーを作成するために拡張された TeamsActivityHandler を参照してください。

const { TeamsActivityHandler, MessageFactory } = require('botbuilder');

class ReverseBot extends TeamsActivityHandler {
  constructor() {
    super();
    this.onMessage(async (context, next) => {
      const backward = [...context.activity.text].reverse().join(''); // reverse string
      const replyText = `? *${ backward }*`; // you can use markdown
      await context.sendActivity(MessageFactory.text(replyText));

      await next();
    });
  }
}

TeamsActivityHandler は、メッセージ イベント (*例えば onMembersAdded メソッドが会話にメンバーが追加されるたびに呼び出される) などのメッセージを処理し、返信を送信するチーム固有のクラスです。

例では、メッセージがクライアントに送信されると、onMessage がトリガーされ、メッセージ テキストを取得して、カスタム応答を作成するために使用できます。

?? Trying your bot

それでは、ボットを試してみましょう! Teams クライアントに移動し、左側のメニューバーからボットを起動するをクリックします。
すべてがちゃんと動作する場合は、次のように bot と会話できるはずです ??
bot-app-ja.png

この例では、テキスト返信を送信する方法のみを示しますが、ボタンやその他の UI コンポーネントを使用して、よりインタラクティブなメッセージを作成できます。これについては後で詳しく説明してゆきたいと思っています。

さて、チュートリアルを楽しんでいただけましたか?ぜひこれよりも良いユースケースを見つけて、素晴らしいアプリを作成することを願っています!

では、また次回 ?

?? この記事を英語で読みたいという方は dev.to のリンクからどうぞ!


? Learn more

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Node.jsを使ってコマンドライン引数を取得する

コマンドラインから引数を取得するにはprocess.argvを使用する。

test.js
console.log(process.argv)

出力結果

$ node playground/test.js a a a a a a a
[
  '/usr/local/bin/node',
  '/Users/yutakaf/Desktop/git/weather_app/playground/test.js',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a',
  'a'
]

process.argv0の元の値にアクセスするargv[0]必要があるかどうかを確認します。
2番目の要素は、実行中のJavaScriptファイルへのパスになります。
残りの要素は、追加のコマンドライン引数になります。

process.argv[2]から引数になることに注意しましょう。

環境

$ node -v
v12.18.4

JavaScript ES6での書き方ということが言いたかった。

引数をたくさん取得する場合

引数が可変する場合には下記のように要素を取得できる。
forなら下記のように、

test.js
for(var i = 0;i < process.argv.length; i++){
  console.log(`argv[${i}] = ${process.argv[i]}`);
}

mapを使うともっとスマートに書ける。

test.js
process.argv.map((v,i) => console.log(`argv[${i}] = ${v}`))

出力結果

$ node playground/test.js a a a a a a a
argv[0] = /usr/local/bin/node
argv[1] = /Users/yutakaf/Desktop/git/weather_app/playground/test.js
argv[2] = a
argv[3] = a
argv[4] = a
argv[5] = a
argv[6] = a
argv[7] = a
argv[8] = a

コメント

作業中に思い出せなかったこと、ちゃんと仕様を調べようと思ったのでまとめてみた。

References

process.argvのドキュメント
Node.jsでコマンドライン引数を取得する

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む