📊① 進捗ステータス
A案を本採用。Claude が実施できるコード実装・ドキュメント・配布準備はすべて完了(100%)。残りは認証・配布・法務承認など あなた(macdeji)の実作業のみで、その下準備は全て整えてあります。
Claude担当:コード
Claude担当:配布準備・ドキュメント
あなた担当:運用開始
分担サマリー: 「作る・整える・検証する」はすべて完了。あなたがやるのは「① rclone/SMTP に認証情報を入れる ② 各PCへ配布して自動起動 ③ 同意書を承認しスタッフへ通知 ④
dry_run=false にして開始」の4ステップだけ。各ステップは付属ツール(--check / check_rclone.sh / --test-email / autostart_*)で最小手数に短縮済み。✅ 完了済み
- 中核機能(A/G共通):着席/退席ワンクリック計測・10分ランダムスクショ(着席中のみ)・rclone同期・無変化アラート・日報自動生成・保持期間での自動削除・PyInstaller配布スクリプト
- A案:SQLite永続化+自己完結HTMLダッシュボード(外部CDN不使用)
- G案:ローカルCSV → GAS Web App → Googleスプレッドシート集約(Python↔GAS型契約の本番ブロッカーは検出・修正済み)
- アラートのクールダウン実装(
alert_cooldown_sec既定1800秒=30分。連続メール送信を防止) - diff_score(画面差分スコア)の永続化(A=SQLite / G=CSV 両方)
- ダッシュボード刷新:時刻目盛り付きタイムライン(着席帯をライトグリーン表示)・セッション明細(着→退カード)・時間帯別スクショ・稼働量バー(8時間=100%/%併記)
- ユニットテスト:A案 38 passed / G案 73 passed(+GAS E2E OK)。全機能 DRY_RUN 既定で安全
✅ 今回(2026-06-30 後半)に追加で完了したもの
- 採用案を A案に確定。GitHub プライベートリポジトリ
dejiinaworks-png/openchairを作成・デプロイ済み - 基準勤務時間を
standard_workday_sec(config)で指定可能に(稼働量バーの100%基準) - ぼかし強化:
blur_strength(半径)を config 化し撮影時に適用 - 残業アラート:
overtime_threshold_sec超過で通知(クールダウン付き) - セットアップ補助 CLI:
--check(準備状況点検)/--test-email(テスト送信) - 自動起動スクリプト:
build/autostart_mac.sh(launchd)/build/autostart_windows.bat - rclone 接続チェック:
build/check_rclone.sh - Mac 配布物のビルド検証(PyInstaller で
OpenChair.app生成・起動確認) - 法務ドラフト3点(
docs/法務・運用書類/:事前通知文・同意書・運用ルール) - ユニットテスト 38 → 47 passed に拡充
👤 あなたの判断が要る設定(推奨値は用意済み)
- 保持期間(既定60日)/ 通知先メール / ぼかしON・OFF / 所定労働時間 / 対象スタッフの確定
🗒️② ToDoリスト(A案 / 分担明確化)
凡例:✅ Claude完了 👤 あなたの実作業(下準備済み) 優先度 必須高中
A. Claude が完了させたこと(✅ すべて完了)
- A案 本採用の確定 + GitHub プライベートリポジトリ作成・デプロイ
- 残コード実装(基準勤務時間 config化/ぼかし強化/残業アラート)+テスト 47 passed
- セットアップ補助ツール(
--check/check_rclone.sh/--test-email) - 自動起動スクリプト(Mac launchd / Windows スタートアップ)
- Mac 配布物(
OpenChair.app)のビルド検証 - 法務ドラフト3点(事前通知文・同意書・運用ルール)→
docs/法務・運用書類/ - INSTALL.md / README / 本ページの整備
B. あなたの実作業 — 外部サービス認証(👤 ここだけは人手が必須)
- rclone を Google Drive に接続(ブラウザ認証)。確認は
bash build/check_rclone.sh必須 - SMTP 設定(送信元メール+アプリパスワードを config.json へ)。確認は
python3 -m src.app --test-email中 - 準備が整ったら
dry_run=falseに切り替え(点検は--check)高
C. あなたの実作業 — 配布・自動起動(👤 各PCでの操作)
- Mac:
python3 build/build_pyinstaller.pyで .app 生成(手順検証済み)/Windows:Windows機で同コマンド実行して .exe 生成高 - 各PCへ配布し自動起動を登録:
bash build/autostart_mac.sh/build\autostart_windows.bat高 - Mac は「システム設定 → 画面収録」で許可(INSTALL §2)中
- 実機テスト:着席→撮影→同期→退席で停止、を実際のWin/Macで確認高
D. あなたの実作業 — 法務(👤 ドラフトは作成済み、承認&通知が必要)
docs/法務・運用書類/の3ドラフト(事前通知・同意書・運用ルール)に会社名等を記入し、社労士/弁護士の確認を受ける必須- スタッフへ事前通知し、同意を取得(撮影開始より前に)必須
🛠️③ ToDoリスト実行計画
依存関係に沿った推奨順序。Phase 0 を決めないと Phase 2 以降が分岐するため、最初に採用案を確定します。
| フェーズ | やること | 前提 / 依存 | 担当 |
|---|---|---|---|
| Phase 0 意思決定 |
A案 / G案 の採用を決定。保持期間・通知先・ぼかし要否・対象者を確定。 | — | あなた(要判断) |
| Phase 1 法務先行 |
同意書ひな形・運用ルール文書を作成 → スタッフへ通知・同意取得。 技術より先に着手(撮影開始前に同意が必要)。 |
Phase 0 | あなた+Claude(文書ドラフト) |
| Phase 2 外部設定 |
rclone↔Drive 接続。 【G案】GAS デプロイ+スプレッドシート準備。 SMTP 設定。 config.json に反映。 |
Phase 0 | あなた(手順はClaudeが伴走) |
| Phase 3 DRY_RUN検証 |
1台で dry_run=true のまま自己検証 → 実接続テスト(小規模で false)。同期・Sheets追記・メールを確認。 |
Phase 2 | Claude+あなた |
| Phase 4 配布 |
PyInstaller でビルド → 各PCへ配布 → 自動起動登録 → 実機(Win/Mac)テスト。 | Phase 3 | Claude(ビルド)+あなた(配布) |
| Phase 5 本運用 |
全台 dry_run=false で稼働開始。ダッシュボード/スプレッドシートで日次確認。保持期間で自動削除されることを確認。 |
Phase 4+Phase 1 | あなた(日次運用) |
| Phase 6 改善(任意) |
ぼかし強化・Sheets可視化・残業アラート等を必要に応じて追加。 | Phase 5 | Claude |
クリティカルパス: Phase 0 →(Phase 1 と Phase 2 は並行可)→ Phase 3 → Phase 4 → Phase 5。Phase 1(同意取得)が完了するまで本番撮影は開始しないのが鉄則です。
⚡④ 使い方(クイックスタート)
両案共通。フォルダだけ openchair_A_sqlite か openchair_G_gsheets に読み替えます。
# 1. 依存インストール(各PC、初回のみ) cd openchair_A_sqlite # または openchair_G_gsheets python3 -m pip install -r requirements.txt # mss, Pillow, pystray(G案は +requests) # 2. 設定ファイルを用意(user_id 等を編集) cp config.example.json config.json # 3. 起動(トレイ常駐:着席/退席ボタン) python3 -m src.app # ヘッドレス/CLIで動かす場合(s=着席 e=退席 q=終了): python3 -m src.app --no-tray # 4. 動作確認(GUI・ネット不要の DRY_RUN 自己検証 → "SELFTEST OK") OPENCHAIR_DRY_RUN=1 python3 -m src.app --selftest # テスト python3 -m pytest -q # 47 passed # ▼ セットアップ補助ツール(本番前に便利) python3 -m src.app --check # 準備状況を点検(rclone/SMTP/dry_run 等) bash build/check_rclone.sh gdrive # rclone↔Drive 接続テスト python3 -m src.app --test-email # SMTP設定でテストメール実送信 bash build/autostart_mac.sh # Mac: ログイン時自動起動を登録 # 配布物のビルド(実行したOS向け。Mac=.app / Win=.exe) python3 build/build_pyinstaller.py --clean
ダッシュボードの開き方(A案): アプリ起動中に日報を生成すると
G案は集約先の Googleスプレッドシートがそのまま管理画面です。
data/dashboard/dashboard.html が更新されます。ブラウザでこのファイルを開けば、タイムライン・稼働量・スクショが見られます。G案は集約先の Googleスプレッドシートがそのまま管理画面です。
📖⑤ 使い方マニュアル(詳細)
5-1. これは何をするツール?
各スタッフのPCに常駐し、「着席」ボタンを押している間だけ、10分間隔(±ランダム)で画面のスクリーンショットを撮り、稼働時間を記録します。「退席」で完全停止します。データは Google ドライブ/スプレッドシートに集約され、管理者はダッシュボードで確認します。月額コストは0円です。
5-2. 日々の操作(スタッフ)
- 仕事を始める → トレイアイコンから「着席」(CLIなら
s) - 離席・終業 → 「退席」(CLIなら
e)。退席中は撮影されません - 終了 → トレイの「終了」(CLIなら
q)。着席中でも安全に退席処理されます
5-3. 管理ダッシュボードの読み方(A案)
- タイムライン(時刻目盛り付き):横軸が時刻(08:00〜21:00)。ライトグリーンの帯=着席(稼働)していた時間帯。帯にマウスを乗せると着席〜退席の時刻が出ます。
- 稼働サマリー:ユーザー×日別の合計稼働・セッション数。稼働量バーは「8時間勤務を100%」とした割合(%併記)。例:合計1時間 → 13%。
- セッション明細:着席→退席の1回ごとの時刻と長さ(例「19分0秒」)。
- 直近スクリーンショット:9時〜/14時〜… と時間帯別に表示。緑バッジ=画面に変化あり、赤バッジ(diff < 0.02)=ほぼ無変化(席を外している可能性)。
サンプル:openchair_A_sqlite/data/dashboard_demo/dashboard.html をブラウザで開くと実例が見られます。
5-4. 設定ファイル(config.json)の主な項目
| キー | 既定値 | 意味 |
|---|---|---|
user_id | "staff01" | スタッフ識別子(各PCで変える) |
capture_interval_sec | 600 | スクショ間隔の基準(秒)=10分 |
capture_jitter_sec | 180 | 間隔のランダム揺らぎ(±秒) |
retention_days | 60 | この日数を過ぎたデータ/画像を自動削除 |
dry_run | true | true=外部送信しない安全モード。本番は false |
blur_enabled | false | スクショをぼかして保存(プライバシー) |
work_start / work_end | 00:00 / 23:59 | 撮影する勤務時間帯(タイムライン軸にも使用) |
drive_remote / drive_dir | "" / openchair | rclone のリモート名と保存先フォルダ |
alert_enabled | true | 無変化アラートメールの有効化 |
no_change_threshold | 0.02 | 画面差分の閾値。これ未満なら「変化なし」 |
no_change_count | 3 | 連続この回数「変化なし」でアラート |
alert_cooldown_sec | 1800 | アラートの最小再送間隔(秒)=30分。連続メール防止 |
overtime_threshold_sec | 0 | 1日の合計稼働がこの秒数を超えたら残業アラート。0=無効(例:9h=32400) |
blur_strength | 8 | ぼかし半径(px)。blur_enabled=true のとき適用 |
standard_workday_sec | 28800 | ダッシュボード稼働量バーで100%とする所定労働(秒)=8時間 |
smtp_host / port / user / pass | "" / 587 | アラート送信元のSMTP設定 |
alert_email | "" | アラートの宛先(管理者) |
db_path A案 | data/openchair.db | SQLite DB の保存先 |
csv_dir G案 | data/logs | ローカルCSVログの保存先 |
gas_url G案 | "" | GAS Web App の URL(POST先) |
設定は 環境変数でも上書き可能です。例:
OPENCHAIR_USER_ID=tanaka / OPENCHAIR_DRY_RUN=0(キーを大文字にして OPENCHAIR_ を付ける)。5-5. 外部サービスの初期設定(要点)
rclone(両案共通)
# インストール brew install rclone # Mac winget install Rclone.Rclone # Win # Google Drive リモート作成 rclone config # n → 名前=gdrive → drive を選択 → ブラウザ認証 # config.json に反映 # "drive_remote": "gdrive" # 接続テスト rclone lsd gdrive:
詳細:各フォルダ INSTALL.md の §1。
GAS+Sheets(G案のみ)
- スプレッドシートを新規作成し、
sessions/screenshotsシートを用意 - 拡張機能 → Apps Script に
gas/Code.gsを貼り付け - 「デプロイ → ウェブアプリ」で公開し、表示された URL を
gas_urlに設定 - 動作テスト後、本番は
dry_run=false
詳細:openchair_G_gsheets/gas/SETUP.md と INSTALL.md §3〜4。
5-6. 配布と自動起動
# 配布物をビルド(実行したOSに応じて .exe / .app を生成) python3 build/build_pyinstaller.py # 生成物を各PCへコピー。スタッフ側に Python は不要。
- Mac:launchd(
~/Library/LaunchAgentsに plist 登録)でログイン時起動。詳細 INSTALL §3 - Windows:スタートアップフォルダにショートカット、または タスクスケジューラ
- Mac:初回は「システム設定 → プライバシーとセキュリティ → 画面収録」で許可が必要
5-7. トラブル時
- まず
OPENCHAIR_DRY_RUN=1 python3 -m src.app --selftestで「SELFTEST OK」が出るか確認 - スクショが撮れない(Mac)→ 画面収録の許可を確認
- 同期されない →
rclone lsd gdrive:が通るか/drive_remoteの綴り確認 - アラートが来ない →
alert_enabled/ SMTP設定 /dry_runを確認(dry_run中は送信されません) - メールが多すぎる →
alert_cooldown_secを伸ばす(既定30分)
⚖️⑥ 法務・運用上の必須事項
本番投入前に必ず対応してください。 従業員PCの画面取得は、日本の労務・個人情報保護法上、原則として
①利用目的の明示 ②事前通知 ③本人同意 ④目的外利用の禁止 が必要です。
技術側では以下を実装済みです(運用ルールの裏付けになります):
- 「退席」で撮影を完全停止(常時監視ではない)
- 保持期間(既定60日)を過ぎたデータ/画像を自動削除
- DRY_RUN 既定で、設定前に誤って外部送信しない
- 本人も自分の記録(日報・ダッシュボード)を閲覧可能
それでも、同意書と運用ルールの整備(Phase 1)を撮影開始より前に完了させてください。ひな形ドラフトが必要なら作成をお手伝いできます。