コンテンツにスキップ

sqliteノード

sqliteノード

概要

sqliteノードは、SQLiteデータベースに対してSQLを実行するためのノードです。

SQLiteは、サーバー型のデータベースではなく、1つのデータベースファイルとして扱える軽量なデータベースです。 ロボシュタインのフローでは、処理履歴の保存、過去データの参照、簡易的なマスタ管理、件数集計などで利用できます。

例えば、アラートの発生履歴をSQLiteに保存しておき、「同じサーバーで1時間以内に同じアラートが再発した場合だけ通知する」といった判断に利用できます。

sqliteノードを使用するには、まず接続先となるSQLiteデータベースを sqlitedb 設定ノードで指定し、その設定をsqliteノードから参照します。

sqliteノード設定画面

主な利用シーン

sqliteノードは、以下のような場面で使用します。

  • アラートの発生履歴を保存し、一定時間内に同じアラートが再発したか確認したい場合
  • 同じ通知を短時間に何度も送らないように、前回通知時刻を記録したい場合
  • サーバー名、IPアドレス、アラート種別などに対応する担当者や通知先を参照したい場合
  • 処理結果や実行履歴を保存し、後から確認できるようにしたい場合
  • 日次や時間単位で、受信件数・処理件数・エラー件数などを集計したい場合
  • 外部データベースを用意するほどではない小規模なマスタや履歴を管理したい場合

例えば、アラートメールを受信した際に、SQLiteに過去の発生履歴を保存しておくことで、「同じサーバーで1時間以内に同じアラートが再発した場合だけ通知する」といった制御ができます。

また、通知先マスタをSQLiteに登録しておき、受信したアラートのサーバー名やアラート種別に応じて、担当者や通知先を切り替えることもできます。

このように、sqliteノードは、フロー内で扱う小規模な履歴情報やマスタ情報を保存・参照したい場合に利用できます。

具体的な活用例(同じアラートの再発を判定する)

アラートメールを受信し、過去1時間以内に同じアラートが発生しているかをSQLiteで確認する例です。

フローのイメージ図

sqliteノードのフローイメージ

① 前段ノードでアラート情報を取り出す

functionノードなどで、メール本文や件名からサーバー名、アラート種別などを取り出し、SQLに渡す値を msg.params に設定します。

msg.params = {
    $serverName: "server01",
    $alertName: "Disk Usage High"
};
return msg;

② SQLiteで過去履歴を確認する

sqliteノード(SQLクエリ:事前定義文)で、過去1時間以内に同じサーバー・同じアラートが登録されているか確認します。

SELECT *
FROM alert_history
WHERE server_name = $serverName
  AND alert_name = $alertName
  AND created_at >= datetime('now', '-1 hour');

③ 結果に応じて分岐する

検索結果は msg.payload に配列として格納されます。 switchノードで msg.payload が「空でない」場合は、1時間以内に同じアラートが再発していると判断できます。 「空である」場合は、新規アラートとして履歴だけ保存する、または通常通知に進めるなど、運用に合わせて処理を分けられます。

構成について

sqliteノードは、主に以下の2つで構成されます。

種類 内容
sqlitedb設定ノード 使用するSQLiteデータベースファイルと接続モードを設定します。
sqliteノード SQLを実行し、結果を後続ノードへ渡します。

sqliteノード本体だけではデータベースに接続できません。 sqliteノードの「データベース」で「新規に sqlitedb を追加...」を選択し、右側の鉛筆ボタンからsqlitedb設定ノードを作成・編集します。

sqlitedb設定ノードの設定項目

sqlitedb設定ノードでは、SQLiteデータベースファイルと接続モードを設定します。

必須 項目名 説明
◯ データベース 使用するSQLiteデータベースファイルのパスを指定します。
◯ モード データベースへの接続モードを指定します。

sqlitedb設定画面

データベースについて

データベースには、使用するSQLiteデータベースファイルのパスを指定します。

例:/data/sqlite-sample

用途に応じて、/data/sqlite-任意の文字列 のように任意の名前を指定します。 指定したファイルを使ってデータを読み書きします。

なお、データベースに :memory: を指定すると、ファイルを作らずにメモリ上だけで動作するデータベースになります。デプロイや再起動のたびに内容が消えるため、動作確認用として利用してください。

データベースファイルの保存先によっては、環境の再起動、バックアップ、権限設定、容量制限などの影響を受ける場合があります。 重要なデータを保存する場合は、保存先や運用方法を事前に確認してください。

モードについて

sqlitedb設定ノードでは、以下の接続モードを選択できます。

モード 内容
読み取り-書き込み-作成 読み書き可能です。データベースファイルが存在しない場合は作成します。
読み取り-書き込み 読み書き可能です。データベースファイルが存在しない場合はエラーになります。
読み取りのみ 読み取り専用で接続します。

通常は、新しくデータベースを作成して利用する場合は「読み取り-書き込み-作成」、既存のデータベースを読み書きする場合は「読み取り-書き込み」、参照だけ行う場合は「読み取りのみ」を使用します。

sqliteノードの設定項目

sqliteノードでは、使用するデータベースとSQLの指定方法を設定します。

必須 項目名 説明
名前 フローエディター上で表示されるノード名を任意で指定できます。
◯ データベース 使用するsqlitedb設定ノードを選択します。
◯ SQLクエリ SQLをどの方法で指定するかを選択します。
SQL文 SQLクエリが「固定文」または「事前定義文」の場合に、実行するSQLを記述します。

SQLクエリの指定方法

sqliteノードでは、SQLの指定方法を選択できます。

SQLクエリ 内容
msg.topic経由 前段ノードから渡された msg.topic のSQLを実行します。
固定文 ノード設定画面に固定で記述したSQLを実行します。
事前定義文 ノード設定画面に記述したSQLを、msg.params の値を使って実行します。
一括(応答なし) msg.topic の複数のSQLをまとめて実行します。結果の取得は行いません。

msg.topic経由でSQLを指定する場合

「msg.topic経由」を使用すると、前段ノードで作成したSQLをsqliteノードで実行できます。

msg.topic = "SELECT * FROM alert_history";
return msg;

この場合、sqliteノードは msg.topic に設定されたSQLを実行し、検索結果を配列として msg.payload に設定して後続へ渡します。 INSERT、UPDATE、DELETEなどのSQLも msg.topic に設定して実行できます。

固定文を使用する場合

「固定文」を使用すると、sqliteノードの設定画面に固定のSQLを記述できます。 例えば、常に同じテーブルを参照する場合や、テーブル作成を行う場合などに利用できます。

SELECT * FROM alert_history;

固定文を利用する場合、前段ノードでSQLを作成する必要はありません。

事前定義文を使用する場合

「事前定義文」を使用すると、ノード設定画面に記述したSQLに対して、前段ノードから渡した msg.params の値を差し込めます。

SELECT *
FROM alert_history
WHERE server_name = $serverName
  AND alert_name = $alertName;

前段ノードでは、以下のように msg.params を設定します。

msg.params = {
    $serverName: "server01",
    $alertName: "Disk Usage High"
};
return msg;

このようにすることで、SQL文と値を分けて扱えます。 メール本文や外部APIなど、外部から受け取った値を検索条件に使う場合は、文字列連結でSQLを作るよりも、事前定義文の利用を検討してください。

一括(応答なし)を使用する場合

「一括(応答なし)」は、複数のSQLをまとめて実行したい場合に使用します。 SQLは msg.topic に設定します。

msg.topic = `
CREATE TABLE IF NOT EXISTS alert_history (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    server_name TEXT,
    alert_name TEXT,
    created_at TEXT
);
INSERT INTO alert_history (server_name, alert_name, created_at)
VALUES ('server01', 'Disk Usage High', datetime('now'));
`;
return msg;

一括(応答なし)では、SQLを実行した結果の行データは取得せず、実行後に msg.payload は空の配列([])として後続へ渡されます。 テーブル作成や複数SQLの実行などで使用します。

実行結果について

sqliteノードで検索系のSQLを実行した場合、結果は msg.payload に配列として格納されます。

[
  {
    "id": 1,
    "server_name": "server01",
    "alert_name": "Disk Usage High",
    "created_at": "2026-10-14 12:07:44"
  }
]

検索結果が0件の場合は、空の配列([])になります。 後続ノードでは、msg.payload.length で件数を確認したり、msg.payload[0] のように1件目の結果を参照したりできます。

利用例

例1:同じアラートが1時間以内に再発したか確認する

アラート履歴テーブルに保存された情報をもとに、同じアラートが短時間で再発しているか確認する例です。

例1:同じアラートが1時間以内に再発したか確認する

SQL例(事前定義文):

SELECT *
FROM alert_history
WHERE server_name = $serverName
  AND alert_name = $alertName
  AND created_at >= datetime('now', '-1 hour');

検索結果が1件以上あれば、1時間以内に同じアラートが発生していると判断できます。

例2:アラート履歴を登録する

受信したアラート情報をSQLiteに保存する例です。

例2:アラート履歴を登録する

SQL例(事前定義文):

INSERT INTO alert_history (server_name, alert_name, created_at)
VALUES ($serverName, $alertName, datetime('now'));

アラート発生履歴を保存しておくことで、後続の再発判定や件数集計に利用できます。

例3:通知先マスタを参照する

サーバー名やアラート種別をもとに、通知先を取得する例です。

例3:通知先マスタを参照する

SQL例(事前定義文):

SELECT *
FROM notification_master
WHERE server_name = $serverName
  AND alert_type = $alertType;

取得した通知先情報を使って、メール送信先やチケット登録内容を切り替えられます。

例4:件数を集計する

保存済みの処理履歴から件数を取得する例です。

例4:件数を集計する

SELECT COUNT(*) AS count
FROM alert_history
WHERE date(created_at) = date('now');

検索結果は msg.payload に配列として返ります。

[
  {
    "count": 12
  }
]

例5:テーブルを作成する

初回準備としてテーブルを作成する例です。

例5:テーブルを作成する

CREATE TABLE IF NOT EXISTS alert_history (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    server_name TEXT,
    alert_name TEXT,
    created_at TEXT
);

テーブル作成のように結果行を取得しないSQLでは、「一括(応答なし)」を使用する構成も検討できます。

注意点

datetime('now') はUTC(協定世界時)になる

SQLiteの datetime('now') は、日本時間ではなくUTC(日本時間の9時間前)の日時を返します。 例えば、日本時間 21:07 に datetime('now') で登録すると、12:07 として保存されます。 日本時間で保存・比較したい場合は、datetime('now', '+9 hours') のように時差を加えるなど、登録と検索で日時の基準をそろえてください。 なお、「1時間以内」のように現在時刻との差で判定する場合は、登録と検索の両方で datetime('now')(UTC)を使っていれば、そのままで正しく判定できます。

データベースファイルの保存先に注意する

SQLiteはデータベースファイルを直接読み書きします。 保存先によっては、ロボシュタイン環境の再起動、ファイル権限、バックアップ、容量制限などの影響を受ける場合があります。 重要な業務データを長期保存する場合は、保存先やバックアップ方法を確認してください。

同時書き込みに注意する

SQLiteは軽量で扱いやすい一方、大量の同時書き込みには向かない場合があります。 短時間に大量のINSERTやUPDATEが発生する場合は、delayノードで流量を調整する、外部DBの利用を検討するなど、運用に合わせた設計が必要です。

SQLインジェクションに注意する

メール本文や外部APIの値など、外部から受け取った値をSQLに直接連結すると、意図しないSQLが実行されるリスクがあります。 外部入力を条件に使う場合は、事前定義文を利用し、SQL文と値を分けて扱ってください。

msg.topicの扱いに注意する

SQLクエリが「msg.topic経由」または「一括(応答なし)」の場合、msg.topic にSQL文字列が入っている必要があります。 msg.topic が空、または文字列でない場合、SQLを実行できずエラーになります。 前段ノードでSQLを作成する場合は、debugノードで msg.topic の内容を確認してください。

事前定義文では msg.params を設定する

SQLクエリが「事前定義文」の場合、前段ノードから msg.params を渡す必要があります。 msg.params が存在しない場合は「msg.params not passed」、オブジェクト形式でない場合は「msg.params not an object」というエラーがデバッグタブに表示され、SQLは実行されません。

msg.params = {
    $serverName: "server01",
    $alertName: "Disk Usage High"
};

一括(応答なし)では結果行を取得しない

一括(応答なし)は、複数SQLの実行やテーブル作成などに使用できますが、検索結果の行データは取得しません。 SELECTの結果を後続ノードで使いたい場合は、「msg.topic経由」「固定文」「事前定義文」のいずれかを使用してください。

読み取りのみでは更新系SQLを実行できない

モードが「読み取りのみ」の場合、INSERT、UPDATE、DELETE、CREATE TABLEなどの更新系SQLは実行できません。 参照だけを行う場合は「読み取りのみ」で問題ありませんが、書き込みが必要な場合は「読み取り-書き込み」または「読み取り-書き込み-作成」を使用してください。

UPDATEやDELETEの条件に注意する

UPDATEやDELETEは、対象条件を誤ると想定外のデータを変更・削除する可能性があります。 テーブル名、カラム名、検索条件、更新対象、削除対象を利用環境に合わせて確認してから実行してください。

エラー処理を用意する

DBファイルが存在しない、ファイル権限がない、SQL文が誤っている、テーブルが存在しないなどの理由でエラーが発生する場合があります。 必要に応じて、catchノードを組み合わせて、エラー発生時の通知やログ出力を行ってください。

関連ノード

  • functionノード:SQL文や msg.params を作成する場合に使用します。
  • changeノード:固定値や簡単な msg.topic を設定する場合に使用します。
  • switchノード:SQL実行結果に応じて処理を分岐する場合に使用します。
  • templateノード:SQL結果を通知文やチケット本文に埋め込む場合に使用します。
  • delayノード:大量の書き込みを抑制する場合に使用します。
  • debugノード:SQL実行前後の msg.topic、msg.params、msg.payload を確認する場合に使用します。
  • catchノード:SQLite接続やSQL実行時のエラーを検知する場合に使用します。

まとめ

sqliteノードは、SQLiteデータベースに対してSQLを実行するためのノードです。

接続先のデータベースファイルは、sqlitedb設定ノードで指定します。

SQLは、msg.topic経由、固定文、事前定義文、一括(応答なし)のいずれかの方法で指定できます。

検索結果は msg.payload に配列として格納され、後続ノードで利用できます。

運用自動化では、アラート発生履歴の保存、一定時間内の再発判定、通知先マスタの参照、処理履歴の保存、件数集計などに活用できます。

一方で、SQLiteはファイルベースのデータベースであるため、保存先、バックアップ、同時書き込み、SQLインジェクション、日時の基準(UTC)、権限、容量制限などに注意して利用してください。