0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ハッカソン議事録 Vol.3】画像処理フローが一気に進化した日:Gyazo API × Node-RED × MQTT ログ管理戦略まとめ

0
Last updated at Posted at 2025-11-28

はじめに ―「画像って、どう扱えば正解なんだ?」から始まった一日

前回の記事では、MQTT や HiveMQ を中心にリモート通信の仕組みづくりをまとめました。
(👉 前回: https://qiita.com/GGT1629/items/f744dae9276a84fd80d0)

今回は、画像が実際に流れ始めたその後のストーリーです。

Raspberry Pi → Gyazo API → Node-RED → フロントエンド。

この一連の流れの中で、
「あれ?画像バッファってどうやって扱う?」
「URLはどこで取得すべき?」
「最新画像とログ画像、どう両立する?」
といった技術的なハードルが次々と登場しました。

この記事では、議事録をもとに実際に起きた混乱・気づき・改善をストーリー形式でまとめます。


問題点 ― バッファ沼にハマる。JSON地獄に落ちる。そして気づく。

1. Gyazo APIキーを Node-RED にどう渡す?

  • APIキーの定義場所(Function Node?Change Node?)で混乱
  • 部分コピーによる設定ミスが多発
  • 「JSONインポートすれば一発」という真理に到達

2. バッファが壊れる

  • 画像データは文字列ではなく バイナリバッファ
  • なのに「文字列のまま変換しようとして失敗」する事故が発生
  • Failed Parse Form Data の赤エラーが連発

3. Node-REDの目視設定は危険

  • JSON設定を目視で再現するとプロパティ名のブレが発生
  • AIのコード補助は便利だが、ノード設定は正確に写経が必要

つまり、画像処理の問題は「コード」ではなく「設定」がボトルネックでした。


解決策 ― Gyazo の強み × Node-RED の柔軟性 × MQTT の軽量性

解決策1:Gyazo API の採用が決定打に

Gyazo の良いところは…

  • アップロードした瞬間にパーマリンクURLが返る
  • URL生成をクライアント側でやらなくてよい
  • バッファ形式で返されるJPEGは Node-RED と相性◎

Gyazo から返ってきた URL は MQTT で通知、
Node-RED が HTTP GET して保存する構成に決定しました。


解決策2:LATEST_JPEG と 日時付きJPEG の“二刀流保存”

議論の結果、画像保存はシンプルに 2系統 にまとめられました。

保存方式 役割
LATEST_JPEG フロントエンドが常に参照する“最新画像”
timestamped_YYYYMMDD-HHMMSS.jpeg ログとして履歴管理する“証跡”

なぜこの構成が良いのか?

  • DB不要
  • ファイル名で時系列が自然に並ぶ
  • Express/Node.js の静的ファイル提供が超簡単
  • フロントエンドは常に /static/LATEST_JPEG を表示するだけ

「最新」と「履歴」の矛盾を完全に解消したバランスの良い設計です。


解決策3:MQTT+HTTP GET のハイブリッド構成

今回の構成はかなりスマートです。

  1. MQTT

    • 「新しい画像ができたよ!」という通知だけを送る
  2. Node-RED

    • その通知を受けて HTTP GET で画像を取得
    • LATEST_JPEG と ログJPEG を生成
  3. フロントエンド

    • LATEST_JPEG を自動リロードして表示

MQTTは軽量通知、HTTPはデータ取得。
役割分担が完璧です。


実装 ― バッファ処理の闘いと、JSONフローの救世主

バッファ問題を突破したポイント

  • Node-RED HTTP Request Node を「バイナリモード」に設定
  • msg.payload はバッファとして扱う
  • そのまま File Node に渡せばOK(文字列変換不要)

JSONインポートの重要性

議論の中で強く共有された結論はこれ:

Node-REDはJSONインポートを使わないと沼る。

目視でフローを再現すると100%事故が起きる。
プロパティ名1文字違うだけでバッファが壊れる。
(これは多くの人が通る道…!)


結論 ― 「最新」と「履歴」を両立できる、ミニマムで強い構成が完成した

今回の議論と実装の結果、システムの土台が一気に強化されました。

完成した設計のポイント

  • Gyazo APIで画像URLを自動生成
  • MQTTで画像更新の通知
  • Node-REDがHTTP GETで画像取得
  • LATEST_JPEGで最新画像を即参照
  • 日時付きJPEGでログ保存
  • フロントエンドは静的パスを参照するだけ

これにより、
リアルタイム性 × ログ保存 × 実装の簡易さ
をすべて両立した、“美しい構成” が生まれました。


最後に ― この構成はどんなプロジェクトにも応用できる

  • Raspberry Pi のカメラシステム
  • IoTデータ収集デバイス
  • 監視カメラ
  • センサーデータログ
  • Web アプリ側への画像提供

など、幅広い用途で同じ設計が活躍します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?