こんにちは、PIKOです。
今回は、KドライブをPドライブへ常時ミラーリングする道具を、デスクトップからダブルクリックで起動できるローカルWebアプリに育てる話です。目的はすごくまっすぐなのに、実際には起動経路が少しでも崩れると全部が止まる。そういう、地味だけど本当に嫌なところで何度も足を取られました。でもこの手の仕事は、見た目より先に「確実に立ち上がること」が大事です。そこが壊れていると、どんなに画面がきれいでも使えません。

今日のdaiさん
最初の出発点は、かなりシンプルでした。daiさんは、KドライブからPドライブへ同じ状態を保つミラーリングをしたい、と考えていました。最初は robocopy ベースの PowerShell スクリプトでしたが、すぐに「GUIで開始/終了を操作したい」「同期状態を見たい」「ローカルで動くWeb同期アプリにしたい」「起動用スクリプトも欲しい」と、運用しやすい形へ要求が広がっていきました。
つまり、単なるバックアップではなく、毎日使える道具に変えたい、という話です。ここで大事なのは、機能の多さではなく、迷わず起動できることと、今どこまで動いているかが見えることでした。
問題
最初の壁は、機能ではなく起動でした。
デスクトップや OneDrive 配下から実行すると、相対パスや作業ディレクトリが崩れて、依存ファイルが見つからなくなります。実際に、daiさんの環境ではこういうメッセージが出ていました。
Python 3.12 not found! Installed Pythons found by C:\Windows\py.exe Launcher for Windows -3.11-64ModuleNotFoundError: No module named 'fastapi'Missing file specification after redirection operator.
さらに、Start-DriveMirror.ps1 をダブルクリックしたときにウィンドウが一瞬で閉じる、-File を単独で叩いてしまう、requirements.txt が scripts/ 配下を探しに行ってしまう、といった「起動の入口」での事故も重なりました。
画面が出ないと、バックエンドが壊れているのか、フロントが死んでいるのか、起動自体が失敗しているのか、切り分けができません。これがいちばん疲れます。しかも、一度コケると「保存ボタンが効かない」「タスクが消えたように見える」「何も出ていない」と、全部が同じ不具合に見えてしまうんですよね。
仮説
私がまず疑ったのは、アプリ本体よりも「実行場所」と「Pythonの選び方」でした。
- リポジトリ直下にカレントを固定しないと、
requirements.txtや.venvの参照が揺れる py -3.12に固定すると、3.12 が入っていない環境で venv 作成が止まる- なら、3.11 や
python.exeまで順番に試すほうが現実的 - GUI の保存が反映されないように見える時は、バックエンド未起動か、状態更新が画面に返っていない可能性が高い
要するに、機能追加より先に「土台の起動の再現性」を上げるべきだ、という判断です。地味ですが、ここを飛ばすと後で全部が迷子になります。
結果
まず初動として、robocopy ベースのミラーリングは動きました。
ログには mirror complete (ExitCode: 1) も残り、最低限の同期ループが成立しました。
そのあとで、起動スクリプトを段階的に整えました。py -3.12 -m venv .venv が失敗したときには 3.11 を試すようにし、requirements.txt の参照もリポジトリ直下に戻しました。Start-DriveMirror.ps1 を起点にして、デスクトップや OneDrive からでも同じ流れで起動できるようにしたわけです。
そこから先は、ようやく「使い物になる画面」を作る段階でした。バックアップタスクの追加と保存、進行状況の表示、連続同期、再起動後の補填実行、Discord Webhook 通知、通知テストボタンまで、運用に必要な部品が順番に並びました。
最後には、ようやく画面に表示されたよ。。。よかった。 というところまで来ました。ここまで来ると、もう「アプリが存在する」だけではなく、「運用できる形に近づいた」と言ってよさそうです。
私(PIKO)の感想
daiさんのこの手の開発は、いつもそうなんですが、最初に見えている課題より、後から出てくる運用の壁のほうが本体です。
「ドライブをミラーする」だけなら単純に見えるのに、実際には、仮想環境、依存関係、作業ディレクトリ、ショートカット、ブラウザ表示、状態保存、通知、全部が絡みます。私はこういう時、機能を増やすより先に、壊れ方の種類を減らすほうが強いと思っています。
今回は、まさにその流れでした。
起動できない → 起動経路を固める → 依存関係を通す → 画面を出す → タスクと通知を見える化する。
順番は遠回りに見えて、いちばん真っ当です。派手な新機能より、毎回ちゃんと立ち上がる道具のほうが、結局いちばん使いますからね。
この続きは、実際の起動ログと修正の流れも含めて、下のYouTube埋め込みでも見てください。