全学技術センター会議室等予約システムの稼動○田上奈緒 A)、箕浦昌之 B)、木村時政 C) 、木村和子 D) 、加藤俊之 E) 、谷口泰広 F) 、田島尚徳 G)
A)

共通基盤技術支援室

B)

情報通信技術系

共通基盤技術支援室 情報通信技術系

C)

共通基盤技術支援室 情報通信技術系

D)

共通基盤技術支援室

情報通信技術系

E)

共通基盤技術支援室

情報通信技術系

F)

共通基盤技術支援室 情報通信技術系

G)

共通基盤技術支援室

情報通信技術系

はじめに
2008 年度 7 月から 12 月にかけて、情報通信技術系では、主に WEB アプリケーション開発に使用されるプログラム言語 PERL の勉強会を行った。
その成果物として「全学技術センター会議室等予約システム」を稼動させたので報告する。
情報通信技術系の箕浦さんを講師として、基本的に週 1 回または隔週で毎回 2 時間ほどの講義が行われた。
初回は、各自 PC に WEB サービス（APACHE）・開発環境（PERL）を導入・起動し、ローカルマシン内での開発・動作確認が可能な状態を整えた。2 回目以降、PERL の基本的な文法を中心に講師による講義を聞き、簡単なプログラム作成で実践を交えながら進められた。
「全学技術センター会議室等予約システム」はもともとオープンソースのフリーソフトウェアである簡易予約システムを、改良・補足して導入した。

1. システムの機能
一般的に WEB アプリケーションは、「WEB サーバ層」＋「アプリケーション層」＋「データベース層」という 3 層構成（図１）が多いが、本システムはデータベースを使用せず、ファイルは設定情報、データ情報含めて全てテキストファイルである。
例 1）

Apache など

tomcat など

ORACLE

WEB サービス

APP サービス

PostgreSQLなどＤＢサービス

例 2）

Apache など

PERL,PHP など

ORACLE

WEB サービスによる CGI

PostgreSQLなどＤＢサービス

図 1. WEB アプリケーションシステムの一般的な構成そのため WEBサービスと P
ERLをインストールしたマシンであれば、ダウンロードしたアーカイブファイルを展開するだけで稼動環境が整うため、各自のＰＣにそれぞれのテスト環境が容易に作成可能であり、教材としては適するソフトウェアであった。
ブラウザにて「http://www.tech.nagoya-u.ac.jp/yoyaku/」を要求すると図 2 の初期ページが表示される。

図 2. 会議室など予約システムの初期画面
本システムは全学技術センター専用として構築されているため、予約対象物としてはセンター付属の物品があらかじめ登録してある（ファイル名 object01.txt）。また利用可能なメンバーとして全学技術センターの技術職員全員が登録されており（ファイル名 member01.txt）、予約登録・取消には登録済みユーザ名とパスワードによる認証を行って利用者を限定している。ただ予約の照会だけは未登録のユーザでも参照可能である。
画面は４つのフレームに分割されており、① カレンダーフレーム・・・現在年月から 4 ヶ月分表示② 予約状況フレーム・・・カレンダーフレームで選択した年月日の予約状況表示③ 予約登録フレーム・・・カレンダーフレームで選択した年月日の予約登録・取消・照会機能④ 切り替えフレーム・・・「予約画面」で初期表示、「予約方法」で使用方法、「登録者」でユーザ情報変更である。
予約取消は予約した本人のみが可能で「予約対象物」「予約日」「開始時間」「終了時間」が一致したデータをキャンセルする。予約照会は①「予約者の氏名」と「パスワード」による検索、②「使用目的」による検索、予約状況フレームにて対象物をクリックすることで③「対象物」による検索ができる。
また、カレンダーフレームの下部に管理者のパスワードを入力することで利用者全員の一覧表示と新ユーザの追加登録が行える。
切り替えフレームの「登録者」は、予約登録フレームへの所属選択フォーム表示を行わせる。この所属は全学技術センターの各部署が含まれており、選択することで予約状況フレームに、その部署に所属する技術職員のメンバー一覧が表示される（図 3）。一覧の各メンバー右側にある「変更」をクリックすることで、各自のパスワード変更・情報変更・メンバー削除を行うことができる。ただし更新前に各ユーザのパスワードを求められるため、本人のみが可能である。

図 3. 会議室など予約システムの所属毎メンバー一覧

2. システムの環境と構成
静的
HTTP による通信HTML FILE

index.html
leftfrm.html
link.html
post.html
regist.html

ApacheWEB サービス

register.html

reserv01.txt：予約登録データ
member01.txt：ユーザ情報
object01.txt：予約対象物など
lang01.txt ：固定テキストなど

registp.htmlなど
子プロセスとして CGI 起動

HTML タグを返す

Client からの Request Param 送る
テキスト

PERL によるファイル群

CGI Program
今回追加した CGI
既存の CGImemberp.cgi：所属別ユーザ一覧

resvtion.cgi：予約メイン PGM

check_passwd.cgi：ユーザ更新 Password チェックregist.cgi：ユーザ登録

change_passwd.cgi:：パスワード変更

member.cgi：ユーザ全一覧

change_member.cgi：ユーザ情報変更

check.cgi：メンバー登録チェック

delete_member..cgi：ユーザ削除

図 4. 会議室など予約システムの構成

システムの構成を図 4 を示した。また、本 WEB サーバのシステム環境バージョンは以下である。
OS：Vine Linux 3.2
HTTPD：Apache/1.3.33
PERL：v5.8.2
予約システム自体は、PERL による CGI と静的 HTML（一部 JavaScript 使用）の混合で構成されている。
特記するような技術が使用されているわけではないが、今後のメンテナンス時に参考にできるよう、画面構成とクライアントからリクエストされるファイルの関連性を図 5 に示す。

resvtion.cgi

resvinput1&act=calendar

resvtion.cgi&act=statusresvinput
resvinput2
resvtion.cgi&act=keyinlink.html

leftfrm.html

index.html

rightfrm

leftfrm.html
resvtion.cgi&act=calendar
link.html

resvtion.cgi&act=rightfrm name=resvinput
resvtion.cgi&act=status name=resvinput1
resvtion.cgi&act=keyin name=resvinput2
図 5. プログラムから見たフレーム構成とリクエストされるファイル

また管理者パスワード入力時に操作可能になる「ユーザ一覧＆新ユーザ登録」機能については、図 6 に示す。

reg
i
st.htmlmembe
r.
cg
ina
me
=
resv
inp
ut1（全ユーザ一覧表示）
・・・「変更」でユーザ情報更新へ
regi
ste
r.
htmln
ame=
resv
inp
ut2
（新ユーザ登録フォーム）↓check.
cgi（ユーザ情報入力チェック）↓reg
ist.cgi（新ユーザ登録）
図 6. 管理者による新ユーザ登録時にリクエストされるファイル

また、予約システムのメイン CGI である「resvsion.cgi」の概要を図 7 に示す。

クライアント側でクライアントからのイベント発生時の処理

パラメータ読み込み（JavaScript）

act = calendar ?

カレンダー表示処理（sub calendar）

年月日クリック時
resvtion.cgi&act=keyin
resvtion.cgi&act=status
要求

初期画面表示時
予約状況・予約登録フレームを再表示
act = rightfrm ?

resvtion.cgi&act=keyin
resvtion.cgi&act=status（sub rightfrm）

act = keyin ?

act = status ?

予約登録フレームにて結果画面 load 時入力された予約データをresvtion.cgi&act=status

ファイル登録 （sub keyin）

要求

予約状況再表示 （sub status）

予約状況フレームで
act = change ?

対象物選択時
その予約状況を表示（sub change）

対象物クリック時
resvtion.cgi&act=change
要求

エラー表示

図 7. resvtion.cgi の処理概要フロー

3. 修正内容
修正箇所は主に、予約時のパスワード認証・ユーザデータ修正機能・ログファイル更新部分などである。
左下の「登録者」クリックで前述した図 3 の所属選択フォームを表示し、そこで選択した所属毎のユーザ一覧をリストするが、この部分以降が主な追加機能である。画面遷移とユーザ情報更新処理の流れを図 8 に示す。本処理は、各ユーザが自分の情報のみを更新できるようにするためである。

「登録者」クリック↓post.
html（所属選択フォーム）↓membe
rp.
cg
inam
e
=
res
vinp
ut
1（選択所属ユーザ一覧表示）↓「変更」クリック

check̲
pass
w
d.cg
inam
e=
r
esv
i
n
p
ut
2
（本人のパスワード入力フォーム＆処理振り分け）check_passwd.cgi

パスワード

利用者情報

利用者

変更

変更

削除戻る

パスワード

利用者情報

利用者情報

変更フォーム表示

変更フォーム表示

削除フォーム表示

実行

実行

実行

check_passwd.cgi

check_member.cgi

delete_member.cgi

入力チェック後入力チェック後ユーザ削除

パスワード更新

ユーザ情報更新

更新完了表示

更新完了表示

削除完了表示TOP 画面へ
全員表示の場合

所属系表示の場合

regist.html

memberp.cgi（所属ユーザ表示）

member.cgi（全ユーザ表示）

post.html（所属選択フォーム）

register.sgi（メンバー登録フォーム）
図 8. ユーザ本人の情報更新機能

まとめ
今回のシステム構築は初めから全てを作成するのではなくオープンソースの改修という方法が採用されたが、本来の業務の隙間に行うため、時間の節約にはなったであろう。
またプログラムを修正する上でソースの解読を行うため、新しい言語のテクニックを修得しやすいというメリットもあったと思う。
DB サーバを使用しないため、データベースのインストール・設定の手間が省け、移植するのは容易だが、データが増大した場合のパフォーマンス・プログラムの保守のしやすさ・セキュリティを考慮したシステムを目指すのであれば、今後の改良点として「データベース化」、「CAS&LDAP による認証」、「メールによる通知機能」などが挙げられる。
最後に、毎回テーマ毎のマニュアルを作成し説明して頂いた講師の箕浦さんに感謝いたします。