概要

1．はじめに
システム情報系技術室では、定年退職による室員の減少に伴い、従来サポートしていた業務の引き継ぎが、難しい状況となっている。ところで実験における出席は、技術職員が受講者名簿から出欠表を作成し、受講生に手書きのサインを書かせることで出欠を取っている。この場合技術職員は、実験前の出欠表の準備からその後の回収、最後に集計作業をして、担当教員に提出する必要がある。そこで、業務の効率化のため出席の登録は、自動化されたシステムを提案することにした。本学で導入しているクラウド型の教育支援サービス、manabaの利用も考えたが、担当教員から、「実験は、実験室(計算機室を含む)に来て行うもので、どこからでも登録できてしまっては困る」という条件が提示されたため、アクセス制限の掛けやすい情報科学類のコンピューティング環境に、Webアプリケーションを作成することにした。
2.コンピューティング環境
情報科学類は計算機室を、3C113室、3C205室、 3C206室の3部屋持っている。今回試験運用を行った論理システム実験は、3C113室で実施している。 3C113室のコンピューティング環境は、macOS10.14 Mojave、Windows10、Ubuntuが利用できる、トリプルプートの環境になっている。また、Webサーバーには、Apache 2.4、PHP 5.4.xxが実装されている。ところで、スクリプトの実行には suPHPという仕組みを利用しているので、プログラムはユーザー権限で動作する。そのためスクリプトファイルのパーミッション設定には注意が必要となる(user以外のwriteパーミッションは立てない)。なおSQlite3は、PHPにDLL (Dynamic Link Library)が同梱されており、本環境では使用可能な設定になっている。
3. PHPとSQLite3
今回、出席登録システムの作成には、PHP (PHP: Hypertext Preprocessor)¹とSQLite3²データベースを使用することにした。 PHPは、サーバーサイドで動的なWebページを作成するための機能を、多く備えているプログラミング言語である。また、データベースへのアクセスが容易なのも、その特徴である。さらに、PHP 5.4.0 以降には、開発支援のためにWebサーバー機能(ビルトインサーバー)が付加されている。この簡易サーバーを、自身のパソコン上で走らせ、Webアプリケーションの開発に利用できる。 SQLite3は、サーバーとしてではなくアプリケーションに組み込んで利用される。また、データの保存に単一のファイルを使用することと、ユーザーの設定や、パスワードの設定といったことが必要ないので、とても軽量である。そのため今回のようなケースでは、とても使い勝手の良いデータベースと言える。
4.ファイルおよびディレクトリ構造
出席登録システムで作成したファイルは、 attendance.db3 (SQLite3データベース) schedule.php (日程登録用) meibo.php (受講者名簿および出席データ管理) ● index.php (出席登録用) .htaccess × 2 (Shibboleth認証用)である。そのディレクトリ構造を図1に示す。 ² https://www.sqlite.org/index.html
4.1データベース(attendance.db3)
出席登録用データベースは、scheduleテープルとmeiboテープルの２つのテープルを持っている。データベースファイル自体は、セキュリティの観点から、ルートディレクトリの外に配置した(図1参照)。なお、データベースファイルの作成および、テープルの作成には、Windowsパソコン上で動作するフリーウェアのDB Browser for SQLite³を使用した。
4.1.1  scheduleテーブル(日程の登録)
scheduleテープルは、実験の日程を登録するテープルである。その構造は、hizuke (日付)、hajime (登録開始時間)、owari (登録終了時間)の3つのフィールドで構成されている。hizukeフィールドには、実験実施日を登録する。また、hajimeフィールドには出席登録の受付開始時間を、owariフィールドには受付終了時間を登録する。
4.1.2  meiboテーブル(受講者名簿と出席状
況データ) meiboテープルは、受講者名簿であり、出席状況を管理するテープルでもある。その構造は、stNum (学籍番号)、uld (ユーザーID)、sName (氏名)、 syuSenkou (未使用)、tNo (未使用)の5つの静的フィールド(固定フィールド)と、scheduleテープルを参照して動的に作成される、出席状況登録用の可変フィ一ルドからなる。
4.2 日程登録用ページ(schedule.php)
schedule.phpは、管理者のみにアクセスが許可されたページである。このページは、scheduleテープルの日程データを表示する。機能は、実験の実施日と出席登録を許可する時間帯の設定(scheduleテープルに登録)である(図2)。このページでは、レコードの最後に登録フォームがあり、そこに予定を入力し登録ボタンをクリックすると、スケジュールに追加される。また、レコード単位での削除が可能である。さらに日程を新規作成するために、テープル内の値を削除する機能も付加されている。実際には、「空にする」のチェックボックスにチェックを入れ、実行ボタンをクリックすると実行される。これにより、テープル内のセルデータは、すべて空になる。
4.3 出席管理用ページ(meibo.php)
meibo.phpも、管理者のみにアクセスが許可されたページである。このページは、meiboテープルに登録された受講生の出席状況を表示する。その機能は、システム運用開始にあたって、新規にmeiboテープルを作成するものである。実際は、CSV形式で記述された名簿ファイルを読み込み、scheduleテープルに登録された日付のフィールドを追加した形で、テープルを作成する。またテープルに保存されたデータを、CSV形式のファイルとして書き出すこともできる。テープル作成用のCSVファイルの記述例を図3に示す。

図 3. CSVファイルの記述例
各行の、後ろにある2つのカンマは、2つの未使用のフィールドを示すものなので、現状では必ず付加する必要がある。(将来的には、見直す予定)図4に出席管理用ページを示す。なおこのページも日程登録用ページと同様に、レコード単位での登録・削除が可能である。ところで、SQLite3で使用されている文字コードは、UTF-8である。これを、Microsoft Excelで編集(Windows上)できるようにするため、読み込み時にはShift_JISをUTF-8に、書き出し時にはUTF-8をShift_JISに変換している。左から５つのフィールドは、CSVファイルから読み込んだ名簿データである。右側に続く日付が入ったフィールドは、scheduleテープルから読み込んだ目程になっている。
4.4 出席登録用ページ(index.php)
index.phpは、学生が出席を登録するためのページである(図5)。
図5.出席登録用ページ(1)
このページはmeiboテープルから、認証ユーザー (リモートユーザー)に対応するレコードを選択し、表示する。なおscheduleテープルの開始フィールドに登録された時間から、終了フィールドに登録された時間までの間だけ、出席登録が可能になる。出席の登録ボタンをクリックすると、その時の時間がテープルに登録される。開始時間前および開始時間後は、図6で示すように登録ボタンは表示されなくなり、出席の登録はできなくなる。
図6.出席登録用ページ(2)
また、名簿に登録されていないユーザーは、ページには入れずTopページに転送される。その他、IPアドレスも制限されており、3C113室のクライアントマシンからのアクセスしか受け付けないように、カスタマイズした。なお、IPアドレスのバージョンが、Windows環境はIPV4で、macとUbuntuの環境はIPV6であったため、両方の形式に対応させる必要があった。
4.5アクセス制限用ファイル(.htaccess)
システム格納用ディレクトリと、そのサプディレクトリである管理ページ用ディレクトリには、 .htaccessファイルが置かれている。システム格納用ディレクトリに置かれている.htaccessファイルは、Shibbolethで、計算機ユーザーの認証を掛けている(図7)。 AuthType shibboleth AuthName "Coins Login with University of Tsukuba Shibboleth" ShibRequireSession On ShibUseHeaders On require valid-user
図 7. Shibboleth認証 (1)
管理ページ用ディレクトリに置かれていろ.htaccessファイルは、管理者しか入れないようにユーザーを指定して、Shibbolethで記述されている(図8)。 AuthType shibboleth AuthName "Coins Login with University of Tsukuba Shibboleth" ShibRequireSession On ShibUseHeaders On require shib-attr uid xxxx xxx xxxxxx図 8. Shibboleth認証 (2)
５．出席登録システムの運用手順
5.1 scheduleテーブルの作成
まず学年暦で、実験科目の実施日と実施時間を調べ、scheduleテープルに登録する。登録は、日程登録用ページから行う。以下、今回試験運用を行った、論理システム実験を例にとって説明する。論理システム実験は、秋A・ Bモジュールに開講され、3、4、5限に実施される。そこで図2のように、日付フィールドには実施日を登録する。開始フィールドには、2限目の終了時間、 11時25分を登録することにした。終了フィールドには少し余裕を見て、6限終了時間の18時00分を登録した。ただし実際の登録では、実施日は別として、開始・終了時刻は担当者の判断で、適宜決めることになる。
5.2  meiboテーブルの作成
次に行う作業は、受講生の名簿を作成することである。これは、Microsoft Excelで作成し、カンマ区切りのCSVファイルとして保存すればよい。その後、出席管理用ページにアクセスし、参照ボタンをクリックして、CSVファイルを選択する。さらに、CSVファイルが選択された状態で、名簿の新規作成ボタンをクリックすると、図９のように表示され、日程が右側に追加された、出席登録用のmeiboテープルが新しく作成される。以上で、事前の準備は完了となる。あとは、受講生に出席登録用ページのURLを知らせ、実験の開始時には必ず出席の登録をするよう、指示する。
5.3出席状況の集計
全日程が終了後、出席管理用ページにアクセスし、出席表の保存ボタンをクリックすると、meiboテープルの内容が、出欠表.csvのファイル名で保存される。これを、Microsoft Excelで読み込み、不要な部分を削除する等、体裁を整え、担当教員に提出する(図10)。図10.出席状況
まとめ
試験運用は、無事成功に終わった。未使用のフィドが残っているなど、修正点はまだ存在するが、 ーゲットとなるサーバーの環境や、運用する科目の要求に合わせ、カスタマイズして対応する。なお今後は、仕様書や利用の手引き等の、マニュアルを整備する必要がある。これにより、利用者自身で運用できることが理想である。出席登録システムを作成するきっかけを与えてくださった、システム情報系技術室、山崎豊技術専門職員に感謝いたします。また、論理システム実験での試験運用を、快く認めてくださった、システム情報系情報工学域、富安洋史講師に感謝いたします。 Creating an attendance registration system- Masaru Nakayama Technical Service Office for Systems and Information Engineering, University of Tsukuba, 1-1-1 Tennodai, Tsukuba, Ibaraki, 305-8573 Japan Keywords: PHP, SQLite3, Shibboleth, Apache2.4