BLOG
2020.11.24
Node.jsとNode-REDでC#のコードを実行する方法
デジタルエンジニアリンググループの宮﨑です。
最近、 IoT 関連の仕事で Node-RED をさわる機会が増えてきており、そんな中で Node-RED で外部の API を使用する機会がありました。
ところがその API は、C++ や .NET 系はサポートしているのですが、残念ながら Javascript は非対応の状態です。
なんとかして Node-RED とその API をつなぐ方法はないかと調べて見たところ、 Node.js と .NET をいい感じに結びつけてくれる Edge.js というライブラリがありましたので、今回はそれをご紹介します。
Node.js や Node-RED って何じゃい!?って方もいらっしゃるでしょうが、そこから説明しだすととても長くなってしまうので、またの機会にさせていただこうと思います。
この Edge.js ですが、 Javascript のオブジェクトを .NET 環境に投げたりその逆もできるので、うまく使いこなすと結構便利だったりしそうです。
私の開発環境が Windows なので、今回は Windows に絞って説明をさせていただきます。
開発環境
- Windows 10 Pro
- Node.js v12.4.0
- Microsoft .NET Core v2.2.207
※今回は、Edge-js をインストールするのですが、この記事の公開時点で Edge-js がサポートしている環境は以下の通りです。
- Node.js 6.x, 7.x, 8.x, 9.x, 10.x, 11.x, 12.x, 13.x, 14.x
- .Net Core 1.0.1 - 2.x on Windows/Linux/macOS
Edge-jsをインストール
npm を使って Edge-js をインストールします。
Hello Worldを表示してみる
C# で Hello <文字列>を返す処理を作成し、 Javascript から引数 World を渡して C# 関数をコールします。
- ファイル名: HelloWorld.js
作成したスクリプトを実行してみましょう。
うまいこと、実行してくれましたね。
C# のソースを実行
つぎは、C# の関数を外に出してみましょう。 .cs ファイルに C# のコードを書きます。
- ファイル名: HelloWorld.cs
Javascript 側は、 .cs ファイルを指定して関数をコールします。
- ファイル名: HelloWorld_2.js
実行結果
これもバッチリです。
DLL(ダイナミック リンク ライブラリ)を参照
さすがに C# のソースコードを公開したくないって場合もありますよね。
そんなときは C# 側で DLL を作成して、 JavaScript から参照します。
- ファイル名: HelloWorld.dll
下記のコードをビルドして、 DLL を作成します。
この DLL を参照してコールする Javascript 。
- ファイル名: HelloWorld_3.js
実行結果
これも、うまく実行できましたね。
ということで、 Node.js から C# を実行できました。
では、最後に、 Node-RED で C# を実行する方法のご紹介です。
setting.js ファイル修正
Node-RED で Edge-js を使用するには、 setting.js に、 require(‘edge-js’) を追記する必要があります。
function ノードを追加
Node-RED では、 function ノードに Javascript のコードを書きます。
Node-RED で処理を書くのは、後々の管理が大変だったります。
処理の部分を C# などで書いてあげれば、管理の面でも拡張の面でもおすすめです。
Node-RED を使っているという方がいれば、ぜひ使ってみてください。