JP2019179383A - Api処理方法、端末、api処理プログラム - Google Patents

Api処理方法、端末、api処理プログラム Download PDF

Info

Publication number
JP2019179383A
JP2019179383A JP2018068058A JP2018068058A JP2019179383A JP 2019179383 A JP2019179383 A JP 2019179383A JP 2018068058 A JP2018068058 A JP 2018068058A JP 2018068058 A JP2018068058 A JP 2018068058A JP 2019179383 A JP2019179383 A JP 2019179383A
Authority
JP
Japan
Prior art keywords
program
format
api
processing
api call
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
JP2018068058A
Other languages
English (en)
Other versions
JP7059757B2 (ja
Inventor
功作 木村
Kosaku Kimura
功作 木村
シュリダル チョーダリー
Choudhary Shridhar
シュリダル チョーダリー
敦二 関口
Atsuji Sekiguchi
敦二 関口
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 JP2018068058A priority Critical patent/JP7059757B2/ja
Publication of JP2019179383A publication Critical patent/JP2019179383A/ja
Application granted granted Critical
Publication of JP7059757B2 publication Critical patent/JP7059757B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】並列性を考慮して効率よくプログラムを実行する。【解決手段】第一の形式で記載されたプログラムであって、当該プログラムにて定義された複数のAPI呼び出し処理を実行する端末と、前記複数のAPI呼び出し処理に応じて、当該API呼び出し処理に対応する処理を実行するよう第二の形式で記載されたプログラムを動作させる複数のサーバー装置とを有するAPI処理方法であって、端末は、第二の形式で記載されたプログラムに関する情報を取得し、取得したプログラムに関する情報に基づいて前記複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定する。特定されたAPI呼び出し処理に関する情報をサーバー装置に送信するAPI処理方法。【選択図】図5

Description

本発明は、API処理方法、端末、API処理プログラムに関する。
従来より、プログラムの処理を効率よく実行するための技術が提案されている。
例えば、プログラム中の同期処理を非同期メッセージ、非同期に処理を実行させる命令列およびライブラリ待ち合わせを行わせる命令列を出力して分散配置可能にすると共に複数のCPUに分散配置する技術がある。
また、ソフトウェアのソースコードを変換する技術であって、変換された中間形式を抽象化するステップで記憶された逆変換ルールを用いて、抽象化された中間形式を抽象化される前の中間形式に変換する技術がある。また、この技術では、ソースコードを中間形式に変換するステップで記憶された逆変換ルールを用いて、抽象化される前の中間形式をソースコードである抽象化ソースコードに変換する。
また、ルール定義言語でルールを記述し、翻訳器を介してこれらのルールを渡してランタイムエンジンに送り、ランタイムエンジンを使用して翻訳された命令をスケジュールし、同時に処理する技術がある。
特開2001−184320号公報 特開2013−120491号公報 特開2007−519075号公報
しかし、API(Application Programming Interface)の関数を呼び出してプログラムの処理を実行する場合において、プログラムが非効率な記述となっていることがある。例えば、プログラムが、同期的にAPIの関数を呼び出し、順次実行するように記述されていることがある。プログラムが同期的な記述になっていると、非同期に並行して実行してもよい関数がある場合であっても、同期的に順次実行されることになるため、時間効率がよくない、という問題があった。
本発明は、一つの側面として、並列性を考慮して効率よくプログラムを実行することを目的とする。
一つの態様として、第一の形式で記載されたプログラムであって、当該プログラムにて定義された複数のAPI呼び出し処理を実行する端末を有するAPI処理方法である。また、前記複数のAPI呼び出し処理に応じて、当該API呼び出し処理に対応する処理を実行するよう第二の形式で記載されたプログラムを動作させる複数のサーバー装置を有するAPI処理方法である。前記端末は、前記第二の形式で記載されたプログラムに関する情報を取得し、取得したプログラムに関する情報に基づいて前記複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定する。特定されたAPI呼び出し処理に関する情報をサーバー装置に送信する。
一つの側面として、並列性を考慮して効率よくプログラムを実行することができる、という効果を有する。
非同期関数のコールバックの記述の一例を示す図である。 Promiseのパターンを用いた非同期関数の記述の一例を示す図である。 async/awaitのパターンを用いた非同期関数の記述の一例を示す図である。 本発明の実施形態に係るAPI処理システムの概略構成を示すブロック図である。 第1実施形態の端末の概略構成を示すブロック図である。 変換対象のプログラムであって、同期的な記述、及び非同期的な記述が混在して書かれた形式のプログラムの一例を示す図である。 プログラムに対する前処理による変換の一例を示す図である。 プログラムに対する前処理による変換の一例を示す図である。 プログラムに対する前処理による変換の一例を示す図である。 プログラムに対する前処理による変換の一例を示す図である。 前処理部の変換により得られた同期的な記述のプログラムの一例を示す図である。 関数リストの一例を示す図である。 プログラムに対する変換処理の一例を示す図である。 プログラムに対する変換処理の一例を示す図である。 プログラムに対する変換処理の一例を示す図である。 プログラムに対する変換処理の一例を示す図である。 プログラムに対する変換処理の一例を示す図である。 第1実施形態の端末として機能するコンピュータの概略構成を示すブロック図である。 第1実施形態の端末の変換処理の一例を示すフローチャートである。 第2実施形態の端末の概略構成を示すブロック図である。 表作成部によって作成された表の一例を示す図である。 表更新部によって更新された表の一例を示す図である。 動詞表の一例を示す図である。 表更新部によって更新された表の一例を示す図である。 表更新部によって更新された表の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 第2実施形態の端末として機能するコンピュータの概略構成を示すブロック図である。 第2実施形態の端末の変換処理の一例を示すフローチャートである。 第3実施形態の端末の概略構成を示すブロック図である。 前処理部の変換により得られた同期的な記述のプログラムの一例を示す図である。 関数リストの一例を示す図である。 表作成部によって作成された表の一例を示す図である。 関数HTTPリクエスト対応表の一例を示す図である。 表更新部によって更新された表の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 第3実施形態の端末として機能するコンピュータの概略構成を示すブロック図である。 第3実施形態の端末の変換処理の一例を示すフローチャートである。 第4実施形態の端末の概略構成を示すブロック図である。 前処理部の変換により得られた同期的な記述のプログラムの一例を示す図である。 関数リストの一例を示す図である。 表作成部によって作成された表の一例を示す図である。 管理表作成部の処理の一例を示す図である。 並列不可ペア管理表の一例を示す図である。 表更新部によって更新された表の一例を示す図である。 並列性に基づく実行順序のプログラムへの反映の一例を示す図である。 第4実施形態の端末として機能するコンピュータの概略構成を示すブロック図である。 第4実施形態の端末の変換処理の一例を示すフローチャートである。 第2〜第4実施形態の適用先の一例を示す図である。
以下、図面を参照して本発明に係る実施形態の一例を詳細に説明する。
まず、本発明の実施形態の前提となる背景について説明する。
API(Application Programming Interface)は、ブラックボックス化された有用なリソース(データ,機能など)にプログラムからアクセスするためのインターフェースである。ここでいうAPIは、ローカル環境でライブラリが提供するAPI、ネットワーク越しにアクセスするためのWebAPIを含むものとして説明する。
APIは、プログラムからは関数やオブジェクトのインスタンスメソッドの呼び出しで実現される。
APIをラップするクライアントライブラリの関数呼び出し方式には同期的又は非同期的の二種類があるが、基本は非同期的に記述する必要がある。同期的とは処理を順次実行する方式(API呼び出し処理を並行して実行しない方式)であり、非同期的とは処理を実行状況に応じて並列的に実行する方式(API呼び出し処理を並行して実行可能な方式)である。例えば、Node.js(JavaScript(登録商標))のプログラムでは、非同期関数の最後の引数にコールバック関数(Error-first Callbackと呼ばれる)を指定する。例えば、以下のプログラムのようにコールバック関数を指定する。
// ファイルを開く
fs.open(‘file.txt’, ‘r’, (err, data) => { … });
また、同期的及び非同期的な記述の両方に対応する関数もあるが、あくまで一部である。例えば下記のプログラムのようにSyncの記述により同期的な記述に対応する。
data = fs.openSync(‘file.txt’, ‘r’); // fs.openの同期版
上記のように非同期関数ではコールバックを記述するが、従来よりコールバックの入れ子が続く、いわゆるコールバック地獄が知られている。図1に示すようにコールバックが入れ子に記述されるため、コードの管理が煩雑になるという問題がある。図1では、(err,b)、(err,c)、(err,d)が入れ子に記述されている。
このようなコールバック地獄を緩和する従来手法の例としては、以下の二つのパターン(記述方式)が挙げられる。
従来手法(1)はPromiseのパターンを用いる。Promiseでは、図2の下線部で示すコードのように非同期呼び出しを関数の数珠繋ぎで表すことができる、これにより入れ子が平坦化されコールバック地獄を軽減することができ、非同期呼び出しプログラムの理解及び保守が容易となる。なお、PromiseはECMAScript標準ES6の仕様で利用可能なパターンである。なお、以下、プログラムのコードを記載する図面において、着目するコードの部分には下線を付与しておくものとする。
従来手法(2)はasync/awaitのパターンを用いる。async/awaitでは、図3の下線部に示すようにPromiseを返す非同期関数の呼び出しをあたかも同期関数の呼び出しであるかのように記述することができる。これにより非同期な呼び出しプログラムの理解及び保守が容易となる。なお、async/awaitはECMAScript標準 ES2017の仕様で利用可能なパターンである。
また、上記特許文献1は、逐次処理を非同期メッセージ送受信による分散処理に書き換える技術ではあるものの、複数CPUを利用する場合の効率化が目的であり、APIの呼び出しによる非同期処理の記述を容易にするための技術ではなかった。
従来より、上述した非同期的に記述されたプログラムは、統合開発環境やライブラリ、APIクライアントなどのツールを用いて開発していた。統合開発環境は、IDE(Integrated Development Environment)と呼ばれ、言語処理系(コンパイラ、スクリプトエンジン等)も含むものである。ライブラリは、非同期処理を書きやすくする表記方法を備えた関数を格納するためのものである。APIクライアントは、コールバックのインターフェースを備えたものである。
もっとも、非同期処理の記述は直感的でないため、記述性、可読性、保守性が低いという問題がある。また、開発者が、非同期処理のコードの書き方や、非同期処理に対応した関数を含む非同期処理ライブラリの使い方を習得するのに時間が掛かるという問題がある。
そのため、本発明の実施形態では、同期的な記述のプログラムを非同期的な記述に変換して、非同期処理することが可能な手法を提供する場合を例に説明する。これにより、開発者は、従来から用いているツールをそのまま利用し、平易なプログラミングにより逐次処理的なプログラムを記述して、非同期処理を実現できる。
また、プログラムを実行する前に本手法を適用してプログラムを変換する場合を想定する。変換の際に、並列実行が可能な関数については、並列性を考慮して変換することにより、より時間効率のよいプログラムの実行が可能となる。
以下、上記背景に基づく各実施形態を説明する。なお、以下の各実施形態の説明では、Node.jsのJavaScript(登録商標)の環境を前提に説明するが、これに限定されるものではなく、同様の手法を同期的、及び非同期的に記述された他のプログラムの環境に対しても適用することも可能である。
[第1実施形態]
本実施形態は、同期的に記述されたプログラムを、非同期的に記述されたプログラムに変換して自動生成し、実行する場合を例として説明する。非同期的に記述されたプログラムに変換することは、並列性を考慮したプログラムに変換するにあたって前提となる手法である。非同期処理のプログラムの変換には、非同期処理ライブラリを用いる。なお、同期的に記述されたプログラムが、第一の形式で記載されたプログラムの一例である。非同期的に記述されたプログラムが、第二の形式で記載されたプログラムの一例である。
以下、変換の概要について説明する。変換では、同期的に記述されたプログラムを入力とする。あるいは同期的記述及び非同期的記述の混在したプログラムを入力とする。
同期的な記述及び非同期的な記述の混在したプログラムを入力とする場合には、入力されたプログラムをパーズ(構文解析)して抽象構文木(AST(Abstract Syntax Tree))を生成し、次に示すような方法で同期的な記述に書き換える。
関数定義ブロックにてコールバック関数定義を引数に含む関数の呼び出し文を深さ優先で探索する。また、コールバック関数定義の第二引数の名前をユニークなものへ変更する。変更は、プリフィクス(_)や通し番号を付ける等である。また、関数呼び出し文の引数からコールバック関数定義を削除する。また、コールバック関数内でコールバック第二引数が操作されている場合、関数呼び出し文を関数呼び出しの戻り値を初期値とするような変数宣言文に変換する。変数宣言文へは例えば以下のように変換する。
foo(a,b,(err,data)=>{…}) → let _data0 = foo(a,b)
また、変数宣言文の直後にコールバック関数内で通常時に実行されるコード片を挿入する。以上により、同期的記述及び非同期的記述の混在したプログラムが、同期的な記述のプログラムに書き換えられる。
そして、同期的な記述のプログラムを、次に示すような方法で、非同期的な記述に書き換える。
まず、APIクライアントライブラリのソースコードから関数名を参照し、ライブラリ関数呼び出し文を特定する。また、ライブラリの公開している関数リストをAPIクライアントライブラリのソースコードから抽出する。また、特定された関数呼び出し文の関数名が、抽出された関数リスト内に含まれ、オブジェクト変数が当該関数のライブラリモジュールそのもの、またはモジュールに由来するものである場合、その文を関数呼び出し文リストに追加する。また、所定の変換ルールを用いて、非同期処理ライブラリを用いた非同期処理プログラムを生成し出力する。
図4に示すように、本実施形態に係るAPI処理システム100は、端末10と、複数のサーバー装置12とを含み、端末10と、複数のサーバー装置12とが、インターネット等のネットワーク3を介して接続される。
端末10は、プログラムの変換を行い、変換したプログラムを実行する情報処理装置である。
サーバー装置12は、プログラムで呼び出されるAPIを提供する装置である。サーバー装置12は、端末10で実行されたプログラムのAPIの関数呼び出しに応じて適宜、呼び出された関数に対応する必要な処理(呼び出された関数に対応するプログラム)を実行して処理結果を端末10に返却する。サーバー装置12で提供されるAPIは、例えば、AWS(Amazon Web Services)S3や、他社APIである。なお、端末10側は、サーバー装置12から提供されるAPIを呼び出すためのAPIクライアントを導入して、APIを呼び出すプログラムを実装する。また、サーバー装置12の構成は、APIの提供態様によって様々であるため、具体的な構成についての説明は省略する。
端末10は、図5に示すように、機能的には、APIクライアントライブラリ14と、変換ルール16と、前処理部22と、関数特定部24と、変換部26と、実行部28と、通信部30とを含む。
APIクライアントライブラリ14は、APIの関数名の一覧を格納したライブラリである。ライブラリにはソースコードが含まれる。
変換ルール16は、同期的に記述されたプログラムを非同期的な記述に変換するためのルールである。ルールの詳細については後述する。
前処理部22は、変換対象のプログラムが同期的な記述、及び非同期的な記述が混在して書かれた形式である場合に、前処理としてプログラムを同期的な記述に書き換えるように変換する。前処理が必要なのは、変換部26で用いる変換ルール16が、同期的な記述から変換することを前提としているからである。なお、プログラムが同期的な記述のみで書かれた形式である場合には、前処理部22の処理は省略可能である。
以下、前処理部22の具体的な書き換え内容について説明する。
図6に変換対象のプログラムの一例を示す。図6のプログラムの処理概要は、file.txtにorgDataの中身を書き込み保存し、AWSのS3バケットに‘file.txt’をキーとしてfile.txtの中身をアップロードする、という内容である。なお、各コールバック第二引数dataは各々の関数ブロック内でのみ有効となる。ここで、同期関数はfs.writeFileSync、fs.readFileSyncである。非同期関数はs3.createBucket、s3.putObjectである。
次に、図7に示すように、関数定義ブロックの中身をtry-catchで囲む。catchブロックにはcatchされたerrのコンソール出力のみ記述する。
次に、図8に示すように、同期関数を同期的記述に変換する。例えば、Node.jsの場合、Object.keys(fs)でAPIクライアントライブラリ14からモジュールの提供する関数名一覧を取得する。次に、関数名一覧から各関数の同期、及び非同期の対応を特定する。JavaScript(登録商標)の場合、末尾のSyncの有無が同期、非同期の対応とみなせる。次に、APIクライアントライブラリ14のモジュールそのもの、またはモジュール由来のオブジェクト変数について関数名一覧に含まれる関数が呼び出されているコードを探索する。例えば、モジュール、及びモジュール由来のオブジェクト変数は、fs、AWS、s3である。探索されるコードは、fs.writeFileSync、s3.createBucket、fs.readFileSync、s3.putObject、s3.getObjectである。このうち、同期関数の名前を非同期関数のものと同じにする。JavaScript(登録商標)の場合はSyncを削除することで非同期関数のものと同じになる。ここでいう非同期関数のものと同じにすることが同期的な記述への変換である。
次に、図9に示すように、非同期関数を同期的記述に変換する。ここでは、コールバック関数を引数に持つ非同期関数の呼び出し文について以下を実施する。まずコールバック関数定義を抜き出す。また、コールバック第二引数の名前マングリングを行う。名前マングリングとは、プリフィクスを付けると共に末尾に同一名での通し番号を付けることである。第二引数dataを_data0とする。次に、コールバック第二引数の変数宣言に変換する。例えば、s3.getObject({…})を、(err, data)の第二引数の変数宣言として、(1)let _data0 = s3.getObject({…})と変換する。次に、図10に示すコードから、err != null(通常時)で実行されるコード片を抽出する。図10の例では、(2)foo(_data0)、console.log('done')が抽出される。(1)のコードの直後に(2)のコードを配置する。
以上の前処理部22の処理により、プログラムは、図11に示すような同期的に記述されたプログラムに変換される。
次に、関数特定部24の処理を説明する。
関数特定部24は、前処理部22で変換されたプログラムから、APIクライアントライブラリ14を参照して関数の呼び出し文を特定し、プログラムでAPIを呼び出している関数名を一覧にした関数リストを作成する。
関数特定部24は、例えば、Node.jsの場合、Object.keys(fs)でAPIクライアントライブラリ14からモジュールの提供する関数名一覧を取得する。次に、変換されたプログラムに含まれる、APIクライアントライブラリ14のモジュールそのもの、またはモジュール由来のオブジェクト変数を取得する。取得したモジュールそのもの、またはモジュール由来のオブジェクト変数について、関数名一覧に含まれる関数が呼び出されている関数のリストを特定する。例えば、変換されたプログラムに含まれるモジュール、及びモジュール由来のオブジェクト変数は、fs、AWS、s3である。これらに対して特定される関数のリストは、fs.writeFile、s3.createBucket、fs.readFile、s3.putObject、s3.getObjectである。以上の関数特定部24の処理によって特定された関数リスト24Aを図12に示す。関数リスト24Aには、オブジェクトの変数名と関数名との組がリストとして格納される。
変換部26は、前処理部22で同期的な記述に変換したプログラムを、関数特定部24で特定した関数リスト24Aと、変換ルール16とに基づいて、非同期的に記述されたプログラムに変換する。
以下、変換ルール16に基づく変換部26の処理について説明する。関数の呼び出し文については関数リスト24Aを参照する。
まず、図13に示すように、tryブロックの中身を抜き出す。
次に、図14に示すように、抜き出したブロック中の最初のライブラリ関数呼び出し文をawait new Promiseで囲んだものに置き換える。また、関数呼び出し文の引数にコールバック関数を追加する。関数の中身は第二引数をresolveの引数とし、第一引数が指定されていればrejectの引数とするような定型文とする。また、図15に別のコードの場合の例を示す。以上の置き換え、追加をブロック内の関数の呼び出し文ごとに繰り返し、全ての関数について処理する。
次に、図16に示すように、関数定義にasyncを付ける。
以上が変換ルール16に基づく変換部26の変換処理である。最終的に、非同期的な記述に変換されたプログラムの例を図17に示す。
実行部28は、変換部26で変換された非同期的な記述のプログラムを実行する。実行部28は、非同期的に記述されたプログラムの関数呼び出し文に応じて、非同期的に、サーバー装置12のAPIの関数を呼び出して処理する。
通信部30は、実行部28で実行されたプログラムの処理においてAPIの関数の呼び出しによって、ネットワーク3を介してサーバー装置12のAPIを呼び出す。通信部30は、サーバー装置12からAPIの処理結果を取得し、実行部28に受け渡す。なお、上述した本実施形態の手法では、関数の並列性を考慮したプログラムの変換がされているわけではない。もっとも、非同期的な記述でプログラムは記載されているため、同期的な記述の場合のように全てが逐次実行されるわけではなく、コールバックを用いた関数については並列的な順序によってプログラムは実行されることになる。関数の並列性を考慮し、更に効率良く処理を実行する場合については、第2実施形態以降の各実施形態において説明する。
端末10は、例えば図18に示すコンピュータ50で実現することができる。コンピュータ50は、Central Processing Unit(CPU)51と、一時記憶領域としてのメモリ52と、不揮発性の記憶部53とを備える。また、コンピュータ50は、インターフェース(I/F)54と、記憶媒体59に対するデータの読み込み及び書き込みを制御するRead/Write(R/W)部55と、インターネット等のネットワークに接続される通信インターフェース(I/F)56とを備える。CPU51、メモリ52、記憶部53、入出力I/F54、R/W部55、及び通信I/F56は、バス57を介して互いに接続される。なお、通信I/F56は、図5に示す通信部30として機能する。
記憶部53は、Hard Disk Drive(HDD)、Solid State Drive(SSD)、フラッシュメモリ等によって実現できる。記憶媒体としての記憶部53には、コンピュータ50を端末10として機能させるためのAPI処理プログラム60が記憶される。API処理プログラム60は、前処理プロセス62と、関数特定プロセス63と、変換プロセス64と、実行プロセス65とを有する。
CPU51は、API処理プログラム60を記憶部53から読み出してメモリ52に展開し、API処理プログラム60が有するプロセスを順次実行する。CPU51は、前処理プロセス62を実行することで、図5に示す前処理部22として動作する。また、CPU51は、関数特定プロセス63を実行することで、図5に示す関数特定部24として動作する。また、CPU51は、変換プロセス64を実行することで、図5に示す変換部26として動作する。また、CPU51は、実行プロセス65を実行することで、図5に示す実行部28として動作する。これにより、API処理プログラム60を実行したコンピュータ50が、端末10として機能することになる。なお、プログラムを実行するCPU51はハードウェアである。
なお、API処理プログラム60により実現される機能は、例えば半導体集積回路、より詳しくはApplication Specific Integrated Circuit(ASIC)等で実現することも可能である。
次に、本実施形態に係るAPI処理システム100の作用について図19のフローチャートを参照して説明する。
ステップS100で、前処理部22は、プログラムが同期的な記述、及び非同期的な記述が混在して書かれた形式のプログラムを同期的な記述に書き換えて変換する。
ステップS102で、関数特定部24は、前処理部22で変換されたプログラムから、APIクライアントライブラリ14を参照して関数の呼び出し文を特定し、プログラムでAPIを呼び出している関数名を一覧にした関数リストを作成する。
ステップS104で、変換部26は、ステップS100で同期的な記述に変換したプログラムを、ステップS102で特定した関数リスト24Aと、変換ルール16とに基づいて、非同期的に記述されたプログラムに変換する。
ステップS106で、実行部28は、ステップS104で変換された非同期的な記述のプログラムを実行する。実行部28は、非同期的に記述されたプログラムの関数呼び出し文に応じて、非同期的に、サーバー装置12のAPIの関数を呼び出して処理する。
以上説明したように、本実施形態に係るAPI処理システムによれば、同期的な記述に変換したプログラムを、特定した関数リストと、変換ルールとに基づいて、非同期的に記述されたプログラムに変換する。また、変換された非同期的な記述のプログラムを実行する。このため、非同期的なプログラムの処理の作成及び実行を容易にすることができる。
また、プログラムの開発者は,従来の同期関数、及び非同期関数を用いたプログラムや同期的な記述を用いたプログラムを作成するだけで、非同期処理ライブラリを用いたプログラムを、ライブラリの利用方法やノウハウの習得なしに記述することが可能となる。また、非同期処理が可能なプログラムの開発工数が削減され、プログラムの記述性、可読性、及び保守性が向上する。
[第2実施形態]
次に第2実施形態について説明する。第2実施形態では、関数名に含まれる動詞及び名詞に基づいて並列性に基づく実行順序を反映したプログラムを生成する場合について説明する。なお第1実施形態と同様となる箇所については同一符号を付して説明を省略する。
まず本実施形態の背景を説明する。
第1実施形態は非同期的な記述のプログラムに変換する手法であったが、このままではAPIの関数のうち、何れの関数の組み合わせが、並列化して実行可能な関数の組合せであるか分からない。APIにはブラックボックス化されたリソースへの副作用を伴うものがあるため、並列化可能なAPIの組合せには制限がある。副作用とは、例えば、リソースAを作成してからでないとリソースAを操作できない、という順序の問題である。しかし、APIライブラリの関数のシグネチャからはその組み合わせが容易には分からないようになっている。
そこで本実施形態では、関数名に含まれる動詞及び名詞から並列性の有無を判定し、並列性に基づく実行順序をプログラムに反映する場合を例に説明する。前提として、プログラムの各ステートメント(変数宣言、値更新、削除、等)の実行順序を計算し管理表にまとめる。変数の状態を変えるステートメントの実行順序は変更しない想定である。変数の参照を含むステートメントは、その変数の状態が変化しない区間で並列実行可能である。APIに対応する関数呼び出しを含むステートメントを特定したリストを用いて、並列性判定方法によりそれらが並列実行可能かどうかを判定する。そして、並列性を考慮した実行順序を、非同期的な記述のプログラムへの変換に反映する。
次に、関数名に含まれる動詞及び名詞についての概要を説明する。基本的な考え方としては副作用の意味のある特定の動詞が含まれる関数は、それらの関数と別の関数を並列で呼び出した時に常に同じ結果になるとは限らないため並列処理は不可であるとする。また、関数名に頻出する動詞(create,get,put,delete等)と、それらが副作用を生じる意味を持つかどうか(i.e.,状態を変更するものかどうか)を記録した動詞表を作成しておく。例えば、[(動詞,副作用あり?),(create,true),(get,false),…]といった動詞表である。動詞表を用いて、あるAPI呼び出しステートメントAの関数名に副作用を生じる動詞が含まれる場合について考える。Aの関数名に含まれる名詞と同じ名詞を含む、または同じ変数を引数に指定し、かつプログラム中の出現順が後ろである関数呼び出しを含むステートメントBの各々は、Aの後に実行すべきと判定する。
図20に示すように、API処理システム200の端末210は、機能的には、APIクライアントライブラリ14と、変換ルール16と、前処理部22と、関数特定部24と、変換部226と、実行部228と、通信部30とを含む。端末210は、動詞表記憶部214と、表作成部222と、表更新部224とを含む。なお、変換部226が、特定部の一例である。実行部228が、実行部の一例である。
表作成部222には、前処理部22での変換により得られた同期的な記述のプログラムが入力される。本実施形態では、上記図11と同様のプログラムが入力された場合を例に説明する。
表作成部222は、同期的な記述のプログラムから、実行順序管理表を作成する。表作成部222は、まず図21に示すような、tryブロック中のステートメント(関数を含むコード)を抜き出した表222Aを作成する。表222Aは、「項番」、「ステートメント」、「APIに対応?」の項目からなる。「項番」は、「ステートメント」ごとに降順の番号を割り当てる。「APIに対応?」の項目には、各ステートメントに関数呼び出し文リストに含まれるオブジェクト変数名、または関数名が含まれるかどうかに基づくブール値として、trueまたはfalseをセットする。
表更新部224は、表作成部222で作成した表222Aに対し、「変数操作」、「並列性」の項目の列を追加して更新する。まず、表更新部224は、「変数操作」の項目として個別の変数操作ごとに追加し、変数の状態を変更するステートメントに「×」、参照するステートメントに「↓」を挿入する。図22に「変数操作」の項目を追加した表224Aの一例を示す。図22では変数操作として「data」、「cb_data0」の列を追加し、対応するステートメントの状態を更新している。なお、表更新部224の処理では、「ステートメント」、「APIに対応?」の項目に対する更新はないため、図面上の記載は省略するものとする。
次に、表更新部224は、動詞表記憶部214の動詞表214Aを参照し、「並列性」の項目として、副作用のある動詞を含む関数ごとに列を追加する。また、表更新部224は、当該関数を呼び出しているステートメントに「×」、当該関数と同じ名詞を含む、または引数として同じ変数を用いている関数を呼び出しているステートメントに「↓」を挿入する。図23に動詞表214Aの一例を示す。動詞表214Aは動詞に対する副作用の有無をまとめた表である。図24に「並列性」の項目を追加した表224Bの一例を示す。図24では「並列性」の項目の関数として「writeFile」、「createBucket」、「putObject」の列を追加し、対応するステートメントの状態を更新している。なお、動詞表214Aが、動詞及び名詞に関するルールの一例である。
次に、表更新部224は、更新した表の冗長な順序を除去する。図25に示すように、表224Bの項番5は、「createBucket」に関して、項番4と共に項番2の後に実行すべきとある。それと同時に、「putObject」に関して、項番4の後に実行すべきでもある。そのため、図25の矢印で示すように順序を特定することができ、項番5の下線付きの「↓」が冗長であるため、これを除去する。
以上の表更新部224の更新処理により、並列性に基づく実行順序を特定する。
変換部226は、上記の第1実施形態の変換部26と同様の処理により、同期的な記述のプログラムを非同期的な記述のプログラムに変換する。変換部226は、変換した非同期的な記述のプログラムから、表更新部224で更新した表224Bを用いて、並列性に基づく実行順序を反映したプログラムを生成する。なお、変換したプログラムに対して実行順序を反映する場合を例に説明するが、変換と実行順序の反映を同時に処理してもよい。また、並列性に基づく実行順序を反映したプログラムを生成することが、複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定することの一例である。
変換部226の具体的な反映処理について以下の処理(1)〜処理(4)を説明する。
処理(1)で、まず表224Bで「×」だけが付いたステートメントを抽出する。抽出された各々のステートメントについて、ステートメントがAPI呼び出しに対応する場合、Promiseで囲むようにする。図26に処理(1)でPromiseで囲むように処理したステートメントの一例を示す。
次に処理(2)で、処理(1)にてPromiseで囲んだステートメントが複数ある場合は、図27に示すようにユニークな名前の配列に各々を格納し、最後にawait Promise.all()で囲むような記述に変換する。図28に表224Bで処理(2)の反映対象となる部分を下線にて示す。
次に処理(3)で、1つだけ「↓」の付いているステートメントについて、上記の処理(1)、(2)を実施し、表224Bで「↓」の付いている列に「×」の付いているステートメントの後続に繋げる。Promise.allされる1つのステートメントに繋げたい場合、図29に示すように文をawaitするものに置き換え、これらを直列に配置したasync付き関数に変換する。このとき最後の文が変数定義文、代入文である場合、処理(2)と同様に最後の文をreturn文に置き換え後続文の変数参照をawait Promise.allの戻り値に置換する。図30に表224Bで処理(3)の反映対象となる部分を下線にて示す。
次に処理(4)で、表224Bで「↓」が2個以上あるステートメントは、「↓」の付いた行に「×」の付いたステートメントがawait Promise.allされるステートメントの直後に配置する。さらに、Promise.allされた最後のステートメントで定義され、代入される変数を参照している場合、その変数参照をawait Promise.allの戻り値_valuesに置換し、上記処理(1)、(2)を実施する。例えば、図31に示すように、1番目にpushしたPromiseの戻り値(ここではdata)を参照する場合、変数参照を_values[0]に置換する。図32に表224Bで処理(4)の反映対象となる部分を下線にて示す。なお、「×」、「↓」の付いていないステートメントには何も処理しないようにする。
以上の変換部226の反映処理により並列性に基づく実行順序を反映したプログラムが生成される。図33に並列性に基づく実行順序を反映したプログラムの一例を示す。
実行部228は、変換部226で生成された並列性に基づく実行順序を反映したプログラムを実行する。実行部228は、プログラムの実行順序に応じて、並列に実行可能な関数については、サーバー装置12のAPIの関数を並列に呼び出して処理する。なお、並列に実行可能な関数についてサーバー装置12のAPIの関数を並列に呼び出して処理することが、特定されたAPI呼び出し処理に関する情報をサーバー装置に送信することの一例である。
端末210は、例えば図34に示すコンピュータ250で実現することができる。コンピュータ250は、CPU51と、一時記憶領域としてのメモリ52と、不揮発性の記憶部253とを備える。また、コンピュータ250は、入出力I/F54と、記憶媒体59に対するデータの読み込み及び書き込みを制御するR/W部55と、インターネット等のネットワークに接続される通信I/F56とを備える。CPU51、メモリ52、記憶部253、入出力I/F54、R/W部55、及び通信I/F56は、バス57を介して互いに接続される。
記憶部253は、HDD、SSD、フラッシュメモリ等によって実現できる。記憶媒体としての記憶部253には、コンピュータ250を端末210として機能させるためのAPI処理プログラム260が記憶される。API処理プログラム260は、前処理プロセス62と、関数特定プロセス63と、表作成プロセス262と、表更新プロセス263と、変換プロセス264と、実行プロセス265とを有する。
CPU51は、API処理プログラム260を記憶部253から読み出してメモリ52に展開し、API処理プログラム260が有するプロセスを順次実行する。CPU51は、前処理プロセス62を実行することで、図20に示す前処理部22として動作する。また、CPU51は、関数特定プロセス63を実行することで、図20に示す関数特定部24として動作する。また、CPU51は、表作成プロセス262を実行することで、図20に示す表作成部222として動作する。CPU51は、表更新プロセス263を実行することで、図20に示す表更新部224として動作する。また、CPU51は、変換プロセス264を実行することで、図20に示す変換部226として動作する。また、CPU51は、実行プロセス265を実行することで、図20に示す実行部228として動作する。これにより、API処理プログラム260を実行したコンピュータ250が、端末210として機能することになる。なお、プログラムを実行するCPU51はハードウェアである。
なお、API処理プログラム260により実現される機能は、例えば半導体集積回路、より詳しくはASIC等で実現することも可能である。
次に、本実施形態に係るAPI処理システム200の作用について図35のフローチャートを参照して説明する。
ステップS200で、表作成部222は、ステップS100での変換により得られた同期的な記述のプログラムから、実行順序管理表(表222A)を作成する。
ステップS202で、表更新部224は、動詞表214Aを参照し、表作成部222で作成した表222Aに対し、「変数操作」、「並列性」の項目の列を追加して表224Bとして更新する。
ステップS204で、変換部226は、ステップS104で変換した非同期的な記述のプログラムから、ステップS202で更新した表224Bを用いて、並列性に基づく実行順序を反映したプログラムを生成する。
ステップS206で、実行部228は、ステップS204で生成された並列性に基づく実行順序を反映したプログラムを実行する。実行部228は、プログラムの実行順序に応じて、並列に実行可能な関数については、サーバー装置12のAPIの関数を並列に呼び出して処理する。
なお、第2実施形態の他の構成及び作用については第1実施形態と同様であるため説明を省略する。
以上説明したように、本実施形態に係るAPI処理システムによれば、同期的な記述に変換したプログラムを、特定した関数リストと、変換ルールとに基づいて、非同期的に記述されたプログラムに変換する。また、変換された非同期的な記述のプログラムから、動詞表を参照し、並列性に基づく実行順序を反映したプログラムを生成する。実行順序を反映したプログラムを実行する。このため、非同期的なプログラムの処理の作成及び実行を容易にし、かつ、並列性を考慮して効率よくプログラムを実行することができる。
[第3実施形態]
次に第3実施形態について説明する。第3実施形態では、HTTPリクエストのメソッド、及びパスから並列性に基づく実行順序を反映したプログラムを生成する場合について説明する。なお第2実施形態と同様となる箇所については同一符号を付して説明を省略する。
本実施形態では、APIクライアントライブラリ内で実際に発行されるHTTPリクエストのメソッド、及びパスから並列性の有無を判定し、並列性に基づく実行順序をプログラムに反映する場合を例に説明する。
基本的な考え方としては、HTTPメソッドのうちPOST、PUT、DELETE、PATCHは副作用のあるメソッドであるものとする。副作用がある場合、それらと別のAPIを並列で呼び出した時に常に同じ結果になるとは限らないため並列処理は不可であるとする。また、プログラムが依存しているAPIライブラリのソースコードを用いる。APIライブラリの各関数のプログラムを静的に解析し、HTTPクライアントを用いてHTTPリクエストを送るコード片を探索する。発見したコード片から各関数の発行するHTTPリクエストのメソッド(GET,POST,PUT,DELETE,PATCH等)、パス("/path/to/resource"等)を特定し、関数HTTPリクエスト対応表に記録及び管理する。例えば、[(関数名,メソッド,パス),(getContents, GET,/contents)]といった対応表である。また、関数HTTPリクエスト対応表を用いて、あるAPI呼び出しをするステートメントAについて、メソッドがPOST,PUT,DELETE,PATCHである場合、Aのパスと前方一致するパスに対するHTTPリクエストを発行しかつプログラム中の出現順が後ろである各々のステートメントBについて、BはAと並列実行できないと判定する。
図36に示すように、API処理システム300の端末310は、機能的には、APIクライアントライブラリ14と、変換ルール16と、前処理部22と、関数特定部24と、変換部226と、実行部228と、通信部30とを含む。また、端末310は、表作成部222と、関数対応表作成部322と、表更新部324とを含む。
表作成部222には、前処理部22での変換により得られた同期的な記述のプログラムが入力される。本実施形態では、図37に示す同期的な記述のプログラムが入力された場合を例に説明する。また、図38に、図37のプログラムから関数特定部24で特定された関数リスト24Bの一例を示す。
図39に、表作成部222で図37のプログラムから作成された表222Bの一例を示す。
関数対応表作成部322は、同期的な記述のプログラムから、APIクライアントライブラリ14の内容に基づいて、関数HTTPリクエスト対応表322Aを作成する。なお、関数HTTPリクエスト対応表322Aが、リクエストに関するルールの一例である。
関数対応表作成部322は、まずAPIクライアントライブラリ14のソースコードをパーズして、抽象構文木(AST)を生成する。次に、入力されたプログラムについて、対象となる関数を宣言しているステートメントを探索する。関数宣言内でHTTPクライアントを用いてリクエストを送信している箇所のステートメントを探索する。使用しているHTTPクライアントの種類に対応した方法によってメソッドとパスを特定し、関数HTTPリクエスト対応表322Aに追加する。例えば、Node.jsのrequestライブラリを用いた例では、request.get(‘http://myapi.com/api/users’)のステートメントについて、メソッドが「GET」、パスが「http://myapi.com/api/users」と特定する。図40に関数HTTPリクエスト対応表322Aの一例を示す。関数HTTPリクエスト対応表322Aを参照することで、createUserはメソッドが「POST」で、putDataはcreateUserのパスに前方一致することが分かる。これにより、putDataはcreateUserと並列実行できないと判定できる。
表更新部324は、表作成部222で作成した表222Bに対し、関数対応表作成部322で作成された関数HTTPリクエスト対応表322Aを参照し、「変数操作」、「並列性」の項目の列を追加して更新する。「変数操作」の項目の追加処理については上記第2実施形態の表更新部224と同様である。「並列性」の項目については、前方一致するパスごとに列を追加する。図41に「並列性」の項目を追加した表324Aの一例を示す。図41では、「並列性」の項目としてパスの固定部分(http://myapi.com/api/)が前方一致した後ろのパスである「/users」、「/contents」を追加し、対応するステートメントの状態を更新している。また、状態の更新では、先に実行するステートメントに「×」、後で実行するステートメントに「↓」を挿入している。
図42に、変換部226が図41の表324Aを用いて生成した並列性に基づく実行順序を反映したプログラムの一例を示す。なお、変換部226の処理は、上記第2実施形態の表224Bを表324Aと読み替えて実施すればよい。
端末310は、例えば図43に示すコンピュータ350で実現することができる。コンピュータ350は、CPU51と、一時記憶領域としてのメモリ52と、不揮発性の記憶部353とを備える。また、コンピュータ350は、入出力I/F54と、記憶媒体59に対するデータの読み込み及び書き込みを制御するR/W部55と、インターネット等のネットワークに接続される通信I/F56とを備える。CPU51、メモリ52、記憶部353、入出力I/F54、R/W部55、及び通信I/F56は、バス57を介して互いに接続される。
記憶部353は、HDD、SSD、フラッシュメモリ等によって実現できる。記憶媒体としての記憶部353には、コンピュータ350を端末310として機能させるためのAPI処理プログラム360が記憶される。API処理プログラム360は、前処理プロセス62と、関数特定プロセス63と、表作成プロセス262と、表更新プロセス363と、関数対応表作成プロセス362と、変換プロセス264と、実行プロセス265とを有する。
CPU51は、API処理プログラム360を記憶部353から読み出してメモリ52に展開し、API処理プログラム360が有するプロセスを順次実行する。CPU51は、前処理プロセス62を実行することで、図36に示す前処理部22として動作する。また、CPU51は、関数特定プロセス63を実行することで、図36に示す関数特定部24として動作する。また、CPU51は、表作成プロセス262を実行することで、図36に示す表作成部222として動作する。また、CPU51は、関数対応表作成プロセス362を実行することで、図36に示す関数対応表作成部322として動作する。CPU51は、表更新プロセス363を実行することで、図36に示す表更新部324として動作する。また、CPU51は、変換プロセス264を実行することで、図36に示す変換部226として動作する。また、CPU51は、実行プロセス265を実行することで、図36に示す実行部228として動作する。これにより、API処理プログラム360を実行したコンピュータ350が、端末310として機能することになる。なお、プログラムを実行するCPU51はハードウェアである。
なお、API処理プログラム360により実現される機能は、例えば半導体集積回路、より詳しくはASIC等で実現することも可能である。
次に、本実施形態に係るAPI処理システム300の作用について図44のフローチャートを参照して説明する。
ステップS300で、関数対応表作成部322は、同期的な記述のプログラムから、APIクライアントライブラリ14の内容に基づいて、関数HTTPリクエスト対応表322Aを作成する。
ステップS302で、表更新部324は、表作成部222で作成した表222Bに対し、関数対応表作成部322で作成された関数HTTPリクエスト対応表322Aを参照し、「変数操作」、「並列性」の項目の列を追加して表324Aとして更新する。
なお、第3実施形態の他の構成及び作用については第2実施形態と同様であるため説明を省略する。
以上説明したように、本実施形態に係るAPI処理システムによれば、同期的な記述に変換したプログラムを、特定した関数リストと、変換ルールとに基づいて、非同期的に記述されたプログラムに変換する。また、変換された非同期的な記述のプログラムから、関数HTTPリクエスト対応表を参照し、並列性に基づく実行順序を反映したプログラムを生成する。実行順序を反映したプログラムを実行する。このため、非同期的なプログラムの処理の作成及び実行を容易にし、かつ、並列性を考慮して効率よくプログラムを実行することができる。
[第4実施形態]
次に第4実施形態について説明する。第4実施形態では、aws-sdkやGitHub等のソースコードリポジトリの関数呼び出しの出現順から並列性に基づく実行順序を反映したプログラムを生成する場合について説明する。なお第2又は第3実施形態と同様となる箇所については同一符号を付して説明を省略する。
本実施形態では、ソースコードリポジトリ中で同じAPIライブラリを用いた多数のプログラムを解析し、関数呼び出しの出現順が全て同じかどうかで並列性の有無を判定し、並列性に基づく実行順序をプログラムに反映する場合を例に説明する。
ソースコードリポジトリからAPIクライアントライブラリを用いているプログラムを抽出して用いる。抽出した全てのプログラムを静的解析し、同じ変数を値の変更無しに少なくとも一つ引数として用いているAPI呼び出し関数のペア(関数A、及び関数B)を全て抽出する。ただし関数Aの方が関数Bよりも出現順が先とする。ある関数A、及び関数Bについて、抽出したペアの中で関数A、及び関数Bの出現するものが全て関数A、及び関数Bの順番である場合、関数A、及び関数Bに暗黙の呼び出し順序があると判定し、並列不可ペア管理表に記録及び管理しておく。例えば、[(先に呼ぶ関数,後で呼ぶ関数),(関数A,関数B)]といった管理表である。あるAPI呼び出しをするステートメントα、ステートメントβについて、各々が呼び出している関数が関数A、及び関数Bの場合、並列不可ペア管理表に(関数A,関数B)が含まれている場合、αとβは並列処理不可であると判定する。
図45に示すように、API処理システム400の端末410は、機能的には、APIクライアントライブラリ14と、変換ルール16と、前処理部22と、関数特定部24と、変換部226と、実行部228と、通信部30とを含む。また、端末410は、表作成部222と、管理表作成部422と、表更新部424とを含む。また、端末410はネットワーク3を介して外部のaws-sdkやGitHub等のソースコードリポジトリ414と接続されている。
表作成部222には、前処理部22での変換により得られた同期的な記述のプログラムが入力される。本実施形態では、図46に示す同期的な記述のプログラムが入力された場合を例に説明する。また、図47に、図46のプログラムから関数特定部24で特定された関数リスト24Cの一例を示す。
図48に、表作成部222で図46のプログラムから作成された表222Cの一例を示す。
管理表作成部422は、同期的な記述のプログラムから、ソースコードリポジトリ414の内容を参照して、並列不可ペア管理表422Aを作成する。なお、並列不可ペア管理表422Aが、リポジトリに関するルールの一例である。
管理表作成部422は、まずソースコードリポジトリ414から、図49に示すように、静的解析によってcreateBucket,putObjectを同じ参照及び値で呼び出しているソースコードを全て抽出する。createBucket,putObjectは表222Cで同じオブジェクト変数名である。抽出したソースコードのうち、putObjectからcreateBucketの順で呼び出すソースコードが他に存在しないことを検出し、並列不可ペア管理表422Aに追加する。図50に示すように、並列不可ペア管理表422Aには、先頭にソースコードリポジトリ名及びオブジェクト変数名を付与し、先に呼ぶ関数に「aws-sdk#S3.createBucket」、後で呼ぶ関数に「aws-sdk#S3.putObject」を追加する。なお、上記以外の並列不可ペアは未発見なものとして以下説明する。
表更新部424は、表作成部222で作成した表222Cに対し、管理表作成部422で作成された並列不可ペア管理表422Aを参照し、「変数操作」、「並列性」の項目の列を追加して更新する。「変数操作」の項目の追加処理については上記第2実施形態の表更新部224と同様である。「並列性」の項目については、APIに対応する関数ごとに列を追加する。図51に「並列性」の項目を追加した表424Aの一例を示す。図51では、「並列性」の項目としてリポジトリ名及びオブジェクト変数を付与した関数名「aws-sdk#S3.createBucket」、「aws-sdk#DyanmoDB.createTable」、「aws-sdk#S3.
putObject」を追加し、対応するステートメントの状態を更新している。また、状態の更新は先に実行するステートメントに「×」、後で実行するステートメントに「↓」を挿入している。並列不可ペアが未発見の関数は、関数呼び出しを行っているステートメントにのみ「×」を挿入している。
図52に、図51の表424Aを用いて生成した並列性に基づく実行順序を反映したプログラムの一例を示す。
端末410は、例えば図53に示すコンピュータ450で実現することができる。コンピュータ450は、CPU51と、一時記憶領域としてのメモリ52と、不揮発性の記憶部453とを備える。また、コンピュータ450は、入出力I/F54と、記憶媒体59に対するデータの読み込み及び書き込みを制御するR/W部55と、インターネット等のネットワークに接続される通信I/F56とを備える。CPU51、メモリ52、記憶部453、入出力I/F54、R/W部55、及び通信I/F56は、バス57を介して互いに接続される。
記憶部453は、HDD、SSD、フラッシュメモリ等によって実現できる。記憶媒体としての記憶部453には、コンピュータ450を端末410として機能させるためのAPI処理プログラム460が記憶される。API処理プログラム460は、前処理プロセス62と、関数特定プロセス63と、表作成プロセス262と、表更新プロセス463と、管理表作成プロセス462と、変換プロセス264と、実行プロセス265とを有する。
CPU51は、API処理プログラム460を記憶部453から読み出してメモリ52に展開し、API処理プログラム460が有するプロセスを順次実行する。CPU51は、前処理プロセス62を実行することで、図45に示す前処理部22として動作する。また、CPU51は、関数特定プロセス63を実行することで、図45に示す関数特定部24として動作する。また、CPU51は、表作成プロセス262を実行することで、図45に示す表作成部222として動作する。また、CPU51は、管理表作成プロセス462を実行することで、図45に示す管理表作成部422として動作する。CPU51は、表更新プロセス463を実行することで、図45に示す表更新部424として動作する。また、CPU51は、変換プロセス264を実行することで、図45に示す変換部226として動作する。また、CPU51は、実行プロセス265を実行することで、図45に示す実行部228として動作する。これにより、API処理プログラム460を実行したコンピュータ450が、端末410として機能することになる。なお、プログラムを実行するCPU51はハードウェアである。
なお、API処理プログラム460により実現される機能は、例えば半導体集積回路、より詳しくはASIC等で実現することも可能である。
次に、本実施形態に係るAPI処理システム400の作用について図54のフローチャートを参照して説明する。
ステップS400で、管理表作成部422は、同期的な記述のプログラムから、ソースコードリポジトリ414の内容を参照して、並列不可ペア管理表422Aを作成する。
ステップS402で、表更新部324は、表作成部222で作成した表222Cに対し、管理表作成部422で作成された並列不可ペア管理表422Aを参照し、「変数操作」、「並列性」の項目の列を追加して表424Aとして更新する。
なお、第4実施形態の他の構成及び作用については第3実施形態と同様であるため説明を省略する。
以上説明したように、本実施形態に係るAPI処理システムによれば、同期的な記述に変換したプログラムを、特定した関数リストと、変換ルールとに基づいて、非同期的に記述されたプログラムに変換する。また、変換された非同期的な記述のプログラムから、並列不可ペア管理表を参照し、並列性に基づく実行順序を反映したプログラムを生成する。実行順序を反映したプログラムを実行する。このため、非同期的なプログラムの処理の作成及び実行を容易にし、かつ、並列性を考慮して効率よくプログラムを実行することができる。
なお、第2〜第4実施形態の手法は、図55に示すように、APIの特徴に適した得意な適用先を選んで適用することができる。適用範囲は相互排他的ではなく、複数適用可能なものもある。そのため、第2〜第4実施形態の手法を組み合わせて、並列性に基づく実行順序を反映したプログラムを生成するようにしてもよい。
以上の各実施形態に関し、更に以下の付記を開示する。
(付記1)
第一の形式で記載されたプログラムであって、当該プログラムにて定義された複数のAPI呼び出し処理を実行する端末と、
前記複数のAPI呼び出し処理に応じて、当該API呼び出し処理に対応する処理を実行するよう第二の形式で記載されたプログラムを動作させる複数のサーバー装置とを有し、
前記端末は、
前記第二の形式で記載されたプログラムに関する情報を取得し、
取得したプログラムに関する情報に基づいて前記複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定し、
特定されたAPI呼び出し処理に関する情報をサーバー装置に送信する、
API処理方法。
(付記2)
前記端末は、
前記第一の形式を、前記API呼び出し処理を並行して実行しない同期的な記載の形式とし、
前記第二の形式を、前記API呼び出し処理を並行して実行可能な非同期的な記載の形式とし、
前記第一の形式で記載されたプログラムを、前記API呼び出し処理に対応する予め定められた関数のリストと、同期的な記載を非同期的な記載に変換するための予め定められたルールとに基づいて、前記第二の形式で記載されたプログラムに変換する付記1に記載のAPI処理方法。
(付記3)
前記端末は、
前記第一の形式を、前記API呼び出し処理を並行して実行しない同期的な記載、及び前記API呼び出し処理を並行して実行可能な非同期的な記載を含む形式とし、
前記第二の形式を、前記非同期的な記載の形式とし、
前記第一の形式で記載されたプログラムに含まれる、前記非同期的な記載を、前記同期的な記載に変換し、
前記非同期的な記載を、前記同期的な記載に変換したプログラムを、前記API呼び出し処理に対応する予め定められた関数のリストと、同期的な記載を非同期的な記載に変換するための予め定められたルールとに基づいて、前記第二の形式で記載されたプログラムに変換する付記1に記載のAPI処理方法。
(付記4)
前記端末は、
前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、動詞及び名詞に関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記2又は付記3に記載のAPI処理方法。
(付記5)
前記端末は、
前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、リクエストに関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記2又は付記3に記載のAPI処理方法。
(付記6)
前記端末は、
前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、リポジトリに関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記2又は付記3に記載のAPI処理方法。
(付記7)
第一の形式で記載されたプログラムであって、当該プログラムにて定義された複数のAPI呼び出し処理を実行する端末であって、
第二の形式で記載されたプログラムに関する情報を取得し、取得したプログラムに関する情報に基づいて前記複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定する特定部と、
特定されたAPI呼び出し処理に関する情報を、前記複数のAPI呼び出し処理に応じて、当該API呼び出し処理に対応する処理を実行するよう前記第二の形式で記載されたプログラムを動作させる複数のサーバー装置に送信する実行部と、
を含む端末。
(付記8)
前記端末は、
前記第一の形式を、前記API呼び出し処理を並行して実行しない同期的な記載の形式とし、
前記第二の形式を、前記API呼び出し処理を並行して実行可能な非同期的な記載の形式とし、
前記実行部は、前記第一の形式で記載されたプログラムを、前記API呼び出し処理に対応する予め定められた関数のリストと、同期的な記載を非同期的な記載に変換するための予め定められたルールとに基づいて、前記第二の形式で記載されたプログラムに変換する付記7に記載の端末。
(付記9)
前記端末は、
前記第一の形式を、前記API呼び出し処理を並行して実行しない同期的な記載、及び前記API呼び出し処理を並行して実行可能な非同期的な記載を含む形式とし、
前記第二の形式を、前記非同期的な記載の形式とし、
前記第一の形式で記載されたプログラムに含まれる、前記非同期的な記載を、前記同期的な記載に変換し、
前記実行部は、前記非同期的な記載を、前記同期的な記載に変換したプログラムを、前記API呼び出し処理に対応する予め定められた関数のリストと、同期的な記載を非同期的な記載に変換するための予め定められたルールとに基づいて、前記第二の形式で記載されたプログラムに変換する付記7に記載の端末。
(付記10)
前記端末は、
前記実行部は、前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、動詞及び名詞に関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記8又は付記9に記載の端末。
(付記11)
前記端末は、
前記実行部は、前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、リクエストに関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記8又は付記9に記載の端末。
(付記12)
前記端末は、
前記実行部は、前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、リポジトリに関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記8又は付記9に記載の端末。
(付記13)
第一の形式で記載されたプログラムであって、当該プログラムにて定義された複数のAPI呼び出し処理を実行する端末と、
前記複数のAPI呼び出し処理に応じて、当該API呼び出し処理に対応する処理を実行するよう第二の形式で記載されたプログラムを動作させる複数のサーバー装置と、に対する処理をコンピュータに実行させるAPI処理プログラムであって、
前記端末は、
前記第二の形式で記載されたプログラムに関する情報を取得し、
取得したプログラムに関する情報に基づいて前記複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定し、
特定されたAPI呼び出し処理に関する情報をサーバー装置に送信する、
処理をコンピュータに実行させるAPI処理プログラム。
(付記14)
前記端末は、
前記第一の形式を、前記API呼び出し処理を並行して実行しない同期的な記載の形式とし、
前記第二の形式を、前記API呼び出し処理を並行して実行可能な非同期的な記載の形式とし、
前記第一の形式で記載されたプログラムを、前記API呼び出し処理に対応する予め定められた関数のリストと、同期的な記載を非同期的な記載に変換するための予め定められたルールとに基づいて、前記第二の形式で記載されたプログラムに変換する付記13に記載のAPI処理プログラム。
(付記15)
前記端末は、
前記第一の形式を、前記API呼び出し処理を並行して実行しない同期的な記載、及び前記API呼び出し処理を並行して実行可能な非同期的な記載を含む形式とし、
前記第二の形式を、前記非同期的な記載の形式とし、
前記第一の形式で記載されたプログラムに含まれる、前記非同期的な記載を、前記同期的な記載に変換し、
前記非同期的な記載を、前記同期的な記載に変換したプログラムを、前記API呼び出し処理に対応する予め定められた関数のリストと、同期的な記載を非同期的な記載に変換するための予め定められたルールとに基づいて、前記第二の形式で記載されたプログラムに変換する付記13に記載のAPI処理プログラム。
(付記16)
前記端末は、
前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、動詞及び名詞に関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記2又は付記3に記載のAPI処理プログラム。
(付記17)
前記端末は、
前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、リクエストに関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記2又は付記3に記載のAPI処理プログラム。
(付記18)
前記端末は、
前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、リポジトリに関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する付記2又は付記3に記載のAPI処理プログラム。
3 ネットワーク
10、210、310、410 端末
12 サーバー装置
16 変換ルール
22 前処理部
24 関数特定部
26、226 変換部
28、228 実行部
30 通信部
50、250、350、450 コンピュータ
51 CPU
52 メモリ
53、253、353、453 記憶部
60、260、360、460 API処理プログラム
214 動詞表記憶部
222 表作成部
224、324、424 表更新部
322 関数対応表作成部
414 ソースコードリポジトリ
422 管理表作成部

Claims (8)

  1. 第一の形式で記載されたプログラムであって、当該プログラムにて定義された複数のAPI呼び出し処理を実行する端末と、
    前記複数のAPI呼び出し処理に応じて、当該API呼び出し処理に対応する処理を実行するよう第二の形式で記載されたプログラムを動作させる複数のサーバー装置とを有し、
    前記端末は、
    前記第二の形式で記載されたプログラムに関する情報を取得し、
    取得したプログラムに関する情報に基づいて前記複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定し、
    特定されたAPI呼び出し処理に関する情報をサーバー装置に送信する、
    API処理方法。
  2. 前記端末は、
    前記第一の形式を、前記API呼び出し処理を並行して実行しない同期的な記載の形式とし、
    前記第二の形式を、前記API呼び出し処理を並行して実行可能な非同期的な記載の形式とし、
    前記第一の形式で記載されたプログラムを、前記API呼び出し処理に対応する予め定められた関数のリストと、同期的な記載を非同期的な記載に変換するための予め定められたルールとに基づいて、前記第二の形式で記載されたプログラムに変換する請求項1に記載のAPI処理方法。
  3. 前記端末は、
    前記第一の形式を、前記API呼び出し処理を並行して実行しない同期的な記載、及び前記API呼び出し処理を並行して実行可能な非同期的な記載を含む形式とし、
    前記第二の形式を、前記非同期的な記載の形式とし、
    前記第一の形式で記載されたプログラムに含まれる、前記非同期的な記載を、前記同期的な記載に変換し、
    前記非同期的な記載を、前記同期的な記載に変換したプログラムを、前記API呼び出し処理に対応する予め定められた関数のリストと、同期的な記載を非同期的な記載に変換するための予め定められたルールとに基づいて、前記第二の形式で記載されたプログラムに変換する請求項1に記載のAPI処理方法。
  4. 前記端末は、
    前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、動詞及び名詞に関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する請求項2又は請求項3に記載のAPI処理方法。
  5. 前記端末は、
    前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、リクエストに関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する請求項2又は請求項3に記載のAPI処理方法。
  6. 前記端末は、
    前記第一の形式で記載されたプログラムを、前記第二の形式で記載されたプログラムに変換する際に、前記API呼び出し処理に含まれる関数に対して予め定められた、リポジトリに関するルールに基づいて、前記第一の形式で記載されたプログラムに含まれる前記複数のAPI呼び出し処理のうち、並行して実行可能な処理の実行順序を特定し、特定した前記実行順序に基づいて、前記複数のAPI呼び出し処理のうち、並行して実行可能な処理を並行して実行するように、前記変換に反映する請求項2又は請求項3に記載のAPI処理方法。
  7. 第一の形式で記載されたプログラムであって、当該プログラムにて定義された複数のAPI呼び出し処理を実行する端末であって、
    第二の形式で記載されたプログラムに関する情報を取得し、取得したプログラムに関する情報に基づいて前記複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定する特定部と、
    特定されたAPI呼び出し処理に関する情報を、前記複数のAPI呼び出し処理に応じて、当該API呼び出し処理に対応する処理を実行するよう前記第二の形式で記載されたプログラムを動作させる複数のサーバー装置に送信する実行部と、
    を含む端末。
  8. 第一の形式で記載されたプログラムであって、当該プログラムにて定義された複数のAPI呼び出し処理を実行する端末と、
    前記複数のAPI呼び出し処理に応じて、当該API呼び出し処理に対応する処理を実行するよう第二の形式で記載されたプログラムを動作させる複数のサーバー装置と、に対する処理をコンピュータに実行させるAPI処理プログラムであって、
    前記端末は、
    前記第二の形式で記載されたプログラムに関する情報を取得し、
    取得したプログラムに関する情報に基づいて前記複数のAPI呼び出し処理のうち並行して実行可能なAPI呼び出し処理を特定し、
    特定されたAPI呼び出し処理に関する情報をサーバー装置に送信する、
    処理をコンピュータに実行させるAPI処理プログラム。
JP2018068058A 2018-03-30 2018-03-30 Api処理方法、端末、api処理プログラム Active JP7059757B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2018068058A JP7059757B2 (ja) 2018-03-30 2018-03-30 Api処理方法、端末、api処理プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018068058A JP7059757B2 (ja) 2018-03-30 2018-03-30 Api処理方法、端末、api処理プログラム

Publications (2)

Publication Number Publication Date
JP2019179383A true JP2019179383A (ja) 2019-10-17
JP7059757B2 JP7059757B2 (ja) 2022-04-26

Family

ID=68278571

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018068058A Active JP7059757B2 (ja) 2018-03-30 2018-03-30 Api処理方法、端末、api処理プログラム

Country Status (1)

Country Link
JP (1) JP7059757B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022185649A1 (ja) * 2021-03-01 2022-09-09 富士フイルム株式会社 情報処理システム、情報処理方法、及び情報処理プログラム

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001184320A (ja) * 1999-12-27 2001-07-06 Pfu Ltd 分散実行装置および記録媒体
JP2007108133A (ja) * 2005-10-17 2007-04-26 Paloma Ind Ltd ガス燃焼機器の空燃比検出方法及び空燃比検出センサー並びにガス燃焼機器
US20180088937A1 (en) * 2016-09-29 2018-03-29 Microsoft Technology Licensing, Llc Code refactoring mechanism for asynchronous code optimization using topological sorting

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001184320A (ja) * 1999-12-27 2001-07-06 Pfu Ltd 分散実行装置および記録媒体
JP2007108133A (ja) * 2005-10-17 2007-04-26 Paloma Ind Ltd ガス燃焼機器の空燃比検出方法及び空燃比検出センサー並びにガス燃焼機器
US20180088937A1 (en) * 2016-09-29 2018-03-29 Microsoft Technology Licensing, Llc Code refactoring mechanism for asynchronous code optimization using topological sorting

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022185649A1 (ja) * 2021-03-01 2022-09-09 富士フイルム株式会社 情報処理システム、情報処理方法、及び情報処理プログラム

Also Published As

Publication number Publication date
JP7059757B2 (ja) 2022-04-26

Similar Documents

Publication Publication Date Title
US9086931B2 (en) System for translating diverse programming languages
US6378126B2 (en) Compilation of embedded language statements in a source code program
US9965259B2 (en) System for translating diverse programming languages
KR101908162B1 (ko) 통합 개발 환경에서의 라이브 브라우저 툴 제공 기법
US20030093420A1 (en) Method and system for retrieving sharable information using a hierarchically dependent directory structure
US9424003B1 (en) Schema-less system output object parser and code generator
KR100692172B1 (ko) 종합 문자열 분석기 및 그 분석 방법
CN1552029A (zh) 用于异步Web服务的Web服务开发平台
JP5734311B2 (ja) 漸進的変化を伴う効率的な不変構文表現
JPS6288033A (ja) ソフトウエアプログラムを生成するための装置及びその方法
JP3230467B2 (ja) Gdmoトランスレータ及びgdmoトランスレーション方法並びにgdmoトランスレータプログラムを記録した記録媒体
CN101866315B (zh) 软件开发工具的测试方法及系统
US20090328016A1 (en) Generalized expression trees
US11119896B1 (en) Browser based visual debugging
US7472391B2 (en) Resource loader for applications that utilize relative uniform resource identifiers
Gómez et al. CRUDyLeaf: a DSL for generating spring boot REST APIs from entity CRUD operations
US7458071B2 (en) Compilation method, compiler apparatus and compiler
US9244706B2 (en) Command line shell command generation based on schema
JP2005332146A (ja) 動的コンテンツ作成プログラムの生成装置、動的コンテンツ作成プログラムを生成するためのプログラム、及び動的コンテンツ作成プログラムの生成方法
CN116166907B (zh) 一种使用WebAssembly和服务页面编译技术开发Web应用的方法及装置
JP7059757B2 (ja) Api処理方法、端末、api処理プログラム
CN110737431B (zh) 软件开发方法、开发平台、终端设备及存储介质
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
KR100846203B1 (ko) 모바일 어플리케이션의 생성 방법 및 이를 구현하기 위한프로그램을 기록한 기록매체
CN116560667B (zh) 一种基于预编译延迟执行的拆分调度系统及方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211125

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220125

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: 20220315

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220328

R150 Certificate of patent or registration of utility model

Ref document number: 7059757

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150