制作事例
個人プロジェクト · Windowsアプリ
AutoDark:Windowsのテーマ切り替えを、Microsoft Storeで公開。
日の出と日の入りに合わせて、Windows 11のライトモードとダークモードを自動切り替え。Danilo Stoletovicが開発し、Microsoft Storeで公開した、ON/OFFに徹したユーティリティです。
アプリ
課題
何年も前から、Windowsに日照に合わせて切り替わってほしいと思っていました。試した代替ソフトは、欲しくもない複雑さやバックグラウンド動作まで付いてくるものばかり。単純なWindowsの機能のために、複雑なソフトが必要なんておかしい。欲しかったのはスイッチであって、新しい趣味じゃありません。
解決策
最小限のON/OFFインターフェースを持つ、.NET製のネイティブWindowsアプリを作りました。AutoDarkはWindowsの位置情報または手入力した座標から日の出と日の入りを計算し、昼はライトモード、夜はダークモードを使い、定刻の実行はWindowsのTask Schedulerに任せます。ウィンドウを閉じればアプリは終了。自動化をOFFにすると、タスクを削除し、保存しておいたテーマ設定に戻します。
やることを絞る
機能を絞ることと、バックグラウンドのリソース使用量を抑えることを設計上の条件にしました。トレイアイコンも常駐サービスもなく、必要なときだけWindowsが起動し、短時間で処理します。アカウントなし、テレメトリーなし、設定の迷路なし。これはアーキテクチャの選択であって、性能ベンチマークの結果ではありません。
パッケージ化でルールが変わる
Windowsのテーマ連携では、MSIXの挙動を考慮する必要がありました。パッケージ化していないアプリではレジストリの限定的な変更を使います。一方、現在のパッケージ版では、コピーしたテーマをWindowsのTheme Manager経由で適用し、壁紙、カーソル、アイコン、サウンドを適用対象から外して、ライト/ダークモードを変更しています。このインターフェースには公開ドキュメントがないため、互換性は思い込みではなくテストで確かめる必要があります。パッケージ版のスケジュール実行には、バージョン付きのインストールパスではなく、バージョンに依存しない実行エイリアスを使っています。
サンドボックスに断られた
Storeへの申請では、機能の権限制限にも対処する必要がありました。許可されなかったunvirtualizedResources機能は削除しました。別途行ったAppContainerでの実験では、検証プログラムの起動とTheme Managerの初期化には成功しましたが、読み取り可能な同梱テーマの適用は拒否され、Task Schedulerへのアクセスも失敗しました。これは調査であって、リリース済みのサンドボックス機能ではありません。現在の製品版マニフェストは、通常のデスクトップユーザーとして実行するためにrunFullTrustを維持しており、管理者権限への昇格は要求しません。これらのローカル実験は、すべてのWindowsビルドでの動作を証明するものでも、現在Storeに掲載されているパッケージの正確なバージョンを特定するものでもありません。
届けるところまでがエンジニアリング
アプリのパッケージID、バージョン、アセット、実行エイリアスを踏まえて、MSIXのパッケージ化と検証の仕組みを構築し、Partner Centerから手動で申請できるパッケージを用意しました。ストア掲載情報、プライバシーと機能の申告、権限の制限、互換性チェックも、すべて届けるための仕事です。ビルドが通っただけでは、アプリは誰の手にも届きません。
結果
AutoDarkは、発行元名Danilo StoletovicでMicrosoft Storeに一般公開されている、実際に動くアプリです。到達点はそこです。誰もが公開配信チャネルからインストールできる、実用的なユーティリティを届けたこと。Storeへの公開は配信であって、Microsoftによる推奨ではありません。
ボタンを作るのは簡単だった
小さなインターフェースの裏に、膨大なプラットフォーム対応が隠れていることがあります。パッケージ化で実行時の挙動が変わる。権限モデルに中核機能を阻まれることもある。配信には配信の要件がある。教訓は、ソフトウェアを届ける仕事には、コードを書くことだけでなく、互換性、パッケージ化、そしてユーザーの手元まで届けることも含まれる、ということです。
自分の目で確かめる
関連サービス: ウェブアプリ&AI連携
技術スタック
何でも屋。極めたものは、ない。
それでも全部、きっちり完成させて出すんだよ