(57)【要約】【課題】インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとすることができる情報処理装置を提供する。【解決手段】情報処理装置の生成手段は、与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成し、付与手段は、前記スケルトンに基づいてオブジェクトにインデックスを付与し、永続化手段は、前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する。【選択図】図１
2019160101.tif 000002
【特許請求の範囲】
【請求項１】
与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成する生成手段と、
前記スケルトンに基づいてオブジェクトにインデックスを付与する付与手段と、
前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する永続化手段
を有する情報処理装置。
【請求項２】
前記永続化手段は、オブジェクトのプロトタイプと属性がオブジェクトの場合は、オブジェクトの識別子に置換する、
請求項１に記載の情報処理装置。
【請求項３】
前記永続化手段は、前記オブジェクトが関数の場合は、そのインデックスも記録する、
請求項２に記載の情報処理装置。
【請求項４】
与えられたオブジェクト識別子のセットからロードが必要なオブジェクト識別子のセットを導出し、ロードするロード手段
をさらに有する請求項１に記載の情報処理装置。
【請求項５】
前記ロード手段は、インスタンス化されるオブジェクトの種類が関数の場合は、記録されたインデックスからネイティブの関数を特定し、その関数のプロキシーとしてフォーリンな関数をインスタンス化する、
請求項４に記載の情報処理装置。
【請求項６】
コンピュータを、
与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成する生成手段と、
前記スケルトンに基づいてオブジェクトにインデックスを付与する付与手段と、
前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する永続化手段
として機能させるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理プログラムに関する。
【背景技術】
【０００２】
特許文献１には、オブジェクトの情報とオブジェクトの処理に関する権限とを同一のデータ構造で管理し、クライアントからの要求を柔軟に制御することを課題とし、情報処理装置は、それぞれ親又は子の少なくとも一方が定められたオブジェクトの情報を管理し、権限情報が関連付けられたオブジェクトである権限オブジェクトの指定と、権限オブジェクトを用いて実行する処理の要求とをクライアント装置から受け付け、権限情報を認可したオブジェクトである所有者オブジェクトと、権限オブジェクトの親であるオブジェクトとの情報の比較結果に基づいて、クライアント装置からの要求を受理するか否かを判断することが開示されている。
【０００３】
特許文献２には、オブジェクトの情報とオブジェクトの処理に関する権限とを同一のデータ構造で管理し、クライアントからの要求を柔軟に制御することを課題とし、情報処理装置は、それぞれ親又は子の少なくとも一方が定められたオブジェクトの情報を管理し、オーナー属性を持つオブジェクトであるアクセストークンのプロトタイプがオーナーに一致する場合に、アクセストークンが添付されたメソッド送信を受理することが開示されている。
【０００４】
特許文献３には、一のマスターデータについての提供内容を個別に制御することを課題とし、サーバーは、それぞれ親又は子の少なくとも一方が定められたオブジェクトの情報を管理し、権限情報が関連付けられたオブジェクトである権限オブジェクトの指定を含む、提供対象オブジェクトへの読み出し要求を受け付け、権限情報を認可したオブジェクトである所有者オブジェクトと、権限オブジェクトの親であるオブジェクトとの権限の比較結果に基づいて、提供対象オブジェクトの情報を提供し、提供対象オブジェクトが有していないデータ項目については、提供対象オブジェクトの親やさらにその親を再帰的にたどる列に含まれる祖先オブジェクトのデータ項目の情報を提供することが開示されている。
【０００５】
特許文献４には、クライアントから受け付けた要求にかかる権限オブジェクトに応じたコンテンツを提供することを課題とし、情報管理装置は、それぞれ親又は子の少なくとも一方が定められたオブジェクトの少なくとも一部にコンテンツを構成する要素の要素名と要素値を関連付けて管理し、権限情報が関連付けられたオブジェクトである権限オブジェクトの指定を含む実行する処理の要求を受け付け、権限オブジェクトに基づいて対象のオブジェクトを設定し、対象のオブジェクトに要求が指定する要素名が関連付けられていない場合には、対象のオブジェクトの親のオブジェクトを新たな対象のオブジェクトに設定する処理を、予め定められた条件が満足されるまで繰り返し実行し、設定された対象のオブジェクトに要求が指定する要素名が関連付けられている場合には、対象のオブジェクトに関連付けられた要素値を要求に対し応答することが開示されている。
【０００６】
特許文献５には、クライアントから受け付けた要求にかかる権限オブジェクトに応じて決定される関数により要求を処理することを課題とし、情報管理装置は、それぞれ親又は子の少なくとも一方が定められたオブジェクトの情報を管理するオブジェクト情報管理部と、権限情報が関連付けられたオブジェクトである権限オブジェクトの指定を含む実行する処理の要求を受け付けるリクエスト受付部と、権限オブジェクトに関連付けられた関数オブジェクトを取得する関数オブジェクト取得部と、関数オブジェクトにより要求を処理するリクエスト処理部を有することが開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１５−０２２３９０号公報
【特許文献２】特開２０１５−０２２７５０号公報
【特許文献３】特開２０１６−１６４７２３号公報
【特許文献４】特開２０１５−１６２０５８号公報
【特許文献５】特開２０１５−１６２０５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
計算機における実行環境で予め用意していない関数オブジェクトについては、インポートする必要がある。しかし、その実行環境において、関数の実体を取り出したり、保存された実体を利用するためにロードしたりする公開のアクセサがない。
本発明は、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとすることができる情報処理装置及び情報処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００９】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項１の発明は、与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成する生成手段と、前記スケルトンに基づいてオブジェクトにインデックスを付与する付与手段と、前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する永続化手段を有する情報処理装置である。
【００１０】
請求項２の発明は、前記永続化手段は、オブジェクトのプロトタイプと属性がオブジェクトの場合は、オブジェクトの識別子に置換する、請求項１に記載の情報処理装置である。
【００１１】
請求項３の発明は、前記永続化手段は、前記オブジェクトが関数の場合は、そのインデックスも記録する、請求項２に記載の情報処理装置である。
【００１２】
請求項４の発明は、与えられたオブジェクト識別子のセットからロードが必要なオブジェクト識別子のセットを導出し、ロードするロード手段をさらに有する請求項１に記載の情報処理装置である。
【００１３】
請求項５の発明は、前記ロード手段は、インスタンス化されるオブジェクトの種類が関数の場合は、記録されたインデックスからネイティブの関数を特定し、その関数のプロキシーとしてフォーリンな関数をインスタンス化する、請求項４に記載の情報処理装置である。
【００１４】
請求項６の発明は、コンピュータを、与えられたオブジェクトセットから対応するスケルトンからなるオブジェクトセットを生成する生成手段と、前記スケルトンに基づいてオブジェクトにインデックスを付与する付与手段と、前記与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する永続化手段として機能させるための情報処理プログラムである。
【発明の効果】
【００１５】
請求項１の情報処理装置によれば、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとすることができる。
【００１６】
請求項２の情報処理装置によれば、オブジェクトのプロトタイプと属性がオブジェクトの場合は、オブジェクトの識別子を用いることができる。
【００１７】
請求項３の情報処理装置によれば、オブジェクトが関数の場合は、そのインデックスも記録することができる。
【００１８】
請求項４の情報処理装置によれば、与えられたオブジェクト識別子のセットからオブジェクトをロードすることができる。
【００１９】
請求項５の情報処理装置によれば、フォーリンな関数をインスタンス化することができる。
【００２０】
請求項６の情報処理プログラムによれば、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとすることができる。
【図面の簡単な説明】
【００２１】
【図１】本実施の形態の構成例についての概念的なモジュール構成図である。
【図２】本実施の形態を利用したシステム構成例を示す説明図である。
【図３】本実施の形態による処理例を示すフローチャートである。
【図４】本実施の形態による処理例を示すフローチャートである。
【図５】ｏ２ｉテーブルのデータ構造例を示す説明図である。
【図６】ｉ２ｏテーブルのデータ構造例を示す説明図である。
【図７】ｏ２ｉｄテーブルのデータ構造例を示す説明図である。
【図８】ｉｄ２ｏテーブルのデータ構造例を示す説明図である。
【図９】ｉ２ｉｄテーブルのデータ構造例を示す説明図である。
【図１０】本実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【発明を実施するための形態】
【００２２】
まず、本実施の形態を説明する前に、その前提となる技術について説明する。なお、この説明は、本実施の形態の理解を容易にすることを目的とするものである。
オブジェクト空間の構造に基づいて、オブジェクト操作に関わる特権の制御やオブジェクトの可視性の制御を行う技術として、以下のものがある。
特許文献１に記載の技術は、オブジェクトの情報とオブジェクトの処理に関する権限とを同一のデータ構造で管理し、クライアントからの要求を柔軟に制御する。
特許文献２に記載の技術は、オブジェクトの情報とオブジェクトの処理に関する権限とを同一のデータ構造で管理し、クライアントからの要求を柔軟に制御する。
特許文献３に記載の技術は、一のマスターデータについての提供内容を個別に制御する。
特許文献４に記載の技術は、クライアントから受け付けた要求にかかる権限オブジェクトに応じたコンテンツを提供する。
特許文献５に記載の技術は、クライアントから受け付けた要求にかかる権限オブジェクトに応じて決定される関数により要求を処理する。
【００２３】
このように、オブジェクトスペースのトポロジカルな形状を利用したスケールする特権の制御に関わる技術がある。これは簡潔にいえば、プロトタイプ継承関係を特権にマップする、つまり、
・親は子に対して更新（ＣＲＵＤのＵ）や削除（ＣＲＵＤのＤ）が行える、
・親が生成（ＣＲＵＤのＣ）したオブジェクトは子になる、
ということである。
なお、ＣＲＵＤとは、コンピュータソフトウェアが持つ永続性の４つの基本機能のイニシャルを並べた用語であり、Ｃｒｅａｔｅ（生成）、Ｒｅａｄ（読み取り）、Ｕｐｄａｔｅ（更新）、Ｄｅｌｅｔｅ（削除）である。
【００２４】
読み取り（ＣＲＵＤのＲ）については、それが副作用を及ぼさないことから、オブジェクトの特定ができれば読み取りは行える状況を一義的には想定する。ただし、オブジェクトの可視性の制御にオブジェクトスペースのトポロジカルな形状を利用できることは自明である。なお、このことは、いわゆるポリモルフィズムの如くを想定している。つまり、継承関係にあるオブジェクトにおいて、同一名の属性が異なる値に対応する。
また、オブジェクト識別子はランダム生成される２５６ビット程度の値を利用することを想定しており、オブジェクト識別子自体が推定困難なクレデンシャルとしての特徴を持つことがポイントである。これが、最も端的に表れるのは、ＯＡｕｔｈ２．０のアクセストークンを
ｔｏｋｅｎ＝｛ｏｗｎｅｒ，  ｃｌｉｅｎｔ，  ｓｃｏｐｅ｝
の様なオブジェクトと捉え、そのアクセストークンの真正性を
ｏｗｎｅｒ．ｉｓＰｒｏｔｏｔｙｐｅＯｆ（ｔｏｋｅｎ）
に帰着していることである。なお、「ｏｗｎｅｒ．ｉｓＰｒｏｔｏｔｙｐｅＯｆ（ｔｏｋｅｎ）」は、オーナーはトークンの親やその親やそのまた親…、つまり、オーナーはトークンのプロトタイプチェーンに属する、という意味である。
これによって、第三者がトークンを偽造することを不可能にしている。もちろん、これは、オブジェクトフォームを永続化する際に、永続化を指示するエンティティと永続化されるオブジェクトとの比較（ｉｓＰｒｏｔｏｔｙｐｅＯｆでの比較）が適正に行われるという前提のもとである。
ここまで説明したような構成をとることによって、特権の制御を、オブジェクトスペースのみから自律的に定まるようにできる。クラウドコンピューティングの進展によって、膨大な量のオブジェクトを永続化して利用することの物理的なフィージビリティは増大しており、課題となっているのは、単純に大量のオブジェクトを扱うことの困難から、それらをプライバシーやセキュリティなどの要件を満たして運用することの困難に軸足を移しており、前述の特許文献に記載の技術群はこれらの課題を解決することを企図している。
【００２５】
発明者は、前述したような問題意識のもとにプロトタイプを作成し、応用を試みてきた。その過程で以下に説明するような課題が明らかになってきた。
プロトタイプ継承を実現する実装環境としてジャバスクリプトを選択し、その上でプロトタイプを行ったが、永続化の対象とするオブジェクトはＪＳＯＮで表現可能な程度のプレインなオブジェクトのみだった。実際のジャバスクリプト実行環境におけるオブジェクトは、プレインなオブジェクトだけではない。
つまり、あるクラス（＝コンストラクタ）Ｘに帰属するインスタンスｏは、Ｘ．ｐｒｏｔｏｔｙｐｅの子であり、Ｘ．ｐｒｏｔｏｔｙｐｅには、そのクラスに共通するインスタンスメソッドを属性として持つことが普通である。
したがって、実際のシステムに適用する場合には、オブジェクトのセーブ・ロード時にアドホックなパース処理を差し挟む必要があり、この処理の追加が実現上のボトルネックとなってしまう。
このようなアドホックなパース処理を排除するためには、任意のジャバスクリプトオブジェクトをそのままのかたちで忠実に永続化できなければならない。
【００２６】
以下、本実施の形態を理解するために必要となるジャバスクリプトの値について説明する。なお、要点は、現代のジャバスクリプトにおいてはリフレクション機能が充実しているが、任意のジャバスクリプトオブジェクトの永続化まではできていない。特に、関数の永続化はできていない。
【００２７】
ジャバスクリプトの値には、プリミティブとオブジェクトの２つの種類がある。
プリミティブとは、
・数値
・文字列
・ブール値（つまり、ｔｒｕｅとｆａｌｓｅ）
・シンボル（例えば、Ｓｙｍｂｏｌ．ｔｏＳｔｒｉｎｇＴａｇとか）
・ｕｎｄｅｆｉｎｅｄ
・ｎｕｌｌ
である。
オブジェクトとは、文字列かシンボルをキー（属性名）として、任意の値をバリュー（属性値）とする、（あるいは、場合によっては、属性値の直接的な指定の代わりに、そのアクセサを指定することもできる、）コレクションであり、さらに、プロトタイプ（ここでの「プロトタイプ」という語は，関数オブジェクトのプロトタイプという名前の属性を指しているわけではなく，プロトタイプ継承における親のオブジェクトとしてのプロトタイプを指す）であるオブジェクトを指定することができる。なお、プロトタイプであるオブジェクトが無い場合もある。その場合には便宜上、そのオブジェクトのプロトタイプはｎｕｌｌである、ということにする。
プロトタイプと属性については、下記のような一連のアクセサがある。
Ｒｅｆｌｅｃｔ．ｇｅｔＰｒｏｔｏｔｙｐｅＯｆ（ｏ）
Ｒｅｆｌｅｃｔ．ｓｅｔＰｒｏｔｏｔｙｐｅＯｆ（ｏ，ｐｒｏｔｏ）
Ｒｅｆｌｅｃｔ．ｏｗｎＫｅｙｓ（ｏ）
Ｒｅｆｌｅｃｔ．ｇｅｔＯｗｎＰｒｏｐｅｒｔｙＤｅｓｃｒｉｐｔｏｒ（ｏ，ｋ）
Ｒｅｆｌｅｃｔ．ｄｅｆｉｎｅＰｒｏｐｅｒｔｙ（ｏ，ｋ，ｄｅｓｃ）
Ｒｅｆｌｅｃｔ．ｄｅｌｅｔｅＰｒｏｐｅｒｔｙ（ｏ，ｋ）
ここで、
・ｏは対象のオブジェクトである。
・ｐｒｏｔｏはプロトタイプとなるオブジェクトないしｎｕｌｌである。
・ｋは属性名である文字列かシンボルである。
・ｄｅｓｃは属性記述子であり、｛ｖａｌｕｅ，ｗｒｉｔａｂｌｅ，ｅｎｕｍｅｒａｂｌｅ，ｃｏｎｆｉｇｕｒａｂｌｅ｝という値型のものと｛ｇｅｔ，ｓｅｔ，ｅｎｕｍｅｒａｂｌｅ，ｃｏｎｆｉｇｕｒａｂｌｅ｝というアクセサ型のものとがある。
である。これらの公開されたアクセサを持つスロット（つまり、プロトタイプと属性）のみで構成されるオブジェクトは容易にコピーすること、つまり、永続化することができる。
【００２８】
一方、オブジェクトによっては公開されたアクセサを持たない内部的なスロットを持つ場合もある。具体的には、すぐ後に述べる関数やＷｅａｋＭａｐ  ＷｅａｋＳｅｔ等の弱いコレクションや非同期処理の抽象化に用いられるプロミスＰｒｏｍｉｓｅやターゲットオブジェクトとハンドラからメタオブジェクトを生成するプロキシーＰｒｏｘｙなどがある。
周知のように関数の本体は、
・実行時の挙動を規定する実装、コールスロットに対応
・コンストラクタとしてニュー演算子と共に呼び出される実装、コンストラクトスロットに対応
があり、これらの実体を保存のために取り出したり、保存された実体を利用するためにロードしたりする公開のアクセサがない。したがって、オブジェクトが関数である場合、そのままのかたちで忠実に永続化することは不可能にみえる。
関数には、
・Ｏｂｊｅｃｔのようなコンストラクタにもなる関数
・ｃｏｎｓｏｌｅ．ｌｏｇのようなコンストラクタにはならない関数
の種類がある。本実施の形態によって、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと異なるオブジェクトでありながら同等の機能を持つ永続化した関数オブジェクトとすることができる。つまり、本実施の形態によって、永続化対象のオブジェクトが関数である場合も、そのままのかたちで忠実に永続化できるようにする。
【００２９】
以下、図面に基づき本発明を実現するにあたっての好適な一実施の形態の例を説明する。
図１は、本実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア（コンピュータ・プログラム）、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、それらのモジュールとして機能させるためのコンピュータ・プログラム（コンピュータにそれぞれの手順を実行させるためのプログラム、コンピュータをそれぞれの手段として機能させるためのプログラム、コンピュータにそれぞれの機能を実現させるためのプログラム）、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するという意味である。また、モジュールは機能に一対一に対応していてもよいが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。なお、１つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続（データの授受、指示、データ間の参照関係、ログイン等）の場合にも用いる。「予め定められた」とは、対象としている処理の前に定まっていることをいい、本実施の形態による処理が始まる前はもちろんのこと、本実施の形態による処理が始まった後であっても、対象としている処理の前であれば、そのときの状況・状態にしたがって、又はそれまでの状況・状態にしたがって定まることの意を含めて用いる。「予め定められた値」が複数ある場合は、それぞれ異なった値であってもよいし、２以上の値（もちろんのことながら、全ての値も含む）が同じであってもよい。また、「Ａである場合、Ｂをする」という記載は、「Ａであるか否かを判断し、Ａであると判断した場合はＢをする」の意味で用いる。ただし、Ａであるか否かの判断が不要である場合を除く。また、「Ａ、Ｂ、Ｃ」等のように事物を列挙した場合は、断りがない限り例示列挙であり、その１つのみを選んでいる場合（例えば、Ａのみ）を含む。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク（一対一対応の通信接続を含む）等の通信手段で接続されて構成されるほか、１つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。もちろんのことながら、「システム」には、人為的な取り決めである社会的な「仕組み」（社会システム）にすぎないものは含まない。
また、各モジュールによる処理毎に又はモジュール内で複数の処理を行う場合はその処理毎に、対象となる情報を記憶装置から読み込み、その処理を行った後に、処理結果を記憶装置に書き出すものである。したがって、処理前の記憶装置からの読み込み、処理後の記憶装置への書き出しについては、説明を省略する場合がある。なお、ここでの記憶装置としては、ハードディスク、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、外部記憶媒体、通信回線を介した記憶装置、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）内のレジスタ等を含んでいてもよい。
【００３０】
本実施の形態である情報処理装置１００は、インポートされた関数オブジェクトについて、予め用意している関数オブジェクトと同等の機能を持つ永続化した関数オブジェクトとするものであって、図１の例に示すように、関数受付モジュール１１０、生成モジュール１２０、付与モジュール１３０、永続化モジュール１４０、ロードモジュール１５０を有している。
情報処理装置１００は、広範に利用されている実行環境（例えば、ＪａｖａＳｃｒｉｐｔ（登録商標））において、オブジェクトを忠実に永続化することを可能にし、アドホックなデータ構造の定式化やパース処理を不要にする。任意のオブジェクトを特定のパース処理を伴わずに永続化するには、メソッドまで含めた永続化が必要であり、情報処理装置１００は、その永続化を行っている。また、情報処理装置１００は、ＪａｖａＳｃｒｉｐｔの標準であるＥＣＭＡＳｃｒｉｐｔ（エクマスクリプト）の仕様に基づいて、関数の永続化を実現させている。つまり、情報処理装置１００は、実行環境にインポートされた関数オブジェクト（「与えられたオブジェクトセット」の一例）に対して、インスタンス化を行う。具体的には、ジャバスクリプトのプロキシー機構を用いて、インスタンス化すればよい。
【００３１】
なお、永続化とは、インスタンスの状態を保存することである。例えば、本実施の形態で対象とする関数の他に、ファイルやデータベース等、プログラム終了後もデータが失われないような場所へのデータ保存を指す。特に、本実施の形態での「永続化」とは、不揮発性の記憶手段に記憶させることであって、その実行環境において、予め用意している関数オブジェクトと同等に用いることができることをいう。
【００３２】
情報処理装置１００は、以下の処理を行う。
実行環境の外側に由来するインポートされた関数オブジェクト（「与えられたオブジェクトセット」の一例）、つまり、自分のものではない関数オブジェクトは、ジャバスクリプトのプロキシー機構でインスタンス化することで、自分のものである関数オブジェクトと同等の機能を持ちながら異なるオブジェクトにする。
永続化される若しくはされたオブジェクトはＩＤ（ＩＤｅｎｔｉｆｉｃａｔｉｏｎ）が振られている。このＩＤはオーナーが異なれば、同一の種類のオブジェクトであっても異なる。例えば、オーナーであるアリスのＯｂｊｅｃｔ．ｐｒｏｔｏｔｙｐｅと異なるオーナーであるボブのＯｂｊｅｃｔ．ｐｒｏｔｏｔｙｐｅは異なるＩＤを持つ。
利用される関数には、オーナーに依存しないインデックスが振られている。例えば、アリスのＯｂｊｅｃｔとボブのＯｂｊｅｃｔは異なるＩＤを持つが、同一のインデックスを持つ。インデックスの実現方法はバリエーションがありえるが、ここでは、オブジェクトの接続関係（プロトタイプチェーンないし属性として）を表現するスケルトンオブジェクトを用い、スケルトンオブジェクトのＩＤを対応するオブジェクトのインデックスとしてアサインする手法を想定する。
【００３３】
関数受付モジュール１１０は、与えられた関数を受け付ける。つまり、外部から関数をインポートする。
生成モジュール１２０（ｍａｋｅＳｋｅｌｅｔｏｎ）は、関数受付モジュール１１０によって受け付けられたオブジェクトセットから対応するスケルトン（ｓｋｅｌｅｔｏｎ）からなるオブジェクトセットを生成する。スケルトンとは、オブジェクトの接続関係を表現するオブジェクトである。また、オブジェクトの接続関係のみを表現するオブジェクトとしてもよい。
付与モジュール１３０（ａｓｓｉｇｎＳｋｅｌｅｔｏｎ）は、スケルトンに基づいてオブジェクトにインデックスを付与する。なお、「付与する」は、以下、アサインするともいう。
【００３４】
永続化モジュール１４０（ｃｏｍｍｉｔ）は、関数受付モジュール１１０によって受け付けられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する。
また、永続化モジュール１４０は、オブジェクトのプロトタイプと属性がオブジェクトの場合は、オブジェクトの識別子に置換するようにしてもよい。
さらに、永続化モジュール１４０は、オブジェクトが関数の場合は、そのインデックスも記録するようにしてもよい。
【００３５】
ロードモジュール１５０（ｆｅｔｃｈ）は、与えられたオブジェクト識別子のセットからロードが必要なオブジェクト識別子のセットを導出し、ロードする。
また、ロードモジュール１５０は、インスタンス化されるオブジェクトの種類が関数の場合は、記録されたインデックスからネイティブの関数を特定し、その関数のプロキシーとしてフォーリンな関数をインスタンス化するようにしてもよい。
【００３６】
図２は、本実施の形態を利用したシステム構成例を示す説明図である。
ユーザー端末２００Ａは、情報処理装置１００Ａを有している。ユーザー端末２００Ｂは、情報処理装置１００Ｂを有している。情報管理装置２５０は、情報処理装置１００Ｃを有している。ユーザー端末２００Ａ、ユーザー端末２００Ｂ、情報管理装置２５０は、通信回線２９０を介してそれぞれ接続されている。通信回線２９０は、無線、有線、これらの組み合わせであってもよく、例えば、通信インフラとしてのインターネット、イントラネット等であってもよい。また、情報処理装置１００による機能は、クラウドサービスとして実現してもよい。
例えば、ユーザー端末２００Ａは、情報管理装置２５０又はユーザー端末２００Ｂから、関数オブジェクトをインポートする。そして、情報処理装置１００Ａによって、その関数オブジェクトをユーザー端末２００Ａ内で永続化して、利用できるようにする。
【００３７】
図３は、本実施の形態による処理例を示すフローチャートである。
ステップＳ３０２では、関数受付モジュール１１０は、オブジェクトセットを受け付ける。
ステップＳ３０４では、生成モジュール１２０は、スケルトンからなるオブジェクトセットを生成する。具体的には、ｍａｋｅＳｋｅｌｅｔｏｎとして、与えられたオブジェクトセット（ステップＳ３０２で受け付けたオブジェクトセット）から対応するスケルトンからなるオブジェクトセットを生成する。
【００３８】
ステップＳ３０６では、付与モジュール１３０は、オブジェクトにインデックスをアサインする。具体的には、ａｓｓｉｇｎＳｋｅｌｅｔｏｎとして、スケルトンに基づいてオブジェクトにインデックスをアサインする。
ステップＳ３０８では、永続化モジュール１４０は、永続化が必要なオブジェクトセットを導出し、永続化する。具体的には、ｃｏｍｍｉｔとして、与えられたオブジェクトセットから永続化が必要なオブジェクトセットを導出し、永続化する。オブジェクトのプロトタイプと属性は、それらが（プリミティブではなく）オブジェクトならばオブジェクトのＩＤに置換する。オブジェクトが関数の場合は、そのインデックスも記録する。
この後、図４の例に示す処理が行われる。
【００３９】
図４は、本実施の形態（ロードモジュール１５０）による処理例を示すフローチャートである。ｆｅｔｃｈとして、以下の処理を行う。
ステップＳ４０２では、オブジェクトＩＤのセットを受け付ける。
ステップＳ４０４では、ロードが必要なオブジェクトＩＤのセットを導出する。具体的には、与えられたオブジェクトＩＤのセットからロードが必要なオブジェクトＩＤのセットを導出する。
ステップＳ４０６では、ロードモジュール１５０は、そのオブジェクトＩＤのセットをロードする。具体的には、ステップＳ４０４で導出したセットをロードする。インスタンス化されるオブジェクトの種類が関数の場合は、記録されたインデックスからネイティブの関数を特定し、その関数のプロキシーとしてフォーリンな関数をインスタンス化する。
【００４０】
情報処理装置１００が処理を行うにあたって必要となるデータ構造例を示す。
図５は、ｏ２ｉテーブル５００のデータ構造例を示す説明図である。
ｏ２ｉテーブル５００は、オブジェクト欄５１０、インデックス欄５２０を有している。オブジェクト欄５１０は、オブジェクトを記憶している。インデックス欄５２０は、インデックスを記憶している。つまり、ｏ２ｉとして、オブジェクトとインデックスの対応を保持するマップである。例えば、ｏ２ｉ．ｇｅｔ（ｏ）でオブジェクトｏに対応するインデックスｉを取り出せることになる。
【００４１】
図６は、ｉ２ｏテーブル６００のデータ構造例を示す説明図である。
ｉ２ｏテーブル６００は、インデックス欄６１０、オブジェクト欄６２０を有している。インデックス欄６１０は、インデックスを記憶している。オブジェクト欄６２０は、オブジェクトを記憶している。つまり、ｉ２ｏとして、インデックスとオブジェクトの対応を保持するマップである。例えば、ｉ２ｏ．ｇｅｔ（ｉ）でインデックスｉに対応するオブジェクトｏを取り出せる。
【００４２】
図７は、ｏ２ｉｄテーブル７００のデータ構造例を示す説明図である。
ｏ２ｉｄテーブル７００は、オブジェクト欄７１０、ＩＤ欄７２０を有している。オブジェクト欄７１０は、オブジェクトを記憶している。ＩＤ欄７２０は、ＩＤを記憶している。つまり、ｏ２ｉｄとして、オブジェクトとＩＤの対応を保持するマップである。
【００４３】
図８は、ｉｄ２ｏテーブル８００のデータ構造例を示す説明図である。
ｉｄ２ｏテーブル８００は、ＩＤ欄８１０、オブジェクト欄８２０を有している。ＩＤ欄８１０は、ＩＤを記憶している。オブジェクト欄８２０は、オブジェクトを記憶している。つまり、ｉｄ２ｏとして、ＩＤとオブジェクトの対応を保持するマップである。
【００４４】
図９は、ｉ２ｉｄテーブル９００のデータ構造例を示す説明図である。
ｉ２ｉｄテーブル９００は、インデックス欄９１０、ＩＤ欄９２０を有している。インデックス欄９１０は、インデックスを記憶している。ＩＤ欄９２０は、ＩＤを記憶している。つまり、ｉ２ｉｄとして、その環境で永続化したインデックス付きのオブジェクトに対するインデックスとＩＤの対応を保持するマップである。
【００４５】
＜スケルトンの準備＞
永続化の対象が含む関数にインデックスを付与するために、それらを含むオブジェクトのスケルトンを生成し、コミットする。
例えば、必要なライブラリがロードされた後のｇｌｏｂａｌを引数にしてそのスケルトンを生成すればよい。
コミットしたことで，このスケルトンにはＩＤが付与されている。
このスケルトンの準備はパッケージ生成に対応しており、一度だけ行えばよい。
【００４６】
＜スケルトンのフェッチとインデックスアサイン＞
前述のスケルトンのＩＤを用いてスケルトンをフェッチし、そのスケルトンを使って、実行環境上のオブジェクトにインデックスを付与する。つまり、ｏ２ｉとｉ２ｏをセットする。
【００４７】
＜実行環境の復帰＞
ｉ２ｉｄに基づいて、その環境で永続化したインデックス付きのオブジェクトのＩＤを回復する。つまり、ｏ２ｉｄとｉｄ２ｏをセットする。
【００４８】
＜コミット＞
オブジェクトの永続化フォームは、以下の通りである。
｛ｐ，ｄ，ｉ，ｂ，ｆ｝
・ｐは、オブジェクトのプロトタイプのＩＤである。プロトタイプがｎｕｌｌの場合はこの属性は無い。
・ｄは、オブジェクトの属性記述子達である。属性リストがからの場合、つまり、Ｒｅｆｌｅｃｔ．ｏｗｎＫｅｙｓ（ｏｂｊ）が［］の場合は、この属性は無い。
・ｉは、オブジェクトにインデックスが付与されている場合のインデックスである。インデックスが付与されていない場合は、この属性は無い。
・ｆは、オブジェクトが関数の場合は真（ｔｒｕｅ）である。オブジェクトが関数でない場合は、この属性は無い。
・ｂは、オブジェクトが型付配列やＡｒｒａｙＢｕｆｆｅｒ等のバイトアレイに由来するデータ型の場合の対応するバイトアレイである。そのようなデータ型でない場合は、この属性は無い。
ここで、ｄの属性記述子達のｖａｌｕｅ属性がプリミティブではなくオブジェクトである場合やｇｅｔ属性、ｓｅｔ属性が関数である場合、これらのオブジェクトは｛ｉｄ｝という形式のＩＤによる参照に置換される。具体的に例示すれば、
｛ｉｄ：’１ｂｅ３５ｄｃ０ｄ７９７ｆ７２ａｆ４５ｂ０４ａ５ａ２４ｄｆ４ｆａ６３６ｅ０３２ｅ６７ａ７９８ｄ９４０６０ａ４６ｆ７２７ｅ５ｂ４８’｝
のようになる。また、ｂの値は、永続化フォームではハッシュ値に置換され、永続化フォーム自体は、ＪＳＯＮの範疇には入らないが、容易にバイトアレイにエンコード可能であり、以下のように、キーバリューストアに永続化する。
｛ｋ，ｅ｝／／ｋ：オブジェクトＩＤ、ｅ：オブジェクトの永続化フォームのハッシュ値
｛ｋ，ｌ，ｂ｝／／ｋ：ハッシュ値、ｌ：対応するコンテンツのバイト長、ｂ：対応するコンテントのバイトアレイ
・ｋ，ｅは、長さ６４の１６進文字列である。
・ｌは、整数である。
・ｂは、バイトアレイである。
【００４９】
＜フェッチ＞
オブジェクトＩＤで、キーバリューストアから永続化フォームのハッシュ値を取り出し、ハッシュ値で、キーバリューストアから永続化フォーム自体を取り出す。
オブジェクトＩＤでｉｄ２ｏをルックアップし、オブジェクトが既に存在していれば、永続化フォームにしたがって、オブジェクトを更新する。オブジェクトが存在しない場合は、オブジェクトをインスタンス化し、ｏ２ｉｄ、ｉｄ２ｏにオブジェクトＩＤと紐付けて記録する。オブジェクトのインスタンス化にあたっては、
・永続化フォームに属性ｆがある場合、つまり、関数の場合
・永続化フォームに属性ｂがある場合、つまり、データの場合
・その他の場合に分けて生成する。
【００５０】
関数の場合、必ず属性ｉがあり、その値はインデックスである。ｉ２ｏ．ｇｅｔ（ｉ）で対応するネイティブ関数をｔａｒｇｅｔとして、以下のようなプロキシーを生成する。
−−−−−  −−−−−  −−−−−
ｎｅｗ  Ｐｒｏｘｙ（
ｆｕｎｃｔｉｏｎ  （）｛｝，  ｛
ａｐｐｌｙ（ｔａｒｇｅｔ，  ｔｈａｔ，  ａｒｇｓ）  ｛
ｒｅｔｕｒｎ  ａｐｐｌｙ（ｏ，  ｔｈａｔ，  ａｒｇｓ）
｝，
ｃｏｎｓｔｒｕｃｔ（ｔａｒｇｅｔ，  ａｒｇｓ，  ｎｅｗＴａｒｇｅｔ）  ｛
ｒｅｔｕｒｎ  ｃｏｎｓｔｒｕｃｔ（ｏ，  ａｒｇｓ，  ｎｅｗＴａｒｇｅｔ）
｝
｝
）
−−−−−  −−−−−  −−−−−
【００５１】
データの場合、対応するコンストラクタとバイトアレイｂよりデータオブジェクトを生成する。
その他の場合、対応するコンストラクタから引数なしでオブジェクトを生成する。例外がスローされた場合は、Ｏｂｊｅｃｔ．ｃｒｅａｔｅ（ｎｕｌｌ）としてオブジェクトを生成する。
上記のいずれの場合（関数の場合、データの場合、その他の場合）でもインスタンス化の後に、
・プロトタイプのセット
・デスクリプタによる属性のセット
を行う。
【００５２】
なお、本実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、図１０に例示するように、一般的なコンピュータであり、具体的にはパーソナルコンピュータ、サーバーとなり得るコンピュータ等である。つまり、具体例として、処理部（演算部）としてＣＰＵ１００１を用い、記憶装置としてＲＡＭ１００２、ＲＯＭ１００３、ＨＤ１００４を用いている。ＨＤ１００４として、例えばハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を用いてもよい。関数受付モジュール１１０、生成モジュール１２０、付与モジュール１３０、永続化モジュール１４０、ロードモジュール１５０等のプログラムを実行するＣＰＵ１００１と、そのプログラムやデータを記憶するＲＡＭ１００２と、本コンピュータを起動するためのプログラム等が格納されているＲＯＭ１００３と、ｏ２ｉテーブル５００、ｉ２ｏテーブル６００、ｏ２ｉｄテーブル７００、ｉｄ２ｏテーブル８００、ｉ２ｉｄテーブル９００、オブジェクト等を記憶する補助記憶装置（フラッシュ・メモリ等であってもよい）であるＨＤ１００４と、キーボード、マウス、タッチスクリーン、マイク、カメラ（視線検知カメラ等を含む）等に対する利用者の操作（動作、音声、視線等を含む）に基づいてデータを受け付ける受付装置１００６と、ＣＲＴ、液晶ディスプレイ、スピーカー等の出力装置１００５と、ネットワークインタフェースカード等の通信ネットワークと接続するための通信回線インタフェース１００７、そして、それらをつないでデータのやりとりをするためのバス１００８により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
【００５３】
前述の実施の形態のうち、コンピュータ・プログラムによるものについては、本ハードウェア構成のシステムにソフトウェアであるコンピュータ・プログラムを読み込ませ、ソフトウェアとハードウェア資源とが協働して、前述の実施の形態が実現される。
なお、図１０に示すハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図１０に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えば特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）等）で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続している形態でもよく、さらに図１０に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、携帯情報通信機器（携帯電話、スマートフォン、モバイル機器、ウェアラブルコンピュータ等を含む）、情報家電、ロボット、複写機、ファックス、スキャナ、プリンタ、複合機（スキャナ、プリンタ、複写機、ファックス等のいずれか２つ以上の機能を有している画像処理装置）などに組み込まれていてもよい。
【００５４】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通等のために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読み出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、ブルーレイ・ディスク（Ｂｌｕ−ｒａｙ（登録商標）  Ｄｉｓｃ）、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読み出し専用メモリ（ＲＯＭ）、電気的消去及び書換可能な読み出し専用メモリ（ＥＥＰＲＯＭ（登録商標））、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）、ＳＤ（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリーカード等が含まれる。
そして、前記のプログラムの全体又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、又は無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分若しくは全部であってもよく、又は別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化等、復元可能であればどのような態様で記録されていてもよい。
【符号の説明】
【００５５】
１００…情報処理装置
１１０…関数受付モジュール
１２０…生成モジュール
１３０…付与モジュール
１４０…永続化モジュール
１５０…ロードモジュール
２００…ユーザー端末
２５０…情報管理装置
２９０…通信回線
【図１】
2019160101.tif 000003
【図２】
2019160101.tif 000004
【図３】
2019160101.tif 000005
【図４】
2019160101.tif 000006
【図５】
2019160101.tif 000007
【図６】
2019160101.tif 000008
【図７】
2019160101.tif 000009
【図８】
2019160101.tif 000010
【図９】
2019160101.tif 000011
【図１０】
2019160101.tif 000012