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

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

Info

Publication number
JP2021166006A
JP2021166006A JP2020069943A JP2020069943A JP2021166006A JP 2021166006 A JP2021166006 A JP 2021166006A JP 2020069943 A JP2020069943 A JP 2020069943A JP 2020069943 A JP2020069943 A JP 2020069943A JP 2021166006 A JP2021166006 A JP 2021166006A
Authority
JP
Japan
Prior art keywords
information processing
proxy
definition
application
applications
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.)
Pending
Application number
JP2020069943A
Other languages
English (en)
Inventor
功作 木村
Kosaku Kimura
佑樹 佐々木
Yuki Sasaki
正純 松原
Masazumi Matsubara
敦二 関口
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 JP2020069943A priority Critical patent/JP2021166006A/ja
Publication of JP2021166006A publication Critical patent/JP2021166006A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】複数のアプリを組み合わせて利用し易くすること。【解決手段】情報処理装置は、ツールAと、ツールAに対応するプロキシ511とを一体化したコンテナを起動可能にするコンテナイメージと、ツールBと、ツールBに対応するプロキシ512とを一体化したコンテナを起動可能にするコンテナイメージとを生成する。情報処理装置は、各種データと、ツールAを利用するタスクと、ツールBを利用するタスクとの依存関係を示すデータフローを作成する。情報処理装置は、データフローに従って、生成されたコンテナイメージに基づいて、ツールA、または、ツールBを利用して、一連のタスクを実行する。【選択図】図5

Description

本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
従来、それぞれ異なる形式のインターフェースを有する複数のアプリケーションがある。インターフェースとしては、例えば、UI(User Interface)、API(Application Programming Interface)、および、CLI(Command Line Interface)などがある。ユーザは、複数のアプリケーションを組み合わせて、データ利活用タスクを実施することがある。以下の説明では、アプリケーションを単に「アプリ」と表記する場合がある。
先行技術としては、例えば、ツールごとにデータ交換部が設けられ、ツールの動作に応じてデータ交換部が、連携部を介して他のデータ交換部とデータ処理を行い、ツール間を連携させるものがある。また、例えば、アプリケーションの実行環境のイメージの情報に、コンテナの中でアプリケーションが用いるデータのデータ情報を付加したコンテナの起動方法の定義を、カタログとしてカタログ情報に登録する技術がある。
特開2001−22567号公報 特開2019−159825号公報
しかしながら、従来技術では、ユーザは、複数のアプリを組み合わせる場合、あるインターフェースを介して第1のアプリから出力されたデータを、別のインターフェースを介して第2のアプリへと入力する際、データの形式を人手で変換することになる。このため、ユーザにかかる作業負担の増大化を招くという問題がある。
1つの側面では、本発明は、複数のアプリを組み合わせて利用し易くすることを目的とする。
1つの実施態様によれば、複数のアプリのそれぞれのアプリに対応し、当該アプリ個別の形式である個別インターフェースと、前記複数のアプリ共通の形式である共通インターフェースとを接続するプロキシを生成可能にする第1の定義情報を取得し、前記それぞれのアプリに対応し、当該アプリと、当該アプリに対応する前記プロキシとが実行される仮想環境を生成可能にする第2の定義情報を取得し、取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する情報処理プログラム、情報処理方法、および情報処理装置が提案される。
一態様によれば、複数のアプリを組み合わせて利用し易くすることが可能になる。
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。 図2は、情報処理システム200の一例を示す説明図である。 図3は、情報処理装置100のハードウェア構成例を示すブロック図である。 図4は、情報処理装置100の機能的構成例を示すブロック図である。 図5は、情報処理装置100の動作の流れを示す説明図である。 図6は、情報処理装置100の動作の一例を示す説明図である。 図7は、レシピ定義の一例を示す説明図(その1)である。 図8は、レシピ定義の一例を示す説明図(その2)である。 図9は、レシピ定義の一例を示す説明図(その3)である。 図10は、共通I/Fの一例を示す説明図である。 図11は、引数および戻り値の一例を示す説明図である。 図12は、プロキシ定義の一例を示す説明図(その1)である。 図13は、プロキシ定義の一例を示す説明図(その2)である。 図14は、プロキシ定義の一例を示す説明図(その3)である。 図15は、プロキシ定義の一例を示す説明図(その4)である。 図16は、プロキシ定義の一例を示す説明図(その5)である。 図17は、データフロー定義を作成する一例を示す説明図である。 図18は、レシピ定義作成処理手順の一例を示すフローチャートである。 図19は、プロキシ定義作成処理手順の一例を示すフローチャートである。 図20は、ビルド処理手順の一例を示すフローチャートである。 図21は、連携処理手順の一例を示すフローチャートである。
以下に、図面を参照して、本発明にかかる情報処理プログラム、情報処理方法、および情報処理装置の実施の形態を詳細に説明する。
(実施の形態にかかる情報処理方法の一実施例)
図1は、実施の形態にかかる情報処理方法の一実施例を示す説明図である。情報処理装置100は、複数のアプリを組み合わせて利用し易くするコンピュータである。情報処理装置100は、例えば、サーバ、または、PC(Personal Computer)などである。
アプリは、例えば、データ利活用のツールとなるソフトウェアである。アプリは、例えば、データを収集、蓄積、加工、分析、または、可視化する用途に適したソフトウェアである。アプリは、具体的には、デスクトップで動作するデスクトップアプリ、または、ブラウザで操作可能な、サーバ上で動作するウェブアプリなどである。
データを収集、蓄積、または、加工する用途に適したアプリは、具体的には、ETL(Extract Transform Load)ツール、または、ELT(Extract Load Transform)ツールなどである。データを分析する用途に適したアプリは、具体的には、Jupyter Notebook、または、R Studioなどである。データを可視化する用途に適したアプリは、具体的には、BI(Business Intelligence)ツールなどである。
ユーザは、IoT(Internet of Things)機器のデータ、または、個人データなどを、収集および蓄積し、加工および分析し、分析した結果を可視化することにより、ビジネスなどに利活用することを望む場合がある。分析は、例えば、AI(Artificial Intelligence)学習である。この場合、ユーザは、データを収集、蓄積、または、加工する用途に適した複数のアプリを組み合わせて利用することになる。
しかしながら、従来では、複数のアプリを組み合わせて利用することは難しい。例えば、複数のアプリは、それぞれ異なる形式のインターフェースを有することがある。形式とは、例えば、プロトコルである。このため、ユーザは、あるインターフェースを介して第1のアプリから出力されたデータを、別のインターフェースを介して第2のアプリへと入力する際、データの形式を人手で変換することになり、ユーザにかかる作業負担の増大化を招くという問題がある。
これに対し、アプリが有するインターフェースの組み合わせごとに、インターフェース間でデータをやり取り可能に、入出力されるデータの形式を変換する変換ツールを、ユーザが用意する手法が考えられる。この手法でも、複数のアプリを組み合わせて利用することは難しく、ユーザにかかる作業負担の増大化を招くという問題がある。例えば、アプリの数が増加するほど、用意する変換ツールの数の膨大化を招き、変換ツールをユーザが用意する際にかかる作業負担の膨大化を招くという問題がある。
また、複数のアプリが、共通の形式のインターフェースを有するよう、ユーザが、それぞれのアプリのソースコードを改変し、それぞれのアプリをコンパイルし直す手法が考えられる。この手法では、ユーザにかかる作業負担の増大化を招くという問題がある。また、この手法では、それぞれのアプリに関するユーザの使用感が損なわれるおそれがあり、それぞれのアプリの利便性の低下を招くおそれがある。また、この手法は、いずれかのアプリのソースコードが公開されていない状況には適用することが難しい。
そこで、本実施の形態では、それぞれのアプリに関するユーザの使用感を損なわず、複数のアプリを組み合わせて利用し易くすることができる情報処理方法について説明する。
図1において、情報処理装置100は、複数のアプリ101を有する。複数のアプリ101は、それぞれ異なる形式のインターフェースを有する。以下の説明では、インターフェース(Interface)を「I/F」と表記する場合がある。また、あるアプリ101が有する、当該アプリ101個別の形式であるI/Fを「個別I/F102」と表記する場合がある。
(1−1)情報処理装置100は、それぞれのアプリ101について第1の定義情報110を取得する。あるアプリ101についての第1の定義情報110は、例えば、当該アプリ101に対応するプロキシ103を生成可能にする情報である。あるアプリ101に対応するプロキシ103は、例えば、当該アプリ101の個別I/F102と、複数のアプリ101共通の形式である共通I/F104とを接続するソフトウェアである。情報処理装置100は、例えば、ユーザの操作入力に基づき、それぞれのアプリ101について第1の定義情報110を取得する。
(1−2)情報処理装置100は、それぞれのアプリ101について第2の定義情報120を取得する。あるアプリ101についての第2の定義情報120は、例えば、当該アプリ101と、当該アプリ101に対応するプロキシ103とが実行される仮想環境を生成可能にする情報である。仮想環境は、例えば、コンテナである。コンテナは、例えば、プロセスを特別な状態で実行する実行空間である。特別な状態とは、プロセスがアイソレートされた状態であり、プロセスに実行空間内で一意なPID(Process ID)が付与される状態である。仮想環境は、例えば、仮想マシンであってもよい。情報処理装置100は、例えば、ユーザの操作入力に基づき、それぞれのアプリ101について第2の定義情報120を取得する。
(1−3)情報処理装置100は、取得した第1の定義情報110と、取得した第2の定義情報120とに基づいて、それぞれのアプリ101に対応する仮想環境を生成すると共に、当該仮想環境で実行されるプロキシ103を生成する。仮想環境は、例えば、情報処理装置100において起動される。情報処理装置100は、例えば、アプリ101ごとに、当該アプリ101と、当該アプリ101に対応するプロキシ103とが実行されるコンテナを、自装置において起動する。これにより、情報処理装置100は、複数のアプリ101を組み合わせて利用し易くすることができる。
情報処理装置100は、例えば、あるアプリ101のI/Fから出力されたデータを、他のアプリ101のI/Fに入力する際、ユーザがデータの形式を変換せずに済ませることができ、ユーザにかかる作業負担の低減化を図ることができる。
また、情報処理装置100は、ユーザが、アプリ101の数分、第1の定義情報110と第2の定義情報120とを用意すれば、複数のアプリ101を組み合わせて利用可能にすることができる。このため、情報処理装置100は、ユーザが、アプリ101の組み合わせの数分、変換ツールを用意せずに済ませることができ、ユーザにかかる作業負担の低減化を図ることができる。
また、情報処理装置100は、ユーザが、アプリ101の数分、第1の定義情報110と第2の定義情報120とを用意すれば、複数のアプリ101を組み合わせて利用可能にすることができる。このため、情報処理装置100は、ユーザが、それぞれのアプリ101のソースコードを改変せずに済ませることができ、ユーザにかかる作業負担の低減化を図ることができる。また、情報処理装置100は、それぞれのアプリ101のソースコードが公開されていない状況にも適用することができる。
また、情報処理装置100は、プロキシ103により、データの形式を変換することにより、ユーザが、それぞれのアプリ101のI/Fの形式を意識せずに済ませることができ、それぞれのアプリ101に関するユーザの使用感を損なわずに済ませることができる。
結果として、情報処理装置100は、ユーザが、IoT機器のデータ、または、個人データなどを、収集および蓄積し、加工および分析し、分析した結果を可視化し易くすることができる。そして、情報処理装置100は、ユーザが、分析した結果を、ビジネスなどに利活用し易くすることができる。
ここでは、情報処理装置100が、それぞれのアプリ101に対応する仮想環境を、自装置において起動する場合について説明したが、これに限らない。例えば、情報処理装置100が、それぞれのアプリ101に対応する仮想環境を、他のコンピュータにおいて起動させる場合があってもよい。この場合の一例は、例えば、図2を用いて後述する。
ここでは、情報処理装置100が、ユーザの操作入力に基づき、それぞれのアプリ101について、第1の定義情報110と第2の定義情報120とを取得する場合について説明したが、これに限らない。例えば、情報処理装置100が、それぞれのアプリ101についての第1の定義情報110と第2の定義情報120とを、他のコンピュータから受信することにより取得する場合があってもよい。この場合の一例は、例えば、図2を用いて後述する。
(情報処理システム200の一例)
次に、図2を用いて、図1に示した情報処理装置100を適用した、情報処理システム200の一例について説明する。
図2は、情報処理システム200の一例を示す説明図である。図2において、情報処理システム200は、情報処理装置100と、1以上の端末装置201と、クライアント装置202とを含む。
情報処理システム200において、情報処理装置100と端末装置201とは、有線または無線のネットワーク210を介して接続される。ネットワーク210は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどである。
情報処理装置100は、複数のアプリのそれぞれのアプリについて、第1の定義情報と第2の定義情報とを、クライアント装置202から受信することにより取得する。
情報処理装置100は、複数のアプリのそれぞれのアプリについて取得した、第1の定義情報と第2の定義情報とに基づいて、端末装置201を制御し、複数のアプリのそれぞれのアプリに対応するコンテナを、端末装置201において起動させる。コンテナは、アプリとプロキシとが実行される実行空間である。
情報処理装置100は、例えば、アプリとプロキシとが実行されるコンテナを起動可能にするレシピ情報を、端末装置201に送信することにより、アプリとプロキシとが実行されるコンテナを、端末装置201において起動させる。情報処理装置100は、例えば、サーバ、または、PCなどである。
端末装置201は、情報処理装置100の制御に従って、コンテナを起動するコンピュータである。端末装置201は、例えば、アプリとプロキシとが実行されるコンテナを起動可能にするレシピ情報を、情報処理装置100から受信し、受信したレシピ情報に基づいて、アプリとプロキシとが実行されるコンテナを起動する。端末装置201は、例えば、サーバ、PC、タブレット端末、または、スマートフォンなどである。
クライアント装置202は、複数のアプリのそれぞれのアプリについて、第1の定義情報と第2の定義情報とを、情報処理装置100に送信する。クライアント装置202は、例えば、サーバ、PC、タブレット端末、または、スマートフォンなどである。
ここでは、情報処理システム200が、1つの情報処理装置100を含む場合について説明したが、これに限らない。例えば、情報処理システム200が、複数の情報処理装置100を含む場合があってもよい。この場合、複数の情報処理装置100が、協働し、端末装置201にコンテナを起動させる。
ここでは、情報処理装置100が、端末装置201とは異なる装置である場合について説明したが、これに限らない。例えば、情報処理装置100が、いずれかの端末装置201と一体である場合があってもよい。この場合、情報処理装置100が、いずれかのアプリに対応するコンテナを、自装置において起動する。
(情報処理装置100のハードウェア構成例)
次に、図3を用いて、情報処理装置100のハードウェア構成例について説明する。
図3は、情報処理装置100のハードウェア構成例を示すブロック図である。図3において、情報処理装置100は、CPU(Central Processing Unit)301と、メモリ302と、ネットワークI/F303と、記録媒体I/F304と、記録媒体305とを有する。また、各構成部は、バス300によってそれぞれ接続される。
ここで、CPU301は、情報処理装置100の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、CPU301にロードされることで、コーディングされている処理をCPU301に実行させる。
ネットワークI/F303は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F303は、ネットワーク210と内部のI/Fを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F303は、例えば、モデムやLANアダプタなどである。
記録媒体I/F304は、CPU301の制御に従って記録媒体305に対するデータのリード/ライトを制御する。記録媒体I/F304は、例えば、ディスクドライブ、SSD(Solid State Drive)、USB(Universal Serial Bus)ポートなどである。記録媒体305は、記録媒体I/F304の制御で書き込まれたデータを記憶する不揮発メモリである。記録媒体305は、例えば、ディスク、半導体メモリ、USBメモリなどである。記録媒体305は、情報処理装置100から着脱可能であってもよい。
情報処理装置100は、上述した構成部の他、例えば、キーボード、マウス、ディスプレイ、プリンタ、スキャナ、マイク、スピーカーなどを有してもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を複数有していてもよい。また、情報処理装置100は、記録媒体I/F304や記録媒体305を有していなくてもよい。
(端末装置201のハードウェア構成例)
端末装置201のハードウェア構成例は、図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。
(クライアント装置202のハードウェア構成例)
クライアント装置202のハードウェア構成例は、図3に示した情報処理装置100のハードウェア構成例と同様であるため、説明を省略する。クライアント装置202は、例えば、キーボード、マウス、ディスプレイなどを有することが好ましい。
(情報処理装置100の機能的構成例)
次に、図4を用いて、情報処理装置100の機能的構成例について説明する。
図4は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、記憶部400と、取得部401と、生成部402と、実行部403と、出力部404とを含む。
記憶部400は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域によって実現される。以下では、記憶部400が、情報処理装置100に含まれる場合について説明するが、これに限らない。例えば、記憶部400が、情報処理装置100とは異なる装置に含まれ、記憶部400の記憶内容が情報処理装置100から参照可能である場合があってもよい。
取得部401〜出力部404は、制御部の一例として機能する。取得部401〜出力部404は、具体的には、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶されたプログラムをCPU301に実行させることにより、または、ネットワークI/F303により、その機能を実現する。各機能部の処理結果は、例えば、図3に示したメモリ302や記録媒体305などの記憶領域に記憶される。
記憶部400は、各機能部の処理において参照され、または更新される各種情報を記憶する。記憶部400は、複数のアプリを記憶する。複数のアプリは、それぞれ個別の形式である個別I/Fを有する。形式とは、例えば、プロトコルである。個別I/Fは、UI、API、または、CLIである。記憶部400は、例えば、複数のアプリのそれぞれのアプリの実行ファイルを記憶する。
記憶部400は、第1の定義情報を記憶する。記憶部400は、例えば、複数のアプリのそれぞれのアプリについての第1の定義情報を記憶する。あるアプリについての第1の定義情報は、例えば、当該アプリに対応するプロキシを生成可能にする情報である。あるアプリに対応するプロキシは、例えば、当該アプリの個別I/Fと、複数のアプリ共通の形式である共通I/Fとを接続するソフトウェアである。第1の定義情報は、例えば、後述するプロキシ定義である。プロキシ定義は、例えば、所望の機能を実現するために、どのような順序で、いずれのI/Fを用いればよいかを規定する。第1の定義情報は、例えば、取得部401によって取得される。
記憶部400は、第2の定義情報を記憶する。記憶部400は、例えば、複数のアプリのそれぞれのアプリについての第2の定義情報を記憶する。あるアプリについての第2の定義情報は、例えば、当該アプリと、当該アプリに対応するプロキシとが実行される仮想環境を生成可能にする情報である。第2の定義情報は、例えば、後述するレシピ定義である。レシピ定義は、例えば、データフローにおいて、アプリに与えるパラメータ、または、入出力などを規定する。レシピ定義は、例えば、データフローにおいて、アプリを部品として扱うことを可能にする。第2の定義情報は、例えば、取得部401によって取得される。
仮想環境は、例えば、コンテナである。コンテナは、例えば、プロセスを特別な状態で実行する実行空間である。特別な状態とは、プロセスがアイソレートされた状態であり、プロセスに実行空間内で一意なPIDが付与される状態である。また、プロセスは、コンピュータ内で一意な別のPIDも付与されることがある。仮想環境は、例えば、仮想マシンであってもよい。
記憶部400は、いずれかのアプリに対応するイメージデータを記憶する。あるアプリに対応するイメージデータは、当該アプリに対応する仮想環境と共に、当該仮想環境で実行されるプロキシを纏めて、実体として生成可能にするためのデータである。イメージデータは、例えば、コンテナとなるファイルの集まりであり、依存関係のあるファイルの集まりである。依存関係のあるファイルは、例えば、バイナリ、設定ファイル、関連ファイル、および、データなどである。イメージデータは、例えば、後述するレシピである。イメージデータは、例えば、生成部402によって生成される。記憶部400は、例えば、コンテナのインスタンスを生成可能にするイメージデータを記憶する。
記憶部400は、データフローを記憶する。データフローは、データと複数のアプリの少なくともいずれかのアプリを利用するタスクとの依存関係を示す情報である。データフローは、例えば、取得部401によって取得される。タスクは、例えば、いずれかのアプリを利用して、所定の定義ファイルを実行する。
取得部401は、各機能部の処理に用いられる各種情報を取得する。取得部401は、取得した各種情報を、記憶部400に記憶し、または、各機能部に出力する。また、取得部401は、記憶部400に記憶しておいた各種情報を、各機能部に出力してもよい。取得部401は、例えば、ユーザの操作入力に基づき、各種情報を取得する。取得部401は、例えば、情報処理装置100とは異なる装置から、各種情報を受信してもよい。
取得部401は、第1の定義情報を取得する。取得部401は、例えば、複数のアプリのそれぞれのアプリについての第1の定義情報を取得する。取得部401は、具体的には、ユーザの操作入力に基づき、複数のアプリのそれぞれのアプリについての第1の定義情報を取得し、記憶部400に記憶する。
取得部401は、第2の定義情報を取得する。取得部401は、例えば、複数のアプリのそれぞれのアプリについての第2の定義情報を取得する。取得部401は、具体的には、ユーザの操作入力に基づき、複数のアプリのそれぞれのアプリについての第2の定義情報を取得し、記憶部400に記憶する。
取得部401は、データフローを取得する。取得部401は、例えば、ユーザの操作入力に基づき、データフローを取得し、記憶部400に記憶する。
取得部401は、いずれかの機能部の処理を開始する開始トリガーを受け付けてもよい。開始トリガーは、例えば、ユーザによる所定の操作入力があったことである。開始トリガーは、例えば、他のコンピュータから、所定の情報を受信したことであってもよい。開始トリガーは、例えば、いずれかの機能部が所定の情報を出力したことであってもよい。
取得部401は、例えば、複数のアプリのそれぞれのアプリについての第1の定義情報と第2の定義情報とを取得したことを、生成部402の処理を開始する開始トリガーとして受け付ける。取得部401は、例えば、データフローを取得したことを、実行部403の処理を開始する開始トリガーとして受け付ける。
生成部402は、取得した第1の定義情報と、取得した第2の定義情報とに基づいて、複数のアプリのそれぞれのアプリに対応する仮想環境を生成すると共に、当該仮想環境で実行されるプロキシを生成する。仮想環境は、例えば、情報処理装置100において起動される。生成部402は、例えば、複数のアプリのそれぞれのアプリについて、当該アプリと当該アプリに対応するプロキシとが実行されるコンテナと、当該アプリに対応するプロキシとを、情報処理装置100において実体として生成する。プロキシは、アプリにダイレクトにアクセス可能な場所にあることが好ましい。このため、プロキシは、アプリと纏めてコンテナにおいて実行されることが好ましい。プロキシは、アプリにダイレクトにアクセス可能であれば、アプリと同一のコンテナにおいて実行されなくてもよい。これにより、生成部402は、複数のアプリを組み合わせて利用し易くすることができる。
生成部402は、取得した第1の定義情報と、取得した第2の定義情報とに基づいて、それぞれのアプリに対応する仮想環境と共に、当該仮想環境で実行されるプロキシを纏めて、実体として生成可能にするイメージデータを生成してもよい。これにより、生成部402は、以降、アプリに対応する仮想環境と共に、当該仮想環境で実行されるプロキシを、実体として生成し易くすることができる。
実行部403は、取得したデータフローと、生成したイメージデータとに基づいて、タスクが、いずれかのアプリを利用開始する際に、当該アプリに対応する仮想環境を生成すると共に、当該仮想環境で実行されるプロキシを生成する。実行部403は、例えば、タスクがいずれかのアプリを利用開始する際に、当該アプリに対応するイメージデータに基づいて、当該アプリに対応する仮想環境と共に、当該仮想環境で実行されるプロキシを纏めて、実体として情報処理装置100において生成する。これにより、実行部403は、タスクを実施可能にすることができる。
実行部403は、タスクが、いずれかのアプリを利用終了する際に、当該アプリに対応する仮想環境を削除すると共に、当該仮想環境で実行されるプロキシを削除する。実行部403は、例えば、タスクが、いずれかのアプリを利用終了する際に、当該アプリに対応する仮想環境の実体と共に、当該仮想環境で実行されるプロキシの実体を、情報処理装置100において削除する。これにより、実行部403は、処理リソースを節約することができる。
出力部404は、いずれかの機能部の処理結果を出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、ネットワークI/F303による外部装置への送信、または、メモリ302や記録媒体305などの記憶領域への記憶である。これにより、出力部404は、いずれかの機能部の処理結果をユーザに通知可能にし、情報処理装置100の利便性の向上を図ることができる。
(情報処理装置100の動作の流れ)
次に、図5を用いて、情報処理装置100の動作の流れについて説明する。
図5は、情報処理装置100の動作の流れを示す説明図である。図5において、情報処理装置100は、ツールAと、ツールBとを有する。ツールAは、例えば、ETLツールとなるアプリである。ツールBは、例えば、データの分析および可視化に適したアプリである。
情報処理装置100は、ツールAと、ツールAに対応するプロキシ511とを一体化したコンテナを起動可能にするコンテナイメージと、ツールBと、ツールBに対応するプロキシ512とを一体化したコンテナを起動可能にするコンテナイメージとを生成する。
情報処理装置100は、フローエディタ501を有する。フローエディタ501は、ユーザの操作入力に基づき、データとタスクとの依存関係を示すデータフローを作成するソフトウェアである。タスクは、例えば、ツールを利用して行われる処理である。タスクは、ツールを利用して、所定の定義ファイルの内容を実行する処理である。タスクは、具体的には、ツールA、または、ツールBなどを利用する処理である。
情報処理装置100は、例えば、フローエディタ501により、GUI(Graphical User Interface)を介して、各種データと、ツールAを利用するタスクと、ツールBを利用するタスクとの依存関係を示すデータフローを作成する。
情報処理装置100は、フローエディタ501により、GUIを介して、データフローを修正してもよい。情報処理装置100は、例えば、データフローのうち、ツールAを利用するタスクが出力するデータ2に代わり、ツールAを利用するタスクが出力するデータ3を、ツールBを利用するタスクに接続し、データフローを修正する。
情報処理装置100は、フローエンジン502を有する。フローエンジン502は、ツール連携機能を有する。ツール連携機能は、データフローに従って、ツールをどの順序で利用するのかを決定する。ツール連携機能は、ツールを利用して、どのようにタスクの処理内容を実現するのかを決定する。ツール連携機能は、例えば、ツール内で、どのような処理を実施するのかを編集し、決定する。ツール連携機能は、データフローに従って、ツールを利用して、一連のタスクを実行し、全体の処理を行う。
ツール連携機能は、例えば、生成されたコンテナイメージに基づいて、ツールAを利用するタスクから出力されたデータ3を、ツールBを利用するタスクへの入力とし、一連のタスクを実行する。これにより、情報処理装置100は、複数のツールを組み合わせて利用し易くすることができ、ユーザにかかる作業負担の低減化を図ることができる。
(情報処理装置100の動作の一例)
次に、図6を用いて、情報処理装置100の動作の一例について説明する。
図6は、情報処理装置100の動作の一例を示す説明図である。図6において、情報処理装置100は、ツールA631、および、ツールB641などの複数のツールを有する。
情報処理装置100は、ユーザの操作入力に基づき、ツールごとのレシピ定義601を取得する。レシピ定義601の一例については、具体的には、図7〜図9を用いて後述する。情報処理装置100は、ユーザの操作入力に基づき、ツールごとのプロキシ定義602を取得する。プロキシ定義602の一例については、具体的には、図12〜図16を用いて後述する。
情報処理装置100は、プロキシバイナリ611を有する。プロキシバイナリ611は、例えば、ツールレシピを作成する際に用いられるデータを含む。ツールレシピは、ツールとプロキシとが実行されるコンテナを起動可能にするコンテナイメージである。プロキシバイナリ611は、具体的には、ツールレシピを作成する際に用いられる、プロキシの処理内容を規定するためのデータを含む。情報処理装置100は、レシピビルド機能612を有する。レシピビルド機能612は、ツールごとのツールレシピを作成する機能である。
情報処理装置100は、イメージレジストリ621を有する。イメージレジストリ621は、例えば、ツールレシピを含む。イメージレジストリ621は、具体的には、テンプレートとなるコンテナイメージを含む。情報処理装置100は、開発データ集合622を有する。開発データ集合622は、例えば、GitHubなどの開発プラットフォームのデータを含む。開発データ集合622は、具体的には、Dockerfileのデータを含む。
情報処理装置100は、レシピビルド機能612により、イメージレジストリ621と、開発データ集合622とに基づいて、ツールごとのツールレシピを作成する。ツールレシピは、ツールとプロキシとが実行されるコンテナを起動可能にするコンテナイメージである。図6の例では、情報処理装置100は、レシピビルド機能612により、テンプレートとなるコンテナイメージと、Dockerfileとに基づいて、ツールAレシピ、および、ツールBレシピなどを作成する。
ツールAレシピは、ツールA631が実行されるコンテナ630を起動可能にするコンテナイメージである。コンテナ630は、ツールA631を含む。コンテナ630は、プロキシを実現する、ツールA向けプロキシ定義632と、プロキシバイナリ633との組み合わせを含む。
プロキシバイナリ633は、UI操作、API操作、CLI操作、および、ファイル操作などを実施可能である。プロキシバイナリ633は、ツールA631の個別I/Fと、コンテナ630に設けられる共通I/F635とを接続する。個別I/Fは、UI、API、および、CLIなどである。コンテナ630は、ツールA631の処理結果などを記憶するファイルシステム634を含む。
ツールBレシピは、ツールB641が実行されるコンテナ640を起動可能にするコンテナイメージである。コンテナ640は、ツールB641を含む。コンテナ640は、プロキシを実現する、ツールB向けプロキシ定義642と、プロキシバイナリ643との組み合わせを含む。
プロキシバイナリ643は、UI操作、API操作、CLI操作、および、ファイル操作などを実施可能である。プロキシバイナリ643は、ツールB641の個別I/Fと、コンテナ640に設けられる共通I/F645とを接続する。個別I/Fは、UI、API、および、CLIなどである。コンテナ640は、ツールB641の処理結果などを記憶するファイルシステム644を含む。
これにより、情報処理装置100は、共通I/Fを介して、複数のツールを利用可能にすることができる。情報処理装置100は、例えば、共通I/F635,645などを介して、ツールA631、および、ツールB641などの複数のツールに、同一の形式でデータを入出力可能にすることができる。このため、情報処理装置100は、複数のツールを組み合わせて利用し易くすることができ、ユーザにかかる作業負担の低減化を図ることができる。
情報処理装置100は、データフローエディタ651を有する。データフローエディタ651は、ユーザの操作入力に基づき、データとタスクとの依存関係を示し、一連のタスクを規定したデータフロー定義653を作成するソフトウェアである。タスクは、例えば、ツールを利用して行われる処理である。タスクは、ツールを利用して、所定の定義ファイルの内容を実行する処理である。タスクは、具体的には、ツールA、または、ツールBなどを利用する処理である。
情報処理装置100は、例えば、データフローエディタ651により、GUIを介して、各種データと、ツールAを利用するタスクと、ツールBを利用するタスクとの依存関係を示すデータフロー定義653を作成する。
情報処理装置100は、データフローエンジン652を有する。データフローエンジン652は、ツール連携機能661を有する。ツール連携機能661は、コンテナを制御可能である。ツール連携機能661は、共通I/Fを操作可能である。ツール連携機能661は、データフロー定義653に従って、ツールをどの順序で利用するのかを決定する。ツール連携機能661は、ツールを利用して、どのようにタスクの処理内容を実現するのかを決定する。
ツール連携機能661は、データフロー定義653に従って、ツールを利用して、一連のタスクを実行する。ツール連携機能661は、例えば、生成されたコンテナイメージに基づいて、タスクが利用するツールを含むコンテナを作成し、ツールに対して、編集時操作、または、実行時操作を実行した後、作成したコンテナを削除する。これにより、ツール連携機能661は、ツールを利用して、一連のタスクを順に実行する。
編集時操作は、例えば、定義ファイルを編集する際に行う操作である。編集時操作の一例は、具体的には、図10を用いて後述する。実行時操作は、例えば、定義ファイルを実行する際に行う操作である。実行時操作の一例は、具体的には、図10を用いて後述する。これにより、情報処理装置100は、ユーザが、複数のツールを組み合わせて、所望のデータ利活用タスクを実施可能にすることができる。また、情報処理装置100は、ユーザが、複数のツールを組み合わせ直し、データ利活用タスクを変更する際に、ユーザにかかる処理負担の低減化を図ることができる。
(レシピ定義の一例)
次に、図7〜図9を用いて、レシピ定義の一例について説明する。
図7〜図9は、レシピ定義の一例を示す説明図である。レシピ定義は、ツールのコンテナイメージ、および、ツールのコンテナイメージからの変更差分などのデータを含む。レシピ定義は、プロキシ定義の手元側のファイルパス、および、レシピのメタデータなどのデータを含む。メタデータは、例えば、レシピ名、ポート、ツールで実行する定義ファイルなどのデータである。
図7において、表700は、レシピ定義に含まれる各種データの一覧を示す。表700における、(*)印付きのデータは、レシピ定義に含まれることが好ましいデータである。表700は、具体的には、pentaho・データインテグレーションと呼ばれるツールに関するレシピ定義を一例として示す。
レシピ定義は、例えば、属性値:データの型=name:string(*)である第1のデータを含む。第1のデータは、レシピに付与されるレシピ名である。第1のデータは、例えば、Pentaho Dlである。第1のデータは、初期値なしである。
レシピ定義は、例えば、属性値:データの型=version:stringである第2のデータを含む。第2のデータは、レシピのバージョンである。第2のデータは、例えば、1.0.0である。第2のデータは、latestである。
レシピ定義は、例えば、属性値:データの型=description:stringである第3のデータを含む。第3のデータは、レシピの説明である。第3のデータは、例えば、説明の文章である。第3のデータは、空文字列である。
レシピ定義は、例えば、属性値:データの型=definition:stringである第4のデータを含む。第4のデータは、プロジェクトフォルダの下位に存在し、notesフォルダに格納される定義ファイルに付与される定義ファイル名である。第4のデータは、例えば、example.ktrである。第4のデータは、空文字列である。
レシピ定義は、例えば、属性値:データの型=ports:Port[]である第5のデータを含む。第5のデータは、ポート情報の配列である。ポート情報の配列は、−name:ポート名と、−port:ポート番号とを含む。第5のデータは、例えば、−name:“web”、および、port:“8080”である。第5のデータは、初期値[]である。
レシピ定義は、例えば、属性値:データの型=image name:string(*)である第6のデータを含む。第6のデータは、イメージに付与されるイメージ名である。第6のデータは、例えば、pentaho_newである。第6のデータは、初期値なしである。
レシピ定義は、例えば、属性値:データの型=image tag:string(*)である第7のデータを含む。第7のデータは、イメージに付与されるイメージタグである。イメージタグは、例えば、バージョン名に対応する。第7のデータは、例えば、latestである。第7のデータは、初期値latestである。
レシピ定義は、例えば、属性値:データの型=image from:string(*)である第8のデータを含む。第8のデータは、イメージの元となるベースイメージに付与されるイメージ名である。第8のデータは、例えば、hiromuhota/webspoon:0.8.2.19である。第8のデータは、初期値なしである。
レシピ定義は、例えば、属性値:データの型=image cmd:string[](*)である第9のデータを含む。第9のデータは、ツールの実行コマンドである。実行コマンドは、例えば、シェルスクリプトである。第9のデータは、例えば、−/usr/local/tomcat/bin/catalina.sh、および、−runなどである。第9のデータは、初期値なしである。
レシピ定義は、例えば、属性値:データの型=image changes:string[]である第10のデータを含む。第10のデータは、Dockerfileに加える追加コマンドである。第10のデータは、例えば、ツールのベースイメージに、どのような改良を加えるのかを示すDockerfileとして作成されるデータである。第10のデータは、例えば、COPY assets/samples/samples/である。第10のデータは、初期値[]である。
レシピ定義は、例えば、属性値=image proxy:file(*)である第11のデータを含む。第11のデータは、プロキシ定義に付与されるファイル名である。第11のデータは、例えば、./proxy.yamlである。第11のデータは、初期値なしである。次に、図8の説明に移行する。
図8において、テキスト800は、レシピ定義を示す。テキスト800は、文1を含む。文1は、例えば、メタデータを示す。メタデータは、例えば、レシピ名、バージョン、説明などを含む。テキスト800は、文2を含む。文2は、例えば、ツールにより読み書きされる定義ファイルのファイルパスを示す。
テキスト800は、文4を含む。文4は、例えば、イメージが公開するポート番号に対応するタスクノードのポートを示す。テキスト800は、文5を含む。文5は、例えば、コンテナイメージのイメージ名およびイメージタグを示す。テキスト800は、文6を含む。文6は、例えば、コンテナ起動時の実行コマンドを示す。
テキスト800は、文7を含む。文7は、例えば、ツールのコンテナイメージからの変更差分を示す。変更差分は、定義ファイルを配置するコンテナ側のフォルダの所有権およびアクセス権を、データ利活用基盤と合わせるため、および、ツールの禁止操作を実現するためのデータである。変更差分は、例えば、ファイルシステムに配置されたフォルダの所有権およびアクセス権を規定したり、ツールに与える設定ファイルを規定したりする。変更差分は、例えば、データ利活用基盤におけるユーザIDと、コンテナにおけるユーザIDとを対応付ける。テキスト800は、文8を含む。文8は、例えば、プロキシ定義のファイル名を示す。次に、図9の説明に移行する。
図9において、テキスト900は、イメージのメタデータを示す。イメージのメタデータは、例えば、docker inspectによって取得される。
(共通I/Fの一例)
次に、図10を用いて、共通I/Fの一例について説明する。
図10は、共通I/Fの一例を示す説明図である。共通I/Fは、ツールによらず共通の操作に対応する機能を有する。共通I/Fは、例えば、編集時操作、または、実行時操作に対応する機能を有する。
編集時操作は、例えば、UIを開く、定義ファイルを取得、入力データを取得、環境パラメータを取得などの操作である。実行時操作は、定義ファイルを実行、または、定義ファイルの実行結果を取得などの操作である。図10において、表1000は、例えば、共通I/Fが有する各機能について示す。
編集時操作に対応する機能は、例えば、OpenUserInterfaceである。OpenUserInterfaceは、例えば、引数なしであり、戻り値UIである。OpenUserInterfaceは、例えば、UIを開く機能である。OpenUserInterfaceは、例えば、ツールがウェブアプリである場合、エンドポイントを取得する機能である。
編集時操作に対応する機能は、例えば、CloseUserInterfaceである。CloseUserInterfaceは、例えば、引数なしであり、戻り値Massageである。CloseUserInterfaceは、例えば、UIを閉じる機能である。
編集時操作に対応する機能は、例えば、GetDefinitionである。GetDefinitionは、例えば、引数なしであり、戻り値Definitionである。GetDefinitionは、例えば、定義ファイルを取得する機能である。
編集時操作に対応する機能は、例えば、SetDefinitionである。SetDefinitionは、例えば、引数Definitionであり、戻り値Massageである。SetDefinitionは、例えば、定義ファイルを設定し、UIを、ファイルを開いた状態にする機能である。
編集時操作に対応する機能は、例えば、ListInputDataである。ListInputDataは、例えば、引数なしであり、戻り値DataListである。ListInputDataは、例えば、定義ファイル中の入力データを全取得する機能である。
編集時操作に対応する機能は、例えば、SetInputDataである。SetInputDataは、例えば、引数Dataであり、戻り値Massageである。SetInputDataは、例えば、定義ファイル中の特定箇所に入力データを指定する機能である。
編集時操作に対応する機能は、例えば、ListOutputDataである。ListOutputDataは、例えば、引数なしであり、戻り値DataListである。ListOutputDataは、例えば、定義ファイル中の出力データを全取得する機能である。
編集時操作に対応する機能は、例えば、SetOutputDataである。SetOutputDataは、例えば、引数Dataであり、戻り値Massageである。SetOutputDataは、例えば、定義ファイル中の特定箇所に出力データを指定する機能である。
編集時操作に対応する機能は、例えば、GetConfigurationである。GetConfigurationは、例えば、引数なしであり、戻り値Configurationである。GetConfigurationは、例えば、環境設定パラメータを取得する機能である。
編集時操作に対応する機能は、例えば、SetConfigurationである。SetConfigurationは、例えば、引数Configurationであり、戻り値Massageである。SetConfigurationは、例えば、環境設定パラメータを指定する機能である。
実行時操作に対応する機能は、例えば、Executeである。Executeは、引数なしであり、戻り値Executionである。Executeは、例えば、定義ファイルを実行する機能である。
実行時操作に対応する機能は、例えば、GetExecutionResultである。GetExecutionResultは、例えば、引数Executionであり、戻り値ExecutionResultである。GetExecutionResultは、例えば、実行結果を取得する機能である。
(引数および戻り値の一例)
次に、図11を用いて、図10に示した引数および戻り値の一例について説明する。
図11は、引数および戻り値の一例を示す説明図である。図11において、表1100は、例えば、引数または戻り値の型ごとに、引数または戻り値に含まれるデータの内容について示す。
massageは、例えば、属性名massage、かつ、属性型stringのメッセージ本文を含む。UIは、例えば、属性名type、かつ、属性型UITypeのUIの種類(HTTP(HyperText Transfer Protocol)=0)を含む。UIは、例えば、属性名location、かつ、属性型stringのUIの場所(URI(Uniform Resource Identifier))を含む。
Definitionは、例えば、属性名type、かつ、属性型DataTypeの定義ファイルの種類(LOCALFILE=0)を含む。Definitionは、例えば、属性名format、かつ、属性型FileFormatの定義ファイルの形式を含む。Definitionは、例えば、属性名location、かつ、属性型stringの定義ファイルの場所(ファイルパス)を含む。
Dataは、例えば、属性名type、かつ、属性型DataTypeのデータの種類(LOCALFILE=0)を含む。Dataは、例えば、属性名format、かつ、属性型FileFormatのデータのファイル形式を含む。Dataは、例えば、属性名name、かつ、属性型stringのデータの名前(Pentahoでは、例えば、入出力部品名をベースとする名前)を含む。Dataは、例えば、属性名location、かつ、属性型stringのデータの場所(ファイルパス)を含む。
DataListは、例えば、属性名list、かつ、属性型repeatedDataのデータのリストを含む。Configurationは、例えば、属性名type、かつ、属性型DataTypeの設定ファイルの種類(LOCALFILE=0)を含む。Configurationは、例えば、属性名format、かつ、属性型FileFormatの設定ファイルの形式を含む。Configurationは、例えば、属性名location、かつ、属性型stringの設定ファイルの場所(ファイルパス)を含む。
Executionは、例えば、属性名id、かつ、属性型stringの実行IDを含む。ExecutionResultは、属性名result、かつ、属性型stringの実行結果を含む。プロキシは、共通I/Fをコンテナ内から、コンテナ外に提供するデーモンである。プロキシは、例えば、HTTPまたはgRPCサーバとして動作する。ここで、プロキシを実現するためにプロキシ定義が用意される。プロキシ定義は、共通I/Fの各機能の動作手続を定めるデータである。
(プロキシ定義の一例)
次に、図12〜図16を用いて、プロキシ定義の一例について説明する。
図12〜図16は、プロキシ定義の一例を示す説明図である。図12において、テキスト1200は、プロキシ定義を示す。プロキシ定義は、少なくとも、共通I/Fの各機能の動作手続が記述される。プロキシ定義は、さらに、サブルーチンとなる機能の動作手続が記述されてもよい。
テキスト1200のvariablesは、共通I/Fの各機能で用いられる変数を示す。テキスト1200のfunctionsは、共通I/Fの各機能の動作手続を示す。プロキシ定義は、APIアクセスなどの詳細な実装を、ユーザが意識せずとも作成可能な形式である。形式は、例えば、yaml形式である。次に、図13の説明に移行する。
図13において、表1300は、共通I/Fの機能、および、サブルーチンとなる機能などが有する属性を示す。属性は、例えば、arg、tasks、returnなどである。argは、例えば、引数を格納する新規変数名である。tasksは、例えば、機能が呼び出された際に実行されるタスクのシーケンスである。returnは、例えば、戻り値として参照する変数名である。
変数は、グローバル変数とローカル変数との2種類が存在する。グローバル変数は、例えば、すべての機能で扱うことが可能な変数である。ローカル変数は、例えば、いずれかの機能の中でのみ扱うことが可能な変数である。ツールコンテナに指定された環境変数は、グローバル変数として参照可能な変数である。次に、図14の説明に移行する。
図14において、テキスト1400は、変数を参照する記述の一例を示す。変数を参照する記述は、例えば、オブジェクト型変数のメンバ参照、または、配列変数の要素参照などが用いられる。テキスト1400に示すように、オブジェクト型変数のメンバ参照は、例えば、file.typeである。テキスト1400に示すように、配列変数の要素参照は、例えば、files[0]である。タスクの引数に、変数の値を指定する場合、変数参照が記述される。次に、図15の説明に移行する。
図15において、テキスト1500は、初期値を宣言する記述の一例を示す。テキスト1500に示すように、グローバル変数は、例えば、variablesの下位に、初期値と共に宣言される。オブジェクト型変数は、例えば、属性の初期値を記述可能である。初期値は、他の変数であってもよい。次に、図16の説明に移行する。
図16において、テキスト1600は、一連のタスクを機能内で実行する順序で記述した一例を示す。一連のタスクは、例えば、テキスト1200のtasksの下位に記述される。タスクは、ツールの中で、ある定義ファイルを実行する実体である。
テキスト1600に示すように、タスクの引数と同列の箇所に、register属性、および、新たなローカル変数名を指定することにより、タスクの戻り値は、指定されたローカル変数名が付与されたローカル変数に代入可能である。
テキスト1600であれば、ファイルを読み込むタスクread_fileの戻り値であるファイルの中身が、新たなローカル変数contentに代入されることになる。ローカル変数contentは、以降に実行されるタスクにおいて利用可能である。
タスクは、例えば、UI操作(ページジャンプ、キーボード操作またはマウス操作など)である。UI操作は、例えば、ヘッドレスブラウザを用いる。UI操作は、具体的には、UI画面を開き、UI画面内の所定の位置に対してエンターキーを押下するなどの操作である。
タスクは、例えば、WebAPIの呼び出しである。WebAPIの呼び出しは、例えば、HTTPクライアントを用いる。タスクは、例えば、CLIの呼び出しである。CLIの呼び出しは、例えば、Child processなどによりコマンドを実行するライブラリを用いる。
タスクは、例えば、スクリプトの実行である。タスクは、例えば、ファイル操作である。タスクは、例えば、サブルーチンの呼び出しである。タスクは、例えば、変数の値の更新またはチェックである。一連のタスクは、ツールで入力データの一覧を取得するなどの動作を実現する。一連のタスクは、例えば、ツールで開いている定義ファイルを読み込み、定義ファイルにおける入力データに相当する箇所を取得するなどの動作を実現する。
(データフロー定義を作成する一例)
次に、図17を用いて、情報処理装置100が、データフロー定義を作成する一例について説明する。
図17は、データフロー定義を作成する一例を示す説明図である。図17において、情報処理装置100は、エディタ画面1700を、ディスプレイに表示する。エディタ画面1700は、データを示すオブジェクト、タスクを示すオブジェクトなどを配置可能な領域1701を含む。エディタ画面1700は、Runボタン1702を含む。
情報処理装置100は、ユーザの操作入力に基づき、領域1701上で、オブジェクト間を結線する。結線したオブジェクト同士に、所定の依存関係が設定される。例えば、データを示すオブジェクトから、タスクを示すオブジェクトへと結線された場合、データが、タスクに入力されるという依存関係が設定される。
これにより、情報処理装置100は、直感的に、データとタスクとの依存関係を示すデータフロー定義を作成することができる。情報処理装置100は、例えば、それぞれのUIを開いたり、それぞれのデータ、または、それぞれのタスクに定義された属性およびパラメータなどの要素を変更したりする、一連のタスクを規定したデータフロー定義を作成することができる。
その後、情報処理装置100は、データフロー定義に従って、レシピに基づいてコンテナインスタンスを起動し、コンテナインスタンスに基づいて、タスクを実行することができる。このため、情報処理装置100は、複数のツールを組み合わせて利用し易くすることができ、ユーザにかかる作業負担の低減化を図ることができる。
(レシピ定義作成処理手順)
次に、図18を用いて、情報処理装置100が実行する、レシピ定義作成処理手順の一例について説明する。レシピ定義作成処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図18は、レシピ定義作成処理手順の一例を示すフローチャートである。図18において、情報処理装置100は、ユーザの操作入力に従って、メタデータをレシピ定義に書き込む(ステップS1801)。メタデータは、例えば、レシピ名、バージョン、および、説明などである。
次に、情報処理装置100は、ユーザの操作入力に従って、ツールで読み書きされる定義ファイルのファイルパスをレシピ定義に書き込む(ステップS1802)。ここで、情報処理装置100は、ファイルパスが未定の場合は、ファイルパスを空文字列としてレシピ定義に書き込む。
次に、情報処理装置100は、ユーザの操作入力に従って、コンテナイメージのメタデータを取得する(ステップS1803)。情報処理装置100は、例えば、イメージレジストリに記憶された、ツールに対応するコンテナイメージに付与されたコンテナイメージ名、または、イメージタグに基づいて、コンテナイメージのメタデータを取得する。
次に、情報処理装置100は、ユーザの操作入力に従って、コンテナイメージのメタデータに基づいて、コンテナイメージが公開するポート番号を取得し、ポート番号に対応するタスクノードのポートをレシピ定義に書き込む(ステップS1804)。
次に、情報処理装置100は、ユーザの操作入力に従って、コンテナイメージに付与されたコンテナイメージ名およびイメージタグをレシピ定義に書き込む(ステップS1805)。そして、情報処理装置100は、ユーザの操作入力に従って、コンテナイメージのメタデータに基づいて、コンテナ起動時の実行コマンドを特定し、レシピ定義に書き込む(ステップS1806)。
次に、情報処理装置100は、ユーザの操作入力に従って、コンテナイメージの変更差分を取得し、レシピ定義に書き込む(ステップS1807)。ここで、情報処理装置100は、例えば、定義ファイルを配置するコンテナ側のフォルダの所有権およびアクセス権を、データ利活用基盤と合わせるため、または、ツールの禁止操作を実現するための、コンテナイメージの変更差分を取得する。
次に、情報処理装置100は、ユーザの操作入力に従って、プロキシ定義のファイル名をレシピ定義に書き込む(ステップS1808)。ここで、プロキシ定義のファイル名は、例えば、レシピ定義からの相対パスである。そして、情報処理装置100は、レシピ定義作成処理を終了する。これにより、情報処理装置100は、レシピ定義を作成することができる。
(プロキシ定義作成処理手順)
次に、図19を用いて、情報処理装置100が実行する、プロキシ定義作成処理手順の一例について説明する。プロキシ定義作成処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図19は、プロキシ定義作成処理手順の一例を示すフローチャートである。図19において、情報処理装置100は、プロキシの提供する機能のうち、まだ処理していないいずれかの機能を選択する(ステップS1901)。プロキシの提供する機能は、例えば、共通I/Fの機能である。
次に、情報処理装置100は、UI操作について、プロキシ定義に記録する(ステップS1902)。情報処理装置100は、例えば、実際にWebブラウザで画面サイズを固定し、ユーザの操作入力に従って、マウスカーソルの座標、ボタン操作、キーボード操作、待ち時間、ページ遷移などを記録し、プロキシ定義に書き込む。
次に、情報処理装置100は、API操作について、プロキシ定義に記録する(ステップS1903)。情報処理装置100は、例えば、ユーザの操作入力に従って、実際にHTTPクライアントにより、リクエストを送信することにより、所望の機能を実現するリクエストパラメータを特定し、プロキシ定義に書き込む。
次に、情報処理装置100は、CLI操作について、プロキシ定義に記録する(ステップS1904)。情報処理装置100は、例えば、ユーザの操作入力に従って、実際にターミナルでコマンドを実行することにより、所望の機能を実現するコマンドライン引数を特定し、プロキシ定義に書き込む。
次に、情報処理装置100は、スクリプト実行操作について、プロキシ定義に記録する(ステップS1905)。情報処理装置100は、例えば、ユーザの操作入力に従って、所望の機能を実現するスクリプトを開発し、ファイル名および実行コマンドを特定し、プロキシ定義に書き込む。
次に、情報処理装置100は、ファイル操作について、プロキシ定義に記録する(ステップS1906)。情報処理装置100は、例えば、ユーザの操作入力に従って、読み取り対象のファイル名、または、書き込み対象のファイル名などを特定し、プロキシ定義に書き込む。情報処理装置100は、例えば、ユーザの操作入力に従って、参照元の変数、または、格納先の変数などを特定し、プロキシ定義に書き込む。
次に、情報処理装置100は、ユーザの操作入力に従って、操作中に使用する変数およびサブルーチンを、プロキシ定義中に宣言する(ステップS1907)。そして、情報処理装置100は、プロキシの提供する機能のすべてを選択したか否かを判定する(ステップS1908)。
ここで、未選択の機能がある場合(ステップS1908:No)、情報処理装置100は、ステップS1901の処理に戻る。一方で、機能のすべてを選択している場合(ステップS1908:Yes)、情報処理装置100は、プロキシ定義作成処理を終了する。
(ビルド処理手順)
次に、図20を用いて、情報処理装置100が実行する、ビルド処理手順の一例について説明する。ビルド処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図20は、ビルド処理手順の一例を示すフローチャートである。図20において、情報処理装置100は、レシピ定義を参照し、レシピの元となる、いずれかのツールのコンテナイメージをイメージレジストリから取得し、レシピに設定する(ステップS2001)。
次に、情報処理装置100は、レシピ定義を参照し、プロキシ定義を読み込み、プロキシバイナリとプロキシ定義とを、所定のフォルダに格納した上で、レシピに追加する(ステップS2002)。所定のフォルダは、例えば、/proxyである。
次に、情報処理装置100は、レシピ定義のポート情報(ports)に合わせて、レシピに公開ポートを追加する(ステップS2003)。そして、情報処理装置100は、レシピ定義のimageを参照し、レシピに変更差分を追加する(ステップS2004)。
次に、情報処理装置100は、追加後のレシピに基づいて、コンテナインスタンスを作成する(ステップS2005)。そして、情報処理装置100は、コンテナインスタンスの起動確認用のポートおよびパスを、起動完了するまで監視する(ステップS2006)。
次に、情報処理装置100は、起動完了した後、起動完了したコンテナインスタンスをイメージ化し、ツールのレシピとして、イメージレジストリにpushする(ステップS2007)。そして、情報処理装置100は、ビルド処理を終了する。ビルド処理は、例えば、図6に示したレシピビルド機能612に対応する。
これにより、情報処理装置100は、ツールに関する初期化処理を予め実施しておき、以降に、再びコンテナインスタンスを起動する際にかかる所要時間の低減化を図ることができる。
(連携処理手順)
次に、図21を用いて、情報処理装置100が実行する、連携処理手順の一例について説明する。連携処理は、例えば、図3に示したCPU301と、メモリ302や記録媒体305などの記憶領域と、ネットワークI/F303とによって実現される。
図21は、連携処理手順の一例を示すフローチャートである。図21において、情報処理装置100は、データフローエディタ、または、データフローエンジンから、あるツールの共通I/Fのいずれかの機能を指定するリクエストを受け付ける(ステップS2101)。
次に、情報処理装置100は、当該ツールのレシピに基づいて、コンテナインスタンスを作成する(ステップS2102)。そして、情報処理装置100は、コンテナインスタンスのプロキシにアクセス可能になるまで待機する(ステップS2103)。
次に、情報処理装置100は、アクセス可能になったプロキシに、指定の機能をリクエストする(ステップS2104)。そして、情報処理装置100は、プロキシからレスポンスを受信するまで待機する(ステップS2105)。
次に、情報処理装置100は、受信したレスポンスを、データフローエディタ、または、データフローエンジンに送信し、コンテナインスタンスを削除する(ステップS2106)。そして、情報処理装置100は、連携処理を終了する。これにより、情報処理装置100は、処理リソースを節約することができる。
ここで、情報処理装置100は、図18〜図21の各フローチャートの一部ステップの処理の順序を入れ替えて実行してもよい。例えば、ステップS1801〜S1808の処理の順序は入れ替え可能である。また、情報処理装置100は、図18〜図21の各フローチャートの一部ステップの処理を省略してもよい。例えば、ステップS1801〜S1808のいずれかの処理は省略可能である。
以上説明したように、情報処理装置100によれば、それぞれのアプリに対応し、当該アプリ個別の形式である個別I/Fと、複数のアプリ共通の形式である共通I/Fとを接続するプロキシを生成可能にする第1の定義情報を取得することができる。情報処理装置100によれば、それぞれのアプリに対応し、当該アプリと、当該アプリに対応するプロキシとが実行される仮想環境を生成可能にする第2の定義情報を取得することができる。情報処理装置100によれば、取得した第1の定義情報と、取得した第2の定義情報とに基づいて、それぞれのアプリに対応する仮想環境を生成すると共に、当該仮想環境で実行されるプロキシを生成することができる。これにより、情報処理装置100は、プロキシにより、個別I/Fと共通I/Fとを連携することができ、複数のアプリを組み合わせて利用し易くすることができる。
情報処理装置100によれば、それぞれのアプリに対応する仮想環境に、当該アプリと、当該アプリに対応するプロキシとが実行されるコンテナを利用することができる。これにより、情報処理装置100は、プロキシとアプリとを、コンテナにおいて纏めて実行することができる。このため、情報処理装置100は、プロキシを、アプリにダイレクトにアクセス可能な場所で実行することができる。
情報処理装置100によれば、データと複数のアプリの少なくともいずれかのアプリを利用するタスクとの依存関係を示すデータフローを取得することができる。情報処理装置100によれば、取得した第1の定義情報と、取得した第2の定義情報とに基づいて、それぞれのアプリに対応する仮想環境と共に、当該仮想環境で実行されるプロキシを実体として纏めて生成可能にするイメージデータを生成することができる。情報処理装置100によれば、データフローと、イメージデータとに基づいて、タスクが、複数のアプリのいずれかのアプリを利用開始する際に、いずれかのアプリに対応する仮想環境を生成すると共に、当該仮想環境で実行されるプロキシを生成することができる。これにより、情報処理装置100は、アプリを利用開始するまで、仮想環境を生成せず、かつ、プロキシを生成せずに済ませることができ、処理リソースを節約することができる。
情報処理装置100によれば、タスクが、複数のアプリのいずれかのアプリを利用終了する際に、いずれかのアプリに対応する仮想環境を削除すると共に、当該仮想環境で実行されるプロキシを削除することができる。これにより、情報処理装置100は、アプリを利用終了した後、処理リソースを節約することができる。
情報処理装置100によれば、第2の定義情報を、ユーザの操作入力に基づいて生成することができる。これにより、情報処理装置100は、ユーザが所望の仮想環境を生成可能にすることができる。
情報処理装置100によれば、個別I/Fとして、UI、API、または、CLIを有する、複数のアプリに対して適用することができる。これにより、情報処理装置100は、個別I/Fとして、UI、API、または、CLIを有する、複数のアプリを組み合わせて利用し易くすることができる。
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをPCやワークステーションなどのコンピュータで実行することにより実現することができる。本実施の形態で説明した情報処理プログラムは、コンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。記録媒体は、ハードディスク、フレキシブルディスク、CD(Compact Disc)−ROM、MO(Magneto Optical disc)、DVD(Digital Versatile Disc)などである。また、本実施の形態で説明した情報処理プログラムは、インターネットなどのネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)複数のアプリのそれぞれのアプリに対応し、当該アプリ個別の形式である個別インターフェースと、前記複数のアプリ共通の形式である共通インターフェースとを接続するプロキシを生成可能にする第1の定義情報を取得し、
前記それぞれのアプリに対応し、当該アプリと、当該アプリに対応する前記プロキシとが実行される仮想環境を生成可能にする第2の定義情報を取得し、
取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する、
処理をコンピュータに実行させることを特徴とする情報処理プログラム。
(付記2)前記それぞれのアプリに対応する前記仮想環境は、当該アプリと、当該アプリに対応する前記プロキシとが実行されるコンテナである、ことを特徴とする付記1に記載の情報処理プログラム。
(付記3)データと前記複数のアプリの少なくともいずれかのアプリを利用するタスクとの依存関係を示すデータフローを取得し、
取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境と共に、当該仮想環境で実行される前記プロキシを実体として纏めて生成可能にするイメージデータを生成する、
処理を前記コンピュータに実行させ、
前記生成する処理は、
取得した前記データフローと、生成した前記イメージデータとに基づいて、前記タスクが、前記複数のアプリのいずれかのアプリを利用開始する際に、前記いずれかのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する、ことを特徴とする付記1または2に記載の情報処理プログラム。
(付記4)前記タスクが、前記複数のアプリのいずれかのアプリを利用終了する際に、前記いずれかのアプリに対応する前記仮想環境を削除すると共に、当該仮想環境で実行される前記プロキシを削除する、
処理を前記コンピュータに実行させることを特徴とする付記3に記載の情報処理プログラム。
(付記5)前記第2の定義情報は、ユーザの操作入力に基づいて生成される、ことを特徴とする付記1〜4のいずれか一つに記載の情報処理プログラム。
(付記6)前記個別インターフェースは、UI(User Interface)、API(Application Programming Interface)、または、CLI(Command Line Interface)である、ことを特徴とする付記1〜5のいずれか一つに記載の情報処理プログラム。
(付記7)複数のアプリのそれぞれのアプリに対応し、当該アプリ個別の形式である個別インターフェースと、前記複数のアプリ共通の形式である共通インターフェースとを接続するプロキシを生成可能にする第1の定義情報を取得し、
前記それぞれのアプリに対応し、当該アプリと、当該アプリに対応する前記プロキシとが実行される仮想環境を生成可能にする第2の定義情報を取得し、
取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する、
処理をコンピュータが実行することを特徴とする情報処理方法。
(付記8)複数のアプリのそれぞれのアプリに対応し、当該アプリ個別の形式である個別インターフェースと、前記複数のアプリ共通の形式である共通インターフェースとを接続するプロキシを生成可能にする第1の定義情報を取得し、
前記それぞれのアプリに対応し、当該アプリと、当該アプリに対応する前記プロキシとが実行される仮想環境を生成可能にする第2の定義情報を取得し、
取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する、
制御部を有することを特徴とする情報処理装置。
100 情報処理装置
101 アプリ
102 個別I/F
103,511,512 プロキシ
104,635,645 共通I/F
110,120 定義情報
200 情報処理システム
201 端末装置
202 クライアント装置
210 ネットワーク
300 バス
301 CPU
302 メモリ
303 ネットワークI/F
304 記録媒体I/F
305 記録媒体
400 記憶部
401 取得部
402 生成部
403 実行部
404 出力部
501 フローエディタ
502 フローエンジン
601 レシピ定義
602,632,642 プロキシ定義
611,633,643 プロキシバイナリ
612 レシピビルド機能
621 イメージレジストリ
622 開発データ集合
630,640 コンテナ
631 ツールA
634,644 ファイルシステム
641 ツールB
651 データフローエディタ
652 データフローエンジン
653 データフロー定義
661 ツール連携機能
700,1300 表
800,900,1200,1400,1500,1600 テキスト
1700 エディタ画面
1701 領域
1702 Runボタン

Claims (6)

  1. 複数のアプリのそれぞれのアプリに対応し、当該アプリ個別の形式である個別インターフェースと、前記複数のアプリ共通の形式である共通インターフェースとを接続するプロキシを生成可能にする第1の定義情報を取得し、
    前記それぞれのアプリに対応し、当該アプリと、当該アプリに対応する前記プロキシとが実行される仮想環境を生成可能にする第2の定義情報を取得し、
    取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する、
    処理をコンピュータに実行させることを特徴とする情報処理プログラム。
  2. 前記それぞれのアプリに対応する前記仮想環境は、当該アプリと、当該アプリに対応する前記プロキシとが実行されるコンテナである、ことを特徴とする請求項1に記載の情報処理プログラム。
  3. データと前記複数のアプリの少なくともいずれかのアプリを利用するタスクとの依存関係を示すデータフローを取得し、
    取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境と共に、当該仮想環境で実行される前記プロキシを実体として纏めて生成可能にするイメージデータを生成する、
    処理を前記コンピュータに実行させ、
    前記生成する処理は、
    取得した前記データフローと、生成した前記イメージデータとに基づいて、前記タスクが、前記複数のアプリのいずれかのアプリを利用開始する際に、前記いずれかのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する、ことを特徴とする請求項1または2に記載の情報処理プログラム。
  4. 前記タスクが、前記複数のアプリのいずれかのアプリを利用終了する際に、前記いずれかのアプリに対応する前記仮想環境を削除すると共に、当該仮想環境で実行される前記プロキシを削除する、
    処理を前記コンピュータに実行させることを特徴とする請求項3に記載の情報処理プログラム。
  5. 複数のアプリのそれぞれのアプリに対応し、当該アプリ個別の形式である個別インターフェースと、前記複数のアプリ共通の形式である共通インターフェースとを接続するプロキシを生成可能にする第1の定義情報を取得し、
    前記それぞれのアプリに対応し、当該アプリと、当該アプリに対応する前記プロキシとが実行される仮想環境を生成可能にする第2の定義情報を取得し、
    取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する、
    処理をコンピュータが実行することを特徴とする情報処理方法。
  6. 複数のアプリのそれぞれのアプリに対応し、当該アプリ個別の形式である個別インターフェースと、前記複数のアプリ共通の形式である共通インターフェースとを接続するプロキシを生成可能にする第1の定義情報を取得し、
    前記それぞれのアプリに対応し、当該アプリと、当該アプリに対応する前記プロキシとが実行される仮想環境を生成可能にする第2の定義情報を取得し、
    取得した前記第1の定義情報と、取得した前記第2の定義情報とに基づいて、前記それぞれのアプリに対応する前記仮想環境を生成すると共に、当該仮想環境で実行される前記プロキシを生成する、
    制御部を有することを特徴とする情報処理装置。
JP2020069943A 2020-04-08 2020-04-08 情報処理プログラム、情報処理方法、および情報処理装置 Pending JP2021166006A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2020069943A JP2021166006A (ja) 2020-04-08 2020-04-08 情報処理プログラム、情報処理方法、および情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2020069943A JP2021166006A (ja) 2020-04-08 2020-04-08 情報処理プログラム、情報処理方法、および情報処理装置

Publications (1)

Publication Number Publication Date
JP2021166006A true JP2021166006A (ja) 2021-10-14

Family

ID=78022167

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020069943A Pending JP2021166006A (ja) 2020-04-08 2020-04-08 情報処理プログラム、情報処理方法、および情報処理装置

Country Status (1)

Country Link
JP (1) JP2021166006A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023113079A1 (ko) * 2021-12-17 2023-06-22 엘지전자 주식회사 신호 처리 장치, 및 이를 구비하는 차량용 디스플레이 장치
WO2023136373A1 (ko) * 2022-01-13 2023-07-20 엘지전자 주식회사 신호 처리 장치, 및 이를 구비하는 차량용 디스플레이 장치

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023113079A1 (ko) * 2021-12-17 2023-06-22 엘지전자 주식회사 신호 처리 장치, 및 이를 구비하는 차량용 디스플레이 장치
WO2023136373A1 (ko) * 2022-01-13 2023-07-20 엘지전자 주식회사 신호 처리 장치, 및 이를 구비하는 차량용 디스플레이 장치

Similar Documents

Publication Publication Date Title
JP4185159B1 (ja) アプリケーション開発支援装置及びプログラム
JP5026415B2 (ja) データセントリックワークフロー
KR101292401B1 (ko) 풍부한 데이터 바인딩된 애플리케이션
JP5679989B2 (ja) デバッグパイプライン
JP4756947B2 (ja) 情報処理装置及び方法
JP5087133B2 (ja) アプリケーション開発支援装置、プログラム及び記録媒体
US20080235261A1 (en) Generating a new file using instance information
WO2018036342A1 (zh) 基于csar的模型文件的可视化设计方法及装置
JP2021166006A (ja) 情報処理プログラム、情報処理方法、および情報処理装置
JP5811088B2 (ja) データ処理システム及びデータ処理方法
Orzechowski et al. Reproducibility of computational experiments on kubernetes-managed container clouds with hyperflow
JP4714199B2 (ja) アプリケーション開発支援装置及びプログラム
US20070006121A1 (en) Development activity recipe
KR20110041836A (ko) Xsl/xml 기반의 웹 애플리케이션 개발시스템 및 이를 이용한 웹 애플리케이션 개발방법
JP5716108B2 (ja) オンラインシステム、プログラム生成装置および画面制御プログラム生成装置
Heil et al. ReWaMP: rapid web migration prototyping leveraging webAssembly
Kacsuk et al. Executing multi-workflow simulations on a mixed grid/cloud infrastructure using the SHIWA and SCI-BUS technology
JP2013164861A (ja) オンラインシステム、プログラム生成装置および画面制御プログラム生成装置
KR20010112690A (ko) 컴퓨터 프로그램 개발 자원을 네트워크 상에서 연동하는방법
Berglund Gradle Beyond the Basics: Customizing Next-Generation Builds
US20230315888A1 (en) Storage medium, generation method, and information processing device
JP5359704B2 (ja) プログラム生成システムおよびプログラム生成装置およびプログラム生成方法およびプログラムならびに記録媒体
Luik et al. BIOMERO: BioImage analysis in OMERO
Giretti Create a gRPC Client
Varanasi et al. Getting Started with Maven

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230112

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20231228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240109