🎛️ Node-RED Dashboard 2.0 実践ガイド【応用編】
第2部 control & spacer

この資料では、Dashboard 2.0のプログラムによるダッシュボード制御レイアウト調整を学びます。

📚 この資料で学べること
💡 前提条件

🚀 まずサンプルフローをインポートしましょう!

以下のサンプルフローには、control と spacer の実例が含まれています。
先にインポートして動作を確認しながら、以降の説明を読むと理解が深まります。

  1. 下のサンプルフローJSONをコピー
  2. Node-REDエディタで メニュー → 読み込み を選択
  3. JSONをペーストして「読み込み」をクリック
  4. デプロイしてダッシュボードで動作確認

📦 サンプルフローの内容

💡 接続監視のテスト: エディタの「接続テスト」injectノードをクリックすると、ダッシュボードに接続数が表示されます。実際の接続イベントは、ブラウザでダッシュボードを開く/閉じる/リロード時に発生します。

📁 control & spacer サンプルフロー(クリックで展開)

参照元:FlowFuse Dashboard 2.0 公式ドキュメント

🎮 control ノード

概要

controlは、プログラムからダッシュボードを制御するためのノードです。ページ遷移、グループの表示/非表示、クライアント接続の監視などが可能です。

inject function
制御メッセージ作成
control

ノード設定プロパティ

プロパティ 説明 デフォルト
Name ノードの名前
UI 対象のUI Base -(必須)
Output 監視するイベント種別(all/connect/disconnect等) all

主な機能

機能 説明 msg.payload
ページ遷移 指定したページに移動 { "page": "ページ名" }
グループ表示/非表示 特定グループの可視性を制御 { "groups": { "show": [...], "hide": [...] } }
グループ有効/無効 グループ内ウィジェットの操作可否 { "groups": { "enable": [...], "disable": [...] } }
接続監視 クライアントの接続/切断を検知 出力: { "connections": [...] }

グループ指定の形式

グループを指定する際は、以下の形式を使用します:

"ページ名:グループ名" // 例 "ホーム:設定パネル" "Dashboard:Control Panel"
⚠️ 重要

グループ名は完全一致が必要です。絵文字を含む場合は絵文字も含めて指定してください。
例: "ホーム:🔐 管理者パネル"

パターン1: ページ遷移

用途: ボタンクリックや条件に応じて別のページに移動

サンプルフロー: 「🧭 ナビゲーション」グループのボタンで確認できます

{ "payload": { "page": "設定" } }

パターン2: グループの表示/非表示

用途: ユーザー権限や状態に応じてUIを動的に変更

サンプルフロー: 「👁️ 表示制御」の管理者モードスイッチで確認できます

{ "payload": { "groups": { "show": ["ホーム:🔐 管理者パネル"], "hide": ["ホーム:👋 ゲストパネル"] } } }

💼 ユースケース: ログイン状態による表示制御

ログインユーザーには「管理パネル」を表示し、ゲストには「ログインフォーム」のみを表示する

パターン3: グループの有効/無効

用途: 特定の条件下でウィジェットの操作を禁止

サンプルフロー: 「🔧 メンテナンスモード」スイッチで確認できます(設定ページの項目が無効化)

{ "payload": { "groups": { "disable": ["設定:⚙️ システム設定"] } } }

💼 ユースケース: メンテナンスモード

システムメンテナンス中は設定変更を無効化し、誤操作を防止

パターン4: 接続監視(出力)

control出力からは、クライアントの接続情報が取得できます。

サンプルフロー: 「📡 接続状態」グループにリアルタイムで接続数が表示されます

// controlノードの出力 { "payload": { "connections": [ { "socketId": "abc123", "socketIp": "192.168.1.100" } ] }, "_client": { "socketId": "abc123" } }

💼 ユースケース: アクセスログ

ダッシュボードへのアクセスをログに記録し、誰がいつアクセスしたかを追跡

パターン5: 特定クライアントへの送信

msg._clientを使用して、特定のクライアントにのみメッセージを送信できます。

{ "payload": { "page": "アラート" }, "_client": { "socketId": "abc123" } }
💡 ヒント

msg._clientを省略すると、すべての接続クライアントに対して制御が適用されます。

📐 spacer ノード

概要

spacerは、ダッシュボードのグリッドレイアウトで空白スペースを確保するためのノードです。ウィジェットの配置を調整し、見やすいレイアウトを実現します。

サンプルフロー: 「📐 レイアウトサンプル」グループで、左右に分かれたボタン配置を確認できます

🎯 spacerの役割

設定プロパティ

プロパティ 説明 値の例
Group 配置するグループ -
Name ノードの名前 spacer
Width 幅(グリッド単位) 1, 2, 3, 6...
Height 高さ(グリッド単位) 1, 2, 3...
Order グループ内の表示順序 0
Class CSSクラス名

使用例1: 水平方向の余白

ボタンとボタンの間にスペースを入れる

ボタンA
width: 2
spacer
width: 2
ボタンB
width: 2

使用例2: グリッド位置調整

6カラムグリッドでウィジェットを右寄せ

グリッドレイアウト(6カラム): ┌──────┬──────┬──────┬──────┬──────┬──────┐ │spacer│spacer│spacer│spacer│ボタン│ボタン│ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ └──────┴──────┴──────┴──────┴──────┴──────┘ spacer width: 4 buttons width: 2
💡 レイアウトのコツ

📝 実践演習

演習1: ページ遷移ボタンの作成

目標: 新しいページを作成し、ナビゲーションボタンを追加する

  1. 新しいページ「レポート」を作成
  2. ホームに「レポートへ」ボタンを追加
  3. functionノードで {"page": "レポート"} を設定
  4. ui-controlに接続

演習2: 条件付き表示制御

目標: センサー値に応じてアラートパネルを表示/非表示

  1. 「アラートパネル」グループを作成(初期は非表示)
  2. functionノードで閾値判定を実装
  3. 値が閾値を超えたらshow、下回ったらhide

演習3: レイアウト調整

目標: 3つのボタンを等間隔に配置

目標レイアウト(6カラム): ┌────────┬────────┬────────┬────────┬────────┬────────┐ │ボタン1 │ spacer │ボタン2 │ spacer │ボタン3 │ spacer │ │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ └────────┴────────┴────────┴────────┴────────┴────────┘

💡 Tips & ベストプラクティス

control

spacer

デバッグのコツ

🔗 参考リンク

🏠