LoginSignup
4
1

Node-REDのGit機能を学ぶ(4) フローをGitHubへアップロード

Last updated at Posted at 2024-03-17

 本記事は「Node-REDのGit機能を学ぶハンズオン(第2回)」で紹介した内容です。

 本記事では変更履歴を作成したNode-REDのフローを、GitHub上に共有する方法を紹介します。GitHubにフローファイルを置くことでフロー開発者は、フローをバックアップするだけでなく、他のフロー開発者に分かりやすい形で開発物一式を共有できます。本記事は、下の図の様に前回の「フローの変更履歴を管理」の続きとなります。

Screenshot 2024-03-12 at 20.44.20.png

 もしNode-REDのGit機能を有効化していない場合は「Node-REDのGit機能を学ぶ(1) 概要編」の記事を参照して設定してください。

 GitHubにアップロードするフローの例として、ここではTensorFlow.jsを用いた画像認識アプリを作成します。

画像認識アプリのプロジェクトを新規に作成

 「フローエディタの右上にあるメニューから「プロジェクト」を選び、「新規」を選択します。」

Screenshot 2024-03-11 at 22.38.00.png

 以下の様に入力して、新規プロジェクトを作成します。

# 項目 設定
1 プロジェクト名 image-recognition-app
2 説明 画像認識を行うアプリケーションです。
3 フローファイル flows.json (変更なし)
4 認証情報 暗号化を無効にする

Screenshot 2024-03-12 at 20.48.47.png

パレットの管理からノードを追加

 次に、今回のフロー開発で必要となるノードをインストールするため、メニューの「パレットの管理」を選択します。

Screenshot 2024-03-12 at 20.53.55.png

 その後「ノードを追加」のタブをクリックします。検索窓で次の3つのノードの検索し、「ノードを追加」ボタンを押してインストールします。

Screenshot 2024-03-12 at 20.54.19.png

画像認識を行うフローを作成

 以下の様なフローを作成してゆきます。本フローはui-webcamノードが起点となっており、本ノードでPCに接続されたカメラの画像を取得し、functionノードで形式を変換後、cocossdノードでカメラ画像に何が写っているか判定します。判定結果は、画像認識結果と書かれたtextノードを用いてダッシュボードの画面に表示します。

Screenshot 2024-03-11 at 21.27.48.png

 以降でこのフローを作成手順をステップバイステップで説明します。

(1) webcamノードを配置

 まず、パレットのダッシュボード2カテゴリにある「webcam」ノードをワークスペースに配置します。すると、ワークスペース上ではノードの名前がui-webcamに変更されます。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f38303961323661382d383562662d666332632d613862652d3965376231386630616462372e706e67.png

 本ノードをダブルクリックして、ダッシュボードの設定ノードを追加しましょう。

(2) ダッシュボードの設定ノードの登録

 ダッシュボードのノードには、以下の4つの設定ノードを登録する必要があります。

  • グループ: 画面上の可視化部品をまとめるための設定ノード
  • ページ: ダッシュボードの1ページを表す設定ノード
  • 画面: ダッシュボード画面のエンドポイントを作る設定ノード
  • テーマ: ダッシュボードの配色や余白などのテーマを扱う設定ノード

(2-1) グループの設定ノードを追加

 まずwebcamノードのプロパティ設定画面を開きます。すると、その中に「Group」という項目の右端にある鉛筆ボタンをクリックして、グループの設定ノードの作成画面に移ります。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f63643336323237352d633931632d623030642d396264632d6537623764383332343937332e706e67.png

(2-2) グループ名の非表示設定と、ページの設定ノードを追加

 グループの設定ノードでは、ダッシュボード画面でグループの領域の先頭に表示する名前を設定できるようになっています。今回は不要なため「グループ名を表示」のチェックボックスを外します。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f30363138346536662d343663392d363139382d653635302d6336383066623464373864622e706e67.png

 「ページ」という項目からページの設定ノードを作れる様になっています。前の操作と同じ様に右端の鉛筆マークをクリックします。

(2-3) ページの名前設定と、画面の設定ノードを追加

 ページのプロパティ設定では、ダッシュボード画面の上に表示されるタイトルを設定できるようになっています。ここでは名前の欄に「画像認識アプリ」と入力します。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f39333333383936312d613832372d376661382d306134302d3338396134613731653639362e706e67.png

 次に画面とテーマの設定ノードをそれぞれ追加してゆきます。まずは「画面」の項目の右端にある鉛筆マークをクリックしてください。

(2-4) 画面の設定ノードのプロパティ画面

 画面の設定ノードは変更することなく、右上の追加ボタンをクリックするだけでOKです。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f32396238653563352d383865372d303838642d646635372d6263396536626137373665302e706e67.png

(2-5) テーマの設定ノードを追加

 画面の設定ノードが追加されると、ページの設定ノードのプロパティ画面に戻ります。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f61393537393963372d653966612d653861332d393539372d6464643765373961336537392e706e67.png

 次に、テーマの設定ノードを追加するために、テーマの項目の右端にある鉛筆ボタンをクリックします。

(2-6) テーマの設定ノードのプロパティ画面

 テーマの設定では、ダッシュボードの配色や余白のサイズを設定できるようになっています。必要に応じて変更してみましょう。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f36336162643761622d663632612d643937352d666530302d6266313138373462623937372e706e67.png

 設定後は、右上の追加ボタンをクリックします。

(2-7) ページの設定ノードのプロパティ画面

 すると、ページの設定ノードのプロパティ設定画面に戻ります。

Screenshot 2024-03-12 at 21.23.49.png

 画面とテーマの設定ノードが追加されていることを確認できます。右上の追加ボタンをクリックして、ページの設定ノードをグループの設定ノードに追加します。

(2-8) グループの設定ノードのプロパティ画面

 グループの設定ノードのプロパティ設定画面に戻ります。

Screenshot 2024-03-12 at 21.23.49.png

 ここでも右上の追加ボタンをクリックします。

(2-9) ダッシュボード部品のノードのプロパティ設定画面

 最後に、ui-webcamノードのプロパティ設定画面に戻るため、右上の完了ボタンをクリックします。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f32353463313563332d383163662d616539312d393463642d3263376263616166383362372e706e67.png

 これでui-webcamノードのプロパティ設定は完了です。

(3) 画像データを変換するfunctionノードを配置

 ui-webcamノードはBase64形式で画像データを返すため、TensorFlow.jsノードでそのまま処理することはできません。そのため、functionノードでBuffer形式へ変換します。まずui-webcamノードの後ろにfunctionノードをつなぎます。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f61663533353161352d643761622d353864322d346130322d3739383366326537336164632e706e67.png

 functionノードをダブルクリックして、以下のようにBase64形式の文字列をBuffer形式へ変換するコードを記載します。

msg.payload = Buffer.from(msg.payload.substring('data:image/png;base64,'.length), 'base64');
return msg;

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f32366161366533622d643266612d656261372d323437302d3166333137346133303366302e706e67.png

 JavaScriptのソースコードを記載した後は、右上の完了ボタンをクリックします。

(4) 画像認識ノードを追加

 次に、画像認識を行なうcocossdノードを追加します。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f37613337666234302d343439312d323030662d373936642d6336343239393439613636652e706e67.png

 cocossdノードは、Buffer形式の画像データを受け付け、画像認識結果を文字列として返します。cocossdノードに関してはプロパティ設定を変更する必要はありません。

(5) テキストを表示するノードを追加

 その後、物体名を表示するtextノードを追加します。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f65366130303932362d616263302d643030392d323265652d3664333964303539366364362e706e67.png

 textノードはプロパティ設定を開くだけで自動的に、既存のグループが選択されます。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f30383932363532352d386661622d386330342d323963632d3961343437633039343633392e706e67.png

 ラベルの欄に「画像認識結果」と入力しておくと、ダッシュボード画面で何を出力しているか分かりやすくなります。

画像認識アプリの動作確認

 フローを作成した後、デプロイボタンを押してフローをNode-REDのランタイム側に反映します。その後、右側にあるダッシュボード2.0のタブを開き「ダッシュボードを開く」ボタンをクリックします。

68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3238373736362f38623163356238382d363939312d633433312d333436332d6138626531383861613665632e706e67.png

 すると次の画像認識アプリのUIが表示されます。真ん中の電源ボタンをクリックするとPCに接続されたカメラの映像が表示されるはずです。

Screenshot 2024-03-11 at 22.07.10.png

 さっそく画像認識アプリの動作確認をしてみましょう。カメラ画像の下にあるカメラボタンをクリックすると、PCに搭載されているウェブカメラによる撮影が行われます。しばらくすると画像認識結果の右側に物体名が表示されるでしょう。カップを撮影すると上手く「cup」と認識できました。

GitHubリポジトリを作成

 作成した画像認識アプリのフローをGitHubへアップロードしてゆきます。まず以下のURLから、GitHub上に新しいプライベートリポジトリを作成します。

 以下のようにリポジトリ設定に関する情報を入力します。

# 項目 設定
1 Repository name image-recognition-app
2 Description 画像認識を行うアプリケーションです。
3 公開設定 Private
4 Add a README file チェックなし (変更なし)
5 Add .gitignore None (変更なし)
6 Choose a license チェックなし (変更なし)

Screenshot 2024-03-11 at 22.42.32 copy.png.png

 「Reposiotry name」は、Node-REDのプロジェクト作成ダイアログで入力したプロジェクト名と同じにする必要があります。ここでは「image-recognition-app」と入力します。今回の設定では、フローにパスワードをかけていないため、リポジトリ設定は「Private」にする必要があります。README.mdファイルや.gitignoreファイルは既にNode-REDが内部で作成しており、GitHub側での作成は不要のため「Add a README file」と「Add .gitignore」のチェックは外します。

 最後に「Create project」ボタンをクリックします。

GitHubリポジトリのURLをコピー

 すると、次のような空のプライベートリポジトリの画面に遷移します。

Screenshot 2024-03-11 at 22.44.25.png

 本プライベートリポジトリのURL欄の右端にあるコピーボタンをクリックして、リポジトリのURL(スクリーンショットのケースでは「https://github.com/kazuhitoyokoi/image-recognition-app.git」)をクリップボードにコピーしておきます。

プロジェクトのメニューから「設定」を選択

 次に、GitHubリポジトリのURLをNode-REDに登録するため、メニューの「プロジェクト」から「設定」を選択します。

Screenshot 2024-03-11 at 22.47.40.png

 するとプロジェクト設定の「プロジェクト」タブが表示されます。

Screenshot 2024-03-11 at 22.47.54.png

アップロード先のリポジトリのURLを登録

 次に「設定」タブを選択して、フローをアップロードするGitHubリポジトリのURLを登録します。

Screenshot 2024-03-11 at 22.48.45.png

 まず「リモートを追加」ボタンをクリックします。その後、接続先としてクリップボードからGitHubリポジトリのURLを貼り付けます。

Screenshot 2024-03-11 at 22.48.52.png

 最後に、下にある「リモートを追加」ボタンを押せば登録完了です。

プロジェクトの情報を入力

 プロジェクトのタブでは「プロジェクトの詳細を編集」のボタンから、アプリの説明やバージョン番号を変更できます。

Screenshot 2024-03-13 at 0.06.44.png

 これら情報は、Node.jsで一般的に使われているpackage.jsonファイル内に格納されます。

 その下にある「README.mdを編集」のボタンは、アプリのドキュメントを記載するためのものです。

Screenshot 2024-03-13 at 0.09.22.png

 ドキュメントはMarkdown形式で記述でき、保存をするとREADME.mdファイルに保存され、プレビュー表示が更新されます。画像の貼り付けやMermaidにも対応しており、図を作成することも可能です。
 ここで作成したドキュメントは、GitHubリポジトリにフロー一式をアップロードした後、リポジトリのトップページから参照できるものとなります。そのため、フローの利用方法などの詳細を書いておくと親切でしょう。

ノード情報を登録

 「依存関係」タブ内には、フローで使われているノードが一覧表示されます。

Screenshot 2024-03-11 at 22.48.01.png

 各ノードの「プロジェクトへ追加」ボタンを押し、フローで利用しているノードとそのバージョンの情報を登録します。この依存関係の情報もpackage.jsonファイルのdependenciesセクションに記録されます。

GitHubのアクセストークンを発行

 GitHubリポジトリにアクセスするためのアクセストークンを下記ページから発行します。

 アクセストークンを発行するには、右上にある「Generate new token」をクリックします。

Screenshot 2024-03-11 at 22.53.06.png

 Token nameは、アプリケーション名と同じにしておくと後から分かりやすでしょう。

Screenshot 2024-03-11 at 22.53.57.png

 アクセストークンの有効期限はデフォルトで30日となっているため、長期的に使うことが分かっている場合は長めに設定します。

 Repository accessの設定では、必要最小限のリポジトリのみアクセスできるようにするため「Only select repositories」を選択し、「Select repositories」から今回作成したGitHubリポジトリ「image-recognition-app」を選択します。

Screenshot 2024-03-11 at 22.54.10.png

 また、その下の「Repository permission」の設定では、リポジトリへファイルをアップロードできるよう、Contentsのアクセスレベルとして「Read and write」を選択します。

Screenshot 2024-03-11 at 23.36.08.png

最後にOverviewで設定内容を確認した後、一番下にある「Generate token」ボタンをクリックします。

Screenshot 2024-03-11 at 23.36.50.png

 次の画面で、アクセストークンが発行されるため、右端にあるボタンをクリックしてクリップボードにコピーします。

Screenshot 2024-03-11 at 22.55.05.png

GitHubへフローをアップロード

 発行したアクセストークンを用いて、GitHubリポジトリにフローをアップロードしてゆきます。Node-REDフローエディタの画面に戻りましょう。

(1) 全ファイルを変更履歴の対象として追加

 履歴タブ上のローカルファイル右の「+全て」ボタン(マウスオーバすると「全ての変更をステージング」というツールチップが表示されるボタン)をクリックします。これによって、flows.jsonやpackage.jsonのファイルを変更履歴の対象として追加します。

Screenshot 2024-03-11 at 22.50.46.png

 本操作はGitコマンドにおける「git add -A」相当に該当します。

(2) 変更内容を入力

 次に、その左下のコミットボタンをクリックします。

Screenshot 2024-03-11 at 22.50.54.png

 すると変更内容を入力できるテキストエリアが登場します。ここでは「最初のフロー」と入力して、下の大きい方のコミットボタンをクリックしました。

Screenshot 2024-03-11 at 22.51.15.png

 内部では「git commit -m <変更内容>」が実行されます。コミット履歴を参照すると、変更内容が追加されていることを確認できるでしょう。

(3) 上下矢印ボタンを押して、ダイアログを表示

 次に「コミット履歴」内にある上下矢印アイコンのボタンをクリックします。

Screenshot 2024-03-11 at 22.51.30.png

 すると、以下の「リモートブランチの管理」ダイアログがポップアップ表示されます。

Screenshot 2024-03-11 at 22.51.39.png

 ここで「リモート:なし」をクリックします。

(4) GitHubユーザ名とアクセストークンを入力

 すると認証ダイアログが表示されるため、GitHubのユーザ名と発行したトークンを入力します。

Screenshot 2024-03-11 at 22.55.28.png

 これでGitHubリポジトリと接続できるようになりました。

(5)「main」ブランチを新規に作成

 GiHubリポジトリは空でありmainブランチがないため、下の入力欄に「main」と入力して「ブランチの作成」をクリックします。

Screenshot 2024-03-11 at 23.37.57.png

 mainブランチとは、その名の通りリポジトリの最も主要な開発を行うブランチで、いつでも他の人が使えるように最新の安定版のコードが入る所です。

(6) フローをアップロード

 最後に「プッシュ」ボタンを押すと、GitHubリポジトリ上にファイルがアップロードされます。

Screenshot 2024-03-11 at 23.38.05.png

 この時バックグラウンドではgit pushコマンドが実行されています。

ファイルアップロード後のGitHubリポジトリ

 GitHubリポジトリのページをリロードすると、以下のようにファイルがアップロードされているでしょう。

Screenshot 2024-03-11 at 23.38.45.png

 本リポジトリにはフローファイルと合わせてプロジェクト設定ダイアログで設定したREADME.mdファイル、ノードの依存情報を含むpackage.jsonファイルがあります。他のフロー開発者とフローを共有する際は、このリポジトリにアクセス権を与えるだけです。チームで開発する際は、ぜひこのGit機能を使ってみてください。

4
1
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
4
1