(57)【要約】      （修正有）【課題】ソフトウェア開発におけるテンプレートを適切に検索し得るテンプレート検索システム及びテンプレート検索方法を提供する。【解決手段】テンプレート検索システム１は、テンプレートの情報とテンプレートで利用されるノードの情報とを対応付けて管理し、ノードの情報から、入力された検索語の類義語、及び／又は検索語に係るテンプレートで利用されるノードの繋がりを示すフローを算出し、テンプレートの情報から、算出した類義語が紐づくテンプレート、及び／又は算出したフローに対応するフローのテンプレートを特定するフローテンプレートマネージャ１００と、特定されたテンプレートの情報を出力するフローテンプレート出力部１３０と、を備える。【選択図】図１
2020181516.tif 000002
【特許請求の範囲】
【請求項１】
テンプレートの情報と、前記テンプレートで利用されるノードの情報とを対応付けて管理するテンプレート検索システムであって、
前記テンプレート検索システムにより管理されるノードの情報から、入力された検索語の類義語、および／または、前記検索語に係るテンプレートで利用されるノードの繋がりを示すフローを算出し、前記テンプレート検索システムにより管理されるテンプレートの情報から、算出した類義語が紐づくテンプレート、および／または、算出したフローに対応するフローのテンプレートを特定する処理部と、
前記処理部により特定されたテンプレートの情報を出力する出力部と、
を備えることを特徴とするテンプレート検索システム。
【請求項２】
前記処理部は、前記テンプレート検索システムにより管理されているテンプレートで利用されるノードを抽出し、抽出したノードの情報を、ノードの情報を管理するノード情報管理部から取得する、
ことを特徴とする請求項１に記載のテンプレート検索システム。
【請求項３】
前記テンプレート検索システムは、テンプレートを説明する単語を含むテキスト情報、および／または、ノードを説明する単語を含むテキスト情報を管理し、
前記処理部は、前記テンプレート検索システムにより管理されるテキスト情報に含まれる単語に対して前記検索語との類似関係を判定して前記検索語の類義語を算出する、
ことを特徴とする請求項１に記載のテンプレート検索システム。
【請求項４】
前記処理部は、前記テンプレート検索システムにより管理されるテンプレートで利用されるノードのうち、重要な処理を行う所定のノードを対象として前記検索語の類義語を算出する、
ことを特徴とする請求項３に記載のテンプレート検索システム。
【請求項５】
前記処理部は、前記テンプレート検索システムにより管理されるテキスト情報に含まれる単語に対して前記検索語との類似度を算出し、算出した類似度が上位所定数の単語、算出した類似度が閾値を超える単語、または、算出した類似度が上位所定数の単語であって算出した類似度が閾値を超える単語を類義語として算出する、
ことを特徴とする請求項３に記載のテンプレート検索システム。
【請求項６】
前記処理部は、前記検索語に係るテンプレートのフローと、前記テンプレート検索システムにより管理されるテンプレートのフローとを比較して、前記検索語に係るテンプレートのフローに類似するフローのテンプレートを特定する、
ことを特徴とする請求項１に記載のテンプレート検索システム。
【請求項７】
前記テンプレート検索システムは、テンプレートのテキスト情報を管理し、
前記処理部は、前記テンプレート検索システムにより管理されるテキスト情報から前記検索語が含まれるテンプレートを特定し、特定したテンプレートのフローと、前記テンプレート検索システムにより管理されるテンプレートのフローとを比較して、特定したテンプレートのフローに類似するフローのテンプレートを特定する、
ことを特徴とする請求項６に記載のテンプレート検索システム。
【請求項８】
前記テンプレート検索システムは、テンプレートのテキスト情報を管理し、
前記処理部は、前記テンプレート検索システムにより管理されるテキスト情報から前記検索語の類義語が含まれるテンプレートを特定し、特定したテンプレートのフローと、前記テンプレート検索システムにより管理されるテンプレートのフローとを比較して、特定したテンプレートのフローに類似するフローのテンプレートを特定する、
ことを特徴とする請求項６に記載のテンプレート検索システム。
【請求項９】
前記処理部は、前記テンプレート検索システムにより管理されるテンプレートで利用されるノードのうち、重要な処理を行う所定のノードを抽出してフローを生成し、生成したフローを用いてフローの比較を行う、
ことを特徴とする請求項６に記載のテンプレート検索システム。
【請求項１０】
前記処理部は、前記テンプレート検索システムにより管理されるテンプレートで利用されるノードの繋がりを示すフローを、１の入力のノードと１以上の出力のノードとを含むフロー、および／または、１以上の入力のノードと１の出力のノードとを含むフローに分割してフローを生成し、生成したフローを用いてフローの比較を行う、
ことを特徴とする請求項６に記載のテンプレート検索システム。
【請求項１１】
前記処理部は、前記検索語に係るテンプレートで利用されるノードの繋がりを示すフローと、前記テンプレート検索システムにより管理されるテンプレートのフローであって、前記検索語に係るテンプレートで利用されるノードに類似するノードを含むフローとの類似関係を判定し、前記検索語に係るテンプレートのフローに類似するフローのテンプレートを特定する、
ことを特徴とする請求項６に記載のテンプレート検索システム。
【請求項１２】
前記処理部は、前記検索語に係るテンプレートのフローと、前記テンプレート検索システムにより管理されるテンプレートのフローとの類似度を算出し、
前記出力部は、前記処理部により算出された類似度に応じてテンプレートの情報を出力する、
ことを特徴とする請求項６に記載のテンプレート検索システム。
【請求項１３】
前記処理部は、前記検索語に係るテンプレートのフローと、前記テンプレート検索システムにより管理されるテンプレートのフローとにおいて、始点のノードと、終点のノードと、前記始点のノードおよび前記終点のノードの間にある中間のノードとの全てが一致する場合、最も高い第１の類似度を設定し、前記始点のノードおよび前記終点のノードが一致する場合、前記第１の類似度より低い第２の類似度を設定し、前記始点のノードまたは前記終点のノードが一致する場合、前記第２の類似度より低い第３の類似度を設定し、前記始点のノードと前記終点のノードとの両方が一致しない場合、前記第３の類似度より低い第４の類似度を設定する、
ことを特徴とする請求項１２に記載のテンプレート検索システム。
【請求項１４】
前記出力部は、前記処理部により特定されたテンプレートの情報を表示装置に表示する、
ことを特徴とする請求項１に記載のテンプレート検索システム。
【請求項１５】
テンプレートの情報と、前記テンプレートで利用されるノードの情報とを対応付けて管理するテンプレート検索システムにおけるテンプレート検索方法であって、
処理部が、前記テンプレート検索システムにより管理されるノードの情報から、入力された検索語の類義語、および／または、前記検索語に係るテンプレートで利用されるノードの繋がりを示すフローを算出し、前記テンプレート検索システムにより管理されるテンプレートの情報から、算出した類義語が紐づくテンプレート、および／または、算出したフローに対応するフローのテンプレートを特定する第１のステップと、
出力部が、前記処理部により特定されたテンプレートの情報を出力する第２のステップと、
を備えることを特徴とするテンプレート検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はテンプレート検索システムおよびテンプレート検索方法に関し、例えばテンプレートを検索可能なテンプレート検索システムおよびテンプレート検索方法に適用して好適なものである。
【背景技術】
【０００２】
プログラミングツールには、ソースコードを記述することなく、モデル図を記述することによりアプリケーションプログラム（アプリケーション）を開発できるビジュアルプログラミングツールがある。その一例としては、Ｎｏｄｅ−ＲＥＤ（https://nodered.org/）が挙げられる。ビジュアルプログラミングツールを用いたソフトウェア開発では、各種処理が表現されたノードに対して必要に応じて用途、環境、その他の状況などに対応した情報を属性値（プロパティ）に設定し、ノード間の関係（例えば、処理の流れ）を示す線からなるフローを作成する。属性値の例としては、情報の取得先があり、ノード間の関係の例としては、データの流れがある。開発者は、こうしたビジュアルプログラミングツールを用いることで、ソフトウェア開発の知識が十分になくとも、意図した処理を行うアプリケーションを直感的に開発することができる。
【０００３】
また、ソフトウェア開発の分野では、しばしば事前に用意されたアプリケーションの例（テンプレート）を利用することで開発の期間を短縮することが行われる。アプリケーションの開発者は、テンプレートの一覧から、目的に近いテンプレートを取得し、必要な部分を変更することによって開発の期間を短縮し、効率的にアプリケーションを開発することができる。
【０００４】
ビジュアルプログラミングツールでのフローの開発においても同様の方法を適用可能である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−２１５８２６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
新規のアプリケーションの開発者は、テンプレートを用いることによって、ビジュアルプログラミングツールを用いたソフトウェア開発において、ノードの配置およびノード間の配線をゼロから行う必要がなくなり、アプリケーションの迅速かつ簡便な開発が期待できる。そのためには、まず、複数のテンプレートが蓄積されたデータベースから目的に適したテンプレートを検索し、選択する必要がある。
【０００７】
このとき、データベースに登録されているテンプレートにその内容を説明したテキスト文章が付属している場合、アプリケーションの開発者は、テキスト検索によってテンプレートを検索することができる。しかしながら、登録者、開発者などの複数ユーザ間で背景、知識などに差があると、利用する語句が異なり、目的に沿ったテンプレートを検索できないという問題が生じる。
【０００８】
特許文献１では、店舗の商品リストに対して、商品の特徴を表す属性を予め定義することで、属性を考慮したテキスト検索を行う技術が開示されている。特許文献１に記載の技術により、予め登録した属性情報を用いることで複数ユーザ間の利用語句の相違に起因する検索上の問題の改善が見込める。
【０００９】
しかしながら、特許文献１では、属性情報の事前の登録が前提となっており、その方法を開示していない。結果、特許文献１の検索方法をアプリケーションのテンプレート検索に適用した場合、新規のアプリケーションの開発者が求める情報が属性情報の登録から抜け落ちてしまっていると、目的に沿ったテンプレートを検索することが困難になるという問題が生じる。
【００１０】
本発明は以上の点を考慮してなされたもので、テンプレートを適切に検索し得るテンプレート検索システムを提案しようとするものである。
【課題を解決するための手段】
【００１１】
かかる課題を解決するため本発明においては、テンプレートの情報と、前記テンプレートで利用されるノードの情報とを対応付けて管理するテンプレート検索システムであって、前記テンプレート検索システムにより管理されるノードの情報から、入力された検索語の類義語、および／または、前記検索語に係るテンプレートで利用されるノードの繋がりを示すフローを算出し、前記テンプレート検索システムにより管理されるテンプレートの情報から、算出した類義語が紐づくテンプレート、および／または、算出したフローに対応するフローのテンプレートを特定する処理部と、前記処理部により特定されたテンプレートの情報を出力する出力部と、を設けるようにした。
【００１２】
上記構成によれば、類義語が紐づくテンプレート、および／または、検索語に係るテンプレートのフローに対応するフローのテンプレートが、検索語に対応するテンプレートに類似するテンプレートとして検索される。例えば、ユーザの背景、知識などに差があって、利用する検索語の語句が異なっていたとしても、検索語に対応するテンプレートに類似するテンプレートが検索されるので、ユーザは、目的に沿ったテンプレートを得ることができるようになる。
【発明の効果】
【００１３】
本発明によれば、テンプレートを適切に検索することができる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態によるテンプレート検索システムの概要を説明するための図である。
【図２】第１の実施の形態によるテンプレート検索システムに係る構成の一例を示す図である。
【図３Ａ】第１の実施の形態による画面の一例を示す図である。
【図３Ｂ】第１の実施の形態による画面の一例を示す図である。
【図３Ｃ】第１の実施の形態による画面の一例を示す図である。
【図４】第１の実施の形態による画面の一例を示す図である。
【図５】第１の実施の形態による計算機に係る構成の一例を示す図である。
【図６Ａ】第１の実施の形態による記憶装置に格納されている情報の一例を示す図である。
【図６Ｂ】第１の実施の形態による記憶装置に格納されている情報の一例を示す図である。
【図６Ｃ】第１の実施の形態による記憶装置に格納されている情報の一例を示す図である。
【図６Ｄ】第１の実施の形態による記憶装置に格納されている情報の一例を示す図である。
【図７Ａ】第１の実施の形態によるフローテンプレートテーブルの一例を示す図である。
【図７Ｂ】第１の実施の形態によるフローテーブルの一例を示す図である。
【図７Ｃ】第１の実施の形態によるコンテンツテーブルの一例を示す図である。
【図７Ｄ】第１の実施の形態による利用ノードリストの一例を示す図である。
【図７Ｅ】第１の実施の形態による類義語リストの一例を示す図である。
【図７Ｆ】第１の実施の形態による表示フローテンプレートリストの一例を示す図である。
【図７Ｇ】第１の実施の形態によるノード重要度リストの一例を示す図である。
【図７Ｈ】第１の実施の形態による抽象フローリストの一例を示す図である。
【図７Ｉ】第１の実施の形態による分割フローリストの一例を示す図である。
【図７Ｊ】第１の実施の形態による類似フローテンプレートリストの一例を示す図である。
【図８Ａ】第１の実施の形態によるノードテーブルの一例を示す図である。
【図８Ｂ】第１の実施の形態によるノードカテゴリテーブルの一例を示す図である。
【図８Ｃ】第１の実施の形態による外部サービステーブルの一例を示す図である。
【図９】第１の実施の形態による利用ノード抽出処理部が行う処理に係るフローチャートの一例を示す図である。
【図１０】第１の実施の形態によるフローテンプレートマネージャが行う処理に係るフローチャートの一例を示す図である。
【図１１】第１の実施の形態によるテキスト検索処理部が行う処理に係るフローチャートの一例を示す図である。
【図１２】第１の実施の形態による類義語算出処理部が行う処理に係るフローチャートの一例を示す図である。
【図１３】第１の実施の形態による表示フローテンプレート選択処理部が行う処理に係るフローチャートの一例を示す図である。
【図１４】第１の実施の形態によるフローテンプレートマネージャが行う処理に係るフローチャートの一例を示す図である。
【図１５】第１の実施の形態による類似フロー検索処理部が行う処理に係るフローチャートの一例を示す図である。
【図１６】第１の実施の形態によるフロー簡略化処理部が行う処理に係るフローチャートの一例を示す図である。
【図１７Ａ】第１の実施の形態によるフローの簡略化を説明するための図である。
【図１７Ｂ】第１の実施の形態によるフローの簡略化を説明するための図である。
【図１７Ｃ】第１の実施の形態によるフローの簡略化を説明するための図である。
【図１７Ｄ】第１の実施の形態によるフローの簡略化を説明するための図である。
【図１８】第１の実施の形態によるフロー抽象化処理部が行う処理に係るフローチャートの一例を示す図である。
【図１９】第１の実施の形態によるフロー分割処理部が行う処理に係るフローチャートの一例を示す図である。
【図２０】第１の実施の形態によるフロー類似度算出処理部が行う処理に係るフローチャートの一例を示す図である。
【図２１】第３の実施の形態による画面の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下図面について、本発明の一実施の形態を詳述する。本実施の形態は、ビジュアルプログラミングツールによって作成されたアプリケーションの雛形（テンプレート）の検索を支援する技術に関する。本実施の形態に示す技術では、例えば、テンプレートの内容を説明したテンプレートの情報とテンプレートで利用されるノードの情報とから類推した単語の類似関係に基づいて検索を行う。また、例えば、フロー内の重要なノードと入出力関係とから類推したフローの類似関係に基づいて検索を行う。かかる検索によれば、テンプレートに付随したテキストに登録されていない情報をアプリケーションから補うことができ、ユーザの目的により適したテンプレートを提示することが可能となる。以下、詳細について説明する。
【００１６】
なお、以下の説明では、同種の要素を区別しないで説明する場合には、枝番を含む参照符号のうちの共通部分（枝番を除く部分）を使用し、同種の要素を区別して説明する場合は、枝番を含む参照符号を使用することがある。例えば、ユーザを特に区別しないで説明する場合には、「ユーザ１４０」と記載し、個々のユーザを区別して説明する場合には、「ユーザ１４０−１」、「ユーザ１４０−２」のように記載することがある。
【００１７】
（１）第１の実施の形態
図１において、１は全体として第１の実施の形態によるテンプレート検索システムを示す。
【００１８】
＜システムの説明＞
図１を用いてテンプレート検索システム１の概要を説明する。
【００１９】
テンプレート検索システム１は、フローテンプレート（テンプレートの一例）の記憶、検索などを行うフローテンプレートマネージャ１００と、ビジュアルプログラミングツールのノードの管理を行うノードマネージャ１２０とを含んで構成される。
【００２０】
フローテンプレートマネージャ１００は、利用ノード抽出処理部１０１、テキスト検索処理部１０２、類似フロー検索処理部１０３、類義語算出処理部１０４、表示フローテンプレート選択処理部１０５、フロー簡略化処理部１０６、フロー抽象化処理部１０７、フロー分割処理部１０８、フロー類似関係探索処理部１０９、フロー類似度算出処理部１１０、フローテンプレートテーブル１１１、およびフローテーブル１１２を有する。ノードマネージャ１２０は、ノードテーブル１２１を有する。
【００２１】
本テンプレート検索システム１は、ユーザ１４０がフローテンプレートを検索するために入力した検索語に基づいた、フローテンプレートマネージャ１００が管理するフローテンプレートの検索を支援するシステムである。かかる検索を支援する技術を構成する各処理部の概要を以下に示す。
【００２２】
利用ノード抽出処理部１０１では、フローテーブル１１２の情報を取得し、フローテンプレートで利用されているノードを抽出する。これによって、ノードマネージャ１２０が管理する大量のノードの情報からフローテンプレートの検索で利用する情報を選択的に取得でき、利用する情報を厳選することが可能となる。
【００２３】
テキスト検索処理部１０２は、類義語算出処理部１０４と表示フローテンプレート選択処理部１０５とを呼び出し、テキスト情報に基づいたフローテンプレートの検索処理を行う。
【００２４】
類義語算出処理部１０４は、利用ノード抽出処理部１０１を呼び出し、抽出されたノードに関するテキスト情報をノードマネージャ１２０のノードテーブル１２１から取得し、取得したノードの情報とフローテンプレートテーブル１１１から得られるテキスト情報とから、単語間の類似関係を算出する。フローテンプレートで利用するノードの情報と、フローテンプレートの情報とを用いることで、各フローテンプレートに特有の用語、単語の使い方などを単語ごとの事前の登録なしに単語の類似関係に反映することが可能である。また、類義語算出処理部１０４は、前述の処理によって得られた単語間の類似関係に基づいて、検索語に対する類義語を算出する。
【００２５】
表示フローテンプレート選択処理部１０５は、類義語算出処理部１０４の処理結果によって得られた類義語と検索語とからフローテンプレートを検索する。検索語に対する類義語に基づいてフローテンプレートの検索を行うことで、登録者、開発者などの複数ユーザ間の利用語句の違いを考慮したフローテンプレートの検索が可能である。さらに、フローテンプレートで利用するノードの情報と、フローテンプレートの情報とを用いて単語の類似関係を算出する類義語算出処理部１０４の処理結果を用いることで、フローテンプレートに特化した検索が可能となる。
【００２６】
類似フロー検索処理部１０３では、利用ノード抽出処理部１０１とフロー簡略化処理部１０６とフロー類似関係探索処理部１０９とフロー類似度算出処理部１１０とを呼び出し、フロー情報に基づいてフロー間の類似関係を探索し、その結果に基づいてフローテンプレートの検索を行う。
【００２７】
フロー簡略化処理部１０６は、フローテーブル１１２とノードテーブル１２１とに基づいて、類似フロー検索処理部１０３によって抽出されたノードがフローの中でどれだけ重要な役割を行っているかを計算し、フロー抽象化処理部１０７を呼び出して、フローを重要なノードで表して抽象化する処理を行う。
【００２８】
また、フロー簡略化処理部１０６は、フロー分割処理部１０８を呼び出し、フロー抽象化処理部１０７によって抽象化されたフローを入出力の組毎に分割する。
【００２９】
ノードの重要度の算出結果に基づいてフロー抽象化処理部１０７の処理を行うことで、フロー内で特徴的な処理を行っているノードを抽出したフローを作成することができ、フロー全体の処理の流れがわかりやすくなる。また、フロー分割処理部１０８によってフローを分割することで、フローの部分的な検索が可能となる。
【００３０】
フロー類似関係探索処理部１０９では、フロー簡略化処理部１０６の処理によって簡略化されたフロー間の類似度関係を探索する。フロー類似度算出処理部１１０では、フロー類似関係探索処理部１０９の処理結果によって類似関係が認められたフローの組について類似度を定量的に求める。
【００３１】
類似フロー検索処理部１０３は、以上の処理を行うことで、フローの処理内容に基づいたフローテンプレートの検索が可能となる。
【００３２】
フローテンプレートマネージャ１００は、フローテンプレート出力部１３０を有する。フローテンプレート出力部１３０は、例えば、テキスト検索処理部１０２の結果として得られたフローテンプレート１３１と、類似フロー検索処理部１０３の結果として得られたフローテンプレート１３１に類似したフローを持つフローテンプレート１３２とを出力（例えば、フローテンプレート一覧画面として表示）する。ここで、フローテンプレート１３２は、単純な単語検索では検索できない、本テンプレート検索システム１を特徴づける出力の１つである。
【００３３】
なお、フロー簡略化処理部１０６で行う処理は、フローを重要なノードで表すフロー抽象化処理部１０７と、フローを入出力の組毎に分割するフロー分割処理部１０８との何れか一方を行うように構成してもよい。また、フロー簡略化処理部１０６の処理を行わずにフロー類似関係探索処理部１０９およびフロー類似度算出処理部１１０によるフローの類似関係の算出を行ってもよい。
【００３４】
さらに、フローテンプレート出力部１３０については、結果として得られたフローテンプレート１３１およびフローテンプレート１３２を表示する構成に限られるものではなく、フローテンプレート１３１およびフローテンプレート１３２をデータとしてユーザ１４０に提供する構成であってもよい。
【００３５】
図２は、テンプレート検索システム１に係る構成の一例を示す図である。テンプレート検索システム１では、フローテンプレートマネージャ１００と、ノードマネージャ１２０と、ユーザ１４０が操作する端末２１０と、フロー開発マネージャ２２０とが、ネットワークスイッチ２３０を介して通信可能に接続される。
【００３６】
ユーザ１４０は、端末２１０で動作する後述のクライアントプログラム６０１により、フローテンプレートマネージャ１００にアクセスし、フローテンプレートの検索、フローテンプレートのデータの取得などができる。
【００３７】
フローテンプレートマネージャ１００は、フローテンプレートの表示機能（ＧＵＩ）と、フローテンプレートの管理機能と、フローテンプレートの検索機能とを有する。フローテンプレートマネージャ１００の機能の詳細については後述する。
【００３８】
ノードマネージャ１２０は、ビジュアルプログラミングツールのノードの管理機能を有する。ノードマネージャ１２０は、フローテンプレートマネージャ１００に対するノード情報の提供、フロー開発マネージャ２２０へのノード情報の提供、ノードの登録、削除、更新などを行う。前述のＮｏｄｅ−ＲＥＤに対するノードマネージャ１２０の例として、ｎｐｍリポジトリ（https://www.npmjs.com/search?q＝keywords:node−red）が挙げられる。
【００３９】
フロー開発マネージャ２２０は、フローの実行環境と、フローエディタＧＵＩとを有する。フロー開発マネージャ２２０の詳細については後述する。
【００４０】
＜画面の説明＞
図３Ａ〜図３Ｃは、フローテンプレートマネージャ１００のＧＵＩ（フローテンプレート出力部１３０により出力され、ユーザ１４０の端末２１０に表示される画面）の一例を示す図である。図３Ａに示すフローテンプレート一覧画面３００をホーム画面として、ユーザ１４０の画面操作により、図３Ｂに示す表示オプション選択画面３１０、図３Ｃに示すフローテンプレート情報表示画面３２０等が開く。
【００４１】
フローテンプレート一覧画面３００は、フローテンプレートを表示する画面の一例である。フローテンプレート一覧画面３００では、検索されたフローテンプレート３０１が表示される。
【００４２】
ユーザ１４０は、フローテンプレート一覧画面３００に表示されている検索語入力窓３０２に検索語を入力すると、登録されているフローテンプレートを検索することが可能である。フローテンプレート一覧画面３００より、検索されたフローテンプレート３０１をマウスでクリックすると、フローテンプレート情報表示画面３２０が開く。フローテンプレート一覧画面３００より表示オプション３０３をマウスでクリックすると、表示オプション選択画面３１０が開く。
【００４３】
表示オプション選択画面３１０は、フローテンプレートの検索結果を表示する際の表示オプションを選択する画面の一例である。
【００４４】
ユーザ１４０は、ソート順３１１を指定することができる。また、ユーザ１４０は、カテゴリフィルター３１２を選択し、フローテンプレートに紐づいたカテゴリに応じて表示フローテンプレートを絞り込むことができる。さらに、ユーザ１４０は、テキスト検索処理部１０２による検索結果であるテキスト類似結果３１３の表示の有無と、類似フロー検索処理部１０３による検索結果であるフロー類似結果３１４の表示の有無とを選択することができる。これにより、ユーザ１４０は、大量の検索結果を絞り込むことが可能となり、目的とするフローテンプレートを見つけやすくなる。
【００４５】
フローテンプレート情報表示画面３２０は、フローテンプレートの情報表示とフローテンプレートのデータのダウンロードとを実行する画面の一例である。
【００４６】
ユーザ１４０は、フローテンプレート名３２１、フローテンプレートカテゴリ３２２等を参照できる。フローテンプレート概要画面３２３からは、ユーザ１４０は、当該フローテンプレートの概要を参照できる。さらに、説明画面３２４では、ユーザ１４０は、説明表示領域３２５において当該フローテンプレートの内容、開発の背景、目的、適用場面例などの詳細説明を参照できる。また、フロー画像画面３２６および関連資料３２７からは、ユーザ１４０は、フロー画像情報の参照、ドキュメント等のコンテンツの取得ができる。また、ユーザ１４０は、ダウンロードボタン３２８をクリックすると、フローテンプレートのデータをダウンロードできる。ダウンロードしたデータをビジュアルプログラミングの実行環境にデプロイすることにより、アプリケーションを動作させることができる。
【００４７】
図４は、ビジュアルプログラミングのフローを開発するＧＵＩの一例（フローエディタ画面４００）を示す図である。フローエディタ画面４００は、フロー開発マネージャ２２０によって端末２１０に提供される。
【００４８】
フローエディタ画面４００には、利用可能なノードの一覧画面４１０とフローの開発を行うフロー編集画面４２０とが設けられている。一覧画面４１０には、利用可能なノード４１１が一覧表示される。ノードがカテゴライズされている場合には、カテゴリ４１２ごとに一覧表示される。
【００４９】
フローの開発は、フロー編集画面４２０で行う。フローのノード４１１を一覧画面４１０からフロー編集画面４２０にドラッグアンドドロップすることでノードが利用可能（ノード４２１）となる。また、ノード４２１同士をマウスのドラッグ操作により線４２２で結線することで、ノード４２１の処理順序を定義することができる。
【００５０】
例えば、図４に示すフローにおいては、ノード４２１−２の処理が終了すると、次に、ノード４２１−２の右側の線４２２−２で結線されたノード４２１−３の処理が実行される。
【００５１】
ユーザ１４０がノード４２１をクリックすると、ノード情報表示画面４２３が開く。ノード情報表示画面４２３では、ノード４２１の情報を参照することが可能であり、ユーザ１４０は、ノード情報表示画面４２３の内容を参考にフローを開発する。例えば、ノード情報表示画面４２３では、ノード４２１の機能詳細、入力値の詳細、出力値の詳細、変数の説明などを参照可能である。
【００５２】
＜計算機の説明＞
図５は、図２に示すコンポーネント（端末２１０、フローテンプレートマネージャ１００、ノードマネージャ１２０、フロー開発マネージャ２２０）の機能を実現可能な計算機５００に係る構成の一例を示す図である。
【００５３】
計算機５００は、プロセッサであるＣＰＵ（Central Processing Unit）５１０と、主記憶デバイスであるメモリ５２０と、不揮発性の２次記憶装置５３０と、入出力装置５４０と、ポート５５０とを有する。これらの各構成要素は、バス５６０により相互に接続される。
【００５４】
ＣＰＵ５１０は、制御装置の一例であり、メモリ５２０に記憶されているプログラムを実行することによって、計算機５００の所定の機能を実現する。メモリ５２０は、ＣＰＵ５１０よって実行されるプログラムおよびプログラムの実行に必要なデータを記憶する。プログラムは、２次記憶装置５３０からメモリ５２０にロードされる。なお、メモリ５２０および２次記憶装置５３０は、記憶装置の一例である。
【００５５】
入出力装置５４０は、ディスプレイ、ポインタ、キーボード等のデバイスの１つまたは複数のデバイスを含む。ユーザ１４０は、入出力装置５４０により、計算機５００を操作することができる。
【００５６】
ポート５５０は、ネットワーク（例えば、図２のネットワークスイッチ２３０）に接続される。計算機５００は、ポート５５０を介して、他の計算機５００と通信することができる。なお、各コンポーネントが動作する各計算機５００は、仮想マシン、コンテナ等の仮想環境であってもよい。
【００５７】
＜記憶装置のデータ構成の説明＞
図６Ａ〜図６Ｄは、計算機５００の記憶装置に格納されている情報（メモリ５２０または２次記憶装置５３０に格納されているプログラム、データなど）の一例を示す図である。図６Ａは、端末２１０の記憶装置６００に格納される情報の一例を示す。図６Ｂは、フローテンプレートマネージャ１００の記憶装置６１０に格納される情報の一例を示す。図６Ｃは、ノードマネージャ１２０の記憶装置６２０に格納される情報の一例を示す。図６Ｄは、フロー開発マネージャ２２０の記憶装置６３０に格納される情報の一例を示す。
【００５８】
端末２１０の記憶装置６００は、図３および図４に示した画面を表示するためのクライアントプログラム６０１を有する。クライアントプログラム６０１の一例は、ウェブブラウザである。
【００５９】
フローテンプレートマネージャ１００の記憶装置６１０は、ＧＵＩ表示処理部６１１、利用ノード抽出処理部１０１、テキスト検索処理部１０２、類似フロー検索処理部１０３、類義語算出処理部１０４、表示フローテンプレート選択処理部１０５、フロー簡略化処理部１０６、フロー抽象化処理部１０７、フロー分割処理部１０８、フロー類似関係探索処理部１０９、フロー類似度算出処理部１１０、フローテンプレートテーブル１１１、フローテーブル１１２、コンテンツテーブル６１２、利用ノードリスト６１３、類義語リスト６１４、表示フローテンプレートリスト６１５、ノード重要度リスト６１６、抽象フローリスト６１７、分割フローリスト６１８、および類似フローテンプレートリスト６１９を有する。
【００６０】
ＧＵＩ表示処理部６１１は、フローテンプレート出力部１３０の一例であり、クライアントプログラム６０１と連携してＧＵＩを実現するものである。例えば、ＧＵＩ表示処理部６１１は、クライアントプログラム６０１からの検索要求に対する検索結果を画面情報としてクライアントプログラム６０１に送信する。なお、ＧＵＩ表示処理部６１１が送信する画面情報は、ＪＡＶＡＳＣＲＩＰＴ（登録商標）のように端末２１０の記憶装置６００上のクライアントプログラム６０１で動作してもよいし、専用アプリケーションなど、端末２１０の記憶装置６００上のクライアントプログラム６０１以外のクライアントＧＵＩを用いて動作してもよい。
【００６１】
ノードマネージャ１２０の記憶装置６２０は、ノード管理処理部６２１、ノードテーブル１２１、ノードカテゴリテーブル６２２、および外部サービステーブル６２３を有する。
【００６２】
フロー開発マネージャ２２０の記憶装置６３０は、フローの実行環境であるフロー実行環境６３１、およびフローエディタＧＵＩを提供するフローエディタＧＵＩ表示処理部６３２を有する。
【００６３】
フローエディタＧＵＩ表示処理部６３２は、クライアントプログラム６０１と連携してＧＵＩを実現するものである。例えば、クライアントプログラム６０１がウェブブラウザである場合、フローエディタＧＵＩ表示処理部６３２は、クライアントプログラム６０１のリクエストに応じてＨＴＭＬ（HyperText Markup Language）、ＪＡＶＡＳＣＲＩＰＴ等を返すことでクライアントプログラム６０１に画面を表示する。この他、クライアントプログラム６０１が専用のクライアントアプリケーション（デスクトップアプリケーションなど）である場合、フローエディタＧＵＩ表示処理部６３２は、ＡＰＩサーバなどであってもよい。
【００６４】
上記の各プログラム、テーブル、およびリストの詳細については後述する。
【００６５】
なお、端末２１０の記憶装置６００、フローテンプレートマネージャ１００の記憶装置６１０、ノードマネージャ１２０の記憶装置６２０、フロー開発マネージャ２２０の記憶装置６３０は、記憶装置であってもよいし、ネットワーク接続されたデータベース、仮想サーバのようなものの上で動作してもよい。
【００６６】
＜テーブルおよびリストの説明＞
図７Ａ〜図７Ｊは、フローテンプレートマネージャ１００の記憶装置６１０が保持するテーブルおよびリストの一例を示す図である。テーブルは、フローテンプレートマネージャ１００が予め有しているものであり、リストは、フローテンプレートマネージャ１００の処理の過程または処理の結果によって作成されるものである。
【００６７】
図７Ａに示すフローテンプレートテーブル１１１は、フローテンプレートの情報を管理するテーブルである。
【００６８】
フローテンプレートテーブル１１１は、各フローテンプレートに割り当てられた固有のフローテンプレートＩＤ７０１と、フローテンプレート名７０２と、フローテンプレート概要７０３と、フローテンプレート説明７０４と、フローテンプレートのカテゴリ７０５と、フローテーブル１１２に紐づくフローＩＤ７０６と、コンテンツテーブル６１２に紐づくコンテンツＩＤ７０７と、フローテンプレートテーブル１１１への登録日７０８とを有する。
【００６９】
フローテンプレート名７０２は、フローテンプレート情報表示画面３２０のフローテンプレート名３２１に表示される。
【００７０】
フローテンプレート概要７０３は、フローテンプレートの概要を記述したテキスト文章そのものであってもよいし、当該テキスト文章を記述したファイルの格納場所を示すポインタのようなものであってもよい。フローテンプレート概要７０３は、フローテンプレート情報表示画面３２０のフローテンプレート概要画面３２３に表示される。
【００７１】
フローテンプレート説明７０４は、当該フローテンプレートの内容、開発の背景、目的、適用場面例などの詳細説明そのものであるテキスト文章であってもよいし、当該テキスト文章を記述したファイルの格納場所を示すポインタのようなものであってもよい。また、ファイル形式は、テキスト形式であってもよいし、ブラウザ表示を前提としたＨＴＭＬ形式、Ｍａｒｋｄｏｗｎ形式のようなマークアップ言語の形式であってもよい。フローテンプレート説明７０４は、フローテンプレート情報表示画面３２０の説明画面３２４において説明表示領域３２５に表示される。
【００７２】
カテゴリ７０５は、フローテンプレートの管理者が事前に定義した１つまたは複数のカテゴリ名を有する。または、フローテンプレートマネージャ１００は、管理者により定義されたカテゴリ名とそれぞれに割り当てられたカテゴリＩＤから成るテーブルを有し、これに対応するカテゴリＩＤが登録されていてもよい。または、１つまたは複数のカテゴリをフローテンプレートの登録者が自由に定義してもよいし、管理者が事前に定義したカテゴリと登録者が定義したカテゴリとの両方を有していてもよい。カテゴリ７０５は、表示オプション選択画面３１０のカテゴリフィルター３１２の選択部と、フローテンプレート情報表示画面３２０のフローテンプレートカテゴリ３２２の表示部とに表示される。
【００７３】
複数のフローからなるフローテンプレートである場合は、フローＩＤ７０６の値は、複数であってもよい。
【００７４】
フローテンプレートテーブル１１１は、登録者に関する情報、バージョンに関する情報、これまでの累積ダウンロード数など、フローテンプレートに関する上記以外の情報を有していてもよい。
【００７５】
図７Ｂに示すフローテーブル１１２は、各フローテンプレートのフローに係るデータ（フローデータ）を管理するテーブルである。
【００７６】
フローテーブル１１２は、各フローに割り当てられた固有のフローＩＤ７１１と、フローで使用されるノードＩＤ７１２と、フロー内でのノード接続関係７１３と、各ノードのインスタンスオブジェクト情報７１４とを有する。
【００７７】
ノードＩＤ７１２は、後述するノードマネージャ３３０のノードテーブル１２１に紐づき、１つのノードに対して１つのＩＤが割り当てられる。
【００７８】
ノード接続関係７１３は、フロー編集画面４２０でノード４２１同士を線４２２で結線してノード４２１の処理順序を定義したときの、ノード４２１間の接続関係を保持する。ノード接続関係７１３は、ノード識別ＩＤ７１３−１、入力７１３−２、および出力７１３−３を有する。
【００７９】
ノード識別ＩＤ７１３−１は、フローの中でインスタンス化したノードを一意に表す識別子である。
【００８０】
入力７１３−２は、当該ノードの前に実行されるノードのノード識別ＩＤ７１３−１を有する。当該ノードがフローの最初のノードであり、当該ノードの前に実行されるノードが存在しない場合、空値、またはフローの始めを示す値を有する。
【００８１】
出力７１３−３は、当該ノードの後に実行されるノードのノード識別ＩＤ７１３−１を有する。当該ノードがフローの最後のノードであり、当該ノードの後に実行されるノードが存在しない場合、空値、またはフローの終わりを示す値を有する。
【００８２】
なお、入力７１３−２と出力７１３−３とは、どちらか一方の値だけで接続関係がわかる場合は、両方の値を持たなくてもよい。
【００８３】
インスタンスオブジェクト情報７１４は、各フローのノードを実行するインスタンスの宛て先を示すＵＲＬ（Uniform Resource Locator）、変数定義、コメント文などの定義情報を有する。また、インスタンスオブジェクト情報７１４は、当該ノードが呼び出す先の外部サービスをフローの開発者がノード毎に任意に指定できる場合には、外部サービスの接続方法、接続先情報などを有する。また、ノードマネージャ１２０が有する外部サービステーブル６２３（詳細は後述）のようなものをフローテンプレートマネージャ１００が有し、その情報を参照する形でもよい。
【００８４】
図７Ｃに示すコンテンツテーブル６１２は、各フローテンプレートの関連資料等のコンテンツを管理するテーブルである。コンテンツテーブル６１２は、コンテンツＩＤ７２１と、コンテンツ７２２とを有する。コンテンツ７２２には、関連資料のアクセス先の情報の実体、またはリンク情報が格納される。
【００８５】
以降に述べる利用ノードリスト６１３、類義語リスト６１４、表示フローテンプレートリスト６１５、ノード重要度リスト６１６、抽象フローリスト６１７、分割フローリスト６１８、および類似フローテンプレートリスト６１９は、一時処理として記憶される情報である。よって、フローテンプレートマネージャ１００の記憶装置６１０上に常駐せず、各計算プログラムに内包される形であってもよい。
【００８６】
図７Ｄに示す利用ノードリスト６１３は、利用ノード抽出処理部１０１の処理結果として得られるリストである。利用ノードリスト６１３は、フローテンプレートマネージャ１００が管理するフローテンプレートのフローで利用されているノードを管理する。
【００８７】
利用ノードリスト６１３は、フローテンプレートマネージャ１００が管理する全フローテンプレートのフローで利用されているノードのＩＤである利用ノードＩＤ７３１と、各ノードが利用されている回数を示す利用回数７３２とを有する。なお、作成方法については後述する。
【００８８】
図７Ｅに示す類義語リスト６１４は、テキスト検索処理部１０２が行う処理の過程で呼び出される類義語算出処理部１０４の処理結果として得られるリストである。類義語リスト６１４は、ユーザ１４０が入力した検索語７４１と、検索語７４１に対する類義語７４２と、検索語７４１と類義語７４２との類似度７４３とを有する。なお、作成方法については後述する。
【００８９】
図７Ｆに示す表示フローテンプレートリスト６１５は、テキスト検索処理部１０２が行う処理の過程で呼び出される表示フローテンプレート選択処理部１０５の処理結果として得られるリストである。ユーザ１４０が入力した検索語に対するフローテンプレートの検索結果を管理する。表示フローテンプレートリスト６１５は、フローテンプレートＩＤ７５１と、検索結果として表示するかどうかの判定に用いるためのスコア７５２と、検索結果として表示するかどうかの判定結果である検索結果表示判定７５３とを有する。なお、作成方法の詳細については後述する。
【００９０】
図７Ｇに示すノード重要度リスト６１６は、類似フロー検索処理部１０３におけるノードの重要度の計算処理の結果として得られるリストである。ノード重要度リスト６１６は、フローテンプレートマネージャ１００が管理するフローテンプレートで利用されているノードの重要度を管理する。ノード重要度リスト６１６は、フローテンプレートマネージャ１００の利用ノードリスト６１３の利用ノードＩＤ７３１を参照して登録された利用ノードＩＤ７６１と、ノードの重要度の計算結果である重要度７６２と、各ノードが重要であるかの判定結果である判定７６３とを有する。なお、作成方法の詳細については後述する。
【００９１】
図７Ｈに示す抽象フローリスト６１７は、類似フロー検索処理部１０３が行う処理の過程で呼び出されるフロー抽象化処理部１０７の処理結果として得られるリストである。抽象フローリスト６１７は、各フローに割り当てられた固有のフローＩＤ７７１と、フローで使用されるノードＩＤ７７２と、フロー内でのノード接続関係７７３と、各ノードのインスタンスオブジェクト情報７７４とを有する。ノード接続関係７７３は、ノード識別ＩＤ７７３−１と、入力７７３−２と、出力７７３−３とを有する。なお、作成方法の詳細については後述する。
【００９２】
図７Ｉに示す分割フローリスト６１８は、類似フロー検索処理部１０３が行う処理の過程で呼び出されるフロー分割処理部１０８の処理結果として得られるリストである。分割フローリスト６１８は、分割前のフローのフローＩＤ７８１と、分割後のフローＩＤである分割ＩＤ７８２と、フローで使用されるノードＩＤ７８３と、フロー内でのノード接続関係７８４と、各ノードのインスタンスオブジェクト情報７８５とを有する。ノード接続関係７８４は、ノード識別ＩＤ７８４−１と、入力７８４−２と、出力７８４−３とを有する。なお、作成方法の詳細については後述する。
【００９３】
図７Ｊに示す類似フローテンプレートリスト６１９は、類似フロー検索処理部１０３の処理結果として得られるリストである。類似フローテンプレートリスト６１９は、表示フローテンプレートリスト６１５のフローテンプレートＩＤと同一の内容であるテキスト検索フローテンプレートＩＤ７９１と、後述する処理によって類似関係が認められた簡略化されたフローのＩＤである類似簡略化フローＩＤ７９２と、簡略化されたフローの元であるフローテンプレートのＩＤである類似フローテンプレートＩＤ７９３と、フロー間の類似度を示すフロー類似度７９４と、検索結果に表示するかの判定結果である検索結果表示判定７９５とを有する。
【００９４】
図８Ａ〜図８Ｃは、ノードマネージャ１２０の記憶装置６２０が保持するテーブルの一例を示す図である。
【００９５】
図８Ａに示すノードテーブル１２１は、ビジュアルプログラミングツールで利用するノードの情報を管理する。
【００９６】
ノードテーブル１２１は、各ノードに一意に割り当てられたノードＩＤ８０１と、各ノードのカテゴリを示すノードカテゴリＩＤ８０２と、各ノードの名称であるノード名８０３と、ノードの内容を説明したノード説明文８０４と、ノードが接続する外部サービスＩＤ８０５と、ノードが実行する処理コード８０６とを有する。
【００９７】
ノードカテゴリＩＤ８０２は、ノードカテゴリテーブル６２２に紐づく。なお、ノードテーブル１２１では、ノードカテゴリ名そのものを保持していてもよいし、ノードカテゴリＩＤ８０２が設けられていなくてもよい（カテゴライズされていなくてもよい）。
【００９８】
ノード説明文８０４は、当該ノードの機能、入力値、出力値、変数などについての詳細説明を有する。これらの形式は、ノードの説明文そのものであるテキスト文章であってもよいし、当該テキスト文章を記述したファイルの格納場所を示すポインタのようなものであってもよい。また、ファイル形式は、テキスト形式であってもよいし、ブラウザによる表示を前提としたＨＴＭＬ形式、Ｍａｒｋｄｏｗｎ形式のようなマークアップ言語の形式であってもよい。ノード説明文８０４は、フロー編集画面４２０のノード情報表示画面４２３に表示される。
【００９９】
外部サービスＩＤ８０５は、ノードが呼び出す１つまたは複数の外部サービスのＩＤを有し、外部サービステーブル６２３に紐づく。外部サービスＩＤ８０５は、ノードが外部サービスを呼び出さない場合は空値または呼び出しがないことを示す値を有してもよいし、呼び出さないことを示す外部サービスＩＤを有してもよい。なお、外部サービスＩＤ８０５には、当該ノードが呼び出す外部サービスが一意に決まっている場合の外部サービスが登録されるものとする。フローの開発者がノード毎に任意に呼び出し先の外部サービスを指定できる場合には、外部サービスＩＤ８０５は、そのことを示す特殊な値または外部サービスＩＤを有し、任意の呼び出し先の外部サービスは、フローテーブル１１２のインスタンスオブジェクト情報７１４に指定される。
【０１００】
処理コード８０６は、ノードが実行されたときに行う処理コードを有する。処理コード８０６は、処理コードそのものであってもよいし、処理コードを記述したファイルの格納場所を示すポインタのようなものであってもよい。
【０１０１】
なお、ノードテーブル１２１は、ノードのタグ、作成者情報などのメタ情報を有していてもよい。
【０１０２】
図８Ｂに示すノードカテゴリテーブル６２２は、ノードのカテゴリ情報を管理する。
【０１０３】
ノードカテゴリテーブル６２２は、各カテゴリに一意に割り当てられたノードカテゴリＩＤ８１１と、カテゴリの名称を示すカテゴリ名８１２とを有する。ノードカテゴリテーブル６２２は、各カテゴリの説明文などを有していてもよい。
【０１０４】
図８Ｃに示す外部サービステーブル６２３は、ノードが外部サービスを呼び出す際の情報を管理する。
【０１０５】
外部サービステーブル６２３は、各外部サービスに一意に割り当てられた外部サービスＩＤ８２１と、外部サービス名８２２と、接続先の外部サービスのＵＲＬ、接続方法などの接続情報８２３とを有する。外部サービステーブル６２３には、外部サービスに接続しないことを示す特殊ＩＤや、フローの開発者がノード毎に任意に呼び出し先の外部サービスを指定できることを示す特殊ＩＤが存在してもよい。外部サービステーブル６２３は、外部サービスの説明文、提供者名、連絡先、更新日、バージョン情報、その他外部サービスに関連する情報を有する場合もある。
【０１０６】
＜＜フローチャートの説明＞＞
＜利用ノード一覧の作成処理＞
図９は、利用ノード抽出処理部１０１が行う処理に係るフローチャートの一例を示す図である。以下の処理は、フローテンプレートマネージャ１００からの利用ノードリスト６１３の作成命令（利用ノード抽出処理部１０１の呼び出し）を契機に実行される。
【０１０７】
まず、ステップＳ９０１において、利用ノード抽出処理部１０１は、フローテンプレートマネージャ１００のフローテーブル１１２を参照し、フローＩＤ７１１（フロー）を１つ選択する。
【０１０８】
次に、ステップＳ９０２において、利用ノード抽出処理部１０１は、選択したフローＩＤ７１１で利用されているノードＩＤ７１２（ノード）を１つ選択する。
【０１０９】
次に、ステップＳ９０３において、利用ノード抽出処理部１０１は、選択したノードＩＤ７１２が利用ノードリスト６１３の利用ノードＩＤ７３１に含まれているかを確認する。利用ノード抽出処理部１０１は、含まれていない場合、ステップＳ９０４に処理を移し、含まれている場合、ステップＳ９０５に処理を移す。
【０１１０】
次に、ステップＳ９０４において、利用ノード抽出処理部１０１は、選択したノードＩＤ７１２を利用ノードリスト６１３の利用ノードＩＤ７３１に追加する。
【０１１１】
次に、ステップＳ９０５において、利用ノード抽出処理部１０１は、利用ノードリスト６１３の対応する利用回数７３２に「１」を加算する。
【０１１２】
次に、ステップＳ９０６において、利用ノード抽出処理部１０１は、選択したノードＩＤ７１２のノードが選択したフローＩＤ７１１の最後のノードであるかを確認する。利用ノード抽出処理部１０１は、最後のノードである場合、ステップＳ９０７に処理を移し、最後のノードでない場合、ステップＳ９０２に処理を戻す。
【０１１３】
次に、ステップＳ９０７において、利用ノード抽出処理部１０１は、選択したフローＩＤ７１１のフローがフローテーブル１１２の最後のフローであるかを確認する。利用ノード抽出処理部１０１は、最後のフローである場合、ステップＳ９０８に処理を移し、最後のフローでない場合、ステップＳ９０１に処理を戻す。
【０１１４】
最後に、ステップＳ９０８において、利用ノード抽出処理部１０１は、結果を返し、処理を終了する。
【０１１５】
＜テキスト情報を使った検索＞
図１０は、テキスト情報を使った検索処理に係るフローチャートの一例を示す図である。以下の処理は、ユーザ１４０が端末２１０のクライアントプログラム６０１により表示されたフローテンプレート一覧画面３００の検索語入力窓３０２に検索語を入力したことを契機に実行される。
【０１１６】
まず、ステップＳ１００１において、フローテンプレートマネージャ１００は、ユーザ１４０が入力した検索語を受信する。
【０１１７】
次に、ステップＳ１００２において、フローテンプレートマネージャ１００は、テキスト検索処理部１０２を呼び出し、検索語に基づくフローテンプレートの検索を行って表示フローテンプレートリスト６１５を作成する。なお、処理の詳細については後述する。
【０１１８】
最後に、ステップＳ１００３において、フローテンプレートマネージャ１００は、結果を返す。例えば、フローテンプレートマネージャ１００は、検索結果として、表示フローテンプレートリスト６１５をクライアントプログラム６０１に送信し、クライアントプログラム６０１は、フローテンプレート一覧画面３００に検索結果を表示する。
【０１１９】
ここで、フローテンプレートの表示順は、ユーザ１４０が表示オプション選択画面３１０のソート順３１１で選択した順に従うものである。例えば、ユーザ１４０がおすすめ順を選択した場合、ＧＵＩ表示処理部６１１またはクライアントプログラム６０１は、表示フローテンプレートリスト６１５のスコア７５２が高い順にソートする。なお、スコア７５２の値は、ＧＵＩ上でユーザ１４０が参照できてもよいし、できなくてもよい。また、フローテンプレートテーブル１１１がこれまでのダウンロード数を有する場合、ＧＵＩ表示処理部６１１またはクライアントプログラム６０１は、ダウンロードが多い順にフローテンプレートを並び替えてもよい。
【０１２０】
なお、検索結果については、端末２１０に表示することなく、ユーザ１４０は、表示フローテンプレートリスト６１５をデータとして受け取ってもよい。
【０１２１】
また、入力される検索語は、１つでなくてもよい。フローテンプレートマネージャ１００は、複数の検索語を受け付けた場合、それぞれの検索語に対してステップＳ１００２のテキスト検索処理部１０２の呼び出しを行い、それぞれの検索語に対する表示フローテンプレートリスト６１５を結合してステップＳ１００３の処理を行う。
【０１２２】
図１１は、テキスト検索処理部１０２が行う処理に係るフローチャートの一例を示す図である。以下の処理は、フローテンプレートマネージャ１００によってテキスト検索処理部１０２が呼び出されたことを契機に実行される。
【０１２３】
まず、ステップＳ１１０１において、テキスト検索処理部１０２は、類義語算出処理部１０４を呼び出し、検索語に対する類義語を算出して類義語リスト６１４を作成する。なお、処理の詳細については後述する。
【０１２４】
次に、ステップＳ１１０２において、テキスト検索処理部１０２は、表示フローテンプレート選択処理部１０５を呼び出し、フローテンプレートテーブル１１１と類義語リスト６１４とを参照して検索結果として表示するフローテンプレートを選択し、表示フローテンプレートリスト６１５を作成する。なお、処理の詳細については後述する。
【０１２５】
最後に、ステップＳ１１０３において、テキスト検索処理部１０２は、結果を返し、処理を終了する。例えば、テキスト検索処理部１０２は、表示フローテンプレートリスト６１５をフローテンプレートマネージャ１００に返す。
【０１２６】
図１２は、類義語算出処理部１０４が検索語に対する類義語を算出し、類義語リスト６１４を作成する処理に係るフローチャートの一例を示す図である。以下の処理は、フローテンプレートマネージャ１００のテキスト検索処理部１０２によって類義語算出処理部１０４が呼び出されたことを契機に実行される。
【０１２７】
検索語に対する類義語の算出は、フローテンプレートテーブル１１１に登録されているテキスト情報とフローテンプレート（フロー）で利用しているノードの情報とに基づいて算出した単語の類似関係を用いて行う。単語の類似関係の算出方法の例として、ｗｏｒｄ２ｖｅｃ（MIKOLOV, Tomas, et al, “Efficient estimation of word representations in vector space”, arXiv preprint arXiv:1301.3781, 2013.）がある。これは、文章中の単語の並びから、語意をベクトル表現する手法であり、単語間の類似度の算出が可能である。以下では、ｗｏｒｄ２ｖｅｃを用いて単語の類似関係を算出する場合を例に挙げて述べる。
【０１２８】
ステップＳ１２０１において、類義語算出処理部１０４は、利用ノード抽出処理部１０１を呼び出し、利用ノードリスト６１３を作成する。
【０１２９】
ステップＳ１２０１の次に、類義語算出処理部１０４は、ステップＳ１２０２を行い、利用ノードリスト６１３を参照してノードの情報の取得対象とするノードを決定する。これにより、フローテンプレートマネージャ１００が管理するフローの情報を用いてノードを厳選することが可能となる。情報の取得対象とするノードは、利用ノードリスト６１３に含まれるノード全てであってもよいし、利用回数、ノードのカテゴリ、後述するノード重要度リスト６１６などに基づいて、情報を取得するノードをさらに厳選してもよい。
【０１３０】
ステップＳ１２０２の次に、類義語算出処理部１０４は、ステップＳ１２０３を行い、ステップＳ１２０２で情報取得の対象としたノードのノードＩＤをキーとしてノードマネージャ１２０のノードテーブル１２１を参照し、対象のノードのノード名８０３、ノード説明文８０４などのテキスト情報を取得する。このとき、対応するノードカテゴリテーブル６２２がノードカテゴリ名やその説明文を有している場合、外部サービステーブル６２３が外部サービス名やその説明文を有している場合、類義語算出処理部１０４は、それらの文章を取得してもよい。また、開発者が独自に作成したノードについては、ＧｉｔＨｕｂ（https://github.com/）を例としたソフトウェア開発のソースコード管理サービス、開発者独自のデータベースに登録されると考えられるため、類義語算出処理部１０４は、これらを参照してノード名８０３、ノード説明文８０４などのテキスト情報に該当する情報を取得してもよい。
【０１３１】
また、ステップＳ１２０４において、類義語算出処理部１０４は、フローテンプレートテーブル１１１を参照し、フローテンプレート名７０２、フローテンプレート概要７０３、フローテンプレート説明７０４などのテキスト情報を取得する。また、各フローテンプレートに紐づいたコンテンツ７２２からテキスト情報を抽出してもよい。
【０１３２】
なお、ステップＳ１２０１、ステップＳ１２０２、およびステップＳ１２０３と、ステップＳ１２０４とは互いに並行して行うことが可能である。
【０１３３】
次に、ステップＳ１２０５において、類義語算出処理部１０４は、ステップＳ１２０３およびステップＳ１２０４で取得したテキスト情報を用いてテキスト情報に含まれる単語に対してベクトルを算出する。なお、類義語算出処理部１０４は、テキスト情報に含まれる全ての単語に対してベクトルを算出してもよいし、テキスト情報に含まれる一部の単語（例えば、単語の品詞、出現回数、出現頻度などによるフィルタリングにより抽出した単語）に対してベクトルを算出してもよい。このとき、ステップＳ１２０３およびステップＳ１２０４で取得したテキスト情報に加え、語彙の不足を補うために一般的な技術文書、ドキュメントなどを利用してもよい。
【０１３４】
次に、ステップＳ１２０６において、類義語算出処理部１０４は、検索語のベクトルとその他の単語のベクトルとの類似度を算出する。類義語算出処理部１０４は、ベクトル距離が近い順に並べ変えたときの順位で閾値を設け、閾値以内である単語を検索語に対する類義語とし、ベクトル距離を検索語に対する類似度として、類義語リスト６１４を作成する。なお、ベクトル距離そのものに対して閾値を設けてもよいし、順位と値の両方に閾値を設けてもよい。
【０１３５】
最後に、ステップＳ１２０７において、類義語算出処理部１０４は、結果を返し、処理を終了する。例えば、類義語算出処理部１０４は、類義語リスト６１４をテキスト検索処理部１０２に渡す。
【０１３６】
図１３は、表示フローテンプレート選択処理部１０５がフローテンプレートテーブル１１１と類義語リスト６１４とを参照して検索結果として表示するフローテンプレートを選択し、表示フローテンプレートリスト６１５を作成する処理に係るフローチャートの一例を示す図である。以下の処理は、フローテンプレートマネージャ１００のテキスト検索処理部１０２によって表示フローテンプレート選択処理部１０５が呼び出されたことを契機に実行される。
【０１３７】
まず、ステップＳ１３０１において、表示フローテンプレート選択処理部１０５は、類義語算出処理部１０４で作成された類義語リスト６１４の検索語７４１または類義語７４２を１つ選択する。
【０１３８】
次に、ステップＳ１３０２において、表示フローテンプレート選択処理部１０５は、フローテンプレートマネージャ１００のフローテンプレートテーブル１１１を参照し、フローテンプレートＩＤ７０１（フローテンプレート）を１つ選択する。
【０１３９】
次に、ステップＳ１３０３において、表示フローテンプレート選択処理部１０５は、選択した単語（検索語７４１または類義語７４２）が、ステップＳ１３０２で選択したフローテンプレートの、フローテンプレート名７０２、フローテンプレート概要７０３、またはフローテンプレート説明７０４に含まれているかを確認する。表示フローテンプレート選択処理部１０５は、含まれている場合、ステップＳ１３０４に処理を移し、含まれていない場合、ステップＳ１３０５に処理を移す。
【０１４０】
次に、ステップＳ１３０４において、表示フローテンプレート選択処理部１０５は、表示フローテンプレートリスト６１５の、対応するフローテンプレートＩＤ７５１のスコア７５２にスコア値を加算する。加算は、類義語リスト６１４の類似度７４３を足しあわせるものとする。なお、含まれる語が検索語である場合は類似度「１」(１００％)を足しあわせる。
【０１４１】
その他のスコア値の加算方法として、含まれる単語が検索語であるか類義語であるかの別、類義語の類似度に依らず一定の値（例えば「１」）を加算していく方法、検索語である場合だけ大きなスコア値（第１の値、例えば、「１０」）を加算し、類義語である場合には小さなスコア値（第１の値より小さい第２の値、例えば、「１」）を加算する方法、事前に基準値を決めておき、含まれる単語が検索語であるか類義語であるかの別、類義語の類似度に応じて基準値にバイアス値を掛け合わせた値をスコア値に加算する方法、含まれる類義語の個数によって類似度を変化させる方法、などをとってもよい。さらに、単語が含まれている項目によってスコア値を変化させてもよい。
【０１４２】
次に、ステップＳ１３０５において、表示フローテンプレート選択処理部１０５は、選択したフローテンプレートが最後のフローテンプレートであるかを確認する。表示フローテンプレート選択処理部１０５は、最後のフローテンプレートである場合、ステップＳ１３０６に処理を移し、最後のフローテンプレートでない場合、ステップＳ１３０２に処理を戻す。
【０１４３】
次に、ステップＳ１３０６において、表示フローテンプレート選択処理部１０５は、選択した単語が類義語リスト６１４の最後の単語（類義語）であるかを確認する。表示フローテンプレート選択処理部１０５は、最後の単語である場合、ステップＳ１３０７に処理を移し、最後の単語でない場合、ステップＳ１３０１に処理を戻す。
【０１４４】
次に、ステップＳ１３０７において、表示フローテンプレート選択処理部１０５は、表示するフローテンプレートを決定する。例えば、表示フローテンプレート選択処理部１０５は、表示フローテンプレートリスト６１５のスコア７５２を事前に定めた閾値と比較して検索結果として表示するかどうかの判定を行い、その結果を検索結果表示判定７５３に格納する。
【０１４５】
最後に、ステップＳ１３０８において、表示フローテンプレート選択処理部１０５は、結果を返し、処理を終了する。例えば、表示フローテンプレート選択処理部１０５は、表示フローテンプレートリスト６１５をテキスト検索処理部１０２に渡す。
【０１４６】
＜テキスト情報およびフロー情報を使った検索＞
図１４は、テキスト情報とフロー情報とを使った検索処理に係るフローチャートの一例を示す図である。以下の処理は、ユーザ１４０が端末２１０のクライアントプログラム６０１に表示されたフローテンプレート一覧画面３００の検索語入力窓３０２に検索語を入力したことを契機に実行される。
【０１４７】
まず、ステップＳ１４０１において、フローテンプレートマネージャ１００は、ユーザ１４０が入力した検索語を受信する。
【０１４８】
次に、ステップＳ１４０２において、フローテンプレートマネージャ１００は、テキスト検索処理部１０２を呼び出し、検索語に基づいて類義語リスト６１４および表示フローテンプレートリスト６１５を作成する。
【０１４９】
なお、このときテキスト検索処理部１０２は、ステップＳ１１０１において類義語算出処理部１０４の呼び出しをせずに類義語リスト６１４に検索語７４１の登録を行い、ステップＳ１１０２で呼び出す表示フローテンプレート選択処理部１０５では検索語７４１に対して表示するフローテンプレートを選択してもよい。また、後述するステップＳ１４０３において類似フロー検索処理部１０３を呼び出して類似したフローの検索を行うことによって、フローテンプレートの検索時にフローテンプレートマネージャ１００に登録されているフローの情報を考慮することが可能であることから、テキスト検索処理部１０２がステップＳ１１０１において呼び出す類義語算出処理部１０４のステップＳ１２０５において単語の類似関係を算出する際には、ステップＳ１２０１、ステップＳ１２０２、ステップＳ１２０３で取得するフローに使われているノードの情報は利用しなくてもよい。
【０１５０】
次に、ステップＳ１４０３において、フローテンプレートマネージャ１００は、類似フロー検索処理部１０３を呼び出して、表示フローテンプレートリスト６１５の検索結果表示判定７５３において検索結果に表示するとされているフローテンプレートのフローに類似したフローを持つフローテンプレートを検索し、類似フローテンプレートリスト６１９を作成する。なお、処理の詳細については後述する。
【０１５１】
最後に、ステップＳ１４０４において、フローテンプレートマネージャ１００は、結果を返し、処理を終了する。例えば、フローテンプレートマネージャ１００は、検索結果として、表示フローテンプレートリスト６１５と類似フローテンプレートリスト６１９とをクライアントプログラム６０１に送信する。クライアントプログラム６０１は、フローテンプレート一覧画面３００に検索結果を表示する。
【０１５２】
フローテンプレートの表示順は、ユーザ１４０が表示オプション選択画面３１０のソート順３１１で選択した順に従うものである。例えば、ユーザ１４０がおすすめ順を選択した場合、ＧＵＩ表示処理部６１１またはクライアントプログラム６０１は、テキストによるフローテンプレートの検索結果については表示フローテンプレートリスト６１５のスコア７５２が高い順にソートする。そして、テキストによるフローテンプレートの検索結果を前に、続いて対応する類似フローの検索結果を類似フローテンプレートリスト６１９に基づいてフロー類似度７９４が高い順に表示する。
【０１５３】
また、テキストによるフローテンプレートの検索結果である表示フローテンプレートリスト６１５のフローテンプレートを表示の前半に固めておき、後半に類似フローテンプレートリスト６１９のフローテンプレートをまとめて表示してもよい。なお、スコア７５２およびフロー類似度７９４の値は、ＧＵＩ上でユーザ１４０が参照できてもよいし、できなくてもよい。また、フローテンプレートテーブル１１１がこれまでのダウンロード数を有する場合、ＧＵＩ表示処理部６１１またはクライアントプログラム６０１は、ダウンロードが多い順にフローテンプレートを並び替えてもよい。
【０１５４】
なお、検索結果については、端末２１０に表示することなく、ユーザ１４０は、表示フローテンプレートリスト６１５と類似フローテンプレートリスト６１９とをデータとして受け取ってもよい。
【０１５５】
また、入力される検索語は、１つでなくてもよい。フローテンプレートマネージャ１００は、複数の検索語を受け付けた場合、それぞれの検索語に対してステップＳ１４０２のテキスト検索処理部１０２の呼び出しとステップＳ１４０３の類似フロー検索処理部１０３の呼び出しとを行い、それぞれの検索語に対する表示フローテンプレートリスト６１５と類似フローテンプレートリスト６１９とを結合してステップＳ１４０５の処理を行う。
【０１５６】
図１５は、類似フロー検索処理部１０３が、表示フローテンプレートリスト６１５の検索結果表示判定７５３において検索結果に表示するとされているフローテンプレートのフローに類似したフローを有するフローテンプレートを検索し、類似フローテンプレートリスト６１９を作成する処理に係るフローチャートの一例を示す図である。以下の処理は、フローテンプレートマネージャ１００が類似フロー検索処理部１０３を呼び出したことを契機に実行される。
【０１５７】
まず、ステップＳ１５０１において、類似フロー検索処理部１０３は、利用ノード抽出処理部１０１を呼び出し、利用ノードリスト６１３を作成する。
【０１５８】
次に、ステップＳ１５０２において、類似フロー検索処理部１０３は、利用ノードリスト６１３と、ノードマネージャ１２０のノードテーブル１２１と、ノードカテゴリテーブル６２２と、外部サービステーブル６２３とを用いて、ノード重要度リスト６１６を作成する。ノードの重要度７６２の計算例を以下に示す。
【０１５９】
ノードの重要度の計算方法の一例として、各利用ノードの利用ノードリスト６１３の利用回数７３２を、利用回数７３２の合計で割ってノードごとに利用頻度を算出し、活用する方法がある。類似フロー検索処理部１０３は、利用頻度の算出結果に応じて重要度を定める。例えば、使用頻度の高いノードは、単純な四則計算、フローのキックを行うなど、汎用的な使い方が可能であり、反対に使用頻度の低いノードは、フロー内での特徴的な処理を担っている可能性が高いと考えられる。よって、使用頻度が低いほど重要度を高く、使用頻度が高いほど重要度を低くすることが考えられる。
【０１６０】
他の例として、類似フロー検索処理部１０３は、ノードマネージャ１２０のノードカテゴリテーブル６２２を参照し、フロー内で特徴的な処理を行う可能性が高いカテゴリに属するノードの重要度を高くすることが考えられる。さらに、類似フロー検索処理部１０３は、ノードマネージャ１２０の外部サービステーブル６２３を参照し、外部サービスの呼び出しを行うノードは、接続先で重要な処理を行っていると考え、ノードの重要度を高くすることが考えられる。
【０１６１】
上記例のようなノードの重要度の算出方法は、単独で用いてもよいし、複数の算出方法を組み合わせてもよい。
【０１６２】
判定７６３の算出方法の一例は、重要度７６２の計算結果に対して閾値を設けて判定を行うことである。また、特定のノード、ノードカテゴリテーブル６２２の特定のカテゴリ、外部サービステーブル６２３の特定の外部サービスに該当するノードは、重要と判定することを事前に定義していてもよい。さらに、重要度７６２と事前の定義との両方に基づいて判断してもよい。
【０１６３】
次に、ステップＳ１５０３において、類似フロー検索処理部１０３は、ステップＳ１５０２で作成したノード重要度リスト６１６に基づいて、フロー簡略化処理部１０６を呼び出し、フローの類似関係を算出する際に用いるために簡略化したフローを作成する。なお、処理の詳細については後述する。
【０１６４】
次に、ステップＳ１５０４において、類似フロー検索処理部１０３は、ステップＳ１４０２で作成した表示フローテンプレートリスト６１５からフローテンプレートＩＤ７５１（フローテンプレート）を１つ選択する（テキスト検索によるフローテンプレートの検索結果を１つ選択する）。
【０１６５】
次に、ステップＳ１５０５において、類似フロー検索処理部１０３は、フロー類似関係探索処理部１０９を呼び出す。フロー類似関係探索処理部１０９は、フロー簡略化処理部１０６で簡略化されたフローを使って、ステップＳ１５０４で選択したフローテンプレートの簡略化フローと、その他のフローテンプレートの簡略化フローとの間に類似関係が認められるかを確認する。フロー類似関係探索処理部１０９は、類似関係が認められるフローが見つかった場合、類似フローテンプレートリスト６１９の類似簡略化フローＩＤ７９２に該当する簡略化フローＩＤを、類似フローテンプレートＩＤ７９３に、該当するフローテンプレートＩＤをそれぞれ登録する。なお、フロー類似関係探索処理部１０９は、１つのフローテンプレートに対して簡略化されたフローが複数存在する場合、全ての簡略化されたフローに対して類似関係を確認する。
【０１６６】
フロー類似関係探索処理部１０９で行うフローの類似関係の確認方法の例として、グラフ編集距離（Graph Edit Distance：ＧＥＤ）を用いることが考えられる。なお、このときには、ノードテーブル１２１のノードＩＤ８０１の完全な一致を用いてもよいし、ノードテーブル１２１のノードカテゴリＩＤ８０２、外部サービスＩＤ８０５を活用してノードの類似性を用いてもよい。
【０１６７】
次に、ステップＳ１５０６において、類似フロー検索処理部１０３は、フロー類似度算出処理部１１０を呼び出して、フロー類似関係探索処理部１０９でフロー間に類似関係が認められたペアについて、フローの類似度を算出し、類似フローテンプレートリスト６１９のフロー類似度７９４に類似度を、検索結果表示判定７９５に該当するフローテンプレートを類似フローテンプレートとして表示するか否かを登録する。このときに用いるフローについては、フロー類似度算出処理部１１０は、ステップＳ１５０３のフロー簡略化処理部１０６で作成した簡略化されたフローであってもよいし、完全なフローを用いてもよい。なお、処理の詳細については後述する。
【０１６８】
次に、ステップＳ１５０７において、類似フロー検索処理部１０３は、ステップＳ１５０４で選択したフローテンプレートが表示フローテンプレートリスト６１５の最後のフローテンプレート（検索結果）であるかを確認する。類似フロー検索処理部１０３は、最後のフローテンプレートである場合、処理を終了し、最後のフローテンプレートでない場合、ステップＳ１５０４に処理を戻す。
【０１６９】
なお、ステップＳ１５０３のフロー簡略化処理部１０６を行わず、ステップＳ１５０５およびステップＳ１５０６で呼び出されるフロー類似関係探索処理部１０９とフロー類似度算出処理部１１０とを完全なフローを用いて行ってもよい。また、完全なフローと簡略化されたフローの両方を用いて行ってもよい。
【０１７０】
図１６は、フロー簡略化処理部１０６が行う処理に係るフローチャートの一例を示す図である。以下の処理は、フローテンプレートマネージャ１００の類似フロー検索処理部１０３において、フロー簡略化処理部１０６が呼び出されたことを契機に実行される。フロー簡略化処理部１０６では、類似フロー検索処理部１０３のステップＳ１５０２で作成したノード重要度リスト６１６に基づいて、各フローを簡略化する。これらの処理によって作成されるフローの模式図は、図１７Ｃおよび図１７Ｄに示すようなものになる。
【０１７１】
まず、ステップＳ１６０１において、フロー簡略化処理部１０６は、フロー抽象化処理部１０７を呼び出し、ノード重要度リスト６１６に基づいて、各フローを、特徴的な働きをしていると考えられる重要なノードで表して抽象化し、抽象フローリスト６１７を作成する。
【０１７２】
次に、ステップＳ１６０２において、フロー簡略化処理部１０６は、フロー分割処理部１０８を呼び出し、各フローを、フローの始点または終点のノードが分岐しないフローの組に分割し、分割フローリスト６１８を作成する。
【０１７３】
最後に、ステップＳ１６０３において、フロー簡略化処理部１０６は、結果を返し、処理を終了する。例えば、フロー簡略化処理部１０６は、類似フロー検索処理部１０３に分割フローリスト６１８を渡す。
【０１７４】
図１７は、フローの簡略化を説明するための図である。なお、図１７については、図１８および図１９において適宜に参照して説明する。
【０１７５】
図１８は、フロー抽象化処理部１０７が、各フローを、ノード重要度リスト６１６に基づいて、特徴的な働きをしていると考えられる重要なノードで表して抽象化する処理に係るフローチャートの一例を示す図である。
【０１７６】
図１８に示す処理は、図１７Ａに示す抽象化前のフロー１７００を図１７Ｃに示す抽象化後のフロー１７２０に変換する処理に該当する。以下の処理は、フロー簡略化処理部１０６において、フロー抽象化処理部１０７が呼び出されたことを契機に実行される。
【０１７７】
まず、ステップＳ１８０１において、フロー抽象化処理部１０７は、フローテンプレートマネージャ１００のフローテーブル１１２をコピーし、抽象フローリスト１７１０とする。図１７Ｂに示すリストは、フローテーブル１１２のコピーによって作成された抽象フローリスト１７１０の例である。以下では、図１７Ａのフロー１７００が図１７Ｂの抽象フローリスト１７１０において、フローＩＤ７７１が「ｆｌｏｗ−１００」のフローに該当すると仮定して説明を行う。抽象フローリスト１７１０は、以降のフローの抽象化処理によって書き換えられ、最終的には図７Ｈに示す抽象フローリスト６１７になり、抽象化後のフロー１７２０を表す情報が残る。
【０１７８】
次に、ステップＳ１８０２において、フロー抽象化処理部１０７は、抽象フローリスト１７１０のフローＩＤ７７１（フロー）を１つ選択する。
【０１７９】
次に、ステップＳ１８０３において、フロー抽象化処理部１０７は、選択したフローＩＤのノードＩＤ７７２（ノード）を１つ選択する。
【０１８０】
次に、ステップＳ１８０４において、フロー抽象化処理部１０７は、選択したノードＩＤ７７２を、ノード重要度リスト６１６の利用ノードＩＤ７６１と照らし合わせ、該当するノードの判定７６３を参照して重要なノードであるかを確認する。フロー抽象化処理部１０７は、重要なノードでない場合、削除対象のノードであるため、ステップＳ１８０５に処理を移し、重要なノードである場合、ステップＳ１８０６に処理を移す。なお、説明の都合上、図１７Ａでは、重要なノード１７０１にアスタリスク（＊）を付け、削除対象のノード１７０２は無印として表している。
【０１８１】
次に、ステップＳ１８０５において、フロー抽象化処理部１０７は、結合関係を保持したまま、抽象フローリスト１７１０から該当ノードの情報を削除する。この処理は、すなわち、削除対象ノードの入力７７３−２に登録されているノード識別ＩＤ７７３−１を持つノードの出力７７３−３のノード識別ＩＤを、削除対象ノードの出力７７３−３に登録されているノード識別ＩＤに書き換え、削除対象ノードの出力７７３−３に登録されているノード識別ＩＤ７７３−１を持つノードの入力７７３−２のノード識別ＩＤを、削除対象ノードの入力７７３−２に登録されているノード識別ＩＤに書き換えてから、削除対象ノードの情報を削除することである。
【０１８２】
次に、ステップＳ１８０６において、フロー抽象化処理部１０７は、選択したノードがフローの最後のノードであるかを確認する。フロー抽象化処理部１０７は、最後のノードである場合、ステップＳ１８０７に処理を移し、最後のノードでない場合、ステップＳ１８０３に処理を戻す。
【０１８３】
次に、ステップＳ１８０７において、フロー抽象化処理部１０７は、選択したフローが最後のフローであるかを確認する。フロー抽象化処理部１０７は、最後のフローである場合、ステップＳ１８０８に処理を移し、最後のフローでない場合、ステップＳ１８０２に処理を戻す。
【０１８４】
最後に、ステップＳ１８０８において、フロー抽象化処理部１０７は、結果を返し、処理を終了する。例えば、フロー抽象化処理部１０７は、抽象フローリスト１７１０（抽象フローリスト６１７）をフロー簡略化処理部１０６に渡す。
【０１８５】
図１９は、フロー分割処理部１０８が、フロー抽象化処理部１０７において抽象化したフローを、フローの始点または終点のノードが分岐しないフローの組に分割する処理に係るフローチャートの一例を示す図である。図１７Ｃに示す抽象化後のフロー１７２０を図１７Ｄに示す分割フロー１７３０に変換する処理に該当する。以下の処理は、フロー簡略化処理部１０６において、フロー分割処理部１０８が呼び出されたことを契機に実行される。
【０１８６】
ここで、ユーザ１４０がフローテンプレートマネージャ１００に登録されているフローテンプレートを参考に新しいアプリケーションの開発を行う際には、予め登録されているアプリケーションが複数の入力または出力を持っていたとしても、そのうちの１つだけの入力または出力を使いたい場合と、複数を組み合わせて使いたい場合とが存在する。そこで、フローを分割してから検索することで両方の場合に対応可能となる。分割したフローの情報は、分割フローリスト６１８に登録される。
【０１８７】
まず、ステップＳ１９０１において、フロー分割処理部１０８は、フロー抽象化処理部１０７の処理で作成した抽象フローリスト６１７からフローＩＤ７７１（抽象化されたフロー）を１つ選択する。
【０１８８】
次に、ステップＳ１９０２において、フロー分割処理部１０８は、選択したフローの始点となる始点ノード１７２１を１つ選択する。ここで、始点ノード１７２１とは、入力７７３−２を持たないノードを指す。
【０１８９】
次に、ステップＳ１９０３において、フロー分割処理部１０８は、選択したフローの終点となる終点ノード１７２３を１つ選択する。ここで、終点ノード１７２３とは、出力７７３−３を持たないノードを指す。
【０１９０】
次に、ステップＳ１９０４において、フロー分割処理部１０８は、ステップＳ１９０２で選択した始点ノード１７２１からステップＳ１９０３で選択した終点ノード１７２３へのフローを抜粋し、分割フローリスト６１８に登録する。始点ノード１７２１から終点ノード１７２３への道のりに、一度分岐してから合流するような経路が存在する場合は、分岐ごとに登録してもよいし、まとめて１つのフローとして登録してもよいし、その両方を登録してもよい。
【０１９１】
次に、ステップＳ１９０５において、フロー分割処理部１０８は、ステップＳ１９０３で選択した終点ノード１７２３が最後の終点ノードであるかを確認する。フロー分割処理部１０８は、最後の終点ノードである場合、ステップＳ１９０６に処理を移し、最後の終点ノードでない場合、ステップＳ１９０３に処理を戻す。
【０１９２】
次に、ステップＳ１９０６において、フロー分割処理部１０８は、ステップＳ１９０２で選択した始点ノード１７２１が最後の始点ノードであるかを確認する。フロー分割処理部１０８は、最後の始点ノードである場合、ステップＳ１９０７に処理を移し、最後の始点ノードでない場合、ステップＳ１９０２に処理を戻す。
【０１９３】
次に、ステップＳ１９０７において、フロー分割処理部１０８は、ステップＳ１９０１で選択したフローが最後のフローであるかを確認する。フロー分割処理部１０８は、最後のフローである場合、ステップＳ１９０８に処理を移し、最後のフローでない場合、ステップＳ１９０１に処理を移す。
【０１９４】
最後に、ステップＳ１９０８において、フロー分割処理部１０８は、結果を返し、処理を終了する。例えば、フロー分割処理部１０８は、分割フローリスト６１８をフロー簡略化処理部１０６に渡す。
【０１９５】
以上では、フロー簡略化処理部１０６が行う処理の一例として、フローテーブル１１２が保持するフローを、フロー抽象化処理部１０７において抽象化した後、フロー分割処理部１０８において分割する処理について述べた。しかしながら、フローの簡略化方法は、上記に限らず、フロー簡略化処理部１０６は、フロー抽象化処理部１０７を行って抽象化したフローを作成するだけでもよいし、フロー分割処理部１０８を行ってフローを分割するだけでもよい。
【０１９６】
図２０は、フロー類似度算出処理部１１０が、フロー類似関係探索処理部１０９の処理結果によってフロー間に類似関係が認められたペアについて、フローの類似度を算出し、該当するフローテンプレートを類似フローテンプレートとして表示するかを判断する処理に係るフローチャートの一例を示す図である。以下の処理は、フローテンプレートマネージャ１００の類似フロー検索処理部１０３において、フロー類似度算出処理部１１０が呼び出されたことを契機に実行される。
【０１９７】
まず、ステップＳ２００１において、フロー類似度算出処理部１１０は、類似フローテンプレートリスト６１９から類似する簡略化フローのペアを１つ選択する。
【０１９８】
次に、ステップＳ２００２において、フロー類似度算出処理部１１０は、選択した簡略化フローのペアのフロー類似度７９４を算出する。
【０１９９】
類似度の算出方法の一例として、簡略化フローの始点ノード１７２１と終点ノード１７２３に注目して類似度を算出する方法がある。ユーザ１４０がフローテンプレートマネージャ１００に登録されているフローテンプレートを参考に新しいアプリケーションの開発を行う際には、入力したいデータと欲しい結果とが決まっており、欲しい結果が得られる処理内容を参考にしたい場合が多いと考えられる。そこで、フローの始点と終点とに注目して類似度を計算することで、より目的に沿った検索結果が得られると期待できる。
【０２００】
始点ノード１７２１と終点ノード１７２３とに注目して類似度を算出する方法として、例えば、簡略フローのペアにおいて、始点ノード１７２１と中間ノード１７２２と終点ノード１７２３との全てが一致する場合に類似度を最も高くし（最も高い第１の類似度）、始点ノード１７２１と終点ノード１７２３との両方が一致する場合に類似度を次に高くし（第１の類似度の次に高い第２の類似度）、始点ノード１７２１と終点ノード１７２３とのどちらか一方が一致する場合には類似度を少し下げ（第２の類似度の次に高い第３の類似度）、始点ノード１７２１と終点ノード１７２３との両方が一致しない場合には類似度を最も低くする（第３の類似度の次に高い第４の類似度）ことが考えられる。
【０２０１】
このとき、始点ノード１７２１と終点ノード１７２３との中間に存在する中間ノード１７２２が一致している割合によって類似度を変化させてもよい。例えば、フロー類似度算出処理部１１０は、一致している割合が高いほど、類似度を高くする。さらに、ノード重要度リスト６１６を参照し、重要度７６２に応じて類似度を変化させてもよい。例えば、フロー類似度算出処理部１１０は、重要度が高いほど、類似度を高くする。
【０２０２】
なお、ここで、ノードの一致を確認する際には、ノードテーブル１２１のノードＩＤ８０１（抽象フローリスト６１７のノードＩＤ７７２、分割フローリスト６１８のノードＩＤ７８３）の完全な一致であってもよいし、ノードテーブル１２１のノードカテゴリＩＤ８０２、外部サービスＩＤ８０５等を活用して、類似度にバイアスを掛けてもよい。
【０２０３】
類似度の算出方法の他の例として、ステップＳ１５０５で簡略化フローの類似関係を確認する際に用いた手法において類似度が取得可能な場合はこれを利用してもよいし、簡略化フローの始点ノード１７２１と終点ノード１７２３とに注目して算出した類似度と組み合わせてもよい。
【０２０４】
次に、ステップＳ２００３において、フロー類似度算出処理部１１０は、フロー類似度７９４を事前に定めた閾値と比較して検索結果として表示するかどうかの判定を行い、その結果を検索結果表示判定７９５に格納する。
【０２０５】
次に、ステップＳ２００４において、フロー類似度算出処理部１１０は、選択した簡略化フローのペアが最後のペアであるかを確認する。フロー類似度算出処理部１１０は、最後のペアである場合、ステップＳ２００５に処理を移し、最後のペアでない場合、ステップＳ２００１に処理を戻す。
【０２０６】
最後に、ステップＳ２００５において、フロー類似度算出処理部１１０は、結果を返す。例えば、フロー類似度算出処理部１１０は、類似フロー検索処理部１０３に類似フローテンプレートリスト６１９を渡す。
【０２０７】
本実施の形態によれば、例えば、ビジュアルプログラミングツールで開発されたアプリケーションのフローテンプレートを検索する際に、テキスト情報とフロー情報とに基づく関連フローテンプレートの提示が可能となる。これによって、フローテンプレートに付随したテキストに登録されていない情報をアプリケーションから補うことができ、よりユーザの目的に適したフローテンプレートを提示することが可能となる。
【０２０８】
（２）第２の実施の形態
第１の実施の形態では、ユーザ１４０がフローテンプレート一覧画面３００の検索語入力窓３０２に検索語を入力したことを契機としてフローテンプレートの検索を行う例を述べた。しかしながら、検索の過程においては、所定の処理（利用ノード抽出処理部１０１による利用ノードリスト６１３の作成、類義語算出処理部１０４による単語の類似関係の算出処理による単語の類似関係の作成、類似フロー検索処理部１０３におけるノードの重要度の計算処理によるノード重要度リスト６１６の作成、フロー抽象化処理部１０７による抽象フローリスト６１７の作成、フロー分割処理部１０８による分割フローリスト６１８の作成、フロー類似関係探索処理部１０９におけるフロー類似関係の探索による類似フローテンプレートリスト６１９の類似フローテンプレートＩＤ７９３の登録、フロー類似度算出処理部１１０におけるフローの類似度算出処理による類似フローテンプレートリスト６１９のフロー類似度７９４および検索結果表示判定７９５の登録など）には時間がかかるため、検索結果のユーザ１４０への提示が遅くなってしまう。
【０２０９】
これを改善するため、上述のような時間がかかる処理を事前に行ってその処理結果をフローテンプレートマネージャ１００の記憶装置６１０に保持しておき、検索時に参照することで、検索語の入力から検索結果の提示までにかかる時間を短縮できる。処理結果を保持する場所はフローテンプレートマネージャ１００の記憶装置６１０上だけでなく、ネットワークを介してアクセス可能なデータベースを設け、当該データベースに保持してもよいし、端末２１０の記憶装置６００に保持してもよい。
【０２１０】
本実施の形態では、検索語を用いない処理を事前に行う。より具体的には、適用できる処理としては、利用ノード抽出処理部１０１による利用ノードリスト６１３の作成、類義語算出処理部１０４による単語の類似関係の算出処理による単語の類似関係の作成（ステップＳ１２０１〜ステップＳ１２０５）、類似フロー検索処理部１０３におけるノードの重要度の計算処理によるノード重要度リスト６１６の作成（ステップＳ１５０２）、フロー抽象化処理部１０７による抽象フローリスト６１７の作成、フロー分割処理部１０８による分割フローリスト６１８の作成、フロー類似関係探索処理部１０９におけるフロー類似関係の探索による類似フローテンプレートリスト６１９の類似フローテンプレートＩＤ７９３の登録（ステップＳ１５０５）、フロー類似度算出処理部１１０におけるフローの類似度算出処理による類似フローテンプレートリスト６１９のフロー類似度７９４および検索結果表示判定７９５の登録（ステップＳ１５０６）などが挙げられる。
【０２１１】
例えば、利用ノード抽出処理部１０１による利用ノードリスト６１３の作成は、新しいフローテンプレートがフローテンプレートテーブル１１１に追加されたことを契機に行うことができる。また、既存のフローテンプレートが更新されたことを契機に行ってもよい。また、一日一回、数日に一回、毎週一回、毎月一回などのように、利用ノードリスト６１３の更新頻度を予め定めておき、そのタイミングで利用ノード抽出処理部１０１を実行してもよい。他にも、深夜、休日などのフローテンプレートマネージャ１００のユーザ１４０が少ない時間帯などを利用ノード抽出処理部１０１の実行を許可する時間として定めておき、フローテンプレートテーブル１１１に新しいフローテンプレートが追加されたタイミングまたは更新されたタイミングから一番近い実行許可時間に利用ノードリスト６１３の更新を行うことが考えられる。
【０２１２】
類義語算出処理部１０４による単語の類似関係の算出処理による単語の類似関係の作成、類似フロー検索処理部１０３におけるノードの重要度の計算処理によるノード重要度リスト６１６の作成、フロー抽象化処理部１０７による抽象フローリスト６１７の作成、フロー分割処理部１０８による分割フローリスト６１８の作成、フロー類似関係探索処理部１０９におけるフロー類似関係の探索による類似フローテンプレートリスト６１９の類似フローテンプレートＩＤ７９３の登録、フロー類似度算出処理部１１０におけるフローの類似度算出処理による類似フローテンプレートリスト６１９のフロー類似度７９４および検索結果表示判定７９５の登録は、利用ノードリスト６１３が作成されたことを契機として、検索語に入力を待たず事前に行うことが可能である。
【０２１３】
ただし、フロー抽象化処理部１０７による抽象フローリスト６１７の作成、フロー分割処理部１０８による分割フローリスト６１８の作成を含めた、フロー簡略化処理部１０６は、ノードの重要度の計算処理の結果を使う場合、ノードの重要度の計算処理によるノード重要度リスト６１６の作成のあとに実行しなければならない。なお、フロー分割処理部１０８による分割フローリスト６１８の作成において抽象フローリスト６１７を用いる場合、フロー抽象化処理部１０７による抽象フローリスト６１７の作成のあとにフロー分割処理部１０８による分割フローリスト６１８の作成を行わなくてはならない。同様に、フロー類似関係探索処理部１０９におけるフロー類似関係の探索による類似フローテンプレートリスト６１９の類似フローテンプレートＩＤ７９３の登録は、フロー簡略化処理部１０６による分割フローリスト６１８の作成のあとに、フロー類似度算出処理部１１０におけるフローの類似度算出処理による類似フローテンプレートリスト６１９のフロー類似度７９４および検索結果表示判定７９５の登録は、フロー類似関係探索処理部１０９におけるフロー類似関係の探索による類似フローテンプレートリスト６１９の類似フローテンプレートＩＤ７９３の登録のあとに実行しなければならない。これらの制約が守られていれば、上記の処理は全て事前に行ってもよいし、その途中までを事前に行っておき、残りの処理は検索語の入力を契機として行ってもよい。
【０２１４】
なお、第１の実施の形態では、類似フロー検索処理部１０３がステップＳ１５０５においてフロー類似関係探索処理部１０９を呼び出す前に、ステップＳ１５０４においてテキスト検索処理部１０２の出力結果である表示フローテンプレートリスト６１５からフローテンプレートを１つ選択し、ステップＳ１５０５で選択したフローテンプレートに対する類似フローを探索したあと、ステップＳ１５０６でフロー類似度算出処理部１１０において探索結果の類似フロー間の類似度を算出している。
【０２１５】
しかしながら、テキスト検索処理部１０２が表示フローテンプレートリスト６１５を作成するためにはユーザ１４０が入力した検索語が必要であるため、続くフロー類似関係探索処理部１０９およびフロー類似度算出処理部１１０での処理が事前にできない。
【０２１６】
そこで、事前計算により検索時間の短縮を行う場合には、類似フロー検索処理部１０３のステップＳ１５０４は行わず、全てのフローに対してフロー類似関係探索処理部１０９およびフロー類似度算出処理部１１０での処理を行い、その結果を保持しておくものとする。
【０２１７】
また、上記の処理以外であっても、ユーザ１４０がフローテンプレート一覧画面３００の検索語入力窓３０２に入力する検索語を用いなくても行える処理については、検索語の入力を待たずに事前に処理を実行しておき、その結果を検索時に呼び出す形をとってもよい。
【０２１８】
本実施の形態によれば、時間がかかる所定の処理を事前に行い、処理結果を記憶装置に保持しておき、検索時に参照することで、検索語の入力から検索結果の提示までにかかる時間を短縮することができる。
【０２１９】
（３）第３の実施の形態
第１の実施の形態および第２の実施の形態では、テキストによるフローテンプレートの検索結果と、フローの類似性の検索結果とから得られた、テキスト検索によるフローテンプレートと、テキスト検索によるフローテンプレートのフローに類似したフローを持つフローテンプレートとが全てフローテンプレート一覧画面３００に表示されることを想定していた。しかしながら、これではフローテンプレート一覧画面３００に表示されるフローテンプレートが膨大になってしまい、ユーザ１４０が新しいアプリケーションの参考にするフローテンプレートを見つけることが困難となる可能性がある。
【０２２０】
この問題を解決するために、例えば、フローテンプレート一覧画面３００には、テキストによるフローテンプレートの検索結果を表示し、フローテンプレート３０１をマウスでクリックすると、クリックしたフローテンプレートの情報に加え、図２１のように、類似フローテンプレートの情報を閲覧可能なフローテンプレート情報表示画面２１００が開くようにＧＵＩを設計する。
【０２２１】
このとき、フローテンプレート一覧画面３００におけるフローテンプレートの表示順は、ユーザ１４０が表示オプション選択画面３１０のソート順３１１で選択した順に従うものとする。例えば、ユーザ１４０がおすすめ順を選択した場合には、表示フローテンプレートリスト６１５のスコア７５２が高い順にソートされる。スコア７５２の値はＧＵＩ上でユーザ１４０が参照できてもよいし、できなくてもよい。
【０２２２】
フローテンプレート情報表示画面２１００は、フローテンプレートの情報取得とフローテンプレートのデータのダウンロードの実行のほかに、類似フローテンプレートの情報を閲覧することができる画面の一例である。ユーザ１４０は、フローテンプレート名２１１０、フローテンプレートカテゴリ２１２０等を参照できる。フローテンプレート概要画面２１３０からは、ユーザ１４０は、当該フローテンプレートの概要を参照できる。さらに、説明画面２１４０では、ユーザ１４０は、当該フローテンプレートの内容、開発の背景、目的、適用場面例などの詳細説明を参照でき、また、フロー画像画面２１５０および関連資料２１６０からは、ユーザ１４０は、フロー画像情報の参照、ドキュメント等のコンテンツの取得ができる。また、ユーザ１４０は、類似フロー一覧画面２１７０では、フローテンプレート一覧画面３００で選択したフローテンプレートのフローに類似したフローを持つ類似フローテンプレート２１７１が参照できる。類似フロー表示領域２１７２におけるフローテンプレートの表示順は、ユーザ１４０が表示オプション選択画面３１０のソート順３１１で選択した順に従うものとする。例えば、ユーザ１４０がおすすめ順を選択した場合には、類似フローテンプレートリスト６１９のフロー類似度７９４が高い順にソートされる。フロー類似度７９４の値はＧＵＩ上でユーザ１４０が参照できてもよいし、できなくてもよい。
【０２２３】
なお、ユーザ１４０が類似フローテンプレート２１７１をクリックすると、フローテンプレートテーブル１１１の情報と類似フローテンプレートリスト６１９の情報とを参照して、そのフローテンプレートについてのフローテンプレート情報表示画面２１００が表示される。また、フローテンプレートテーブル１１１の情報のみを参照し、類似フローテンプレート情報を持たないフローテンプレート情報表示画面３２０のようなものが表示されてもよい。
【０２２４】
また、ユーザ１４０は、ダウンロードボタン２１８０をクリックすると、類似フローテンプレートのデータをダウンロードできる。ダウンロードしたデータをビジュアルプログラミング実行環境にデプロイすることにより、アプリケーションを動作させることができる。
【０２２５】
また、上記のほかに、フローテンプレート一覧画面３００上にテキスト情報より検索されたフローテンプレートを表示する領域と、フロー情報より検索された類似フローテンプレートを表示する領域との２つの領域を設けて、テキスト情報より検索されたフローテンプレートをユーザ１４０がクリックすると類似フローテンプレートが表示されてもよいし、その両方でもよい。なお、フローテンプレートおよび類似フローテンプレートの表示順は、ユーザ１４０が表示オプション選択画面３１０のソート順３１１で選択した順に従うものとする。
【０２２６】
本実施の形態によれば、ユーザは、所望のフローテンプレートのデータを容易に取得できるようになる。
【０２２７】
（４）他の実施の形態
なお、上述の実施の形態においては、本発明をテンプレート検索システムに適用するようにした場合について述べたが、本発明はこれに限らず、この他種々のシステム、装置、方法、プログラムに広く適用することができる。
【０２２８】
また、上述の実施の形態において、「記憶装置」は、メモリ部とＰＤＥＶ部の少なくとも一部とのうちの少なくとも１つ（典型的には少なくともメモリ部）である。
【０２２９】
また、上述の実施の形態において、「メモリ部」は、１以上のメモリであり、典型的には主記憶デバイスでよい。メモリ部における少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【０２３０】
また、上述の実施の形態において、「ＰＤＥＶ部」は、１以上のＰＤＥＶであり、典型的には補助記憶デバイスでよい。「ＰＤＥＶ」は、物理的な記憶デバイス（Physical storage DEVice）を意味し、典型的には、不揮発性の記憶デバイス、例えばＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。
【０２３１】
また、上述の実施の形態において、「制御装置」は、１以上のプロセッサである。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサでもよい。少なくとも１つのプロセッサは、シングルコアでもよいしマルチコアでもよい。少なくとも１つのプロセッサは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））といった広義のプロセッサでもよい。
【０２３２】
また、上述の実施の形態において、「プログラム」を主語として処理を説明する場合があるが、プログラムは、制御装置によって実行されることで、定められた処理を、適宜に記憶装置（例えばメモリ）及び／又はインターフェース部（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、制御装置あるいはその制御装置を有する装置が行う処理としてもよい。また、制御装置は、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）またはＡＳＩＣ（Application Specific Integrated Circuit））を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【０２３３】
また、上述の実施の形態において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部または一部が１つのテーブルであってもよい。
【０２３４】
また、上述の実施の形態において、説明の便宜上、ＸＸテーブル、ＸＸリスト、ＸＸファイルを用いて各種のデータを説明したが、データ構造は限定されるものではなく、ＸＸ情報などと表現してもよい。
【０２３５】
また、上記の説明において、各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記憶装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０２３６】
本発明は、例えば、以下の特徴的な構成を有する。
【０２３７】
テンプレート（例えば、フローテンプレート）の情報（例えば、フローテンプレートテーブル１１１、フローテーブル１１２、コンテンツテーブル６１２等）と、上記テンプレートで利用されるノードの情報（例えば、ノードテーブル１２１、ノードカテゴリテーブル６２２、外部サービステーブル６２３）とを対応付けて管理するテンプレート検索システム（例えば、テンプレート検索システム１）であって、上記テンプレート検索システムにより管理されるノードの情報から、入力された検索語の類義語、および／または、上記検索語に係るテンプレート（例えば、検索語の類義語が紐づくテンプレート、検索語が紐づくテンプレートのフローに一致または類似するフローのテンプレート、検索語の類義語が紐づくテンプレートのフローに一致または類似するフローのテンプレート）に含まれるノードの繋がりを示すフローを算出し、上記テンプレート検索システムにより管理されるテンプレートの情報から、算出した類義語が紐づくテンプレート、および／または、算出したフローに対応するフローのテンプレートを特定する処理部（例えば、フローテンプレートマネージャ１００、処理部）と、上記処理部により特定されたテンプレートの情報を出力する出力部（例えば、フローテンプレート出力部１３０、出力部）と、を備えることを特徴とする。
【０２３８】
上記構成によれば、類義語が紐づくテンプレート、および／または、検索語に係るテンプレートのフローに対応するフローのテンプレートが、検索語に対応するテンプレートに類似するテンプレートとして検索される。例えば、ユーザの背景、知識などに差があって、利用する検索語の語句が異なっていたとしても、検索語に対応するテンプレートに類似するテンプレートが検索されるので、ユーザは、目的に沿ったテンプレートを得ることができるようになる。
【０２３９】
上記処理部は、上記テンプレート検索システムにより管理されているテンプレートで利用されるノードを抽出し（例えば、ステップＳ１２０１、ステップＳ１５０１）、抽出したノードの情報を、ノードの情報を管理するノード情報管理部から取得する、ことを特徴とする。
【０２４０】
上記構成によれば、例えば、ノード情報管理部が管理する大量のノードの情報からテンプレートの検索で利用するノードの情報を選択的に取得でき、利用するノードの情報を厳選することが可能となる。
【０２４１】
上記テンプレート検索システムは、テンプレートを説明する単語を含むテキスト情報（例えば、フローテンプレート説明７０４）、および／または、ノードを説明する単語を含むテキスト情報（例えば、ノード説明文８０４、カテゴリ名８１２、外部サービスの説明文）を管理し（例えば、ステップＳ１２０１〜ステップＳ１２０４）、上記処理部は、上記テンプレート検索システムにより管理されるテキスト情報に含まれる単語に対して上記検索語との類似関係を判定して上記検索語の類義語を算出する（例えば、ステップＳ１２０５、ステップＳ１２０６）、ことを特徴とする。
【０２４２】
上記構成によれば、テンプレートのテキスト情報、および／または、ノードのテキスト情報に含まれる単語を対象として、類義語が求められる。例えば、テンプレートの説明文から漏れている単語があったとしても、ノードの説明文からも類義語が求められるので、目的に沿ったテンプレートをユーザが取得することができなくなってしまう機会を低減することができる。
【０２４３】
上記処理部は、上記テンプレート検索システムにより管理されるテンプレートで利用されるノードのうち、重要な処理を行う所定のノード（例えば、ノード重要度リスト６１６の判定７６３が「Ｔｕｒｅ」のノード、使用頻度の低いノード、フロー内で特徴的な処理を行う可能性が高いカテゴリに属するノード、外部サービスの呼び出しを行うノード）を対象として上記検索語の類義語を算出する、ことを特徴とする。
【０２４４】
上記構成によれば、例えば、重要な処理を行わないノードの類義語（不要データ）を排除することで、検索の精度を高めることができるようになる。
【０２４５】
上記処理部は、上記テンプレート検索システムにより管理されるテキスト情報に含まれる単語に対して上記検索語との類似度を算出し、算出した類似度が上位所定数の単語、算出した類似度が閾値を超える単語、または、算出した類似度が上位所定数の単語であって算出した類似度が閾値を超える単語を類義語として算出する（ステップＳ１２０６）、ことを特徴とする。
【０２４６】
上記構成によれば、例えば、検索語に関連性が高い類義語が求められるので、検索の精度をより高めることができるようになる。
【０２４７】
上記処理部は、上記検索語に係るテンプレート（例えば、検索語が紐づくテンプレート、類義語が紐づくテンプレート、検索語および当該検索語の類義語が紐づくテンプレート）のフローと、上記テンプレート検索システムにより管理されるテンプレートのフローとを比較して、上記検索語に係るテンプレートのフローに類似するフローのテンプレートを特定する、ことを特徴とする。
【０２４８】
ここで、テンプレートの説明文、ノードの説明文においては、ユーザの意図によって、単語が省略され得るが、テンプレートのフローは、省略されることはない。よって、上記構成によれば、例えば、説明文があまり登録されていない場合であっても、例えば、検索語に係るテンプレートのフローに類似するフローのテンプレートが検索されるので、ユーザは、目的に沿ったテンプレートを得ることができる。
【０２４９】
上記テンプレート検索システムは、テンプレートのテキスト情報（例えば、フローテンプレート名７０２、フローテンプレート概要７０３、またはフローテンプレート説明７０４など、）を管理し、上記処理部は、上記テンプレート検索システムにより管理されるテキスト情報から上記検索語が含まれるテンプレートを特定し、特定したテンプレートで利用されるノードの繋がりを示すフローと、上記テンプレート検索システムにより管理されるテンプレートのフローとを比較して、特定したテンプレートのフローに類似するフローのテンプレートを特定する（例えば、ステップＳ１４０２、ステップＳ１４０３）、ことを特徴とする。
【０２５０】
上記構成によれば、テンプレートのテキスト情報、および／または、ノードのテキスト情報に含まれる単語を対象として、検索語が紐づくテンプレートが求められる。例えば、テンプレートの説明文から漏れている単語があったとしても、ノードの説明文からも検索語が紐づくテンプレートが求められるので、目的に沿ったテンプレートをユーザが取得することができなくなってしまう機会を低減することができる。
【０２５１】
上記テンプレート検索システムは、テンプレートのテキスト情報（例えば、フローテンプレート名７０２、フローテンプレート概要７０３、またはフローテンプレート説明７０４など、）を管理し、上記処理部は、上記テンプレート検索システムにより管理されるテキスト情報から上記検索語の類義語が含まれるテンプレートを特定し、特定したテンプレートのフローと、上記テンプレート検索システムにより管理されるテンプレートのフローとを比較して、特定したテンプレートのフローに類似するフローのテンプレートを特定する（例えば、ステップＳ１４０２、ステップＳ１４０３）、ことを特徴とする。
【０２５２】
上記構成によれば、テンプレートのテキスト情報、および／または、ノードのテキスト情報に含まれる単語を対象として、類義語が紐づくテンプレートが求められる。例えば、テンプレートの説明文から漏れている単語があったとしても、ノードの説明文からも類義語が紐づくテンプレートが求められるので、目的に沿ったテンプレートをユーザが取得することができなくなってしまう機会を低減することができる。
【０２５３】
上記処理部は、上記テンプレート検索システムにより管理されるテンプレートで利用されるノードのうち、重要な処理を行う所定のノードを抽出してフローを生成し（例えば、ステップＳ１８０１〜ステップＳ１８０８）、生成したフローを用いてフローの比較を行う、ことを特徴とする。
【０２５４】
上記構成によれば、例えば、重要な処理を行わないノードをフローから排除することで、重要な処理を行わないノードによりテンプレートが検索されなくなってしまう事態を回避でき、検索の精度を高めることができるようになる。
【０２５５】
上記処理部は、上記テンプレート検索システムにより管理されるテンプレートで利用されるノードの繋がりを示すフローを、１の入力のノードと１以上の出力のノードとを含むフロー、および／または、１以上の入力のノードと１の出力のノードとを含むフローに分割してフローを生成し（例えば、ステップＳ１９０１〜ステップＳ１９０８）、生成したフローを用いてフローの比較を行う、ことを特徴とする。
【０２５６】
上記構成によれば、フローを分割することで、部分的な検索が可能となる。例えば、ユーザが入力したいデータが決まっている場合、ユーザが得たいデータが決まっている場合などにおいて、入力および／または出力ごとにフローを分割することで、ユーザの目的に沿ったテンプレートをより適切に検索することができる。
【０２５７】
上記処理部は、上記検索語に係るテンプレートで利用されるノードの繋がりを示すフローと、上記テンプレート検索システムにより管理されるテンプレートのフローであって、上記検索語に係るテンプレートで利用されるノードに類似するノードを含むフローとの類似関係を判定し、上記検索語に係るテンプレートのフローに類似するフローのテンプレートを特定する（例えば、ステップＳ１５０５）、ことを特徴とする。
【０２５８】
上記構成によれば、例えば、ノードの類似性を加味してフローが類似するテンプレートを検索できるようになるので、ユーザは、目的に沿ったテンプレートを得ることができるようになる。
【０２５９】
上記処理部は、上記検索語に係るテンプレートのフローと、上記テンプレート検索システムにより管理されるテンプレートのフローとの類似度を算出し（例えば、ステップＳ１５０６）、上記出力部は、上記処理部により算出された類似度に応じてテンプレートの情報を出力する（例えば、ステップＳ１４０４）、ことを特徴とする。
【０２６０】
上記構成によれば、例えば、類似度の高いテンプレート、すなわちユーザの目的に沿ったテンプレートが優先的に出力されるので、ユーザは、所望のテンプレートを容易に得ることができるようになる。
【０２６１】
上記処理部は、上記検索語に係るテンプレートのフローと、上記テンプレート検索システムにより管理されるテンプレートのフローとにおいて、始点のノードと、終点のノードと、上記始点のノードおよび上記終点のノードの間にある中間のノードとの全てが一致する場合、最も高い第１の類似度を設定し、上記始点のノードおよび上記終点のノードが一致する場合、上記第１の類似度より低い第２の類似度を設定し、上記始点のノードまたは上記終点のノードが一致する場合、上記第２の類似度より低い第３の類似度を設定し、上記始点のノードと上記終点のノードとの両方が一致しない場合、上記第３の類似度より低い第４の類似度を設定する（例えば、ステップＳ２００２）、ことを特徴とする。
【０２６２】
ここで、ユーザが入力したいデータが決まっている場合、ユーザが得たいデータが決まっている場合がある。このような場合、上記構成によれば、フローの始点と終点とに着目して類似度が計算されるので、例えば、ユーザは、所望のテンプレートをより容易に得ることができるようになる。
【０２６３】
上記出力部は、上記処理部により特定されたテンプレートの情報を表示装置（例えば、端末２１０の入出力装置５４０）に表示する、ことを特徴とする。
【０２６４】
上記構成によれば、テンプレートの情報が表示されるので、例えば、ユーザは、表示されたテンプレートを確認し、目的に沿ったテンプレートを得ることができるようになる。
【０２６５】
上記処理部は、下記の（Ａ）〜（Ｃ）に示す１以上の設定を行う、ことを特徴とする。
（Ａ）特定したテンプレートのテキスト情報に含まれる類義語の数が多いほど出力の優先順位を高く設定
（Ｂ）上記テキスト情報に含まれる類義語の類似度が高いほど出力の優先順位を高く設定
（Ｃ）上記テキスト情報に含まれる類義語が格納されている項目が所定の項目であるときに出力の優先順位を高く設定
【０２６６】
上記構成によれば、例えば、類義語との関係性が強いテンプレート、すなわちユーザの目的に沿ったテンプレートが優先的に出力されるので、ユーザは、目的に沿ったテンプレートを容易に得ることができるようになる。
【０２６７】
また上述した構成については、本発明の要旨を超えない範囲において、適宜に、変更したり、組み替えたり、組み合わせたり、省略したりしてもよい。
【符号の説明】
【０２６８】
１……テンプレート検索システム、１００……フローテンプレートマネージャ、１３０……フローテンプレート出力部。
【図１】
2020181516.tif 000003
【図２】
2020181516.tif 000004
【図３Ａ】
2020181516.tif 000005
【図３Ｂ】
2020181516.tif 000006
【図３Ｃ】
2020181516.tif 000007
【図４】
2020181516.tif 000008
【図５】
2020181516.tif 000009
【図６Ａ】
2020181516.tif 000010
【図６Ｂ】
2020181516.tif 000011
【図６Ｃ】
2020181516.tif 000012
【図６Ｄ】
2020181516.tif 000013
【図７Ａ】
2020181516.tif 000014
【図７Ｂ】
2020181516.tif 000015
【図７Ｃ】
2020181516.tif 000016
【図７Ｄ】
2020181516.tif 000017
【図７Ｅ】
2020181516.tif 000018
【図７Ｆ】
2020181516.tif 000019
【図７Ｇ】
2020181516.tif 000020
【図７Ｈ】
2020181516.tif 000021
【図７Ｉ】
2020181516.tif 000022
【図７Ｊ】
2020181516.tif 000023
【図８Ａ】
2020181516.tif 000024
【図８Ｂ】
2020181516.tif 000025
【図８Ｃ】
2020181516.tif 000026
【図９】
2020181516.tif 000027
【図１０】
2020181516.tif 000028
【図１１】
2020181516.tif 000029
【図１２】
2020181516.tif 000030
【図１３】
2020181516.tif 000031
【図１４】
2020181516.tif 000032
【図１５】
2020181516.tif 000033
【図１６】
2020181516.tif 000034
【図１７Ａ】
2020181516.tif 000035
【図１７Ｂ】
2020181516.tif 000036
【図１７Ｃ】
2020181516.tif 000037
【図１７Ｄ】
2020181516.tif 000038
【図１８】
2020181516.tif 000039
【図１９】
2020181516.tif 000040
【図２０】
2020181516.tif 000041
【図２１】
2020181516.tif 000042