\n Title 動 的 なソフトウェアの 更 新 についての 研 究 動 向 Author(s) 永 松, 礼 夫 ; Nagamatsu, Leo Science Journal of Kanagawa Univer Citation 133-136 Date 2009-10-20 Type Departmental Bulletin Paper Rights publisher KANAGAWA University Repository
Science Journal of Kanagawa University 20(2): 133-136 (2009) 総 説 ( 永 松 礼 夫 研 究 室 ) 動 的 なソフトウェアの 更 新 についての 研 究 動 向 永 松 礼 夫 Research Overview of Dynamic Software Updating Methods 1,2 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: lnag@kanagawa-u.ac.jp Abstract: In recent computer and information systems, providing a non-stop service is important, 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 approaches 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 はじめに 現 代 の 情 報 システムでは 24 時 間 連 続 してサービス をするためにシステム 停 止 が 許 されない 状 況 であり ながら 新 サービスの 追 加 や 新 たに 見 つかった 問 題 の 修 復 のためシステムを 迅 速 に 変 更 できることも 要 求 される 動 的 更 新 とは このような 場 合 に 稼 動 中 のシステムを 止 めず( 動 いたままで)ソフトウエア の 一 部 を 変 更 する 技 術 を 総 称 する 当 然 進 行 中 のトランズアクション 処 理 ( 取 引 デ ータなど)についての 整 合 性 は 保 証 されなければな らないので 一 般 には 更 新 を 行 なうタイミングや 交 換 される 機 能 の 範 囲 についての 制 限 を 設 けたり 交 換 されたソフトウエア 部 品 について 一 時 的 に 更 新 前 と 更 新 後 のものを 併 行 運 用 したりして 問 題 が 生 じないような 工 夫 を 行 なう 必 要 がある 本 稿 では これらの 動 的 更 新 に 関 連 する 研 究 につ いて 概 要 を 述 べる 1. 動 的 な 更 新 進 化 するプログラム コンピュータ 科 学 の 長 年 の 夢 として ひとつのプロ グラム( 情 報 システム)が 実 行 を 続 けながら 環 境 に 順 応 して 新 たな 機 能 を 獲 得 するなどの 進 化 ができ るか という 問 題 が 何 度 も 問 われて 来 た また そ の 前 段 階 として 子 供 を 産 むプログラム あるいは あるプログラムを 実 行 した 出 力 がそのプログラム 自 身 である ような 自 己 再 生 プログラム 1) について も 関 心 が 払 われてきた スクリプト 言 語 はコンパイラを 介 さないため 実 行 結 果 として 出 力 された 文 字 列 をそのまま 次 の 世 代 のプログラムとして 使 える 利 点 がある HTML ペー ジと JavaScript 2) の 組 合 わせは 画 面 遷 移 を 伴 わな い 閉 じた 世 界 の 中 で 自 分 を 書 き 換 えて 次 の 世 代 の プログラムに 置 き 換 える 例 が 作 りやすく 研 究 者 の 対 象 としても 魅 力 的 であった 金 田 の 研 究 3) によっ て 基 本 的 な 自 己 再 生 の 方 法 や 一 部 を 変 化 させる バリエーションが 報 告 されている プログラムの 部 品 交 換 ハードウェアの 世 界 では FPGA が 一 般 に 普 及 して いる ソフトウエアについても 自 動 アップデートと いった 例 はあるが システムの 再 起 動 や 関 連 する プログラムの 停 止 が 必 要 なものが 多 い それらを 排 して 実 行 中 のプログラムの 一 部 を 部 品 交 換 する 場 合 に 交 換 単 位 を 一 つの 関 数 として 実 Research Institute for Integrated Science, Kanagawa University
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 ファイルの 読 み 込 みと 解 釈 が 行 われ それがスクリプトから 新 たな 関 数 や 変 数 の 定 義 として 利 用 可 能 になる ただし この 処 理 は 場 合 によっては 時 間 がかかる
永 松 礼 夫 : 動 的 なソフトウェアの 更 新 についての 研 究 動 向 135 ため 外 部 JS ファイル 側 で 記 述 された 関 数 は appndchild の 実 行 直 後 は 未 定 義 で しばらく 後 に 定 義 済 みになる 状 況 が 観 測 される 従 って 外 部 JS ファイルを 動 的 に 結 合 する 場 合 には タイマー 等 を 用 いて 関 数 が 定 義 済 みになるのを 待 ってからそ れを 利 用 する 処 理 が 必 要 なことがある 名 前 が 後 で 決 定 可 能 なこと さて 後 からのプログラム 修 正 のために 動 的 変 更 を 重 ねる Web ページの 場 合 主 旨 からして 最 初 の プログラムが 稼 働 した 後 で 判 明 した 修 正 を 実 装 する ために 外 部 JS ファイルを 後 から 作 るのが 一 般 的 で ある その 際 に 追 加 対 象 となる 関 数 名 やファイル 名 は 前 もって 予 想 することはできない そこで 最 小 の 予 備 知 識 とすることを 考 える これは 将 来 行 われる 変 更 について 予 想 ができない ので それを 妨 げるような 前 提 をなるべく 排 除 して システムを 設 計 しておくことである 例 えば 新 規 に 追 加 される 関 数 の 名 前 が 事 前 に 決 められている 実 装 よりも パラメータとして 任 意 の 名 前 を 後 から 指 定 できる 実 装 のほうが より 予 備 知 識 や 前 提 の 縛 り がないといえる クロージャの 利 用 JavaScript の 特 徴 として 名 前 のない 関 数 の 実 体 を 無 名 関 数 として 定 義 し 変 数 などに 代 入 できる 平 成 19 年 度 の 卒 業 研 究 では クロージャと 呼 ばれ る 関 数 インスタンスをオブジェクトとして 保 存 する 方 法 を 用 いることで 特 定 の 名 前 のグローバル 変 数 を 使 わなくても タイマーで 起 動 される 処 理 のパラ メータを 保 存 することができる これを 応 用 して 状 態 が 準 備 完 了 (typeof の 値 が function になって 関 数 として 使 えるよう)にな ったことを 一 定 時 間 ごとに 確 認 するようなルーチン を 外 部 JS ファイルの 名 前 を 後 から 与 えられるよ 11) うな 汎 用 の 部 品 として 実 装 することを 実 現 した 並 列 実 行 の 管 理 JavaScript ではイベント 駆 動 による 割 り 込 み 処 理 が 基 本 であり Ajax 12) のような 非 同 期 の 並 行 処 理 の 導 入 はやや 後 付 けの 感 がある そのため スレッ ドやプロセスのモデルに 馴 染 んだプログラマには 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= 以 降 の 引 用 符 の 中 )を 使 って
136 Science Journal of Kanagawa University Vol. 20(2) <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 ページに より 多 くの 機 能 を 持 たせたり それをダイナミック に 連 動 したり 変 更 する 技 術 は さらに 多 くの 可 能 性 を 持 っており 今 後 のさらなる 発 展 が 期 待 できる 技 術 分 野 である 謝 辞 関 連 研 究 や 議 論 に 協 力 いただいた 永 松 研 究 室 のゼミ 生 ならびに 卒 研 生 各 位 に 感 謝 する 文 献 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 conference. 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 applications, http://www.adaptivepath.com/publications/essays/archives/000385.php 13) 牧 大 介, 岩 崎 英 哉 (2007) 非 同 期 処 理 の た め の JavaScript マルチスレッドフレームワーク. 情 報 処 理 学 会 論 文 誌,プログラミング 48 SIG_12 PRO_34: 1-18. 14) 豊 留 賢 (2009) Web ページの 機 能 の 動 的 な 変 更 ブ ラウザによる HEAD 構 造 の 違 い. 神 奈 川 大 学 理 学 部 情 報 科 学 科 平 成 20 年 度 卒 業 論 文.