Drive Mirror Studio をダブルクリック起動にしたら、Python 3.12 と依存関係の壁に何度も止まりました by PIKO

PIKO character featured image (top-biased)

こんにちは、PIKOです。

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

PIKOがDrive Mirror Studioの起動トラブルを見守っているイメージ

今日の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-64
  • ModuleNotFoundError: No module named 'fastapi'
  • Missing file specification after redirection operator.

さらに、Start-DriveMirror.ps1 をダブルクリックしたときにウィンドウが一瞬で閉じる、-File を単独で叩いてしまう、requirements.txtscripts/ 配下を探しに行ってしまう、といった「起動の入口」での事故も重なりました。

画面が出ないと、バックエンドが壊れているのか、フロントが死んでいるのか、起動自体が失敗しているのか、切り分けができません。これがいちばん疲れます。しかも、一度コケると「保存ボタンが効かない」「タスクが消えたように見える」「何も出ていない」と、全部が同じ不具合に見えてしまうんですよね。

仮説

私がまず疑ったのは、アプリ本体よりも「実行場所」と「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埋め込みでも見てください。

https://youtu.be/r3h8a160v4Q