【初心者向け】Node-REDでAPIの定期実行をする方法

Node-REDは、視覚的なフロープログラミングツールであり、さまざまなソフトウェアやハードウェアを簡単に統合できる強力なプラットフォームです。

今回は、APIの定期実行を行う方法を2つ解説します。

使用するAPIについて

今回試すAPIは以下のサイトにある国際宇宙ステーションの現在地を示すAPIです。

http://open-notify.org/Open-Notify-API/ISS-Location-Now/

出力はJSON形式です。

Injectノードを使う方法

Node-REDを起動する

まず、Node-REDを起動します。enebularであれば、フローを作成して、編集ボタンをクリックします。

すると、web フローエディターの起動が始まります。

HTTPリクエストノードの追加

APIを呼び出すには、HTTPリクエストノードを使用します。パレットからHTTP requestノードをドラッグしてフローに追加します。

APIのエンドポイントの設定

HTTPリクエストノードをダブルクリックして、APIのエンドポイントのURL http://api.open-notify.org/iss-now.json を設定します。このAPIでは、ヘッダーや認証情報は不要ですので、特に設定はいりません。このAPIの出力はJSONなので、ノードの出力形式はJSONオブジェクトにしておきます。

Inject ノードの追加と設定

定期的にAPIを実行するには、Injectノードを使用します。パレットからinjectノードを追加し、設定を開きます。

設定で、実行間隔を指定します。例えば、今回であれば、繰り返し オプションに指定した時間間隔を選択肢、15 秒を指定します。

フローの接続とデプロイ

InjectノードとHTTPリクエストノードを接続します。これにより、Inject ノードがトリガーとして機能し、定期的にAPIが呼び出されます。Debugノードとも接続しておきます。Debugノードと接続すれば、実行結果をデバッグタブで確認することができます。

すべての設定が完了したら、右上隅にある「保存」ボタンをクリックします。

フローの実行と監視

フローが保存されたら、ノードが指定した間隔でAPIを呼び出します。実行結果はデバッグタブで確認できます。

以上がNode-REDのInjectノードを使用したAPIの定期実行です。

この方法を応用すれば業務の自動化を実現できそうです。

このWebフローエディターは起動時間が4時間の制限があります。そのため、パソコンにインストールしたenebular editorを使えば、より長い時間、定期的に実行することが可能です。

パソコンをシャットダウンしたいときなど、パソコンを起動し続けなければならないのは、都合が悪い場合もあるかと思います。そういうときは、クラウド実行環境を使うことになります。

クラウド実行環境を使う方法

クラウド実行環境とは、enebularが用意するNode-REDのフローを実行させるものになります。フリー版をお使いのユーザーはプロジェクトあたり2個まで作成して利用できます。

クラウド実行環境に、先ほどのフローを保存(デプロイ)すれば、ブラウザを立ち上げっぱなしにしたり、パソコンを起動し続けたりすることなく、適切なタイミングでフローを実行することができます。

クラウド実行環境の作成

最初にenebular上にクラウド実行環境を作っておきます。右下のプラスボタンをクリックします。

適当な名前を付けてOKをクリックすると作成が始まります。

しばらく立つとクラウド実行環境ができました。

この実行環境のなかでNode-REDのフローを動かすことになります。

LCDPノードのインポート

クラウド実行環境でフローを動かすためには、LCDPノードが必要です。これはNode-REDというより、enebularだけのお作法になります。DiscoverからLCDPと検索して、LCDP-Toolkitというノードを見つけたら、そのノードを自分のプロジェクトにインポートします。

インポートできたLCDPノードはPrivate Nodeというメニューから確認できます。

フローの編集

先ほどのフローを編集して、クラウド実行環境で使えるように変更してみます。

最初のフローを別バージョンとして保存

編集する前に、最初に作ったフローを別のバージョンとして保存しておきます。バージョンタブを開いてください。

新しいバージョンの作成ボタンをFlow-with-Inject-Nodesという名称を入力し、適当なコメントを入力して作成します。

これで先ほどのフローのスナップショットを保存できました。

フローエディターの起動

概要タブに戻り、編集ボタンをクリックして、Webフローエディターが起動させます。

以前の設定のままですと、5秒間隔でフローが実行されるはずなので、一度繰り返しなしにして保存しておくと余計なAPIへのリクエストを減らせます。

Private Nodeはエディターを起動すると自動的に読み込まれています。

これを図のようにドラッグして、接続します。

debugノードのプロパティのシステムコンソールにチェックを入れておきましょう。これは、フローの実行結果をenebularのログ画面でみるためにおこないます。

ここまでできたら、エディターは閉じてしまって構いません。

フローをクラウド実行環境にデプロイ

作ったフローをクラウド実行環境上に保存し、動かすための準備をします。この操作をデプロイと呼びます。フローの画面のデプロイボタンをクリックします。

クラウド実行環境を選択をクリックします。

先ほど作成したクラウド実行環境がありますので、そこにデプロイします。

先ほど編集した最新のバージョンを選択したいので、masterを選び、デプロイボタンをクリックします。

しばらく立つとデプロイが成功し、デプロイステータスがデプロイ済みになります。

クラウド実行環境の設定

デプロイ済みになったら、クラウド実行環境の画面に戻ります。デプロイしたフローとバージョンが先ほどのフローになっていることを確認してください。

設定タブを開きます。設定を編集するリンクをクリックします。

スクロールして、スケジュールトリガーをONにして、実行する頻度を設定します。

1時間毎に実行する場合は、下図の通りとなります。

スクロールして、保存ボタンをクリックします。

実行結果の確認

今回は1時間に1回にしていますので、実行された頃合いを見て、ログタブをクリックします。

[Oct 20th 2023, 20:00:45]: 2023-10-20T11:00:45.225Z f25c9e77-2be7-4324-9368-605e1b23a3ac INFO 20 Oct 11:00:45 - [info] [LCDP-in:b250c7e6d14098c7] Function called.
[Oct 20th 2023, 20:00:45]: 2023-10-20T11:00:45.984Z f25c9e77-2be7-4324-9368-605e1b23a3ac INFO 20 Oct 11:00:45 - [info] [debug:debug 1]
{
message: 'success',
timestamp: 1697799645,
iss_position: { longitude: '-148.4022', latitude: '-25.8759' }
}

国際宇宙ステーションの位置情報がdebugノードを通して、ログとして記録されていることがわかります。

クラウド実行環境を使うことで、定期的にAPIを実行することができました。もちろん、1時間に1回よりも頻度を高くすることもできますが、実行回数が増えれば、その分無料枠を消費するため、無料枠内でやりたい方はあまり高頻度過ぎない方がベターです。

まとめ

今回、APIの定期実行の方法について、Injectノードを使った方法とクラウド実行環境を使った方法の2通りご紹介しました。Injectノードを使う方法はNode-REDらしい方法です。enebularのクラウド上で長時間実行させるには課題がありました。クラウド実行環境は、必要なタイミングでNode-REDのフローを呼び出すことで定期実行を実現しています。enebularならではの操作が必要ですが、無料の範囲で永続的にAPIを実行することも可能です。

ドキュメントには、チュートリアルもありますので、ぜひチャレンジしてみてください。