# モダン勤怠 バックアップ運用説明書

作成日: 2026年6月8日

## 目的

モダン勤怠は試運転中のアプリです。  
便利になってきた一方で、実運用では「壊れた時に戻れること」が最重要です。

この説明書は、次の3つを目的にします。

- アプリが壊れても勤怠データを失わない
- CSVを出し忘れても自動バックアップが残る
- 試運転中は診療日に1日3回CSVを残す
- Macを買い替えても復元できる

## 基本方針

紙を完全に捨てる前に、次の状態を作ります。

- アプリが壊れてもSupabaseに元データが残る
- SupabaseからCSV/JSONをDropboxへ自動保存する
- 月末CSVは大石さん確認用に保存する
- プログラム本体はGitとDropboxに残す
- どうしても動かない日は紙メモに戻れる

## 役割

### 渡邊泰三さん・渡邊史子さん

- アプリの管理者です。
- スタッフ追加、停止、仮パスワード発行を行います。
- 月末CSVを確認し、必要に応じて大石さんへ共有します。
- バックアップ結果を確認します。

### スタッフ

- Google Chromeでログインします。
- 出勤、休入、休戻、退勤を記録します。
- 使い終わったら必ず退出します。
- 打刻忘れ、有給、欠勤、訂正は手書きで残します。

### 大石さん

- CSVを確認します。
- 社労士業務で使えるか、見にくい点や困る点を確認します。
- 試運転中は紙タイムカードとCSVを照合します。

### Codex

- プログラム修正、バックアップ仕組みの調整、復元手順の整備を担当します。
- ただし、日常運用はアプリと説明書だけで回るようにしておきます。

## システム構成と役割

### Supabase

勤怠データの本体です。

保存される主なもの:

- スタッフ一覧
- 出勤、休入、休戻、退勤
- 手書きコメント
- QR/GPS情報
- 社労士さん向け説明書の閲覧監査ログ

Supabaseが生きていれば、Macが壊れてもデータは残ります。

### Cloudflare Pages

アプリの公開場所です。

URL:

```text
https://modern-kintai-aoi.pages.dev/
```

Cloudflareが落ちた場合、アプリ画面は開けません。  
その場合は紙メモに戻し、復旧後に手書き入力します。

### Git

アプリのプログラム履歴です。

何か壊れた時、過去の状態へ戻せます。  
Macを買い替えた時も、Gitがあれば復元しやすくなります。

### Dropbox

人間が確認しやすいバックアップ置き場です。

自動バックアップの保存先:

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠バックアップ/
```

保存されるもの:

- JSON完全バックアップ
- テーブル別CSV
- 月別の社労士確認用CSV
- バックアップ成功・失敗の状態ファイル
- 実行ログ

CSV定期保存の保存先:

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠CSV定期保存/
```

こちらは試運転中に、朝・昼・夜のCSVだけを軽く残すための専用フォルダです。

## バックアップの三重対策

### 第1層: Supabaseの元データ

アプリで保存した勤怠データはSupabaseに残ります。

### 第2層: Dropboxの自動バックアップ

Mac上の自動処理で、Supabaseから毎日または週1回バックアップを作ります。

保存形式:

- JSON: 復元向け
- CSV: 人間確認向け

さらに試運転中は、診療日の9:00、15:00、18:00にCSV定期保存を行います。

### 第3層: 紙・手書き運用

アプリ、ネット、Macのどれかが不調な日は、紙メモに戻します。  
復旧後にアプリの手書きへ入力します。

## バックアップ保存先

標準保存先:

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠バックアップ/
```

中身:

```text
CODEX専用/
  モダン勤怠バックアップ/
    latest/
      backup_status.json
      backup_status.txt
      json/
        supabase-backup-latest.json
      csv/
        profiles.csv
        time_clocks.csv
        requests.csv
        audit_logs.csv
        calendar_events.csv
        qr_locations.csv
        clinic_settings.csv
      payroll/
        modern-kintai-2026-06.csv
    archives/
      2026/
        06/
          2026-06-08_223000/
            ...
```

古い説明でDropbox直下に `モダン勤怠バックアップ` と書いてある場合も、今後は必ず `CODEX専用` の中へ置きます。

`latest` は最新バックアップです。  
`archives` は過去分の保管です。

## 初回設定

自動バックアップは、Supabaseから管理者用の鍵でデータを読み出します。  
この鍵は非常に重要なので、アプリ画面や説明書には書きません。

Mac内だけに次の設定ファイルを置きます。

```text
/Users/taizo/Documents/Playground/timecard_app/.env.backup
```

中身の形:

```text
SUPABASE_URL=https://kqtrxpukbttiskursnqx.supabase.co
SUPABASE_SERVICE_ROLE_KEY=Supabaseのservice_roleキー
BACKUP_ROOT=/Users/taizo/Dropbox/CODEX専用/モダン勤怠バックアップ
BACKUP_MONTHS=current,previous
LINE_NOTIFY=0
```

注意:

- `.env.backup` はGitに保存しません。
- `SUPABASE_SERVICE_ROLE_KEY` はスタッフへ共有しません。
- この鍵が漏れた場合は、Supabase側で鍵を再発行します。
- CSV定期保存は、設定がなければ標準で `Dropbox/CODEX専用/モダン勤怠CSV定期保存` に保存します。

## 手動バックアップ

Macで次を実行します。

```bash
cd /Users/taizo/Documents/Playground/timecard_app
node backup/backup_kintai.mjs
```

成功すると、Dropboxに `latest/backup_status.txt` が作られます。

## 自動バックアップ

標準設定では、毎日22:30にバックアップを実行します。

登録ファイル:

```text
/Users/taizo/Documents/Playground/timecard_app/backup/com.taizo.modern-kintai-backup.plist
```

実行内容:

```text
/Users/taizo/Documents/Playground/timecard_app/backup/run_backup.sh
```

自動実行をMacへ登録する時:

```bash
cd /Users/taizo/Documents/Playground/timecard_app
backup/install_launchd.sh
```

登録後、Macが起動していてログイン中であれば毎日22:30に動きます。

注意:

- Macが電源オフの場合、その日の自動バックアップは動きません。
- Macを買い替えた場合は、もう一度 `backup/install_launchd.sh` を実行します。
- Dropboxが同期していない場合、Mac内には保存されてもクラウド反映が遅れることがあります。

## CSV定期保存

試運転中は、社労士さん確認用CSVを1日3回保存します。

実行時刻:

- 9:00
- 15:00
- 18:00

実行日:

- 月曜
- 火曜
- 水曜
- 金曜
- 土曜

除外日:

- 木曜
- 日曜
- 日本の祝日

保存先:

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠CSV定期保存/
```

保存される月数:

- 6か月分
- 今月 + 過去5か月分

中身:

```text
モダン勤怠CSV定期保存/
  latest/
    modern-kintai-2026-06.csv
    modern-kintai-2026-05.csv
    csv_snapshot_status.txt
    csv_snapshot_last_success.txt
  months/
    2026-06/
      latest.csv
      modern-kintai-2026-06_2026-06-08_090000.csv
  archives/
    2026/
      06/
        2026-06-08/
          0900/
            modern-kintai-2026-06.csv
            modern-kintai-2026-05.csv
```

`latest` は最新CSVです。  
`months` は月ごとの確認用です。  
`archives` は9:00、15:00、18:00それぞれの時点保存です。

手動でCSV定期保存を実行する時:

```bash
cd /Users/taizo/Documents/Playground/timecard_app
node backup/csv_snapshot.mjs --force
```

自動実行をMacへ登録する時:

```bash
cd /Users/taizo/Documents/Playground/timecard_app
backup/install_csv_launchd.sh
```

登録ファイル:

```text
/Users/taizo/Documents/Playground/timecard_app/backup/com.taizo.modern-kintai-csv-snapshot.plist
```

重要:

- launchdは毎日9:00、15:00、18:00に起動します。
- スクリプト側で診療日かどうかを判定します。
- 木曜、日曜、祝日は起動してもCSV保存せず「スキップ」と記録します。
- Macが電源オフ、スリープ、ログアウト中の場合、その時刻の保存は動かないことがあります。

## 成功・失敗の確認方法

次のファイルを開きます。

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠バックアップ/latest/backup_status.txt
```

成功例:

```text
モダン勤怠バックアップ: 成功
実行日時: 2026-06-08 22:30
profiles: 19件
time_clocks: 120件
requests: 18件
```

失敗した場合は、同じ場所に失敗理由が残ります。

ログ:

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠バックアップ/backup.log
```

毎日確認する場合は、まず `backup_status.txt` だけ見れば十分です。  
失敗していた時だけ `backup.log` を見ます。

CSV定期保存の確認ファイル:

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠CSV定期保存/latest/csv_snapshot_status.txt
```

最後に成功したCSV定期保存:

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠CSV定期保存/latest/csv_snapshot_last_success.txt
```

CSV定期保存ログ:

```text
/Users/taizo/Dropbox/CODEX専用/モダン勤怠CSV定期保存/csv_snapshot.log
```

## Mac買い替え時の復元方法

新しいMacで最低限必要なもの:

- Dropbox
- Google Chrome
- Codex
- このアプリのフォルダ
- Supabaseログイン
- Cloudflareログイン

復元の考え方:

1. Dropboxを同期します。
2. `モダン勤怠バックアップ` フォルダを確認します。
3. アプリ本体をGitまたはDropbox保存ZIPから復元します。
4. `timecard_app` を新しいMacへ置きます。
5. Supabase URL、anon key、service role keyを設定します。
6. Cloudflare Pagesへ再デプロイします。
7. 管理者IDでログイン確認します。
8. 月別CSVが出せるか確認します。

注意:

- Supabaseが生きている場合、勤怠データはSupabaseから読み直せます。
- Supabase自体を作り直す場合、JSON/CSVバックアップから復元します。
- パスワードは復元できないため、スタッフには仮パスワードを再発行します。

## 障害時の対応

### アプリ画面が開かない

1. 紙メモに出勤、休入、休戻、退勤を書きます。
2. 復旧後、手書きで入力します。
3. 社労士さんへコメントに状況を書きます。

### 打刻できない

1. 端末、通信、Chromeを確認します。
2. それでも無理なら紙メモに残します。
3. 後で手書き入力します。

### CSVが出ない

1. Dropboxの自動バックアップを確認します。
2. CSV定期保存の `latest/` を確認します。
3. 完全バックアップの `latest/payroll/` の月別CSVを使います。
4. それでも無ければSupabaseから再出力します。

### Macが壊れた

1. アプリはスマホから引き続き使えます。
2. Dropboxにバックアップが残っています。
3. 新しいMacで復元します。

### Supabaseに障害がある

1. アプリへの保存が失敗する可能性があります。
2. 紙メモに戻します。
3. 復旧後に手書き入力します。

## 本格導入前に確認すること

- 1〜2か月分のCSVが問題なく出る
- 大石さんがCSVを見て判断できる
- バックアップが自動で残る
- バックアップ失敗に気づける
- 紙に戻る運用ルールが決まっている

この5つが揃ってから、紙タイムカードをやめるか判断します。
