(57)【要約】【課題】ビジュアルプログラミングを用いて編集されたフローを再利用するユーザにフローの変更に関する有用な情報を提供する。【解決手段】コード管理システムは、ビジュアルプログラミングによってユーザが編集するフローの編集前後におけるコードを、バージョン管理が可能なコード管理ツールに管理し、コードの変更前後の差分のうちロジックに関する差分についての変更の度合いを示す指標であるロジック変更度と、コードの変更前後の差分のうちレイアウトに関する差分についての変更の度合いを示す指標であるレイアウト変更度とを求め、ロジック変更度及びレイアウト変更度に基づく情報を出力する。【選択図】図１
2020160854.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置を用いて構成され、
ビジュアルプログラミングによってユーザが編集するフローの編集前後におけるコードを、バージョン管理が可能なコード管理ツールに管理するコード管理部、
前記コードの変更前後の差分のうちロジックに関する差分についての変更の度合いを示す指標であるロジック変更度を求める処理と、前記コードの変更前後の差分のうちレイアウトに関する差分についての変更の度合いを示す指標であるレイアウト変更度を求める処理と、を行う変更度算出部、
前記ロジック変更度及び前記レイアウト変更度に基づく情報を出力する変更度出力部、
を備える、コード管理システム。
【請求項２】
請求項１に記載のコード管理システムであって、
前記ビジュアルプログラミングは、前記ユーザに前記フローの編集画面を提示し、前記編集画面に処理を表すノードを複数配置し、前記ノードの処理の実行順序を表す線で結ぶことにより前記フローを作成するユーザインタフェースを提供するツールを用いて行われる、
コード管理システム。
【請求項３】
請求項２に記載のコード管理システムであって、
前記ロジックに関する差分は、前記ノードの追加又は削除によって生じた差分、前記ノードの実行順序の変更によって生じた差分、前記ノードの処理内容の変更によって生じた差分、及び前記ノードの属性値（プロパティ値）の変更によって生じた差分、のうちの少なくともいずれかを含む、
コード管理システム。
【請求項４】
請求項２に記載のコード管理システムであって、
前記レイアウトに関する差分は、前記ノードの前記編集画面における前記ノードの配置位置の変更によって生じた差分を含む、
コード管理システム。
【請求項５】
請求項１に記載のコード管理システムであって、
前記変更度算出部は、前記差分の内容に応じて重み付けを行うことにより前記ロジック変更度又は前記レイアウト変更度を求める、
コード管理システム。
【請求項６】
請求項５に記載のコード管理システムであって、
前記重み付けの設定を受け付けるユーザインタフェースを更に備える、
コード管理システム。
【請求項７】
請求項１に記載のコード管理システムであって、
前記変更度算出部は、前記レイアウトに関する差分のうち大きさが予め設定された閾値以下である差分については当該差分による前記レイアウト変更度への影響度合いを抑制する、
コード管理システム。
【請求項８】
請求項１に記載のコード管理システムであって、
前記変更度出力部は、前記コードのバージョンごとに、前記ロジック変更度及び前記レイアウト変更度を示す情報を出力する、
コード管理システム。
【請求項９】
請求項８に記載のコード管理システムであって、
前記変更度出力部は、前記ロジック変更度又は前記レイアウト変更度が夫々について設定された閾値未満であるバージョンの前記コードについての前記情報の出力を制限するフィルタリング機能を有する、
コード管理システム。
【請求項１０】
請求項１に記載のコード管理システムであって、
前記変更度出力部は、各バージョンの前記コードの前記ロジック変更度及び前記レイアウト変更度の遷移を、前記ロジック変更度の累積値を横軸とし、前記レイアウト変更度の累積値を縦軸とするグラフで表した情報を出力する、
コード管理システム。
【請求項１１】
請求項１に記載のコード管理システムであって、
編集された前記フローの前記コードが前記コード管理ツールに登録されたことを契機として、前記ロジック変更度及び前記レイアウト変更度を求める処理を開始させる連携制御部を更に備える、
コード管理システム。
【請求項１２】
請求項１１に記載のコード管理システムであって、
前記連携制御部は、ＣＩ(Continuous Integration)ツールを用いて実現される、
コード管理システム。
【請求項１３】
請求項１に記載のコード管理システムであって、
前記コード管理ツールは、ＧｉｔＨｕｂ（登録商標）又はＧｉｔＬａｂ（登録商標）である、
コード管理システム。
【請求項１４】
請求項２に記載のコード管理システムであって、
前記ビジュアルプログラミングによる前記フローの編集はＮｏｄｅ−ＲＥＤを用いて行われ、前記コードはＪＳＯＮ(JavaScript Object Notation)形式のコードである、
コード管理システム。
【請求項１５】
情報処理装置が、
ビジュアルプログラミングによってユーザが編集するフローの編集前後におけるコードを、バージョン管理が可能なコード管理ツールに管理するステップ、
前記コードの変更前後の差分のうちロジックに関する差分についての変更の度合いを示す指標であるロジック変更度と、前記コードの変更前後の差分のうちレイアウトに関する差分についての変更の度合いを示す指標であるレイアウト変更度と、を求めるステップ、
及び、
前記ロジック変更度及び前記レイアウト変更度に基づく情報を出力するステップ、
を実行する、コード管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コード管理システム、及びコード管理方法に関する。
【背景技術】
【０００２】
非特許文献１には、ファイルの履歴を管理するシステムであるバージョン管理システムについて記載されており、バージョン管理システムが、何らかの作業によって生成されたファイルについての複数の履歴（バージョン）を記憶し、後から古いバージョンの取り出し、差分の参照、ファイルの削除や移動の履歴の確認、ファイルのロック機能、複数の変更を統合するマージ機能等の仕組みを提供するものであることが記載されている。またバージョン管理システムが、個別システムでバージョン管理を行う個別バージョン管理システム、リポジトリをサーバで一元管理し、コミットなどの操作はクライアントから行う集中型バージョン管理システム、リポジトリをクライアントでも管理し、クライアント間でリポジトリを連携する分散型バージョン管理システムに分類されることが記載されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】岩松 信洋、上川 純一、まえだこうへい、小川 伸一郎著 「Gitによるバージョン管理」、オーム社、２０１１年
【発明の概要】
【発明が解決しようとする課題】
【０００４】
昨今、モデル図を記述することによりソフトウェアの開発が可能な、ビジュアルプログラミングツール（以下、「ＶＰツール」と略記する。）が注目されている。ＶＰツールを用いたソフトウェア開発においては、各種の処理が表現されたノードに、用途や環境、その他の状況に対応した情報を属性値（プロパティ値）として設定し、ノード間を線で繋ぐことにより一連の処理をフローとして記述する。ソフトウェア開発者等のユーザは、ＶＰツールを用いることで、意図した処理を行うソフトウェアを直感的に開発することができる。
【０００５】
ところで、ソフトウェア開発においては、開発効率の向上等を目的として、非特許文献１に開示されているようなコード管理システム（バージョン管理システム）に既存のコードを登録することによりコードの共有が図られる。ユーザは、コード管理システムから任意のコードを取得することにより、既存のコードを再利用して効率よくソフトウェアの開発を進めることができる。そして上記のＶＰツールを用いた開発においても同様に、コード管理システムを利用することで開発効率の向上を図ることができる。
【０００６】
上記のコード管理ツールにおいては、ソフトウェアの成果物はコード管理ツールが許容する形式のコードとして管理される。例えば、ＶＰツールであるＮｏｄｅ−ＲＥＤで開発した一連のフローは、コード管理ツールにおいてはＪａｖａＳｃｒｉｐｔ（登録商標）をベースとしたＪＳＯＮ(JavaScript Object Notation)形式のコードで管理される。
【０００７】
ここで上記のＪＳＯＮ形式のコードは、ＶＰツールにおいて、ノードや線の追加や削除といったフローの処理構造（ロジック）に関する情報（以下、「ロジック情報」と称する。）と、ノードの配置場所や表示サイズ等のレイアウトに関する情報（以下、「レイアウト情報」と称する。）を含む。そしてコード管理システムは、フローのロジック情報が変更（バージョンアップ）された場合だけでなく、フローのレイアウト情報が変更された場
合でも、変更前後のコードに差分があるものとしてコードのバージョン管理を行う。
【０００８】
そのため、例えば、変更前のフローを利用しているユーザは、フローの処理構造には影響のない単なるノードの配置位置の変更が行われた場合でも、変更後のフローのコードを解読し、利用中のフローを変更後のフローに更新する必要があるか否かを判断しなければならず、こうした作業はソフトウェア開発において大きなオーバーヘッドとなる。また一方で、レイアウト情報の変更が意図されたものである場合もあり、その場合はユーザに当該変更に関する情報を提供する必要がある。
【０００９】
本発明はこうした背景に鑑みてなされたものであり、ビジュアルプログラミングを用いて編集されたフローの変更に関する有用な情報を提供することが可能な、コード管理システム、及びコード管理方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するための本発明の一つは、コード管理システムであって、情報処理装置を用いて構成され、ビジュアルプログラミングによってユーザが編集するフローの編集前後における各前記コードを、バージョン管理が可能なコード管理ツールに管理するコード管理部、前記コードの変更前後の差分のうちロジックに関する差分についての変更の度合いを示す指標であるロジック変更度を求める処理を行うロジック変更度算出部、前記コードの変更前後の差分のうちレイアウトに関する差分についての変更の度合いを示す指標であるレイアウト変更度を求める処理を行うレイアウト変更度算出部、前記ロジック変更度及び前記レイアウト変更度に基づく情報を出力する変更度出力部、を備える。
【００１１】
その他、本願が開示する課題、及びその解決方法は、発明を実施するための形態の欄、及び図面により明らかにされる。
【発明の効果】
【００１２】
本発明によれば、ビジュアルプログラミングを用いて編集されたフローの変更に関する有用な情報を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】コード管理システムの概略的な構成を示す図である。
【図２】コード管理システムを構成する情報処理装置のハードウェア構成の一例である。
【図３】フロー編集画面の一例である。
【図４】図４（ａ）はフローのロジックが変更された場合のフローの編集の例であり、図４（ｂ）はフローのレイアウトが変更された場合のフローの編集の例である。
【図５】ＪＳＯＮ形式で記述されたコードの例である。
【図６】変更度算出処理を説明するフローチャートの例である。
【図７】変更度テーブルの一例である。
【図８】変更度出力処理を説明するフローチャートの例である。
【図９】変更度表示画面の一例である。
【図１０】変更度遷移グラフの一例である。
【発明を実施するための形態】
【００１４】
以下、発明を実施するための形態について図面を用いて詳細に説明する。
【００１５】
図１に一実施形態として示すコード管理システム１００の概略的な構成を示している。同図に示すように、コード管理システム１００は、ユーザ装置２００と通信ネットワーク５を介して通信可能に接続されている。通信ネットワーク５は、無線方式又は有線方式の
通信手段であり、例えば、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network
）、インターネット、専用線、各種公衆通信網等である。
【００１６】
同図に示すように、コード管理システム１００は、フロー生成部１１０、コード管理部１２０、連携制御部１３０、変更度算出部１４０、及び変更度出力部１５０の各機能を備える。フロー生成部１１０は、ビジュアルプログラミングによるフローの編集環境をユーザ装置２００に提供する。コード管理部１２０は、フローの編集前後における各コードを、バージョン管理が可能なコード管理ツールに管理する。変更度算出部１４０は、コードの変更前後の差異を示す情報（以下、「差分」と称する。）のうち、ロジックに関する差分についての変更の度合いを示す指標であるロジック変更度と、上記差分のうち、レイアウトに関する差分についての変更の度合いを示す指標であるレイアウト変更度とを求める。連携制御部１３０は、編集されたフローのコードがコード管理ツールに登録された場合に、変更度算出部１４０に、ロジック変更度を求める上記処理、及びレイアウト変更度を求める上記処理を開始させる。変更度出力部１５０は、ロジック変更度とレイアウト変更度に基づく情報をユーザ装置２００に提供する。
【００１７】
図２にコード管理システム１００やユーザ装置２００の実現に用いられる情報処理装置のハードウェア構成の一例を示す。同図に示すように、例示する情報処理装置１０は、プロセッサ１１、主記憶装置１２、補助記憶装置１３、入力装置１４、出力装置１５、及び通信装置１６を備える。これらは図示しないバス等の通信手段を介して互いに通信可能に接続されている。
【００１８】
情報処理装置１０は、例えば、パーソナルコンピュータ（デスクトップ型又はノートブック型）、オフィスコンピュータ、メインフレーム、スマートフォン、タブレット等である。情報処理装置１０は、例えば、クラウドシステムにより提供されるクラウドサーバのように仮想的な情報処理資源を用いて実現されるものであってもよい。コード管理システム１００が備える各機能は、夫々を独立した情報処理装置１０により実現してもよいし、２つ以上の機能を共通の情報処理装置１０により実現してもよい。上記の各機能は互いに通信可能に接続されている。
【００１９】
プロセッサ１１は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＧＰＵ（Graphics Processing Unit）、ＡＩ（Artificial Intelligence）チップ、ＦＰＧＡ（Field Programmable Gate Array）、ＡＳＩＣ（Application Specific Integrated Circuit）等を用いて構成されている。
【００２０】
主記憶装置１２は、プログラムやデータを記憶する装置であり、例えば、ＲＯＭ（Read
Only Memory）、ＲＡＭ（Random Access Memory）、不揮発性メモリ（ＮＶＲＡＭ（Non Volatile RAM））等である。
【００２１】
補助記憶装置１３は、例えば、ハードディスクドライブ、ＳＳＤ（Solid State Drive
）、光学式記憶装置（ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）等）、ストレージシステム、ＩＣカード、ＳＤカードや光学式記録媒体等の記録媒体の読取／書込装置、クラウドサーバの記憶領域等である。補助記憶装置１３には、記録媒体の読取装置や通信装置１６を介してプログラムやデータを読み込むことができる。補助記憶装置１３に格納（記憶）されているプログラムやデータは主記憶装置１２に随時読み込まれる。
【００２２】
入力装置１４は、外部からの入力を受け付けるインタフェースであり、例えば、キーボード、マウス、タッチパネル、カードリーダ、音声入力装置等である。
【００２３】
出力装置１５は、処理経過や処理結果等の各種情報を出力するインタフェースである。
出力装置１５は、例えば、上記の各種情報を可視化する表示装置（液晶モニタ、ＬＣＤ（Liquid Crystal Display）、グラフィックカード等）、上記の各種情報を音声化する装置（音声出力装置（スピーカ等））、上記の各種情報を文字化する装置（印字装置等）である。尚、例えば、情報処理装置１０が通信装置１６を介して他の装置との間で情報の入力や出力を行う構成としてもよい。
【００２４】
通信装置１６は、他の装置との間の通信を実現する装置である。通信装置１６は、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、インターネット等の通信手
段を介した他の装置との間の通信を実現する有線方式又は無線方式の通信インタフェースであり、例えば、ＮＩＣ（Network Interface Card）、無線通信モジュール、ＵＳＢ（Universal Serial Bus）モジュール、シリアル通信モジュール等である。
【００２５】
コード管理システム１００やユーザ装置２００の機能は、情報処理装置１０のプロセッサ１１が、情報処理装置１０の主記憶装置１２に格納されているプログラムを読み出して実行することにより、もしくは、情報処理装置１０のハードウェア（ＡＩチップ、ＦＰＧＡ、ＡＳＩＣ等）によって実現される。尚、コード管理システム１００やユーザ装置２００を構成する情報処理装置１０は、オペレーティングシステム、デバイスドライバ、ファイルシステム、ＤＢＭＳ（DataBase Management System）等の機能を備えていてもよい。
【００２６】
図１に示すように、フロー生成部１１０は、フロー生成処理部１１１、フロー記憶部１１２、フロー／コード変換部１１３、コード送信部１１４、コード取得部１１５、及びコード／フロー変換部１１６の各機能を有する。フロー生成部１１０の機能は、例えば、ビジュアルプログラミングツール（以下、「ＶＰツール」と称する。）により提供される。尚、以下では、ＶＰツールがＮｏｄｅ−ＲＥＤである場合を例として説明するが、ＶＰツールの種類は必ずしも限定されない。
【００２７】
上記機能のうち、フロー生成処理部１１１は、ユーザ装置２００にソフトウェア（以下、「フロー」と称する。）の編集環境を提供する。ユーザ装置２０は、例えば、Ｗｅｂブラウザを介して上記編集環境にアクセスする。フロー記憶部１１２は、フロー生成処理部１１１により生成されたフローに関する情報を記憶する。
【００２８】
フロー／コード変換部１１３は、フロー生成処理部１１１により生成されたフローをコード（ＶＰツールがＮｏｄｅ−ＲＥＤである場合はＪＳＯＮ(JavaScript Object Notation)形式のコード）に変換する。コード送信部１１４は、上記変換により得られたコードをコード管理部１２０に送信する。
【００２９】
コード取得部１１５は、コードをコード管理部１２０から取得する。コード／フロー変換部１１６は、コード取得部１１５が取得したコードをフローに変換してＶＰツールに提供する。これによりユーザ３は、コード管理部１２０が管理する既存のコードを再利用してフローを編集することができる。
【００３０】
コード管理部１２０は、コード管理処理部１２１及びリポジトリ１２２の各機能を有する。コード管理部１２０の機能は、例えば、コード管理ツール（例えば、ＧｉｔＨｕｂ（登録商標）やＧｉｔＬａｂ（登録商標））を用いて実現される。
【００３１】
コード管理処理部１２１は、フロー生成部１１０からコードを受信し、受信したコードをリポジトリ１２２に登録する。またコード管理処理部１２１は、フロー生成部１１０から指定されたバージョンのコードをリポジトリ１２２から取得し、取得したコードをフロー生成部１１０に送信する。
【００３２】
連携制御部１３１は、新たなバージョンのコードがコード管理部１２０のリポジトリ１２２に登録されたことを契機として、当該コードについての変更前のコードに対する変更の重要性を示す指標である変更度（前述したロジック変更度とレイアウト変更度）の算出処理を変更度算出部１４０に開始させる。尚、こうした連携制御部１３１の機能は、例えば、ＣＩ(Continuous Integration)ツールを用いて実現される。ＣＩツールは、継続的インテグレーションを実現するツールであり、例えば、Ｊｅｎｋｉｎｓ（登録商標）やＤｒｏｎｅ等がある。ＧｉｔＬａｂ（登録商標）ではＣＩツールを追加機能としてインストールすることができる。ＧｉｔＬａｂ（登録商標）は、各種イベントを通知する機能を有しており、例えば、事前に「Ｗｅｂｈｏｏｋ」の機能を設定しておくことで、ＧｉｔＬａｂ（登録商標）にコードが登録されたことを外部に通知することができる。連携制御部１３０は、例えば、上記通知をフックし、変更度算出部１４０の機能を実現するスクリプトを起動させる。
【００３３】
変更度算出部１４０は、変更度（ロジック変更度、レイアウト変更度）を算出する。同図に示すように、変更度算出部１４０は、コード取得部１４１、ロジック変更度算出部１４２、レイアウト変更度算出部１４３、及び変更度登録部１４４の各機能を有する。これらの機能は、例えば、ＣＩツールがスクリプトを実行することにより実現される。
【００３４】
上記機能のうちコード取得部１４１は、コード管理部１２０から、リポジトリ１２２に登録されているコードを取得する。ロジック変更度算出部１４２は、ロジック変更度を求める。レイアウト変更度算出部１４３は、レイアウト変更度を求める。変更度登録部１４４は、コード管理部１２０の上記コードに対応づけて、ロジック変更度とレイアウト変更度をリポジトリ１２２に登録する。
【００３５】
図１に示す変更度出力部１５０は、変更度に関する情報をユーザ３に提供する。同図に示すように、変更度出力部１５０は、変更度取得部１５１及び変更度出力処理部１５２を有する。変更度取得部１５１は、コード管理部１２０のリポジトリ１２２から、コードに関する情報と変更度に関する情報を取得する。変更度出力処理部１５２は、コードに関する情報や変更度に関する情報をユーザ装置２００に提供する。尚、変更度出力部１５０の機能は、例えば、ＧｉｔＬａｂ（登録商標）等の機能を用いて実現することもできる。
【００３６】
図３にＶＰツールがユーザ装置２００に提供する画面（以下、「フロー編集画面２１０」と称する。）の一例を示す。ユーザ３は、ユーザ装置２００において動作するＷｅｂブラウザ等を利用してフロー編集画面２１０を参照しつつ、フローの編集（フローを新規に作成する場合も含む）を行う。
【００３７】
例示するフロー編集画面２１０は、フロー編集領域２１１とパレット領域２１２とを有する。このうちパレット領域２１２には、機能（データ入力機能、データ出力機能、外部サービス機能等）ごとに用意された複数の部品（以下、「ノード２１３」と称する。）が表示される。ユーザ３は、パレット領域２１２でノード２１３を選択してフロー編集領域２１１にドラッグアンドドロップすることによりフローの編集を行う。ユーザ３は、ノード２１３同士をワイヤー２１５で結線することによりノード２１３の実行順序を定義することができる。あるノード２１３の右側と他のノード２１３の左側とをワイヤー２１５で結んだ場合、あるノード２１３の処理が終了した後に他のノード２１３の処理が実行されるように実行順序が定義される。
【００３８】
図４にフローの編集の例を示す。図４（ａ）は、フローのロジックが変更された場合の例である。同図に示す変更前のフロー４０１では、「入力ノード１」と「呼出ノードＡ」、「呼出ノードＡ」と「呼出ノードＢ」、「呼出ノードＢ」と「出力ノード２」が順にワイヤー２１５で結成されており、「入力ノード１」、「呼出ノードＡ」、「呼出ノードＢ
」、「出力ノード２」の順に処理が実行される。一方、同図に示す変更後のフロー４０２では、「入力ノード１」と「呼出ノードＢ」、「呼出ノードＢ」と「呼出ノードＡ」、「呼出ノードＡ」と「出力ノード２」が順にワイヤー２１５で結成されており、「入力ノード１」、「呼出ノードＢ」、「呼出ノードＡ」、「出力ノード２」の順に処理が実行される。この場合は編集の前後で「呼出ノードＡ」と「呼出ノードＢ」の実行順序が変更されており、フローのロジックが変更されている。
【００３９】
図４（ｂ）は、フローのレイアウトが変更された場合の例である。同図に示す変更前のフロー４１１では、「入力ノード１」と「呼出ノードＡ」、「呼出ノードＡ」と「呼出ノードＢ」、「呼出ノードＢ」と「出力ノード２」が順にワイヤー２１５で結成されており、「入力ノード１」、「呼出ノードＡ」、「呼出ノードＢ」、「出力ノード２」の順に処理が実行される。一方、同図に示す変更後のフロー４１２では、「入力ノード１」と「呼出ノードＡ」、「呼出ノードＡ」と「呼出ノードＺ」、「呼出ノードＺ」と「出力ノード２」が順にワイヤー２１５で結成されており、「入力ノード１」、「呼出ノードＡ」、「呼出ノードＺ」、「出力ノード２」の順に処理が実行される。この場合は、編集により「呼出ノードＢ」のラベルが「呼出ノードＺ」に変更され、また「出力ノード２」の配置位置が上に移動され、それに伴い「呼出ノードＢ」（「呼出ノードＺ」）と「出力ノード２」を結ぶワイヤー２１５の位置も移動されている。しかしノード２１３間の結線は変更されていないためロジックの変更はなく、レイアウトの変更のみが行われている。
【００４０】
図５にフローに基づきフロー／コード変換部１１３が生成する、ＪＳＯＮ形式で記述されたコードの例を示す。同図に示すコード５１０の符号５１１で示す記述は、「入力ノード１」という名称のノードのレイアウトに関する記述であり、該当ノードのフロー編集画面２１０における配置場所の座標である「ｘ」項目、「ｙ」項目、「ｚ」項目、ノードの名前として表示される「ｎａｍｅ」項目を定義している。またコード５１０の符号５１２で示す記述は、「入力ノードＡ」という名称のノードのロジックに関する記述であり、該当ノードの線の繋ぎ先となるノードの識別子のリストを定義している（「ｗｉｒｅｓ」という項目の値）。
【００４１】
また同図に示すコード５２０の符号５２１で示す記述は、ノードのレイアウトに関する記述であり、該当ノードのフロー編集画面２１０における配置場所の座標である「ｘ」項目、「ｙ」項目、「ｚ」項目、ノードの名前として表示される「ｎａｍｅ」項目を定義している。またコード５２０の符号５２２で示す記述はロジックに関する記述であり、ノードの線の繋ぎ先ノードのリスト（「ｗｉｒｅｓ」項目）と、ノードの動作に関係する属性値（プロパティ値）の定義（「ｒｕｌｅｓ」という項目の値）とを含む。
【００４２】
続いて、以上の構成からなるコード管理システム１００において行われる処理について説明する。
【００４３】
図６は、フローの編集に際してコード管理システム１００において行われる処理（以下、「変更度算出処理Ｓ６００」と称する。）を説明するフローチャートである。以下、同図とともに変更度算出処理Ｓ６００について説明する。
【００４４】
まずユーザ３が、ユーザ装置２００においてＷｅｂブラウザ等を利用してフロー生成処理部１１１が提供するフロー編集画面２１０にアクセスし、フローの編集を行う（Ｓ６１１）。
【００４５】
ユーザ３がフローの編集を終了し、フロー編集画面２１０に対してファイルの保存操作を行うと（例えば、図３に示すデプロイボタン２２０の操作もしくはリポジトリ１２２への保存操作（メニュー操作等）を行うと）、フロー記憶部１１２が編集されたフローの情
報を記憶する。またフロー／コード変換部１１３が、編集されたフローをコードに変換し、得られたコードをコード送信部１１４がコード管理部１２０に送信する（Ｓ６１２）。
【００４６】
コード管理処理部１２１は、上記コードを受信すると、受信したコードをリポジトリ１２２に登録する（Ｓ６１３）。
【００４７】
連携制御部１３０は、コードがリポジトリ１２２に登録されたことを検知すると、変更度を算出する処理を変更度算出部１４０に開始させる（Ｓ６１４）。
【００４８】
上記処理において、まず変更度算出部１４０のコード取得部１４１が、登録されたコードをリポジトリ１２２から取得する（Ｓ６１５）。
【００４９】
続いて、変更度算出部１４０が、Ｓ６１７からのループ処理における初期設定として、変更度を求める対象となるコード（以下、「対象コード」と称する。）を、Ｓ６１５においてリポジトリ１２２から取得したコード（以下、「登録コード」と称する。）に設定する。
【００５０】
Ｓ６１７からの処理は、変更度算出部１４０が、登録コードの各バージョン間の変更度（ロジック変更度、レイアウト変更度）を求めるループ処理である。
【００５１】
上記ループ処理では、まず変更度算出部１４０が、対象コードよりも旧いバージョンのコードがリポジトリ１２２に存在するか否かを判定する（Ｓ６１７）。例えば、変更度算出部１４０は、ＧｉｔＬａｂ（登録商標）が管理するコードの変更履歴に基づき上記判定を行う。対象コードよりも旧いバージョンのコードがリポジトリ１２２に存在しない場合（Ｓ６１７：ＮＯ）、変更度算出処理Ｓ６００は終了する。一方、対象コードよりも旧いバージョンのコードがリポジトリ１２２に存在する場合（Ｓ６１７：ＹＥＳ）、処理はＳ６１８に進む。
【００５２】
Ｓ６１８では、変更度算出部１４０が、コード管理部１２０のリポジトリ１２２から対象コードの直前のバージョンのコードを取得する。
【００５３】
続いて、ロジック変更度算出部１４２は、対象コードと直前のバージョンのコードについてロジック変更度を求める（Ｓ６１９）。尚、ロジック変更度の求め方の詳細については後述する。
【００５４】
続いて、レイアウト変更度算出部１４３は、対象コードと当該対象コードの直前のバージョンのコードについてレイアウト変更度を求める（Ｓ６２０）。尚、レイアウト変更度の求め方の詳細については後述する。
【００５５】
続いて、変更度算出部１４０が、Ｓ６１９で求めたロジック変更度とＳ６２０で求めたレイアウト変更度を記憶する（Ｓ６２１）。本例では、ロジック変更度及びレイアウト変更度はテーブル（以下、「変更度テーブル７００」と称する。）に記憶されるものとする。
【００５６】
図７に変更度テーブル７００の一例を示す。同図に示すように、変更度テーブル７００は、変更後コードＩＤ７１１、変更前コードＩＤ７１２、ロジック変更度７１３、及びレイアウト変更度７１４の各項目を有する一つ以上のレコードで構成される。このうち変更後コードＩＤ７１１には、変更前後のコードのうち変更後のコードの識別子（以下、「コードＩＤ」と称する。）が設定される。尚、コードＩＤは、例えば、コードのバージョン番号である。変更前コードＩＤ７１２には、変更前後のコードのうち変更前のコードのコ
ードＩＤが設定される。ロジック変更度７１３には、当該変更前後のコードについてＳ６１９で求めたロジック変更度が設定される。レイアウト変更度７１４には、当該変更前後のコードについてＳ６２０で求めたレイアウト変更度が設定される。
【００５７】
図６に戻り、続いて、変更度算出部１４０は、対象コードを当該対象コードの直前のバージョンのコードに設定する（Ｓ６２２）。その後、処理はＳ６１６に戻る。
【００５８】
以上のループ処理（Ｓ６１７〜Ｓ６２２）によれば、最新のフローが変更されたタイミングで、過去のバージョンに遡って当該フローのコードの各バージョン間の変更度が算出される。尚、過去に当該フローの変更が行われており、既に旧いバージョン間の変更度が算出済である場合は、旧いバージョン間の変更度を算出する処理については省略してもよい。
【００５９】
Ｓ６２３では、変更度登録部１４４が、登録コードに対応づけて変更度テーブル７００の内容をリポジトリ１２２に登録する。尚、変更度テーブル７００の内容は、例えば、ＣＳＶ（comma-separated values）形式のファイルやＤＢＭＳの所定形式のデータ管理ファイル等のファイルとしてリポジトリ１２２に登録される。以上で変更度算出処理Ｓ６００は終了する。
【００６０】
続いて、図６のＳ６１９におけるロジック変更度の算出方法について具体的に説明する。まずロジック変更度算出部１４２は、変更前後のコードの差分から、変更前後のフロー間のノードの増減数を取得する。またロジック変更度算出部１４２は、変更前後のコードから、各ノードのロジックに関する情報（以下、「ロジック情報」と称する。）を抽出し、ロジックに着目した差分を取得する。尚、ロジック変更度算出部１４２は、ロジック情報を、例えば、ＧｉｔＬａｂ（登録商標）から取得されるＪＳＯＮ形式のファイルから取得する。図５の例では、例えば、コード５１０の符号５１２やコード５２０の符号５２２の記述がロジック情報である。
【００６１】
そしてロジック変更度算出部１４２は、例えば、ノードの増減数やノードのロジック情報について差分があった内容について、内容に応じて重み付けした値を加算して求めた値をロジック変更度として求める。例えば、変更前後のフローの差分がノードの増減（ノードの追加か削除）を含む場合、ロジック変更度算出部１４２は、ロジック変更度にノードの増減数を３倍の重みで加算する。またノード間を接続する線に変更があった場合、ロジック変更度算出部１４２は、ロジック変更度に線の変更数を３倍の重みで加算する。また処理内容としてＪａｖａＳｃｒｉｐｔ（登録商標）コードを記述可能なＦｕｎｃｔｉｏｎノードの内容について差分があった場合、ロジック変更度算出部１４２は、その変更数を２倍の重みでロジック変更度に加算する。またノードの属性値（プロパティ値）に差分があった場合、ロジック変更度算出部１４２は、変更数をそのまま（重みを１として）ロジック変更度に加算する。
【００６２】
続いて、図６のＳ６２０におけるレイアウト変更度の算出方法について具体的に説明する。まずレイアウト変更度算出部１４３は、変更前後のコードから、各ノードのレイアウトに関する情報（以下、「レイアウト情報」と称する。）を取得し、レイアウトに着目した差分を取得する。尚、レイアウト変更度算出部１４３は、レイアウト情報を、例えば、ＧｉｔＬａｂ（登録商標）から取得される、フローについてのＪＳＯＮ形式のファイルから取得する。図５の例では、例えば、コード５１０の符号５１１やコード５２０の符号５２１の記述がレイアウト情報である。
【００６３】
そしてレイアウト変更度算出部１４３は、例えば、レイアウト情報ついて差分があった内容について、内容に応じて重み付けした値を加算することにより求めた値をレイアウト
変更度とする。例えば、レイアウト変更度算出部１４３は、ノードが配置される座標に差分があった、即ち、配置位置が移動されたノードの数について重み付けした値を加算する、座標の差分から計算した配置位置の移動距離について重み付けした値を加算する等、差分の内容に応じて重み付けした値を加算した結果をレイアウト変更度として求める。    
【００６４】
尚、ＶＰツールを用いたコードの編集に際しては、ユーザ３の操作ミス等によりノードが移動した場合もあるため、軽微なレイアウトの変更によるレイアウト変更度への影響を抑えるようにしてもよい。具体的には、例えば、移動距離の絶対値に基づきレイアウト変更度を求めるのではなく、フロー編集画面２１０のフロー編集領域２１１に表示されるフロー全体のサイズに対する移動距離の比率に基づきレイアウト変更度を求めるようにする。また例えば、移動距離の絶対値や上記比率について閾値を設定し、移動距離の絶対値や上記比率が閾値以下である場合はレイアウト変更度への影響度合いを抑えるようにする。
【００６５】
尚、ロジック変更度又はレイアウト変更度のいずれを算出する場合においても、重み付けの係数は固定値としてもよいし、コード管理システム１００に重み付けの設定を受け付けるユーザインタフェースを設けて重み値をユーザ３等が設定可能な状態で管理し、管理されている重み値を変更度算出部１４０が適宜参照するようにしてもよい。
【００６６】
図８は、コードの変更度に関する情報をユーザ３に提示する際にコード管理システム１００において行われる処理（以下、「変更度出力処理Ｓ８００」と称する。）を説明するフローチャートである。ユーザ３は、例えば、リポジトリ１２２に登録されているコードを再利用する際にコードの変更度に関する情報を参照する。以下、同図とともに変更度出力処理Ｓ８００について説明する。
【００６７】
まずユーザ３が、ユーザ装置２００のＷｅｂブラウザ等を利用して変更度出力部１５０が提供する画面（以下、「変更度表示画面９００」と称する。）にアクセスし、フローを指定（例えば、ファイル名、ＧｉｔＬａｂ（登録商標）プロジェクト等を指定）する（Ｓ８１１）。
【００６８】
続いて、変更度取得部１５１が、コード管理部１２０のリポジトリ１２２から、ユーザが指定したフロー（コード）の変更履歴（バージョンリスト）と、当該フロー（コード）に対応づけてリポジトリ１２２に登録されている変更度テーブル７００の内容を取得する（Ｓ８１２）。
【００６９】
続いて、変更度出力処理部１５２が、Ｓ８１４からのループ処理における初期設定として、上記ループ処理において対象とするバージョン（以下、「対象バージョン」と称する。）に、ユーザが指定したフローの最新バージョンを設定する（Ｓ８１３）。
【００７０】
Ｓ８１４からの処理は、変更度出力処理部１５２が、Ｓ８１１で指定されたフローの各バージョン間の変更度を順次表示するループ処理である。
【００７１】
まずＳ８１４では、変更度出力処理部１５２が、対象バージョンよりも旧いバージョンのコードがリポジトリ１２２に存在するか否かを判定する。変更度出力処理部１５２は、例えば、ＧｉｔＬａｂ（登録商標）が管理するコードの変更履歴に基づき上記判定を行う。対象バージョンよりも旧いバージョンのコードがリポジトリ１２２に存在しない場合（Ｓ８１４：ＮＯ）、変更度出力処理Ｓ８００は終了する。一方、対象バージョンよりも旧いバージョンのコードがリポジトリ１２２に存在する場合（Ｓ８１４：ＹＥＳ）、処理はＳ８１５に進む。
【００７２】
Ｓ８１５では、変更度出力処理部１５２が、コード管理部１２０から対象バージョンの
コードのコードＩＤと、対象バージョンの直前のバージョンのコードのコードＩＤを取得する。
【００７３】
続いて、変更度出力処理部１５２が、対象バージョンのコードのコードＩＤと直前のバージョンのコードのコードＩＤとをキーとして変更度テーブル７００を検索し、キーに対応するロジック変更度及びレイアウト変更度を取得する（Ｓ８１６）。
【００７４】
続いて、変更度出力処理部１５２が、コード管理部１２０のリポジトリ１２２から、フローのプレビュー画像を取得する（Ｓ８１７）。尚、プレビュー画像は、例えば、フロー編集画面２１０のフロー編集領域２１１に表示されるフロー全体を画面キャプチャした画像である。
【００７５】
続いて、変更度出力処理部１５２が、対象バージョンに関する情報（対象バージョンのロジック変更度、レイアウト変更度、及び上記のプレビュー画像を含む。以下、「コード情報」と称する。）を記載した変更度表示画面９００を生成してユーザ装置２００に送信する（Ｓ８１８）。
【００７６】
続いて、変更度出力処理部１５２が、対象バージョンを直前のバージョンに設定する（Ｓ８１９）。その後、処理はＳ８１４に戻る。
【００７７】
図９に、Ｓ８１８において変更度出力処理部１５２がユーザ装置２００に表示する変更度表示画面９００の一例を示す。同図に示すように、変更度表示画面９００は、フィルタ条件設定領域９１１と、コードのバージョンごとに設けられる一つ以上のコード情報表示領域９１２とを有する。尚、例示する変更度表示画面９００は、「Project#Flow#A」という名称のプロジェクトで作成されたフローのコードを対象としている。
【００７８】
フィルタ条件設定領域９１１には、表示するコード情報表示領域９１２の数を絞り込む（フィルタリングする）ための条件設定欄９１１１が表示される。例示する変更度表示画面９００の場合、ユーザ３は、コード情報表示領域９１２の表示対象とするバージョンのロジック変更度の下限閾値とレイアウト変更度の下限閾値を設定することができる。尚、条件の設定方法は必ずしも限定されない。また予め設定された固定数やユーザ３が指定した数のバージョンの情報のみを表示するようにしてもよい。
【００７９】
コード情報表示領域９１２には、当該コードのバージョン９１２１、ロジック変更度９１２２、レイアウト変更度９１２３、及び当該コードのプレビュー画像９１２４が表示される。このように、変更度表示画面９００には、コードの変更の経緯とともに変更度が提示されるので、コードを再利用しようとするユーザ３に有用な情報を提供することができ、提供された情報に基づきユーザ３は効率よくコードを再利用することができる。
【００８０】
図８に戻り、続いて、変更度出力処理部１５２は、変更度（ロジック変更度、レイアウト変更度）の遷移をグラフで表した画像（以下、「変更度遷移グラフ１０００」と称する。）を生成してユーザ装置２００に表示する（Ｓ８２０）。
【００８１】
図１０に変更度遷移グラフ１０００の一例を示す。尚、例示する変更度遷移グラフ１０００は、「Project#Flow#A」という名称のプロジェクトで作成されたフローのコードを対象としている。同図に示すように、例示する変更度遷移グラフ１０００は、横軸をロジック変更度の累積値１０１１とし、縦軸をレイアウト変更度の累積値１０１２として、フローの各バージョンの変更度をプロットしたものである。同図において、原点Ｏからプロットされた符号ｒ１、ｒ２、・・・、ｒ７で示す各点は、夫々、各バージョンのコードに対応している。これら各点を結ぶ符号ｌ１、ｌ２、・・・、ｌ６で示す線分は、変更度の累
積値（ロジック変更度及びレイアウト変更度の累積値）の遷移を示す。ユーザ３は、変更度遷移グラフ１０００から、変更度の遷移を視覚的に把握することができ、例えば、利用中のフローのバージョンアップの必要性等を直感的に判断することができる（例えば、ロジック変更度の累積値が大きい場合はバージョンアップが必要であると判断し、レイアウト変更度の累積値のみが大きい場合はバージョンアップが不要であると判断する等）。以上で変更度出力処理Ｓ８００は終了する。
【００８２】
以上に説明したように、本実施形態のコード管理システム１００によれば、ビジュアルプログラミングを用いて編集されたフローの変更に関して、ロジック及びレイアウトの夫々の観点に基づく有用な情報を提供することができる。そのため、ユーザ３は既存のコードを効率よく再利用することができる。
【００８３】
尚、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００８４】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶部、又は、ＩＣカード、ＳＤカード、ＤＶＤ、ＢＤ等の記録媒体に置くことができる。
【００８５】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００８６】
３  ユーザ、５  通信ネットワーク、１００  コード管理システム、１１０  フロー生成部、１１１  フロー生成処理部、１１２  フロー記憶部、１１３  フロー／コード変換部、１１４  コード送信部、１１５  コード取得部、１１６  コード／フロー変換部、１２０  コード管理部、１２１  コード管理処理部、１２２  リポジトリ、１３０  連携制御部、１４０  変更度算出部、１４１  コード取得部、１４２  ロジック変更度算出部、１４３  レイアウト変更度算出部、１４４  変更度登録部、１５０  変更度出力部、１５１
変更度取得部、１５２  変更度出力処理部、２００  ユーザ装置、２１０  フロー編集画面、７００  変更度テーブル、９００  変更度表示画面、１０００  変更度遷移グラフ、Ｓ６００  変更度算出処理、Ｓ８００  変更度出力処理
【図１】
2020160854.tif 000003
【図２】
2020160854.tif 000004
【図３】
2020160854.tif 000005
【図４】
2020160854.tif 000006
【図５】
2020160854.tif 000007
【図６】
2020160854.tif 000008
【図７】
2020160854.tif 000009
【図８】
2020160854.tif 000010
【図９】
2020160854.tif 000011
【図１０】
2020160854.tif 000012