logo
2025-09-24

Windows用のシャットダウンタイマーアプリを作った

#Windows

つよつよGPUを積んだPCがWindowsなのでそれをつかって機械学習の学習とかをするんですけど、だいたい数時間かかるのでぶん回してる間に寝るんですけど、学習終わってもずっとPCついてるのもなぁって感じなのでタイマーセットして時間になったら自動でシャットダウンしてくれるアプリを作ってみました!
READMEに動画があるんでそれを見ればわかりやすいと思います!

中身は単に shutdown.exe を叩いているだけなんで割愛するんですが、WinAppSDKとWinUI 3を用いて実装してみたのでそれについてちょっと書こうかなと思います。

で、WinAppSDKとWinUI 3について簡単に説明するとMicrosoftが5年ぐらいから作っているWindowsネイティブアプリ開発用のフレームワークとUIライブラリです。
これを使えばWindows11っぽいモダンなデザインのアプリが簡単に作れます。

WinUI 3 Gallery
https://github.com/microsoft/WinUI-Gallery より

初めてのWindowsネイティブアプリの開発でしたし、WinFormsやWPFでやらないとできないみたいなこともないし、モダンデザインも1行書けば作れるしで採用してみました。

それでメリット・デメリットなんですが、メリットは簡単にいい感じのデザインが作れることです。
今回は時刻を選択するバーや数値を入力するボックス、ボタン、ラジオボタン、チェックボックス、セレクトバー、モーダルを使ったのですがどれも簡単に使えていい感じにできたので満足です。
どうやら細かいウィンドウ制御とかはWPFとかに全然及ばないらしいのですが、このアプリはそんな複雑なことしないので機能面に関しては特に不自由なく扱えました。
逆にデメリットとしては個人で配布するのがめっっっっっちゃめんどくさい点です。
WinAppSDKで作ったアプリはパッケージ化するかどうか選べるんですが、パッケージ化したやつをインストールしようとすると署名が必須です。これが最高にめんどくさい。
安全性のためだとはわかるんですが、個人で署名するのはかなりハードルが高いです。
登録料が無料化されたMicrosoft Storeで配布すれば署名とかもやってくれるんですが、登録のために本人確認が必要でなんでこんなアプリ1つ配布するためだけに本人確認しなあかんねんみたいな気持ちになって放棄しました。もっとメールアドレスぐらいで登録できるようになってくれたらなぁと。
で、パッケージ化されていないやつも選択でき、これは署名なしでも使えるのですが、シングルバイナリにできないという致命的な欠点を持っています。
なんか自己完結するためのフラグとかあるのですが、設定しても言語用のフォルダが100個ぐらい、dllも100個ぐらい一緒に入っていて目的の.exeをさがすのもめんどくさいです。
実際に配布しているやつ見てもらえればわかると思いますw
これを配布してもユーザーは不便なだけなのでうーんって感じです。
アプリケーションはシングルバイナリ、スタティックビルド派なのでもにょっています。
あと直接関係はないのですが、普通にVisual Studioが使いにくすぎて禿げてました。VSCodeで作れるようにしてくれ。

とまあ不満が多いかもですが、モダンなネイティブアプリ作りたい or 自分用 or Store登録してもいい とかだったらいいのかなとは思います。
.NETもAOTは進みつつあるっぽいんですが、もっとここら辺が整備されたらなぁと思いました。