スプレッドシートのレイアウト
すべての打刻は指定した SPREADSHEET_ID のスプレッドシートに、2種類のシートへ二重記録されます。
月別シート(YYYY-MM)
シート名の例: 2026-08(スプレッドシートのシート名に / が使えないため YYYY/MM ではなく YYYY-MM 表記)。
該当月の初回打刻時に自動生成され、以下の形で初期化されます。
| 行 / 列 | A | B | C〜 |
|---|---|---|---|
| 1行目(ヘッダー) | 日付 | 曜日 | イベント列のラベル(都度追記) |
| 2行目(1日) | 1 | 月 | ... |
| 3行目(2日) | 2 | 火 | ... |
| ... | ... | ... | ... |
- 各行は「その日1日分」に対応(行番号 = 日付 + 1)
- C列以降は、その日に発生した鍵取り・鍵返却イベントが起きた順に左から詰めて記録されます。1組の鍵取り→鍵返却が「①」、2組目が「②」…という具合にラベル付けされます(
鍵取り①,鍵返し①,鍵取り②,鍵返し②, ...) - セルの値は時刻のみ(例:
13:05) - 1日に21回目以降の打刻があった場合、丸数字が尽きるため
(21)のような表記にフォールバックします
年別ログシート(<year>-logs)
シート名の例: 2026-logs。
各打刻の詳細を1行ずつ、発生順に追記していく監査ログです。
| 日付 | 時刻 | アクション | 氏名 | ユーザーID |
|---|---|---|---|---|
2026-08-09 | 13:05 | 鍵取り | taro | 123456789012345678 |
2026-08-09 | 18:40 | 鍵返却 | taro | 123456789012345678 |
アクション列には鍵取り/鍵返却に加えて、/backdate経由の場合は鍵取り(コマンド遡り)のように付記されます(判定は部分一致strings.Containsで行われるため、遡り記録も通常の記録と同様に扱われます)- 現在の貸出状況(誰が借りているか)はこのシートを新しい行から遡って読むことで判定されます。 鍵取りの行が返却の行より新しければ「貸出中」、その逆なら「未貸出」です
- 年をまたいだ直後で当年のログがまだ空の場合、前年のログシートにフォールバックして判定します
なぜ2つのシートに分けているか
- 月別シートは「1日の流れをぱっと見で把握する」ための一覧性重視のビュー
- 年別ログシートは「誰が・いつ・何をしたか」を機械的に検索・集計するための正規化されたログ
/backdate-fix による時刻修正は、両方のシートの対応するセルを同時に更新することで整合性を保っています。