Node.js¶
Node.jsとは¶
Node.jsはJavaScriptをブラウザの外で実行するための実行環境である。
元々JavaScriptはWebブラウザ上で動作する言語だったが、Node.jsの登場によってサーバーやデスクトップアプリケーション、組み込み機器などでも利用できるようになった。
Asterでは主にAC(操作パネル)の開発やWebサーバーの構築に利用する。
特徴¶
JavaScriptでサーバー開発ができる¶
通常のWebサイトではJavaScriptはブラウザ上で実行されるが、Node.jsを利用することでサーバー側の処理もJavaScriptで実装できる。
これにより、フロントエンドとバックエンドを同じ言語で開発できる。
非同期処理が得意¶
Node.jsはイベント駆動型アーキテクチャを採用している。
そのため、
-
通信処理
-
ファイル読み込み
-
データベースアクセス
などの待ち時間が発生する処理を効率良く実行できる。
特にWebサーバーや通信ゲートウェイとして高い性能を発揮する。
軽量で高速¶
Node.jsは比較的メモリ消費が少なく、Raspberry Piのような小型コンピュータでも快適に動作する。
AsterのACで採用しているRaspberry Piとの相性も良い。
NPMについて¶
Node.jsにはNPM(Node Package Manager)が付属している。
NPMはライブラリ管理システムであり、必要な機能を簡単に追加できる。
例
npm install express
このコマンドを実行すると、ExpressというWebサーバーフレームワークをインストールできる。
余談だがいつもnpmで使っているのでNPMって大文字で書かれると理解するまでに時間がかかる。
よく利用されるライブラリ¶
Express¶
Webサーバーを簡単に構築できるフレームワーク。
Socket.IO¶
ブラウザとサーバー間でリアルタイム通信を行うためのライブラリ。
SerialPort¶
UARTやUSBシリアル通信を扱うライブラリ。
STM32との通信などで利用できる。
ws¶
軽量なWebSocketライブラリ。
リアルタイム通信を実装する際に利用される。
package.json¶
Node.jsプロジェクトの設定ファイル。
使用するライブラリやプロジェクト情報が記録される。
また、開発環境を他のPCへ移行する際にも利用される重要なファイルである。
Raspberry Piでの利用¶
Node.jsはRaspberry Pi上でも動作する。
Asterでは以下の用途で利用する予定である。
-
WebUIの配信
-
ALEOとのUART通信
-
状態監視
-
ログ保存
-
APIサーバー
構成例
操作者
↓
WebUI
↓
Node.js
↓ UART
ALEO(STM32)
メリット¶
-
JavaScriptのみで開発可能
-
Webとの親和性が高い
-
Raspberry Piで動作する
-
ライブラリが豊富
-
開発速度が速い
デメリット¶
-
リアルタイム制御には向かない
-
高負荷な数値計算は苦手
-
ハードウェア制御はマイコンの方が適している
Asterでの役割¶
AsterではNode.jsをAC(操作パネル)の中核として利用する。
Node.jsはWebUIとALEOの仲介役として動作し、
-
Webページの配信
-
UART通信
-
状態管理
-
API提供
を担当する。
一方で、
-
モータ制御
-
センサ取得
-
安全制御
などのリアルタイム性が求められる処理はALEO(STM32)が担当する。
そのため、AsterにおけるNode.jsは「制御装置」ではなく「通信・管理サーバー」としての役割を持つ。