クロスプラットフォームのWindows Presentation Framework、いかがですか?答えは「はい」です。Avaloniaの解説

Table of Contents

クロスプラットフォームのWindows Presentation Framework、いかがですか?答えは「はい」です。Avaloniaの解説

インタビューデスクトップ アプリケーション用のクロスプラットフォーム フレームワークである Avalonia は、かなりのユーザー コミュニティを構築していますが、Microsoft の公式ソリューションに代わる現実的な選択肢となるでしょうか?

Avaloniaという名前は、長年.NET開発者として活動してきた方ならお馴染みでしょう。Avalonは、Longhornの「3本の柱」の一つであるWindows Presentation Foundation(WPF)のコードネームで、2004年のMicrosoft Professional Developers Conferenceで初めて発表されました。

Avalonの役割は変化しました。Longhornに致命的なパフォーマンス問題があることが明らかになったためです。この問題は、最終的にWindows Vistaとしてリリースされるまでに長い遅延があったにもかかわらず、.NETをネイティブコードで使用できるようにするため、オペレーティングシステムの一部を書き換えることで解決されました。WindowsのネイティブユーザーインターフェースとしてのAvalonという構想は消滅し、WPFは.NETデスクトップアプリケーションを作成するための単なる別の手段となりました。

Windows、iOS/macOS、Android、Linuxのロゴ

「開発者はマイクロソフトが正しいことをしてくれるという希望を失っている」…レドモンドはWinUIをクロスプラットフォームにするよう促される

続きを読む

不安定なスタートにもかかわらず、WPFはそれを使いこなした多くの開発者やデザイナーに好評を博しました。ベクターグラフィックをベースとしているため、様々なディスプレイへのスケーリングが容易で、GPUとハードウェアアクセラレーションを最大限に活用できます。WPFは独自のコントロールを描画し、組み込みのWin32 GUIコンポーネントは使用しません。ユーザーインターフェースは通常、XML言語であるXAMLで定義されます。MicrosoftがWebページへの埋め込み用に簡素化されたSilverlightを導入し、その後Windows Phoneにも対応したことで、WPFはある意味でクロスプラットフォーム化されました。

Microsoftは2012年のWindows 8リリースでWPFとSilverlightに背を向けました。WindowsチームにはVistaの悪い記憶がまだ残っていたという噂です。その代わりに登場したのは、重厚な「Metro」フレームワークで、後にユニバーサルWindowsプラットフォーム(UWP)へと進化し、現在はWinUIと「Project Reunion」へと進化し続けています。

しかし、再統合されていないのはWPFです。WPFアプリケーションはWindows 10でも引き続き動作し、MicrosoftはWPFをオープンソース化し、Windows専用に.NET Core上で動作させる作業を行いましたが、WPFは同社の戦略の焦点では​​なく、長年放置されてきました。

アヴァロニアの霧

ここで、100% の互換性はないものの、WPF をベースにしたクロスプラットフォームのオープンソース GUI フレームワークである Avalonia を紹介します。

始まりは2013年だったと、開発者のスティーブン・カーク氏はThe Register紙に語った。「WPFをオープンソースプロジェクトとして再実装してみることにしました。何かやりたいと思ったから…数ヶ月やってみたのですが、あまり面白くありませんでした。そこで、WPFのアイデアをベースに、もっとモダンな言語と機能を使って変更を加え、自分のやりたいようにやってみようと思ったんです(笑)」

Avalonia は常にクロスプラットフォームになることを意図しており、当初は Mono を使用していましたが、2014 年後半に登場してからは .NET Core を使用するようになりました。

カーク氏はまた、「[WPF] のアーキテクチャの一部における冗長性と時代遅れさ」を改善しようとした。

プロジェクトはカークの時間と意欲次第で順調に進んでいましたが、「.NET Core が登場したとき、多くの人が UI フレームワークを求めていました。その時点では UWP は存在していましたが、UWP でできることは当時も今も非常に限られています。しかも、UWP は .NET Core では動作しません。」

Avaloniaへの勢いは高まり、約1年前、KirkはNikita TsukanovとDan Walmsleyという2人の開発者と共に、商用サポートの提供と開発資金の調達を目的としてAvaloniaUIという会社を設立しました。Microsoftの公式サポートがないにもかかわらず、活発なGitterディスカッショングループや1万以上のスターを獲得したGitHubリポジトリは、大きな関心を示していると指摘しています。Kirkは、.NETの世界が発展していくためには、Microsoftから独立したプロジェクトがもっと必要だと考えています。

Avaloniaは、.NET Frameworkおよび.NET Core経由でWindows、Linux、macOSをターゲットとするXAMLベースのフレームワークです。モバイル対応も計画されています。「現在開発中です。法人のお客様からリクエストをいただいています。具体的な日付はお伝えできません」とKirk氏は述べ、iOSとAndroidの両方をサポートする見込みだと付け加えました。AvaloniaはレンダリングにSkiaグラフィックライブラリを使用しています。

なぜAvaloniaに興味があるのか​​?「私が知っているのは、商用サポートを求めて来られたお客様だけです」とKirk氏は語る。「Windowsユーザーであっても、WPFが提供するよりも低レベルのアクセスレベルを必要とするお客様もいらっしゃいます。

「3Dモデリングアプリケーションを開発しているお客様もいらっしゃいます。オープンソースであること、そして低レベルまで開発を行えることから、独自の3Dモデルを埋め込むことができます。また、Windows用のWPFアプリケーションとMac用のObjective Cアプリケーションをそれぞれ所有しており、それらを統合したいというお客様もいらっしゃいます。さらに、WPFの停滞にうんざりし、UWPを試してみたものの制限が多すぎると感じたというお客様もいらっしゃいます。多くのお客様が当社に惹かれるのは、当社が真のオープンソースプロジェクトであり、大企業の支援を受けていないからです。」創業当初とは異なり、現在では互換性が最優先事項となっています。「何か変更する必要がある場合は変更しますが、それは必要に迫られた場合に限られます」とカーク氏は語ります。

.NET Foundationが.NETに意味のある影響を与えることができるかどうかはまだわかりません。

Avaloniaは.NET Foundationプロジェクト、つまりMicrosoftが.NETをサポートするために設立した財団です。「約1年前に申請し、承認されました」とKirk氏は語ります。「今のところ、特に変化はありません。.NET Foundationに参加することで、Microsoftから何らかの形で認知され、私たちの活動を妨害したり、独自のソリューションに置き換えたりされることがないようにできると考えたことが主な理由です。….NET Foundationが.NETに何らかの意味のある影響を与えられるかどうか、まだ見守っています。」

重要な貢献を果たした企業の一つがJetBrainsで、同社はRider IDEを通じてAvaloniaをサポートしています。「大きな違いがありました」とKirk氏は言います。Visual Studioプラグインはありますが、「まず第一にVisual StudioはWindows専用ですし、第二にVisual Studio用の拡張機能を書くのは本当に大変です」と彼は付け加えました。「Microsoftは私たちのXAMLサポートを頻繁に壊してしまいます。なぜなら、彼らはXAMLを考慮に入れていないからです。そのため、独自の.axaml拡張子に移行する必要がありました」と彼は言います。

.NET Foundationの一員になることで、マイクロソフトが私たちを妨害したり、独自のソリューションに置き換えたりしないように、ある程度の可視性が得られるかもしれないと考えました。

Microsoftが独自のAvaloniaを開発する可能性は低いようです。最も近いのは、Xamarin FormsをベースにしたMAUI(.NET Multi-platform App UI)です。しかし、MAUIが他と異なる理由はいくつかあります。まず、XAMLを使用しているとはいえ、WPFとは全く異なる言語体系であることです。「全く異なるXAML言語なので、移植性はほぼゼロです」とKirk氏は述べています。

第二に、MAUIはネイティブコントロールを使用するのに対し、Avaloniaは独自のコントロールを描画します。つまり、MAUIとAvaloniaの関係は、Javaの世界におけるSWT(Standard Widget Toolkit)とSwingの関係と同じです。ネイティブコントロールは「有効なアプローチです。どちらが最適かは言いたくありません」と彼は述べています。

カーク氏によると、MicrosoftのWPF実装をクロスプラットフォーム・フレームワークに変換するのは難しいという。「Win32 APIに強く依存しており、コードは全く階層化されていません。そのため、これらのWin32呼び出しは最下位レベルから最上位レベルへと渡って行われています。これらを抽象化する合理的な方法はありません。」

Avalonia はバージョン 0.10 です。

1.0 リリースはいつになるでしょうか?

「1.0は完全に飛ばします。次のリリースは11.0になると思います」とカーク氏は笑いながら言った。「『よし、1.0が出たぞ』と言えるような瞬間は絶対に来ない。コミュニティがあまりにもバラバラだから、『これを出さなきゃ』って言う人がいる。いずれにせよ安定していて、みんな使ってくれている。ただバージョン番号が1.0じゃないだけなんだ」と彼は付け加えた。

Avaloniaは小規模なプロジェクトであり、資金調達に苦労することもあります。「会社は成長しています」とカーク氏は述べ、最大の課題は「サポートとカスタム開発の販売によって、コアとなるOSS製品の開発に必要なリソースが奪われる可能性がある」ことだと指摘しました。

Avaloniaには欠陥があり、修正すべき点も山積しています。GitHubには1,000件以上の未解決問題が存在します。その一つがDataGridです。「皆さんが常に求めているカスタムコントロールの一つがDataGridです。ツリーとDataGridを組み合わせたものです。そのため、私たちはこれに取り組んできました。販売も検討しています。まだ何も決まっていません。より多くの人々にAvaloniaの開発に携わってもらうために、収益を上げる必要があります」とKirk氏は語りました。

デスクトップアプリケーションを開発する.NET開発者にとって、これほど多くの選択肢が待ち受けている現状において、Avaloniaは混乱を増大させているだけなのだろうか?「確かに混乱はしますが、JavaScriptの世界ほどではありません」とKirk氏は語る。「選択肢が多すぎて混乱するというのは、もしかしたら健全なのかもしれません。100%健全とは言えませんが、単一文化も100%健全とは言えません。私たちは、今やっていることをそのまま進めていくだけです。」®

Discover More