PowerToysが突然フリーズして、Alt+Spaceが効かない。FancyZonesが死んでウィンドウ整列できない。タスクマネージャーを開くと、PowerToys関連のプロセスが 11個 もぶら下がっている。これを1つずつ右クリック→「タスクの終了」する苦行を、AIエージェントに丸投げしたら 57行のPowerShellスクリプト で解決した。この記事ではコード全文と導入手順を解説します。
PowerToysの「常駐プロセス地獄」とは
Windowsユーザーなら一度は使ったことがあるであろう Microsoft PowerToys 。FancyZones、PowerToys Run、Always on Top…便利な機能が山盛りで、手放せない人も多いはずです。
しかし、たまに 常駐が不安定になる 。
具体的には:
- PowerToys Runが起動しなくなる
- キーボードリマッピングが突然効かなくなる
- FancyZonesのウィンドウ整列が動かない
- Always on Topのピン留めが反応しない
タスクマネージャーを開いてみると、こんな光景が広がっている。
PowerToys (本体)
PowerToys.AdvancedPaste
PowerToys.AlwaysOnTop
PowerToys.Awake
PowerToys.ColorPickerUI
PowerToys.CropAndLock
PowerToys.FancyZones
PowerToys.KeyboardManagerEngine
PowerToys.Peek.UI
PowerToys.PowerLauncher
PowerToys.QuickAccess
11個。 これを一つずつ右クリック→「タスクの終了」して、またPowerToysを起動する。
この作業を週に2〜3回やっていて、さすがに限界だった。
解決策:PowerShell再起動スクリプト(コード全文)
AIエージェント(Antigravity)に「PowerToysのタスクを全部killして再起動するツールを作って」と依頼しました。
すると、AIはまず 実際に動いているプロセスを調査 しました。
Get-Process | Where-Object { $_.Name -like "*PowerToys*" }
11個のプロセス名を全て特定した上で、「PowerShellスクリプト1本で十分です」という結論。最初は「GUIアプリとか作るのかな?」と思っていたけど、やりたいことは「kill → 再起動」だけ。AIの方が冷静でした。
コード全文(57行)
1 # ============================================
2 # PowerToys 再起動スクリプト
3 # ダブルクリックで全プロセスを終了→再起動
4 # ============================================
5
6 # --- 設定 ---
7 $PowerToysExe = "C:\Program Files\PowerToys\PowerToys.exe"
8 $WaitSeconds = 3
9
10 # --- 1. PowerToys 系プロセスを全検索 ---
11 $processes = Get-Process | Where-Object { $_.Name -like "PowerToys*" }
12
13 if ($processes.Count -eq 0) {
14 Write-Host "PowerToys プロセスが見つかりませんでした。" -ForegroundColor Yellow
15 } else {
16 Write-Host "$($processes.Count) 個のプロセスを終了します..." -ForegroundColor Cyan
17 foreach ($proc in $processes) {
18 try {
19 Stop-Process -Id $proc.Id -Force -ErrorAction Stop
20 Write-Host " 終了: $($proc.Name) (PID: $($proc.Id))" -ForegroundColor Green
21 } catch {
22 Write-Host " 失敗: $($proc.Name) - $_" -ForegroundColor Red
23 }
24 }
25 Write-Host "全プロセスを終了しました。" -ForegroundColor Green
26 }
27
28 # --- 2. 待機(プロセスが完全に終了するのを待つ) ---
29 Write-Host "$WaitSeconds 秒待機中..." -ForegroundColor Gray
30 Start-Sleep -Seconds $WaitSeconds
31
32 # --- 3. PowerToys を再起動 ---
33 if (Test-Path $PowerToysExe) {
34 Start-Process -FilePath $PowerToysExe
35 Write-Host "PowerToys を再起動しました!" -ForegroundColor Green
36 } else {
37 Write-Host "PowerToys が見つかりません: $PowerToysExe" -ForegroundColor Red
38 Write-Host "インストールパスを確認してください。" -ForegroundColor Red
39 }
各行の解説
| 行 | コード | やっていること |
|---|---|---|
| 7 | $PowerToysExe = "..." | PowerToys本体のパスを指定。環境によって異なる場合あり |
| 8 | $WaitSeconds = 3 | プロセス終了後の待機秒数。短すぎると再起動に失敗する |
| 11 | Get-Process → Where-Object で名前フィルタ | 「PowerToys」で始まる全プロセスをワイルドカードで検索 |
| 17 | Stop-Process -Id $proc.Id -Force | プロセスを強制終了。-Force がないと終了しないケースがある |
| 19-21 | try { ... } catch { ... } | エラーハンドリング。既に終了済みのプロセスがあってもスクリプトが止まらない |
| 28 | Start-Sleep -Seconds $WaitSeconds | OSがプロセスを完全に解放するのを待つ |
| 31 | Test-Path $PowerToysExe | ファイルの存在確認。パスが間違っていたらエラーメッセージを出す |
ポイントは PowerToys* というワイルドカード。 プロセス名を11個ハードコードする必要はなく、「PowerToysで始まる全プロセス」を一網打尽にする。将来PowerToysに新機能が追加されてプロセスが増えても、このスクリプトはそのまま動きます。
導入手順:ダブルクリックで再起動できるようにする
Step 1: スクリプトファイルの保存
- メモ帳を開く
- 上記のコードをコピー&ペースト
- 「ファイル」→「名前を付けて保存」
- ファイル名を
restart_powertoys.ps1にする - ファイルの種類を「すべてのファイル」に変更
- 文字コードを UTF-8 に設定
- 分かりやすい場所(デスクトップ等)に保存
Step 2: ショートカットの作成
PowerShellスクリプトは .ps1 ファイルをダブルクリックしても実行されない(Windowsのセキュリティ仕様)。ショートカットを作成して実行します。
- デスクトップを右クリック →「新規作成」→「ショートカット」
- 項目の場所に以下を入力:
powershell.exe -ExecutionPolicy Bypass -File "C:\Users\あなたのユーザー名\Desktop\restart_powertoys.ps1"
- 名前を「PowerToys再起動」にして完了
Step 3: 管理者権限の設定(必要な場合)
プロセスの終了に管理者権限が必要な場合があります。
- 作成したショートカットを右クリック →「プロパティ」
- 「ショートカット」タブ →「詳細設定」
- 「管理者として実行」にチェック を入れる
- OK → 適用
Step 4: 実行確認
ショートカットをダブルクリック。
コンソールに以下のような出力が表示されれば成功です:
11 個のプロセスを終了します...
終了: PowerToys (PID: 1234)
終了: PowerToys.FancyZones (PID: 5678)
...
全プロセスを終了しました。
3 秒待機中...
PowerToys を再起動しました!
管理者として実行しなくても正常に動作するケースがほとんどです。権限エラーが出た場合のみ、Step 3の設定を行ってください。
応用:他のツールにも使えるパターン
このスクリプトの構造は、PowerToys以外にも応用できます。
# 基本パターン
$TargetProcess = "アプリ名*"
$ExePath = "アプリの実行ファイルパス"
Get-Process | Where-Object { $_.Name -like $TargetProcess } | Stop-Process -Force
Start-Sleep -Seconds 3
Start-Process -FilePath $ExePath
応用例
| アプリ | プロセス名 | 用途 |
|---|---|---|
| AutoHotKey | AutoHotkey* | キーリマップが効かなくなった時 |
| Slack | slack* | 通知が来なくなった時 |
| Discord | Discord* | 音声が途切れる時 |
| OBS Studio | obs* | 配信中にフリーズした時 |
ワイルドカード * で検索するパターンを覚えておくと、どんなアプリにも使えます。
PowerToysと合わせて使いたいおすすめツール
PowerToysでWindowsの操作効率を上げるなら、入力デバイスも見直すと効果が倍増します。私が実際に使っている機材を紹介します。
トラックボールマウス:Logicool MX ERGO
私が7〜8年以上も愛用し続けているのが、Logicool MX ERGO です。「一度トラックボールを使ったら、もう普通のマウスには戻れない」という感覚、使ってみれば分かります。親指だけでカーソルを自在に操れる快適さは、長時間の作業でも疲れ知らず。WindowsとMacの切り替えが非常にスムーズなのも、マルチOS環境の私には欠かせない理由です。
キーボード:Logicool MX CRAFT
キーボードも同じくロジクールの MX CRAFT を長年愛用しています。プレミアムな打鍵感はもちろん、クリエイティブな作業を支える「クラウン(入力ダイヤル)」の機能美がお気に入り。複数デバイスの混合環境でもストレスなく切り替えられ、効率化と心地よさを両立させてくれる最高の相棒です。
ディスプレイ
PowerToysのFancyZonesを活かすなら、 27インチWQHD以上のディスプレイ が必須です。フルHDだとウィンドウを分割した時に狭すぎます。
まとめ
| 項目 | 内容 |
|---|---|
| 問題 | PowerToysの11プロセスが不安定になる |
| 解決策 | PowerShellスクリプト57行 |
| 所要時間 | AIに依頼して約10分 |
| 導入方法 | ショートカット作成 → ダブルクリック |
やったことは3つだけ:
- 「何に困っているか」をAIに伝えた
- 方針を選んだ(PowerShellで十分)
- 「ショートカットも作って」と追加で依頼した
コードは1行も書いていない。でも、「自分の環境で動くツール」が手元にある。
これが Vibe Coding — 「コードを書く技術」ではなく、 「何を解決したいか」を言語化する技術 。
10年前にエンジニアをやっていた頃は、こういう小さな不便を解決するために半日かけてバッチファイルを書いていた。今は10分。しかもエラーハンドリング付き。
(もちろん、出来上がったコードの中身は確認しています。 No Black Box 。これだけは譲れません。)
※免責事項: 本記事のスクリプトは個人利用を目的としています。実行は自己責任でお願いします。環境によりPowerToysのインストールパスが異なる場合があります。


コメント