概要
- 著者は 長年Windowsユーザー として開発経験を重ねてきた経緯を持つ
- Display Blackout というユーティリティを開発し、現代Windowsアプリ開発の難しさを体感
- UIフレームワークや配布方式の 複雑な進化 と混乱を指摘
- P/Invoke など旧APIとの相互運用が依然として不可避である現状
- Microsoftの開発エコシステムの課題 と、その影響について考察
Windowsアプリ開発の現状と混乱
- 著者は 幼少期からWindowsとVisual C++ に親しみ、.NETの登場も体験
- 初就職先も.NET系 だったが、プロとしてネイティブWindowsアプリは未経験
- 趣味では Web開発を選択 しがちで、Windowsアプリは思い出補正が大きい
- Display Blackout はゲーム時に左右モニターを黒くするユーティリティ
- 既存のAutoHotkeyやMicrosoft Storeアプリの類似機能も存在
- 著者は よりモダンなUIと学習目的 で独自実装を選択
- 必要要件:
- ディスプレイ情報の取得
- 枠無し・非アクティブ黒ウィンドウの配置
- グローバルショートカットの取得
- スタートアップ起動オプション
- 永続設定の保存
- トレイアイコンとメニュー表示
Windows UIフレームワークの歴史
- Win32 API(C言語) が出発点で、今も現役
- MFC(C++) によるオブジェクト指向ラッパーの登場
- .NETとC# による新時代の幕開け
- Windows Forms :Win32のラッパー
- WPF (.NET 3.0):XAMLによる宣言的UI、GPU描画
- Windows 8/10のWinRT・UWP
- サンドボックス型・クロスデバイス対応
- 一部OS機能はUWP/WinRT専用
- Windows App SDK/WinUI 3 で再統合を目指すも混乱継続
- UI進化の流れ:
- Win32 → MFC → WinForms → WPF → WinRT XAML → UWP XAML → WinUI 3
開発手法の選択肢と課題
- WinUI 3 + Windows App SDK が推奨だが、実装方法が三択
- C++ :軽量だがメモリ安全性に課題
- C#/XAML(フレームワーク依存) :.NETの最新バージョンがOSに標準搭載されておらず、配布時にユーザーへ追加インストールを強要
- .NET AOT :ランタイムごとバイナリ化、9MiB超の肥大化
- Rust対応 も頓挫
- 配布形式 も混乱
- MSIX 推奨だが、コード署名証明書が高額($200~$300/年)
- 未署名配布 はユーザー体験が劣悪
- Microsoft Store も独自価値がないとリジェクト
- .NETの配布やMSIXの依存関係管理 が十分に整備されていない
旧APIとの相互運用とその限界
- 新APIだけでは機能が不足
- 例:ディスプレイ監視やグローバルホットキー取得はP/Invoke必須
- トレイアイコンやコンテキストメニュー も標準化されていない
- UI自動リサイズ機能 などもフレームワーク進化の過程で消失
- P/Invoke技術自体も過渡期
- CsWin32 など新しいラッパーツールも未成熟
- C#言語仕様の限界も露呈
- 最新フレームワーク採用の意義が薄れる現状
Microsoft開発エコシステムの課題
- 頻繁なフレームワーク刷新 による技術的負債の蓄積
- サンドボックス化や機能制限 による開発者体験の悪化
- C#とWindows APIの親和性不足
- Electron等Web技術への流出 の背景
- 根本的な改善策の不足 と「中途半端」な現状
このように、著者は モダンWindowsアプリ開発の現実 を実体験を通じて詳細に分析し、 Microsoftのエコシステム全体の課題 を浮き彫りにしています。