店舗向け無料予約CGI  Ver.1.1
========================================

MACHIKA WEB 配布の、データベース不要で設置できる小規模店舗向け予約CGIです。
美容室、理容室、整体・サロン、個人教室、修理受付、各種サービス店など、
「日時」と「メニュー」を選んで予約を受け付ける用途を想定しています。

この配布版は特定の店舗・ドメイン・メールアドレスに依存しません。
予約データや個人情報がMACHIKA WEBへ送信される機能もありません。
店舗情報・メール設定は、設置後に各利用者が管理画面から設定します。

----------------------------------------
1. 主な機能
----------------------------------------
・お客様用WEB予約ページ
・メニューごとの所要時間・料金設定
・営業時間／定休日設定
・空き時間の自動表示
・予約受付可能日数の設定
・直前予約の締切設定
・同時予約上限の設定
・保存直前の空き枠再確認（二重予約対策）
・管理画面ログイン
・予約一覧／追加／編集／削除
・受付／確定／来店済み／キャンセルのステータス管理
・メニュー追加／編集／受付停止／削除
・店舗名、電話番号、メール等の設定
・管理パスワード変更
・予約者本人用キャンセルURL
・予約者への確認メール ON/OFF
・店舗への新規予約／キャンセル通知メール ON/OFF
・sendmailテスト
・プライバシー同意欄
・スマートフォン対応
・データベース不要（Storableファイル保存）

----------------------------------------
2. 必要な動作環境
----------------------------------------
・Perl 5
・CGIを実行できるWebサーバー
・.htaccessを利用できる環境を推奨
・HTTPSでの利用を強く推奨

主なPerl標準モジュール：
Storable / Fcntl / Digest::SHA / POSIX / Time::Local / Encode / FindBin

CGIの設置場所・パーミッション・sendmailの利用可否は、
必ず利用中のサーバー会社の仕様を優先してください。

----------------------------------------
3. ファイル構成
----------------------------------------
index.cgi       お客様用予約ページ
admin.cgi       店舗管理画面
setup.cgi       初回セットアップ
cancel.cgi      お客様用予約キャンセルページ
assets/
  style.css     デザイン用CSS
lib/
  Reservation.pm 共通プログラム
  .htaccess     libフォルダの外部閲覧防止
data/
  .htaccess     dataフォルダの外部閲覧防止
  index.html    ディレクトリ一覧の補助防止
INSTALL.html    ブラウザで読める設置ガイド
LICENSE.txt     MIT License
README.txt      この説明書

【重要】
data フォルダには予約者の氏名・電話番号・メールアドレス・予約内容、
管理認証情報、セッション情報などが保存されます。
必ずWebから直接閲覧できない状態で使用してください。

----------------------------------------
4. かんたん設置手順
----------------------------------------
1) reservation フォルダを構成を変えずにアップロード
2) index.cgi / admin.cgi / setup.cgi / cancel.cgi を実行可能に設定
3) data フォルダを書き込み可能に設定
4) data/ と lib/ がWebから閲覧できないことを確認
5) setup.cgi を開き、店舗名と管理パスワードを設定
6) admin.cgi へログイン
7) 店舗設定・メニュー・メール設定を調整
8) index.cgi から必ずテスト予約

一般的なCGIパーミッションは 705 または 755 ですが、
サーバー会社の指定がある場合はそちらを優先してください。
必要がない限り 777 は使用しないでください。

詳しくは INSTALL.html をブラウザで開いてください。

----------------------------------------
5. data / lib の保護確認
----------------------------------------
設置例：
  https://example.com/reservation/

次のようなURLへ直接アクセスします。
  https://example.com/reservation/data/
  https://example.com/reservation/lib/Reservation.pm

403 Forbidden 等になり、中身が閲覧できなければ正常です。

.htaccess が利用できず、中身が表示される環境ではそのまま運用しないでください。
Web公開領域外へdataを置く、サーバー管理画面でアクセス制限する等、
利用サーバーに合った方法で保護してください。

----------------------------------------
6. 初回セットアップ
----------------------------------------
setup.cgi を開き、
・店舗名
・連絡先メールアドレス（任意）
・管理パスワード（8文字以上）
を設定します。

初回セットアップ後は、setup.cgiを開いても再設定できません。
パスワード変更は管理画面から行います。

----------------------------------------
7. 管理画面の店舗設定
----------------------------------------
主な設定項目：
・店舗名
・予約ページの短い説明
・通知先メールアドレス
・送信元メールアドレス
・電話番号
・営業時間
・定休日
・予約枠の間隔
・同時予約上限
・予約受付日数
・直前予約の締切
・タイムゾーン
・sendmailパス
・プライバシーポリシーURL
・予約者への確認メール ON/OFF
・店舗への通知メール ON/OFF
・予約受付と同時に確定するか

----------------------------------------
8. メール設定
----------------------------------------
メール送信にはサーバーのsendmailを使用します。
例： /usr/sbin/sendmail

送信元メール（From）は、予約CGIを設置したサイトと同じドメインの
実在するメールアドレスを設定してください。

例：
Webサイト  https://example.com/
送信元      reservation@example.com

Gmail等の外部サービスのアドレスを認証なしでFromに設定すると、
受信拒否や迷惑メール判定の原因になる場合があります。
通知先メールにはGmail等を設定しても構いません。

管理画面の「メール送信テスト」で、公開前に必ず確認してください。
メールの実際の到達はSPF/DKIM/DMARCや受信側判定にも依存します。

----------------------------------------
9. 自動メールON/OFF
----------------------------------------
管理画面の店舗設定で個別に切り替えられます。

・予約者へ確認メールを自動送信する
・店舗へ新規予約・キャンセル通知メールを送信する

メールを使わず予約管理だけ利用することもできます。

----------------------------------------
10. プライバシーについて
----------------------------------------
予約フォームでは氏名・電話番号・メールアドレス・備考等を取得します。
予約画面には個人情報利用への同意チェック欄があります。

管理画面で「プライバシーポリシーURL」を設定すると、
同意文から利用者自身のプライバシーポリシーへリンクできます。

実際の事業内容や取得情報に合わせたプライバシーポリシーの整備は、
設置者自身で行ってください。

----------------------------------------
11. バックアップ
----------------------------------------
予約・設定・認証データは data フォルダに保存されます。
定期的に data フォルダをWeb公開領域外へバックアップしてください。

特に次の前にはバックアップ推奨：
・サーバー移転
・CGI更新
・大きな設定変更
・ファイル構成変更

バックアップZIP等をWeb上に置いたままにしないでください。

----------------------------------------
12. セキュリティ上の注意
----------------------------------------
・HTTPSで運用してください
・data / lib をWebから閲覧できない状態にしてください
・管理パスワードを使い回さないでください
・公開前にテスト予約してください
・管理画面のURLを必要以上に公開しないでください
・定期的にdataをバックアップしてください

v1.1では管理画面のCSRF対策、POSTサイズ制限、Cookieの設置フォルダ限定、
管理パスワード保護強化等を行っています。

----------------------------------------
13. デザイン変更
----------------------------------------
assets/style.css を編集すると色・余白・フォント等を変更できます。
公開予約画面にMACHIKA WEBの固定リンクやロゴは表示しません。

配布元情報とライセンスは README.txt / INSTALL.html / LICENSE.txt に保持しています。

----------------------------------------
14. 無料配布・ライセンス
----------------------------------------
本プログラムは MIT License で利用・改変・再配布できます。
詳しくは LICENSE.txt を確認してください。

Copyright (c) 2026 MACHIKA WEB
https://machikaweb.com/

----------------------------------------
15. 対象外の機能
----------------------------------------
本システムは「1店舗の時間枠予約」を主な対象としています。

スタッフ指名、スタッフ別シフト、座席・部屋別在庫、オンライン決済、SMS、
Googleカレンダー同期等は含まれていません。

実店舗で公開する前に、必ず自分のサーバー環境で十分に動作確認してください。
予約情報・個人情報の管理は設置者の責任で適切に行ってください。

========================================
店舗向け無料予約CGI Ver.1.1
MACHIKA WEB
https://machikaweb.com/
========================================
