• 検索結果がありません。

Science Journal of Kanagawa University 20(2): (2009) 総説 ( 永松礼夫研究室 ) 動的なソフトウェアの更新についての研究動向 永松礼夫 Research Overview of Dynamic Software Updating

N/A
N/A
Protected

Academic year: 2021

シェア "Science Journal of Kanagawa University 20(2): (2009) 総説 ( 永松礼夫研究室 ) 動的なソフトウェアの更新についての研究動向 永松礼夫 Research Overview of Dynamic Software Updating"

Copied!
5
0
0

読み込み中.... (全文を見る)

全文

(1)

KANAGAWA University Repository \n

Title

動的なソフトウェアの更新についての研究動向

Author(s)

永松, 礼夫; Nagamatsu, Leo

Citation

Science Journal of Kanagawa University, 20(02):

133-136

Date

2009-10-20

Type

Departmental Bulletin Paper

(2)

©Research Institute for Integrated Science, Kanagawa University ■総 説(永松礼夫研究室)■

はじめに

現代の情報システムでは、24 時間連続してサービス をするためにシステム停止が許されない状況であり ながら、新サービスの追加や新たに見つかった問題 の修復のためシステムを迅速に変更できることも要 求される。動的更新とは、このような場合に稼動中 のシステムを止めず(動いたままで)ソフトウエア の一部を変更する技術を総称する。  当然、進行中のトランズアクション処理(取引デ ータなど)についての整合性は保証されなければな らないので、一般には、更新を行なうタイミングや 交換される機能の範囲についての制限を設けたり、 交換されたソフトウエア部品について、一時的に更 新前と更新後のものを併行運用したりして、問題が 生じないような工夫を行なう必要がある。  本稿では、これらの動的更新に関連する研究につ いて概要を述べる。

1.動的な更新

進化するプログラム コンピュータ科学の長年の夢として「ひとつのプロ グラム(情報システム)が実行を続けながら、環境 に順応して新たな機能を獲得するなどの進化ができ

Abstract:

In recent computer and information systems, providing a non-stop service is

im-portant, as well as rapid system updating for bug-fixing and advanced services. In this report, we discuss the outline of dynamic updating methods, which can support both continuous service availability and system module replacement in a limited way. In our laboratory, various ap-proaches using popular script language (JavaScript) and HTML-based functional WEB pages with dynamic addition and deletion of functions in a programming language framework, are discussed. In this area, many difficulties arise from browser incompatibility, unexpected requests to change the specification of function and limited name space issues of baseline programming language.

Keywords: computer system, dynamic updating, prgamming interface, JavaScript, unexpected

change

動的なソフトウェアの更新についての研究動向

永松礼夫

1,2

Research Overview of Dynamic Software Updating Methods

Leo Nagamatsu

1,2

1 Department of Information Sciences, Faculty of Science, Kanagawa University, Hiratsuka-City,

Kanagawa 259-1293, Japan

2 To whom correspondence should be addressed. E-mail: [email protected]

るか」という問題が何度も問われて来た。また、そ の前段階として、「子供を産むプログラム」あるいは 「あるプログラムを実行した出力がそのプログラム自 身である」ような、自己再生プログラム1)について も関心が払われてきた。  スクリプト言語はコンパイラを介さないため、実 行結果として出力された文字列をそのまま次の世代 のプログラムとして使える利点がある。HTML ペー ジとJavaScript2)の組合わせは、画面遷移を伴わな い閉じた世界の中で、自分を書き換えて次の世代の プログラムに置き換える例が作りやすく、研究者の 対象としても魅力的であった。金田の研究3)によっ て、基本的な自己再生の方法や、一部を変化させる バリエーションが報告されている。 プログラムの部品交換 ハードウェアの世界ではFPGA が一般に普及して いる。ソフトウエアについても自動アップデートと いった例はあるが、システムの再起動や、関連する プログラムの停止が必要なものが多い。  それらを排して、実行中のプログラムの一部を部 品交換する場合に、交換単位を一つの関数として実

(3)

134 Science Journal of Kanagawa University Vol. 20(2) 装する方法の確立や、その際の制限条件の明確化が 最初のテーマであった。  山本と谷口らの研究4)では、関数が入れ子になっ て呼び出されている状況を想定し、現在直接実行さ れているか、それを間接的に呼び出している最中の 関数は交換できないという仮定の元で、関数が交換 可能になるのを待つために、実行状態を把握するこ とや、交換に関する条件を緩和して交換の機会を増 やす方法が研究された。佐々木の研究5)では、OS が通常備えているダイナミック・リンク・ライブラ リの関数管理テーブルの機能を利用し、簡便に動的 な関数定義の変更を実装している。 交換機能の OS サポート OS の機能に内包するように部品交換の機能を組み 込んだ「彩OS」6)の研究がある。それと同時に新旧 のソフトウエア部品の違いとして、関数の引数の個 数や、引数の型が変更になる場合を考えて、整合性 を保つためのインタフェース・モジュールが導入さ れた。そこで判明したのは互換性や整合性の管理の 重要さである。インタフェース・モジュールの構成 について研究7)も行った。

2.構造の整合を維持した変更

構造化文書 ワープロ文書でも、ソフトウエア全体でも、大きな 構造をもつデータを構造化文書として捉える考え方 がある。  この考え方を一般化して表示を作り出す元になる 内部表現による記述をソースと呼び、ユーザに見え る画面や出力される文書をビューと呼ぶ。例えば、 タグや別ファイルにある画像やスタイルの情報を含 んだHTML ファイルはソースであり、それをブラ ウザで表示させた結果がビューである。  設計データと製品であれば、仕様変更や検討の対 象になるのがソースであり、利用者が目にするもの がビューである。利用者から見た改良提案を取り込 むため、ビューの「この場所」に対応するソースの 特定が必要になる。 双方向変換  GUI を用いた編集では多少なりとも文章の背後 にある構造を考えている。柔軟な情報表現の操作の ためには、ソースとビューを双方向的に関連付け、 片方で行われた更新の結果を他方にフィードバック する技術が重要である。つまり、目次を変更すれば 本文の対応箇所がすぐに変更され、逆に本文を変更 すれば目次の対応箇所がすぐに変更されるような機 能が望まれる。ただし、一般にはソースからビュー への変換はレンダリングとして定義されてるが、逆 変換は必ずしも定義されていない。ビュー側での指 示に基づいた編集を行うためには、数学的手法を用 いるなどして逆変換を定義するか、保存して置いた ソースとの差分から対応付けて、実用的に許容でき るような逆変換を提供するなどの方法がある。  武市による研究8)では、XML を用いて文書構造 を規定することで、逆変換を言語ツールとして実装 している。 Wiki 似たようなビューとソースを行き来する機能を持つ シンプルな例としてwiki がある。平成 18 年度は wiki や類似のシステムを対象にソースとビューの 操作について検討した。ある月のカレンダーと日々 の予定表が連動する例をとりあげた研究10)では、 双方向変換を簡便に実現するために、ユーザが編集 モードで入力したソースに相当する情報を、ビュー と同時に保存しておき、あとで再編集する際には保 存されたソースを再利用することで、記憶するファ イルのデータは多くなるが、再計算が不要になるこ とを確かめた。この考えに基づいて、商品のカタロ グのような定型的な文書の生成を簡便に行なう方法 についても研究9)した。

3.JavaScript による機能追加

外部ファイル上のスクリプト HTML ファイルに Web ページを記述する場合に、 そこで用いられるスクリプトを別ファイルに分けて 記述することができる。このような本体のHTML 以外にあるスクリプトをまとめたファイルを「外 部JS ファイル」と呼ぶ。静的に最初から読み込 んでおく場合は、ファイル名をextfile.js として、 <script language="JavaScript" src="extfile. js"> い う タ グ を 記 述 す れ ば よ い。 こ の 操 作 を DOM の機能を用いて動的に行うには、

var n = document.createElement(“ script”); n.setAttribute( “ type”, “ text/javascript”); n.setAttribute( “ src”, “ extfile.js”); document.getElementsByTagName(“ head”)[0].     appendChild( n ); のようなスクリプトを記述し、実行によりDOM 構 造の一部として組み込まれる。appendChild が実 行された時点で外部JS ファイルの読み込みと解釈 が行われ、それがスクリプトから新たな関数や変数 の定義として利用可能になる。 ただし、この処理は場合によっては時間がかかる

(4)

た め、 外 部JS ファイル側で記述された関数は、 appndChild の実行直後は未定義で、しばらく後に 定義済みになる状況が観測される。従って、外部 JS ファイルを動的に結合する場合には、タイマー 等を用いて関数が定義済みになるのを待ってからそ れを利用する処理が必要なことがある。 名前が後で決定可能なこと さて、後からのプログラム修正のために動的変更を 重ねるWeb ページの場合、主旨からして、最初の プログラムが稼働した後で判明した修正を実装する ために外部JS ファイルを後から作るのが一般的で ある。その際に追加対象となる関数名やファイル名 は前もって予想することはできない。  そこで、「最小の予備知識」とすることを考える。 これは、将来行われる変更について予想ができない ので、それを妨げるような前提をなるべく排除して システムを設計しておくことである。例えば、新規 に追加される関数の名前が事前に決められている実 装よりも、パラメータとして任意の名前を後から指 定できる実装のほうが、より予備知識や前提の縛り がないといえる。 クロージャの利用 JavaScript の特徴として、名前のない関数の実体 を無名関数として定義し、変数などに代入できる。 平成19 年度の卒業研究では、クロージャと呼ばれ る関数インスタンスをオブジェクトとして保存する 方法を用いることで、特定の名前のグローバル変数 を使わなくても、タイマーで起動される処理のパラ メータを保存することができる。  これを応用して、状態が準備完了(typeof の値が function になって、関数として使えるよう)にな ったことを一定時間ごとに確認するようなルーチン を、外部JS ファイルの名前を後から与えられるよ うな汎用の部品として実装することを実現11)した。 並列実行の管理 JavaScript ではイベント駆動による割り込み処理 が基本であり、Ajax12)のような非同期の並行処理 の導入はやや後付けの感がある。そのため、スレッ ドやプロセスのモデルに馴染んだプログラマには 取り付きにくい面もある。牧と岩崎らの研究13)は、 並列処理を支援する枠組みを実装する試みである。  JavaScript のコミュニティではいろいろのライ ブラリによる拡張がされて言語の機能を補っている ことも魅力である。 現実の問題との対応 現実の世界で使われるアプリケーションを具体的に 想定して、動的更新の立場からの単位となるそれぞ れの機能要素が実行される状況や更新される状況が どのように干渉し得るかについての考察した。例え ば銀行の現金預払い端末が対象なら預金引出しのト ランズアクションという通常業務と、振込め詐欺対 策として一定額以上の送金をチェックする機能を追 加する更新作業との兼ね合いについてである。  また、人間がすこし考えた後に何か手を打つよう なゲーム(数独やオセロ)を対象に、人間をサポー トする「ヒント表示機能」を一つのゲームの進行中 に追加する状況を想定して、学部生でも興味を持て る題材を設定した研究14)を行っている。

4.ブラウザの違いによる問題点

Microsoft Internet Explorer (IE) とそれ以外のブ ラウザ(Firefox や google chrome)で挙動が違う ことが多い。 外部 JS ファイルのロード処理 外 部JS ファイルを動的に読み込みをした後に 外 部JS フ ァ イ ル 内 で 定 義 さ れ た 関 数 や 変 数 がundefined の 状 態 が 観 測 さ れ る。(firefox や chrome ではローカルファイルでも常に、IE では別 サーバ上にある場合のみ起きる) これを解決する ため前述のクロージャを用いた方法を研究した。 状態が unknown となる問題 これはIE のみで発生する現象である。オブジェク トの状態(typeof の値 ) が unknown となり、以後 は一切の操作を受け付けなくなる。参照や代入を試 みるとout of memory のダイアログの出るエラー となる。内部的に無効なポインタになってしまった ように見える。  最初は、外部JS ファイルの利用と関連して起こ ると思われたが、そうでない場合でも特定の操作(後 述)で起きることが判明した。一度unknown にな った変数をリセットする方法は未解明である。 変数スコープが乱れる問題 グローバルやローカル変数の区別のように、変数が どのブロックの文から参照できるかをスコープとい う。JavaScript でのスコープはグローバルとロー カルの二種類のみのはずである。  さて、あるform の中のボタンをクリックしたと き、変数x に 1 を代入する操作は、ボタン内のス クリプト(onclock= 以降の引用符の中)を使って

(5)

136 Science Journal of Kanagawa University Vol. 20(2)

文献

1) 永松礼夫,江坂直紀,中山泰一 (1997) プログラム作 成過程の個性 ─自己印刷問題を例として.情報処理 学会夏のプログラミングシンポジウム論文集 pp.95-104.

2) European Computer Manufacturers Association (2000) ECMAScript Language Specification. http://

www.ecma.ch/ecma1/STAND/ECMA-262.HTM 3rd edition. 3) 金 田  泰 (1997) Web ペ ー ジ を 自 己 再 生 産 す る JavaScript プログラム.夏のプログラミング・シンポ ジウム,情報処理学会.pp.105-112. 4) 山本 淳,谷口秀夫 (2005) 動的リンク機能を利用し た実行中プログラムの部分入替えにおけるプログラム 状態把握法.電子情報通信学会論文誌(D-I) J88DI: 800-812.

5) Sasaki H and Nagamatsu L (2003) An evaluation of runtime software updating models: on waiting time for exchangeable state. In: Proc. of HC2003

confer-ence. pp.111-116. 6) 小林良岳,佐藤友隆,唐野雅樹,結城理憲,前川 守 (2001) 彩 : コンパイル時に自動生成される Portal をも とに動的再構成可能なオペレーティングシステム.電 子情報通信学会論文誌 J84D1: 605-616. 7) 木島恭平 (2007) ソフトウエアの動的再構成.神奈川 大学理学部情報科学科平成18 年度卒業論文. 8) 武市正人 (2008) 双方向変換による高信頼構造化文書 処理-高い生産性を持つ高信頼ソフトウェア作成技術 の開発.情報処理 49: 1265-1270. 9) 前田佑貴,篠原 亮 (2008) 構造化文書の側面に着目 したパンフレット作成システム.神奈川大学理学部情 報科学科平成19 年度卒業論文. 10) 田口晴希 (2008) 構造化文書の側面に着目したスケジュ ール帳の設計.神奈川大学理学部情報科学科平成19 年度卒業論文. 11) 湯川貴之 (2009) Web ページ機能の動的な更新-外部 スクリプト追加時のタイミング管理-.神奈川大学理 学部情報科学科平成20 年度卒業論文.

12) Garrett JJ (2005) Ajax - A new approach to web ap-plications, http://www.adaptivepath.com/publica-tions/essays/archives/000385.php 13) 牧  大 介, 岩 崎 英 哉 (2007) 非 同 期 処 理 の た め の JavaScript マルチスレッドフレームワーク.情報処理 学会論文誌,プログラミング 48 SIG_12 PRO_34: 1-18. 14) 豊留 賢 (2009) Web ページの機能の動的な変更 ─ブ ラウザによるHEAD 構造の違い─.神奈川大学理学 部情報科学科平成20 年度卒業論文.

<input type=button onclick=”x=1;”>

と直接記述する方法(『ボタン内』と呼ぶ)がある。  また同じ変数x に 1 を代入する操作を、ボタン 内では

<input type=button onclick=”setXone()”> と関数を呼び出すだけにし、呼ばれた関数で function setXone(){ x=1; } と書く方法(『関数内』と呼ぶ)の二通りが考えら れる。  この二つが同等でなく、結果(変数x の状態や値) が参照する場所で異なることがIE のみで起きる。 ボタン内の代入結果は、他のボタン内からは観測・ 操作できるが、関数内からはできない。とくに、ボ タン内で定義した変数を、関数内からdelete すると 状態(typeof の値)が unknown となってしまう。  推測ではあるが、onclick もイベントハンドラの一 種と考えられ、IE ではイベント関連の実装が他のブ ラウザと異なった箇所があるのでその影響と思われ るが、詳細は解明されていない。  いろいろの差異はあるが、よく知られた現象や、 よく使われる手順についてはブラウザの差異を吸収 して同じインタフェースで機能を提供する目的で prototype.js のようなライブラリが存在する。

おわりに

こ の よ う に、IE とそれ以外の Firefox や chrome での挙動が違うなどブラウザの実装による差異や、 innerHTML のような利便性のために複数の表現を 許した実装でのあいまい性による問題点はあるもの の、HTML と JavaScript によって Web ページに より多くの機能を持たせたり、それをダイナミック に連動したり変更する技術は、さらに多くの可能性 を持っており、今後のさらなる発展が期待できる技 術分野である。

謝辞

関連研究や議論に協力いただいた永松研究室のゼミ 生ならびに卒研生各位に感謝する。

参照

関連したドキュメント

突然そのようなところに現れたことに驚いたので す。しかも、密教儀礼であればマンダラ制作儀礼

 本研究所は、いくつかの出版活動を行っている。「Publications of RIMS」

の知的財産権について、本書により、明示、黙示、禁反言、またはその他によるかを問わず、いかな るライセンスも付与されないものとします。Samsung は、当該製品に関する

遮音壁の色については工夫する余地 があると思うが、一般的な工業製品

大村 その場合に、なぜ成り立たなくなったのか ということ、つまりあの図式でいうと基本的には S1 という 場

○杉山座長 ありがとうございました。.