Node-REDをアプリケーションに組み込む(Electron、Express)

はじめに

 今回はElectronで作成しているアプリケーションに、Node-REDを組み込んでみました。

 Node-REDのユーザーガイドに、Expressアプリケーションへの組み込みのサンプルがあったのでお試しです。

▼こちらのページに書かれていました。

https://nodered.jp/docs/user-guide/runtime/embedding

 Electronと同様に、ExpressもNode.js用のフレームワークです。両者ともnpmコマンドを使うので、すんなり組み込むことができました。

▼Electronの環境構築についてはこちら。

Electronでデスクトップアプリケーションを開発してみる:チュートリアル編

はじめに  今回はElectronを使ってみました。デスクトップアプリケーションを開発してみたいなと思っています。他のソフトウェアのほうが良いかもしれませんが、とりあえ…

▼作成中のデスクトップアプリケーションはこちら。いろいろ入っています。

https://github.com/404background/code-planner

Expressのアプリケーションに組み込む

Node-REDを起動する

 プログラムは上述した、ユーザーガイドの「既存アプリケーションへの組み込み」のページのものを使用します。node-red.jsとして保存しておきます

 あとでElectronで表示する場合は、package.jsonがあるディレクトリに保存してください。

 ExpressとNode-REDをインストールします。

 以下のコマンドを実行すると、Node-REDが起動します。

 別のコマンドプロンプトで起動させたい場合は、startをつけて実行します。

エディタ画面を表示する

 Expressでの起動方法だとNode-REDのsetting.jsが利用されないので、設定はnode-red.js内に記述する必要があります。サンプルプログラムでは書かれています。

 それに伴い、通常はhttp://127.0.0.1:1880/やhttp://localhost:1880のアドレスでエディタ画面を開くのですが、今回はアドレスが違います

 server.listen(8000);となっているので、ポート番号は8000です。また、settingsで設定されているhttpAdminRootは/redになっているので、http://localhost:8000/redにブラウザでアクセスするとエディタ画面が開きます。

 settingsをもう少し見てみます。

var settings = {
    httpAdminRoot:"/red",
    httpNodeRoot: "/api",
    userDir:"/home/nol/.nodered/",
    functionGlobalContext: { }    // グローバルコンテキストを有効化
};

 userDirは/home/nol/.noderedとなっています。Windowsの場合は、C:\home\nol\.noderedフォルダが作成されて、その中にフローが保存されます。

 相対パスを指定することができるので、Electronアプリケーションのディレクトリに保存するのが分かりやすいかと思います。私は"./.node-red/"にしました。

ダッシュボード画面を表示する

 node-red-dashboardをよく使うのですが、これもアドレスが違います。

▼node-red-dashboardのページはこちら

node-red-dashboard (node) - Node-RED (nodered.org)

 Settingsのところに書かれているのですが、http Rootに/uiを付け加えたアドレスにアクセスすると、ダッシュボード画面が表示されます

 http Rootのアドレスは、サンプルプログラムのsettingsで設定されているように"/api"です。つまり、http://localhost:8000/api/uiにアクセスすると表示されます。

Electronのアプリケーション内で表示する

 ElectronでWebページを埋め込む方法として、iframe、WebView、BrowserViewの3つがあります。今回はWebViewを使います。

▼詳しくはこちらをご覧ください。

https://www.electronjs.org/ja/docs/latest/tutorial/web-embeds

 なお、ElectronではWebViewは推奨されていません。Chromiumのwebviewタグに基づいているからだそうです。

▼こちらに書かれています。

https://www.electronjs.org/ja/docs/latest/api/webview-tag#warning

 私のアプリケーションにはwebviewで書いてしまったのですが、特に問題なく動作しています。

 HTMLで以下の要素を書くだけなので、iframeでもほとんど変わらないと思います。

<webview src="表示したいURL" id="要素のID"><webview>

 あとで「ボタンを押したときにURLを変更する」といった動作にするため、IDを指定しています。URLにはNode-REDのエディタ画面などを指定してください。

▼実際にアプリケーションに組み込んだ状態がこちら。

最後に

 フローを保存するディレクトリを指定できるので、アプリケーション毎に保存できるようになりました。フローが増えすぎると管理が大変なので、便利になりそうです。

 作成中のアプリケーション内では、Jupyter Labも表示できます。これでJavaScriptとPythonを実行できるというわけです。

 npm run setupだけで必要なものがインストールされるようになっています。ご興味があれば、GitHubのリポジトリをご覧ください。package.jsonのscriptsに用意しています。WindowsでNode-RED MCUの環境を構築できるように、バッチファイルも用意しました。ユーザーの環境に左右されそうですが...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です