torum

主に開発中のアプリにまつわる技術系の事。

rmpd: Rust製のMPD (Music Player Daemon) 互換サーバー

たった今、ちょっと調べものをしていてたまたま見つけてしまったのですが、MPD (Music Player Daemon) のRust製(フォークではない)クローンというか・・・が開発されています。

github.com

MPDのクライアントは多数あれど、サーバーというのは新しい。個人的にはMPDプロトコル互換サーバーの登場は大歓迎といったところです。

今年(2026年)の2月に開発が始まったばかりで、まだほとんど知られていない模様。Issuesも0、Disccussionsページ自体無し。一応、現在までにMPD互換のプロトコルの実装は済んでいるとのこと。その他の機能は一見すると本家MPDよりも多機能でモダンなところもあります。OpenSubsonic, Jellyfin, podcasts, radioとの連携や、アルバムカバー未設定の曲は(設定でオンにすると)自動で取得してくれる機能など。

一番気になるのは、自分が開発しているMPDCtrlとMPDCtrlXがこれでちゃんと動くか、という点でありますが、現在(rmpd 0.17.2)のところLinuxとMacOS向けのRustのソースコードでしかリリースされていないので、まだ実際に動作確認できていません。

まだ試せてないので実際のところはなんともですが、とりあえずの一報ということで。試すことが出来次第、追記したいと思います。

MPDCtrlX v1.2公開 - LinuxでWayland化

MPDCtrlX、ついにWayland上で動くようにしました。今まではX11版がXWaylandで動いていたのですが、ネイティブのWayland対応です。

Waylandについてのアレコレは、以前書いた通りなんですが、なぜにWayland化したかというと、タイトルバーを無くして、Windows版と同じようにしたかったんですよね。

MPDCtrlX on Wayland

もはや完全にWindows版と見分けがつかない・・・。

Avalonia UIのWayland対応は現在のところ "Experimental" なんでまだ「既知の問題」みたいなのもあるんですが、まぁ人柱ということで、気にせず行きましょう。 

実は、ImageViewerXの方を先にWayland化していたのですが、既知の問題に引っ掛かって、そっちはちょっと通常の使用に差し支えがあるレベルの問題だったので、正式公開は見送っています(プレリリースどまり)。AvaloniaUI側で修正リリースが出ればWayland版を公開できると思います。

AvaloniaUIのアプリWayland化にあたってハマりどころみたいのもあったのですが、それはまたの機会に。

 

追記:今回から、ダウンロードファイル形式に、Windows向け.exeとLinuxのDebian系向け.debに加えて、新たに.AppImageも追加しました。GitHub Actions の自動生成です。

 

Ubuntu 26.04 LTSとMusic Player Daemon(MPD)

また2年ぶりにこの時期がやってまいりました。本日、Ubuntu 26.04 LTS のポイントリリースが公開、24.04 LTSからのアップグレードが可能となりました。

ホームサーバーとして稼働させている方では既に一旦まっさらにしてUbuntu 26.04 LTSを新規インストール済みなのですが、今回はデスクトップPCの方のアップデート作業でした。

特段問題はなくアップグレードは済んだのですが、MPDCtrlXの動作確認をしようとしたらMPDが何らかの原因で起動していませんでした。おそらくソースからコンパイルしてインストールしていたからと思われます。UbuntuやDebianの公式パッケージ版MPDもあるのでその方が簡単なのですが、ディストロのパッケージ版はバージョンが古いので。

原因を確認する前に、良い機会なのでこの際MPDも最新版にしておこうと、また改めて最新のソースコードからコンパイルしてインストールしました。方法はMPDのマニュアルに書いてある通りをコピペしていくだけ。

MPDのバージョンアップも済み、動作確認をしてみます。

MPDのデーモンのステータスを確認:

sudo systemctl status mpd.service

なぜかdisabledになっていたので有効化:

sudo systemctl enable mpd.service

試しにMPDを起動:

sudo systemctl start mpd.service

"exception: No configuration file found"

ということなので、設定ファイルが見つからないとのこと。

/etc/mpd.conf

にあるはずなので見に行くと、なぜかmpd.conf.backupしかない・・・と思ったら、そういえば自分はMPDをユーザー権限で動作させていたのでした。なので、設定ファイルは、

/home/torum/.config/mpd/mpd.conf

にありました。2年もたつと色々と忘れます。

という事で、起動もユーザー権限で使っているのでsudoせずに--userオプションを指定するべきでした。(間違って有効化した sudo systemctl enable mpd.service のをdisable する必要があったかも)

systemctl --user enable mpd.service
systemctl --user start mpd.service

 

MPDもMPDCtrlXも無事両方動作しています。めでたし!

 

MPDの設定ファイルの内容については、2年前に書いていましたのでよろしければそちらを参照ください。

torum.hatenablog.com

 

WinUI3 Native AoTの落とし穴(パート3)

「WinUI3 Native AoTの落とし穴」シリーズ、(パート1)、(パート2)と来まして、今回がおそらく最終回(であって欲しい・・・)。というのも、またまた新たなWinUI3のNative AoTで地雷を踏んでしまいまして・・・。

Avalonia UIを使ったアプリではNative AoTで何の問題も一切起きていないのと比較すると、WinUI3は本当に困ったちゃんです。WinRTというどうしようもないものがあるからなんですが、それは一旦横に置いておきましょう。

WinUI3のNative AoTで何が怖いかというと、以前も書きましたが本当に何でもなさそうなところでエラーも起きずにシレっと変な挙動をするところです。しかもリリース向けコンパイル済みバイナリですから既存のデバッグツールが使えなくてブレークポイントも何もありません。なので、NativeAoTにコンパイルしたら動作テストを手動で一からすべて一通り全部毎回やらないといけなくなります。

いい加減うんざりしたので、根本的な解決策では全然ないのですが、最低限これはやっておいた方が良い、という方法を紹介したいと思います。 

WinUI3のNativeAoTのバグはほとんどのケースで、CsWinRTが原因です。現在の最新版はCsWinRT 2.2.0(Nov 12, 2024) - 1年半以上前にリリースされたものです。次のバージョンは2.3とされていますが、これが一向にリリースされる模様がありません。

問題だらけなのにも関わらず・・・、バグ報告沢山挙がっているにも関わらず・・・・

なので、プレリリース版ですが、CsWinRT 2.3.0-prerelease.251115.2を使っちゃいます。(プレビュー版のCsWinRT 3.0.0が出てるじゃんと思ったそこのあなた、私もそう思いました、がそれWinUI3では動きません。現在のCsWinRT 3.0.0プレビューは「non-XAML programs」向けで、入れても「Projection.dllが見つからないエラー」になります。いやそんなの初めからリリースページにでかでかと書けよ、と思いますが、そこがマイクロソフトクソオリティ)

さて、CsWinRT 2.3.0-prerelease.251115.2。

<PackageReference Include="Microsoft.Windows.CsWinRT" Version="2.3.0-prerelease.251115.2" />

直接プレリリース版のパッケージを追加・参照します。

次に、プロジェクトファイルに、以下を追加します。

<CsWinRTAotWarningLevel>3</CsWinRTAotWarningLevel>

保存して念のため一旦Visual Studioを再起動して開きなおすと、警告が出ているはずです。

警告が出ているメソッド等に、下記のような感じ[DynamicWindowsRuntimeCast]を追加していきます。

    [DynamicWindowsRuntimeCast(typeof(OverlappedPresenter))]
    [DynamicWindowsRuntimeCast(typeof(FrameworkElement))]
    public MainWindow() 
    {
        InitializeComponent();
    ...

これで、パート1で紹介したような問題はだいたい解決するはずです。

が、しかしこれでも解決しないのがやっぱりありまして・・・

if (obj is not IList<object> items) 

・・・

var collection = items.Cast<SongInfoEx>();

・・・

みたいなコードがサイレントに失敗します。(.Cast<>が出てくる時点で嫌な予感がしますよね)

これ、ListViewのSelectedItemsをCommandでバインドしてParameterで受けている所のコードなんですが、ListViewのSelectedItemsはWPFでもちょっと癖がありましたが、AoT時のWinUI3ではぶっ壊れてて、AoT時は(obj is IInspectable)で来たり、(obj is IEnumerable<object>)で来たりします。通常のNon-AoT時は(obj is IList<object>)、.NET10ではIListImplで来るときもあります。

正直、だるいです。

さらに、AoTでのビルドはまた別の問題が色々あって、dotnet publish コマンドと、Microsoft.Windows.SDK.BuildTools.MSIXパッケージの組み合わせで、いろいろとバグにぶち当たるケースがあります。

まず、binとobjを削除して、さらには.csproj.userも削除しないと変な挙動をすることが多いです。

さらに、デバグシンボルを生成したいので、/p:AppxPackageIncludePrivateSymbols=true にしていたとしても生成されるのはマネッジドのだったりするバグがあったり、/p:NativeDebugSymbols=true /p:StripSymbols=false を指定しないといけないとか、mspdbcmf.exeが見つからないというバグもあるので、/p:MsPdbCmfExeFullpath="C:\Program Files\Microsoft Visual Studio\....."と手動でパスを指定しないといけないとか・・・。

もう、絶対リリース前にテストしてないだろうな、というレベル。見てると、MSIXBuildTools担当しているのはたった一人っぽい。なので、バグが一年以上放置されたままとかざら。さらにテスター(QA)も居ない感じ。まるで自分みたいな個人開発レベルであります。

もう本当に、WindowsAppSDK周り(WinUI3/CsWinRT/MSIX含む)のバグだらけの状況、本当になんとかならんのですかね・・・マイクロソフトの独りよがりなAI狂騒の揺り戻しで書いたように今月あたりから急に動きは出てきたのはあるのですが。

因みに、CsWinRT2.3の正式版、中の人の発言によればもうとっくに出てるはずなのに、未だにリリースなし。AoT前提に作り直したというCsWinRT3.0はいつになったらリリースされることやら。

あまりに遅れているので、「もう2026年5月だけど、どうなってるん?」ってGitHubで突っ込み入れちゃいました。突っ込み入れた甲斐あってか、2.3はもう少しでリリースされそうです。

(追記:CsWinRT 2.3.1、7月23日やっとリリースされました)

マイクロソフトの独りよがりなAI狂騒の揺り戻し(パート3)

この数か月間に渡る「マイクロソフトのネイティブアプリへの回帰」の動きについて書いてきました。(パート1、パート2)

今回はそのピボットの裏にどんな事情があったのか、について触れたいと思います。今回は下記の記事をベースにします。

Former Microsoft VP says Microsoft missed the AI wave like the internet and mobile, as Copilot scales back in Windows 11

Microsoft’s behavior over the last few months is nothing short of shocking. Both the Windows and Xbox divisions suddenly started prioritizing user feedback and implementing requested features after years of ignoring them.

今回のマイクロソフトの動きは驚くべきものだ。今までずっと無視してきたユーザーの要望やフィードバックに対して急に対応し始めた、と。

According to Velloso, less than 3% of paying users actively use Copilot, even though Microsoft has pre-deployed it directly into the Windows 11 taskbar and across the Office suite.

その裏では、マイクロソフトがなりふり構わず推してきたAI(Copilot)が大ゴケしていた、と。あれだけ無理強いでやったのに課金ユーザーの3%以下しかCopilotを使っていないというデータ。

(Since) 2024, and while Google’s shares surged by roughly 230%, Microsoft’s stock growth remained essentially flat at 0%.

株式市場もグーグル(アルファベット)は230%の成長の一方、マイクロソフトは0%。

When a company realizes that pushing a 3.3% adoption-rate AI chatbot down users’ throats isn’t translating to stock growth or user satisfaction, they are compelled to reconsider their strategy.

We are finally seeing the results of this “factory reset” in real time. Microsoft is dismantling sluggish web wrappers, committing to native UI performance for Windows 11 apps, overhauling driver quality standards, and explicitly prioritizing long-ignored user feedback.

Microsoft’s pivot back to platform fundamentals proves that while AI might be the future, you cannot build that future on a crumbling foundation. The market forced Microsoft to listen, and for frustrated Windows users, that is arguably the best thing that could have possibly happened.

ユーザーの喉元に押し込むようなAIの押し付けは、株価にもユーザーの満足にもならないものだった。

結果として今われわれが見ているのは「ファクトリーリセット(工場出荷時へのリセット)」

やっと、ネイティブUIとパフォーマンスと長らく放置してきたユーザーのフィードバックに向き合うことににコミットし始めた。

AIに未来があるとしても、そもそも基盤が崩れていたら未来はない、と。

超要約すると以上な感じです。

 

YouTube の ColdFusionでも同様な感じ。 「The Windows 11 Crisis」

www.youtube.com

Tim Corey氏のチャンネルでも珍しくマイクロソフト批判。

www.youtube.com

 

これはWindowsにおける状況ですが、マイクロソフトのネイティブUIであるWinUI3(WinAppSDK)の開発状況と100%連動しています。

以前から書いているように、登場から5年以上経ちましたが、WindowsAppSDK周り(WinUI3/CsWinRT/MSIX含む)はバグだらけに機能不足のまま、半ば放置されてきました。GitHubでのバグ報告を無視し続けた挙句、バージョンアップはしても、AI関係の機能ばかり追加。デベロッパーは皆もう本当に呆れ返っていました。

実際、ちょっと前に、「Shall we just rename WindowsAppSDK to WindowsAISDK at this point?」(WindowsAppSDKでなくて、WindowsAISDKに名前変更すべきじゃないもう)という半ば冗談めかし半ば本気の議論まで登場したくらいです。

github.com

 

そのくらいWinUI3というかWindowsAppSDK周り(WinUI3/CsWinRT/MSIX含む)の状況は酷い状況でした。

が、今月に入ってからぐらいに急に細かい動きがチラホラ出てきて、動き出した感があります。まだ具体的な結果として出てきたものは皆無ですが、放置され続けてきたIssueに少し動きが出てきたかな、という感じです。

やはりマイクロソフトが会社として動かなければどうしようもなくて、WinUI3(WinAppSDK)もWindowsの改善に注力するという新たな方向性と連動しているのだなぁというところです。

これでWindowsでちゃんと使われるようになって、やっとWinUI3も改善されていくだろう、という期待が持てますね。

ただし、今後どうなっていくのかは引き続き注視していかないといけませんけれど。

 

WinUI3アプリ向けの新しいテンプレート

以前(2022年頃まで)、マイクロソフトのTemplateStudioを使ってWinUI3アプリのテンプレートをカスタマイズして作ることを自分も推奨していましたが、TemplateStudioはここ3,4年全く更新が止まっていて完全に放置されています(企業としてどうなのか・・マイクロソフト)。

当時とは諸々の環境もガラッと変わっていますので、TemplateStudioを使うのは今や全くの非推奨です。もともとかなりOverengineeredなテンプレートだったのでそもそもWinUI3初心者向けではないですし。

日本語環境では未だにTemplateStudioに触れるZennとかの記事が最近になっても出てたりするようで、それもまたどうかと思います。

そんなこんなで、新しいWinUI3向けのプロジェクトテンプレートが公開されました。まだVisual Studioには採用されていなくて、まずはコマンドライン版からのようです。

devblogs.microsoft.com

 

dotnet new winui3-mvvm -n MyApp

とかやるだけです。winui-mvvm以外にもwinui3-navviewやwinui3-tabview など幾つかあります。

因みにそのまま、MyAppフォルダに移動して

dotnet build

とやればコンパイルされて、

dotnet run

とやればアプリが起動します。

中身をサクっと見た感じ、TemplateStudioのよりも極シンプルに簡単に始められるようにしてあります。それでいて、最新のC#とCommunityToolkit.Mvvmを使った今風な書き方を出来るように予めしてあって、良い感じであります。

特に、MainWindowに色々とコードを書いてしまうというWPF経験者が初めに陥りやすい間違いも、こういうテンプレートを使えば避けられます。(WinUI3のWindowはDependencyObjectから継承されてなくてFrameworkElementではないから色々動かない)

ただし、シンプルなので、逆に言うとAppHostとDependency Injectionを使ってServiceを云々したい、みたいな場合は、(TemplateStudioと違って)自分で変更しないといけません。

ともあれ、これから始めてみる、という場合は丁度良いかもしれないので、これを使ってみることをお勧めします。

なにしろWPFで経験していないと、XAML、MVVM、あたりから既にハードル高いですからね。XAML一つとってもBindigからDependency PropertyやらConverterやら新しい概念が山盛りですので、まずはこういったシンプルで簡単なのから始めるのが良いと思われます。

 

「マイクロソフトのネイティブアプリへの回帰」について(パート2)

前回の「マイクロソフトのネイティブアプリへの回帰」について(パート1) で、時系列でマイクロソフトの動きを紹介しましたが、今回の動きが「回帰」なら、いままでWindowsのアプリは一体どこに向かっていたのか、という点について書いてみたいと思います。

米マイクロソフトのWindows部門のトップであるPavan Davuluriが「Our commitment to Windows quality」というブログを2026年3月20日付けで公開して改善を約束したちょうど1週間前、とあるブログ記事が非常に注目を集めました。

2026年3月13日付の元マイクロソフトのアーキテクトでWindows PowerShellを作ったJeffrey Snoverによる、「Microsoft Hasn’t Had a Coherent GUI Strategy Since Petzold」というブログ記事です。これにはHacker Newsの反応のみならず、さまざまの反響がありました。

「マイクロソフトはWin32 API 以降、一貫性のあるGUIアプリ開発の戦略を持ち合わせていない」という主題で、歴史的な経緯と背景の問題について非常に詳しく書かれているのでぜひ全文を翻訳かましてでも読んで頂きたいと思います。

その後、2026年3月22日、「Windows Native App Development Is a Mess」というブログ記事もまたHacker Newsで話題になりました。「Windowsのネイティブアプリ開発は滅茶苦茶だ」というもの。

はい、おっしゃる通りでございます。

関連で、2026年3月23日、「Microsoft's "Fix" for Windows 11: Flowers After the Beating」というブログが、マイクロソフトの発表にたいする反応として、これまたHacker Newsで話題になりました。
「直すって言ってるけど、そもそも広告やらAIとか無理やり押し込んできたくせに何をいまさら」的な痛烈な批判・・・。

このように、「マイクロソフトのネイティブアプリへの回帰」に前後して、マイクロソフトのGUIアプリ開発にまつわる技術の混沌さとその歴史的経緯に注目が集まった時期でもありました。

自分的には、マイクロソフトのGUI戦略を大まかに時代別に分類するとしたら、以下のようになります。

  • Win32API 世代
    Windows 95・98 以降。C++(MFC等)、Visual Basic 6、Delphi等。
  • .NET 世代
    Windows Vistaから。.NETのWindows FormsとWPF。
  • WinRT 世代
    Windows 8.0で登場。Win32APIを排したWinRT限定の全画面タッチ画面ファーストのモバイル兼用「Metro UI」(意匠の問題で後に「Modern UI」に改名)。Windows10からUWPとして再登場。
  • WinAppSDK 世代
    UWPを廃止して、WinRTとWin32APIを両方使えるようにしたWinUI3(Fluent UI)と、モバイル向けのMAUI。

個人的には、現在の混沌の直接的な原因はWinRT にあると思っています(その起源はAvalonの失敗にあるにせよ)。

この2012年に登場したWindows 8.0におけるWinRTの「Metro UI」(意匠の問題で後に「Modern UI」に改名)は、Windows史上最悪のUIで、いきなりデスクトップOSというより中途半端なタッチファーストのタブレットOS化をしてしまったのです。同時に、WPFモドキでとても中途半端で劣化版と言えるWinRT限定のUWPという新たなアプリケーション形態も発表し、これをWindowsにおける唯一の既定と位置づけました(後に撤回)。

つまり、ガチガチに制約を課した上で、過去のWin32API世代と.NET世代を両方ともバッサリと切り捨てたのです。これは開発者に対する敵対行為であり、最大の裏切り行為と言っても過言ではありません。

このUWPは、iOSアプリやAndroidアプリに対抗したユニバーサルなWindows版という位置づけで、Windows Phone向けの携帯アプリと共通化しているため制約がガチガチで、サンドボックス化され、デスクトップ向けの機能が根本的に欠如していたにも関わらずです。(以前書いた記事「なぜUWPは「ダメ」なのか」)

この事件により、デスクトップ開発をしていた人達が、一斉にWeb開発へ流れます。Ajax全盛時代でしたしね。自分もWindowsの将来すら考えたものです。Linuxへ行くか、Macへ行くか、みたいな。デスクトップGUIアプリ開発者にとってはそれほど大きな方針変更でありました。後の評価では、AppleのiPhoneに対する恐怖によるマイクロソフトのパニックの結果という意見もあるようですが、単に愚かな決断としか言いようがありません。

自分はWindows 8.0が登場した際、ノートパソコンを新調したのですが、わくわくで起動した瞬間、全画面のメトロスタイルに困惑して頭を抱えるほどショックだった記憶があります。Windows 8.1で多少揺り戻しましたがWinRTベースのアプリの酷さに呆れて、速攻でLinuxをデュアルブートでインストールして切り替えてしまいました。

このように、自分を含めた大多数のアプリ開発者はWinRTの「Metro UI」とUWPを完全に見捨て、マイクロソフトのアプリストアは閑散とすることになります。2015年のWindows10の登場でUWPとなり、その後、徐々に制約は少しだけ緩んで行きましたが、既に時は遅し。Windows Phoneも無くなり、UWPの存在意義すらなくなります。

UWPを嫌ってアプリはどんどんWeb化し、2013年に登場したElectronによってWebアプリをラップしてデスクトップアプリ化するのが大々的に普及します。

2020年の5月19日、ついにマイクロソフトは間違いを認め、「Project Reunion」構想を発表します。これが後の「WinAppSDK」です。Reunionというのは、従来のWin32APIベースのデスクトップアプリと、WinRTベースのアプリの「再融合」を謳うものであります。(Windows部門と.NET部門の仲直りという暗の意味もありそう)

2021年のWindows 11のリリースでFluent UIが登場し、WinAppSDK(WinUI3)は同年の11月に公開されましたが、UWPという過去の負の遺産を引きずり、本来のデスクトップアプリに必要な機能が大幅に欠如したままで、バグだらけの状態を放置し続ける、という状況で、未だに本格的な普及には至っていません。

結果として、Windows 11自体も未だに古きWin32APIのアプリと10時代の「Metro UI」とUWPが混在したUIで破綻したまま長きに渡って放置されてきました。ダークモードにしていると特に分かり易くて、Windowsのシステムアプリを開くと度々真っ白な画面が登場して目つぶしを食らいます。Zip解凍の画面とかサービスのアプリとか、諸々。さらに「ストア」や「設定」アプリは未だにUWPのまま、WinUI3に移行できていません。

もっとも酷い例はOutlookですね。ネイティブアプリだったOutlookが見苦しい上に使いにくい上にリソース食いで単なるウェブアプリをラップしただけの代物になった際、英語圏では普通にテック系のメディアからでさえゴミクソアプリ呼ばわりされていました。

原因としては、マイクロソフトによるWindowsとネイティブアプリへの優先度が低く、リソースの投資が不十分で、WinAppSDKにおけるリーダーシップ不在、優秀な人材も配置されずといったことですが、究極的にはトップ(サティア ナデラ)の問題。

マイクロソフトはお金になるサブスクリプション形式のOneDriveとかCopilot、Azure とかのクラウドサービスで儲けてるから、Windowsはサブスクリプションに誘導するためだけの場と化しつつありました。アカウント強制に広告まみれにAIのごり押しはそういう理由。

以上が「マイクロソフトのネイティブアプリへの回帰」にいたる背景です。つまり、「2012年に登場したWindows 8.0のWinRT」から「2026年の現在」までの14年間もの間、過去のGUI技術は更新されず古臭い、かといってWinAppSDK(WinUI3)は未熟すぎてまともに使い物にならない・・・という、にっちもさっちもいかないネィテイブアプリの開発状況が続いてきたのです。それがメモリ食いのElectron等の台頭を招いたとも言えます。

もし今回の「マイクロソフトのネイティブアプリへの回帰」によって、マイクロソフト内で優先度が上がり、「ドッグフーディング(自社利用)」が増えることによって、WinAppSDK(WinUI3)の品質と機能が向上すれば、やっと再びWindowsにおけるネイティブアプリ開発も盛り上がり、WindowsのUIも一貫性のあるものになっていくと期待が少し出てくることになります。

ただ、失った開発者の信頼が戻るには相当の時間とマイクロソフトの具体的な変革が求められるでしょう。

 

続き

torum.hatenablog.com