(57)【要約】【課題】ＡＰＩの呼び出し命令を組み合わせて実行するときに、それらのＡＰＩの実行を効率的に並列化すること。【解決手段】シナリオ並列化装置１は、シナリオ入力部１１により抽出された各シナリオ部品について、そのシナリオ部品に含まれる複数のＡＰＩの呼び出し命令を並列化可能か否かを判定する並列化判定部３１と、並列化判定部３１により並列化可能と判定された連続する複数のシナリオ部品について、各シナリオ部品に含まれる各ＡＰＩの呼び出し命令を互いに並列に実行するようにして統合した１つのシナリオ部品を作成する統合並列化部３２と、統合並列化部３２によって作成されたシナリオ部品をもとに出力シナリオ９を作成するシナリオ出力部３４と、を有する。【選択図】図１
2015153085.tif 000002
【特許請求の範囲】
【請求項１】
ＡＰＩ（Application Programming Interface）の呼び出し命令が呼び出し順に記載された入力シナリオを受け付け、受け付けた前記入力シナリオから複数のシナリオ部品を抽出するシナリオ入力部と、
前記シナリオ入力部により抽出された各シナリオ部品について、そのシナリオ部品に含まれる複数のＡＰＩの呼び出し命令を並列化可能か否かを判定する並列化判定部と、
前記並列化判定部により並列化可能と判定された連続する複数のシナリオ部品について、各シナリオ部品に含まれる各ＡＰＩの呼び出し命令を互いに並列に実行するようにして統合した１つのシナリオ部品を作成する統合並列化部と、
前記統合並列化部によって作成されたシナリオ部品内の並列実行されるＡＰＩの呼び出し命令と、並列実行されないＡＰＩの呼び出し命令とが区別されて記載される出力シナリオを作成して出力するシナリオ出力部と、を有することを特徴とする
シナリオ並列化装置。
【請求項２】
前記並列化判定部は、各シナリオ部品に含まれるＡＰＩの呼び出し命令の入力パラメータおよび出力パラメータを抽出し、連続する複数のシナリオ部品間のうちの前に実行されるシナリオ部品の出力パラメータが、後に実行されるシナリオ部品の入力パラメータになっていないときに、前記統合並列化部による並列化を可能と判断することを特徴とする
請求項１に記載のシナリオ並列化装置。
【請求項３】
前記シナリオ並列化装置は、さらに、分岐並列化部を有しており、
前記並列化判定部は、並列化判定対象であるシナリオ部品が、分岐命令およびその分岐先で実行される複数のＡＰＩの呼び出し命令を含んでいるときに、前記分岐並列化部による並列化を可能と判断し、
前記分岐並列化部は、
前記並列化判定部により並列化可能と判定されたシナリオ部品について、そのシナリオ部品に含まれる分岐先で実行される複数のＡＰＩを互いに並列に実行するようにした第１シナリオ部品と、
判定されたシナリオ部品に含まれる分岐命令およびその分岐先で実行される前記第１シナリオ部品の実行結果の選択処理を含む第２シナリオ部品を作成し、
前記シナリオ出力部は、前記分岐並列化部によって作成された前記第１シナリオ部品と、前記第２シナリオ部品とを前記出力シナリオに含めて出力することを特徴とする
請求項１または請求項２に記載のシナリオ並列化装置。
【請求項４】
前記並列化判定部は、互いに並列に実行するＡＰＩの呼び出し命令の数を制限することを特徴とする
請求項１ないし請求項３のいずれか１項に記載のシナリオ並列化装置。
【請求項５】
シナリオ並列化装置は、シナリオ入力部と、並列化判定部と、統合並列化部と、シナリオ出力部とを有しており、
前記シナリオ入力部は、ＡＰＩ（Application Programming Interface）の呼び出し命令が呼び出し順に記載された入力シナリオを受け付け、受け付けた前記入力シナリオから複数のシナリオ部品を抽出し、
前記並列化判定部は、前記シナリオ入力部により抽出された各シナリオ部品について、そのシナリオ部品に含まれる複数のＡＰＩの呼び出し命令を並列化可能か否かを判定し、
前記統合並列化部は、前記並列化判定部により並列化可能と判定された連続する複数のシナリオ部品について、各シナリオ部品に含まれる各ＡＰＩの呼び出し命令を互いに並列に実行するようにして統合した１つのシナリオ部品を作成し、
前記シナリオ出力部は、前記統合並列化部によって作成されたシナリオ部品内の並列実行されるＡＰＩの呼び出し命令と、並列実行されないＡＰＩの呼び出し命令とが区別されて記載される出力シナリオを作成して出力することを特徴とする
シナリオ並列化方法。
【請求項６】
請求項５に記載のシナリオ並列化方法を、コンピュータである前記シナリオ並列化装置に実行させるためのシナリオ並列化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シナリオ並列化装置、シナリオ並列化方法、および、シナリオ並列化プログラムの技術に関する。
【背景技術】
【０００２】
Ｗｅｂアプリケーションを手軽に作成する手法として、マッシュアップサービスが非特許文献１などで提案されている。マッシュアップサービスとは、ＡＰＩ（Application Programming Interface）として提供されるソフトウェア部品やソフトウェア機能をイネーブラ（実行装置）に実行させるために、ＡＰＩの呼び出し命令を組み合わせて作成されたサービスである。開発者は、他者により提供されているソフトウェア部品やソフトウェア機能を積極的に再利用することによって、自らのＷｅｂアプリケーションを少ない手間で構築できる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】ＩＰＡ（Information-technology Promotion Agency, Japan）、"セキュア・プログラミング講座 Webアプリケーション編 第8章 マッシュアップ"、［online］、2012年11月、［平成26年2月20日検索］、インターネット〈URL：http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/701.html〉
【発明の概要】
【発明が解決しようとする課題】
【０００４】
マッシュアップサービスのシナリオは、所望の動作となるように順次実行されるＡＰＩが記載されている。ここで、あるＡＰＩの実行結果を待ってから次にＡＰＩの実行を開始すると、マッシュアップサービスの処理を完了するまで、時間がかかってしまう。そこで、あるＡＰＩの実行結果を待たずに、次にＡＰＩの実行を開始するように、複数のＡＰＩを並列実行させることで、実行時間を短縮することができる。
【０００５】
ただし、複数のＡＰＩを並列実行させてしまうと、問題となる場合もある。例えば、あるＡＰＩの実行結果を、別のＡＰＩが利用するときには、あるＡＰＩの実行結果が返信されていない状態では、その別のＡＰＩは起動できない。このように、複数のＡＰＩを並列実行させられるか否かを、マッシュアップサービスの開発者は逐一検証する必要があり、その手間がかかるために、ＡＰＩの並列実行が不充分であった。
【０００６】
そこで、本発明は、ＡＰＩの呼び出し命令を組み合わせて実行するときに、それらのＡＰＩの実行を効率的に並列化することを、主な課題とする。
【課題を解決するための手段】
【０００７】
前記課題を解決するために、本発明は、ＡＰＩの呼び出し命令が呼び出し順に記載された入力シナリオを受け付け、受け付けた前記入力シナリオから複数のシナリオ部品を抽出するシナリオ入力部と、前記シナリオ入力部により抽出された各シナリオ部品について、そのシナリオ部品に含まれる複数のＡＰＩの呼び出し命令を並列化可能か否かを判定する並列化判定部と、前記並列化判定部により並列化可能と判定された連続する複数のシナリオ部品について、各シナリオ部品に含まれる各ＡＰＩの呼び出し命令を互いに並列に実行するようにして統合した１つのシナリオ部品を作成する統合並列化部と、前記統合並列化部によって作成されたシナリオ部品内の並列実行されるＡＰＩの呼び出し命令と、並列実行されないＡＰＩの呼び出し命令とが区別されて記載される出力シナリオを作成して出力するシナリオ出力部と、を有することを特徴とする。
【０００８】
これにより、並列化判定部がシナリオに含まれる複数のＡＰＩを同時に実行可能か否かを検証するので、開発者は手作業で検証する手間を省くことができ、ＡＰＩの並列実行による性能向上を容易に実現することができる。
【０００９】
本発明は、前記並列化判定部が、各シナリオ部品に含まれるＡＰＩの呼び出し命令の入力パラメータおよび出力パラメータを抽出し、連続する複数のシナリオ部品間のうちの前に実行されるシナリオ部品の出力パラメータが、後に実行されるシナリオ部品の入力パラメータになっていないときに、前記統合並列化部による並列化を可能と判断することを特徴とする。
【００１０】
これにより、パラメータの依存関係にある複数のＡＰＩが、並列化の対象から除外されることで、並列化に伴う誤作動を予防することができる。
【００１１】
本発明は、前記シナリオ並列化装置が、さらに、分岐並列化部を有しており、前記並列化判定部が、並列化判定対象であるシナリオ部品が、分岐命令およびその分岐先で実行される複数のＡＰＩの呼び出し命令を含んでいるときに、前記分岐並列化部による並列化を可能と判断し、前記分岐並列化部が、前記並列化判定部により並列化可能と判定されたシナリオ部品について、そのシナリオ部品に含まれる分岐先で実行される複数のＡＰＩを互いに並列に実行するようにした第１シナリオ部品と、判定されたシナリオ部品に含まれる分岐命令およびその分岐先で実行される前記第１シナリオ部品の実行結果の選択処理を含む第２シナリオ部品を作成し、前記シナリオ出力部が、前記分岐並列化部によって作成された前記第１シナリオ部品と、前記第２シナリオ部品とを前記出力シナリオに含めて出力することを特徴とする。
【００１２】
これにより、分岐先関係にある複数のＡＰＩが、並列化の対象とされることで、分岐判定前に分岐先のＡＰＩを同時に実行できる。
【００１３】
本発明は、前記並列化判定部が、互いに並列に実行するＡＰＩの呼び出し命令の数を制限することを特徴とする。
【００１４】
これにより、並列実行のメリットよりもデメリットが大きい状況においては、無理に並列実行をしなくて済む。
【発明の効果】
【００１５】
本発明によれば、ＡＰＩの呼び出し命令を組み合わせて実行するときに、それらのＡＰＩの実行を効率的に並列化することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施形態に関するシナリオ並列化システムを示す構成図である。
【図２】本発明の一実施形態に関するシナリオ並列化装置の各記憶部を示す構成図である。図２（ａ）は、コンフィグ記憶部の構成を示す。図２（ｂ）は、ＡＰＩ種別記憶部の構成を示す。
【図３】本発明の一実施形態に関する入力シナリオとその並列化過程を示す説明図である。図３（ａ）は、入力シナリオを示す。図３（ｂ）は、図３（ａ）の入力シナリオの並列化過程を示す。
【図４】本発明の一実施形態に関する並列化過程で作成される出力シナリオを示す説明図である。
【図５】本発明の一実施形態に関するシナリオ並列化の全体処理を示すフローチャートである。
【図６】本発明の一実施形態に関するシナリオ入力部のサブルーチン処理を示すフローチャートである。
【図７】本発明の一実施形態に関する並列化判定部のサブルーチン処理を示すフローチャートである。
【図８】本発明の一実施形態に関する統合並列化部のサブルーチン処理を示すフローチャートである。
【図９】本発明の一実施形態に関する各サブルーチン処理を示すフローチャートである。図９（ａ）は、分岐並列化部の処理を示す。図９（ｂ）シナリオ出力部の処理を示す。
【図１０】本発明の一実施形態に関する入力シナリオを示す説明図である。
【図１１】本発明の一実施形態に関するシナリオ記憶部に格納されるシナリオ内容を示す構成図である。
【図１２】本発明の一実施形態に関する図１１のシナリオ内容の並列化過程を示す構成図である。
【図１３】本発明の一実施形態に関する図１２のシナリオ内容の並列化過程を示す構成図である。
【図１４】本発明の一実施形態に関する出力シナリオを示す説明図である。
【発明を実施するための形態】
【００１７】
以下、本発明の一実施形態について、図面を参照して詳細に説明する。
【００１８】
図１は、シナリオ並列化システムを示す構成図である。シナリオ並列化システムは、シナリオ並列化装置１と、コンフィグ入力装置１２と、ＡＰＩ種別入力装置１３とを含めて構成される。
シナリオ並列化装置１は、ＣＰＵ（Central Processing Unit）とメモリとハードディスク（記憶手段）とネットワークインタフェースを有するコンピュータとして構成され、このコンピュータは、ＣＰＵが、メモリ上に読み込んだプログラムを実行することにより、各処理部を動作させる。
コンフィグ入力装置１２と、ＡＰＩ種別入力装置１３とは、シナリオ並列化装置１にデータ入力をするための装置であり、例えば、キーボード、マウス、タッチパネルなどの入力手段を有する。
【００１９】
シナリオ並列化装置１は、シナリオ入力部１１と、シナリオ記憶部２１と、コンフィグ記憶部２２と、ＡＰＩ種別記憶部２３と、シナリオ構成部３０と、シナリオ出力部３４とを含めて構成される。
シナリオ構成部３０は、並列化判定部３１と、統合並列化部３２と、分岐並列化部３３とを含めて構成される。
【００２０】
シナリオ入力部１１は、入力シナリオ８（図１０参照）の入力を受け付けて、シナリオ記憶部２１に格納する（図６参照）。シナリオ入力部１１のデータ入力手段は、例えば、入力シナリオ８の電子ファイルを読み取る方式でもよいし、入力シナリオ８のテキストをユーザに編集させるためのエディタを提供するＧＵＩ（Graphical User Interface）形式でもよい。
コンフィグ記憶部２２には、コンフィグ入力装置１２を介して入力される各コンフィグ内容が記憶される（図２（ａ）参照）。ＡＰＩ種別記憶部２３には、ＡＰＩ種別入力装置１３を介して入力される各ＡＰＩ種別内容が記憶される（図２（ｂ）参照）。
【００２１】
並列化判定部３１は、シナリオ記憶部２１に格納された各シナリオ部品に対して、それぞれ並列化が可能か否かを判定する（図７参照）。その判定結果として、「統合並列化可」、「分岐並列化可」、および、「並列化不可」のいずれかを出力する。
統合並列化部３２は、「統合並列化可」と判定されたシナリオ記憶部２１内の複数のシナリオ部品を１つのシナリオ部品へと統合する旨の並列化処理を行い、その結果をシナリオ記憶部２１に出力する（図８参照）。
分岐並列化部３３は、「分岐並列化可」と判定されたシナリオ記憶部２１内の分岐を含むシナリオ部品を並列化したシナリオ部品へと変換する旨の並列化処理を行い、その結果をシナリオ記憶部２１に出力する（図９（ａ）参照）。
シナリオ出力部３４は、並列化されたシナリオ部品を含むシナリオ記憶部２１内の各部品を元に出力シナリオ９（図１４参照）を作成し、その作成結果を出力する（図９（ｂ）参照）。
【００２２】
図２（ａ）は、コンフィグ記憶部２２の構成を示す。コンフィグ記憶部２２には、各コンフィグ項目ごとに、そのコンフィグ値が対応付けて格納される。
コンフィグ項目「ＡＰＩ実行の最大並列化数」とは、自システムまたは他システムの負荷が大きくなりすぎないように、並列に実行するＡＰＩの上限を規定する項目である。
コンフィグ項目「並列化を検討する最大分岐数」とは、分岐並列化部３３が並列に実行させるＡＰＩ数を抑えるための項目である。
コンフィグ項目「速度重視」とは、「No」であるときには、「分岐並列化可」を行わない指定をさせる項目である。これにより、レスポンスタイムが遅くても良いＡＰＩに対して、ＡＰＩの並列実行をさせずに無駄なＡＰＩ実行を抑制できる。
コンフィグ項目「並列化最小レスポンスタイム」とは、並列化判定されるＡＰＩのレスポンスタイムと比較される閾値である。この並列化最小レスポンスタイムよりも短いＡＰＩを並列実行させないことで、並列実行のメリットよりもデメリットが大きい状況においては、無理に並列実行をしなくて済む。
【００２３】
図２（ｂ）は、ＡＰＩ種別記憶部２３の構成を示す。ＡＰＩ種別記憶部２３には、各ＡＰＩごとに、状態変化有無と、平均レスポンスタイムとが対応付けられている。
「状態変化有無」とは、ＡＰＩの実行前後において、状態変化が発生するか否かを示す。なお、状態変化が発生する動作例として、データ書込動作や、電話やメールなどでユーザに感知される動作が挙げられる。例えば、各ＡＰＩがＲＥＳＴ（非特許文献１参照）に従う場合は、ＧＥＴメソッドは状態変化を発生させず、ＰＯＳＴ，ＰＵＴ，ＤＥＬＥＴＥメソッドは状態変化を発生させる。
「平均レスポンスタイム」とは、ＡＰＩの実行開始（例えば、呼び出し送信時点）から実行終了（例えば、応答受信時点）までのレスポンスタイムの平均値である。ＡＰＩ種別記憶部２３に書き出す平均レスポンスタイムは、事前に当該ＡＰＩを実行して測定したレスポンスタイムの平均値を書き出してもよいし、当該ＡＰＩを実行するたびに測定したレスポンスタイムで平均値を随時更新した値を書き出してもよい。
【００２４】
図３（ａ）は、入力シナリオ８（図１０で後記）からＡＰＩ実行に着目して抜粋した図である。ＡＰＩ実行は、四角で示す処理記号のうちの内部に縦線が２本記載された各処理であり、図３（ａ）では、Ｓ１１，Ｓ１２，Ｓ１４，Ｓ１５が該当する。
入力シナリオ８は、ＡＰＩ呼び出しの組み合わせが記述されるコンピュータのプログラミング言語である。ＡＰＩ呼び出しとは、ソフトウェア部品やソフトウェア機能をイネーブラに実行させるために、イネーブラが外部に提供しているＡＰＩを呼び出す命令である。よって、入力シナリオ８が実行されることで、その入力シナリオ８内に記述されるＡＰＩ呼び出しが次々に実行され、マッシュアップサービスが実現される。
【００２５】
この入力シナリオ８は、シナリオ並列化装置１や他の装置により実行される。
Ｓ１１では、geolocation APIを実行することで、緯度・経度を取得する。
Ｓ１２では、elevation APIを実行することで、高度を取得する。
Ｓ１３では、Ｓ１２で取得した高度が１００ｍを超えるか否かを判定する。Ｓ１３でＹｅｓならＳ１５へ進み、ＮｏならＳ１４へ進む。
Ｓ１４では、map APIを青色指定で実行することで、青色のマークをした地図を格納する。
Ｓ１５では、map APIを赤色指定で実行することで、赤色のマークをした地図を格納する。
以上説明したように、図３（ａ）では、ＡＰＩ実行が３回分順に（Ｓ１１が１回目、Ｓ１２が２回目、「Ｓ１４，Ｓ１５」が３回目）呼び出される。
【００２６】
図３（ｂ）は、図３（ａ）の入力シナリオ８の並列化過程を示す。並列化判定部３１は、１つのシナリオ部品（Ｓ１３，Ｓ１４，Ｓ１５）をシナリオ部品を、分岐命令およびその分岐先で実行される複数のＡＰＩの呼び出し命令を含んでいることにより、「分岐並列化可」と判定する。
そして、分岐並列化部３３は、その判定されたシナリオ部品から、Ｓ１４，Ｓ１５を互いに並列に実行させる第１シナリオ部品と、第１シナリオ部品の実行結果のいずれかを採用する第２シナリオ部品（Ｓ１３，Ｓ１４ｂ，Ｓ１５ｂ）とを作成する。つまり、分岐並列化部３３は、分岐処理（Ｓ１３）の実行順序を組み替える。なお、図３（ｂ）内の破線で囲んだ箇所（Ｓ１４，Ｓ１５）は、互いに並列化された処理を示す。
【００２７】
図４は、図３（ｂ）の後の並列化過程で作成される出力シナリオを示す説明図である。並列化判定部３１は、第１シナリオ部品（Ｓ１２）と、第２シナリオ部品（Ｓ１４，Ｓ１５）とを「統合並列化可」と判定する。
そして、統合並列化部３２は、その判定された２つのシナリオ部品を１つのシナリオ部品として統合する。これにより、統合されたシナリオ部品（Ｓ１２，Ｓ１４，Ｓ１５）は、互いに並列化される。
以上説明したように、図４では、ＡＰＩ実行が２回分順に（Ｓ１１が１回目、「Ｓ１２，Ｓ１４，Ｓ１５」が２回目）呼び出される。よって、図３（ａ）の並列化前の入力シナリオ８と比較すると、ＡＰＩ実行に要する時間が、３回分から２回分へと短縮させることができる。
【００２８】
図５は、シナリオ並列化の全体処理を示すフローチャートである。
Ｓ１０１として、シナリオ入力部１１は、入力シナリオ８から各シナリオ部品を抽出し、その結果をシナリオ記憶部２１に格納する（図６参照）。
Ｓ１０２〜Ｓ１０８として、シナリオ構成部３０は、Ｓ１０１で格納された部品ｋを０から部品数まで順に選択するループを実行する。このループを１回実行するたびに、ｋの値が１つずつ増加される。
Ｓ１０３として、並列化判定部３１は、部品ｋを並列化可能かを判定する（図７参照）。
Ｓ１０４として、シナリオ構成部３０は、Ｓ１０３の判定結果によって、以降の処理を分岐させる。判定結果が「並列化不可」ならＳ１０８に進み、判定結果が「分岐並列化可」ならＳ１０６に進み、判定結果が「統合並列化可」ならＳ１０５に進む。
【００２９】
Ｓ１０５として、統合並列化部３２は、旧部品ｋと旧部品ｋ＋１とを、新部品ｋとして並列化し（図８参照）、処理をＳ１０３に戻す。
Ｓ１０６として、分岐並列化部３３は、旧部品ｋを分岐並列化し、新部品ｋ，ｋ＋１を作成する（図９（ａ）参照）。
Ｓ１０７として、シナリオ構成部３０は、ｋ＝ｋ−１を実行し、処理をＳ１０３に戻す。なお、「Ａ＝Ｂ」は、変数Ａの値としてＢを代入する旨を示すので、「ｋ＝ｋ−１」は、変数ｋの値を１つ減らす旨を示す。
Ｓ１０９として、シナリオ出力部３４は、Ｓ１０２〜Ｓ１０８の実行結果として作成された各部品から、出力シナリオ９を作成して出力する（図９（ｂ）参照）。
【００３０】
図６は、シナリオ入力部１１のサブルーチン処理（Ｓ１０１）を示すフローチャートである。
Ｓ２０１として、シナリオ入力部１１は、各変数を初期化（ｉ＝１；ｊ＝１；ｋ＝０）する。なお、変数ｉはシナリオ部品の切り出し終点箇所を示す変数であり、変数ｊはシナリオ部品の切り出し始点箇所を示す変数であり、変数ｋは切り出したシナリオ部品の部品数を示す変数である。
Ｓ２０２として、シナリオ入力部１１は、シナリオのｉ行目を読み込む。
【００３１】
Ｓ２０３として、シナリオ入力部１１は、シナリオのｉ行目と、入力シナリオ８のプログラミング言語における条件分岐構造（ｉｆ文やｓｗｉｔｃｈ文などの条件により移行の処理が異なる構造）との関係によって、以下のように処理を分岐させる。
シナリオのｉ行目が、条件分岐ブロックの始点記号「｛」を含むことで、条件分岐の開始行であるなら、Ｓ２２１に進む。
シナリオのｉ行目が、条件分岐ブロックの終点記号「｝」を含むことで、条件分岐の終了行であるなら、Ｓ２２２に進む。
シナリオのｉ行目が、条件分岐ブロックの内側（始点記号より後で、終点記号より前）であるなら、Ｓ２３１に進む。
シナリオのｉ行目が、条件分岐ブロックの外側（開始行、終了行、内側のどれにも該当しない場合）であるなら、Ｓ２１１に進む。
【００３２】
Ｓ２１１として、シナリオ入力部１１は、ｉ行目でＡＰＩを実行するか否かを判定する。Ｓ２１１でＹｅｓならＳ２１２へ進み、ＮｏならＳ２３１へ進む。
Ｓ２１２として、シナリオ入力部１１は、ｊ＝＝ｉ（変数ｊの値と変数ｉの値とが等しい）か否かを判定する。Ｓ２１２でＹｅｓならＳ２１４へ進み、ＮｏならＳ２１３へ進む。
Ｓ２１３として、シナリオ入力部１１は、ｊ行目からｉ−１行目を新たな部品ｋとして切り出して、シナリオ記憶部２１に保存する。そして、部品数が１つ増えたので、ｋ＝ｋ＋１する。
Ｓ２１４として、シナリオ入力部１１は、ｉ行目を新たな部品ｋとして切り出して、シナリオ記憶部２１に保存する。そして、部品数が１つ増えたので、ｋ＝ｋ＋１する。
【００３３】
Ｓ２１５として、シナリオ入力部１１は、ｊ＝ｉ＋１する。
Ｓ２２１として、シナリオ入力部１１は、ｊ＝ｉする。
Ｓ２２２として、シナリオ入力部１１は、ｊ行目からｉ行目を新たな部品ｋとして切り出して、シナリオ記憶部２１に保存する。そして、部品数が１つ増えたので、ｋ＝ｋ＋１する。
Ｓ２３１として、シナリオ入力部１１は、ｉ＝ｉ＋１する。
Ｓ２３２として、シナリオ入力部１１は、入力シナリオ８にｉ行目が存在するか否かを判定する。Ｓ２３２でＹｅｓならＳ２０２へ戻り、Ｎｏなら図６の処理を終了し、メイン処理へと戻る。
【００３４】
以上説明した図６の処理により、１階層の条件分岐がある場合、その内側にあるシナリオがシナリオ部品として切り出される。さらに、「ｉｆ｛ｉｆ｛処理Ｘ｝｝」など、条件分岐が入れ子（２階層以上）となるシナリオについては、図５の処理結果である出力シナリオ９の各部品をそれぞれ新たな入力シナリオ８として、繰り返し再帰的に図５の処理を行うことにより、内側にあるシナリオ（処理Ｘ）をシナリオ部品として切り出すことができる。
【００３５】
図７は、並列化判定部３１のサブルーチン処理（Ｓ１０３）を示すフローチャートである。このサブルーチンは、並列化判定対象である部品ｋを、呼び出し時の入力パラメータとする。
Ｓ３０１として、並列化判定部３１は、部品ｋは条件分岐を含むか否かを判定する。Ｓ３０１でＹｅｓならＳ３１１へ進み、ＮｏならＳ３２１へ進む。
【００３６】
Ｓ３１１〜Ｓ３１４は、「分岐並列化可」か否かの判定処理である。並列化判定部３１は、以下の４要件を全て満たす（Ｙｅｓ）ときに、部品ｋを「分岐並列化可」と判定する。一方、４要件のうち１つでも満たさない要件があれば、並列化判定部３１は、部品ｋを「並列化不可」と判定する。
・Ｓ３１１で、コンフィグ記憶部２２の「速度重視」が「Yes」である。
・Ｓ３１２で、部品ｋの並列化数が、コンフィグ記憶部２２の「並列化を検討する最大分岐数」以下である。
・Ｓ３１３で、部品ｋに含まれる全ＡＰＩについて、ＡＰＩ種別記憶部２３の「状態変化有無」列が「なし」である。
・Ｓ３１４で、部品ｋに含まれる各ＡＰＩの平均レスポンスタイム（ＡＰＩ種別記憶部２３内）の最大値が、コンフィグ記憶部２２の「並列化最小レスポンスタイム」より大きい。
【００３７】
Ｓ３２１，Ｓ３２２は、「統合並列化可」か否かの判定処理である。並列化判定部３１は、以下の２要件を同時に満たす（Ｙｅｓ）ときに、部品ｋを「統合並列化可」と判定する。一方、２要件のうち１つでも満たさない要件があれば、並列化判定部３１は、部品ｋを「並列化不可」と判定する。
・Ｓ３２１で、部品ｋの並列化数が、コンフィグ記憶部２２の「ＡＰＩ実行の最大並列化数」以下である。
・Ｓ３２２で、部品ｋと部品ｋ＋１との間に入出力の依存がない。つまり、部品ｋの出力パラメータが、１つも部品ｋ＋１の入力パラメータになっていない。
以上説明した「分岐並列化可」の４要件のうちのＳ３２２の要件を除いた３要件、および、「統合並列化可」の２要件は、必ずしもこれらの全ての要件を満たさなくても並列化可として判断してもよい。例えば、要件数を減らしてもよいし、要件間のＡＮＤ条件（すべてを満たす）の代わりに、ＯＲ条件（いずれかを満たす）により、並列化可否を判断してもよい。一方、Ｓ３２２の要件（入出力パラメータの依存関係の要件）は、統合並列化を行うときには、必ず満たす必要がある。
【００３８】
図８は、統合並列化部３２のサブルーチン処理（Ｓ１０５）を示すフローチャートである。このサブルーチンは、並列化対象である部品ｋを、呼び出し時の入力パラメータとする。
Ｓ４０１として、統合並列化部３２は、旧部品ｋ，ｋ＋１を並列化し、新たに部品ｋとする。
Ｓ４０２〜Ｓ４０４として、統合並列化部３２は、部品ｍをｋ＋２から部品数まで順に選択するループを実行する。このループを１回実行するたびに、ｍの値が１つずつ増加される。
Ｓ４０３として、統合並列化部３２は、旧部品ｍを新部品ｍ−１とする。つまり、部品の格納位置を１つずらす。
【００３９】
図９（ａ）は、分岐並列化部３３のサブルーチン処理（Ｓ１０６）を示すフローチャートである。このサブルーチンは、並列化対象である部品ｋを、呼び出し時の入力パラメータとする。
Ｓ５０１〜Ｓ５０３として、分岐並列化部３３は、部品ｍを部品数からｋまで逆順に選択するループを実行する。このループを１回実行するたびに、ｍの値が１つずつ減少される。
Ｓ５０２として、分岐並列化部３３は、旧部品ｍを新部品ｍ＋１とする。つまり、部品の格納位置を１つずらす。
Ｓ５０４として、分岐並列化部３３は、旧部品ｋから、新部品ｋ，ｋ＋１を作成する。新部品ｋは、旧部品ｋ内の条件分岐の各条件におけるＡＰＩ実行を並列化したものである。新部品ｋ＋１は、旧部品ｋの条件分岐を抽出し、条件に応じて新部品ｋのＡＰＩ実行結果を選択する操作を追加したものである。
【００４０】
図９（ｂ）は、シナリオ出力部３４のサブルーチン処理（Ｓ１０９）を示すフローチャートである。
Ｓ６０１〜Ｓ６０３として、シナリオ出力部３４は、部品ｍを１から部品数まで順に選択するループを実行する。このループを１回実行するたびに、ｍの値が１つずつ増加される。
Ｓ６０２として、シナリオ出力部３４は、部品ｍをシナリオとして書き出す。
【００４１】
図１０は、入力シナリオ８を示す説明図である。この入力シナリオ８は、上から順に実行するプログラミング言語であり、その言語文法は、JavaScript（登録商標）に準拠する。例えば、演算子「＝」は代入文を示し、演算子「＝＝」は、両辺が等しいか否かの判定文を示し、記号「／／」以降は、実行をしないコメント文を示す。
図１０と図３（ａ）との対応関係について、「resp_A =」の代入文はＳ１１に対応し、「resp_B =」の代入文はＳ１２に対応し、「if (resp_B[elevation] > 100)」の判定文はＳ１３に対応し、判定文でYesのときの「resp_C =」の代入文はＳ１５に対応し、判定文でNoのときの（else以下の）「resp_C =」の代入文はＳ１４に対応する。
【００４２】
図１１は、図１０の入力シナリオ８をもとに、シナリオ記憶部２１に格納されるシナリオ内容を示す構成図である。シナリオ内容は、部品ＩＤ（変数ｋが示すもの）と、入力シナリオ８から切り出されたコードと、そのコード内の関数実行についての入力パラメータと、出力パラメータとが対応付けられて構成される。
シナリオ入力部１１は、入力シナリオ８から切り出されたコード内の関数（httpGet）の右側かっこ内に記載される入力パラメータ（var[address]など）と、関数（httpGet）の左側（関数返却値の代入先）に記載される出力パラメータ（resp_Aなど）を抽出して、シナリオ記憶部２１に格納する。なお、「httpGet」関数は、引数として指定された括弧内で示すＡＰＩを実行する関数である。
【００４３】
図１２は、図３（ｂ）に対応し、図１１のシナリオ内容の並列化過程を示す構成図である。図３（ｂ）で説明したように、図１１の部品３が、図１２では部品３，４へと分岐並列化される。ここで、部品３内の「parallelExec」は、並列化するか否かを示すキーワードである。
parallelExecの内側に記載される各処理は、そのうちの前処理の実行完了を待たずに、次処理を実行する（非同期処理）。
parallelExecの外側に記載される各処理は、そのうちの前処理の実行完了を待ってから、次処理を実行する（同期処理）。
【００４４】
図１３は、図４に対応し、図１２のシナリオ内容の並列化過程を示す構成図である。図４で説明したように、図１２の部品２，３が、図１２では部品２へと統合並列化される。
図１４は、出力シナリオ９を示す説明図である。シナリオ出力部３４は、図１３のコード内容を部品順に出力シナリオ９として書き出す。出力シナリオ９は、入力シナリオ８と同じ実行可能な形式であり、かつ、「parallelExec」で並列化されるブロックを含んでいる。
【００４５】
以上説明した本実施形態では、シナリオ並列化装置１が、入力シナリオ８に記載される複数のＡＰＩを効率的に並列化することを特徴とする。
そのため、並列化判定部３１は、シナリオ記憶部２１から部品化された入力シナリオ８を読み取り、部品内の複数のＡＰＩを並列化できるか否かを判定する。そして、統合並列化部３２および分岐並列化部３３は、それぞれ並列化判定部３１の判定結果に従い、部品内のＡＰＩを並列化する。
これにより、マッシュアップサービスの開発者がシナリオを作成する際に、シナリオに含まれる複数のＡＰＩを同時に実行可能か否かを手作業で検証する手間を省くことができ、ＡＰＩの並列実行による性能向上を容易に実現することができる。
【符号の説明】
【００４６】
１      シナリオ並列化装置
８      入力シナリオ
９      出力シナリオ
１１    シナリオ入力部
１２    コンフィグ入力装置
１３    ＡＰＩ種別入力装置
２１    シナリオ記憶部
２２    コンフィグ記憶部
２３    ＡＰＩ種別記憶部
３０    シナリオ構成部
３１    並列化判定部
３２    統合並列化部
３３    分岐並列化部
３４    シナリオ出力部
【図１】
2015153085.tif 000003
【図２】
2015153085.tif 000004
【図３】
2015153085.tif 000005
【図４】
2015153085.tif 000006
【図５】
2015153085.tif 000007
【図６】
2015153085.tif 000008
【図７】
2015153085.tif 000009
【図８】
2015153085.tif 000010
【図９】
2015153085.tif 000011
【図１０】
2015153085.tif 000012
【図１１】
2015153085.tif 000013
【図１２】
2015153085.tif 000014
【図１３】
2015153085.tif 000015
【図１４】
2015153085.tif 000016