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を実行することも可能です。
ドキュメントには、チュートリアルもありますので、ぜひチャレンジしてみてください。