(57)【要約】【課題】プログラムから他のプログラムを呼び出して実行することにかかるユーザの作業負荷を低減することを課題とする。【解決手段】情報処理サーバは、プログラム、データ種類及びデータ型の指定を受け付ける。続いて、情報処理サーバは、プログラムが実行する処理の対象データのデータ型を該プログラム及び該データのデータ種類に対応付ける情報を記憶する記憶部を参照して、指定されたプログラム及びデータ種類に対応付けられたデータ型を特定する。そして、情報処理サーバは、特定したデータ型を、指定されたプログラム及びデータ型に対応付ける情報を生成する。【選択図】図１
2019160243.tif 000002
【特許請求の範囲】
【請求項１】
プログラム、データ種類及びデータ型の指定を受け付け、
プログラムが実行する処理の対象データのデータ型を該プログラム及び該データのデータ種類に対応付ける情報を記憶する記憶部を参照して、指定された前記プログラム及び前記データ種類に対応付けられたデータ型を特定し、
特定した前記データ型を、指定された前記プログラム及び前記データ型に対応付ける情報を生成する、
処理をコンピュータに実行させることを特徴とする制御プログラム。
【請求項２】
前記情報は、前記プログラムがコンパイルされたことに応じて生成されるデバッグ情報であることを特徴とする請求項１に記載の制御プログラム。
【請求項３】
第１のプログラムから呼び出される第２のプログラムのデバッグ情報へのアクセス先を特定する型情報を、前記第１のプログラムから受け付け、
前記型情報を利用して前記第２のプログラムのデバッグ情報を参照し、前記第１のプログラムのデータ型と前記第２のプログラムのデータ型とを対応付ける処理を、前記コンピュータに実行させることを特徴とする請求項１に記載の制御プログラム。
【請求項４】
前記第１のプログラムから、前記第２のプログラムへの引数を前記第１のプログラムのデータ型で取得し、
前記デバッグ情報を用いて、前記引数を前記第１のプログラムのデータ型から前記第２のプログラムのデータ型に変換し、
前記第２のプログラムのデータ型に変換された引数を前記第２のプログラムに通知して、前記第２のプログラムの実行結果を取得し、
前記デバッグ情報を用いて、前記第２のプログラムの実行結果を、前記第２のプログラムのデータ型から前記第２のプログラムのデータ型に変換し、
前記第１のプログラムのデータ型に変換された実行結果を前記第１のプログラムに応答する処理を、前記コンピュータに実行させることを特徴とする請求項３に記載の制御プログラム。
【請求項５】
他のプログラムから参照可能な記憶領域に格納される前記第２のプログラムへの引数を参照するための参照変数を、前記第２のプログラムに通知して、前記第２のプログラムを実行し、
前記第２のプログラムの実行結果を、前記記憶領域から取得して、前記第１のプログラムに応答する処理を、前記コンピュータに実行させることを特徴とする請求項４に記載の制御プログラム。
【請求項６】
プログラム、データ種類及びデータ型の指定を受け付け、
プログラムが実行する処理の対象データのデータ型を該プログラム及び該データのデータ種類に対応付ける情報を記憶する記憶部を参照して、指定された前記プログラム及び前記データ種類に対応付けられたデータ型を特定し、
特定した前記データ型を、指定された前記プログラム及び前記データ型に対応付ける情報を生成する、
処理をコンピュータが実行することを特徴とする制御方法。
【請求項７】
プログラム、データ種類及びデータ型の指定を受け付ける受付部と、
プログラムが実行する処理の対象データのデータ型を該プログラム及び該データのデータ種類に対応付ける情報を記憶する記憶部を参照して、指定された前記プログラム及び前記データ種類に対応付けられたデータ型を特定する特定部と、
特定した前記データ型を、指定された前記プログラム及び前記データ型に対応付ける情報を生成する生成部と、
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラム、制御方法および情報処理装置に関する。
【背景技術】
【０００２】
近年、COBOLで記述された業務アプリケーション（以下では、COBOLアプリケーションと記載する場合がある）がモバイル端末で利用されている。COBOLアプリケーションはモバイル端末上で直接動作することができないので、サーバ上で動作するRESTサービスを用いることで、モバイル端末からCOBOLプログラムを間接的に実行することが行われている。
【０００３】
一般的に、RESTサービスを生成するには、RESTサービスを生成するためのフレームワークが利用され、例えばＣ＃言語やＶＢ（Visual  Basic）などを用いて生成される。このため、COBOLプログラムをRESTサービスで用いるためには、フレームワーク上で動作する、Ｃ＃言語やＶＢなどで生成されたRESTサービスからCOBOLプログラムの呼び出しが実行される。この呼び出しに関する技術として、呼び出し対象のCOBOLプログラムの引数を、フレームワークと共通の型にする技術が知られている。また、フレームワークのデータ型とCOBOLのデータ型を変換し、変換されたCOBOLデータ型を利用して、COBOLプログラムを呼び出すプログラムであるブリッジプログラムを利用する技術が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２０１７−５２３５０６号公報
【特許文献２】特開平０５−３０７４７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記技術では、モバイル端末で直接実行できないCOBOLプログラムなどのプログラムを、RESTサービスを利用して実行するために、ユーザが呼出用のプログラムやデータ型変換用の各プログラムを作成することになるので、ユーザの作業負荷が高い。
【０００６】
例えば、共通の型を用いる上記技術では、ユーザがCOBOL資産に変更を加えなければならないが、すでに安定稼働しているプログラムに変更を行うことはユーザにとってリスクが高く、他のプログラムなどへの影響を検証するなどの副次的な作業の負荷が高くなる。
【０００７】
また、ブリッジプログラムを用いる上記技術では、COBOL資産への変更は発生しないが、ブリッジプログラムの生成や更新にかかる作業負荷が高い。例えば、ブリッジプログラムには、静的型変換を行うブリッジプログラムと動的型変換を行うブリッジプログラムとが考えられる。なお、静的型変換を行うブリッジプログラムは、ウィザード等でユーザに情報を入力させ、型変換処理を含むブリッジプログラムのソースコードを生成するツールや機能を提供する手法である。動的型変換を行うブリッジプログラムは、プログラム実行時に、動的に情報を取得してCOBOL以外の他のプログラミング言語のデータ型とCOBOLの独自データ型の変換を行うことにより、動的なプログラム呼び出しを行うブリッジプログラムをライブラリとして提供する手法である。
【０００８】
しかし、静的型変換を行うブリッジプログラムでは、呼び出し対象であるCOBOLプログラムのインタフェース毎にブリッジプログラムのソースコードを生成することになり、COBOLプログラムのインタフェースに変更があった場合には、生成コードを最初から再生成することになるので、ユーザの資産管理コストが増大する。
【０００９】
また、動的型変換を行うブリッジプログラムでは、リフレクションを利用して、プログラム実行時に呼び出し対象のCOBOLプログラムのメタデータの解析が行われるが、メタデータのみでは、COBLOの独自的なデータ型（独自型）を変換することが難しい。また、リフレクションを利用しない場合は、変換ルール等の定義を用意し、その定義に沿った単純な変換しかできないので、現実的ではない。
【００１０】
一つの側面では、プログラムから他のプログラムを呼び出して実行することにかかるユーザの作業負荷を低減することができる制御プログラム、制御方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
第１の案では、制御プログラムは、コンピュータに、プログラム、データ種類及びデータ型の指定を受け付ける処理を実行させる。制御プログラムは、コンピュータに、プログラムが実行する処理の対象データのデータ型を該プログラム及び該データのデータ種類に対応付ける情報を記憶する記憶部を参照して、指定された前記プログラム及び前記データ種類に対応付けられたデータ型を特定する処理を実行させる。制御プログラムは、コンピュータに、特定した前記データ型を、指定された前記プログラム及び前記データ型に対応付ける情報を生成する処理を実行させる。
【発明の効果】
【００１２】
一実施形態によれば、プログラムから他のプログラムを呼び出して実行することにかかるユーザの作業負荷を低減することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１にかかる情報処理システムの全体構成例を示す図である。
【図２】図２は、実施例１にかかる情報処理サーバの機能構成を示す機能ブロック図である。
【図３】図３は、デバッグ情報の一例を説明する図である。
【図４】図４は、集団項目を説明する図である。
【図５】図５は、COBOL型へのデータ変換例を説明する図である。
【図６】図６は、全体的な処理の流れを示すフローチャートである。
【図７】図７は、引数の設定処理の流れを示すフローチャートである。
【図８】図８は、呼出処理の流れを示すフローチャートである。
【図９】図９は、COBOLデータ型への変換処理の流れを示すフローチャートである。
【図１０】図１０は、呼出側のデータ型への変換処理の流れを示すフローチャートである。
【図１１】図１１は、効果を説明する図である。
【図１２】図１２は、実施例２にかかる情報処理サーバを説明する図である。
【図１３】図１３は、実行ユニットが保持するデータの変化例を説明する図である。
【図１４】図１４は、データ共有化による処理負荷の軽減を説明する図である。
【図１５】図１５は、ブリッジプログラムによる処理負荷の増大を説明する図である。
【図１６】図１６は、ハードウェア構成例を説明する図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する制御プログラム、制御方法および情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
【実施例１】
【００１５】
［全体構成］
図１は、実施例１にかかる情報処理システムの全体構成例を示す図である。この情報処理システムは、モバイル端末１と、情報処理サーバ１０と、COBOLプログラム５を保持する記憶装置などを有するシステムである。この情報処理システムは、モバイル端末１からの要求に応じて、ユーザ等によって作成されたRESTサービスのアプリケーション（REST  API（Application  Programming  Interface）  プログラム）からCOBOLプログラム５を間接的に実行するシステムである。
【００１６】
モバイル端末１は、小型軽量で持ち運ぶことができる情報端末であり、例えばスマートフォンや携帯端末などの通信端末の一例である。このモバイル端末１は、ユーザ等によって作成されたプログラム１ａを実行し、情報処理サーバ１０を介したRESTサービスによって、COBOLプログラム５を間接的に実行する。プログラム１ａは、Ｃ＃言語、Ｊａｖａ（登録商標）、Ｓｗｉｆｔ（登録商標）などで記述されたプログラムであり、呼出対象のCOBOLプログラム５を呼び出すREST  API  プログラムを、HTTP（Hypertext  Transfer  Protocol）通信を利用して呼び出して実行するプログラムである。
【００１７】
COBOLプログラム５は、価格計算など各種処理内容５ａがCOBOLで記述されたプログラムである。COBOLプログラム５は、モバイル端末１のプログラム１ａから要求を受け付けたREST  API  プログラムによって呼び出されて各処理内容５ａを実行し、REST  API  プログラムを介して、実行結果をプログラム１ａに応答する呼出対象のプログラムである。また、コンパイラ等によって、COBOLプログラム５のコンパイル時にデバッグ情報５ｂが出力される。このデバッグ情報５ｂは、例えば、実行バイナリのデータ構造（構造体や型情報）とコード構造（関数やサブルーチンなど）、ローカル変数や引数の情報などを含む。また、デバッグ情報５ｂは、COBOLプログラム５内またはコンパイラ等によって指定された領域（出力先）に出力されて保存される。
【００１８】
情報処理サーバ１０は、モバイル端末１のプログラム１ａに対して、COBOLプログラム５による各種処理を実行するRESTサービスを提供するサーバ装置の一例である。この情報処理サーバ１０は、呼出対象のプログラムの型情報を受け付ける。そして、情報処理サーバ１０は、呼出対象のプログラムのデバッグ情報を参照して、呼出対象のプログラムが実行する処理の対象データのデータ型を特定する。その後、情報処理サーバ１０は、特定したデータ型を、呼出対象のプログラム等に対応付ける情報を生成する。
【００１９】
具体的には、情報処理サーバ１０は、REST  API  プログラム、実行ユニット、呼出側データ変換器、COBOL側データ変換器を有する。REST  API  プログラムは、モバイル端末１からCOBOLプログラム５を利用するためのアプリケーションであり、呼出元のプログラムである。なお、REST  APIとは、RESTと呼ばれる規約に従って作成されたAPIであり、APIとは、ある目的のために作成されたプログラム（ここではCOBOLプログラム５）を他のソフトウェア（ここではモバイル端末１のプログラム１ａ）から利用可能にするものである。また、REST  API  プログラムとは、HTTP通信を受信し、ロジックを実行（ここでは実行ユニットを介してCOBOLを実行）し、処理した結果のデータを返すアプリケーションである。
【００２０】
実行ユニットは、COBOLプログラム５の呼出関数を有する。この実行ユニットは、モバイル端末１のプログラム１ａの要求に応じて実行されたREST  API  プログラムからの要求に応じてCOBOLプログラム５を実行し、その結果をREST  API  プログムに返す。そして、REST  API  プログラムが、COBOLプログラム５の結果を利用して、モバイル端末１のプログラム１ａにデータを返す。呼出側データ変換器は、デバッグ情報５ｂから取得したCOBOLプログラム５のデバッグ情報５ｂ（例えば型情報など）にしたがって、COBOLプログラム５のデータ型をREST  API  プログラムのデータ型に変換する。COBOL側データ変換器は、デバッグ情報５ｂから取得したCOBOLプログラム５のデバッグ情報５ｂ（例えば型情報など）にしたがって、REST  API  プログラムのデータ型をCOBOLプログラム５のデータ型に変換する。
【００２１】
ここで、実施例１にかかるRESTサービスの流れを具体的に説明する。まず、モバイル端末１のプログラム１ａが、REST  API  アプリケーションに要求を送る。続いて、REST  API  アプリケーションが、デバッグ情報のアクセスに必要な型情報（リフレクションのための情報）を指定して、情報処理サーバ１０の実行ユニットに通知する。その後、プログラム１ａが、情報処理サーバ１０の実行ユニットにCOBOLプログラム５に渡す引数をREST  API  プログラムのデータ型で渡す。
【００２２】
そして、情報処理サーバ１０の実行ユニットが、COBOL側データ変換器を利用して、受け取ったREST  API  プログラムのデータ型をCOBOLのデータ型に変換して保持する。
【００２３】
その後、モバイル端末１のプログラム１ａが、情報処理サーバ１０のREST  API  プログラムに対して、HTTPリクエスト（要求）を行い、要求を受けたREST  API  プログラムが、実行ユニットが有するCOBOLプログラム５の呼出関数を実行する。すると、情報処理サーバ１０の実行ユニットが、COBOLデータ型を引数にしてCOBOLプログラム５を呼び出す。この結果、COBOLプログラム５が実行される。
【００２４】
その後、情報処理サーバ１０の実行ユニットが、COBOLプログラム５から、COBOLのデータ型の復帰値を受け取る。続いて、情報処理サーバ１０の実行ユニットが、呼出側データ変換器を利用して、COBOLプログラム５のデータ型である復帰値をREST  API  プログラムのデータ型に変換する。そして、情報処理サーバ１０の実行ユニットが、REST  API  プログラムのデータ型に変換された復帰値を、REST  API  プログラムに返す。その後、REST  API  プログラムからモバイル端末１のプログラム１ａに、型変換された復帰値が返される。
【００２５】
このようにして、情報処理サーバ１０が、モバイル端末１の要求に応じてCOBOLプログラム５を呼び出して実行し、実行結果を取得してモバイル端末１に応答する。したがって、COBOLプログラム５の引数の型が変更されたとしても、実行時に呼出対象のCOBOLプログラム５のとりうる値の範囲を動的に取得して型変換を行うことができるので、引数の値がとりうる値の範囲内であればREST  API  プログラムやプログラム１ａ側に変更を加えることもない。この結果、プログラムから他のプログラムを呼び出して実行することにかかるユーザの作業負荷を低減することができる。
【００２６】
［機能構成］
次に、図１に示した各装置の機能構成について説明する。なお、モバイル端末１は、一般的なスマートフォンなどと同様の構成を有するので、ここでは、情報処理サーバ１０について説明する。
【００２７】
図２は、実施例１にかかる情報処理サーバ１０の機能構成を示す機能ブロック図である。図２に示すように、情報処理サーバ１０は、通信部１１、記憶部１２、制御部２０を有する。
【００２８】
通信部１１は、有線や無線を問わず、他の装置の間の通信を制御する処理部であり、例えばユーザによって生成される上記REST  API  プログラムに対応する。通信部１１は、モバイル端末１と間の各種情報の送受信やCOBOLプログラム５と間の各種情報の送受信を実行する。
【００２９】
記憶部１２は、データやプログラムなどを記憶する記憶装置の一例であり、例えばメモリやハードディスクなどである。この記憶部１２は、COBOLデータ記憶部１３と型情報記憶部１４を有する。
【００３０】
COBOLデータ記憶部１３は、COBOLプログラム５に渡す引数（引数データ）を記憶する。型情報記憶部１４は、COBOLプログラム５の型情報を記憶する。これらの記憶部は、例えばメモリが有する記憶領域の一部などの一例である。
【００３１】
制御部２０は、情報処理サーバ１０全体を司る処理部であり、例えばプロセッサなどである。この制御部２０は、実行ユニット処理部２１、第１変換部２２、第２変換部２３を有する。なお、実行ユニット処理部２１、第１変換部２２、第２変換部２３は、プロセッサが実行するプロセスの一例などである。また、実行ユニット処理部２１は、図１に示した実行ユニットに対応し、第１変換部２２は、図１に示したCOBOL側データ変換器に対応し、第２変換部２３は、図１に示した呼出側データ変換器に対応する。
【００３２】
実行ユニット処理部２１は、COBOLプログラム５の呼出やデータ変換などを行う実行ユニットを実行する処理部であり、生成部２１ａ、設定部２１ｂ、呼出部２１ｃ、取得部２１ｄを有する。
【００３３】
生成部２１ａは、指定したCOBOLプログラムを実行するための実行ユニットを生成または実行ユニットの設定を実行する処理部である。具体的には、生成部２１ａは、プログラム１ａでリフレクション機能を利用するには型情報を用いるので、例えば実行ユニットのプロセス生成時に呼び出し対象のCOBOLプログラム５の型情報を指定する。例えば、生成部２１ａは、REST  API  プログラムから受け付けた型情報がCOBOLプログラム５の型情報か否かを判定する。そして、生成部２１ａは、型情報がCOBOLプログラム５の型情報である場合は、実行ユニットのプログラム等に型情報を設定する。一方、生成部２１ａは、型情報がCOBOLプログラム５の型情報ではない場合は、実行時エラー等を出力する。
【００３４】
設定部２１ｂは、実行ユニットにCOBOLプログラム５へ渡す引数データを設定する処理部である。設定部２１ｂは、対象引数のシンボル名とREST  API  プログラムのデータ型を引数にし、処理内でREST  API  プログラムのデータ型をCOBOLのデータ型に変換し、実行ユニットに保持させる。
【００３５】
例えば、設定部２１ｂは、REST  API  プログラムから引数データを受け付けると、COBOLデータ記憶部１３に格納する。そして、設定部２１ｂは、COBOLプログラム５のデバッグ情報を取得し、デバッグ情報を利用したデータの型変換処理を第１変換部２２（COBOL側データ変換器）に要求する。その後、設定部２１ｂは、実行ユニットが有する動的型付け変数に、COBOLデータを設定する。
【００３６】
ここで、COBOLプログラム５のデバッグ情報５ｂの一例を説明する。図３は、デバッグ情報の一例を説明する図である。図３には、税込み価格を計算するCOBOLプログラムを呼び出す際の具体例を示し、プログラムの引数は１つで、価格という引数名の符号なし９ケタの数値（PIC9（9））とする。図３に示すように、COBOLプログラム５のデバッグ情報５ｂは、シンボル名とデータの分類とバイト数などを含む。シンボル名、引数データ型の分類は、数字・文字・特定のデータの持ち方をする数字などを指定する情報であり、バイト数は、引数データのバイト数を表す。図５の例では、シンボル名は「価格」であり、データの分類は「ZoneDecimal」であり、バイト数が「９」である。
【００３７】
呼出部２１ｃは、生成部２１ａで実行ユニットに指定したCOBOLプログラム５を、設定部２１ｂによって設定された引数データを利用して呼び出す処理部である。呼出部２１ｃは、呼び出し対象のCOBOLプログラム５の引数と実行ユニットがもつ引数とのマッピングを、引数名やデバッグ情報の持つ型情報などを用いて実行する。また、呼出部２１ｃは、COBOLプログラム５からの戻り値を取得するために、呼び出し時に戻り値のデータ型（REST  API  プログラムのデータ型）を指定する。そして、データ型が指定された場合、COBOLプログラム５の戻り値は、指定されたデータ型に変換される。
【００３８】
取得部２１ｄは、実行ユニットが保持する引数のCOBOLのデータ型を、REST  API  プログラムのデータ型で取得する処理部である。具体的には、取得部２１ｄは、取得時には、取得対象の引数のシンボル名と、受け取るREST  API  プログラムのデータ型を指定する。例えば、取得部２１ｄは、シンボル名と受け取り型の指定を受け付けると、デバッグ情報を利用したデータの型変換処理を第２変換部２３（呼出側データ変換器）に要求する。その後、取得部２１ｄは、REST  API  プログラムのデータ型に変換された値を第２変換部２３から取得して、プログラム１ａに応答する。
【００３９】
第１変換部２２は、デバッグ情報５ｂを利用して、REST  API  プログラムのデータ型をCOBOLプログラム５のデータ型に変換する処理部である。第２変換部２３は、デバッグ情報５ｂと変換先のREST  API  プログラムの型情報とを利用して、COBOLプログラム５のデータ型をREST  API  プログラムのデータ型に変換する処理部である。
【００４０】
また、各変換部は、集団項目のような構造体についてもデータ型の変換を実行することができる。図４は、集団項目を説明する図である。図４に示すように、データ全体として、社員情報が名前と年齢と所属とを有し、さらに所属が人事部や総務部などを有する場合がある。このような場合であっても、例えば第１変換部２２は、名前、年齢、所属だけではなく、子要素である人事部や総務部等についても、デバッグ情報を利用して、REST  API  プログラムのデータ型からCOBOLプログラム５のデータ型に変換する。
【００４１】
ここで、COBOLプログラムのデータ型へのデータ変換について説明する。図５は、COBOL型へのデータ変換例を説明する図である。図５に示すように、第１変換部２２がデバッグ情報を利用したデータ型変換を行うことで、REST  API  プログラムにおける「Int32」型の値「100」は、COBOLプログラム５における「PIC9（9）」型の内部表現である値［48,48,48,48,48,48,49,48,48］、外部表現である値［100］に変換される。なお、COBOLには内部表現（バイト配列）と外部表現があり、同じ外部表現の数字でも、型により内部表現が変わったり、バイト数が異なることがある。
【００４２】
［処理の流れ］
次に、情報処理サーバ１０が実行する処理の流れについて説明する。ここでは、全体的な処理の流れ、各処理部が実行する各処理の流れについて説明する。
【００４３】
（全体的な処理）
図６は、全体的な処理の流れを示すフローチャートである。図６に示すように、情報処理サーバ１０は、実行ユニットの生成処理を実行し（Ｓ１０１）、引数の設定処理を実行し（Ｓ１０２）、COBOLプログラム５の呼出処理を実行する（Ｓ１０３）。
【００４４】
その後、情報処理サーバ１０は、与えられたデータが値域の範囲内である場合（Ｓ１０４：Ｙｅｓ）、処理を終了し、与えられたデータが値域の範囲内ではない場合（Ｓ１０４：Ｎｏ）、実行時エラーを出力する（Ｓ１０５）。
【００４５】
（引数の設定処理）
図７は、引数の設定処理の流れを示すフローチャートである。この処理は、図６のＳ１０２に該当する処理であり、呼出対象のCOBOLプログラム５に渡すデータ型の引数を実行ユニットに設定する処理である。図７に示すように、設定部２１ｂは、モバイル端末１のプログラム１ａから引数データに関する情報を受け付けると、与えられた引数名に対応するデバッグ情報があるか否かを判定する（Ｓ２０１）。
【００４６】
そして、設定部２１ｂは、与えられた引数名に対応するデバッグ情報がある場合（Ｓ２０１：Ｙｅｓ）、COBOLプログラム５のデバッグ情報を取得する（Ｓ２０２）。続いて、設定部２１ｂの要求等によって、COBOLプログラム５のデータ型への変換処理が実行される（Ｓ２０３）。その後、設定部２１ｂは、実行ユニットのもつ動的型付け変数にCOBOLのデータを設定する（Ｓ２０４）。一方、設定部２１ｂは、与えられた引数名に対応するデバッグ情報がない場合（Ｓ２０１：Ｎｏ）、エラーを出力する（Ｓ２０５）。
【００４７】
（呼出処理）
図８は、呼出処理の流れを示すフローチャートである。この処理は、図６のＳ１０３に該当する処理である。図８に示すように、呼出部２１ｃは、戻りの型指定を受け付けると、型情報を利用して、呼出対象のCOBOLプログラム５を特定する（Ｓ３０１）。
【００４８】
続いて、呼出部２１ｃは、デバッグ情報もしくはCOBOLプログラム５のメタデータを参照し、COBOLプログラム５に渡す引数を実行ユニットが持っているか否かを判定する（Ｓ３０２）。
【００４９】
ここで、呼出部２１ｃは、実行ユニットが当該引数を持っている場合（Ｓ３０２：Ｙｅｓ）、実行ユニットが持つ引数データを利用して、COBOLプログラム５を呼び出す（Ｓ３０３）。その後、呼出部２１ｃは、戻り値の型指定があるか否かを判定する（Ｓ３０４）。
【００５０】
そして、戻り値の型指定がある場合（Ｓ３０４：Ｙｅｓ）、呼出側（呼出元）のデータ型への変換処理が実行される（Ｓ３０５）。その後、呼出部２１ｃは、Ｓ３０５で変換された型の値をプログラム１ａに返す（Ｓ３０６）。
【００５１】
一方、呼出部２１ｃは、戻り値の型指定がない場合（Ｓ３０４：Ｎｏ）、処理を終了する。また、Ｓ３０２において、実行ユニットが当該引数を持っていない場合（Ｓ３０２：Ｎｏ）、呼出部２１ｃは、処理を終了する。
【００５２】
（COBOLデータ型への変換処理）
図９は、COBOLデータ型への変換処理の流れを示すフローチャートである。この処理は、図７のＳ２０３に該当する処理であり、呼出元のREST  API  プログラムのデータ型を呼出先のCOBOLのデータ型に変更する処理である。図９に示すように、第１変換部２２は、デバッグ情報に含まれる各データについてＳ４０１からＳ４０７のループ処理を実行する。
【００５３】
具体的には、第１変換部２２は、シンボル名に対応するデバッグ情報を取得する（Ｓ４０２）。そして、第１変換部２２は、取得したデバッグ情報が集団項目に該当しない場合（Ｓ４０３：Ｎｏ）、デバッグ情報からCOBOLの型情報を取得し（Ｓ４０４）、型に応じて変換処理を実行する（Ｓ４０５）。
【００５４】
一方、第１変換部２２は、取得したデバッグ情報が集団項目に該当する情報である場合（Ｓ４０３：Ｙｅｓ）、集団項目の子要素すべてのデータ型をCOBOLプログラム５のデータ型に変換するデータ変換を実行する（Ｓ４０６）。
【００５５】
（呼出側のデータ型への変換処理）
図１０は、呼出側のデータ型への変換処理の流れを示すフローチャートであり、COBOLのデータ型をREST  API  プログラムのデータ型に変更する処理である。この処理は、図８のＳ３０５に該当する処理である。図１０に示すように、第２変換部２３は、デバッグ情報に含まれる各データについてＳ５０１からＳ５０７のループ処理を実行する。
【００５６】
具体的には、第２変換部２３は、復帰値のデバッグ情報を取得する（Ｓ５０２）。そして、第２変換部２３は、取得したデバッグ情報が集団項目に該当しない場合（Ｓ５０３：Ｎｏ）、デバッグ情報からCOBOLの型情報を取得する（Ｓ５０４）。続いて、第２変換部２３は、REST  API  プログラムの返り値の型情報に応じて、COBOL型からREST  API  プログラムへの型に変換する変換処理を実行する（Ｓ５０５）。
【００５７】
一方、第２変換部２３は、取得したデバッグ情報が集団項目に該当する場合（Ｓ５０３：Ｙｅｓ）、REST  API  プログラムの返り値の型情報に応じて、集団項目の子要素すべてのデータ型を、REST  API  プログラムのデータ型に変換する（Ｓ５０６）。
【００５８】
［効果］
上述したように、情報処理サーバ１０は、COBOL以外の言語で作成されたプログラム１ａからCOBOLプログラム５の呼出要求を受信した際に、COBOLプログラム５を実行する実行ユニットを実行する。そして、実行ユニットが、呼び出し対象のCOBOLプログラム５のデバッグ情報に基づいて、COBOL以外の言語のデータ型と、呼び出し先のCOBOLプログラム５のデータ型の型変換を行う。この結果、モバイル端末１からCOBOLプログラム５を呼び出す場合に、ブリッジプログラムを用いずに、呼び出すことができる。また、COBOLプログラム５のインタフェースが変更されても呼び出し元のソースコードを変更しなくともよくなり、COBOL以外の言語で作成されたプログラム１ａからCOBOLプログラム５を動的に呼び出すことができる。
【００５９】
図１１は、効果を説明する図である。図１１に示すように、情報処理サーバ１０のCOBOL側データ変換器および呼出側データ変換器の各変換器は、COBOLプログラム５のデバッグ情報５ｂを用いて、データの型変換を実行する。その後、COBOLプログラム５のソースコード５ａがソースコード５ｃに変更された場合、各変換器は、修正前のプログラムのデバッグ情報５ｂではなく、修正後のデバッグ情報５ｄを取得して、データの型変換を実行することができる。この結果、呼出先のプログラムが変更された場合であっても、呼出元であるREST  API  プログラムのソースコードを修正することなく、データの型変換を実行することができる。
【００６０】
また、情報処理サーバ１０は、動的な呼び出しプログラムの作成により、ユーザがソースコードを管理する手間を省くことができる。情報処理サーバ１０は、COBOLプログラム５が変更されても、COBOLプログラム５の呼出側のREST  API  プログラムの引数型の値とCOBOLデータ型の値に互換性があれば、呼出側のプログラム１ａやREST  API  プログラムを変更することなくCOBOLプログラム５を呼び出すことができる。また、ユーザがコーディング時にCOBOLプログラム５を呼び出す処理を記述する際、一時変数を定義しなくともよくなり、COBOLの呼び出し処理の記述を簡素化できる。
【実施例２】
【００６１】
ところで、情報処理サーバ１０は、実行ユニットがCOBOLプログラム５に渡す引数の参照変数を持つことで、複数の実行ユニット間で同じデータを共有することができる。図１２は、実施例２にかかる情報処理サーバ１０を説明する図である。
【００６２】
図１２に示すように、実行ユニット処理部２１は、COBOL引数データセット関数、COBOL引数データ取得関数、COBOL引数オブジェクトを有する。なお、これらは、実行ユニット処理部２１は有する機能部として実行することができ、プロセッサが実行するプロセスの一例として説明することもできる。なお、ここでは、実行ユニット処理部２１が実行する例で説明するが、実行ユニット処理部２１によって実行されるプロセスの一例である実行ユニットが実行することもできる。
【００６３】
ここで、実行ユニット処理部２１が、COBOLプログラム５に渡す引数の参照変数を持つことで、実行ユニット間で同じデータを共有することができる。COBOLプログラム５に渡す引数の値は、COBOL引数データセット関数を利用して行う。COBOL引数データセット関数は、COBOLプログラム５の引数名と、それに対応する他のプログラミング言語のデータを引数にセットする。
【００６４】
COBOL引数データ取得関数は、実行ユニット処理部の参照するCOBOLの引数データを、指定した他のプログラミング言語のデータ型に変換する関数である。COBOL引数オブジェクトは、COBOL引数データポインタをフィールドとして持つオブジェクトである。フィールド名は、引数データに対応するCOBOLプログラム５の引数名をフィールド名とする。COBOL引数データポインタはCOBOL引数データへの参照をもつ変数である。
【００６５】
このように、実行ユニット処理部２１は、共有で参照可能なメモリ領域３０に記憶されるCOBOLの引数データを用いて、参照渡しによってCOBOLプログラム５を呼び出す。COBOLプログラム５は、処理結果をメモリ領域３０に格納する。図１３を用いて具体例を説明する。図１３は、実行ユニットが保持するデータの変化例を説明する図である。図１３は、モバイル端末１のプログラム１ａから税込み価格計算を実行するCOBOLの計算プログラムを呼び出す例である。
【００６６】
図１３に示すように、実施例１と同様、情報処理サーバ１０の実行ユニット処理部２１は、税込み価格計算プログラムのデバッグ情報を利用して、REST  API  プログラム内の呼出側のREST  API  プログラムのデータ型と、COBOLで記述された税込み価格計算プログラムのデータ型との変換を行う。
【００６７】
そして、プログラム１ａによるREST  API  プログラムの実行に伴い、情報処理サーバ１０の実行ユニット処理部２１は、メモリ領域内のデータ３０ａの参照変数を引数にして税込み価格計算プログラムを呼び出す。そして、税込み価格計算プログラムは、税込み計算を実行し、メモリ領域内のデータ３０ａをデータ３０ｂに書き換える。その後、情報処理サーバ１０の実行ユニット処理部２１は、メモリ領域内のデータ３０ｂをREST  API  プログラムのデータ型に変換して、モバイル端末１のプログラム１ａに送信する。このようにすることで、税込み価格計算プログラムの処理結果を複数のプログラムや実行ユニットで共有することができる。
【００６８】
ここで、データ共有化について説明する。図１４は、データ共有化による処理負荷の軽減を説明する図である。図１４に示すように、プログラム１ａの要求によってREST  API  プログラムが、実行ユニットＡを介してCOBOL（Ａ）を呼び出すとともに、実行ユニットＢを介してCOBOL（Ｂ）を呼び出す例を想定する。ここで、実行ユニットは、上記情報処理サーバ１０に対応し、各COBOLプログラムは、同じデータを引数にするものとする。また、各データ型の変換は、実施例１と同様、各COBOLプログラムのデバッグ情報を利用することとする。
【００６９】
実施例２の手法では、実行ユニットＡが、COBOL（Ａ）を呼び出すための、REST  API  プログラムのデータ型からCOBOLデータ型の変換を実行して、共有メモリ３０内に変換結果を格納する。その後、REST  API  プログラムの要求に伴って、共有メモリ３０内のCOBOLの引数データの参照渡し（参照変数）によってCOBOL（Ａ）を呼び出す。すると、COBOL（Ａ）が、該当処理を実行して、共有メモリ３０内のデータを書き換える。そして、実行ユニットＡは、共有メモリ３０内に記憶される処理結果（COBOLデータ型）を、REST  API  プログラムのデータ型に変換して応答する。
【００７０】
その後、REST  API  プログラムが実行ユニットＢにCOBOL（Ｂ）の呼出を実行した場合、実行ユニットＢは、同じ処理を実行した実行ユニットＡから処理結果を取得することができる。例えば、実行ユニットＢは、実行ユニットＡやCOBOL（Ａ）等によって書き込まれた共有メモリ３０のデータを読み出す。そして、実行ユニットＢは、読み出したデータをREST  API  プログラムに応答する。このとき、実行ユニットＢは、読み出したデータがCOBOLのデータ型であれば、REST  API  プログラムのデータ型に変換して応答し、読み出したデータが実行ユニットＡによってREST  API  プログラムのデータ型に変換済みであれば、読み出してそのまま応答できる。このように、実行ユニットＢは、REST  API  プログラムのデータ型とCOBOLデータ型の変換との変換処理を省略することができる。この結果、プログラム１ａ内でソースコードの簡略化も実現できる。
【００７１】
一方で、一般的なブリッジプログラムを用いた手法では、処理負荷が高い。図１５は、ブリッジプログラムによる処理負荷の増大を説明する図である。図１５も図１４と同様、プログラム１ａが、実行ユニットＡを介してCOBOL（Ａ）を呼び出すとともに、実行ユニットＢを介してCOBOL（Ｂ）を呼び出す例を想定する。
【００７２】
図１５の場合、REST  API  プログラムは、実行ユニットＡを介してCOBOLプログラム（Ａ）を呼び出す要求を送信する。実行ユニットＡは、型変換を行った後にCOBOLプログラム（Ａ）を呼び出し、COBOLプログラム（Ａ）から取得した値に型変換を行って、プログラム１ａに送信する。
【００７３】
その後、REST  API  プログラムは、実行ユニットＢを介してCOBOLプログラム（Ｂ）を呼び出す要求を送信する。実行ユニットＢは、実行ユニットＡと同様に、型変換を行った後にCOBOLプログラム（Ｂ）を呼び出し、COBOLプログラム（Ｂ）から取得した値に型変換を行って、REST  API  プログラムに送信する。
【００７４】
このように、モバイル端末等の要求に伴って、REST  API  プログラムが同じ処理を実行するCOBOLプロフラムを別々の実行ユニットを用いて実行する場合には、呼出側に、引数の処理結果を受け取るための一時変数を定義しなければならない。また、各COBOLプログラムの呼出後に同じ型変換を実行しなければならない。したがって、一般的なブリッジプログラムを用いた手法では、処理数が増大し、処理負荷が高い。
【００７５】
上述したように、実行ユニット間でCOBOLプログラムのデータの値を共有時に、実行ユニットが、呼び出し対象COBOLプログラムのデバッグ情報に基づいて、COBOL以外の言語のデータ型と、呼び出し先のCOBOLプログラムのデータ型の型変換を行う。実行ユニットが、変換したCOBOLプログラムに渡す引数の実データへの参照を保持する。この結果、実行ユニット間でCOBOLプログラムのデータの値を共有時に、一時変数の定義やCOBOL以外のプログラミング言語のデータ型への変換を省略することができる。
【００７６】
また、ユーザがコーディング時に、COBOLプログラムの実行ユニットが実行した結果の引数値を、呼び出し側のプログラミング言語のデータ型に変換しなくともよくなり、COBOLプログラムの実行ユニット間でデータを使いまわす際に余分な変換処理を省略することができる。
【実施例３】
【００７７】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【００７８】
［言語］
実施例１で記載したプログラム言語は一例であり、これに限定されるものではない。例えば、呼出元のプログラムは、モバイル端末で実行できるプログラムであれば、どのようなプログラムも採用することができる。また、呼出対象のプログラムは、モバイル端末で実行できないプログラムであれば、どのようなプログラムも採用することができる。
【００７９】
［デバッグ情報］
上記実施例では、デバッグ情報を用いる例で説明したが、これに限定されるものではなく、COBOLプログラムのソースコードを用いることもできる。この場合、RESTサービス化したCOBOLアプリケーションを配備する情報処理サーバ１０に、アプリケーションとソースコードを配備することになる。
【００８０】
したがって、デバッグ情報を用いることで、ソースコードのコピーの抑制、不正アクセス等によりソースコードに記述されたプログラムの動作を解析の危険性やサービスの脆弱性を読み取られる危険性を低減することができる。また、デバッグ情報を用いることで、アプリケーション配備や構成の制約を低減できる。
【００８１】
［システム］
上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。また、実施例で説明した具体例、分布、数値などは、あくまで一例であり、任意に変更することができる。また、処理の順番なども矛盾のない範囲内で適宜変更することができる。
【００８２】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００８３】
［ハードウェア］
図１６は、ハードウェア構成例を説明する図である。図１６に示すように、情報処理サーバ１０は、通信装置１０ａ、ＨＤＤ（Hard  Disk  Drive）１０ｂ、メモリ１０ｃ、プロセッサ１０ｄを有する。また、図１６に示した各部は、バス等で相互に接続される。
【００８４】
通信装置１０ａは、ネットワークインタフェースカードなどであり、他のサーバとの通信を行う。ＨＤＤ１０ｂは、図２に示した機能を動作させるプログラムやＤＢを記憶する。
【００８５】
プロセッサ１０ｄは、図２に示した各処理部と同様の処理を実行するプログラムをＨＤＤ１０ｂ等から読み出してメモリ１０ｃに展開することで、図２等で説明した各機能を実行するプロセスを動作させる。すなわち、このプロセスは、情報処理サーバ１０が有する各処理部と同様の機能を実行する。具体的には、プロセッサ１０ｄは、実行ユニット処理部２１、第１変換部２２、第２変換部２３等と同様の機能を有するプログラムをＨＤＤ１０ｂ等から読み出す。そして、プロセッサ１０ｄは、実行ユニット処理部２１、第１変換部２２、第２変換部２３等と同様の処理を実行するプロセスを実行する。
【００８６】
このように情報処理サーバ１０は、プログラムを読み出して実行することでデータ変換方法を実行する情報処理装置として動作する。また、情報処理サーバ１０は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、情報処理サーバ１０によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【００８７】
このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ（Magneto−Optical  disk）、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することができる。
【符号の説明】
【００８８】
１０  情報処理サーバ
１１  通信部
１２  記憶部
１３  COBOLデータ記憶部
１４  型情報記憶部
２０  制御部
２１  実行ユニット処理部
２１ａ  生成部
２１ｂ  設定部
２１ｃ  呼出部
２１ｄ  取得部
２２  第１変換部
２３  第２変換部
【図１】
2019160243.tif 000003
【図２】
2019160243.tif 000004
【図３】
2019160243.tif 000005
【図４】
2019160243.tif 000006
【図５】
2019160243.tif 000007
【図６】
2019160243.tif 000008
【図７】
2019160243.tif 000009
【図８】
2019160243.tif 000010
【図９】
2019160243.tif 000011
【図１０】
2019160243.tif 000012
【図１１】
2019160243.tif 000013
【図１２】
2019160243.tif 000014
【図１３】
2019160243.tif 000015
【図１４】
2019160243.tif 000016
【図１５】
2019160243.tif 000017
【図１６】
2019160243.tif 000018