以降に本発明の実施に関する例を示す。以降はいずれも本発明の特徴を説明するための例であり、本発明の実施形態を限定するものではない。
以降の説明では、「インターフェース部」は、1以上のインターフェースでよい。当該1以上のインターフェースは、ユーザインターフェース部と、通信インターフェース部とのうちの少なくとも通信インターフェース部を含んでよい。ユーザインターフェース部は、1以上のI/Oデバイス(例えば入力デバイス(例えばキーボードおよびポインティングデバイス)と出力デバイス(例えば表示デバイス))と表示用計算機とのうちの少なくとも1つのI/Oデバイスでもよいし、それに代えてまたは加えて、当該少なくとも1つのI/Oデバイスに対するインターフェースデバイスでもよい。通信インターフェース部は、1以上の通信インターフェースデバイスでよい。1以上の通信インターフェースデバイスは、1以上の同種の通信インターフェースデバイス(例えば1以上のNIC(Network Interface Card))であってもよいし2以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
また、以降の説明では、「メモリ部」は、1以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも1つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
また、以降の説明では、「PDEV部」は、1以上のPDEVであり、典型的には補助記憶デバイスでよい。「PDEV」は、物理的な記憶デバイス(Physical storage DEVice)を意味し、典型的には、不揮発性の記憶デバイス、例えばHDD(Hard Disk Drive)またはSSD(Solid State Drive)である。
また、以降の説明では、「記憶部」は、メモリ部およびPDEV部のうちの少なくとも1つ(典型的には少なくともメモリ部)である。
また、以降の説明では、「プロセッサ部」は、1以上のプロセッサである。少なくとも1つのプロセッサは、典型的には、CPU(Central Processing Unit)のようなマイクロプロセッサであるが、GPU(Graphics Processing Unit)のような他種のプロセッサでもよい。少なくとも1つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも1つのプロセッサは、処理の一部または全部を行うハードウェア回路(例えばFPGA(Field-Programmable Gate Array)またはASIC(Application Specific Integrated Circuit))といった広義のプロセッサでもよい。
また、以降の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜に記憶部及び/又はインターフェース部等を用いながら行うため、処理の主語が、プロセッサ部(或いは、そのプロセッサ部を有する装置)とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な(例えば非一時的な)記録媒体であってもよい。また、以下の説明において、2以上のプログラムが1つのプログラムとして実現されてもよいし、1つのプログラムが2以上のプログラムとして実現されてもよい。
また、以降の説明では、テンプレート管理情報、変更管理情報、依存関係情報、プロジェクト管理情報、ノード管理情報、ルール管理情報及びフロー対応情報といった情報があるが、当該情報は、入力に対して出力が得られる情報である。当該情報は、どのような構造の情報でもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。
また、以降の説明では、「データセット」とは、アプリケーションプログラムのようなプログラムから見た1つの論理的な電子データの塊であり、例えば、レコード、ファイル、キーバリューペアおよびタプルのうちのいずれでもよい。
図1は、本発明の実施例1の概要を示す模式図である。図1を用いて本発明の実施例1の概要を説明する。
テンプレートフローを示すテンプレートフローデータセットF110に関する情報を含んだテンプレート管理情報T100を管理するテンプレート管理サーバ100がある。また、テンプレート管理サーバ100からダウンロードされたテンプレートフローデータセットF110(テンプレートフローデータセットF110の複製)が示すテンプレートフローを表示するビジュアルプログラミングツール400がある。また、ビジュアルプログラミングツール400によって作成(開発)されたフローを示すフローデータセットF310に関する情報を含んだプロジェクト管理情報T200を管理し、ビジュアルプログラミングツール400へのロードやビジュアルプログラミングツール400からのセーブを可能とするレポジトリ管理サーバ300がある。また、テンプレート管理サーバ100やレポジトリ管理サーバ300の情報をもとにフローの変更を分析しビジュアルプログラミングツール400によるフロー作成を支援する変更候補管理サーバ200(フロー作成支援装置の一例)がある。
レポジトリ管理サーバ300は、一般的なアプリケーション開発で用いられるソースコード(今回の場合はビジュアルプログラミングツールで開発されたアプリケーションのフローデータ)を管理するためのサーバでよく、一例としてはGitHub(https://github.com/)(登録商標)やGitLab(https://about.gitlab.com/)(登録商標)などでよい。
ビジュアルプログラミングツール400は、クライアント端末で実行されてもよいし、クライアント端末と通信可能なサーバで実行されてもよい。ビジュアルプログラミングツール400が提供する画面は、例えば、利用可能なノードの一覧表示用の第1のペインF410と、配置されたノードを含むフローの編集用の第2のペインF420と、フローから選択されたノードの属性値の変更用の第3のペインF430といった3つのペインを有する。
第1のペインF410では、各ノードF412が、当該ノードF412が該当する特性(Category)F411に分類されている。開発者は、第2のペインF420に、第1のペインF410におけるノードF412をドラッグアンドドロップなどによりノードF421として配置し、ノードF421間を結線F422で接続することにより関係(処理の流れ)を定義する。例えば、ノードの右側がデータの入力、ノードの左側が出力を表現している場合には、あるノードAの右側と別のノードBの左側をつなぐことでノードAから得た出力をノードBに入力することを表現できる。なお、第2のペインF420には、ダウンロードされたテンプレートフローデータセットF110が示すテンプレートフローが表示されてもよい。
また、開発者により第1のペインF410または第2のペインF420から特定のノードF421が選択されると、第3のペインF430に、選択されたノードF421のプロパティを構成するノード属性(ここではラベル(Key)F431と属性値F432との組)の一覧が表示される。開発者は、第3のペインF430に表示されている属性値一覧のうち所望の属性値を変更することができる。
そして、ビジュアルプログラミングツール400は、こうして表現されるフローに含まれるノードの処理をビジュアルプログラミングツール内で実行、または外部の処理サーバにデプロイしフローによって表現される処理を実行するアプリケーションを実行可能とする。または、ビジュアルプログラミングツール400は、フローをもとに計算機上で実行可能なバイナリオブジェクトを生成してもよい。こうした機能を提供するためビジュアルプログラミングツール400は、これら処理を実行する実行ボタンやデプロイボタン、またはバイナリ作成ボタンを有していてもよい。
このような構成において、アプリケーション開発者は、テンプレート管理サーバ100に定義されたテンプレートフローデータセットF110を取得し、テンプレートフローデータセットF110が示すテンプレートフローを、ビジュアルプログラミングツール400を用いて編集し、意図したアプリケーションのフローを作成(開発)することができる。このために、開発者は、例えばノードBの属性値を変更する。この場合、ノードBの属性値が変更されたことが、例えば参照符号F423が示すように、ノードBのステータス「Changed」として表示される。
ここで、開発者は、テンプレートフローを理解していない(またはテンプレートフローの理解が浅い)ため、ノードBの属性値の変更に依存した他ノードの属性値の変更の必要性(例えば、ノードCの属性値やノードDの属性値の変更の必要性)が分からない。例えば、ノードBの属性値とノードCの属性値が同種のノード属性に属しているような場合には(例えば、NodeTypeおよびCategoryの少なくとも1つが同じである場合には)、ノードBの属性値を変更したらノードCの属性値も同様に変更することが必要となるが、開発者はこれに気づけないといった状況が生じ得る。予め依存関係が明確である属性値同士に関しては、当該依存関係を事前に定義することはできると考えられる。しかし、依存関係の事前定義は手間であり、また、必ずしも全ての属性値同士の依存関係が明確ではない。例えば、ノードDが可視化(グラフ表示)するノードでありノードBやノードCの結果を表示するような場合においては、ノードBやノードCの属性の参照先を変更した場合、この結果が間接的にノードDに影響する場合がある。具体的にはノードBの属性値やノードCの属性値が変更により大きくなったため、可視化するノードDの属性値のレンジ(例えば棒グラフの縦軸)を合わせて変更する場合がある。実施例1に係る変更候補管理サーバ200は、こうした間接的な属性値同士の依存関係も算出し、当該依存関係に関する情報の通知である依存関係通知を開発者に発行できる。依存関係通知の一例として、ノードBの変更された属性値と直接的に依存関係にある属性値(ノードCの属性値)の変更提示F424や、ノードBの変更された属性値と間接的に依存関係にある属性値(ノードDの属性値)の変更提示F425がある。また、依存関係通知の一例として、更に、ノードD(変更提示がされたノードの一例)が選択された場合、ノードDの2以上の属性値のうち、ノードBの変更された属性値と依存関係にある属性値(Val3)の強調表示F432がある。このように、本実施例では、或るノードの変更された属性値と依存関係にある属性値を、当該或るノードの属性値の変更に関連して変更することが望ましい属性値として、属性値同士の依存関係の事前定義無しに提示できる。なお、「依存関係にある」とは、「依存関係の強さが一定値以上である」と読み替えることもできる。
図2は、実施例1に係るシステムの構成図である。
テンプレート管理サーバ100と、変更候補管理サーバ200と、レポジトリ管理サーバ300と、1または複数のビジュアルプログラミングツール400がネットワーク522を介して通信する。これらサーバおよびツールは、それぞれがCPUやメモリ、ハードディスクなどからなる計算機で動作する。その動作形態は、それぞれ物理的に異なる計算機上で動作していてもよいし、仮想サーバと呼ばれる物理的な計算機を論理的に分割された計算機の単位で動作していてもよい。もしくは1台の計算機または複数の計算機クラスタ上で実行されるタスク(プロセスやコンテナとも呼ばれる)単位であってもよい。本実施例では、サーバ100、200及び300は、それぞれ1以上の物理計算機で構成された計算機システムであるとする。なお、サーバ100、200及び300のいずれも、所定のソフトウェアがインストールされ実行されることで実現されるソフトウェアディファインドのサーバでもよい。
テンプレート管理サーバ100は、インターフェース部21、記憶部22及びそれらに接続されたプロセッサ部23を有する。インターフェース部21によりネットワーク522を介した通信が可能である。記憶部22は、テンプレート管理プログラム110とテンプレート管理情報T100を格納する。テンプレート管理プログラム110は、プロセッサ部23に実行される。テンプレート管理プログラム110は、テンプレートフローデータセットの登録、参照(外部へのテンプレートフローデータセットの提供)、検索などを行う。また、テンプレート管理プログラム110は、テンプレートフローデータセットを参照するためのGUI(Graphical User Interface)などを提供していてもよい。テンプレート管理情報T100は、テンプレートフローデータセットを管理するための情報であり、詳細は図4で説明する。
ビジュアルプログラミングツール400は、フロー編集のためのGUI(例えば、上述したペインF410、F420及びF430を含んだGUI)を表示するための描画プログラム410、フローの構成に関する情報を含んだフローデータセット500、そのほかフロー実行プログラム420やフロー管理プログラム430、などを含む。これらのプログラムは、プロセッサ部により実行される。フロー実行プログラム420は、フローデータセットに記述された処理を実行するものである。実行方法は、例えば、同プログラム420自身が同ツール内で個々のノードに対応する処理を行いノード間の情報を中継するようなものであってもよいし、各ノードの処理をツール外部に構築しそれを呼び出すことで実現するようなものであってもよい。もしくは同プログラム420の代わりに、計算機上で実行可能なバイナリを生成するようなものであってもよい。フローデータセット500の例は図3を用いて説明する。フロー管理プログラム430は、ビジュアルプログラミングツール400のフロー管理を行うプログラムであり、テンプレート管理サーバ100からテンプレートのフローデータを送受信するためのインターフェースや、レポジトリ管理サーバ300とフローデータの送受信を行うためのインターフェース等を提供するプログラムである。
加えて、ビジュアルプログラミングツール400またはこれを構成する各プログラムのうちいずれかが、レポジトリ管理サーバ300からのフローデータ取得や、同サーバ300へのフローデータ格納を実行するボタンを備えていてもよい。
また、ビジュアルプログラミングツール400は、複数の開発者が並行して利用されてもよい。その利用形態は開発者ごとに個々のツールが提供される形であってもよいし、1つのツールの中に、個々の開発者用の描画プログラム、フローデータセット、フロー実行プログラムほかが実行されるような形であってもよい。
レポジトリ管理サーバ300は、インターフェース部41、記憶部42及びそれらに接続されたプロセッサ部43を有する。インターフェース部41によりネットワーク522を介した通信が可能である。記憶部42は、開発者により作成されたフローデータセットに関する情報を含んだプロジェクト管理情報T200と、これを管理するためのレポジトリ管理プログラム310とを格納する。レポジトリ管理プログラム310は、プロセッサ部43により実行される。レポジトリ管理プログラム310は、前述の一般的なレポジトリ管理ソフトウェアが提供する機能を有するものであり、例えば開発したアプリケーションのソースコード(フローデータセット)の管理(登録、変更及び削除等)や、同レポジトリを利用する開発者の管理、またはプロジェクト管理情報T200の変更時の外部への通知を行うための機能が含まれる。プロジェクト管理情報T200の詳細は図5で説明する。
変更候補管理サーバ200は、インターフェース部31、記憶部32及びそれらに接続されたプロセッサ部33を有する。インターフェース部31によりネットワーク522を介した通信が可能である。記憶部32は、テンプレート管理サーバ100やレポジトリ管理サーバ300から収集した情報をもとにノードやその属性値の依存関係を分析する変更分析プログラム210と、その結果をもとにビジュアルプログラミングツールに変更候補を通知する変更通知プログラム220と、そのための情報として変更管理情報T300と依存関係情報T400とを格納する。変更分析プログラム210及び変更通知プログラム220は、プロセッサ部33により実行される。レポジトリ管理サーバ300が、依存関係を算出したり算出した依存関係に従う通知を発行したりすることは、変更分析プログラム210や変更通知プログラム220のようなプログラムがプロセッサ部33に実行されることで実現されてよい。各プログラムの処理および情報の詳細については後述する。
なお、各プログラムや情報は動作するサーバを限定するものではなく、別のサーバで動作していてもよい。例えば、変更候補管理サーバ200に含まれる変更通知プログラム220は、ビジュアルプログラミングツール400に含まれていてもよい。
図3は、フローデータセット500の一例を示す。
フローデータセットの表現の一例としては、JSONと呼ばれるデータ形式である。このほかXMLやYAMLなど他のデータ構造が採用されてもよい。
フローデータセット500は、ノードごとに、ノードをフロー上で一意に識別するためのNodeID510、ノードの種別(例えば、オブジェクト指向でのクラスに相当)であるNodeType520、ノードの分類を示すCategory530、ノードの表示名であるNodeName540、ノードの1以上のノード属性であるProperty550、フロー編集用のペイン(第2のペイン)F420での表示位置情報である座標560、及び、ノード間の接続関係を示すwires570などを含む。
なお、座標560は、3次元以上であってもよい。すなわち、座標560は、高さや、UIがタブ分けされている場合はタブのIndex情報を含んでいてもよい。また、便宜上、Propety550という構造体の中にノード属性(例えば、キー(図中key1やkey2)と属性値(図中key1に対応した0)との組)を保持する形式となっているが、Propertyというカテゴリは存在しなくてもよい。すなわちNodeID510などと並列の位置に各ノード属性の記述があってもよい。このほか、フローデータセット500は、当該フローデータセットの基になったテンプレートフローデータセットの識別子などを含んでいてもよい。
図4は、テンプレート管理情報T100の一例を示す。
テンプレート管理情報T100は、テンプレートフローデータセット毎にエントリを有する。各エントリは、テンプレートフローデータセットの一意な識別子を示すTemplateID T110と、テンプレートフローデータセットを基に生成されたフローデータセットを示すTemplateFlowData T120といった情報を格納する。TemplateFlowData T120は、対応するフローデータセット500(図3参照)に示すようなJSONデータが直接格納されていてもよいし、当該フローデータセット500の格納場所を示すポインタのようなものであってもよい。以降は便宜上、TemplateFlowData T120の値をもってフローデータセット自体が表現されているものとして扱う。
図5は、プロジェクト管理情報T200の一例を示す。
プロジェクト管理情報T200は、フローデータセット毎にエントリを有する。各エントリは、GroupName T210、ProjectName T220、TemplateID T230、及び、ChangedFlowData(例えば、ソースコード)T240といった情報を格納する。ここでは便宜上、ソースコードとしてフローデータセットしか含んでいないが、それ以外の情報を含んでいてもよい。またTemplateID T230は便宜上入れているが、これ以外の形態としてChangedFlowData T240に含まれていてもよいし、テンプレート管理サーバ100やレポジトリ管理サーバ300のログからグループまたはプロジェクトとテンプレートフローデータセットとの関係を特定してもよい。
GroupName T210に表されるグループ、およびProjectName T220に表されるプロジェクトとは、1つの形態としてはある開発者集団からなる組織(グループ)と、当該組織が開発するあるアプリケーション(プロジェクト)のソースコードと見なすことができる。以下の説明では、“xx”は、値としてのxxであり、“”という記号無しに表記されたxxは、値xxから同定される要素を意味する。例えば、“GRP1”は、値としてのGRP1であり、“”という記号無しに表記されたGPR1は、GRP1というグループを意味する。図5の例では、GRP1とGRP2のグループがあり、GRP1は、template1を編集したフローデータセット(flow1−1.json)によるアプリケーションを管理するPJ1と、template2を編集したアプリケーションであるPJ2とを開発している。なお、グループとプロジェクトの関係は1:nが一般的であるが、1:1の場合は、これら2つは同じであってもよい。
このほか、プロジェクト管理情報T200は、グループまたはプロジェクト毎に、GitHubフローやGitフロー(Gitは登録商標)に代表される開発で用いられる、ブランチと呼ばれるソースコードのスナップショットを持っていてもよい。ブランチにはmasterブランチと呼ばれる最新の実行可能なソースコードと、現在または過去のmasterから分岐したソースコードからなる。一例としては、masterブランチが最新のアプリケーションのソースコードであり、次バージョンのソースコードや最新のアプリケーションのバグ修正が別ブランチとして扱われる。このような複数のブランチからなる場合においては、以降、特に指定しない場合はmasterブランチを用いることとする。これはmasterブランチが、リリースしている最新のソースコードが格納することが一般的であるためである。この代わりに対象とするソースコードのブランチとして、更新日時が最新のブランチを用いるなどのルールを設けてもよい。
また、グループ単位またはプロジェクト単位にアクセス権が管理されており、GRP1に所属するがGRP2に所属しない開発者は、GRP2の情報を参照できないことが一般的である。本実施例では、直接、他のグループやプロジェクトのフローデータを参照することなく、複数の開発者の知見を依存関係情報T400(図7参照)に反映することができる。
図6は、変更管理情報T300の一例を示す。
変更管理情報T300は、テンプレートフローに含まれるノードの属性値が、各グループまたはプロジェクトで変更されているか否かを表現するものである。
変更管理情報T300は、ノード属性毎にエントリを有する。1つのノード属性を例に取り(図6の説明において「対象ノード属性」)、そのノード属性に対応したエントリに格納される情報を説明する。
エントリは、対象ノード属性を含んだテンプレートフローのデータセットの識別子を示すTemplateID T310と、対象ノード属性が関連付いたノード(テンプレートフローに含まれるノード)の識別子を示すNodeID T320と、対象ノード属性に含まれるキー(属性値の識別子)を示すNodeKey T330と、対象ノード属性に含まれる属性値を示すTemplateVal T340と、対象ノード属性又はその編集後のノード属性を含むフロー(アプリケーション)を開発しているグループおよびプロジェクトの名称であるGroupName T350およびProjectName T360と、当該フローにおける属性値(対象ノード属性中の属性値に対応する値)を示すPjVal T370と、当該フローにおける属性値(対象ノード属性中の属性値に対応する値)が対象ノード属性中の属性値が変更されたかを示すChangedFlag T380(“true”は変更されたことを意味)とを格納する。具体的な生成の過程および利用方法は、後述する。
図7は、依存関係情報T400の一例を示す。
依存関係情報T400は、テンプレートフローに含まれるノードおよびそのノード属性間の依存関係を管理する情報である。依存関係情報T400は、テンプレートフローデータセット毎に存在する。図7の説明では、1つのテンプレートフローデータセットを例に取る。
依存関係情報T400は、テンプレートフローにおけるノードのノード属性毎に、当該ノード属性(ChangedNode)と、当該ノード属性以外の各ノード属性(RelatedNode)との依存関係の強さを表す数値である依存関係値を有する。或るノード属性間について、依存関係値は、一方のノード属性(ChangedNode)の属性値を変更したときに他方のノード属性(RelatedNode)の属性値が変更される度合い(変更される可能性)を示す。当該度合いの一例が、条件付確率である。図の例では、node1のkey1に対応した属性値を変更したとき、合わせてnode2のkey3に対応した属性値が変更される条件付確率が0.8(80%)である。本実施例では、条件付確率が扱われるが、依存関係値は、このほかに、例えば、テンプレート管理情報T100やプロジェクト管理情報T200から導かれたノードおよび属性によって事前定義される関数(f(NodeID,NodeKey))から得られた値であってもよい。
依存関係情報T400の具体的な算出方法および利用方法は、後述する。
図8は、変更分析プログラム210が行う処理を示す。
変更分析プログラム210は、テンプレート管理情報T100と、各テンプレートを利用して開発者によって開発された様々なアプリケーションの情報であるプロジェクト管理情報T200から、変更管理情報T300と依存関係情報T400を生成し、属性値同士の依存関係(すなわち、あるノードの属性値が変更されたときに別のノードの属性値の変更されやすさ)を算出するプログラムである。
また、実施例1ではテンプレートフローの複製(例えば、ダウンロードされたテンプレートフローデータセットが示すテンプレートフロー)をもとにフローを作成する場合、オリジナルのテンプレートフローに含まれるノードのNodeIDと、グループまたはプロジェクトにダウンロードされた当該テンプレートフロー(テンプレートフローの複製の一例)に含まれるノードのNodeIDは変わらないという前提を置いている。すなわち、オリジナルのテンプレートフローとダウンロードされたテンプレートフロー(グループまたはプロジェクトにおけるテンプレートフロー)間で、同じ位置づけのノードはNodeIDも同じ、という前提を置いている。仮にテンプレートフローをもとにグループおよびプロジェクトのフローを生成した際に、NodeIDが変更となるようなシステムに適用する場合は、テンプレートフローに含まれるノードのNodeIDと、グループおよびプロジェクトのフローに含まれるノードのNodeIDとの対応関係を別途持つなどの対応することで適用可能である。
変更分析プログラム210は、処理を開始し(S100)、レポジトリ管理サーバ300へのフローデータセットの登録を監視し、開発者による同サーバ300へのフローデータセットの登録(フローデータセットの変更)イベントを検出する(S110)。
この処理の開始(S100)とは、本システム起動時に立ち上がるような形であってもよいし、レポジトリ管理サーバ300へのフローデータセットの登録イベントを契機として起動するような形態であってもよい。またフローデータセットの登録イベントの検出は、変更分析プログラム210がレポジトリ管理サーバ300のプロジェクト管理情報T200の変更を監視し検出するような形態であってもよい。または事前にレポジトリ管理サーバ300に変更が発生した場合はレポジトリ管理サーバ300が変更分析プログラム210に通知する設定を行っておき、レポジトリ管理サーバ300が変更を通知するような形態(一例としてはWebHookという仕組み)であってもよい。
次に、変更分析プログラム210は、変更管理情報T300を参照し、プロジェクト管理情報T200の変更が新規プロジェクトの登録なのか、既存プロジェクトの変更なのか判定を行う(S120)。具体的には、変更管理情報T300のGroupName T350とProjectName T360にプロジェクト管理情報T200で今回変更が発生したフローデータセットに対応する(今回の登録イベントに対応する)GroupName T210とProjectName T220が存在しなければ(S120:Yes)、処理がS130(新規登録)へ進み、そうでなければ(S120:No)、処理がS140(更新登録)へ進む。
新規登録の場合、変更分析プログラム210は、新規に登録されたグループおよびプロジェクトのフローデータセットを変更管理情報T300に登録する(S130)。具体的には、変更分析プログラム210は、今回の登録イベントに対応するGroupName T210とProjectName T220に関連付いているTemplateID T230を参照し、基となったテンプレートフローデータセット(参照したTemplateID T230に対応するテンプレートフローデータセット)を特定する。そして、変更分析プログラム210は、当該TemplateID T230に対応したChangedFlowData T240が示すフローデータセットに含まれるノードのNodeIDおよびNodeKeyごとに、変更管理情報T300にデータを追加する(以下、NodeIDおよびNodeKeyの組を「NodeID/NodeKey」と表記する)。すなわち、対象となるグループおよびプロジェクト(以下、「グループ/プロジェクト」と表記)のChangedFlowData T240が示すフローデータセットに含まれる各NodeID/NodeKeyについて、変更管理情報T300の対応するTemplateID T310/NodeID T320/NodeKey T330が一致する部分に、GroupName T350(GroupName T210に一致する値)、ProjectName T360(ProjectName T220に一致する値)、および、PjVal T370(ChangedFlowData T240に含まれる対応したNodeID T320およびNodeKey T330を基に特定される値)を登録する。その上で、変更分析プログラム210は、TemplateVal T340とPjVal T370の間に変更があればChangedFlag T380を“true”に、なければ“false”を設定する。
既存データセットの更新登録の場合、変更分析プログラム210は、S140を行う。すなわち、変更分析プログラム210は、変更が発生したフローデータセット(ChangedFlowData T240が示すフローデータセット)に含まれるNodeID/NodeKeyごとに、変更管理情報T300のTemplateID T310、NodeID T320、NodeKey T330、GroupName T350、ProjectName T360が一致するPjName T370を、更新後のChangedFlowData T240が示すフローデータセットのNodeIDおよびNodeKeyで特定される値に書き換える。さらに、変更分析プログラム210は、書き換え後の値で、TemplateVal T340とPjVal T370の間に変更があれば、ChangedFlag T380を“true”に、なければ“false”を設定する。
以上の処理において、フロー開発中にノードが新規登録されたことによりテンプレートフローデータセットまたはその複製には存在しないNodeIDが存在する場合がある。このような場合は、当該NodeIDを無視(対象としない)といった処理をすればよい。逆にテンプレートフローデータセットまたはその複製からフロー開発中にノードが削除された場合も、同様に当該ノードは無視(対象としない)といった処理をすればよい。
また、S130およびS140の変更管理情報T300の生成および変更において、ノード属性のうち特定の情報は除外する、などの対応をしてもよい。一例としては、ノードの座標560やノードの表示名(ラベル)であるNodeName 540である。これは座標やラベルがビジュアルプログラミングツールにおいて、表示にかかわるものであって、開発されるアプリケーションの処理(機能)に寄与するものではないためである。
このように更新された変更管理情報T300を用いて、変更分析プログラム210は、ノード間の依存関係を計算する処理を行い(S150)、処理を終了する(S160)。このため、テンプレートフローデータセットに基づいて開発されているグループおよびプロジェクトのフローデータセットの情報(すなわち変更管理情報T300)に基づいて、変更分析プログラム210は、あるノードの属性が変更されたときに別のノードの属性が変更される可能性(条件付確率)を算出する。
一例としては、NodeIDとNodeKeyで特定されるノードの属性値AとBについて、属性値Aが変更されたときの属性値Bが変更される確率P(A→B)は、以下数1のように計算し、依存関係(依存関係の強さ)を算出できる。
例えば、変更管理情報T300の一例を示す図6において、node1のkey1の属性値が変更されたとき、変更分析プログラム210は、同じくnode1のkey2が変更される確率P(key1→key2)を計算する。数1の分母は、ChangedFlag T380が“true”のものがグループ/プロジェクトでGRP1/PJ1の1つのため、“1”となる。一方で、数1の分子は、key1のChangedFlag T380が“true”かつkey2のChangedFlag T380が“true”のグループ/プロジェクトは存在しない(key2についてGRP1/PJ1はChangedFlag T380が“false”のため対象にならず、GRP3/PJ4はkey2のChangedFlag T380は“true”であるが前提のkey1のChangedFlag T380が“false”であるため対象とならない)ため、“0”となる。よって、変更分析プログラム210は、P(key1→key2)=0/1=0、といったように計算できる。
以上のように、変更分析プログラム210は、計算される条件付確率P(A→B)を、全TemplateID T310、NodeID T320およびNodeKey T330の組み合わせについて計算し、テンプレート毎の依存関係情報T400を更新する。例えば、前述の例では、template1において、P(node1/key1→node1/key2)=0であるため、変更分析プログラム210は、template1に対応した依存関係情報T400において、ChangedNodeのうちの“node1”/“key1”と、RelatedNodeのうちの“node1”/“key2”に対応したセルの値を更新する(0とする)こととなる。
なお、数1について、ChangedFlag T380が“true”であるプロジェクト数のほか、変更分析プログラム210は、フローの接続関係を考慮してもよい。すなわち、変更分析プログラム210は、フローデータセット500の接続情報570などから、ノードAとノードBが、直接的にまたは間接的に(複数のノードを中継して)接続しているかを判定し、接続している場合にのみ分子または分母のプロジェクト数としてカウントするとしてもよい。これは、テンプレートフローには、機能または役割などの違いから互いに接続関係のない複数のフローが含まれる場合(例えば、ノードAがノードBに直接的にまたは間接的に接続された第1のフローと、ノードCがノードDに直接的にまたは間接的に接続された第2のフローがあり、第1のフローと第2のフローに接続関係がない場合)があるため、それらを独立として扱ってもよいことを意味する。
図9は、変更通知プログラム220が行う処理を示す。
変更通知プログラム220は、ビジュアルプログラミングツール400で開発者がフローを開発する際に、依存関係情報T400をもとに他に変更が必要なノード属性があれば、それを開発者に通知するための処理を行うものである。
変更通知プログラム220は、処理を開始し(S200)、ビジュアルプログラミングツール400を監視し、開発者による同ツール400へのフロー変更イベントを検出する(S210)。
この処理の開始(S200)とは、本システム起動時に立ち上がるような形であってもよいし、別の形態としてはビジュアルプログラミングツール400のフロー変更イベントを契機として起動するような形態であってもよい。
またフロー変更イベントの検出方法として、変更通知プログラム220がビジュアルプログラミングツール400上の変更を監視し変更を検出するような形態であってもよいし、前述のWebhookのようにビジュアルプログラミングツール400にイベント通知先として変更通知プログラム220を登録しておきビジュアルプログラミングツール400が同プログラム220に変更を検出(通知)するような形態であってもよい。または、ビジュアルプログラミングツール400からの変更イベント検出の代替として、レポジトリ管理サーバ300のプロジェクト管理情報T200へのフローデータ登録が採用されてもよい。
変更通知プログラム220は、ビジュアルプログラミングツール400の開発者が編集中のフローデータセット500と、当該フローデータセット500の基であるテンプレートフローデータセットのTemplateIDと、当該TemplateIDに対応するテンプレートフローデータセットとを取得し、テンプレートフローデータセットからフローデータセット500への編集における変更点を抽出する(S220)。TemplateIDは、プロジェクト管理情報T200から取得され、テンプレートフローデータセットは、テンプレート管理情報T100から取得される。また、ここでの「変更点」とは、フローデータセットとテンプレートフローデータセットとの差分の一例である。具体的には、「変更点」とは、取得されたフローデータセット500とテンプレートフローデータセットに含まれるNodeIDとNodeKeyが同じであって、これらNodeID/NodeKeyで特定される属性の値(属性値)が異なるものを指す。このとき、フローデータセット500を、変更通知プログラム220は、ビジュアルプログラミングツール400のI/F(API(Application Programming Interface))を直接呼び出すことによって取得してもよいし、変更イベントの構成要素としてフローデータセット500が含まれるようなケースでは変更イベントを参照するような形態であってもよい。また、フローデータセット500の代わりに、変更通知プログラム220は、プロジェクト管理情報T200から対応するフローデータセットを取得してもよい。
次に、変更通知プログラム220は、テンプレートフローデータと編集中のフローデータセット500間でNodeIDとNodeKeyが同じであって属性値が異なるNodeIDとNodeKeyの組み合わせ(以下、変更対象NodeID/NodeKeyグループと呼ぶ)について、依存関係があるが未変更のNodeID/NodeKeyを抽出する(S230)。
具体的には、例えば、変更通知プログラム220は、変更対象NodeID/NodeKeyグループに含まれる各NodeID/NodeKey(以下、C)について、対応したTemplateIDの依存関係情報T400を参照し、数2を満たすような、NodeID/NodeKeyの組み合わせ(以下、変更候補NodeID/NodeKeyグループ)を抽出する。
すなわち、変更通知プログラム220は、Cが変更されたときに合わせて変更されることが多い(=条件付き確率がθ以上である)NodeID/NodeKeyの組み合わせを抽出する。このとき、θは、事前に定義された閾値であり、TemplateIDごとに異なってもよいし、全体で共通であってもよい。一例としては、θは、パレート法則で用いられる0.8(80%以上が変更していたら変更の可能性が高いとみなす)である。図7に示す依存関係情報T400の例では、template1のnode1/key1をCと見なした場合、node2/key3などが変更候補NodeID/NodeKeyグループに属するNodeID/NodeKeyとして抽出される。
そして、変更通知プログラム220は、未変更のNodeID/NodeKeyグループ(以下、未変更NodeID/NodeKeyグループ)を定義する。例えば、未変更NodeID/NodeKeyグループは、集合論的には数3のように定義される。
すなわち、変更通知プログラム220は、NodeID/NodeKeyが変更候補NodeID/NodeKeyグループに含まれていて、変更対象NodeID/NodeKeyグループに含まれていないNodeID/NodeKeyの集合、を抽出する。
次に、変更通知プログラム220は、依存関係にある属性値同士の全ての属性値(NodeID/NodeKeyに対応した値)が変更済みかを判定する(S240)。具体的には、変更通知プログラム220は、未変更NodeID/NodeKeyグループが空であるか否かを判定する。
未変更NodeID/NodeKeyグループが空である(すなわち全て変更済み)ならば(S240:Yes)、処理が終了する(S260へ進む)。
逆に、未変更NodeID/NodeKeyグループが空でない、すなわちあるNodeID/NodeKeyに合わせて変更される可能性が高いNodeID/NodeKeyのうち未変更のものが存在ならば(S240:No)、処理がS250へ進む。
変更通知プログラム220は、S230で未変更と判定したNodeID/NodeKeyの組み合わせを、S210で変更イベントを受領した対象のフローデータセット500を編集中の開発者に通知する(S250)。具体的には、変更通知プログラム220は、未変更NodeID/NodeKeyグループに含まれるNodeID/NodeKeyの一覧を開発者に通知する。
通知方法としては、一例としては、図1のビジュアルプログラミングツール400で示すように、UI(User Interface))上に表示する方法がある。この場合、変更通知プログラム220は、描画プログラム410に未変更NodeID/NodeKeyグループの情報を通知することで、未変更NodeID/NodeKeyグループに含まれるNodeID/NodeKeyの属性値F432を第3のペインF430で強調表示するほか、第2のペインF420上に、未変更ノードを意味するステータス“To Change”(F424およびF425)などを表示することができる。
加えて、GroupName T210で特定されるグループまたはProjectName T220で特定されるプロジェクトに所属する複数の開発者がそれぞれ異なるビジュアルプログラミングツールを用いて1つのフローデータセットを編集するような場合がある(すなわち1つのフローデータセットを複数のビジュアルプログラミングツールが編集する場合がある)。このような場合には、各フローとこれを編集しているビジュアルプログラミングツール(例えばそれの識別子や通知先)の関係をレポジトリ管理サーバ300(または、他のサーバ100または200)で管理しておき、この情報を元に、同一フローデータセットを編集する複数のビジュアルプログラミングツールに変更を通知するような形態であってもよい。
または別の形態として、これら変更すべきだが現時点で未変更NodeID/NodeKeyの一覧をビジュアルプログラミングツール上または別のUI上で表示するような形態であってもよい。またはメールやチャットなどのコミュニケーションツールを備える開発環境では、こうした別のコミュニケーションツールを用いて前述の一覧を通知するような形態であってもよい。
表示のタイミングは、上述したように、変更イベントの検出(S210)に依存する。すなわち、フロー変更の都度にフローの変更イベントが検出できる場合には、ノード変更のたびに未変更ノード(ノード属性の変更が推奨されるノード)の通知をすることができる。また、ビジュアルプログラミングツール400がレポジトリ管理サーバ300への登録またはフロー実行プログラム420への実行指示ボタンを備え、これの押下を契機に変更イベントが検出できる場合には、この押下のタイミングで未変更ノードの通知をすることができる。
実施例2を説明する。その際、実施例1との相違点を主に説明し、実施例1との共通点については説明を省略または簡略する。
実施例1では、テンプレートフローからノード自体を変えない、すなわちノードのNodeID、NodeTypeおよびCategoryといったノード実体要素(ノード実体を定義する複数のノード関連要素)が変わらないことを前提に、同時に変更されうるノードの属性値を開発者に提示する方法を示した。しかし、用途によっては、ノード実体を変更したい、すなわち、NodeID、NodeTypeおよびCategoryの少なくとも1つが変更となる場合がある。例えば、データを入力するノードについてHTTPリクエストを受け付けるノードから別のプロトコルを受け取るノードに変更する場合や、グラフで可視化するノードについて時系列で折れ線グラフ表示するノードを別の可視化方法(例えば、ある一時点のデータを可視化するゲージ表示)のノードに変更するような場合である。
実施例2は、事前にノード間の互換性の定義がされる。これにより、あるノードが別のノードに置き換わっても(ノード実体が変わっても)、フロー全体として同時に変更されうるノードの属性を開発者に提示することが可能となる。
これを実現するため、実施例2における変更候補管理サーバ200は、実施例1で示した各情報に加え、後述のノード管理情報T500およびルール管理情報T600を保持し、変更管理情報T300の代わりにフロー対応情報T700を保持する。また、変更分析プログラム210は図8の処理の代わりに図14の処理、変更通知プログラム220は図9の処理の変わりに図15の処理をそれぞれ行う。
図10は、ノード管理情報T500の一例を示す。
ノード管理情報T500は、ノードに関する情報を持っており、例えば、同情報T500を基に、ビジュアルプログラミングツール400の画面の第1のペインF410にノード一覧が表示される。同情報T500は、ノード毎にエントリを有する。各エントリが、NodeType T510(図3に示すNodeType520に対応)、Category T520(図3に示すCategory530に対応)、NodeKey T530(図3に示すProperty550中のkey1、key2等に対応する属性値を特定するためのラベル)およびこれらの組み合わせの特徴を表すTag T540を格納する。Tag T540は、事前にノードやその属性値の意味や使われ方等を考慮して付与されるメタ情報である。Tagの一例としては、NodeKeyで特定される属性値に入る値が「文字列」や「ネットワーク上の識別子(IPまたはホスト名)」、等である(図10のtagの具体例ではtag4が「文字列」、tag2が「ネットワーク識別子」が該当するとする)。
図11は、ルール管理情報T600の一例を示す。
ルール管理情報T600は、ノードまたはノード属性の互換性に関するルール(具体的には、実施例2において、ビジュアルプログラミングツール400の画面の第1のペインF410に表示されるノードまたはそれのノード属性のどれとどれを同じとして扱うかというルール)を定義する情報である。
ルール管理情報T600は、ルール毎にエントリを有する。各エントリは、ルールの識別子であるRuleID T610と、具体的なルールの記述であるRules T620と、当該ルールが利用されるか否かを示すSelectedFlag T630とを格納する。
Rules T620の例としては、次のようなものがある。すなわち、Rule0によれば、ノードのNodeID/NodeKeyが同じものは、テンプレートフローとプロジェクトによって開発されたフロー間の当該NodeKeyで特定される属性値は同じとして扱われる。Rule1によれば、ノードの種類(NodeTypeおよびCategory)に限らずノードのNodeKeyが同じ値(同じラベル)のものは、テンプレートフローに含まれるノードが別のノードに変わったとしても(NodeIDが異なったとしても)当該NodeKeyで特定される属性値は同じとして扱われる。Rule2によれば、ノード管理情報T500においてノードのCategoryおよび同Categoryに含まれるNodeKeyが同じ属性値は、テンプレートフローに含まれるノードが別のノードに変わったとしても当該NodeKeyで特定される属性値は同じとして扱われる。Rule3によれば、tag T540がすべて同じであるNodeType T510、Category T520、NodeKey T530の組み合わせによって特定される属性値は、テンプレートフローデータに含まれるノードが別のノードに変わったとしても同じとして扱われる。このほか、例えばtagが1つ以上同じ、といったルールが含まれていてもよい。
このように定義されるルールのうち、SelectedFlag T630が“true”のルールが、後述する実施例2の変更分析プログラム210および変更通知プログラム220で考慮される。SelectedFlag T630は、環境全体を提供する管理者などによって事前に定義されている(SelectedFlag T630が“true”のものが選択されている)ことを想定するものである。またSelectedFlag T630が“true”のものは複数選択されていてもよい。以降ではSelectedFlag T630が“true”のものが複数ある場合は論理和(すなわち、いずれか1つのルールに該当していればよい)条件として説明を進めるが、このほか論理積(全てのルールに該当していることが必要)とした処理であってもよい。
なお、図11に示すルール管理情報T600の例に示すルールのうち、Rule0のみを適用したものが、実施例1に相当すると見なすことができる。
図12は、フロー対応情報T700の一例を示す。
同情報T700は、ルール管理情報T600で選択されたルールに基づいて、テンプレートフローデータセットと、あるグループおよびプロジェクトによって開発されたフローデータセット(フローデータセット500またはChangedFlowData T240)とのNodeIDおよびNodeKeyの対応関係を保持する情報である。
具体的には、同情報T700は、テンプレートフローデータセットに含まれるノード属性ごとにエントリを有する。各エントリは、テンプレートフローデータセットに含まれる情報T710(T711、T712、T713、T714)と、グループおよびプロジェクトによって開発されたフローデータセットに含まれる情報T720(T721、T722、T723、T724、T725)と、これら2つのノード属性間で属性値が変更されているかどうかを示すChangedFlag T730(変更管理情報のChangedFlag T380と同種のもの)とを格納する。この情報T710とT720の対応は、ルール管理情報T600を適用することで対応関係が決まるものである。
情報T710は、テンプレートフローデータセットの識別子であるTemplateID T711と、当該テンプレートフローデータセットに含まれるNodeID T712、NodeKey T713、およびこれらで特定される値T713とを含む。情報T720は、開発するグループおよびプロジェクトの識別子であるGroupName T721とProjectName T722と、開発されるフローデータセットに含まれるNodeID T723、NodeKey T724、およびこれらで特定される値T725とを含む。
同情報T700の読み方としては、例えば次の通りである。すなわち、1行目のエントリによれば、template1に関し、node1/key1で特定される属性値Xは、GRP1/PJ1によって開発されたフローデータセットのうちのnode4/key41の属性値Yと対応しており、属性値Yは、属性値Xの変更後の値(ChangedFlag T770が“true”)である。
この情報T700の生成方法については、後述する。
以上図10〜図12に示す情報を用いることによって、ビジュアルプログラミングツール400の画面に表示のノードまたはそのノード属性を特定のルールに基づいてグループ化し、同一のグループ内では、仮にテンプレートフローデータセットからノード実体およびキーの少なくとも1つが変更となっても、同じとして扱うことが実現できる。その処理の概略を、図13を用いて説明する。また具体的な処理フローについては、図14および図15を用いて説明する。
以降、図13を用いて実施例2の処理、特に変更分析プログラム210で行う処理について概要を説明する。
まずStep1として、変更分析プログラム210は、グループ/プロジェクトで開発されたビジュアルプログラミングツール400のフローデータセット500(またはレポジトリ管理サーバ300に格納されたChangedFlowData F310)と、その元となったテンプレートフローデータセットF110とに対して、(必要に応じノード管理情報T500を用いつつ)ルール管理情報T600で選択されたルールを適用する。これによって、テンプレートフローのNodeID/NodeKeyと、これと同等として扱えるNodeID/NodeKeyとの組み合わせを示すフロー対応情報T700が生成される。
次にStep2として、変更分析プログラム210は、フロー対応情報T700をもとに、テンプレートフローに含まれるNodeID/NodeKeyに変換した形式で依存関係情報T400を更新していく。すなわち、例えば、図12に示した情報T720の1行目のエントリでは、GRP1/PJ1にて開発されたフローデータセットに含まれるnode4/key41に対応した属性値の変更は、template1に含まれるnode1/key1に対応した属性値の変更と同じである、つまり、それらの属性値が対応していると見なされる。このため、それらの属性値が同じであれば、差分無しと見なされ、それらの属性値が異なっていれば、差分有りと見なされる。この結果に基づき依存関係情報T400が更新される。
このようにテンプレートフローデータセットのNodeID/NodeKeyで依存関係情報T400を定義しておくことで、開発においてノードに変更があっても、ノード属性置換の変更有無(つまりノード属性の互換性)を判定することができるようになる。
同様に、変更通知プログラム220の処理(詳細は図15で示す)においても、依存関係情報T400に対してフロー対応情報T700を適用することで、テンプレートフローデータセットのNodeID/NodeKeyからフローデータセットにおけるNodeID/NodeKeyへ変換し、当該フローデータセットを編集するビジュアルプログラミングツール400に、未変更のノードの属性値を通知することが可能となる。
図14は、実施例2における変更分析プログラム210の処理を示す。
実施例2の変更分析プログラム210は、実施例1と同様の処理(S100)を開始する(S300)。
そして、変更分析プログラム210は、各ビジュアルプログラミングツール400を監視する。変更分析プログラム210は、いずれかのビジュアルプログラミングツール400にテンプレート管理サーバ100からテンプレートフローデータセットがダウンロードされたことを検出した場合、当該テンプレートフローデータセットが新規のテンプレートフローデータセットか否かを判定する(S310)。この判定方法としては、変更分析プログラム210が個々のビジュアルプログラミングツール400のフローデータセット500を参照し検出するような方法であってもよいし、前述のWebHookのようにビジュアルプログラミングツール400(またはそれに含まれるフロー管理プログラム430など)が変更分析プログラム210に通知するような方法であってもよい。
次に、新規テンプレートフローデータセットの取得の場合(S310:Yes)、変更分析プログラム210は、フロー対応情報T700の初期設定を実施する(S320)。ここでの初期設定とは、フロー対応情報T700に対して、新規テンプレートフローデータセットにおける各ノード属性について、当該ノード属性に対応したエントリを追加する。追加された各エントリでは、ChangedFlag T730は、“false”である。例えば、GRP a/PJ bが用いるビジュアルプログラミングツールが、template nをダウンロードし、当該template nがnode m、key l、及び、Val vを含むときを考える。このとき、フロー対応情報T700に、TemplateID T711が“template n”、NodeID T712およびT723が“node m”、NodeKey T713およびT724が“key l”、Val T714およびT725が“Val v”、GroupName T721が“GRP a”、ProjectName T722が“PJ b”、ChangedFlag T730が“false”であるようなエントリ(行)が、挿入される。
次に、変更分析プログラム210は、ビジュアルプログラミングツール400上のフローデータセットに含まれるノード実体またはノード属性が変更されたか否かを判定する(S330)。変更がない場合は、そのまま待機する(S310またはS330が発生するのを待つ)。変更が発生した場合(S330:Yes)、処理がS340に進む。
S340(図13のStep1に対応)として、変更分析プログラム210は、S330で変更発生と判定したノードについて、ルール管理情報T600の選択されているルール(加えて必要に応じてノード管理情報T500)をもとに、フロー対応情報T700を更新する(図13の概念図のStep1に対応)。
以下、S330の変更判定において、“GRP a/PJ bが、ビジュアルプログラミングツールを用いて開発するフロー(以下、開発フロー)の基のtemplate nから派生したものであり、template nのテンプレートフローに含まれるノードAが開発フロー上でノードBに変更されたとS330で判定したとして具体的に説明する。また便宜上、前述ノードAのことを変更前ノード、ノードBのことを変更後ノードと呼ぶこととする。
S340の一例では、ルールとして図11の例に示すルールのうちRule0が選択されているとする。また、変更後ノードと変更後ノードのNodeID/NodeKeyが同じであるとする。この場合、変更分析プログラム210は、変更後ノードのNodeID/NodeKeyで特定される属性値でVal T725を更新する。そして、Val T714とT725が異なる場合、変更分析プログラム210は、ChangedFlag T730を“false”に設定する。
逆に、NodeIDが変更前ノードと変更後ノードで異なっているとする。この場合には、変更分析プログラム210は、そのようなノードが存在しないことを意味する空(例えば、“None”や“Null”)(図12のフロー対応情報T700の下から2行目のエントリを参照)をNodeID T723やNodeKey T724に入れる。変更分析プログラム210は、他にルールが選択されていなければ以上で処理を終了し、選択されていれば当該ルールに従った更新を行う。
このほかRule1が選択されている場合には、変更前ノードと変更後ノードでNodeIDが違っても、NodeKeyが同じ(例えば図10のノード管理情報T500においてNodeType“inject”と“debug”ノードはNodeKey T530“text”が同じ)場合に、変更分析プログラム210は、変更前ノード(すなわちテンプレートフロー)のNodeID/NodeKeyと、GRP a/PJ bで特定されるエントリ(フロー対応情報T700のエントリ(行))において、NodeID T723を変更後ノードのNodeIDに変更し、Val T725を変更後ノードのNodeID/NodeKeyで特定される属性値に変更する。その上で、変更分析プログラム210は、当該エントリにおけるChangedFlag T730を更新する。NodeKeyが変更前ノードと変更後ノードで一致しないものについては、Rule0と同じく、変更分析プログラム210は、NodeID T723やNodeKey T724、Val T725に空を入れる。
このほか、例えばRule2が選択されている場合には、変更分析プログラム210は、Rule1に加えて、ノード管理情報T500を参照し、Category T7520が一致していれば、Val T725の更新処理を行い、それ以外は空を入れる。例えば図10の例ではNodeType“http”と“mqtt”はともにCategoryが“input”でNodeKey“adress”は同じと扱える。一方で、NodeType“inject”と“debug”はNodeKey“text”は同じであるが、Categoryが違うため同じと扱えない。
このほか、例えばRule3が選択されている場合には、変更分析プログラム210は、Category同士の一致とNodeKey同士の一致の代わりに、ノード管理情報T500のTag T540が全て一致するもの同士が同じと扱う。通常、正しくtagが設定されていれば、1つのノードの中でtagが全て一致するNodeKeyが複数存在することはないと考えられる。もし、tag全て一致するNodeKeyが複数存在した場合は、それらを全て同じとして扱う、またはさらにNodeKeyや属性値が最も近いものを選択する、などの対応を、変更分析プログラム210は、とってもよい。
以上のようにして、変更分析プログラム210は、フロー対応情報T700を更新していく。
S350(図13のStep2に対応)として、変更分析プログラム210は、このように更新されたフロー対応情報T700から、依存関係情報T400を更新する。計算方法は、実施例1の数1と同じでよい。すなわち、条件付確率は、テンプレートフローデータセットに含まれるNodeID/NodeKeyを用いて計算する。具体的には、変更分析プログラム210は、情報T310の代わりに情報T711を、情報T320の代わりに情報T712を、情報T330の代わりに情報T713を、情報T350の代わりに情報T721を、情報T360の代わりに情報T722を、情報T380の代わりに情報T730を用いて計算をすることとなる。また、フロー対応情報T700においてTemplateFlow T710に対応するChangedFlow T720が存在しないエントリがある(情報T723やT724に空を示す“None”や“Null”が入っているエントリがある)場合、変更分析プログラム210は、当該エントリに関する数を、条件付き確率の計算の母数から除外するといった処理を行ってもよい。このようにテンプレートフローデータセットに含まれるNodeID/NodeKeyを用いることで、個々のグループおよびプロジェクトでNodeIDが変更となっても、関連して変更されやすいノードおよびその属性を扱うことができるようになる。
なお、以上では、変更分析プログラム210がビジュアルプログラミングツール400のフローデータセット500を用いることでフロー対応情報T700および依存関係情報T400を作成および更新する例を示した。このほか、ビジュアルプログラミングツール400のフローデータセット500の代わりに、レポジトリ管理サーバ300に含まれるChangedFlowData T240(図1上のデータセットF310)が用いられてもよい。この場合、S330におけるノード変更の検出(判断)は、ビジュアルプログラミングツール上のノードの変更履歴(操作履歴)やレポジトリ管理サーバのChangedFlowDataの登録履歴(変更履歴やコミット履歴とも呼ばれる)をもとに実施されればよい。もしくはChangedFlowDataに含まれるノードの接続関係から、変更されたノードが判定されてもよい(例えば図13のテンプレートフローデータセットF110が示すように、node1がnode2とnode3と接続しているテンプレートが、ChangedFlowDataでnode4がnode2とnode3に接続しているフローデータとなった場合には、node1がnode4に変更された、と見なすことができる)。
図15は、実施例2における変更通知プログラム220の処理を示す。
実施例2の変更通知プログラム220は、実施例1と同様の処理(S200)を開始し(S400)、同じく実施例1の処理S210と同様にノード変更イベントを検出する(S410)。
次に、変更通知プログラム220は、ビジュアルプログラミングツール400で開発中のフローデータセット(もしくはレポジトリ管理サーバに登録されたフローデータセット)に含まれる各NodeID/NodeKey(以下、対象フローNodeID/NodeKey)に対して、S430およびS440の処理を行う(ループ(A))。以下、1つの対象フローNodeID/NodeKeyを例に取る。
まずS430として、変更通知プログラム220は、対象フローNodeID/NodeKeyがフロー対応情報T700に存在し、かつ、対応するテンプレートフローデータセットのNodeID/NodeKey(以下、対応テンプレートNodeID/NodeKey)が存在するか判定する。すなわち、対象フローNodeID/NodeKeyがフロー対応情報T700のChangedFlow T720に存在し、かつ、これに対応するTemplateFlow T710のNodeID/NodeKeyが存在(空、Noneでない値)する場合に、対応テンプレートNodeID/NodeKeyが存在することになる。例えば、図12の例では、GRP1/PJ1のnode4/key41が対象フローNodeID/NodeKeyである場合(図12中の1行目のエントリを参照)、対応テンプレートNodeID/NodeKeyは存在し、template1のnode1/key1であると定まる。逆に、このように特定される対応テンプレートNodeID/NodeKeyが存在しない(空を示すNullやNoneが入っている)場合には、対応テンプレートNodeID/NodeKeyは存在しないと定まる。
そして存在しなければ(S430:No)、次の対象フローNodeID/NodeKeyについて処理がS430に進む。そのような対応テンプレートNodeID/NodeKeyが存在する場合(S430:Yes)は、処理がS440に進む。
次にS440として、変更通知プログラム220は、対応テンプレートNodeID/NodeKeyの組み合わせに対して、依存関係情報T400の依存関係が閾値以上と成るようなNodeID/NodeKeyの組み合わせ(以下、変更候補テンプレートNodeID/NodeKeyグループ)を抽出する(本処理の考え方はS230や数2で示すものと同じ処理)。つまり図7の例で、対応テンプレートNodeID/NodeKeyがnode1/key1であり閾値が0.8である場合、node2/key3などが変更候補テンプレートNodeID/NodeKeyグループに含まれることとなる。
このような変更候補テンプレートNodeID/NodeKeyグループに含まれるNodeID/NodeKeyの組み合わせに対して、変更通知プログラム220は、フロー対応情報T700を用いてS430と逆の処理を行い、今回対象とするグループおよびプロジェクトのフローにおけるノードおよびその属性(変更候補フローNodeID/NodeKey)が変更済み否かを判定する。
例えば、図12のフロー対応情報T700において、今回判定対象とするグループ/プロジェクトが、GRP1/PJ1であり、変更候補テンプレートNodeID/NodeKeyが、前述のtemplate1に含まれるnode2/key3である例を考える。このとき、図12のフロー対応情報T700を用いると、今回対象となるGRP1/PJ1の変更候補フローNodeID/NodeKeyは、node5/key6(図12の3行目のエントリを参照)に対応すると特定できる。その上で、同行のChangedFlag T730が“true”となっていれば変更済み、“false”となっていれば未変更と判定する。なお、当該行が存在しない場合(すなわちNodeID T723やNodeKey T724が空(Null)の場合)は、変更通知プログラム220は、例えば対象外(通知しない)として扱う、もしくは、依存関係があるノードまたは属性が設定されていないなどと特別な通知を行うなどしてもよい。
このようにして算出される変更候補フローNodeID/NodeKeyの組み合わせのうち、未変更と判定された組み合わせの集合を未変更フローNodeID/NodeKeyグループ、と呼ぶこととする。
最後にS450として、変更通知プログラム220は、S440までで作成した未変更フローNodeID/NodeKeyグループに含まれるNodeID/NodeKeyを開発者に通知し、処理を終了する(S460)。なお通知の方法としては、実施例1と同様に、ビジュアルプログラミングツール400上に表示するほか、別の方法で一覧を開発者に通知するなどとしてもよい。
実施例3を説明する。その際、実施例1および2との相違点を主に説明し、実施例1および2との共通点については説明を省略または簡略する。
これまでの実施例では、開発されるフローの前提となるテンプレートフローデータセットは1つである例を主に採用していた。しかし実際には複数のテンプレートフローデータセットを組み合わせて1つのフローを開発するといったユースケースも存在し得る。実施例3は、これを可能とした実施例である。
このように複数のテンプレートフローデータセットを基に作成された1つのフローデータセットの管理方法の一例としては、プロジェクト管理情報T200が、図16に示すような構成をとればよい。すなわち、ビジュアルプログラミングツール400が持つフローデータセット500が、どのテンプレートフローデータセットに由来するものかを分けたフローデータセット(以下、サブフローデータセット)として管理することができる。例えば、図16において、GRP1/PJ1に対応したフローデータセットは、template1に由来するサブフローデータセットであるflow111.jsonとtemplate3に由来するサブフローデータセットであるflow113.jsonからなる、と管理されている。このように管理することによって、実施例1または実施例2で説明した方法を適用することができる。なおテンプレートフローデータセットに含まれない、開発者によって新規追加されたノードは、グループおよびプロジェクトのフローデータセットを構成するサブフローデータセットに含めればよい。例えば、前述の例では、そのような新規追加のノードは、flow111.jsonまたはflow113.jsonのいずれかのサブフローデータセットに含めればよい。
また、これ以外の方法として、1つのフローデータセットの中に、由来するテンプレートフローデータセットの情報を持つような形態でも実現することができる。一例としては、ノードごとに、その属性値としてtemplateIDを持つ方法である。例えば、図3に示すフローデータセットの構造体の例では、NodeIDと同じ位置づけでTemlateIDを持つ、などが採用されてもよい。
実施例4を説明する。その際、実施例1〜3との相違点を主に説明し、実施例1〜3との共通点については説明を省略または簡略する。
これまでの実施例では、ノード属性の変更の順序は考慮されずに、依存関係が計算された。しかし、ビジュアルプログラミングツール400によるフローデータセットの開発では、開発者の思考プロセスの考慮、すなわち、ノード属性の変更順序が、依存関係の計算に考慮されることが望ましい場合がある。
これを実現するため、例えばフローデータセットと合わせて、ビジュアルプログラミングツール400、または、ビジュアルプログラミングツール400を監視する変更候補管理サーバ200における変更分析プログラム210が、ノード属性の変更順序(例えば、変更したNodeID/NodeKeyの順)を保持しておく。そして、開発中のフローデータセットから生成される変更管理情報T300の各エントリにおいて、ChangedFlag T380の代わりに、図17に示すように、当該エントリに対応したノード属性が変更された順番(例えば最初に変更したら“1”、次は“2”、変更されていなければ“NULL”など)が格納される。各ノード属性に対応した変更順番の並びが、ノード属性の変更順序である。そして、数1に代えて、属性値Aが変更されたときの属性値Bが変更される確率P(A→B)の計算式として、数4が採用される。
このように計算される確率で依存関係情報T400を更新することで、ノード属性の変更順序を考慮した依存関係算出が可能となる。なお、このような理由のため依存関係情報T400は非対称、すなわちP(A→B)とP(B→A)が異なる表となる(実施例1では対象、すなわちP(A→B)とP(B→A)が同じ表となる)。
もしくはビジュアルプログラミングツールでのノード属性変更順序の代わりに、レポジトリ管理サーバ300へのフローデータセットの登録履歴が採用されてもよい。一般に、レポジトリ管理サーバ300を用いた開発では、ある開発の区切り単位でソースコードをレポジトリ管理サーバ300に登録(コミット)していく、あるいは、レポジトリ管理サーバ300は、その登録履歴(コミット履歴などとも呼ばれる)を保持しているが、この登録履歴をノード属性の変更順序と見なして、ノード属性変更順序としての登録履歴を用いて依存関係が算出されてもよい。
以上の説明を、例えば下記のように総括することができる。なお、下記総括は、上述の説明に無い事項を含んでもよい。
変更候補管理サーバ200(フロー作成支援装置の一例)が、変更分析部(依存関係算出部の一例)と、変更通知部(依存関係通知部の一例)とを備える。変更分析部は、変更分析プログラム210がプロセッサ部33によって実行されることで実現される機能である。変更通知部は、変更通知プログラム220がプロセッサ部33によって実行されることで実現される機能である。
変更分析部は、1または複数のビジュアルプログラミングツールで生成された1または複数のフローデータセットのうちの1以上のフローデータセットと、1または複数のテンプレートフローデータセットのうち前記1以上のフローデータセットの基とされたテンプレートフローデータセットである対象テンプレートフローデータセットとの差分を算出し、算出された差分から、対象テンプレートフローデータセットが示すテンプレートフローについての属性値同士の依存関係を算出する。「差分」は、ノード実体とノード属性(例えばキーと属性値との組)とのうちの少なくとも1つの差分でよい。また、ビジュアルプログラミングツール上でノード属性が変更される都度に当該変更が差分として算出されてもよいし、格納されている1以上の編集後のフローデータセットが読み出され当該読み出されたフローデータセットと当該フローデータセットの基になったテンプレートフローデータセットとの差分が算出されてもよい。また、「依存関係を算出」とは、依存関係の強さの算出でよい。「属性値同士」に含まれる属性値は、典型的に2つの属性値であるが、3以上の属性値でもよい。
変更通知部は、算出された依存関係に関する情報の通知を発行する。「通知」は、例えば、注目の属性値(例えば、変更された属性値)と当該注目の属性値以外の少なくとも1つの属性値との依存関係の強さを示す情報を含んでもよいし、注目の属性値との依存関係の強さが一定値以上の属性値を含むノード属性を示す情報を含んでもよい。
これにより、テンプレートデータセット個々に制約条件を事前定義する必要無しに、テンプレートフローについての属性値同士の依存関係を算出して当該依存関係に関する情報の通知を発行できる。また、ビジュアルプログラミングツールでアプリケーションを開発する開発者が複数存在する場合に、複数の開発者が作成した1以上のフローデータセットとの差分から依存関係が算出されるため、開発者は他の開発者の知見を活用することができる。
1または複数のテンプレートフローデータセットは、当該1または複数のテンプレートフローデータセットが格納される第1のサーバであるテンプレート管理サーバ100により管理される。1または複数のテンプレートフローデータセットと1または複数のフローデータセットとの関係(例えばプロジェクト管理情報T200)が、1または複数のフローデータセットが格納される第2のサーバであるレポジトリ管理サーバに300により管理される。このように、テンプレート管理サーバ100やレポジトリ管理サーバ300が有する機能を有効に利用することができる。
属性値同士の依存関係は、対象テンプレートフローデータセットの複製が示すテンプレートフローにおける1以上のノードの1以上の属性値の変更が完了したときに算出され、通知は、当該1以上の属性値の変更が完了したフローデータセットに関する情報を表示しているビジュアルプログラミングツールに発行される。これにより、開発者は、ある属性値の変更が完了したときに他の属性値の変更の必要性があるか否かを、フローの編集中に知ることができる。
属性値同士の依存関係を算出するとは、各属性値同士について、当該属性値同士における2以上の属性値のうちの或る1以上の属性値が変更された場合に当該2以上の属性値のうちの別の1以上の属性値が変更されることの確率である条件付き確率を算出することである。通知は、対象テンプレートフローデータセットの複製が示すテンプレートフローに関し変更された1以上の属性値との間での条件付確率が事前定義された一定値を越える1以上の属性値に関する情報の通知である。これにより、開発者は、変更した属性値との依存関係が強い属性値(ある属性値の変更に付随して変更することが必要と推定される属性値)を知ることができる。
対象テンプレートフローデータセットの複製の編集は、当該対象テンプレートフローデータセットが示すテンプレートフローにおける少なくとも1つのノードの属性値を変更することに代えてまたは加えて、当該少なくとも1つのノードの属性値に対応したキーと当該少なくとも1つのノードのノード実体とのうち少なくとも1つの変更を含むことがある。フローデータセット間の差分の算出では、キーおよびノードID、ノードタイプおよびノードカテゴリといった複数のノード関連要素のうちの一部のノード関連要素が異なっていても当該複数のノード関連要素のうちの残りのノード関連要素が事前定義された1以上のルールに適合していれば、1以上のフローデータセットと対象テンプレートフローデータセットとの間において、当該一部のノード関連要素が異なる属性値同士は互いに対応した属性値同士とみなされる(属性値同士が同じなら差分無しとされ属性値同士が異なっていれば差分ありとされる)。これにより、算出される差分の精度の向上が期待でき、以って、算出される依存関係の精度の向上が期待できる。
なお、少なくとも1つのキーに、1以上のタグが関連付けられていてもよい。フローデータセット間の差分の算出では、複数のノード関連要素のうちの少なくとも一部のノード関連要素が異なっていても関連付いている1以上のタグが事前定義された1以上のルールに適合していれば、1以上のフローデータセットと対象テンプレートフローデータセットとの間において、当該少なくとも一部のノード関連要素が異なる属性値同士は互いに対応した属性値同士とみなされる。これにより、算出される差分の精度の向上が期待でき、以って、算出される依存関係の精度の向上が期待できる。
算出された依存関係に従う通知を発行するとは、当該算出された依存関係に関わるノードを含んだフローに関する情報を表示しているビジュアルプログラミングツールに、当該算出された依存関係を当該ビジュアルプログラミングツールにより表示させるために、当該算出された依存関係に関する情報の通知を発行することである。結果として、当該通知の内容がビジュアルプログラミングツールの画面上に表示されるので、開発者は、ビジュアルプログラミングツール経由で、属性値同士の依存関係を知ることができる。
変更分析部は、属性値同士の依存関係を、対象テンプレートフローデータセットについて上記算出された差分の他に、対象テンプレートフローデータセットが示すテンプレートフローについて属性値の変更順序を基に、算出する。これにより、算出される依存関係の精度の向上が期待できる。
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、本発明は、情報通信技術によるITシステム、特にビジュアルプログラミングツールを用いたアプリケーション開発において少なくとも利用可能である。