(57)【要約】      （修正有）【課題】ビジュアルプログラミングツールを用いたアプリケーション開発において、外部サービス利用準備に関して開発者の負担を軽減する。【解決手段】システムは、フローデータがフローテンプレートマネージャ３００からフローエディタ４１にダウンロードされる場合に、呼出しノードに対応した外部サービスをデプロイすることの第１命令を受信し、外部サービスに対応したサービスデプロイメントマネージャ６００Ａに、第１命令から識別される外部サービスをデプロイすることの第２命令を送信する。サービスデプロイメントマネージャは、第２命令から識別される外部サービスをサービス実行基盤７００Ｂにデプロイし、呼出し先エンドポイントが関連付けられた応答を返す。システムは、呼出しノードのプロパティにフローテンプレートマネージャにより設定される呼出し先エンドポイントが関連付けられた第１応答を第１命令の送信元に返す。【選択図】図１７
2020135154.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションソフトウェアの開発を支援するシステムであって、
呼出しノードを含んだ複数のノードと当該複数のノードにおける各ノード間の結線とで表現されたアプリケーションソフトウェアフローのフローテンプレートが示す当該アプリケーションソフトウェアフローのフローデータがフローテンプレートマネージャからビジュアルプログラミングツールのフローエディタにダウンロードされる場合に、前記呼出しノードに対応した外部サービスをデプロイすることの命令である第１のデプロイメント命令を受信する命令受信部と、
前記複数のノードの各々には、それぞれプロパティ項目とプロパティ値とを含んだ一つ又は複数のプロパティ要素を有するプロパティが関連付けられており、
前記呼出しノードのプロパティでは、呼出し先エンドポイントがプロパティ値として未決定であり、
前記第１のデプロイメント命令に従い、前記外部サービスに対応したサイトに関連付けられているサービスデプロイメントマネージャに、当該第１のデプロイメント命令から識別される前記外部サービスをデプロイすることの命令である第２のデプロイメント命令を送信する命令送信部と、
前記サービスデプロイメントマネージャは、前記第２のデプロイメント命令から識別される前記外部サービスを前記サイトにおけるサービス実行基盤にデプロイし、前記外部サービスに対応した呼出し先エンドポイントが関連付けられた応答である第２のデプロイメント応答を前記第２のデプロイメント命令の送信元に返すようになっており、
前記第２のデプロイメント応答から得られ前記呼出しノードのプロパティに前記フローテンプレートマネージャにより設定される呼出し先エンドポイントが関連付けられた応答である第１のデプロイメント応答を前記第１のデプロイメント命令の送信元に返す応答送信部と
を有するシステム。
【請求項２】
前記受信された第１のデプロイメント命令には、前記外部サービスの外部サービスＩＤと、前記外部サービスのデプロイメント先とされるサイトのサイトＩＤとが関連付けられている、
請求項１に記載のシステム。
【請求項３】
前記第２のデプロイメント命令には、前記サイトに対応し前記第１のデプロイメント命令から特定された外部サービスＩＤが関連付けられる、
請求項２に記載のシステム。
【請求項４】
前記サービスデプロイメントマネージャは、前記サイトのサイトＩＤと、当該サイトＩＤに対応した外部サービスＩＤとに関連付けられている、
請求項２に記載のシステム。
【請求項５】
前記受信された第１のデプロイメント命令に、前記外部サービスの呼出し制限に関する引数である呼出し制限引数が関連付けられている場合、
前記第２のデプロイメント命令は、前記外部サービスの他に前記外部サービスのプロキシをデプロイすることの命令であり、
前記第２のデプロイメント命令には、前記呼出し制限引数が関連付けられ、
前記第１のデプロイメント応答には、前記呼出しノードのプロパティに設定される呼出し先エンドポイントとして、前記プロキシのエンドポイントが関連付けられ、且つ、前記呼出しノードのプロパティに設定されるプロパティ値として、前記プロキシの認証情報が関連付けられる、
請求項１に記載のシステム。
【請求項６】
前記受信された第１のデプロイメント命令に、前記アプリケーションソフトウェアフローのユーザが所属するグループのグループＩＤが関連付けられている場合、
前記第２のデプロイメント命令には、前記グループＩＤが関連付けられ、
前記第２のデプロイメント命令を受信したサービスデプロイメントマネージャにより前記グループＩＤに対応した空間に前記外部サービスがデプロイされる、
請求項１に記載のシステム。
【請求項７】
前記サイトは、前記ビジュアルプログラミングツールのフロー実行基盤が存在するサイトであるローカルサイトと、当該ローカルサイト以外のいずれかのサイトであるリモートサイトとのうちの一方である、
請求項１に記載のシステム。
【請求項８】
前記命令受信部が、デプロイされた前記外部サービスである外部インスタンスをアンデプロイすることの命令である第１のアンデプロイメント命令を受信し、
前記命令送信部が、前記第１のアンデプロイメント命令に従い、前記外部インスタンスが存在するサイトに関連付けられているサービスデプロイメントマネージャに、当該第１のデプロイメント命令から識別される外部インスタンスをアンデプロイすることの命令である第２のアンデプロイメント命令を送信し、
当該サービスデプロイメントマネージャは、前記第２のアンデプロイメント命令から識別される外部インスタンスを当該サイトにおけるサービス実行基盤からアンデプロイし、当該外部インスタンスのアンデプロイメントの完了を示す応答である第２のアンデプロイメント応答を前記２のアンデプロイメント命令の送信元に返すようになっており、
前記応答送信部が、前記第２のアンデプロイメント応答に基づく応答であり前記外部インスタンスに対応した呼出しノードを当該呼出しノードの本体を削除すること無しに前記アプリケーションソフトウェアフローから前記フローテンプレートマネージャにより削除するための応答である第１のアンデプロイメント応答を前記第１のアンデプロイメント命令の送信元に返す、
請求項１に記載のシステム。
【請求項９】
前記受信された第１のデプロイメント命令に関連付けられている外部サービスについての第２のデプロイメント命令に従い、当該外部サービスの他に当該外部サービスのプロキシもデプロイされる、
請求項１に記載のシステム。
【請求項１０】
前記ビジュアルプログラミングツールのフロー実行基盤が存在するサイトであるローカルサイトと、当該ローカルサイト以外のいずれかのサイトであるリモートサイトとがあり、
前記外部サービスのデプロイメント先が前記リモートサイトの場合、
前記命令送信部が、前記リモートサイトに対応したサービスデプロイメントマネージャに、当該外部サービスと当該外部サービスの第１のプロキシとをデプロイすることの第２のデプロイメント命令を送信し、且つ、前記ローカルサイトに対応したサービスデプロイメントマネージャに、前記第１のプロキシと通信する第２のプロキシをデプロイすることの第２のデプロイメント命令を送信し、
前記第１のデプロイメント応答には、当該外部サービスに対応した呼出しノードに関連付けられる呼出し先エンドポイントとして、前記第２のプロキシのエンドポイントが関連付けられる、
請求項９に記載のシステム。
【請求項１１】
追加された外部サービスに対応した呼出しノードの追加を前記ビジュアルプログラミングツールに命令するノード追加部、
を更に備える請求項１に記載のシステム。
【請求項１２】
アプリケーションソフトウェアの開発を支援する方法であって、
呼出しノードを含んだ複数のノードと当該複数のノードにおける各ノード間の結線とで表現されたアプリケーションソフトウェアフローのフローテンプレートが示す当該アプリケーションソフトウェアフローのフローデータがフローテンプレートマネージャからビジュアルプログラミングツールのフローエディタにダウンロードされる場合に、前記呼出しノードに対応した外部サービスをデプロイすることの命令である第１のデプロイメント命令を受信し、
前記複数のノードの各々には、それぞれプロパティ項目とプロパティ値とを含んだ一つ又は複数のプロパティ要素を有するプロパティが関連付けられており、
前記呼出しノードのプロパティでは、呼出し先エンドポイントがプロパティ値として未決定であり、
前記第１のデプロイメント命令に従い、前記外部サービスに対応したサイトに関連付けられているサービスデプロイメントマネージャに、当該第１のデプロイメント命令から識別される前記外部サービスをデプロイすることの命令である第２のデプロイメント命令を送信し、
前記サイトに関連付けられているサービスデプロイメントマネージャは、前記第２のデプロイメント命令から識別される前記外部サービスを前記サイトにおけるサービス実行基盤にデプロイし、前記外部サービスに対応した呼出し先エンドポイントが関連付けられた応答である第２のデプロイメント応答を当該第２のデプロイメント命令の送信元に返すようになっており、
前記第２のデプロイメント応答から得られ前記呼出しノードのプロパティに前記フローテンプレートマネージャにより設定される呼出し先エンドポイントが関連付けられた応答である第１のデプロイメント応答を前記第１のデプロイメント命令の送信元に返す、
方法。
【請求項１３】
呼出しノードを含んだ複数のノードと当該複数のノードにおける各ノード間の結線とで表現されたアプリケーションソフトウェアフローのフローテンプレートが示す当該アプリケーションソフトウェアフローのフローデータがフローテンプレートマネージャからビジュアルプログラミングツールのフローエディタにダウンロードされる場合に、前記呼出しノードに対応した外部サービスをデプロイすることの命令である第１のデプロイメント命令を受信し、
前記複数のノードの各々には、それぞれプロパティ項目とプロパティ値とを含んだ一つ又は複数のプロパティ要素を有するプロパティが関連付けられており、
前記呼出しノードのプロパティでは、呼出し先エンドポイントがプロパティ値として未決定であり、
前記第１のデプロイメント命令に従い、前記外部サービスに対応したサイトに関連付けられているサービスデプロイメントマネージャに、当該第１のデプロイメント命令から識別される前記外部サービスをデプロイすることの命令である第２のデプロイメント命令を送信し、
前記サイトに関連付けられているサービスデプロイメントマネージャは、前記第２のデプロイメント命令から識別される前記外部サービスを前記サイトにおけるサービス実行基盤にデプロイし、前記外部サービスに対応した呼出し先エンドポイントが関連付けられた応答である第２のデプロイメント応答を当該第２のデプロイメント命令の送信元に返すようになっており、
前記第２のデプロイメント応答から得られ前記呼出しノードのプロパティに前記フローテンプレートマネージャにより設定される呼出し先エンドポイントが関連付けられた応答である第１のデプロイメント応答を前記第１のデプロイメント命令の送信元に返す、
ことを計算機に実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、アプリケーションソフトウェアの開発を支援する技術に関する。
【背景技術】
【０００２】
プログラミングツールとしては、ソースコードを記述することなく、モデル図を記述することによりアプリケーションソフトウェアを開発できるビジュアルプログラミングツールがある。その一例としては、Ｎｏｄｅ−ＲＥＤ（https://nodered.org/）が挙げられる。ビジュアルプログラミングツールを用いたアプリケーションソフトウェア開発では、処理が表現されたノードに対して必要に応じて用途や環境その他状況に対応した情報が当該ノードのプロパティに設定され、複数のノードとノード間の関係（例えば処理の流れ）を示す線とからなるフローが作成される。プロパティは、それぞれプロパティ項目とプロパティ値とを含んだ一つ又は複数のプロパティ要素を含む。プロパティ値の例としては情報の取得先（エンドポイント）などであり、ノード間の関係の例としてはデータの流れ、である。アプリケーションソフトウェアの開発者（以下、「開発者」）は、こうしたビジュアルプログラミングツールを用いることで、ソフトウェア開発の知識が十分になくとも直感的に意図した処理を行うアプリケーションソフトウェアを開発することができる。なお、ビジュアルプログラミングツールは、「モデル開発環境」と呼ばれてもよい。ソフトウェアの構成要素や処理単位がノードであり、ノード同士の結線は「エッジ」と呼ばれてもよい。ノードとエッジは有向グラフにおける用語であり、Ｎｏｄｅ−ＲＥＤにおけるフローダイアグラムも有向グラフとして捉えることができる。本明細書において、フローダイアグラムとブロックダイアグラムと有向グラフは同義とし、フローダイアグラムは単に「フロー」と呼ぶことができ、「フロー」と「グラフ」は同義とできる。
【０００３】
また、アプリケーションソフトウェア開発の分野では、しばしば事前に用意されたアプリケーションソフトウェアのテンプレートを利用することで開発期間を短縮することが行われる。アプリケーションソフトウェアの開発者はテンプレートの一覧から、目的に近いテンプレートを取得し、取得したテンプレートのうちの必要な部分のみを変更することによって開発期間を短縮し、効率的にアプリケーションソフトウェアを開発することができる。
【０００４】
ビジュアルプログラミングツールでのフロー開発においても同様の方法を適用可能である。開発者はフローのテンプレートを取得し、変更を加えることで、効率的にアプリケーション開発を行うことが期待できる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】ＵＳ２０１７／００６４０３８Ａ１
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ビジュアルプログラミングツールを用いたアプリケーション開発において、開発者はテンプレートを用いることによって、ノードの配置やノード間の配線をゼロから行う必要がなくなり、アプリケーションを効率的に開発することが期待できる。
【０００７】
一方で、ビジュアルプログラミングツールのフロー実行基盤外の外部サービスのＡＰＩ（Application Programming Interface）を呼びその外部サービスの処理を実行するノードである呼出しノードを利用する場合、開発者は、その外部サービスのデプロイ、外部サービスＡＰＩのＵＲＬ等のアクセス情報（エンドポイント）やＡＰＩ実行のための認証の設定、エンドポイントや認証トークンのノードプロパティへの登録等、事前に準備が必要となる。この事前準備作業のため、開発者の作業項目が多くなり、効率的に開発を進められなくなる。利用する外部サービスの数が多くなるほど、開発者の事前準備作業負荷が増大する。
【０００８】
特許文献１では、あらかじめデプロイされた外部サービスのＡＰＩ設定情報をアプリケーションに動的に反映する技術が開示されている。
【０００９】
つまり、特許文献１では、事前に外部サービスのデプロイが必要となる。このため、ビジュアルプログラミングツールの呼出しノードがどの外部サービスと対応するのかを事前に開発者が把握しておかなくてはならない。
【課題を解決するための手段】
【００１０】
フローテンプレートマネージャとサービスデプロイメントマネージャとの連携を実現することでアプリケーションソフトウェアの開発を支援するシステム（以下、支援システム）が構築される。具体的には、フローテンプレートが示すフローのフローデータがフローテンプレートマネージャからビジュアルプログラミングツールのフローエディタにダウンロードされる場合に、支援システムが、当該フローにおける呼出しノードに対応した外部サービスをデプロイすることの命令である第１命令を受信する。フローテンプレートにおける呼出しノードのプロパティでは、呼出し先エンドポイントがプロパティ値として未決定である。支援システムは、第１命令に従い、上記外部サービスに対応したサイトに関連付けられているサービスデプロイメントマネージャに、当該第１命令から識別される外部サービスをデプロイすることの命令である第２命令を送信する。サービスデプロイメントマネージャは、第２命令から識別される外部サービスを当該サイトにおけるサービス実行基盤にデプロイし、当該外部サービスに対応した呼出し先エンドポイントが関連付けられた応答である第２応答を第２命令の送信元に返すようになっている。支援システムは、第２応答から得られ呼出しノードのプロパティにフローテンプレートマネージャにより設定される呼出し先エンドポイントが関連付けられた応答である第１応答を第１命令の送信元に返す。
【発明の効果】
【００１１】
これにより、フローエディタにダウンロードされたフローにおける呼出しノードのプロパティには、当該呼出しノードの呼出し先エンドポイントが設定済みである。このため、外部サービス利用準備に関して開発者の負担が軽減する。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態におけるシステム構成の一例を示すブロック図である。
【図２】フローエディタＧＵＩの一例を示す図である。
【図３Ａ】フローテンプレートマネージャＧＵＩの一例を示す図である。
【図３Ｂ】フローテンプレートマネージャＧＵＩの一例を示す図である。
【図３Ｃ】フローテンプレートマネージャＧＵＩの一例を示す図である。
【図３Ｄ】フローテンプレートマネージャＧＵＩの一例を示す図である。
【図３Ｅ】フローテンプレートマネージャＧＵＩの一例を示す図である。
【図４】計算機の一例を示すブロック図である。
【図５Ａ】ユーザ端末のメモリ内のプログラムの一例を示す図である。
【図５Ｂ】ビジュアルプログラミングツールのメモリ内のプログラムの一例を示す図である。
【図５Ｃ】フローテンプレートマネージャのメモリ内のプログラムの一例を示す図である。
【図５Ｄ】フローリポジトリマネージャのメモリ内のプログラムの一例を示す図である。
【図６Ａ】外部サービスマネージャのメモリ内のプログラム及びデータの一例を示す図である。
【図６Ｂ】サービスデプロイメントマネージャのメモリ内のプログラム及びデータの一例を示す図である。
【図６Ｃ】サービス実行基盤のメモリ内のプログラム及びデータの一例を示す図である。
【図７】フローテンプレートマネージャが保持するテーブルの構成の一例を示す図である。
【図８】外部サービスマネージャが保持するテーブルの構成の一例を示す図である。
【図９Ａ】ローカルサイトに対応したサービスデプロイメントマネージャが保持するテーブルの構成の一例を示す図である。
【図９Ｂ】リモートサイトに対応したサービスデプロイメントマネージャが保持するテーブルの構成の一例を示す図である。
【図１０】テンプレート管理プログラムが行う外部サービスデプロイメント処理を示す図である。
【図１１】外部サービス管理プログラムが行う外部サービスデプロイメント処理を示す図である。
【図１２】サービスデプロイメントプログラムが行う外部サービスデプロイメント処理を示す図である。
【図１３】テンプレート管理プログラムが行うノード追加処理を示す図である。
【図１４】テンプレート管理プログラムが行う外部サービスアンデプロイメント処理を示す図である。
【図１５】外部サービス管理プログラムが行う外部サービスアンデプロイメント処理を示す図である。
【図１６】サービスデプロイメントプログラムが行う外部サービスアンデプロイメント処理を示す図である。
【図１７】実施形態の概要を示す図である。
【発明を実施するための形態】
【００１３】
以下の説明では、「インターフェース装置」は、一つ以上のインターフェースデバイスでよい。当該一つ以上のインターフェースデバイスは、下記のうちの少なくとも一つでよい。
・一つ以上のＩ／Ｏ（Input/Output）インターフェースデバイス。Ｉ／Ｏ（Input/Output）インターフェースデバイスは、Ｉ／Ｏデバイスと遠隔の表示用計算機とのうちの少なくとも一つに対するインターフェースデバイスである。表示用計算機に対するＩ／Ｏインターフェースデバイスは、通信インターフェースデバイスでよい。少なくとも一つのＩ／Ｏデバイスは、ユーザインターフェースデバイス、例えば、キーボード及びポインティングデバイスのような入力デバイスと、表示デバイスのような出力デバイスとのうちのいずれでもよい。
・一つ以上の通信インターフェースデバイス。一つ以上の通信インターフェースデバイスは、一つ以上の同種の通信インターフェースデバイス（例えば一つ以上のＮＩＣ（Network Interface Card））であってもよいし二つ以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１４】
また、以下の説明では、「メモリ」は、一つ以上のメモリデバイスであり、典型的には主記憶デバイスでよい。メモリにおける少なくとも一つのメモリデバイスは、揮発性メモリデバイスであってもよいし不揮発性メモリデバイスであってもよい。
【００１５】
また、以下の説明では、「永続記憶装置」は、一つ以上の永続記憶デバイスである。永続記憶デバイスは、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）であり、具体的には、例えば、ＨＤＤ（Hard Disk Drive）又はＳＳＤ（Solid State Drive）である。
【００１６】
また、以下の説明では、「記憶装置」は、メモリと永続記憶装置の少なくともメモリでよい。
【００１７】
また、以下の説明では、「プロセッサ」は、一つ以上のプロセッサデバイスである。少なくとも一つのプロセッサデバイスは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセッサデバイスであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセッサデバイスでもよい。少なくとも一つのプロセッサデバイスは、シングルコアでもよいしマルチコアでもよい。少なくとも一つのプロセッサデバイスは、プロセッサコアでもよい。少なくとも一つのプロセッサデバイスは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））といった広義のプロセッサデバイスでもよい。
【００１８】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて、入力に対して出力が得られる情報を説明することがあるが、当該情報は、どのような構造のデータでもよいし、入力に対する出力を発生するニューラルネットワークのような学習モデルでもよい。従って、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、一つのテーブルは、二つ以上のテーブルに分割されてもよいし、二つ以上のテーブルの全部又は一部が一つのテーブルであってもよい。
【００１９】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶装置及び／又はインターフェース装置等を用いながら行うため、処理の主語が、プロセッサ（或いは、そのプロセッサを有するコントローラのようなデバイス）とされてもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な（例えば非一時的な）記録媒体であってもよい。また、以下の説明において、二つ以上のプログラムが一つのプログラムとして実現されてもよいし、一つのプログラムが二つ以上のプログラムとして実現されてもよい。
【００２０】
また、以下の説明では、「ｋｋｋ部」の表現にて機能を説明することがあるが、機能は、一つ以上のコンピュータプログラムがプロセッサによって実行されることで実現されてもよいし、一つ以上のハードウェア回路（例えばＦＰＧＡ又はＡＳＩＣ）によって実現されてもよい。プログラムがプロセッサによって実行されることで機能が実現される場合、定められた処理が、適宜に記憶装置及び／又はインターフェース装置等を用いながら行われるため、機能はプロセッサの少なくとも一部とされてもよい。機能を主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理としてもよい。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。各機能の説明は一例であり、複数の機能が一つの機能にまとめられたり、一つの機能が複数の機能に分割されたりしてもよい。
【００２１】
また、以下の説明では、「計算機システム」は、一つ以上の物理的な計算機を含んだシステムである。物理的な計算機は、汎用計算機でも専用計算機でもよい。
【００２２】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通部分を使用し、同種の要素を区別する場合は、参照符号を使用することがある。例えば、サービス実行基盤を区別しない場合には、「サービス実行基盤７００」と言い、サービス実行基盤を区別する場合には、「サービス実行基盤７００Ａ」、「サービス実行基盤７００Ｂ」のように言うことがある。
【００２３】
また、以下の説明では、「外部サービス」とは、ビジュアルプログラミングツール（フロー実行基盤）の外部の実行基盤で実行されるサービス（例えば、ビジュアルプログラミングツール（フロー実行基盤）ではサポートされていないサービス）である。以下、図では、外部サービスは「ＥｘＳｖｃ」と略記されることがある。
【００２４】
以下、本発明の一実施形態について添付図面を用いて説明する。
【００２５】
＜概要の説明＞
【００２６】
図１７は、一実施形態の概要を示す図である。
【００２７】
ビジュアルプログラミングツール４０のフロー実行基盤２００が存在するサイトであるローカルサイト８０Ｌがある。ローカルサイト８０Ｌ以外のいずれかのサイトであるリモートサイト８０Ｒがある。サイトは一つでもよいが、本実施形態では、このように少なくとも二つのサイトがある。
【００２８】
ローカルサイト８０Ｌに、ビジュアルプログラミングツール４０、フローリポジトリマネージャ４００、フローテンプレートマネージャ３００、サービスデプロイメントマネージャ６００Ａ、サービス実行基盤７００Ａ、及び、外部サービスマネージャ５００が存在する。リモートサイト８０Ｒに、サービスデプロイメントマネージャ６００Ｂ及びサービス実行基盤７００Ｂが存在する。サイト８０に存在する上述の各要素は、計算機システムでもよいし、計算機システムにより実現される機能でもよい。ユーザ端末１００が、ビジュアルプログラミングツール４０及びフローテンプレートマネージャ３００にアクセスできる。なお、ユーザ端末１００は、ユーザ（例えば開発者）が使用する情報処理端末（典型的には、パーソナルコンピュータのような計算機）である。ユーザ端末１００は、例えば、ウェブブラウザ（ブラウザの一例）を実行する。
【００２９】
ビジュアルプログラミングツール４０は、フローエディタ４１（フロー開発基盤）とフロー実行基盤２００とを有する。フローエディタ４１は、ユーザ端末１００が実行するウェブブラウザに、フローの編集をユーザから受け付けるフローエディタＧＵＩ（Graphical User Interface）２０１を提供する。本実施形態において、「フロー」は、アプリケーションソフトウェアのフローであり、複数のノードと当該複数のノードにおける各ノード間の結線とで表現される。フロー実行基盤２００は、当該複数のノードの実行基盤である。なお、複数のノードが、外部サービスに対応した呼出しノードを含んでいる場合、フロー実行基盤２００は、当該呼出しノードに関連付けられている外部サービス７０１（又はそのプロキシ７０２）を呼び出す。図１に例示のフロー２０は、呼出しノードＡ及びＢと、フロー実行基盤２００上で実行されるサービス（処理モジュール）を表現したノードＣとがある。
【００３０】
フローリポジトリマネージャ４００は、フローを示すフローデータ（例えば、ソースコードで表現されたデータ）を格納する。
【００３１】
フローテンプレートマネージャ３００は、一つ以上（典型的には複数）のフローテンプレートを管理する。フローテンプレートマネージャ３００は、ユーザ端末１００が実行するウェブブラウザに、フローテンプレートのリストを表示し当該リストからユーザ所望のフローテンプレートの選択を受け付けるテンプレートマネージャＧＵＩ３０１を提供する。
【００３２】
少なくとも一つのサービスデプロイメントマネージャ６００が、例えばサイト８０毎に存在する。サービスデプロイメントマネージャ６００は、外部サービス７０１及びそれのプロキシ７０２を、当該マネージャ６００に対応したサイト８０（具体的には、当該サイト８０のサービス実行基盤７００）にデプロイする。
【００３３】
サービス実行基盤７００は、当該基盤７００にデプロイされた外部サービス７０１やそれのプロキシ７０２である外部インスタンスやそれのプロキシインスタンスを実行する。
【００３４】
外部サービスマネージャ５００は、命令受信部５１、命令送信部５２、応答受信部５３、応答送信部５４及びノード追加部５５を有する。
【００３５】
テンプレートマネージャＧＵＩ３０１を介してフローテンプレートが選択された場合、当該選択されたフローテンプレートが示すフロー２０がフローテンプレートマネージャ３００からビジュアルプログラミングツール４０のフローエディタ４１にダウンロードされるようになっている。各ノードには、それぞれプロパティ項目とプロパティ値とを含んだ一つ又は複数のプロパティ要素を有するプロパティが関連付けられているが、フローテンプレートが示すフロー２０における呼出しノードＡ及びＢの各々について、当該呼出しノードに関連付けられるプロパティでは、当該呼出しノードの呼出し先のエンドポイントがプロパティ値として未決定である。このようなダウンロードが行われる場合に、外部サービスマネージャ５００が、フローテンプレートマネージャ３００とサービスデプロイメントマネージャ６００との連携を実現することで、アプリケーションソフトウェアの開発支援を実現、具体的には、フローエディタ４１にダウンロードされたフロー２０における呼出しノードＡ及びＢの各々のプロパティに呼出し先エンドポイントが設定済みとなっていることを実現する。より具体的には、以下の通りである。
【００３６】
すなわち、上述のダウンロードが行われる場合に、命令受信部５１が、フロー２０に含まれる呼出しノードＡ及びＢに対応した外部サービス７０１Ａ及び７０１Ｂをデプロイすることの一つ以上の命令をフローテンプレートマネージャ３００から受信する。一つ以上の命令は、一つ又は複数の呼出しノードにそれぞれ対応した一つ又は複数の命令であってもよいし、一つ又は複数の呼出しノードに対応した一つの命令でもよい。当該「一つ以上の命令」の各々が、第１のデプロイメント命令の一例である。本実施形態では、呼出しノード毎に第１のデプロイメント命令がある。
【００３７】
第１のデプロイメント命令には、外部サービス７０１の外部サービスＩＤと、当該外部サービス７０１のデプロイメント先とされるサイト８０のサイトＩＤとが関連付けられている。更に、本実施形態では、第１のデプロイメント命令には、外部サービス７０１について、ユーザのユーザＩＤ、当該ユーザが所属するグループ（例えば開発チーム）のグループＩＤ（ネームスペース）、及び、当該外部サービス７０１又はそれのプロキシのＡＰＩ（エンドポイント）の呼出し回数の制限を示すＡＰＩ呼出し回数制限（外部サービスの呼出し制限に関する引数である制限引数の一例）、のうちの少なくとも一つが関連付けられていることがある（ＡＰＩは、Application Programming Interfaceの略）。外部サービス７０１のＡＰＩ呼出し制限回数は、外部サービス７０１について用意されている一つ以上のプランのうちの指定されたプランに依存する。
【００３８】
命令送信部５２が、上述の第１のデプロイメント命令に従い、外部サービス７０１に対応したサイト８０に関連付けられているサービスデプロイメントマネージャ６００に、当該第１のデプロイメント命令から識別される外部サービス７０１をデプロイすることの命令である第２のデプロイメント命令を送信する。当該第２のデプロイメント命令には、当該サイト８０に対応し第１のデプロイメント命令から特定された外部サービスＩＤが関連付けられる。このような第２のデプロイメント命令を受けたサービスデプロイメントマネージャ６００は、当該第２のデプロイメント命令から識別される外部サービス７０１を当該サイト８０におけるサービス実行基盤７００にデプロイし、当該外部サービス７０１に対応した呼出し先エンドポイントが関連付けられた応答である第２のデプロイメント応答を当該第２のデプロイメント命令の送信元（ここでは外部サービスマネージャ５００）に返す。応答受信部５３が、サービスデプロイメントマネージャ６００からそのような第２のデプロイメント応答を受信する。「外部サービス７０１に対応した呼出し先エンドポイント」とは、当該外部サービス７０１のエンドポイント、及び、当該外部サービス７０１のプロキシのエンドポイントのうちの少なくとも一つである。
【００３９】
応答送信部５４が、サービスデプロイメントマネージャ６００からの第２のデプロイメント応答から得られ呼出しノードのプロパティにフローテンプレートマネージャ３００により設定される呼出し先エンドポイントが関連付けられた応答である第１のデプロイメント応答をフローテンプレートマネージャ３００（第１のデプロイメント命令の送信元の一例）に返す。これにより、フローテンプレートマネージャ３００が、当該第１のデプロイメント応答から、呼出しノードに対応した外部サービス７０１に関する呼出し先エンドポイントを特定し、当該呼出し先エンドポイントを、当該呼出しノードのプロパティに設定する。当該呼出し先エンドポイントが呼出しノードのプロパティに設定済のフロー２０が、フローエディタ４１にダウンロードされる。
【００４０】
なお、本実施形態では、外部サービス７０１の第２のデプロイメント命令は、当該外部サービス７０１の他に当該外部サービス７０１のプロキシ７０２をデプロイすることの命令である。
【００４１】
例えば、サービスデプロイメントマネージャ６００Ａは、外部サービス７０１Ａの第２のデプロイメント命令に応答して、当該外部サービス７０１Ａの他に、当該外部サービスのプロキシ７０２Ａも、例えばサービス実行基盤７００Ａにデプロイする。この場合、第２のデプロイメント命令に対する第２のデプロイメント応答には、プロキシ７０２Ａの呼出し先エンドポイントが関連付けられ、その結果、外部サービス７０１Ａに対応した呼出しノード７０１Ａのプロパティには、プロキシ７０２Ａの呼出し先エンドポイントが設定される。
【００４２】
また、例えば、デプロイメント先がリモートサイト８０Ｒである外部サービス７０１Ｂについては、命令送信部５２が、リモートサイト８０Ｒに対応したサービスデプロイメントマネージャ６００Ｂに、外部サービス７０１Ｂとそれのプロキシ７０２Ｂ１とをデプロイすることの第２のデプロイメント命令を送信し、且つ、ローカルサイト８０Ａに対応したサービスデプロイメントマネージャ６００Ａに、プロキシ７０２Ｂ１と通信するプロキシ７０２Ｂ２（外部サービス７０１Ｂのプロキシ）をデプロイすることの第２のデプロイメント命令を送信する。これにより、サービスデプロイメントマネージャ６００Ｂによって、外部サービス７０１Ｂとそれのプロキシ７０２Ｂ１がサービス実行基盤７００Ｂにデプロイされる。また、サービスデプロイメントマネージャ６００Ａによって、プロキシ７０２Ｂ１と通信するプロキシ７０２Ｂ２が、サービス実行基盤７００Ａにデプロイされる。この場合、第１のデプロイメント応答には、外部サービス７０１Ｂに対応した呼出しノードＢに関連付けられる呼出し先エンドポイントとして、プロキシ７０２Ｂ２のエンドポイントが関連付けられる。
【００４３】
また、外部サービス７０１についてプロキシ７０２がデプロイされるケースは、第１のデプロイメント命令に、当該外部サービス７０１についてＡＰＩ呼出し制限回数が関連付けられているケースでよい。この場合、例えば、外部サービス７０１Ａの第２のデプロイメント命令には、外部サービス７０１Ａに対応したＡＰＩ呼出し制限回数が関連付けられる。この第２のデプロイメント命令を受信したサービスデプロイメントマネージャ６００Ａにより、当該ＡＰＩ呼出し制限回数を基にプロキシ７０２Ａに対応したＡＰＩ認証情報が得られ、デプロイされるプロキシ７０２Ａに当該ＡＰＩ認証情報が関連付けられ、また、第２のデプロイメント応答に当該ＡＰＩ認証情報が関連付けられる。第１のデプロイメント応答には、外部サービス７０１Ａに対応した呼出しノードＡに関連付けられる呼出し先エンドポイントとして、プロキシ７０２Ａのエンドポイントが関連付けられ、且つ、当該呼出しノードＡのプロパティに、前記フローテンプレートマネージャによりプロパティ値として設定されるＡＰＩ認証情報が関連付けられる。これにより、フローエディタ４１にダウンロードされたフロー２０における呼出しノードＡのプロパティには、当該ＡＰＩ認証情報が設定済である。
【００４４】
また、本実施形態では、フローテンプレートマネージャ３００からの第１のデプロイメント命令に、外部サービス７０１について、ユーザが所属するグループのグループＩＤが関連付けられている場合、当該外部サービス７０１についての第２のデプロイメント命令には、当該グループＩＤが関連付けられる。これにより、当該第２のデプロイメント命令を受信したサービスデプロイメントマネージャ６００により、当該グループＩＤに対応した空間（デプロイメント先のサービス実行基盤７００における論理的な空間）に、当該外部サービス７０１（及びそれのプロキシ７０２）がデプロイされる。このように、同一の外部サービスのインスタンスを、サービス実行基盤７００上の異なる複数の空間に配置することが可能である。この場合、空間毎のプロキシ７０２の認証情報は、アクセス制限に関する情報（例えば、アクセス可能なユーザのグループＩＤ、又は、当該グループＩＤに属するユーザＩＤ）を含んでよい。
【００４５】
また、本実施形態では、上述したように、外部サービスマネージャ５００は、ノード追加部５５を有する。ノード追加部５５は、追加された外部サービス７０１に対応した呼出しノードの追加をビジュアルプログラミングツール４０（例えばフローエディタ４１）に命令する。これにより、フローの編集時には、追加された外部サービス７０１に対応した呼出しノードが選択可能にフローエディタＧＵＩ２０１に表示され得る。
【００４６】
以下、本実施形態を詳細に説明する。なお、本実施形態では、一つの呼出しノードに対応する外部サービスは一つでも複数でもよい。
【００４７】
＜システムの説明＞
【００４８】
図１は、本実施形態におけるシステム構成の一例を示すブロック図である。
【００４９】
図１のシステムは、ユーザ端末１００と、ビジュアルプログラミングツール４０（フローエディタ４１及びフロー実行基盤２００）と、フローテンプレートマネージャ３００と、フローリポジトリマネージャ４００と、外部サービスマネージャ５００と、サービス実行基盤７００（例えば、７００Ａ及び７００Ｂ）と、サービスデプロイメントマネージャ６００（例えば、６００Ａ及び６００Ｂ）と、ネットワークスイッチ８００（例えば、８００Ａ〜８００Ｄ）から構成される。
【００５０】
ユーザ１０１は、ユーザ端末１００で動作するウェブブラウザに、ビジュアルプログラミングツール４０のフローエディタ４１が提供するフローエディタＧＵＩを表示させ、当該フローエディタＧＵＩ上でフローを開発する。また、ユーザ１０１は、ユーザ端末１００を操作して、フローテンプレートマネージャ３００より、フローデータ（フローを示すデータ）を取得し、フローエディタ４１に（フローエディタＧＵＩ上に）当該フローデータをダウンロードさせる。また、ユーザ１０１は、フローエディタ４１にダウンロードされたフローデータを、フロー実行基盤２００にデプロイすることで、当該フローデータが示すフローを実行させることができる。
【００５１】
ビジュアルプログラミングツール４０は、フローを記述するためのフローエディタＧＵＩを提供するフローエディタ４１と、フローで定義した処理を実行するためのフロー実行基盤２００とを有する。フローエディタ４１は、ノードを管理する機能を有し、当該機能により、ノードの追加又は削除を実行できる。前述のＮｏｄｅ−ＲＥＤがビジュアルプログラミングツール４０の一例である。フローエディタＧＵＩや機能の詳細は後述する。
【００５２】
フローテンプレートマネージャ３００は、フローテンプレートマネージャＧＵＩを提供する機能と、フローテンプレートを管理する機能と、外部サービスのデプロイメント又はアンデプロイメントを命令する機能とを持つ。フローテンプレートマネージャ３００のフローテンプレートマネージャＧＵＩや機能の詳細は後述する。
【００５３】
フローリポジトリマネージャ４００は、フローのバージョンを管理する機能を持つ。ユーザ１０１は、フローテンプレートマネージャ３００からダウンロードしたフローデータをフローリポジトリマネージャ４００に登録することができる。フローリポジトリマネージャの一例として、ＧｉｔＬａｂ（https://gitlab.com/）が挙げられる。ユーザ１０１は、フローリポジトリマネージャ４００に、フローを随時カスタマイズしたデータ、及びカスタマイズ前のデータを登録することができる。
【００５４】
外部サービスマネージャ５００は、サービスデプロイメントマネージャ６００へ外部サービスのデプロイメント又はアンデプロイメントを命令する機能を持つ。外部サービスマネージャ５００の機能の詳細は後述する。
【００５５】
サービスデプロイメントマネージャ６００は、サービス実行基盤７００に対して外部サービスのデプロイメント及びアンデプロイメントを実行する機能、及び、外部サービスへのアクセス先となるエンドポイントを設定するプロキシのデプロイメント及びアンデプロイメントを実行する機能を持つ。サービスデプロイメントマネージャ６００の一例として、Ｈｅｌｍ（https://www.helm.sh/）が挙げられる。サービスデプロイメントマネージャ６００の詳細は後述する。
【００５６】
サービス実行基盤７００は、外部サービス及びプロキシのインスタンスを実行する機能を持つ。サービス実行基盤７００Ａはサービスデプロイメントマネージャ６００Ａより、サービス実行基盤７００Ｂはサービスデプロイメントマネージャ６００Ｂより、外部サービスのデプロイメント命令、外部サービスのアンデプロイメント命令、プロキシのデプロイメント命令、プロキシのアンデプロイメント命令、及び、プロキシ設定の命令のうちの少なくとも一つを受信し、受信した命令を実行する。本実施形態では、外部サービスとそれのプロキシのデプロイメント命令とプロキシ設定の命令が第２のデプロイメント命令の一例に相当し、外部サービスとそれのプロキシのアンデプロイメント命令が個別アンデプロイメント命令の一例に相当する。サービス実行基盤７００の例として、Ｋｕｂｅｒｎｅｔｅｓ（https://kubernetes.io/）が挙げられる。
【００５７】
ネットワークスイッチ８００Ａ〜８００Ｄのうち、ネットワークスイッチ８００Ｂ及び８００Ｃが、ローカルネットワーク（例えばＬＡＮ（Local Area Network））におけるスイッチでよい。ネットワークスイッチ８００Ｄが、リモートネットワーク（例えばＷＡＮ（Wide Area Network））におけるスイッチでよい。
【００５８】
＜画面の説明＞
【００５９】
図２は、フローエディタＧＵＩ２０１の一例を示す図である。
【００６０】
フローエディタＧＵＩ２０１は、選択可能なノードの一覧が表示されるパレットエリア２０１９と、フローの編集を受け付ける編集エリア２０１７とを含む。
【００６１】
ユーザ１０１は、フローエディタＧＵＩ２０１の編集エリア２０１７でフローの開発を行う。
【００６２】
ユーザ１０１は、フローのノード２０１２をパレットエリア２０１９から編集エリア２０１７にドラッグアンドドロップすることで当該ノードを編集エリア２０１７上で利用可能（編集可能）となる。また、ノード２０１２同士をマウス操作又はタッチ操作等により線２０１３で結ぶことで、ノード処理順序を定義することができる。あるノード２０１２の処理が終了すると、次に、当該あるノード２０１２を始点とし当該あるノード２０１２と線２０１３で結ばれているノード２０１２の処理が実行される。
【００６３】
ユーザ１０１がノード２０１２をダブルクリックすると、当該ノード２０１２のプロパティを設定するノードプロパティ設定画面２０１４が開く。ノードプロパティ設定画面２０１４は、当該ノード２０１２の処理に必要なプロパティ値を設定できる。例えば、外部サービスを呼び出すための呼出しノードＢのプロパティには、画面２０１４のＵＩ（User Interface）２０１５を介して、外部サービスのエンドポイントとなるＵＲＬを設定することができ、画面２０１４のＵＩ２０１６を介して、外部サービスの認証トークン情報を設定するヘッダを設定することができる。本実施形態において、ＧＵＩにおける「ＵＩ」は、テキストボックスやプルダウンメニューのようなＧＵＩ部品である。本実施形態によれば、上述したように、フローエディタ４１にダウンロードされたフローデータでは、呼出しノードのプロパティには、呼出し先エンドポイントの一例であるＵＲＬや、認証情報の一例であるヘッダは設定済である。
【００６４】
本実施形態では、パレットエリア２０１９にノード２０１２が動的に追加される。具体的には、上述したように、外部サービスの動的な追加が外部サービスマネージャ５００により検知された場合、外部サービスマネージャ５００が、当該外部サービスに対応した呼出しノードの追加をビジュアルプログラミングツール４０に命令する。当該命令に応答して、ビジュアルプログラミングツール４０により、命令対象の呼出しノードが追加され、パレットエリア２０１９に、当該追加された呼出しノードが表示される。なお、ユーザ１０１が動的にパレットエリア２０１９にノード２０１２を追加できてもよい。また、パレットエリア２０１９には、ノードの種別を示すテキスト２０１１が表示されてもよい。
【００６５】
図３Ａ、図３Ｂ、図３Ｃ、図３Ｄ及び図３Ｅは、フローテンプレートマネージャＧＵＩ３０１の一例を示す図である。
【００６６】
図３Ａに例示のフローテンプレートマネージャＧＵＩ３０１Ａは、フローテンプレート一覧を表示しユーザ所望のフローテンプレートの選択をユーザから受け付けるための画面の一例である。ユーザ１０１が、ＧＵＩ３０１Ａにおけるフローテンプレート３０１１（例えばフローテンプレート１を示すアイコン）をクリックすると、図３Ｂに例示のフローテンプレートマネージャＧＵＩ３０１Ｂが開く。フローテンプレート３０１１のクリックが、フローテンプレートの選択の一例である。
【００６７】
フローテンプレートマネージャＧＵＩ３０１Ｂは、フローテンプレートの情報取得とフローデータのダウンロードとを実行することの指示をユーザから受け付けるための画面の一例である。ユーザ１０１は、ＧＵＩ３０１Ｂにおけるフロータブ３０２１の画面上に表示されるフロー画像３０２５が示すフローを、選択したフローテンプレートが示すフローであると理解できる。また、説明タブ３０２２が選択される、或いは、関連資料タブ３０２３が選択されることにより表示される画面より、当該選択したフローテンプレートに関する詳細情報やドキュメント等のコンテンツを取得できる。ユーザ１０１が、ダウンロードボタン３０２４をクリックすると、図３Ｃに例示のフローテンプレートマネージャＧＵＩ３０１Ｃが開く。
【００６８】
フローテンプレートマネージャＧＵＩ３０１Ｃは、フローテンプレートのフローデータダウンロード先となるフローリポジトリ情報の指定、フローエディタ情報の指定、及び、外部サービスのデプロイメント実行指示をユーザから受け付けるための画面の一例である。ユーザ１０１は、ＧＵＩ３０１を用い、フローリポジトリマネージャ４００に関わるＵＩ３０３１〜３０３４を介して、フローリポジトリのＵＲＬ、プロジェクト名、ユーザ名及びのパスワードを入力（又は閲覧）したり、ビジュアルプログラミングツール４０に関わるＵＩ３０３５及び３０３６を介して、フローエディタ４１のＵＲＬ、及び、フローテンプレートマネージャ３００がフローエディタ４１へフローデータをダウンロードする操作をする権限としてのアクセストークンを入力（又は閲覧）したりすることができる。また、ユーザ１０１が、外部サービスのデプロイメントのためのデプロイメントボタン３０３７をクリックすると、図３Ｄに例示のフローテンプレートマネージャＧＵＩ３０１Ｄが開く。
【００６９】
フローテンプレートマネージャＧＵＩ３０１Ｄは、外部サービスのデプロイメントの実行指示を受け付ける画面の一例である。ユーザ１０１は、フローテンプレートマネージャＧＵＩ３０４を介して、フローテンプレートのフロー実行に必要となる外部サービスのプランを選択できる。ここで、「プラン」とは、外部サービスのデプロイメント先サイトやＡＰＩ呼出し制限回数（外部サービスＡＰＩの呼出し回数の制限）等、外部サービスをデプロイする際の条件の組合せを意味する。
【００７０】
ユーザ１０１は、ラジオボタンであるＵＩ３０４１及び３０４２のいずれかを選択し、当該選択しＵＩに応じたプルダウンメニューであるＵＩ３０４７を適宜選択し、その後にデプロイメントボタン３０４８をクリックすることで、ユーザ１０１が選択したプランでの外部サービスのデプロイメントが実行される。その際、図１０、図１１、図１２に示す処理が順番に実行される。各処理の詳細は後述する。
【００７１】
ＧＵＩ３０１Ｄに対するユーザ操作に応答して外部サービスのデプロイメントが完了した後、図３Ｃに例示したＧＵＩ３０１Ｃのダウンロードボタン３０３８をユーザ１０１がクリックすると、フローテンプレートマネージャ３００は、上記選択されたフローテンプレートが示すフローデータの各呼出しノードのプロパティに、デプロイされた外部サービスのエンドポイントと認証トークン情報を設定し、当該フローデータをフローエディタ４１にダウンロードし、結果として、エンドポイント及び認証トークン情報が設定済のフローデータが示すフローが、フローエディタＧＵＩ２０１の編集エリア２０１７に表示される。このため、その後、ユーザ１０１は、フローエディタＧＵＩ２０１のデプロイメントボタン２０１８をクリックすれば、ユーザ１０１が自ら各呼出しノードのプロパティにエンドポイント及び認証トークン情報の設定をすること無しに、外部サービス呼出し処理を含む当該フローを実行させることができる。
【００７２】
図３Ｅに例示のフローテンプレートマネージャＧＵＩ３０１Ｅは、デプロイメントされた外部サービスの一覧を表示する画面の一例である。フローテンプレートマネージャＧＵＩ３０１Ｅは、ユーザ１０１がＧＵＩ３０１Ｄを介してデプロイメント実行を指示した外部サービスの情報を表示する。また、ユーザ１０１は、ＧＵＩ３０１Ｅ上の所望のＵＩ（チェックボックス）３０５１にチェックを入れて削除ボタン３０５６をクリックすると、該当する外部サービスのアンデプロイメントを実行させることができる。その際、図１４、図１５、図１６に示す処理が順番に実行される。各処理の詳細は後述する。
【００７３】
＜計算機の説明＞
【００７４】
図４は、計算機の構成の一例を示すブロック図である。
【００７５】
ビジュアルプログラミングツール４０、フローテンプレートマネージャ３００、フローリポジトリマネージャ４００、外部サービスマネージャ５００、サービスデプロイメントマネージャ６００、及び、サービス実行基盤７００のうちの少なくとも一つは、一つ以上の計算機３０上に実現可能である。
【００７６】
計算機３０は、プロセッサ３１と、メモリ３２と、永続記憶装置３３と、インターフェース装置３４と、これらの構成要素を接続するバス３５とを有する。
【００７７】
プロセッサ３１は、メモリ３２に記憶されているプログラムを実行することによって、所定の機能を実現する。メモリ３２は、プロセッサ３１によって実行されるプログラム及び当該プログラムの実行に必要なデータを記憶する。プログラムは、永続記憶装置３３からメモリ３２にロードされる。インターフェース装置３４は、いずれかのネットワークスイッチ８００に接続される。計算機３０は、インターフェース装置３４を介して、他の計算機３０と通信することができる。
【００７８】
なお、一部の計算機３０は、仮想マシンやコンテナ等の仮想環境に置き換えることもできる。
【００７９】
＜メモリ内のプログラム及びデータの説明＞
【００８０】
図５Ａは、ユーザ端末１００のメモリ３２Ａ内のプログラムの一例を示す図である。
【００８１】
メモリ３２Ａは、ＯＳ（Operating System）１２１、及びウェブブラウザ１２２を持つ（格納する）。
【００８２】
図５Ｂは、ビジュアルプログラミングツール４０のメモリ３２Ｂ内のプログラムの一例を示す図である。
【００８３】
メモリ３２Ｂは、ＯＳ２１１、フローの実行環境を提供するフロー実行環境２２２、フローエディタＧＵＩを提供するエディタＧＵＩプログラム２２３、フローエディタＧＵＩのパレットエリアへのノード追加を実施するノード管理プログラム２２４、及び、ノードの本体（ノードのオリジナル）を管理するノードリポジトリ２２５を持つ。
【００８４】
図５Ｃは、フローテンプレートマネージャ３００のメモリ３２Ｃ内のプログラム及びデータの一例を示す図である。
【００８５】
メモリ３２Ｃは、ＯＳ３２１、フローテンプレートを管理するテンプレート管理プログラム３２２、フローテンプレートマネージャＧＵＩを提供するテンプレートＧＵＩプログラム３２３、フローテンプレートテーブル３２４、フローテーブル３２５、コンテンツテーブル３２６、及び、外部サービスプランテーブル３２７を持つ。
【００８６】
図５Ｄは、フローリポジトリマネージャ４００のメモリ３２Ｄ内のプログラムの一例を示す図である。
【００８７】
メモリ３２Ｄは、ＯＳ４１２、及び、ソースコードリポジトリを管理するリポジトリ管理プログラム４２２、及び、フローデータのソースコードが格納されるソースコードリポジトリ４２３を持つ。
【００８８】
図６Ａは、外部サービスマネージャ５００のメモリ３２Ｅ内のプログラム及びデータの一例を示す図である。
【００８９】
メモリ３２Ｅは、ＯＳ５２１、外部サービス管理プログラム５２２、呼出しノードテーブル５２３、呼出しノード管理プログラム５２８、外部サービステーブル５２４、サイトテーブル５２６、サービスデプロイメントマネージャテーブル５２５、及び、ノードマネージャテーブル５２７を持つ。外部サービス管理プログラム５２２及び呼出しノード管理プログラム５２８が実行されることで、例えば、上述した機能５１〜５５が実現される。
【００９０】
図６Ｂは、サービスデプロイメントマネージャ６００のメモリ３２Ｆ内のプログラム及びデータの一例を示す図である。
【００９１】
メモリ３２Ｆは、ＯＳ６２１、サービスデプロイメントプログラム６２２、サービスのインスタンスとなるプログラムを管理するサービスリポジトリ６２３、及び、サービスインスタンスの情報を管理するサービスデプロイメントテーブル６２４を持つ。
【００９２】
図６Ｃは、サービス実行基盤７００のメモリ３２Ｇ内のプログラム及びデータの一例を示す図である。
【００９３】
メモリ３２Ｇは、ＯＳ７２１、サービスのデプロイメントやアンデプロイメントを実施するサービス管理プログラム７２２、サービスインスタンスの情報を管理するサービステーブル７２３、及び、デプロイされたサービスであるサービスインスタンス７２４を持つ。
【００９４】
＜テーブルの説明＞
【００９５】
図７は、フローテンプレートマネージャ３００が保持するテーブルの構成の一例を示す図である。
【００９６】
フローテンプレートテーブル３２４は、フローテンプレートに関する情報を管理するテーブルである。例えば、フローテンプレートテーブル３２４は、フローテンプレート毎にエントリを有する。一つのフローテンプレート（この段落で「対象テンプレート」）を例に取ると、エントリは、対象テンプレートのフローテンプレートＩＤを示すフローテンプレートＩＤ３２４０１、対象テンプレートの名称を示すフローテンプレート名３２４０２、対象テンプレートが示すフローのフローＩＤを示すフローＩＤ３２４０３、対象テンプレートが示すフローに含まれる一つ又は複数の呼出しノードに対応した一つ又は複数の外部サービスのＩＤを示す外部サービスＩＤ３２４０４、及び、対象テンプレートのコンテンツのＩＤを示すコンテンツＩＤ３２４０５といった情報を持つ。
【００９７】
フローテーブル３２５は、各フローテンプレートのフローデータに関する情報を管理するテーブルである。例えば、フローテーブル３２５は、フロー毎にエントリを有する。一つのフロー（この段落で「対象フロー」）を例に取ると、エントリは、フローのＩＤを示すフローＩＤ３２５０１、及び、フローそれ自体を示すフロー３２５０２といった情報を持つ。フロー３２５０２は、例えば、フローデータの情報を示すテキストデータである。具体的には、例えば、フロー３２５０２は、ノードＩＤ、ノード間の結線を示す情報、ノードのプロパティに設定されている情報を含む。
【００９８】
コンテンツテーブル３２６は、各フローテンプレートの説明や関連資料といったコンテンツに関する情報を管理するテーブルである。例えば、コンテンツテーブル３２６は、コンテンツ毎にエントリを有する。或るコンテンツ（この段落で「対象コンテンツ」）を例に取ると、エントリは、対象コンテンツのＩＤを示すコンテンツＩＤ３２６０１、及び、対象コンテンツそれ自体を示すコンテンツ３２６０２といった情報を持つ。コンテンツ３２６０２は、例えば、説明情報のテキストデータや関連資料のアクセス先の情報を含む。
【００９９】
外部サービスプランテーブル３２７は、外部サービスのデプロイメントに関する条件となるプランに関わる情報を管理するテーブルである。例えば、外部サービスプランテーブル３２７は、プラン毎にエントリを有する。一つのプラン（この段落で「対象プラン」）を例に取ると、エントリは、対象プランのＩＤを示すプランＩＤ３２７０１、対象プランの名称を示すプラン３２７０２、対象プランが無料プランか否かを示す無料フラグ３２７０３、対象プランに属する外部サービスのＩＤを示す外部サービスＩＤ３２７０４、当該外部サービスのデプロイメント先のサイトのＩＤを示すサイトＩＤ３２７０５、及び、体操プランに対応したＡＰＩ呼出し回数の制限を示す回数制限３２７０６といった情報を持つ。回数制限３２７０６は、｛ＡＰＩ呼出し回数，期間｝という形式で表現された情報（ＡＰＩ呼出し回数制限の情報）である。回数制限３２７０６が無い（ブランク）のプランは、ＡＰＩ呼出し回数制限が無いプランである。
【０１００】
図８は、外部サービスマネージャ５００が保持するテーブルの構成の一例を示す図である。
【０１０１】
呼出しノードテーブル５２３は、呼出しノードとその呼出し先となる外部サービスとの組合せに関する情報を管理するテーブルである。例えば、呼出しノードテーブル５２３は、呼出しノード毎にエントリを有する。一つの呼出しノード（この段落で「対象呼出しノード」）を例に取ると、エントリは、対象呼出しノードのＩＤを示す呼出しノードＩＤ５２３０１、及び、対象呼出しノードの呼出し先となる外部サービスのＩＤを示す外部サービスＩＤ５２３０２といった情報を持つ。
【０１０２】
外部サービステーブル５２４は、外部サービスと、その外部サービスがデプロイされ得るサイト８０との組合せを管理するテーブルである。例えば、外部サービステーブル５２４は、外部サービス毎にエントリを有する。一つの外部サービス（この段落で「対象外部サービス」）を例に取ると、エントリは、対象外部サービスのＩＤを示す外部サービスＩＤ５２４０１、対象外部サービスの名称を示す外部サービス名５２４０２、及び、対象外部サービスのデプロイメント先となり得る一つ以上のサイト８０のＩＤを示すサイトＩＤ５２４０３といった情報を持つ。
【０１０３】
サービスデプロイメントマネージャテーブル５２５は、サービスデプロイメントマネージャ６００に関する情報を管理するテーブルである。サービスデプロイメントマネージャテーブル５２５は、サービスデプロイメントマネージャ６００毎にエントリを有する。一つのサービスデプロイメントマネージャ６００（この段落で「対象マネージャ６００」）を例に取ると、エントリは、対象マネージャ６００のＩＤを示すサービスデプロイメントマネージャＩＤ５２５０１、対象マネージャ６００のアクセス先エンドポイントを示すエンドポイント５２５０２、及び、対象マネージャ６００が存在するサイト８０のＩＤを示すサイトＩＤ５２５０３といった情報を持つ。
【０１０４】
サイトテーブル５２６は、サイト８０に関する情報を管理するテーブルである。例えば、サイトテーブル５２６は、サイト８０毎にエントリを有する。一つのサイト８０（この段落で「対象サイト８０」）を例に取ると、エントリは、対象サイト８０のＩＤを示すサイトＩＤ５２６０１、対象サイトの名称を示すサイト名５２６０２、及び、対象サイトがローカルサイト８０Ｌか否かを示すローカルフラグ５２６０３といった情報を持つ。ここで、ローカルサイト８０Ｌは、上述したように、ビジュアルプログラミングツール４０の存在するサイトを示す。
【０１０５】
ノードマネージャテーブル５２７は、ノード管理プログラム２２４に関する情報を管理するテーブルである。例えば、ノードマネージャテーブル５２７は、ノード管理プログラム２２４のアクセス先エンドポイントを示すエンドポイント５２７０１といった情報を持つ。
【０１０６】
図８に示すテーブル５２３〜５２５によれば、一つ又は複数のサイト８０の各々について、当該サイト８０に対応したサービスデプロイメントマネージャ６００は、当該サイト８０のサイトＩＤと、当該サイトＩＤに対応した外部サービスＩＤとに関連付けられている。
【０１０７】
図９Ａは、サービスデプロイメントマネージャ６００Ａが保持するテーブルの構成の一例を示す図である。図９Ｂは、サービスデプロイメントマネージャ６００Ｂが保持するテーブルの構成の一例を示す図である。
【０１０８】
サービスデプロイメントテーブル６２４は、デプロイされた外部サービス及びプロキシに関する情報を管理するテーブルである。例えば、サービスデプロイメントテーブル６２４は、外部サービス毎にエントリを有する。一つのフローテンプレート（この段落で「対象テンプレート」）を例に取ると、エントリは、対象外部サービスのデプロイメント先のネームスペースのＩＤを示すネームスペースＩＤ６２４０１、対象外部サービスのインスタンスのＩＤを示すリソースＩＤ６２４０２、対象外部サービスのＩＤを示す外部サービスＩＤ６２４０３、対象外部サービスのデプロイメント先とされるサイト８０のＩＤを示すサイトＩＤ６２４０４、対象外部サービスのユーザのＩＤを示すユーザＩＤ６２４０５、対象外部サービスのユーザが属するグループのＩＤを示すグループＩＤ６２４０６、対象外部サービスのエンドポイントを示す外部サービスエンドポイント６２４０７、対象外部サービスのプロキシのエンドポイントを示すプロキシエンドポイント６２４０８、対象外部サービスに関しローカルサイト８０Ｌにデプロイされたプロキシの認証トークンを示すローカル認証トークン６２４０９、対象外部サービスに関しリモートサイト８０Ｒにデプロイされたプロキシの認証トークンを示すリモート認証トークン６２４１０、及び、対象外部サービスのＡＰＩ呼出し回数の制限を示す回数制限６２４１２といった情報を持つ。
【０１０９】
図９Ａ及び図９Ｂによれば、デプロイメント先がリモートサイトである外部サービスについて（外部サービスＩＤ“exsvc-2”を参照）、サービスデプロイメントテーブル６２４Ａ及び６２４Ｂのいずれにも、当該外部サービスに対応したエントリが存在する。具体的には、当該外部サービスを図１７に例示の外部サービス７０１Ｂであるとすると、サービスデプロイメントテーブル６２４Ｂには、リモートサイト８０Ｒにデプロイされる外部サービス７０１Ｂ及びプロキシ７０２Ｂ１に関する情報を持つエントリがある（テーブル６２４Ｂでは、当該外部サービスについてローカル認証トークン６２４０９Ｂがあるが、これは、当該サイト８０Ｒにとっては当該サイト８０Ｒがローカルとなるためである）。また、サービスデプロイメントテーブル６２４Ａには、ローカルサイト８０Ｌにデプロイされるプロキシ７０２Ｂ２に関する情報を持つエントリがある（プロキシ７０２Ｂ２について、外部サービスエンドポイント６２４０７Ａは、プロキシ７０２Ｂ２と通信するプロキシ７０２Ｂ１（プロキシ７０２Ｂ２にとっての外部のサービス）のエンドポイントを示す）。
【０１１０】
＜外部サービスデプロイメント処理の説明＞
【０１１１】
図１０は、フローテンプレートマネージャ３００のテンプレート管理プログラム３２２が行う外部サービスデプロイメント処理の一例を示す図である。
【０１１２】
まず、ステップＳ１０１において、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３より、外部サービスをデプロイすることの命令を受信する。当該命令は、テンプレートＧＵＩプログラム３２３を介してユーザ所望のフローテンプレートが選択されたことに応答して当該フローテンプレートが示すフローのフローデータがフローテンプレートマネージャ３００からビジュアルプログラミングツール４０のフローエディタ４１にダウンロードされる場合に、テンプレートＧＵＩプログラム３２３より送信される。また、当該命令に関連付けられる引数は、外部サービスＩＤ−サイトＩＤ−ＡＰＩ呼出し回数制限の組合せの配列と、各組合せについてのグループＩＤ及びユーザＩＤとを含む。
【０１１３】
次に、ステップＳ１０２において、テンプレート管理プログラム３２２は、ステップＳ１０１で受信した命令の引数が適切か否かを判断する。具体的には、例えば、テンプレート管理プログラム３２２は、命令の引数として、外部サービスＩＤ−サイトＩＤ−ＡＰＩ呼出し回数制限の組合せの配列が指定されていれば、引数が適切と判断する。引数が適切ならば、処理がステップＳ１０３に進む。引数が適切でないならば、処理がステップＳ１０８に進み、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３にエラー情報を含んだ応答を返し、処理を終了する。
【０１１４】
次に、ステップＳ１０３において、テンプレート管理プログラム３２２は、ステップＳ１０１で受信した命令の引数の配列から、外部サービスＩＤ−サイトＩＤ−ＡＰＩ呼出し回数制限の組合せを一つ選出する。
【０１１５】
次に、ステップＳ１０４において、テンプレート管理プログラム３２２は、外部サービスマネージャ５００の外部サービス管理プログラム５２２へ、第１のデプロイメント命令を送信する。当該命令の引数として、ステップＳ１０３で選出した外部サービスＩＤ、サイトＩＤ及びＡＰＩ呼出し回数制限の組合せが指定される。更に、当該命令の引数として、ステップＳ１０３で選出した組合せに対応したグループＩＤ及びユーザＩＤも指定される。当該命令の送信後、テンプレート管理プログラム３２２は、既定のタイムアウト時間まで、当該命令に対応した第１のデプロイメント応答を待つ。
【０１１６】
次に、ステップＳ１０５において、テンプレート管理プログラム３２２は、タイムアウト時間内に第１のデプロイメント応答があったか否かを確認する。タイムアウト時間内に当該応答があったら、処理がステップＳ１０６に進む。タイムアウト時間内に当該応答がなかったら、処理がステップＳ１０８に進み、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３にエラー情報を含んだ応答を返し、処理を終了する。
【０１１７】
次に、ステップＳ１０６において、テンプレート管理プログラム３２２は、外部サービス管理プログラム５２２からの第１のデプロイメント応答の内容を確認し、第１のデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップＳ１０７に進む。エラーがあれば、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３にエラー情報を含んだ応答を返し、処理を終了する。
【０１１８】
次に、ステップＳ１０７において、テンプレート管理プログラム３２２は、ステップＳ１０１で受信した命令の引数の配列から選出すべき引数があるか否かを確認する。選出すべき引数があれば、処理がステップＳ１０３に戻る。選出すべき引数がなければ、処理がステップＳ１０８へ進む。
【０１１９】
次に、ステップＳ１０８において、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３へ、外部サービスのデプロイメント処理の完了を示す結果を返し、処理を終了する。なお、ステップ１０８において、テンプレート管理プログラム３２２は、一つ以上の呼出しノードの各々のプロパティに、当該呼出しノードに対応した外部サービスについての第１のデプロイメント応答から得られる呼出し先エンドポイントを設定し、それにより、当該一つ以上の呼出しノードの各々のプロパティに呼出し先エンドポイントが設定済みのフローのフローデータがビジュアルプログラミングツール４０のフローエディタ４１にダウンロードされる。
【０１２０】
図１１は、外部サービスマネージャ５００の外部サービス管理プログラム５２２が行う外部サービスデプロイ処理の一例を示す図である。
【０１２１】
まず、ステップＳ２０１において、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２より、第１のデプロイメント命令を受信する。
【０１２２】
次に、ステップＳ２０２において、外部サービス管理プログラム５２２は、ステップＳ２０１で受信した命令の引数が適切か否かを判断する。具体的には、外部サービス管理プログラム５２２は、当該引数に、外部サービスＩＤ、サイトＩＤ及びＡＰＩ呼出し回数制限が指定されていれば適切と判断する。当該引数が適切なら、処理がステップＳ２０３に進む。当該引数が適切でないならば、処理がステップＳ２１１に進み、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２にエラー情報を含んだ第１のデプロイメント応答を返し、処理を終了する。
【０１２３】
次に、ステップＳ２０３において、外部サービス管理プログラム５２２は、ステップＳ２０１で受信した命令の引数であるサイトＩＤをキーに、サービスデプロイメントマネージャテーブル５２６より、サービスデプロイメントマネージャＩＤ５２５０１を特定する。サービスデプロイメントマネージャＩＤ５２５０１を特定できたら、処理がステップＳ２０４へ進む。サービスデプロイメントマネージャＩＤ５２５０１を特定できなかったら、処理がステップＳ２１０へ進み、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２にエラー情報を含んだ第１のデプロイメント応答を返し、処理を終了する。
【０１２４】
次に、ステップＳ２０４において、外部サービス管理プログラム５２２は、特定したサービスデプロイメントマネージャＩＤ５２５１０のサービスデプロイメントマネージャ６００Ａ又は６００Ｂのサービスデプロイメントプログラム６２２へ、第２のデプロイメント命令を送信する。当該第２のデプロイメント命令に関連付けられる引数は、ステップＳ２０１で受信した命令の引数である外部サービスＩＤ、ＡＰＩ呼出し回数制限、グループＩＤ及びユーザＩＤを含む。第２のデプロイメント命令の送信後、外部サービス管理プログラム５２２は、既定のタイムアウト時間まで、当該命令の応答（つまり第２のデプロイメント応答）を待つ。
【０１２５】
次に、ステップＳ２０５において、外部サービス管理プログラム５２２は、タイムアウト時間内に第２のデプロイメント応答があったか否かを確認する。タイムアウト時間内に当該応答があったら、処理がステップＳ２０６に進む。タイムアウト時間内に当該応答がなかったら、処理がステップＳ１０８に進み、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２にエラー情報を含んだ第１のデプロイメント応答を返し、処理を終了する。
【０１２６】
次に、ステップＳ２０６において、外部サービス管理プログラム５２２は、サービスデプロイメントプログラム６２２からの第２のデプロイメント応答の内容を確認し、第２のデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップＳ２０７に進む。エラーがあれば、処理がステップＳ２１０へ進み、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２にエラー情報を含んだ第１のデプロイメント応答を返し、処理を終了する。
【０１２７】
次に、ステップＳ２０７において、外部サービス管理プログラム５２２は、サイトテーブル５２６を参照し、ステップＳ２０１で受信した命令の引数内のサイトＩＤに対応したローカルフラグ５２６０３が“true”か否か（つまり、デプロイメント先がローカルか否か）を確認する。デプロイメント先がローカルなら、処理がステップＳ２０８へ進む。デプロイメント先がローカルでないなら、処理がステップＳ２０４へ戻る。ローカルサイト８０Ｌに、リモートサイト８０Ｒにデプロイされたプロキシと通信するプロキシをデプロイするためである。
【０１２８】
次に、ステップＳ２０８において、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２へ、外部サービスデプロイメント処理が完了した結果としての第１のデプロイメント応答を返し、処理を終了する。第１のデプロイメント応答には、第２のデプロイメント命令に従いデプロイされたプロキシのエンドポイント及び認証トークン情報が、第１のデプロイメント命令の引数である外部サービスＩＤに対応した呼出し先エンドポイント及び認証トークン情報として関連付けられる（このエンドポイント及び認証トークン情報が、フローテンプレートマネージャ３００により、当該外部サービスＩＤに対応した呼出しノードのプロパティに設定される）。プロキシのエンドポイント及び認証トークン情報は、第２のデプロイメント命令に対する第２のデプロイメント応答に関連付けられている。
【０１２９】
図１２は、サービスデプロイメントマネージャ６００のサービスデプロイメントプログラム６２２が行う外部サービスデプロイメント処理の一例を示す図である。
【０１３０】
まず、ステップＳ３０１において、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２より、第２のデプロイメント命令を受信する。
【０１３１】
次に、ステップＳ３０２において、サービスデプロイメントプログラム６２２は、ステップＳ３０１で受信した命令の引数が適切か否かを判断する。具体的には、サービスデプロイメントプログラム６２２は、引数に、外部サービスＩＤ、グループＩＤ及びＡＰＩ呼出し回数制限が指定されていれば適切と判断する。引数が適切なら、処理がステップＳ３０３へ進む。引数が適切でないならば、処理がステップＳ３０８へ進み、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２にエラー情報を含んだ第２のデプロイメント応答を返し、処理を終了する。
【０１３２】
次に、ステップＳ３０３において、サービスデプロイメントプログラム６２２は、サービス実行基盤７００のサービス管理プログラム７２２へ、第３の外部サービスデプロイメント命令を送信する。当該命令には、外部サービスＩＤ、ネームスペースＩＤ（グループＩＤと同じ値）、及び、ＡＰＩ呼出し回数制限が引数として関連付けられる。当該命令に従い、外部サービス及びそれのプロキシのうちの少なくともプロキシが、サービス実行基盤７００における複数のネームスペースのうち、当該ネームスペースＩＤに対応したネームスペースにデプロイされる。当該プロキシには、ＡＰＩ呼出し回数制限や認証トークン情報が関連付けられる。当該命令の送信後、サービスデプロイメントプログラム６２２は、既定のタイムアウト時間まで、当該命令に対する応答である第３のデプロイメント応答を待つ。
【０１３３】
次に、ステップＳ３０４において、サービスデプロイメントプログラム６２２は、タイムアウト時間内に第３のデプロイメント応答があったか否かを確認する。タイムアウト時間内に応答があったら、処理がステップＳ３０５へ進む。タイムアウト時間内に応答がなかったら、処理がステップＳ３０８に進み、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２にエラー情報を含んだ第２のデプロイメント応答を返し、処理を終了する。
【０１３４】
次に、ステップＳ３０５において、サービスデプロイメントプログラム６２２は、サービス管理プログラム７２２からの第３のデプロイメント応答の内容を確認し、第３のデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップＳ３０６に進む。エラーがあれば、処理がステップＳ３０８へ進み、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２にエラー情報を含んだ第２のデプロイメント応答を返し、処理を終了する。
【０１３５】
次に、ステップＳ３０６において、サービスデプロイメントプログラム６２２は、ステップＳ３０３の命令に対する結果（具体的には、情報６２４０１〜６２４１１を含んだエントリ）を、サービスデプロイメントテーブル６２４に追加する。
【０１３６】
次に、ステップＳ３０７において、サービスデプロイメントプログラム６２２は、ステップ３０６のサービスデプロイメントテーブル６２４への追加処理が正常に完了したか否かを確認する。追加処理が正常に完了したら、処理がステップＳ３０８（ＹＥＳ）へ進む。追加処理の結果、エラーが返ってきたら、処理がステップＳ３０８（ＮＯ）へ進み、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２にエラー情報を含んだ第２のデプロイメント応答を返し、処理を終了する。
【０１３７】
次に、ステップＳ３０８において、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２に、第２のデプロイメント命令に従う処理が完了した結果としての第２のデプロイメント応答を返し、処理を終了する。第２のデプロイメント応答には、外部サービス及びプロキシのエンドポイントと、プロキシの認証トークン情報とが関連付けられる。
【０１３８】
＜ノード追加処理の説明＞
【０１３９】
図１３は、外部サービスマネージャ５００の呼出しノード管理プログラム５２８が行うノード追加処理の一例を示す図である。
【０１４０】
まず、ステップＳ４０１において、呼出しノード管理プログラム５２８は、テンプレート管理プログラム３２２より、呼出しノード追加命令を受信する。
【０１４１】
次に、ステップＳ４０２において、呼出しノード管理プログラム５２８は、ステップＳ４０１で受信した命令の引数が適切か否かを判断する。具体的には、テンプレート管理プログラム３２２は、当該引数に、追加される外部サービスの外部サービスＩＤの配列が指定されていれば適切と判断する。当該引数が適切なら、処理がステップＳ４０３へ進む。当該引数が適切でないならば、処理がステップＳ４１０へ進み、テンプレート管理プログラム３２２は、テンプレート管理プログラム３２２にエラー情報を含んだ応答を返し、処理を終了する。
【０１４２】
次に、ステップＳ４０３において、呼出しノード管理プログラム５２８は、ステップＳ４０１で受信した命令の引数の配列から、外部サービスＩＤを一つ選出する。
【０１４３】
次に、ステップＳ４０４において、呼出しノード管理プログラム５２８は、選出した外部サービスＩＤをキーに、呼出しノードテーブル５２３より、呼出しノードＩＤ５２３０１を特定する。呼出しノードＩＤ５２３０１を特定できたら、処理がステップＳ４０５へ進む。呼出しノードＩＤ５２３０１を特定できなかったら、処理がステップＳ４０９へ進み、呼出しノード管理プログラム５２８は、テンプレート管理プログラム３２２にエラー情報を含んだ応答を返し、処理を終了する。
【０１４４】
次に、ステップＳ４０５において、呼出しノード管理プログラム５２８は、ビジュアルプログラミングツール４０へノード追加命令を送信する。当該命令の引数には、呼出しノードＩＤが指定される。当該命令の送信後、呼出しノード管理プログラム５２８は、既定のタイムアウト時間まで、当該命令の応答を待つ。
【０１４５】
次に、ステップＳ４０６において、呼出しノード管理プログラム５２８は、タイムアウト時間内に応答があったか否かを確認する。タイムアウト時間内に応答があったら、処理がステップＳ４０７へ進む。タイムアウト時間内に応答がなかったら、処理がステップＳ４０９に進み、呼出しノード管理プログラム５２８は、テンプレート管理プログラム３２２にエラー情報を含んだ応答を返し、処理を終了する。
【０１４６】
次に、ステップＳ４０７において、呼出しノード管理プログラム５２８は、応答を確認し、ステップＳ４０５で送信された命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップＳ４０８へ進む。エラーがあれば、処理がステップＳ４０９へ進み、呼出しノード管理プログラム５２８は、テンプレート管理プログラム３２２にエラー情報を含んだ応答を返し、処理を終了する。
【０１４７】
次に、ステップＳ４０８において、呼出しノード管理プログラム５２８は、ステップＳ４０１で受信した命令の引数の配列から選出すべき外部サービスＩＤがあるか否かを確認する。選出すべき外部サービスＩＤがあれば、処理がステップＳ４０３に戻る。選出すべき外部サービスＩＤがなければ、処理がステップＳ４０９へ進む。
【０１４８】
次に、ステップＳ４０９において、呼出しノード管理プログラム５２８は、テンプレート管理プログラム３２２へ、ノード追加処理が完了した結果としての応答を返し、処理を終了する。
【０１４９】
なお、本実施形態では、ノード追加処理は、テンプレート管理プログラム３２２からの命令に従って行われる。それに代えて又は加えて、例えば、新たな外部サービスの追加が呼出しノード管理プログラム５２８により検出された場合に、呼出しノード管理プログラム５２８が、ステップＳ４０５を行ってもよい。
【０１５０】
＜外部サービスアンデプロイメント処理の説明＞
【０１５１】
図１４は、フローテンプレートマネージャ３００のテンプレート管理プログラム３２２が行う外部サービスアンデプロイメント処理の一例を示す図である。
【０１５２】
まず、ステップＳ５０１において、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３より、外部サービスをアンデプロイすることの命令を受信する。当該命令に関連付けられる引数は、リソースＩＤ（外部サービスのインスタンスのＩＤ）、サイトＩＤ及びグループＩＤを含む。また、当該命令は、例えば、フローエディタＧＵＩにおいてフローから呼出しノードの削除が行われ、当該削除された呼出しノードがフローエディタ４１からフローテンプレートマネージャ３００に通知されたことを契機に、送信されてもよい。
【０１５３】
次に、ステップＳ５０２において、テンプレート管理プログラム３２２は、ステップ５０１で受信した命令の引数が適切か否かを判断する。具体的には、テンプレート管理プログラム３２２は、当該引数にリソースＩＤが指定されていれば適切と判断する。当該引数が適切ならば、処理がステップＳ５０３に進む。当該引数が適切でないならば、処理がステップＳ５０６に進み、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３にエラー情報を含んだ応答を返し、処理を終了する。
【０１５４】
次に、ステップＳ５０３において、テンプレート管理プログラム３２２は、外部サービスマネージャ５００の外部サービス管理プログラム５２２へ、外部サービスをアンデプロイすることの命令である第１のアンデプロイメント命令を送信する。当該命令の引数には、ステップＳ５０３で受信した命令の引数に含まれているリソースＩＤ、サイトＩＤ及びグループＩＤが含まれる。当該命令の送信後、テンプレート管理プログラム３２２は、既定のタイムアウト時間まで、当該命令の応答（つまり、第１のアンデプロイメント応答）を待つ。
【０１５５】
次に、ステップＳ５０４において、タイムアウト時間内に第１のアンデプロイメント応答があったら、処理がステップＳ５０５へ進む。タイムアウト時間内に第１のアンデプロイメント応答がなかったら、処理がステップＳ５０６に進み、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３にエラー情報を含んだ応答を返し、処理を終了する。
【０１５６】
次に、ステップＳ５０５において、テンプレート管理プログラム３２２は、外部サービス管理プログラム５２２からの第１のアンデプロイメント応答の内容を確認し、第１のアンデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップＳ５０６（ＮＯ）に進む。エラーがあれば、ステップＳ５０６（ＹＥＳ）へ進み、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３にエラー情報を含んだ応答を返し、処理を終了する。
【０１５７】
次に、ステップＳ５０６において、テンプレート管理プログラム３２２は、テンプレートＧＵＩプログラム３２３に、外部サービスアンデプロイメント処理が完了した結果を示す応答を返し、処理を終了する。
【０１５８】
図１５は、外部サービスマネージャ５００の外部サービス管理プログラム５２２が行う外部サービスアンデプロイメント処理の一例を示す図である。
【０１５９】
まず、ステップＳ６０１において、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２より、第１のアンデプロイメント命令を受信する。
【０１６０】
次に、ステップＳ６０２において、外部サービス管理プログラム５２２は、ステップ６０１で受信した命令の引数が適切か否かを判断する。具体的には、外部サービス管理プログラム５２２は、当該引数にリソースＩＤとサイトＩＤが指定されていれば適切と判断する。当該引数が適切ならば、処理がステップＳ６０３に進む。当該引数が適切でないならば、処理がステップＳ６０８に進み、外部サービス管理プログラム５２２、テンプレート管理プログラム３２２にエラー情報を含んだ第１のアンデプロイメント応答を返し、処理を終了する。
【０１６１】
次に、ステップＳ６０３において、外部サービス管理プログラム５２２は、第２のアンデプロイメント命令の引数内のサイトＩＤをキーに、サービスデプロイメントマネージャテーブル５２５より、サービスデプロイメントマネージャＩＤ５２５０１を特定する。サービスデプロイメントマネージャＩＤ５２５０１を特定できたら、処理がステップＳ６０４へ進む。サービスデプロイメントマネージャＩＤ５２５０１を特定できなかったら、処理がステップＳ６０８へ進み、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２にエラー情報を含んだ第１のアンデプロイメント応答を返し、処理を終了する。
【０１６２】
次に、ステップＳ６０４において、外部サービス管理プログラム５２２は、特定したサービスデプロイメントマネージャＩＤ５２５０１に対応したサービスデプロイメントマネージャ６００のサービスデプロイメントプログラム６２２へ、上記リソースＩＤから特定される外部インスタンス（外部サービスのインスタンス）をアンデプロイすることの命令である第２のアンデプロイメント命令を送信する。当該第２のアンデプロイメント命令には、第１のアンデプロイメント命令の引数に含まれているリソースＩＤ及びグループＩＤが含まれる。当該命令の送信後、外部サービス管理プログラム５２２は、既定のタイムアウト時間まで、当該命令の応答（つまり第２のアンデプロイメント応答）を待つ。
【０１６３】
次に、ステップＳ６０５において、外部サービス管理プログラム５２２は、タイムアウト時間内に第２のアンデプロイメント応答があったか否かを確認する。タイムアウト時間内に第２のアンデプロイメント応答があったら、処理がステップＳ６０６に進む。タイムアウト時間内に第２のアンデプロイメント応答がなかったら、処理がステップＳ６０８に進み、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２にエラー情報を含んだ第１のアンデプロイメント応答を返し、処理を終了する。
【０１６４】
次に、ステップＳ６０６において、外部サービス管理プログラム５２２は、サービスデプロイメントプログラム６２２からの第２のアンデプロイメント応答の内容を確認し、第２のアンデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップＳ６０７に進む。エラーがあれば、処理がステップＳ６０９へ進み、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２にエラー情報を含んだ第１のアンデプロイメント応答を返し、処理を終了する。
【０１６５】
次に、ステップＳ６０７において、外部サービス管理プログラム５２２は、サイトテーブル５２６を参照し、ステップＳ６０１で受信した命令の引数内のサイトＩＤに対応したローカルフラグ５２６０３が“true”か否か（つまり、アンデプロイメントされるインスタンスのあるサイトがローカルか否か）を確認する。当該サイトがローカルなら、処理がステップＳ６０８へ進む。当該サイトがローカルでないなら、処理がステップＳ６０４へ戻る。ローカルサイト８０Ｌから、リモートサイト８０Ｒからアンデプロイされたプロキシインスタンスと通信するプロキシインスタンスもアンデプロイするためである。
【０１６６】
次に、ステップＳ６０８において、外部サービス管理プログラム５２２は、テンプレート管理プログラム３２２へ、外部サービスデプロイ処理が完了した結果としての第１のアンデプロイメント応答を返し、処理を終了する。
【０１６７】
図１６は、サービスデプロイメントマネージャ６００のサービスデプロイメントプログラム６２２が行う外部サービスアンデプロイメント処理の一例を示す図である。
【０１６８】
まず、ステップＳ７０１において、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２より、第２のアンデプロイメント命令を受信する。
【０１６９】
次に、ステップＳ７０２において、サービスデプロイメントプログラム６２２は、ステップＳ７０１で受信した命令の引数が適切か否かを判断する。具体的には、サービスデプロイメントプログラム６２２は、当該引数に、リソースＩＤが指定されていれば適切と判断する。当該引数が適切なら、処理がステップＳ７０３へ進む。当該引数が適切でないならば、処理がステップＳ７０８へ進み、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２にエラー情報を含んだ第２のアンデプロイメント応答を返し、処理を終了する。
【０１７０】
次に、ステップＳ７０３において、サービスデプロイメントプログラム６２２は、サービス実行基盤７００のサービス管理プログラム７２２へ、上記リソースＩＤに対応したインスタンスをアンデプロイすることの命令である第３のアンデプロイメント命令を送信する。当該命令の送信後、サービスデプロイメントプログラム６２２は、既定のタイムアウト時間まで、当該命令の応答（つまり第３のアンデプロイメント応答）を待つ。
【０１７１】
次に、ステップＳ７０４において、サービスデプロイメントプログラム６２２は、タイムアウト時間内に第３のアンデプロイメント応答があったか否かを確認する。タイムアウト時間内に第３のアンデプロイメント応答があったら、処理がステップＳ７０５へ進む。タイムアウト時間内に第３のアンデプロイメント応答がなかったら、処理がステップＳ７０８に進み、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２にエラー情報を含んだ第２のアンデプロイメント応答を返し、処理を終了する。
【０１７２】
次に、ステップＳ７０５において、サービスデプロイメントプログラム６２２は、サービス管理プログラム７２２からの第３のアンデプロイメント応答の内容を確認し、第３のアンデプロイメント命令のエラーがあるか否かを確認する。エラーが無ければ、処理がステップＳ７０６に進む。エラーがあれば、処理がステップＳ７０８へ進み、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２にエラー情報を含んだ第２のアンデプロイメント応答を返し、処理を終了する。
【０１７３】
次に、ステップＳ７０６において、サービスデプロイメントプログラム６２２は、ステップＳ７０３の第３のアンデプロイメント命令に従いアンデプロイされたインスタンスに対応したエントリを、サービスデプロイメントテーブル６２４より削除する。
【０１７４】
次に、ステップＳ７０７において、サービスデプロイメントプログラム６２２は、ステップ７０６の削除処理が正常に完了したか否かを確認する。当該削除処理が正常に完了したら、処理がステップＳ７０８（ＹＥＳ）へ進む。当該削除処理の結果、エラーが返ってきたら、処理がステップＳ７０８（ＮＯ）へ進み、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２にエラー情報を含んだ第２のアンデプロイメント応答を返し、処理を終了する。
【０１７５】
次に、ステップＳ７０８において、サービスデプロイメントプログラム６２２は、外部サービス管理プログラム５２２に、外部サービスアンデプロイメント処理が完了した結果を示す第２のアンデプロイメント応答を返し、処理を終了する。
【０１７６】
以上のように、本実施形態に係る外部サービスアンデプロイメント処理では、インスタンスがアンデプロイされ、アンデプロイされたインスタンスに対応した呼出しノードの本体（オリジナル）は削除されない。
【０１７７】
以上、一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。例えば、外部サービスマネージャ５００は、フローテンプレートマネージャ３００に含まれていてもよい。
【符号の説明】
【０１７８】
５００：外部サービスマネージャ
【図１】
2020135154.tif 000003
【図２】
2020135154.tif 000004
【図３Ａ】
2020135154.tif 000005
【図３Ｂ】
2020135154.tif 000006
【図３Ｃ】
2020135154.tif 000007
【図３Ｄ】
2020135154.tif 000008
【図３Ｅ】
2020135154.tif 000009
【図４】
2020135154.tif 000010
【図５Ａ】
2020135154.tif 000011
【図５Ｂ】
2020135154.tif 000012
【図５Ｃ】
2020135154.tif 000013
【図５Ｄ】
2020135154.tif 000014
【図６Ａ】
2020135154.tif 000015
【図６Ｂ】
2020135154.tif 000016
【図６Ｃ】
2020135154.tif 000017
【図７】
2020135154.tif 000018
【図８】
2020135154.tif 000019
【図９Ａ】
2020135154.tif 000020
【図９Ｂ】
2020135154.tif 000021
【図１０】
2020135154.tif 000022
【図１１】
2020135154.tif 000023
【図１２】
2020135154.tif 000024
【図１３】
2020135154.tif 000025
【図１４】
2020135154.tif 000026
【図１５】
2020135154.tif 000027
【図１６】
2020135154.tif 000028
【図１７】
2020135154.tif 000029