JP2018190261A - 情報処理装置、情報処理方法および情報処理プログラム - Google Patents

情報処理装置、情報処理方法および情報処理プログラム Download PDF

Info

Publication number
JP2018190261A
JP2018190261A JP2017093526A JP2017093526A JP2018190261A JP 2018190261 A JP2018190261 A JP 2018190261A JP 2017093526 A JP2017093526 A JP 2017093526A JP 2017093526 A JP2017093526 A JP 2017093526A JP 2018190261 A JP2018190261 A JP 2018190261A
Authority
JP
Japan
Prior art keywords
program
code
template
information processing
processing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017093526A
Other languages
English (en)
Other versions
JP6940751B2 (ja
Inventor
功作 木村
Kosaku Kimura
功作 木村
シュリダル チョーダリー
Choudhary Shridhar
シュリダル チョーダリー
敦二 関口
Atsuji Sekiguchi
敦二 関口
裕介 佐々木
Yusuke Sasaki
裕介 佐々木
優 上野
Masaru Ueno
優 上野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2017093526A priority Critical patent/JP6940751B2/ja
Priority to US15/972,365 priority patent/US10521201B2/en
Publication of JP2018190261A publication Critical patent/JP2018190261A/ja
Application granted granted Critical
Publication of JP6940751B2 publication Critical patent/JP6940751B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】分散処理プログラムの開発効率を向上させる。
【解決手段】記憶部11は、コードパターン13と、処理要求に応じてシステム21が特定の処理を実行するよう規定するプログラムの書式を示すテンプレート14aと、システム21にネットワーク経由で処理要求を送信するプログラムの書式を示すテンプレート14bとを記憶する。処理部12は、プログラム15を取得し、プログラム15の中からコードパターン13に該当する第1のコードを検出し、第1のコードおよびテンプレート14aを用いて、システム21が第1のコードに対応する処理を実行するよう規定するプログラム16aを生成し、プログラム15の中から第1のコードに依存する第2のコードを検出し、第2のコードおよびテンプレート14bを用いて、システム21と異なるシステム22に実行させるプログラム16bを生成する。
【選択図】図1

Description

本発明は情報処理装置、情報処理方法および情報処理プログラムに関する。
近年、アプリケーションソフトウェアを実行する情報処理環境を自ら所有する代わりに、サービス事業者のもつ情報処理環境をネットワーク経由で利用することが増えている。ネットワーク経由で情報処理環境を利用させるサービスはクラウドサービスと言われることがある。クラウドサービスとして利用可能な情報処理環境には、プロセッサやメモリなどの計算ハードウェア、ローカルネットワーク、OS(Operating System)やデータベースなどの基盤ソフトウェア、セキュリティ機構などが含まれ得る。
クラウドサービスの種類には様々なものがある。例えば、物理マシンや仮想マシンなどの単位計算リソースを利用者に貸し出し、利用者が作成したアプリケーションプログラムをその単位計算リソース上で実行するサービスがある。また、利用者が作成した軽量プログラムを配備し、特定のイベントが発生したときに短時間だけ当該軽量プログラムを実行するサービスや、ネットワークから受信したデータを保存するサービスがある。
クラウドサービスは、利用者から予めプログラムや設定情報などを受け付け、利用者が望む処理をクラウドサービス側の情報処理環境で実行可能になるよう設定しておく。そして、クラウドサービスは、処理要求に応じて上記の設定された処理を実行する。クラウドサービスはAPI(Application Programming Interface)を提供しており、当該クラウドサービスの外部のプログラムからはAPIを用いて処理を要求することができる。そのため、あるクラウドサービスと当該クラウドサービスの外部のプログラムとが連携するような分散処理ソフトウェアを開発することができる。あるクラウドサービスの外部のプログラムは別のクラウドサービスの中で実行されることもある。
なお、ソースコードをモデル検査ツール用の検査コードに変換する変換装置が提案されている。提案のソースコード変換装置は、ソースコードと変換ルールと処理時間や記憶容量の制約を示す非機能要件とを受け付ける。ソースコード変換装置は、ソースコードに変換ルールを適用して、非機能要件を満たすか否か検査するための検査コードを生成する。また、複数のクラウドサービスを組み合わせてアプリケーションを開発する際に、アプリケーション全体のサービス品質(QoS:Quality of Service)が最適化されるようにクラウドサービスの組み合わせを選択する方法が提案されている。
国際公開第2012/057170号
Anja Strunk, "QoS-Aware Service Composition: A Survey", Proc. of the 8th IEEE European Conference on Web Services (ECOWS), pp. 67-74, 2010年12月1日
しかし、クラウドサービスを利用する分散処理プログラムを直接記述する場合、断片的なプログラムや設定情報が複数の情報処理環境に分かれて配備されることになるため、全体の情報処理手順が理解しづらくなってしまう。また、クラウドサービスを利用するには、サービス事業者が規定する独自のAPIや規約に従ってプログラムを記述することになる。このため、分散処理プログラムの開発効率が低くなるおそれがある。
1つの側面では、本発明は、分散処理プログラムの開発効率を向上させる情報処理装置、情報処理方法および情報処理プログラムを提供することを目的とする。
1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。記憶部は、コードパターンと、処理要求に応じてシステムが特定の処理を実行するよう規定するプログラムの書式を示す第1のテンプレートと、システムにネットワーク経由で処理要求を送信するプログラムの書式を示す第2のテンプレートとを記憶する。処理部は、第1のプログラムを取得し、第1のプログラムの中からコードパターンに該当する第1のコードを検出し、第1のコードおよび第1のテンプレートを用いて、システムが第1のコードに対応する処理を実行するよう規定する第2のプログラムを生成し、第1のプログラムの中から第1のコードに依存する第2のコードを検出し、第2のコードおよび第2のテンプレートを用いて、システムと異なる他のシステムに実行させる第3のプログラムを生成する。
また、1つの態様では、情報処理装置が実行する情報処理方法が提供される。また、1つの態様では、コンピュータに実行させる情報処理プログラムが提供される。
1つの側面では、分散処理プログラムの開発効率を向上できる。
第1の実施の形態の情報処理装置を説明する図である。 第2の実施の形態の情報処理システムの例を示す図である。 開発サーバのハードウェア例を示すブロック図である。 開発サーバの機能例を示すブロック図である。 環境設定管理テーブルの例を示す図である。 変換前プログラムと制約情報の例を示す図である。 変換前プログラムに対応する抽象構文木の例を示す図である。 変換ルールテーブルの例を示す図である。 変換ルールテーブルに含まれるテンプレート例を示す図である。 変換後プログラムの例を示す図である。 変換後プログラムに含まれるコンポーネント例を示す図である。 実行状態管理テーブルの例を示す図である。 インスタンスの配備例を示す図である。 コンパイルサービスの手順例を示すフローチャートである。 変換ルール適用の手順例を示すフローチャートである。 起動サービスの手順例を示すフローチャートである。 起動サービスの手順例を示すフローチャート(続き)である。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の情報処理装置を説明する図である。
第1の実施の形態の情報処理装置10は、システム21,22に適用される分散処理プログラムの開発を支援する。情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性の半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性のストレージでもよい。処理部12は、例えば、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
記憶部11は、コードパターン13、テンプレート14a(第1のテンプレート)およびテンプレート14b(第2のテンプレート)を記憶する。コードパターン13は、開発者が作成するプログラムの中に出現し得るコード(命令の集合)のうち、システム21に実行させる処理に置換することが可能な処理を示すコードのパターンである。コードパターン13は、テンプレート14aに対応付けて記憶されてもよい。
テンプレート14aは、処理要求に応じてシステム21が特定の処理を実行するよう規定するプログラムの書式(雛形)を示す。テンプレート14aは、システム21の設定を行うにあたってシステム21特有のプログラム記載方法を採用していることがある。テンプレート14aは、例えば、システム21に実行させるプログラムの書式や、システム21に設定情報を送信するためのプログラムの書式などである。テンプレート14bは、システム21にネットワーク経由で処理要求を送信するプログラムの書式(雛形)を示す。テンプレート14bは、システム21に処理を実行させる処理要求を送信するにあたってシステム21特有のプログラム記載方法を採用していることがある。
第1の実施の形態のシステム21は、例えば、クラウドサービスを提供するクラウドシステムである。システム21は、ネットワーク経由で受信した処理要求に応じて、予め設定されたプログラムや設定情報などを用いて処理を実行する。システム21が実行可能な処理としては、ネットワークから受信したメッセージを処理するもの、ネットワークからの要求に応じて関数を実行するもの、ネットワークから受信したデータを保存するものなどが挙げられる。例えば、テンプレート14aが関数プログラムの書式を示し、テンプレート14bが関数を呼び出すプログラムの書式を示す。また、例えば、テンプレート14aがデータ保存場所を設定するプログラムの書式を示し、テンプレート14bがデータの書き込みや読み出しを要求するプログラムの書式を示す。
なお、システム22が、他のクラウドサービスを提供する他のクラウドシステムであってもよい。その場合、テンプレート14bは、システム22が特定の処理を実行するよう規定するプログラムの書式を兼ねている。これにより、システム21,22の上の複数のクラウドサービスが連携するような分散処理プログラムを生成することができる。
処理部12は、プログラム15(第1のプログラム)を取得する。プログラム15は、開発者が作成したものである。プログラム15は、システム21の設定やネットワーク経由での処理要求を意識せずに作成されたものであってよい。
処理部12は、プログラム15の中から、パターンマッチングによりコードパターン13に該当するコード(第1のコード)を検出する。すると、処理部12は、第1のコードとテンプレート14aとを用いてプログラム16aを生成する。プログラム16aは、第1のコードに対応する処理をシステム21が実行するよう規定する。例えば、第1のコードから抽出した値をテンプレート14aの引数に代入することでプログラム16aが生成される。プログラム16aはシステム21に適用される。例えば、プログラム16aがシステム21に送信され、システム21によってプログラム16aが実行される。また、例えば、プログラム16aが規定する手順に従って設定情報がシステム21に送信される。
また、処理部12は、プログラム15の中から、第1のコードに依存する他のコード(第2のコード)を検出する。例えば、第1のコードが変数の定義を示す場合、第2のコードは変数への値の代入や変数の値を用いた演算などを示す。テンプレート14bと対応付けて他のコードパターンを記憶部11に記憶しておき、パターンマッチングにより第2のコードを検出するようにしてもよい。処理部12は、第2のコードとテンプレート14bとを用いてプログラム16bを生成する。例えば、第2のコードから抽出した値をテンプレート14bの引数に代入することでプログラム16bが生成される。プログラム16bは、システム21と異なるシステム22に適用される。例えば、プログラム16bがシステム22に送信され、システム22によってプログラム16bが実行される。
第1の実施の形態の情報処理装置10によれば、プログラム15からコードパターン13に該当する第1のコードが検出され、テンプレート14aを用いて、システム21上で第1のコードに対応する処理が実行されるよう規定するプログラム16aが生成される。また、プログラム15から第1のコードに依存する第2のコードが検出され、テンプレート14bを用いて、システム21に処理を要求するプログラム16bが生成される。
これにより、開発者はシステム21,22に適用される断片的なプログラムや設定情報を直接記述しなくてよく、全体の情報処理手順の理解が容易となり、全体の情報処理手順の定義に注力することができる。また、システム21の設定やシステム21に送信する処理要求に特有の書式を学習しなくてもよく、学習コストを低減することができる。よって、システム21,22を利用する分散処理プログラムの開発効率が向上する。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
第2の実施の形態の情報処理システムは、複数のクラウドサービスを組み合わせることで実装されるアプリケーションソフトウェアの開発を支援する。情報処理システムは、クライアント31、クラウドシステム40および開発サーバ100を含む。クライアント31、クラウドシステム40および開発サーバ100は、ネットワーク30に接続されている。ネットワーク30は、例えば、インターネットなどの広域データ通信ネットワークである。なお、開発サーバ100は、第1の実施の形態の情報処理装置10に対応する。
クライアント31は、アプリケーションソフトウェアを開発する開発者が使用するクライアントコンピュータである。クライアント31は、ネットワーク30を介して開発サーバ100にアクセスし、開発サーバ100と対話的にアプリケーションソフトウェアの開発を進める。また、クライアント31は、開発したアプリケーションソフトウェアをクラウドシステム40に配備するよう開発サーバ100に指示する。例えば、クライアント31にはWebブラウザがインストールされている。その場合、クライアント31は、Webブラウザを通じて開発サーバ100にアクセスし、開発者がWebブラウザ上でプログラムのソースコードを編集できるようにする。また、クライアント31は、アプリケーションソフトウェアの配備をWebブラウザを通じて指示する。
開発サーバ100は、クラウドシステム40に配備可能なアプリケーションソフトウェアの開発を支援するサーバコンピュータである。特に、開発サーバ100は、クラウドシステム40によって提供される複数のクラウドサービスを連携させた分散処理ソフトウェアの開発を支援する。開発サーバ100は、ネットワーク30を介してクライアント31から開発者の入力を受け付け、入力に応じてプログラムを作成して保存する。
このとき開発者は、複数のクラウドサービスを連携させるためのクラウドサービス特有の処理をプログラム中に直接記述しなくてよく、本質的な情報処理手順(コアロジック)の定義に注力することができる。すなわち、開発者は、コアロジックの全体が1つのコンピュータ上で閉じて実行されるようなプログラムを作成すればよい。開発サーバ100は、開発者からの入力によって作成されたプログラムを、複数のクラウドサービスを組み合わせた分散処理ソフトウェア用のプログラム群に変換する。
開発サーバ100は、クライアント31から配備の指示を受け付ける。すると、開発サーバ100は、変換後のプログラム群を用いて、そのアプリケーションソフトウェアから起動されるサービス実体(「サービスインスタンス」と言うことがある)を、クラウドシステム40に配備する。サービスインスタンスを構成する複数のインスタンスが、クラウドシステム40に含まれる複数のサーバコンピュータに分散して配備される。
インスタンスの中には、サーバコンピュータ上で予め起動して待機し、リクエストメッセージの受信などのイベント発生を待つものが含まれ得る。また、インスタンスの中には、イベント発生を契機として起動し、当該イベントに対する処理が完了すると破棄されるものが含まれ得る。サービスインスタンスの配備では、開発サーバ100は、変換後プログラムをサーバコンピュータに送信し、当該サーバコンピュータに変換後プログラムを実行させるかまたは実行可能な状態に設定する場合がある。また、開発サーバ100は、変換後プログラムに従って(例えば、変換後プログラムを実行して)、サービスインスタンスの設定を示す設定情報をサーバコンピュータに送信する場合がある。クラウドシステム40のサーバコンピュータに対して変換後プログラムや設定情報を送信する方法は、利用するクラウドサービスの規約に従うことになる。
また、開発サーバ100は、クライアント31からサービスインスタンスの停止の指示を受け付けると、変換後のプログラム群を用いて、クラウドシステム40にサービスインスタンスを停止させる。また、開発サーバ100は、クライアント31からサービスインスタンスの削除の指示を受け付けると、変換後のプログラム群を用いて、サービスインスタンスに関するデータをクラウドシステム40から削除する。このように、クライアント31が複数のクラウドサービスに対して個別に配備・停止・削除を指示しなくても、開発サーバ100が全体の配備・停止・削除を一括で実行することができる。
クラウドシステム40は、1つのクラウド事業者が保有する情報処理システムであり、例えば、データセンタに設置されている。図2では1つのクラウド事業者が保有する1つのクラウドシステムのみがネットワーク30に接続されているが、複数のクラウド事業者が保有する複数のクラウドシステムがネットワーク30に接続されていてもよい。
クラウドシステム40は、PaaS(Platform as a Service)システム41、FaaS(Function as a Service)システム42およびストレージシステム43を含む。PaaSシステム41、FaaSシステム42およびストレージシステム43は、それぞれ1以上のサーバコンピュータを含む。PaaSシステム41は、利用者に対してPaaSサービスを提供する。FaaSシステム42は、利用者に対してFaaSサービスを提供する。ストレージシステム43は、利用者に対してオブジェクトストレージサービスを提供する。このように、クラウドシステム40は、種類の異なる複数のクラウドサービスを提供している。クラウドシステム40は、データベースサービスやメッセージキューサービスなど他の種類のクラウドサービスを更に提供してもよい。
PaaSシステム41は、アプリケーションソフトウェアを実行する基盤となるプラットフォームを利用者に使用させる。プラットフォームには、例えば、CPUやメモリなどのハードウェア、OSおよびミドルウェアが含まれる。利用者に使用させるプラットフォームは仮想マシンである場合がある。PaaSシステム41の利用者は、プラットフォーム上にアプリケーションプログラムを配備し、PaaSシステム41に当該アプリケーションプログラムを実行させる。
FaaSシステム42は、リクエストメッセージの受信やデータ更新などのイベント発生に応じて動的に「関数」を実行する。FaaSの関数は比較的小規模な処理単位であり、比較的小さなプログラムによって実装される。FaaSシステム42の利用者は、予め関数のプログラムをFaaSシステム42にアップロードしておく。FaaSシステム42は、イベントを検出すると、検出したイベントに対応する関数のプログラムをメモリにロードして関数を実行する。関数が終了するとその関数のプログラムをメモリから削除してもよい。このように、関数は予め起動して待機するものではなく、イベント発生に応じて自動的に起動して短時間だけ実行される。Webフックにより、ストレージシステム43上のデータの更新を、関数が起動される契機となるイベントとすることもできる。
ストレージシステム43は、キーバリュー形式でオブジェクトデータを保存する軽量の不揮発性ストレージシステムである。ストレージシステム43の利用者は、「コンテナ」というデータ保存場所をストレージシステム43に登録しておく。コンテナは、例えば、ディレクトリに対応する。ストレージシステム43は、ネットワーク経由でコンテナにオブジェクトデータを書き込むためのPUT用のAPIと、ネットワーク経由でコンテナからオブジェクトデータを読み出すためのGET用のAPIを提供する。ストレージシステム43は、PUT用のAPIの呼び出しに応じてオブジェクトデータをコンテナに書き込み、GET用のAPIの呼び出しに応じてオブジェクトデータをコンテナから読み出す。
なお、FaaSシステム42の関数とストレージシステム43のコンテナの連携にあたり、FaaSシステム42がストレージシステム43の更新を監視してもよいし、ストレージシステム43がFaaSシステム42にデータ更新を通知してもよい。
以下では、このようなPaaSサービス、FaaSサービスおよびオブジェクトストレージサービスを組み合わせたアプリケーションソフトウェアの開発例を説明する。このアプリケーションソフトウェアは、PaaSシステム41がリクエストメッセージを受信したことを契機として、PaaSシステム41のプログラム、FaaSシステム42の関数およびストレージシステム43のコンテナを連携させて情報処理を行うものである。
図3は、開発サーバのハードウェア例を示すブロック図である。
開発サーバ100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。クライアント31も、開発サーバ100と同様のハードウェアを用いて実装できる。また、PaaSシステム41、FaaSシステム42およびストレージシステム43に用いられるサーバコンピュータも、開発サーバ100と同様のハードウェアを用いて実装できる。なお、CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを含んでもよく、開発サーバ100は複数のプロセッサを有してもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、開発サーバ100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OSやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、開発サーバ100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、開発サーバ100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
入力信号処理部105は、開発サーバ100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、開発サーバ100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク30に接続され、ネットワーク30を介してクライアント31、PaaSシステム41、FaaSシステム42、ストレージシステム43などと通信を行うインタフェースである。通信インタフェース107は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。
図4は、開発サーバの機能例を示すブロック図である。
開発サーバ100は、環境設定記憶部121、プログラム記憶部122、変換ルール記憶部123、実行状態記憶部124、開発UI(User Interface)部131、コンパイル部132および起動制御部133を有する。環境設定記憶部121、プログラム記憶部122、変換ルール記憶部123および実行状態記憶部124は、例えば、RAM102またはHDD103に確保した記憶領域を用いて実装される。開発UI部131、コンパイル部132および起動制御部133は、例えば、プログラムを用いて実装される。
環境設定記憶部121は、クラウドシステム40を利用するための設定を示す環境設定情報を記憶する。通常、ある開発者が作成したアプリケーションソフトウェアをクラウドシステム40に配備するには、予め契約などによって当該開発者がクラウドシステム40を利用する権利を有していることを要する。そこで、環境設定記憶部121は、開発者から入力された環境設定情報を記憶する。環境設定情報は、クラウドシステム40の利用者を認証するための認証情報を含む。認証情報は、例えば、利用者ID・パスワード・アクセスキー・アクセストークン・クレデンシャルなどと呼ばれる各種の情報を含む。
同一のクラウド事業者が提供する複数のクラウドサービス、すなわち、クラウドシステム40の複数のクラウドサービスは、同一の認証情報を用いて利用できる。ただし、同一のクラウド事業者が提供する異なるクラウドサービスに対して異なる認証情報が使用されてもよい。また、クラウドシステム40以外のクラウドシステムが利用可能である場合、そのクラウドシステムに対応する環境設定情報が環境設定記憶部121に記憶される。
プログラム記憶部122は、開発者からの入力に応じて作成された変換前プログラムのソースコードを記憶する。また、プログラム記憶部122は、変換前プログラムから生成されたクラウドシステム40用の変換後プログラム群を記憶する。また、プログラム記憶部122は、開発者から入力された制約情報を記憶する。制約情報は、変換後プログラムを生成するにあたって開発者から指定される要求や制約条件を示す。
変換ルール記憶部123は、単一サーバ用のプログラムをクラウドシステム40用の分散処理プログラムに変換するための複数の変換ルールを記憶する。各変換ルールは、コードパターンやテンプレートを含む。テンプレートは、クラウドサービスを利用するための処理を引数を用いて記述したプログラムの雛形である。テンプレートの引数に、変換前プログラムから抽出した値や環境設定情報を代入することで、変換後プログラムを生成することができる。コードパターンは、変換前プログラムに含まれるどの様なコード(命令の集合)に対して当該テンプレートを適用可能かを示す。変換前プログラムの中のコードパターンに該当するコードが、テンプレートを用いてクラウド用に変換される。
実行状態記憶部124は、サービスインスタンスの実行状態を示す実行状態情報を記憶する。ある変換後プログラム群から1以上のサービスインスタンスを起動することができる。各サービスインスタンスにはユニークな識別情報が付与される。サービスインスタンスの実行状態は、未配備(none)、実行中(running)、停止中(terminated)および削除済み(removed)の何れかである。
開発UI部131は、クライアント31に対してユーザインタフェースを提供し、クライアント31から各種の入力を受け付ける。例えば、開発UI部131は、Webブラウザ上で表示される開発用Webページを示す画面情報をクライアント31に送信し、そのWebページ上で入力されたデータをクライアント31から受信する。開発UI部131は、クライアント31に統合開発環境(IDE:Integrated Development Environment)を提供していると言うことができ、そのIDEをクラウドIDEと言うこともできる。
開発UI部131は、クライアント31から環境設定情報を受信し、受信した環境設定情報を環境設定記憶部121に保存する。また、開発UI部131は、クライアント31からプログラムの入力を受け付け、プログラム記憶部122に記憶された変換前プログラムを更新する。また、開発UI部131は、クライアント31からプログラム変換リクエストを受け付け、コンパイル部132にプログラム変換を指示する。また、開発UI部131は、クライアント31から実行状態変更リクエストを受け付け、起動制御部133にサービスインスタンスの配備、停止または削除を指示する。
コンパイル部132は、プログラム変換サービス(コンパイラサービス)を提供する。図4では開発UI部131とコンパイル部132が共に開発サーバ100に配置されているが、コンパイル部132を開発UI部131とは異なるサーバコンピュータに配置してもよい。コンパイル部132は、開発UI部131からの指示に応じて、単一サーバ用のプログラムをクラウドシステム40用の分散処理プログラムに変換する。このとき、コンパイル部132は、プログラム記憶部122から変換前プログラムを読み出し、環境設定記憶部121および変換ルール記憶部123を参照して変換後プログラム群を生成し、生成した変換後プログラム群をプログラム記憶部122に保存する。
コンパイル部132は、ルールマッチング部134およびコード生成部135を有する。ルールマッチング部134は、変換前プログラムの中から、変換ルール記憶部123に記憶された変換ルールを適用可能なコードをパターンマッチングによって検出する。コード生成部135は、変換ルールのテンプレートに、検出されたコードから抽出した値や環境設定記憶部121に記憶された環境設定情報を適用して変換後プログラムを生成する。
起動制御部133は、サービスインスタンスの起動サービス(ランチャーサービス)を提供する。図4では開発UI部131と起動制御部133が共に開発サーバ100に配置されているが、起動制御部133を開発UI部131とは異なるサーバコンピュータに配置してもよい。また、コンパイル部132と起動制御部133とが異なるサーバコンピュータに配置されてもよい。起動制御部133は、開発UI部131からの指示に応じて、プログラム記憶部122から変換後プログラム群を読み出し、変換後プログラム群を用いてサービスインスタンスの配備、停止または削除を実行する。また、起動制御部133は、実行状態記憶部124に記憶された実行状態情報を更新する。
新たなサービスインスタンスをクラウドシステム40に配備する際には、起動制御部133は、当該サービスインスタンスに対してユニークなサービスインスタンスIDを付与する。また、起動制御部133は、クラウドシステム40に配備された既存のサービスインスタンスと競合が生じないように、変換後プログラム群の中に記載されている関数名やコンテナ名などの構成要素名をユニークな名称に変換する。例えば、起動制御部133は、付与されたサービスインスタンスIDを含むように構成要素名を変換する。
サービスインスタンスの配備では、起動制御部133は、PaaSシステム41、FaaSシステム42およびストレージシステム43それぞれに対して、所定の規約に従って(例えば、所定のAPIを用いて)作成リクエストを送信する。作成リクエストには、生成された変換後プログラムやその他の設定情報が含まれ得る。例えば、PaaSシステム41に対しては、プラットフォーム上で実行されるアプリケーションプログラムが送信され、FaaSシステム42に対しては、関数プログラムが送信される。
サービスインスタンスの停止では、起動制御部133は、PaaSシステム41およびFaaSシステム42それぞれに対して、所定の規約に従って消去リクエストを送信する。これにより、PaaSシステム41およびFaaSシステム42からサービスインスタンスに関する情報が消去される。停止状態のサービスインスタンスは再配備される可能性があるため、ストレージシステム43に保存されたオブジェクトデータはまだ消去されない。サービスインスタンスの削除では、起動制御部133は、ストレージシステム43に対して所定の規約に従って消去リクエストを送信する。これにより、ストレージシステム43に保存されたオブジェクトデータが消去される。
図5は、環境設定管理テーブルの例を示す図である。
環境設定管理テーブル141は、環境設定記憶部121に記憶される。環境設定管理テーブル141は、クラウドシステム名および認証情報の項目を有する。クラウドシステム名の項目には、クラウドシステムの名称またはクラウド事業者の名称が登録される。図5の「Aシステム」はクラウドシステム40を示している。認証情報の項目には、開発者から入力された認証情報が登録される。図5では、PaaSシステム41、FaaSシステム42およびストレージシステム43が同一の認証情報によって利用可能であることを想定している。環境設定管理テーブル141には、複数のクラウドシステムの認証情報が登録されてもよく、異なる開発者から入力された認証情報が登録されてもよい。
認証に用いる情報の種類はクラウドシステムによって異なる。例えば、クラウドシステム40について、アクセスキーIDが「xxx」、秘密アクセスキーが「yyy」、地域が「us−west−2」、アカウントIDが「123」という情報が登録される。
図6は、変換前プログラムと制約情報の例を示す図である。
プログラム142は、プログラム記憶部122に記憶される。プログラム142は、開発者からの入力によって作成された変換前プログラムである。図6ではプログラム142は、Node.js形式のサーバサイドスクリプトとして作成されている。
プログラム142は、HTTP(Hypertext Transfer Protocol)を用いた通信を制御するExpressモジュールと、HTTPリクエストからPOSTメソッドのデータを抽出するBodyParserモジュールを使用している。プログラム142によれば、TCP(Transmission Control Protocol)の3000番ポートでHTTPリクエストを待ち受け、URLに「/csv」を含むPOSTメソッドのHTTPリクエストが受信されたときに関数「app.post」を実行することになる。
「app.post」では、HTTPリクエストからデータ名とCSV(Comma Separated Value)形式テキストが抽出され、変数「csv」にデータ名と対応付けてCSV形式テキストが代入される。CSV形式テキストから1行ずつカンマ区切り文字列が抽出されて変数「record」に代入され、カンマを分割位置として当該カンマ区切り文字列が複数部分に分割される。そして、所定のメールアドレス宛てに電子メールが送信され、HTTPリクエストに対応するHTTPレスポンスが返信される。
制約情報143は、プログラム記憶部122に記憶されている。制約情報143は、クライアント31から受信された情報である。図6では制約情報143は、パラメータとして「runOnDemand」と「scalable」を含む。
「runOnDemand」は、FaaSサービスを利用するようにプログラムを変換するか否かを示すフラグである。図6では「runOnDemand」がtrueに設定されており、FaaSサービスが利用されることになる。「scalable」は、負荷に応じて自動的に並列度が変化するようにプログラムを変換するか否かを示すフラグである。図6では「scalable」がtrueに設定されている。よって、負荷が高いときは並列度を上げるスケールアウトが自動的に行われ、負荷が低いときは並列度を下げるスケールインが自動的に行われることになる。
なお、開発サーバ100はクラウドシステム40にアプリケーションソフトウェアを配備することを想定しているが、ユーザが配備先のクラウドシステムを選択できるようにしてもよい。制約情報143に配備先のクラウドシステムの名称を記載してもよい。
図7は、変換前プログラムに対応する抽象構文木の例を示す図である。
コンパイル部132は、プログラム142から変換後プログラム群を生成するにあたり、プログラム142を解析して抽象構文木144を生成する。抽象構文木144は、木構造に連結された複数のノードを含む。図7には、図6のプログラム142から生成されるノード群の一部を記載している。抽象構文木144は、ノード144a,144b,144c,144d,144e,144f,144g,144h,144iを含む。
ノード144aはルートノードである。ノード144aはプログラム型であり、その配下に本文に関するノードが接続される。ノード144bはノード144a配下のノードである。ノード144bは宣言文型であり、「use strict」という命令を示している。ノード144cはノード144b配下のノードである。ノード144cはリテラル型であり、「use strict」という文字列を示している。ノード144b,144cは、図6のプログラム142の1行目に対応する。
ノード144dはノード144a配下のノードである。ノード144dは変数宣言型であり、その配下に変数宣言文に関するノードが接続される。ノード144eはノード144d配下のノードである。ノード144eは変数宣言文型であり、その配下に変数名と初期値に関するノードが接続される。ノード144fはノード144e配下のノードである。ノード144fは識別子型であり、「express」という変数名を示している。ノード144gはノード144e配下のノードである。ノード144gは呼び出し文型であり、その配下に関数名と引数に関するノードが接続される。
ノード144hはノード144g配下のノードである。ノード144hは識別子型であり、「require」という関数名を示している。ノード144iはノード144g配下のノードである。ノード144iはリテラル型であり、「express」という引数を示している。ノード144e,144f,144g,144h,144iは、図6のプログラム142の2行目に対応する。このように、プログラム142の字句解析や構文解析が行われ、プログラム142の構造を示す抽象構文木144が生成される。
図8は、変換ルールテーブルの例を示す図である。
変換ルールテーブル145は、変換ルール記憶部123に記憶される。変換ルールテーブル145には、配備先のクラウドシステム40について、予め複数の変換ルールが登録されている。変換ルールテーブル145は、ルールID、ルール名、コードパターン、適用条件、テンプレートおよび優先度の項目を有する。
ルールIDの項目には、変換ルールを識別する識別情報が登録される。ルール名の項目には、変換ルールの特徴を表す名称が登録される。コードパターンの項目には、変換前プログラムに含まれるコードのうちテンプレートの適用対象とするコードの特徴が登録される。コードパターンは正規表現を用いて記載されてもよい。適用条件の項目には、テンプレートを適用する条件のうちコードパターン以外の条件が登録される。適用条件は、制約情報143に特定の値が記載されていることを含む場合がある。
テンプレートの項目には、引数を用いて記述された変換後プログラムの雛形が登録される。テンプレートの引数に値を代入することで、実行可能な変換後プログラムとなる。引数の値として、変換前プログラムから抽出される値や環境設定管理テーブル141に登録された認証情報が用いられることがある。図8では説明を簡単にするため、テンプレートをプログラム形式で記述していない。優先度の項目には、変換ルールの優先度が登録される。優先度は、例えば、高・中・低のように複数レベルで表現される。あるコードに対して複数の変換ルールのコードパターンが当てはまる場合、最も優先度の高い変換ルールのテンプレートが当該コードに対して優先的に適用される。
例えば、変換ルール1〜5が変換ルールテーブル145に登録される。変換ルール1は「RunOnServer」であり、抽象構文木の中のルートノードに対して適用される。変換ルール1は、サーバ実行環境上で呼び出されるサーバ関数の中でコード全体が実行されるように変換するテンプレートをもつ。変換ルール2は「DeclareContainer」であり、制約情報143に記載された「runOnDemand」がtrueである場合に、空の変数宣言に対して適用される。変換ルール2は、変数に対応するコンテナをストレージシステム43に作成するテンプレートをもつ。
変換ルール3は「PutInContainer」であり、ある変数に変換ルール2を適用済みである場合に、その変数に値を代入する代入文に対して適用される。変換ルール3は、変換ルール2で作成されるコンテナに値を書き込むためにPUT用のAPIを呼び出すテンプレートをもつ。変換ルール3は変換ルール2に依存している。変換ルール4は「DeclareFunctionBehindContainer」であり、ある変数の代入文に変換ルール3を適用済みである場合に、その代入文の後にその変数の値を用いた演算を行う文に対して適用される。変換ルール4は、FaaSシステム42用の関数を作成するテンプレートをもつ。変換ルール4は変換ルール3に依存している。
変換ルール5は「ParallelizeForOf」であり、制約情報143に記載された「runOnDemand」がtrueかつ「scalable」がtrueである場合に、for−ofブロックに対して適用される。for−ofブロックはループ変数(iterator変数)を用いたループ処理を示す。変換ルール5は、ループ変数に対応するコンテナをストレージシステム43に作成するテンプレートと、ループ処理に対応するFaaSシステム42用の関数を作成するテンプレートをもつ。
図9は、変換ルールテーブルに含まれるテンプレート例を示す図である。
テンプレート145aは、図8の変換ルール3に含まれるテンプレートである。テンプレート145aは、引数として「accessKeyId」、「secretAccessKey」および「region」を含む。この3つの引数は、環境設定管理テーブル141に登録されたアクセスキーID、秘密アクセスキーおよび地域に対応する。また、テンプレート145aは、引数として「object.name」、「property.name」および「right」を含む。この3つの引数は、変換前プログラムから抽出される変数名、キーおよび代入値に対応する。
テンプレート145aによれば、アクセスキーIDや秘密アクセスキーを用いてクラウドシステム40のストレージシステム43にアクセスし、変数に対応するコンテナにキーバリュー形式のデータを書き込む変換後プログラムが得られる。
図10は、変換後プログラムの例を示す図である。
プログラム146は、プログラム記憶部122に記憶される。プログラム146は、環境設定管理テーブル141、プログラム142およびテンプレート145aから生成された変換後プログラムである。引数「accessKeyId」に環境設定管理テーブル141の「xxx」が代入されている。引数「secretAccessKey」に環境設定管理テーブル141の「yyy」が代入されている。引数「region」に環境設定管理テーブル141の「us−west−2」が代入されている。また、引数「object.name」にプログラム142の「csv」が代入されている。引数「property.name」にプログラム142の「name」が代入されている。引数「right」にプログラム142の「object」が代入されている。
プログラム146によれば、アクセスキーID「xxx」と秘密アクセスキー「yyy」を用いてストレージシステム43にアクセスし、変数「name」の値に対応付けて変数「object」の値をコンテナ「csv」に書き込むことになる。このプログラム146は、例えば、PaaSシステム41に配備されて実行される。
図11は、変換後プログラムに含まれるコンポーネント例を示す図である。
プログラム142から生成される変換後プログラム群によれば、アプリケーションソフトウェアはコンポーネント147a,147b,147c,147d,147eを含む。
コンポーネント147aは、HTTPリクエストの受信に応じて一連の処理を開始するアプリケーションプログラムである。コンポーネント147aは、「/csv」を含むURLを指定したPOSTメソッドのHTTPリクエストを受信するインタフェースと、このHTTPリクエストを処理する関数を含む。コンポーネント147bは、コンテナ名が「csv」であるコンテナである。コンポーネント147bは、データを書き込むPUT用のAPIとデータを読み出すGET用のAPIをもつ。コンポーネント147cは、関数名が「splitCsv」であるFaaS用の関数である。コンポーネント147dは、コンテナ名が「record」であるコンテナである。コンポーネント147dは、データを書き込むPUT用のAPIとデータを読み出すGET用のAPIをもつ。コンポーネント147eは、関数名が「sendEmail」であるFaaS用の関数である。
コンポーネント147aは、PaaSシステム41で実行される。コンポーネント147c,147eは、FaaSシステム42で実行される。コンポーネント147b,147dは、ストレージシステム43で実行される。コンポーネント147aは、コンポーネント147bのAPIを呼び出してデータを書き込む。データが書き込まれると、Webフックによりコンポーネント147cが起動する。コンポーネント147cは、コンポーネント147bのAPIを呼び出してデータを読み出し、コンポーネント147dのAPIを呼び出してデータを書き込む。データが書き込まれると、Webフックによりコンポーネント147eが起動する。コンポーネント147eは、コンポーネント147dのAPIを呼び出してデータを読み出し、電子メールを送信する。
プログラム142からは、まず図8の変換ルール1が適用されてコンポーネント147aが生成される。次に、プログラム142の「var csv={}」に対して図8の変換ルール2が適用され、コンポーネント147bが生成される。次に、プログラム142の「csv[name]=object」に対して図8の変換ルール3が適用され、コンポーネント147aがコンポーネント147bを呼び出すように更新される。
次に、プログラム142の「csv[name].split」に対して図8の変換ルール4が適用され、コンポーネント147cが生成される。次に、プログラム142の「for(…record of…){…}」に対して図8の変換ルール5が適用され、コンポーネント147d,147eが生成される。また、コンポーネント147cがコンポーネント147dを呼び出すように更新される。
図12は、実行状態管理テーブルの例を示す図である。
実行状態管理テーブル148は、実行状態記憶部124に記憶される。実行状態管理テーブル148は、サービスインスタンスIDおよび実行状態の項目を有する。サービスインスタンスIDの項目には、サービスインスタンスを識別する識別情報が登録される。サービスインスタンスIDは、あるサービスインスタンスを最初に配備するときに、他のサービスインスタンスと重複しないように当該サービスインスタンスに対して付与される。
実行状態の項目には、サービスインスタンスの状態が登録される。実行状態は、未配備(none)、実行中(running)、停止中(terminated)および削除済み(removed)の何れかである。未配備は、サービスインスタンスがクラウドシステム40に配備されたことがないことを示す。実行中は、サービスインスタンスがクラウドシステム40に配備されて実行可能であることを示す。停止中は、サービスインスタンスは停止しているものの、データはまだ削除されておらず再配備が可能であることを示す。削除済みは、データが削除されて再配備が不能であることを示す。
図13は、インスタンスの配備例を示す図である。
クラウドシステム40には、サービスインスタンスの構成要素としてインスタンス149a,149b,149c,149d,149eが形成される。インスタンス149aはPaaSシステム41で実行される。インスタンス149b,149cはFaaSシステム42で実行される。インスタンス149d,149eはストレージシステム43で実行される。インスタンス149aはコンポーネント147aから起動される。インスタンス149bはコンポーネント147cから起動される。インスタンス149cはコンポーネント147eから起動される。インスタンス149dはコンポーネント147bから起動される。インスタンス149eはコンポーネント147dから起動される。
インスタンス149aは、HTTPリクエストを受信すると処理を開始し、インスタンス149dにデータを送信する。インスタンス149bは、インスタンス149dがデータを保存すると処理を開始し、インスタンス149dからデータを受信し、インスタンス149eにデータを送信する。インスタンス149cは、インスタンス149eがデータを保存すると処理を開始し、インスタンス149eからデータを受信する。
開発サーバ100がクライアント31から配備リクエストを受信した場合、図13のようにインスタンス149a,149b,149c,149d,149eが形成される。ここでは、配備するサービスインスタンスのサービスインスタンスIDが「123」であるとする。すると、例えば、インスタンス149bの関数名が、サービスインスタンスIDを含むように「splitCsv_123」と変更される。また、インスタンス149cの関数名が、サービスインスタンスIDを含むように「sendEmail_123」と変更される。また、インスタンス149dのコンテナ名が、サービスインスタンスIDを含むように「csv_123」と変更される。また、インスタンス149eのコンテナ名が、サービスインスタンスIDを含むように「record_123」と変更される。
その後、開発サーバ100がクライアント31から停止リクエストを受信した場合、PaaSシステム41からインスタンス149aが消去され、FaaSシステム42からインスタンス149b,149cが消去される。ただし、ストレージシステム43のインスタンス149d,149eは、データを保持しておくため消去されない。その後、開発サーバ100がクライアント31から削除リクエストを受信した場合、ストレージシステム43からインスタンス149d,149eが消去される。
次に、開発サーバ100の処理手順について説明する。
図14は、コンパイルサービスの手順例を示すフローチャートである。
(S10)コンパイル部132は、変換前プログラムと制約情報143を取得する。
(S11)ルールマッチング部134は、字句解析や構文解析などにより変換前プログラムを解析して、変換前プログラムの構造を示す抽象構文木を生成する。
(S12)ルールマッチング部134は、着目位置を抽象構文木のルートに移動する。
(S13)ルールマッチング部134は、直近のステップS12以降に行った、ルートから始まる深さ優先探索によって、抽象構文木に含まれる全てのノードを選択したか判断する。抽象構文木の全てのノードを選択した場合はステップS20に処理が進み、未選択のノードがある場合はステップS14に処理が進む。
(S14)ルールマッチング部134は、現在の着目位置から深さ優先探索によって次のノードを選択し、選択したノードに着目位置を移動する。現在の着目位置がルートである場合、ルートノードを選択する。現在の着目位置が何れかのノードであり、そのノードの配下に子ノードが存在する場合、当該子ノードを選択する。現在の着目位置がルートノード以外のノードであり、そのノードの配下に子ノードが存在しない場合、未選択の子ノードが存在する親ノードまで着目位置を戻し、当該未選択の子ノードを選択する。
(S15)ルールマッチング部134は、ステップS14で選択したノードに対して、変換ルールテーブル145に登録されている全ての変換ルールを選択したか判断する。全ての変換ルールを選択した場合はステップS19に処理が進み、未選択の変換ルールが存在する場合はステップS16に処理が進む。
(S16)ルールマッチング部134は、変換ルールテーブル145に登録されている複数の変換ルールの中から未選択の変換ルールを1つ選択する。
(S17)ルールマッチング部134は、ステップS14で選択したノードが、ステップS16で選択した変換ルールのコードパターンを満たすか判断する。また、ルールマッチング部134は、制約情報143やその他のプログラム変換状況が、ステップS16で選択した変換ルールの適用条件を満たすか判断する。コードパターンと適用条件の両方を満たす場合はステップS18に処理が進み、コードパターンと適用条件の少なくとも一方を満たさない場合はステップS15に処理が進む。
(S18)ルールマッチング部134は、ステップS16で選択した変換ルールを適用候補として選択する。そして、ステップS15に処理が進む。
(S19)コード生成部135は、ステップS18で選択された適用候補のうちの1つを、ステップS14で選択されたノードに対して適用して変換後プログラムを生成する。そして、ステップS13に処理が進む。変換ルール適用の詳細は後述する。
(S20)ルールマッチング部134は、直近のステップS12以降に行った深さ優先探索の間に、抽象構文木の1以上のノードに対して変換ルールが適用されたか判断する。変換ルールが適用されたノードがある場合、ルールマッチング部134は、ステップS12に戻って抽象構文木の深さ優先探索を再実行する。変換ルールが適用されたノードがない場合、コンパイルサービスが終了する。
図15は、変換ルール適用の手順例を示すフローチャートである。
この変換ルール適用は、上記のステップS19で実行される。
(S21)コード生成部135は、着目するノードに対して選択された適用候補の変換ルールが1つ以上あるか判断する。適用候補の変換ルールがある場合はステップS22に処理が進み、適用候補の変換ルールがない場合は変換ルール適用が終了する。
(S22)コード生成部135は、適用候補の変換ルールのうち最も優先度の高い変換ルールを選択する。適用候補が1つしかない場合はその変換ルールを選択すればよい。
(S23)コード生成部135は、ステップS22で選択した変換ルールに含まれるテンプレートの引数を特定する。コード生成部135は、着目するノードの中から、特定した引数に対応する値を抽出する。抽出する値としては、例えば、変換前プログラムで使用されている変数名や関数名などが挙げられる。また、コード生成部135は、抽出した値を、変換後プログラムの中でユニークな値になるように変更する。
(S24)コード生成部135は、環境設定管理テーブル141から、利用するクラウドシステム40に対応する認証情報を読み出す。コード生成部135は、読み出した認証情報の中から、ステップS23で特定した引数に対応する値を抽出する。
(S25)コード生成部135は、ステップS23,S24で抽出した値をテンプレートの引数に対して代入し、変換後プログラムを生成する。例えば、コード生成部135は、引数を示す所定の文字列を、ステップS23,S24で抽出した値に置換する。
(S26)コード生成部135は、ステップS25で生成した変換後プログラムを、変換後プログラム群に挿入する。なお、1つの変換前プログラムから、複数のクラウドサービスを利用するための複数の断片的プログラムが生成され得る。
図16は、起動サービスの手順例を示すフローチャートである。
(S30)開発UI部131は、実行状態変更リクエストを受信する。実行状態変更リクエストは、配備リクエスト、停止リクエストまたは削除リクエストである。
(S31)起動制御部133は、実行状態変更リクエストが指定するサービスインスタンスに対してサービスインスタンスIDが既に割り当てられているか判断する。配備されたことのない新規のサービスインスタンスに対してはサービスインスタンスIDが未割り当てである。既存のサービスインスタンスの再配備、停止または削除の際には、実行状態変更リクエストにサービスインスタンスIDが含まれていてもよい。サービスインスタンスIDが割り当て済みである場合はステップS34に処理が進み、サービスインスタンスIDが未割り当てである場合はステップS32に処理が進む。
(S32)起動制御部133は、新規のサービスインスタンスIDを生成し、生成したサービスインスタンスIDを実行状態管理テーブル148に登録する。
(S33)起動制御部133は、ステップS32のサービスインスタンスIDに対応する実行状態を未配備(none)に初期化する。
(S34)起動制御部133は、実行状態を変更するサービスインスタンスに対応する変換後プログラム群から、FaaSの関数名やコンテナ名などの構成要素名を検索する。起動制御部133は、他のサービスインスタンスと競合しないように、その構成要素名をユニークな名称に変更する。例えば、変換後プログラム群に記載された関数名やコンテナ名の末尾に、サービスインスタンスIDなどのリテラルを付加する。
(S35)起動制御部133は、受け付けた実行状態変更リクエストが配備リクエストであるか判断する。実行状態変更リクエストが配備リクエストである場合はステップS36に処理が進み、それ以外の場合はステップS40に処理が進む。
(S36)起動制御部133は、実行状態管理テーブル148に登録された実行状態が未配備(none)または停止中(terminated)であるか判断する。実行状態が未配備または停止中である場合、ステップS37に処理が進む。実行状態がそれ以外である場合、すなわち、実行状態が実行中(running)または削除済み(removed)である場合、ステップS39に処理が進む。
(S37)起動制御部133は、ステップS34で書き換えた変換後プログラム群を用いて、PaaSシステム41、FaaSシステム42およびストレージシステム43と通信し、サービスインスタンスをクラウドシステム40に配備する。例えば、起動制御部133は、PaaSシステム41やFaaSシステム42に実行させたい変換後プログラムを送信することがある。送信された変換後プログラムはすぐに実行される場合もあるし、所定のイベントが発生したときに実行される場合もある。また、起動制御部133は、変換後プログラムに規定された手順で設定情報を送信することがある。例えば、起動制御部133は、ストレージシステム43にコンテナ名を含む設定情報を送信する。
(S38)起動制御部133は、実行状態管理テーブル148に登録された実行状態を実行中(running)に変更する。そして、起動サービスが終了する。
(S39)起動制御部133は、実行状態変更リクエストが拒否されたことを示すエラーメッセージを生成する。開発UI部131は、エラーメッセージを返信する。
図17は、起動サービスの手順例を示すフローチャート(続き)である。
(S40)起動制御部133は、受け付けた実行状態変更リクエストが停止リクエストであるか判断する。実行状態変更リクエストが停止リクエストである場合はステップS41に処理が進み、それ以外の場合はステップS44に処理が進む。
(S41)起動制御部133は、実行状態管理テーブル148に登録された実行状態が実行中(running)であるか判断する。実行状態が実行中である場合、ステップS42に処理が進む。実行状態がそれ以外である場合、すなわち、実行状態が未配備(none)、停止中(terminated)または削除済み(removed)である場合、ステップS39に処理が進む。
(S42)起動制御部133は、ステップS34で書き換えた変換後プログラム群を用いて、PaaSシステム41、FaaSシステム42およびストレージシステム43と通信し、クラウドシステム40にサービスインスタンスを停止させる。起動制御部133は、変換後プログラムに規定された手順で設定情報を送信することがある。例えば、PaaSシステム41のアプリケーションやFaaSシステム42の関数が消去される。
(S43)起動制御部133は、実行状態管理テーブル148に登録された実行状態を停止中(terminated)に変更する。そして、起動サービスが終了する。
(S44)起動制御部133は、起動制御部133は、受け付けた実行状態変更リクエストが削除リクエストであるか判断する。実行状態変更リクエストが削除リクエストである場合はステップS45に処理が進み、それ以外の場合は起動サービスが終了する。
(S45)起動制御部133は、実行状態管理テーブル148に登録された実行状態が停止中(terminated)であるか判断する。実行状態が停止中である場合、ステップS46に処理が進む。実行状態がそれ以外である場合、すなわち、実行状態が未配備(none)、実行中(running)または削除済み(removed)である場合、ステップS39に処理が進む。
(S46)起動制御部133は、ステップS34で書き換えた変換後プログラム群を用いて、PaaSシステム41、FaaSシステム42およびストレージシステム43と通信し、クラウドシステム40にサービスインスタンスを削除させる。例えば、ストレージシステム43のコンテナが消去される。
(S47)起動制御部133は、実行状態管理テーブル148に登録された実行状態を削除済み(removed)に変更する。そして、起動サービスが終了する。
第2の実施の形態の情報処理システムによれば、コアロジック全体が1つのコンピュータ上で閉じて実行されるようなプログラムを開発者が作成すれば、そのプログラムから複数のクラウドサービスを利用し連携させるプログラム群が生成される。よって、開発者はクラウド事業者が独自に規定したAPIや規約を学習しなくてもよく、学習コストを低減することができる。また、開発者は複数のクラウドサービスに分散する断片的なプログラムや設定情報を直接記述しなくてよく、コアロジックの定義に注力することができる。よって、複数のクラウドサービスを利用するアプリケーションソフトウェアの開発効率が向上する。また、複数のクラウドサービスに対するプログラムや設定情報の送信が、開発者に代わって開発サーバ100によって一括して行われる。よって、開発者が個別にクラウドサービスにアクセスしなくてよく、サービスインスタンスの配備を効率化できる。
10 情報処理装置
11 記憶部
12 処理部
13 コードパターン
14a,14b テンプレート
15,16a,16b プログラム
21,22 システム

Claims (9)

  1. コードパターンと、処理要求に応じてシステムが特定の処理を実行するよう規定するプログラムの書式を示す第1のテンプレートと、前記システムにネットワーク経由で前記処理要求を送信するプログラムの書式を示す第2のテンプレートとを記憶する記憶部と、
    第1のプログラムを取得し、前記第1のプログラムの中から前記コードパターンに該当する第1のコードを検出し、前記第1のコードおよび前記第1のテンプレートを用いて、前記システムが前記第1のコードに対応する処理を実行するよう規定する第2のプログラムを生成し、前記第1のプログラムの中から前記第1のコードに依存する第2のコードを検出し、前記第2のコードおよび前記第2のテンプレートを用いて、前記システムと異なる他のシステムに実行させる第3のプログラムを生成する処理部と、
    を有する情報処理装置。
  2. 前記処理部は更に、前記第2のプログラムを前記システムに送信するか、または、前記第2のプログラムに基づいて設定情報を前記システムに送信する、
    請求項1記載の情報処理装置。
  3. 前記記憶部は、前記システムにアクセスする権利を示す認証情報を記憶し、
    前記第3のプログラムの生成では、前記処理部は、前記第2のテンプレートに基づいて前記認証情報を前記第3のプログラムに埋め込む、
    請求項1記載の情報処理装置。
  4. 前記記憶部は、前記コードパターンに対応付けて前記第1のテンプレートと優先度とを記憶し、他のコードパターンに対応付けて第3のテンプレートと他の優先度とを記憶し、
    前記処理部は更に、前記第1のコードが前記コードパターンと前記他のコードパターンの両方に該当する場合、前記優先度と前記他の優先度とを比較し、前記優先度が前記他の優先度より高い場合に前記第1のテンプレートを優先的に使用する、
    請求項1記載の情報処理装置。
  5. 前記処理部は更に、前記第2のプログラムを前記システムに適用するとき、前記システムで実行される他の処理と重複しない識別情報を割り当て、前記第2のプログラムの中に記載された処理名称を前記識別情報を用いて書き換える、
    請求項1記載の情報処理装置。
  6. 前記コードパターンは変数の定義を示し、前記システムは前記処理要求に含まれるデータを保存するストレージサービスを提供する、
    請求項1記載の情報処理装置。
  7. 前記コードパターンは変数の値を用いた演算を示し、前記システムは前記処理要求で指定された関数を実行する関数実行サービスを提供する、
    請求項1記載の情報処理装置。
  8. 情報処理装置が実行する情報処理方法であって、
    第1のプログラムを取得し、
    前記第1のプログラムの中から所定のコードパターンに該当する第1のコードを検出し、処理要求に応じてシステムが特定の処理を実行するよう規定するプログラムの書式を示す第1のテンプレートと前記第1のコードとを用いて、前記システムが前記第1のコードに対応する処理を実行するよう規定する第2のプログラムを生成し、
    前記第1のプログラムの中から前記第1のコードに依存する第2のコードを検出し、前記システムにネットワーク経由で前記処理要求を送信するプログラムの書式を示す第2のテンプレートと前記第2のコードとを用いて、前記システムと異なる他のシステムに実行させる第3のプログラムを生成する、
    情報処理方法。
  9. コンピュータに、
    第1のプログラムを取得し、
    前記第1のプログラムの中から所定のコードパターンに該当する第1のコードを検出し、処理要求に応じてシステムが特定の処理を実行するよう規定するプログラムの書式を示す第1のテンプレートと前記第1のコードとを用いて、前記システムが前記第1のコードに対応する処理を実行するよう規定する第2のプログラムを生成し、
    前記第1のプログラムの中から前記第1のコードに依存する第2のコードを検出し、前記システムにネットワーク経由で前記処理要求を送信するプログラムの書式を示す第2のテンプレートと前記第2のコードとを用いて、前記システムと異なる他のシステムに実行させる第3のプログラムを生成する、
    処理を実行させる情報処理プログラム。
JP2017093526A 2017-05-10 2017-05-10 情報処理装置、情報処理方法および情報処理プログラム Active JP6940751B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2017093526A JP6940751B2 (ja) 2017-05-10 2017-05-10 情報処理装置、情報処理方法および情報処理プログラム
US15/972,365 US10521201B2 (en) 2017-05-10 2018-05-07 Information processing apparatus and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017093526A JP6940751B2 (ja) 2017-05-10 2017-05-10 情報処理装置、情報処理方法および情報処理プログラム

Publications (2)

Publication Number Publication Date
JP2018190261A true JP2018190261A (ja) 2018-11-29
JP6940751B2 JP6940751B2 (ja) 2021-09-29

Family

ID=64097740

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017093526A Active JP6940751B2 (ja) 2017-05-10 2017-05-10 情報処理装置、情報処理方法および情報処理プログラム

Country Status (2)

Country Link
US (1) US10521201B2 (ja)
JP (1) JP6940751B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021163092A (ja) * 2020-03-31 2021-10-11 株式会社日立製作所 プログラム実行支援装置、及びプログラム実行支援方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11960940B2 (en) * 2018-05-29 2024-04-16 Telefonaktiebolaget Lm Ericsson (Publ) Performance of function as a service
US10678522B1 (en) * 2018-12-14 2020-06-09 Mouri Tech Llc Compiler and method for compiling business rules for a serverless runtime environment
US11150935B2 (en) 2019-07-05 2021-10-19 International Business Machines Corporation Container-based applications
US11340952B2 (en) 2019-11-11 2022-05-24 Microsoft Technology Licensing, Llc Function performance trigger
CN112671734B (zh) * 2020-12-16 2023-06-09 中国平安人寿保险股份有限公司 面向多数据源的报文处理方法及其相关设备
CN117112074B (zh) * 2023-06-19 2024-03-12 领悦数字信息技术有限公司 将http应用自动转换成无服务器函数的方法、系统和介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09160784A (ja) * 1995-12-06 1997-06-20 Nec Corp 並列化コンパイル方式
JP2008097249A (ja) * 2006-10-11 2008-04-24 Internatl Business Mach Corp <Ibm> プログラム中の命令列をより高速な命令に置換する技術
JP2016519824A (ja) * 2013-04-09 2016-07-07 サイトリックス システムズ,インコーポレイテッド クラウド同期型データの使用によるネイティブデスクトップの提供
JP2016177652A (ja) * 2015-03-20 2016-10-06 富士通株式会社 コンパイラプログラム、システム、方法、及び装置
JP2017507415A (ja) * 2014-08-13 2017-03-16 株式会社日立製作所 クラウド環境におけるitインフラ管理のための方法とその装置
WO2017062384A1 (en) * 2015-10-05 2017-04-13 Fugue, Inc. System and method for building, optimizing, and enforcing infrastructure on a cloud based computing environment

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3762867B2 (ja) * 1999-01-29 2006-04-05 富士通株式会社 コンパイラ装置、コンパイル方法、およびそのためのプログラムを格納した記憶媒体
US7240327B2 (en) * 2003-06-04 2007-07-03 Sap Ag Cross-platform development for devices with heterogeneous capabilities
US9027002B2 (en) 2010-10-27 2015-05-05 Hitachi, Ltd. Method of converting source code and source code conversion program
US9003141B2 (en) * 2011-11-14 2015-04-07 Ca, Inc. Enhanced software application platform
US20130271476A1 (en) * 2012-04-17 2013-10-17 Gamesalad, Inc. Methods and Systems Related to Template Code Generator
US9806954B2 (en) * 2014-06-03 2017-10-31 Equinix, Inc. Transformation engine for datacenter colocation and network interconnection products

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09160784A (ja) * 1995-12-06 1997-06-20 Nec Corp 並列化コンパイル方式
JP2008097249A (ja) * 2006-10-11 2008-04-24 Internatl Business Mach Corp <Ibm> プログラム中の命令列をより高速な命令に置換する技術
JP2016519824A (ja) * 2013-04-09 2016-07-07 サイトリックス システムズ,インコーポレイテッド クラウド同期型データの使用によるネイティブデスクトップの提供
JP2017507415A (ja) * 2014-08-13 2017-03-16 株式会社日立製作所 クラウド環境におけるitインフラ管理のための方法とその装置
JP2016177652A (ja) * 2015-03-20 2016-10-06 富士通株式会社 コンパイラプログラム、システム、方法、及び装置
WO2017062384A1 (en) * 2015-10-05 2017-04-13 Fugue, Inc. System and method for building, optimizing, and enforcing infrastructure on a cloud based computing environment

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021163092A (ja) * 2020-03-31 2021-10-11 株式会社日立製作所 プログラム実行支援装置、及びプログラム実行支援方法
JP7313309B2 (ja) 2020-03-31 2023-07-24 株式会社日立製作所 プログラム実行支援装置、及びプログラム実行支援方法

Also Published As

Publication number Publication date
US10521201B2 (en) 2019-12-31
US20180329692A1 (en) 2018-11-15
JP6940751B2 (ja) 2021-09-29

Similar Documents

Publication Publication Date Title
JP6940751B2 (ja) 情報処理装置、情報処理方法および情報処理プログラム
US10972367B2 (en) Provisioning framework for binding related cloud services
Burns et al. Kubernetes: up and running
US10225140B2 (en) Portable instance provisioning framework for cloud services
US9274784B2 (en) Automatic deployment and update of hybrid applications
US9063725B2 (en) Portable management
US8234620B1 (en) Method and system for software development using distributed computing resources
US20210149648A1 (en) System and a method for automating application development and deployment
US10901804B2 (en) Apparatus and method to select services for executing a user program based on a code pattern included therein
JP2021518619A (ja) コネクタ開発および統合チャネル展開のためのシステムおよび方法
TW200820075A (en) Method and apparatus for on-demand composition and teardown of service infrastructure
JP2014514659A (ja) マルチノードアプリケーションのデプロイメント・システム
CN113168345A (zh) 云服务的流线型安全部署
US9459859B2 (en) Template derivation for configuration object management
US8127271B2 (en) Method and system for accessing a resource implemented in a computer network
Reynders Modern API Design with ASP .NET Core 2
US20070061277A1 (en) Method, system, and storage medium for providing dynamic deployment of grid services over a computer network
US9350596B2 (en) On-demand tethered greedy virtual application appliance
JP6993577B2 (ja) インタフェース変換プログラム、インタフェース変換方法および情報処理装置
KR20210144045A (ko) 마이크로서비스 아키텍처 애플리케이션 실행 시스템과 방법 및 이를 위한 컴퓨터 프로그램
JP7177335B2 (ja) 情報処理方法、情報処理装置および情報処理プログラム
WO2023084345A1 (en) Automated deployment of enterprise archive with dependency on application server via script
US11620126B2 (en) Dynamic multiple repository package management through continuous integration
Klems AWS Lambda Quick Start Guide: Learn how to build and deploy serverless applications on AWS
Menga Docker on Amazon Web Services: Build, deploy, and manage your container applications at scale

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200213

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20200225

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20200225

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20201209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20201215

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210212

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210323

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210519

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20210803

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210816

R150 Certificate of patent or registration of utility model

Ref document number: 6940751

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150