🌊

Xamarin のサポート終了と .NET 統合の話

2022/08/26に公開

コンテキスト

Xamarin のサポート終了というアナウンスを見て、Xamarin として提供されていたものが終了するというような誤解と不安を煽るような流れがあったので日頃 .NET をウォッチしているものとしては少し補足しておきたいと思います。

Xamarinのサポートは2024年5月1日で終了。マイクロソフトが.NET MAUI関連のロードマップを示す - Publickey

前提

Xamarin といった場合には次の製品ファミリーを指していることが多いです。

  • Xamarin: .NET のネイティブプラットフォームバインディングのフレームワーク
    • Mono を基盤としつつ各種プラットフォーム (iOS, Android, macOS, Tizen など) のバインディングを提供する一式
    • 例えば Android の ActivityView を C# などの .NET 言語で取り扱えるようにしてアプリケーションを作れるようにする
  • Xamarin.Forms: .NET 向けのマルチプラットフォーム UI フレームワーク
    • UI を抽象化した .NET 向けのフレームワーク
    • モバイルでは基盤に Xamarin を使用することでマルチプラットフォームを実現
    • 位置づけとしては React Native に近いイメージ

Xamarin.Forms 製モバイルアプリケーションは Xamarin 上で作られていますが、Xamarin を使用していることは Xamarin.Forms を使用していることにはならない点に注意が必要です。

「製品ファミリー名としての Xamarin」と「ネイティブプラットフォームバインディングの Xamarin」がどちらも Xamarin となってややこしいので以下特別な断りがない限り Xamarin と書いているものはネイティブバインディングのことです。

要するに

  • Xamarin という独立したフレームワークは .NET 6 で .NET に統合された (機能はなくならない)
  • Xamarin.Forms は大きく改修され .NET 6 で .NET MAUI という名前でリリースされた
  • Xamarin の .NET への統合と Xamarin.Forms の MAUI への移行は2年以上前からアナウンスされていた
  • "Xamarin" という製品ファミリー(=統合前のもの)のサポートは2024年5月まで
    • "Xamarin" という製品ファミリー/ブランドが使われなくなるという意味では終わる
    • 現行世代のネイティブプラットフォームバインディング(元 Xamarin)は .NET の一部として続く
    • 現行世代のマルチプラットフォーム UI フレームワークは MAUI

Xamarin という独立したフレームワークは .NET に統合された

今まで Xamarin と呼ばれていたネイティブプラットフォームバインディングのフレームワークは .NET に統合されました。

これは Xamarin として独立してリリースされていたフレームワークから .NET というフレームワークの一部となってリリースされるように変わったということです。

.NET SDK 側から見るとターゲットプラットフォームに Windows 向けに加えて iOS や Android が増えたような形になります(例えば Windows サポートである WPF, WinForms は以前から .NET の一部)。

Xamarin という名前は内部には残っていますし、.NET に統合されたことで SDK の構成や名前などが変更されていますが基本は地続きだといえます。

ちなみにバインディングなので名前空間も元々 Xamarin ではなく AndroidFoundation だったりします。Xamarin.Forms を使用していない場合にはこの .NET SDK の移行が必要ですが、コードというよりもプロジェクトファイル構成周りの影響が大きいと思われます。

.NET の補足

そもそも .NET になじみのない方は .NET にはいくつかの実行環境があるということをご存じないかもしれません。

  • .NET: クロスプラットフォームとなった .NET Core 以降の最新の .NET ランタイムと API (今 .NET というとこれ)
  • .NET Framework: Windows 向けの .NET Core 以前のクラシックなランタイムと API
  • Mono: Linux や macOS などで動く .NET Framework / .NET ランタイム
  • Unity: Mono をベースとしたゲームエンジン
  • Xamarin: Mono をベースとした Android, iOS などのバインディング

.NET Framework は .NET へと移り、Mono は既に .NET の一部となっています。そして Xamarin も .NET に統合されました。(細かく言うと .NET は API セット名でもあり、実行エンジン自体は CoreCLR と Mono という2種類がある状況です)

これの統合はモバイルプラットフォームサポートが .NET 自体の進化と歩調が合うようになるという意味が大きいです。以前は Xamarin という独自の .NET の実行環境のような扱いだったので .NET Core 以降の API / SDK のサポートが限定的という事情がありました。

Xamarin.Forms は大きく改修され .NET 6 で .NET MAUI としてリリースされた

.NET MAUI (Multi-platform App UI) は Xamarin.Forms をベースに様々な部分で改修や新機能、新しいプラットフォームサポートを加えて .NET 6+ 向けにリリースされたマルチプラットフォーム UI フレームワークです。

Xamarin.Forms には Windows サポートがありましたが、プラットフォームバインディングの Xamarin には依存していないのに Xamarin の名を冠していたところを考えるとあるべき形になったといえます。

Xamarin 世代から .NET 世代に移行する場合、Xamarin.Forms を使用しているのであれば MAUI への移行の必要があります。
ベースは同じであることから移行パスはあるものの、ギャップはあるため労力がかかる可能性はあります。この先 Xamarin.Forms でバージョンアップしても改修ほぼ不要でビルド/リリースし続けたいという期待を持っていた場合には残念ながら裏切られることになります。

Xamarin という製品ファミリー(=統合前のもの)のサポートは2024年5月まで

.NET で利用できるモバイルプラットフォームバインディングは上記した通り .NET 6 前後で扱いが異なります。

  • .NET 6 以前: Xamarin を利用する
  • .NET 6 以降: .NET に統合された SDK の一部として提供される機能(元 Xamarin)を利用する

現在 .NET というフレームワークは .NET 6 が 昨年11月に LTS としてリリースされ、マルチプラットフォーム向けサポートも現行世代としては .NET に移っています。そのため Xamarin ファミリーという旧世代サポートは2024年5月までとなる、という話です。

Xamarin.Forms は Xamarin ファミリーのため Xamarin と同じライフサイクルとなります。

なお MAUI は .NET ファミリーですが、Xcode や Android SDK などのリリースとの兼ね合いがあるため、.NET とは少し異なるライフサイクルとなります。

Discussion