当サイトはアフィリエイトプログラムによる収益を得ています。

MoonlightとVDDをAIで快適化|非プログラマーがWindows用モニター切替ツールを作るまで

タスクバーのランチャーで1画面から2画面へ切り替える様子を、画面を確認する筆者とともに描いたイラスト

家にいる間は、リビングのWindows PCを起動したままにしていることが多い。あるとき、ふと思った。「どうせ電源が入っているなら、その裏でAIに何か作業してもらえたら面白そうだな」と。

最初からモニター切替ツールを作るつもりはなかった。AIを日常的に使いたくて、外からでも家のPCに触れるように環境を整えた。その延長で、タスクバーから画面構成を選べる、自分専用のランチャーまで作った。使ったのは、いつもの中古リビングPCだ。

手持ちPCの構成使っているもの
OSWindows 11
CPUCore i5-10500
メモリ16GB
GPU内蔵GPU中心

最新の高性能PCではないけれど、普段使いやYouTube、Moonlightでのリモート操作には十分使えている。テレビで動画を流しながら、空いている時間をAIに使えないか。今ある中古PCで、できることを少しずつ試している。

スポンサーリンク

AIを使うために、家のPCへ外からつなぐ

外出先でノートPCの正面画面とキーボードを操作する筆者を斜め後方から描いたイラスト。矢印の先には接続先の自宅Windows PCがある

自宅PCを外から使うため、こんな組み合わせにしている。

  • Tailscale:自宅PCへつなぐネットワーク接続。
  • Sunshine:Windows側で画面を配信する。
  • Moonlight:手元の端末から操作する。

iPadやMacBook Air、iPhoneから家のPCへつなげる環境だ。製品の設定手順を並べる記事ではないので、ここでは「家のPCを外から触れる状態にした」くらいの紹介にしておく。

外出先からPCを使いたいときは、iPhoneのショートカットからAlexaを経由し、Wake on LANで起動する仕組みも作った。ワンボタンで電源を入れられるのは便利だけど、これだけで別記事になりそうなので、今回は脇役にしておこう。

VDDを使うと、リモート画面の収まりがよくなる

Virtual Display DriverのXML Editor全体。解像度欄に2560×1600と1280×800が表示されている
2560×1600と1280×800をVDD側へ登録した。

VDD(仮想モニター)は、Windowsに実物の画面とは別の仮想ディスプレイを追加する仕組みだ。

俺の場合は、リビングTVで動画を流したまま、もうひとつの画面をMoonlightから操作したくて使い始めた。

  • TV側:動画をそのまま流す。
  • MacBookやiPad側:別の作業画面に入る。

使い始めると、物理モニターと仮想モニターのどちらを使うかを気軽に変えたくなってくる。

仮想の画面をひとつ増やすだけでも便利だけど、VDDは解像度を選んで作れる。iPadやMacBookなど、リモート側の画面サイズや縦横比に近い設定を用意できるのが気に入っている。画面の比率が合うと、黒帯や妙な拡大縮小が減って、接続先の画面をそのまま使っているような感覚になることもある。もちろん、回線の状態や端末の性能にも左右される。

Virtual Driver Control全体。タイトル、ドライバーの稼働ログ、下部の操作ボタンが表示されている
動いているかは、このログを見れば分かる。

解像度は上のXML Editorで登録し、ドライバーの状態はVirtual Driver Controlで確認する。

接続先の画面サイズに合わせてみる

中央のVDD仮想画面からテレビ、ノートPC、縦長タブレットへつながる概念図。同じ夕景を端末ごとの画面比率に合わせて表示している

VDDの設定では、2560×1600や1280×800といった解像度を使っている。設定画面で解像度を変え、Moonlightで接続すると、iPadやMacBookの画面に合わせやすい。Virtual Display Driverの公式プロジェクトでも、Windows上に仮想モニターを追加し、カスタム解像度を使える仕組みとして案内している。

VDDは、俺の使い方では「画面を増やすため」だけの機能ではない。リモート先の画面に合わせて表示を整えられるところが大きい。だからこそ使う頻度が上がり、リビングTVとVDDを切り替える回数も増えていった。

切替のひと手間を減らしたくなった

別々に撮影したモニター切替メニューとWindowsタスクバー。FHD+2560、FHD、1280、iPadのメニューと、枠で示したランチャーアイコン
タスクバーからクリックで、目的の切替一覧が出るようにした。

VDDとリビングTVの使い分け自体はできても、毎回Windowsの設定画面を開いて画面の有効・無効や解像度を切り替えるのは面倒だった。特に、iPadで少し作業したいときと、テレビだけに戻すときで必要な状態が違う。

複数の手順を思い出して操作するより、使う場面の名前を選ぶだけにしたかった。

そこでAIに、タスクバーからモニター構成を切り替えられる専用ランチャーを作ってもらうことにした。MultiMonitorToolのような既存ツールも使いながら、PowerShellやC#、.NETでつなぎ合わせてもらった形だ。

俺がこれらを一からプログラミングしたわけではない。既存ツールを含む構成なので、完成したランチャーを一般公開する予定もない。

今はタスクバーに固定したアイコンからメニューを開き、「FHD」「2560」「1280」「iPad」「FHD + 2560」などのモードを選んでいる。

  • リビングTVだけを使う。
  • VDDだけを使う。
  • リビングTVとVDDの両方を使う。

用途に合わせてDPIも100%や200%へ変更する。

数字のバッジも、実際に使ってから直した

WindowsタスクバーのノートPC形ランチャーアイコン右上に赤い2のバッジ。周囲のアイコンと上のウィンドウの一部も写っている
右上の赤い『2』で、今は2画面だと分かる。

さらに、今何画面が有効か分かるように、タスクバーのアイコン右上へ「1」か「2」の小さなバッジを出すようにした。

最初は表示できて満足したけれど、実際に使うと、気になる挙動がふたつあった。

  • ウィンドウをスナップしたあと、バッジが後ろへ回る。
  • 動画を全画面表示にすると、タスクバーは隠れるのにバッジだけ残る。

数秒待てば戻る場合もあったが、全画面のときだけは残り続けた。

ここはコードを眺めているだけでは気づけなかった。

バッジは一度描画できたら終わりではなく、Windowsのウィンドウの重なり方やタスクバーの状態にも影響される。最初の実装が間違いというより、実際の使い方を重ねて初めて条件が見つかった感じに近い。

AIに原因を調べてもらい、タスクバーが隠れているか、画面ごとの前後関係はどうか、といった条件を見直した。今は片方の画面で動画を全画面にすると、その画面のバッジだけが消え、もう一方は残る。全画面を解除すると、消えたバッジも戻る。

Windows APIの細部を説明するつもりはない。ただ、こういう挙動は、実際の使い方を試して初めて問題として見えてきた。完成したと思っても、使い続けると次の「ここが気になる」が出てくる。

AIに任せても、実機で確かめるのは自分

AIのコード制作画面と、2台のモニターを見ながらWindows PCを操作する筆者。作る、実機で試す、直してもらうという往復を示したイラスト

最初はGPT-6 Luna 高を中心に使った。仕様がはっきりしている機能追加やモード追加、バッジ、キャンセル機能などを頼むと、かなり作業が進んだ。「タスクバーから開きたい」「このモードではTVだけにしたい」といった使い方を言葉で伝え、画面を見て違和感を伝える。

コードはほとんど読めなくても、使う側としての希望は出せる。

一方、「なぜ動画の全画面表示でだけバッジが残るのか」のように原因を切り分ける段階では、GPT-5.6 Sol 中に切り替えた。

今回使った範囲では、こんな使い分けがしっくりきた。

  • Luna:やることが明確な機能追加やモード追加。
  • Sol:原因が見えず、判断や実機確認が必要な作業。

モデルの優劣を断定する話ではなく、作業の種類で変えると進めやすかったという実感だ。

SolとComputer Useで、Windowsの画面を実際に操作しながら、全画面表示、スナップ、メニュー、モニター切替を試したときのこと。動画がかなりコマ落ちした。

最初はCPUが足りないのかと思ったけれど、その場で使用率を見るとこうだった。

その場で見た項目使用率
CPU約40%
メモリ約80%
GPUほぼ100%

少なくともこのときは、動画再生とリモート操作、画面キャプチャなどが重なり、GPU側に余裕がなかったように見えた。AIを使うなら必ず高性能GPUが必要、という話ではない。今回のように画面を操作・取得しながら動画も流す使い方では、CPUやメモリだけでなくGPUの余裕も気にした方がよさそうだと思った。

この開発ではGitで変更を残し、Codexから実機を操作して確認する場面もあった。AIがコードを書いて終わりではなく、俺が「この場面で変」「こういう動きがいい」と伝え、直したものをまた試す。その往復に時間も、モデルの利用量も使った。

Gitで途中の状態を残しておくのも助けになった。動かなくなったときに前の状態へ戻りやすく、どこを変えたのかを追いかけやすい。これもGitの仕組みを全部理解したうえで使いこなしているというより、Codexと一緒に変更を記録し、必要なときに参照している。

本当はAIをもっと使いたかっただけなのに、振り返るとWOL、Moonlight、Tailscale、VDD、モニター切替、タスクバーランチャー、バッジ、Codex、Git、モデルの使い分けと、環境づくりそのものにかなり時間を使っている。

「AIを使うための環境づくりが目的になってないか」と、自分でも思う。

それでも、家にいる間にPCを起動しておき、外からも同じ環境へつなぎ、面倒だった切替を自分用の道具で減らせるようになった。こういう土台があれば、次にAIへ頼める作業も増えていくはずだ。環境を整える時間も、これはこれで面白い。

何でも一発で完成したわけではない。それでも、自分専用の環境が少しずつ形になっていくのは楽しい。

「これを作るために、ここまで環境を作ったのか」と笑いつつ、次はもう少し余裕のあるPCで試してみたくなる。

マックミニほしいな。