RDP のブラインド操作問題から MS Store 登録まで:RDP Heartbeat 開発記
2026-03-29
Tags: 開発メモ · 製品 · RDP · Windows
はじめに:Vibe Coding 中の「招かれざる客」
私はよく UDP プロトコルの RDP(リモートデスクトップ)マシンに接続してコードを書いており、あの集中しつつもリラックスした「vibe coding」状態に入ります。
その過程で、時間のかかる操作に遭遇するのは避けられません:反応の遅い API を待っていたり、スクリプトがバックグラウンドで長いサイレント処理を行っていたり。画面が一つのウィンドウに固定されたまま長時間経過するのは、ごく普通のことです。通常は気にせず、ブラウザを開いたり、椅子に寄りかかって終わるのを待ちます。
しかしその後、極めてイライラさせる現象を発見しました:タスクはとうに終わっているのに、RDP の画面だけが完全にフリーズしていることがあるのです。
TCP 接続でも同じ問題があるかは確かではありません(TCP はレイテンシが比较高、私は UDP の滑らかさを好んでいます)が、UDP モードではこの「シュレーディンガーのフリーズ」が確実に存在します。
最悪の仕様:切断されていない、ただ見えなくなっているだけ
ネットワークが悪くて RDP が「接続が切断されました」とポップアップを出してくれるなら、むしろ好都合です——少なくとも再接続すべきだと分かりますから。
しかし最も苦痛なのは、画面は更新されなくなったのに、キーボードとマウスのイベントにはまだ応答しているということです!
想像してみてください:静止した画面を見つめ、スクリプトがまだ終わっていないと思っています。しびれを切らしてマウスを動かしてみても、画面に変化はありません。適当にクリックしたり、Enter を何度か叩いて「起こそう」としても……やはり沈黙のまま。
最終的に RDP ウィンドウを手動で閉じて、再接続します。接続し直して初めて恐怖の事実が発覚します:**さっきの「ブラインド操作」がすべてリモートマシンで実際に実行されていたのです。**視覚的フィードバックのない操作は、開発者にとってまさに悪夢です。
複雑なパネルはいらない、一目の安心感だけあればいい
この問題に対する私の要求は極めてシンプルでした:画面の隅にひっそりと浮かぶ、小さなものが一つだけあればいい。
それが点滅していれば、画面がリアルタイムで更新されていると分かり、安心して API のレスポンスを待てます。もし点滅が止まっていれば、「ああ、またフリーズした、再接続しなきゃ」と即座に気づき、ブラインド操作の災難を完璧に回避できます。
思わぬ副産物:魔法的な「キープアライブ」効果
こうして、RDP Heartbeat が誕生しました。クリックスルーをサポートし、通常の操作を絶対に妨げない——存在感を極限まで抑えるように設計されました。その唯一の使命は、リモート作業時に最も必要とされる「視覚的な確認感」を提供することです。
しかし面白いことが起こりました:これを使い始めてから、RDP 画面がフリーズする現象がほとんど発生しなくなったのです。
これは完全に予想外の喜びでした。私の推測では、この呼吸ライトが画面の隅でピクセルレベルの更新を続けていることで、継続的な画面更新がアプリケーション層の「キープアライブ」メカニズムとして機能し、RDP セッションにアクティブなデータストリームを維持し続けているのではないかと思います。ただ正直なところ、基盤となるネットワークプロトコルの仕組みを深く調査したわけではないので、断言はできません。とにかく、魔法のように機能しています。
せっかく作ったのだからストアに出そう(そして踏んだ罠)
画面の隅で静かに点滅するこの小さなものを見て、せっかく作ったのだから、同じ悩みを抱える他の開発者にも使ってもらえるかもしれないと思い、Microsoft Store への登録を決意しました。
結果として、これは極めて苦痛を伴う決定でした。
Python で書いていたため、パッケージングから登録までの全工程はまさに血と涙の物語でした:Python ソース → PyInstaller で exe 化 → Inno Setup でインストーラ作成 → 最終的に MSIX パッケージに変換。ネイティブ WinUI 3 のスムーズなパッケージング体験と比べると、この手順はまさに山道の十八曲がりでした。
また、Python で作ったデスクトップアプリは、視覚的な洗練度で少し劣ることも認めざるを得ません。
今後の計画
時間ができたら、この Python から MSIX までのパッケージング全工程を詳しく共有する記事を書くつもりです。最適解ではないでしょうが、少なくとも通れる道ではあるので、Python 製ツールをストアに登録したい方の参考になれば幸いです。
RDP Heartbeat 自体については、他のプロジェクトが一段落したら、ネイティブ WinUI 3 で完全に書き直し、この小さな呼吸ライトをさらに滑らかでエレガントにしたいと考えています。
静止したリモート画面を呆然と見つめることがよくある方や、RDP の突然のフリーズに悩まされている方は、ぜひこの小さなツールを試してみてください。すべての vibe coding セッションの良いムードを守るお手伝いができれば幸いです。