かばの遊べるCGI ロゴ [トップ] [掲示板] [F.A.Q.] [コラム] [ひとりごと] [利用規約] [履歴]
アポイントメント

■特徴

フレームを使って、予約する日を選ぶカレンダー部(左)と、1週間分の予約状況を確認する予約表部(右)を同時に見られる診療時間アポイントメント用CGI。カレンダー部で予約したい日をクリックすると、予約表部がその週の情報に切り替わります。
カレンダー部も、予約表部も、自動的に日付がインクリメントされますし、古くなった予約情報は自動的に削除されますので、一度CGIを設置するとその後のメンテナンスは必要ありません。
一応プライバシーに配慮して、一般公開ページには予約者の情報は出しません。詳細情報は、パスワード付きの管理者用の別画面に表示します。ただし、インターネットの公開回線を送信中の情報は保護されませんので、機密度が高い情報は入力させないようにしてください。

【公開用ページ(appmedic.cgi)】

【管理用ページ(appment.cgi)】

【iモード用ページ(appimode.cgi)】

ruleご利用にあたって sample見本


■設置方法

(1) ダウンロード

まず、下のファイルをダウンロードして、解凍します。解凍すると、"appmedic.cgi"、"appment.cgi"、"appimode.cgi"、"include.pl"、"kabalib.pl"の4つのテキスト・ファイルと、"date.gif"、"key.gif"、"cancel.gif"の3つのGIFファイルができます。

※"appmedic.cgi"は一般公開用CGI、"appimode.cgi"はiモード向け一般公開用CGIで、"appment.cgi"は管理者用CGIです。"include.pl"は両方のCGI共通の参照ファイルです。

※kabalib.plはVer.1.20以降を使ってください。

downloadファイルをダウンロード

cgi-lib.plを入手します。

http://cgi-lib.berkeley.edu/

jcode.plを入手します。

ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/

(2) カスタマイズ

"appmedic.cgi"、"appment.cgi"、"include.pl"をテキスト・エディタで編集します。
※全てEUCで書いてありますので、EUCが扱えるエディタでないと読めません。

最低限、次の個所を変更する必要があります。

#!/usr/local/bin/perl
perlへのパス("appmedic.cgi"と"appment.cgi")
$htmpath = 'appoint.html';
[もどる]ボタンでジャンプするパス。("include.pl")
use lib '../lib';
"include.pl"から見て、cgi-lib.pl、jcode.pl、kabalib.plがあるパス。("include.pl")
@cellsAM = ('9:00','9:30','10:00', ... );
@cellsPM = ('16:00', '16:20', '16:40', ... );
予約できる時間帯。昼休みをはさんで午前(@cellsAM)と午後(@cellsPM)を分けて書いてください。("include.pl")
$accKey = '0123';
管理者用ページに入るためのパスワード("include.pl")。絶対変更してください。

(3) アップロード&設定

ftpソフトなどでサーバーのCGI用ディレクトリにアップロードしましょう。仮にcgi-bin/にアップロードしたら、次のようにディレクトリとパーミッションを設定します。
※kabalib.plはappoint/の下でもOKです。
※jcode.plとcgi-lib.plはCGIスクリプトではしょっちゅう参照される定番なので、lib/ディレクトリとして独立させておくと使いまわせて便利です。

cgi-bin/
    ├-- lib/
    |    ├-- jcode.pl
    |    ├-- cgi-lib.pl
    |    └-- kabalib.pl
    └-- appoint (755)/
          ├-- data (777)/
          ├-- appmedic.cgi (755)
          ├-- appment.cgi (755)
          ├-- appimode.cgi (755)
          ├-- include.pl
          └-- *.gif

(4) テスト

設定が終わったら、ブラウザからCGIを設置したURLを開いてみましょう。上の例のようなディレクトリ構成なら、次のようなURLになります。

http://xxx.yyy.zzz/cgi-bin/appoint/appmedic.cgi


■はっぱりカスタマイズ

"include.pl"の「設定、適当に変更してください」〜「設定はここまで」の間を適当に変更すると、色々カスタマイズできます。

(1)メール通知機能を設定しよう

次の部分を設定すると、予約が入ったことを管理人にメールで通知したり、管理人が予約をキャンセルした時に先方にお断りメールを送信したりできます。
$mailtoに管理人のメールアドレスが指定されていれば、公開ページから予約が入った時とキャンセルされた時に管理人にメールで通知します。$infoMailが1なら、管理人から予約をお断りしたときに、患者さん宛てにメールを送信します。管理ページの理由欄に書いた内容もメールに反映します。

※$mailtoと$infoMailは初期状態ではコメントアウトされています。利用する場合には先頭の'#'を削除してください。

#メール送信
$mailer = '/usr/lib/sendmail'; #sendmailへのパス
$nkf = '/usr/local/bin/nkf';   #nkfへのパス
$mailto = 'aaa@bbb.ccc';       #メール送信先(複数の時はカンマで区切る)
$infoMail = 1;                 #1なら管理人がキャンセル/休診した時メールで連絡(不要なら0)
$fromName = '何某鍼灸院';      #キャンセル/休診通知メールの発信者名

(2)定休日を指定しよう

曜日毎に、1日休診、AM休診、PM休診、1日診察の4種類を設定できます。1日休診にした日はカレンダーにリンクが付きません。また、土曜または日曜を1日休診にすると、予約状況表にその曜日の列が出なくなります。祝日は曜日の設定に優先して休業にすることができます(Ver.1.20〜)。

#曜日の設定(1日休診=0、AMのみ診察=1、1日診察=2, PMのみ診察=3)
#  土日だけは1日休診の場合、列そのものを表示しません。
$enw[0] = 0;          #日曜日
$enw[1] = 2;          #月曜日
$enw[2] = 2;          #火曜日
$enw[3] = 2;          #水曜日
$enw[4] = 1;          #木曜日
$enw[5] = 2;          #金曜日
$enw[6] = 1;          #土曜日

#祝日を休みにするか? 0=休み、1=曜日の設定が優先。
$enHoliday = 0;       #祝日

(3)フォームの項目を変更しよう

入力フォームの項目を非表示にしたり、任意入力と必須入力を切り替えたりできます。

#フォームの項目(不要=0、必須項目=1、任意入力=それ以外)
#    メールだけは0にすると、フォームのカッコがつかなくなります。
$enSex = 2;           #性別
$enAge = 2;           #年齢
$enTel = 1;           #電話番号
$enMail = 1;          #メールアドレス(0にはしないで)
$enCard = 2;          #診察券番号
$enSym = 2;           #症状
$enCon = 2;           #相談事項
$enKey = 2;           #削除キー

名前だけは非表示にしたり、任意入力扱いにはできません。メールアドレスは、非表示にすると、フォームの見た目がおかしくなりますので、0にはしないでください。

(4)表の幅を変えよう

表の幅を変更できます。$twidthにピクセル数で指定してください。

#予約状況表のセル幅(ピクセル)
$twidth = 70;

(5)アイコンを変えよう

一発キャンセル、日付別一覧、キーのアイコンは変更できます。サイトのイメージに合った画像に替えてみるのも楽しいと思います。ただし、小さいものにしないと見た目がおかしくなります。

#画像ファイル
$dateImg = "date.gif";      #日付別一覧を開くためのボタン
$keyImg = "key.gif";        #キーがついた予約を示すアイコン
$cancelImg = "cancel.gif";  #一発キャンセル・ボタン

(6)色を変えよう

下にある色は好きなように変更できます。変更できるのは、表、セル、ブラウザの背景色ばかりで、文字色はコントロールしていません(警告メッセージだけは例外)。文字はブラウザのデフォルト色である黒や青になるはずなので、背景色は淡い色にしておくのが無難です。

#色指定
$calbg    = '#FFFFFF';      #カレンダー部の背景色(白)
$tblbg    = '#F5F5F5';      #予約状況フレームの背景色(ホワイトスモーク)
$tblbgt   = '#FFFFFF';      #予約状況表の背景色(白)
$listbg   = '#CCFFCC';      #一覧表示画面の背景色(薄いグリーン)
$msgbg    = '#FFFFE0';      #メッセージ画面の背景色(ライトイエロー)
$tblhead  = '#99CC99';      #予約状況表のヘッダーの色(グリーン)
$tbltime  = '#CCFFCC';      #予約状況表の時間セルの色(薄いグリーン)
$sun      = '#FFCCFF';      #日曜日と休日の色(ピンク)
$sat      = '#CCFFFF';      #土曜日の色(水色)
$hei      = '#FFFFF0';      #平日の色(ベージュ)
$off      = '#FFF0F5';      #受け付けしない時間帯の色(薄いラベンダー)
$on       = '#FAFAD2';      #予約済みの色(淡い茶色)
$alert    = '#FF0000';      #警告メッセージ(赤)
$schbg    = '#FFFFFF';      #予約状況表の背景色(白)

(7)過去ログを残そう

$remainを1にしておくと、過去ログを残すことができます。$remLimitは記録を残しておく日数で、0の場合は記録を一切消しません。サーバー側にファイルがあふれないように適当な期限を付けておくことを推奨します。$cookieDaysは利用者がフォームに入力した情報をブラウザに記憶させておく日数です。

#記録保持
$remain = 1;          #過去の記録を残すときは1、要らないときは0。
$remLimit = 100;      #記録を残す日数。0なら全然消さない。
$cookieDays = 100;    #クッキーの保持期間

■ちょこっとセキュア

データ・ファイルを保存するディレクトリは、初期値では"data"になっていますが、このディレクトリはパーミッション777のセキュリティー的に弱い部分なので、他の人に推測されにくい名前にすることをお勧めします。何かとんでもない名前を考えて一人で楽しんではどうでしょうか?
データ・ファイル用ディレクトリ名を変更するには、"include.pli"の$dirの部分と、実際のディレクトリ名を変更してください。下は、"data"を"monooki"に変更した例です。

[include.plファイル]

$dir = 'monooki';
データ・ファイル用ディレクトリ名

[ディレクトリ構成]

cgi-bin/
    ├-- lib/
    |    ├-- jcode.pl
    |    ├-- cgi-lib.pl
    |    └-- kabalib.pl
    └-- appoint (755)/
          ├-- monooki (777)/
          ├-- appmediccgi (755)
          ├-- appment.cgi (755)
          ├-- appimode.cgi (755)
          ├-- include.pl
          └-- *.gif

■つけたり

個人情報は誠実に管理しましょう

この「アポイントメント」を運用すると、データ・ディレクトリには個人の名前や電話番号、病気の既往までが蓄積していきます。1件1件バラバラならたいしたことはありませんが、集まると利用価値がある個人情報データになります。
絶対安全と言える方法を私は知りませんが、管理用CGIには推測されにくいパスワードをつけて、ちゃんと管理されたサーバーで使ってください。
また、公開しているWebサーバーに過去のデータを置きっぱなしにしないで、削除するか、サーバーから隔離された環境へ移すのも有効だと思います。

真犯人は君か!

この「アポイントメント」をPC上で動かしてデバッグしているとき、表示があまりに遅いので困ってしまいました。来月のカレンダーを表示してから、再来月のカレンダーが出るまで5秒はかかる。予約状況表はそれからさらに5秒。といった調子。HTMLの表組みが複雑過ぎるのか?表のサイズを完璧に指定すると表示が速くなるというから、そこまでするか?
とにかく、こんなに遅かったら見に来た人が「おかしいのかな?」と思って帰ってしまうかも知れません。
でも、いつもの元Win95(現Win98)機では遅いのに、XPでデバッグするときは一瞬で表示できます。全然問題ないレベルです。
あれ? そういえばXPだと普通のインターネットも表示がとても速い。同じアナログ・ダイヤルアップなのに...
ということは、今まで回線が遅いからウチのインターネットは遅いとばかり思っていたけれど、遅さの原因の半分以上はどうやらハードの性能にあったようです。カワイイ元Win95よ、君が真犯人だったのか。でも無理ないか、買ったのはもう4、5年前、CPUは233MHz、今のXPの10分の1だもんね。

iモード対応

この「アポイントメント」にはiモード対応が要望に入っていました。ブラウザフォンしか使わないインターネット利用者って結構な割合だと聞くので、iモード対応の有無で便利さは大違いですよね。
でも、私はケータイ持ってないんです。(最近このセリフ言いにくくなりました。)
このホームページ・サービスも、iモード向けCGIに対応してません。(強制的に大きな広告バナーが入るので。)
iモードのエミュレータで一応やってみましたが、実際のサーバーとクライアントでの最終チェックができないので、お試し版の扱いです。


■履歴

2003/5/30 Ver.1.20 appmedic.cgi (Ver.1.10)、appment.cgi Ver.1.04)、appimode.cgi (Ver.1.10)、include.pl (Ver.1.10)。
メール送信可にしておくとappimode.cgiが停止する問題、管理画面から臨時休業を設定できない問題、メイン画面で予約をキャンセルしてもメールが送信されない問題を修正。
2003/1/29 Ver.1.12 appmedic.cgiの休日があると一発キャンセルがおかしくなる問題を修正。(Ver.1.02)
2003/1/28 Ver.1.11p kabalib.plの重大なバグを修正。(Ver.1.20)
2003/1/10 Ver.1.11 appment.cgiのメール送信のバグを修正(Ver.1.02)。
2003/1/5 Ver.1.10 appimode.cgi(Ver.0.10)を追加。
appment.cgiを定休日優先に改造(Ver.1.01)。
appmedic.cgiの引数チェックを訂正(Ver.1.01)。
2002/12/30 Ver.1.00 「週間会議室予約」Ver.1.00を基につくりました。


[トップへ] [掲示板] [F.A.Q.] [コラム] [ひとりごと] [利用規約] [履歴]