月額約1万円の F-Chair+ を、Google無料枠 + Python で運用コスト 月額0円で代替する自作ツールの設計書です。スタッフ1〜5名・Windows/Mac混在環境を前提に、定期スクリーンショット・稼働時間計測・管理者ダッシュボード・無変化アラート/日報自動生成を実現します。
「結局いくらかかって、何ができて、どう作るのか」を1枚で。
F-Chair+(推定 約1万円/月・1〜5名で年間12万円超)→ 自作で年間コスト 0円(開発工数のみ)
公式サイトおよびIT比較メディアを調査。代替すべき機能を分解し、自作版の要否を判定した。
| F-Chair+ 機能 | 仕様(調査確定) | 自作版の扱い | 判定 |
|---|---|---|---|
| ワンクリック着席/退席 | 専用アプリで「着席」「退席」をワンクリック。中抜け対応。 | 常駐アプリのトレイ/ウィンドウにボタン配置 | MVP必須 |
| PC画面ランダム撮影 | 着席中のみ、1時間に6回(平均10分間隔)ランダムに撮影し保存 | 同等を再現(10分±ランダムで撮影) | MVP必須 |
| 稼働時間記録・集計 | 日別・月別の作業時間、タスク別記録、時間バー可視化 | 稼働ログ→スプレッドシート集計 | MVP必須 |
| 管理者による閲覧 | 管理者と本人のみ閲覧。部下の勤務一覧・スクショ確認 | Googleスプレッドシート+Driveフォルダ=ダッシュボード | MVP必須 |
| 稼働無変化アラート | PC画面に変化がないと管理者へ通知 | 連続スクショの画像差分→閾値超で通知 | MVP対象 |
| 業務報告書の自動生成 | スクショ付き業務報告書を自動作成 | 日次でHTML/PDF日報を自動生成 | MVP対象 |
| プライバシーぼかし | 画面をぼかしメール等の文字を読めなくする | 画像にブラー処理を後付け可能に | DEFER(v2) |
| GPS勤務位置情報 | 着席中のみ移動経路を地図表示。プライバシーエリア機能 | 監視色が強く社内利用では不要 | 対象外 |
| 残業/深夜労働アラート | 規定時間超でメール通知 | 稼働ログから閾値判定で通知 | DEFER(v2) |
| スマホアプリ着席 | スマホからも着席可能 | PC稼働計測が目的のため不要 | 対象外 |
「なぜ0円で回るのか」を構成要素ごとに証明する。
| 必要な機能 | F-Chair+ の手段 | 自作版のゼロコスト手段 | コスト |
|---|---|---|---|
| 常駐・スクショ・着席UI | 専用SaaSアプリ | Python常駐アプリ(mss / Pillow / pystray) | 0円 |
| スクショ保管 | SaaSサーバー | Googleドライブ無料15GB(rclone自動同期) | 0円 |
| 稼働ログ集約・集計 | SaaS管理画面 | Googleスプレッドシート(GAS Webアプリで追記) | 0円 |
| 管理者ダッシュボード | SaaS管理画面(課金) | スプレッドシート+Driveフォルダをブラウザ閲覧 | 0円 |
| アラート通知 | SaaSメール | Gmail SMTP もしくは GAS のメール送信(無料枠) | 0円 |
| 配布パッケージ | SaaSインストーラ | PyInstallerで .exe / .app 化(Python不要で配布) | 0円 |
| サーバー | SaaSクラウド | 不要(各PC→Googleへ直接。常時起動サーバーなし) | 0円 |
「ツール形式(常駐アプリ)」というご希望を、混在OS・ゼロコストに最適化した構成。
| レイヤ | 採用技術 | 選定理由(混在OS×ゼロコスト) |
|---|---|---|
| 言語/ランタイム | Python 3.11+ | Windows/Macで同一コード。OSS資産が豊富。 |
| スクリーンショット | mss | 高速・軽量・クロスプラットフォーム。マルチモニタ対応。 |
| 画像処理/圧縮 | Pillow | JPEG圧縮・リサイズ・(v2でブラー)。容量削減の要。 |
| 常駐UI(着席/退席) | pystray + Pillow | タスクトレイ常駐。F-Chairのワンクリック操作を再現。 |
| Driveアップロード | rclone | OAuth処理を内蔵。自前でAPI実装不要。堅牢な再送。 |
| 稼働ログ集約 | Google Apps Script Webアプリ | doPostでスプレッドシートに行追記。サーバーレス・無料。 |
| ダッシュボード | Googleスプレッドシート | 関数/ピボットで集計・グラフ化。学習コストほぼ0。 |
| アラート/日報 | Gmail SMTP or GAS | 無変化検知時・日次でメール。無料枠内。 |
| 配布 | PyInstaller | 各OSで単一実行ファイル化。スタッフ側にPython環境不要。 |
DRY_RUN=true を既定とし、ローカル動作確認をキーなしで完走可能にする。Google連携が未設定でもローカル単体で全機能テストが通るため、安全に開発・検証できる(黄金ルール3:破壊的/外部送信操作の安全装置)。
spec-driven-autobuild の各フェーズに沿った、GO判定付き段階計画。MVP完成まで約3週間。
userID_YYYYMMDD_HHMMSS.jpg)| ゲート | 合格条件 |
|---|---|
| 機能 | MVP全FR(FR-01〜FR-09)が受入基準を満たす |
| 安全 | 退席中は撮影されない/DRY_RUNで誤送信なし/古いデータ自動削除が動作 |
| 容量 | 1〜5名・想定撮影量で15GB枠に収まる試算と実測が一致 |
| クロスOS | Windows・Mac両方で .exe/.app が正常起動・撮影・同期 |
| 法務 | 同意書・運用ルールが整備され、スタッフ通知が完了 |
IEEE 29148 / ISO 25010 準拠。全Must要件に受入基準(AC)とテストID(TC)を接続。
目的: 月額課金SaaS「F-Chair+」を、運用コスト0円の自作常駐ツールで代替し、社内スタッフ(1〜5名)の稼働時間とPC作業状況を、管理者がブラウザで一元把握できるようにする。
| 区分 | 内容 |
|---|---|
| IN SCOPE | 着席/退席による稼働計測、10分間隔ランダムスクショ、Drive/Sheets集約、管理者ブラウザ閲覧、無変化アラート、日報自動生成、Win/Mac配布 |
| DEFER(v2) | プライバシーぼかし、残業/深夜アラート、タスク別記録の高度化 |
| 対象外 | GPS位置情報、スマホアプリ、リアルタイム画面ライブ配信 |
| 役割 | 権限 |
|---|---|
| スタッフ(本人) | 自分の着席/退席操作、自分のスクショ・稼働の閲覧 |
| 管理者 | 全スタッフの稼働一覧・スクショ・アラート・日報の閲覧 |
| システム管理者(開発担当=あなた) | Googleアカウント・rclone設定・配布パッケージ管理 |
Given-When-Then 受入基準付き。優先度:Must Should Could
| ID | 機能 | 受入基準(Given-When-Then) | 優先 | TC |
|---|---|---|---|---|
| FR-01 | 着席/退席記録 | 常駐中、トレイの「着席」を押すと→稼働開始時刻が記録され状態が「着席中」になる。「退席」で終了時刻が記録される。 | Must | TC-01 |
| FR-02 | 中抜け対応 | 1日に複数回の着席/退席があっても→各区間が合算され実稼働時間として集計される。 | Must | TC-02 |
| FR-03 | ランダムスクショ | 着席中である限り→平均10分間隔(ランダム揺らぎ付き、1時間あたり約6回)で画面を撮影しローカル保存する。 | Must | TC-03 |
| FR-04 | 退席中の撮影停止 | 退席中またはアプリ未起動の間は→一切スクショを撮影しない。 | Must | TC-04 |
| FR-05 | スクショのDrive同期 | ネット接続時→ローカルのスクショがユーザー別Driveフォルダへ自動アップロードされる。切断中は保留し復帰後に再送する。 | Must | TC-05 |
| FR-06 | 稼働ログのSheets集約 | 退席/日次タイミングで→稼働区間がスプレッドシートに行追記され、日別/月別に集計される。 | Must | TC-06 |
| FR-07 | 管理者ダッシュボード閲覧 | 管理者がブラウザでスプレッドシート/Driveを開くと→全スタッフの稼働時間とスクショを一覧確認できる。 | Must | TC-07 |
| FR-08 | 無変化アラート | 連続するスクショの画像差分が閾値未満の状態が一定回数続いたら→管理者へメール通知する。 | Should | TC-08 |
| FR-09 | 日報自動生成 | 1日の終了時→スクショ一覧と稼働サマリーをまとめたHTML/PDF日報を自動生成する。 | Should | TC-09 |
| FR-10 | 古いデータ自動削除 | 保持期間(既定60日)を超えたスクショは→自動削除し、無料15GB枠を維持する。 | Must | TC-10 |
| FR-11 | 自動起動 | PC起動時→常駐アプリが自動起動する(タスクスケジューラ / launchd)。 | Should | TC-11 |
| FR-12 | プライバシーぼかし | 設定ON時→スクショに自動ブラーを適用し文字情報を判読不能にする。 | Could / v2 | TC-12 |
| データ | 形式・保存先 | 項目 |
|---|---|---|
| スクリーンショット | JPEG(圧縮)/ローカル一時→Driveユーザー別フォルダ | userID, 撮影時刻, モニタ番号 |
| 稼働ログ | ローカルCSV→スプレッドシート | userID, 着席時刻, 退席時刻, 稼働秒数, 日付 |
| 設定 | ローカル設定ファイル(JSON) | userID, 撮影間隔, 保持日数, DRY_RUN, ぼかしON/OFF |
| 日報 | HTML/PDF/Drive | 日付, 稼働合計, スクショ一覧, アラート有無 |
ISO 25010 の品質特性で定量化。0円運用が破綻しないことを数値で裏付ける。
| 前提 | 値 |
|---|---|
| 撮影頻度 | 6枚/時 × 8時間 = 48枚/日・人 |
| 1枚あたり(JPEG圧縮・リサイズ後) | 約 100〜150KB |
| 1人1日 | 48枚 × 150KB ≒ 約7MB |
| 5人 × 稼働20日/月 | 7MB × 5 × 20 ≒ 約700MB/月 |
| 保持60日で自動削除 | 常時 約1.4GB 程度で頭打ち |
| 特性 | 要件(定量) |
|---|---|
| 性能効率性 | スクショ1回のCPU占有 <1秒、常駐時メモリ <150MB、業務PCの体感影響なし |
| 信頼性 | ネット断時はローカル保留→復帰後100%再送。アプリ異常終了時も次回起動で復旧 |
| 使用性 | スタッフ操作は「着席/退席」2ボタンのみ。管理者は既存のスプレッドシート操作のみ |
| 保守性 | OS差分はアダプタ層に集約、コア1コードベース。設定はJSON外出し |
| 移植性 | Windows10/11・macOS両対応。Python不要の単一実行ファイルで配布 |
| セキュリティ | Drive/Sheetsは管理者と本人のみ共有。退席中無撮影。保持期間後自動削除 |
技術より先に固めるべき領域。ここを飛ばすと労務トラブル・法令違反リスクが残る。
| ID | リスク/未決 | 影響 | 対策 |
|---|---|---|---|
| R-01 | 従業員監視への心理的反発 | 高 | 目的説明・同意取得・着席中のみ撮影で透明性確保(§7) |
| R-02 | 法令・労務対応の不備 | 高 | 運用ルール/同意書を本番前に整備。社労士確認を推奨 |
| R-03 | Google無料枠の規約・容量変更 | 中 | 容量は9%使用で余裕。規約は一次ソースで定期確認 |
| R-04 | Macのスクショ/常駐の権限(画面収録許可) | 中 | 初回に画面収録・アクセシビリティ許可手順を案内に明記 |
| R-05 | スタッフによるアプリ停止/未起動 | 中 | 自動起動(FR-11)+稼働ログの欠落で検知 |
| R-06 | rclone/GASの初期設定がやや技術的 | 低 | システム管理者が一括セットアップ。手順書を整備 |