Xamarin — 概要、プラットフォーム、C#開発

著者: IT Sectr 公開日: 2026-05-01 読了時間: 9 分

Xamarin は、2011年に発表されたC#でモバイルアプリケーションを作成するためのMicrosoftのプラットフォームです。Microsoft Xamarin Documentation, 2024 によると、Xamarin は C# と .NET の共有コードベースを使用して iOS、Android、Windows 向けのアプリケーションを作成でき、Mono Runtime を使用してネイティブコードにコンパイルします。2024年以降、Xamarin.Forms は .NET MAUI に置き換えられました。

重要ポイント

  • Xamarin — iOS、Android、Windows向けのC#開発のためのMicrosoftモバイルプラットフォーム
  • 2つのアプローチ: Xamarin.Forms (XAMLによる共有UI) と Xamarin.Native (個別のネイティブ画面)
  • Mono Runtime が C# を iOS および Android 向けのネイティブ ARM コードにコンパイル
  • XAML — ユーザーインターフェースを構築するための宣言型マークアップ言語
  • .NET MAUI — Microsoftが2022年にリリースしたXamarin.Formsの後継

Xamarin とは

Xamarin は、.NET と Mono に基づくプラットフォームであり、クロスプラットフォームのモバイルアプリケーションを作成するために C# を使用できます。Xamarin 社は 2011 年に設立され、2016 年に Microsoft が 4 億ドルで買収しました。買収後、Xamarin は Visual Studio および Azure エコシステムの一部になりました。

買収前、Xamarin は Enterprise ライセンスの商用製品でした。Microsoft は Visual Studio Community の一部として無料化し、Mono Runtime と SDK バインディングのソースコードもオープンソース化しました。これにより人気が高まり、SlashData のレポートによると、2020 年までに Xamarin はクロスプラットフォームプロジェクトの 15% で使用されていました。

Xamarin の主なアイデアは、コードを 3 つの層に分割することです: 共有ビジネスロジック (C#、.NET Standard)、プラットフォーム固有のプロジェクト (iOS、Android)、および Xamarin.Forms を介したオプションの共有 UI。このアプローチにより、各プラットフォームの API へのネイティブアクセスを維持しながら、最大 75% のコードを再利用できました。

Xamarin の歴史と発展

最初のバージョン Xamarin 1.0 は 2012 年に iOS のみのサポートでリリースされました。Android サポートは 2013 年に追加されました。宣言型 UI フレームワークである Xamarin.Forms は 2014 年の Evolve カンファレンスで発表されました。Xamarin 4.0 (2016) には watchOS と tvOS のサポートが含まれていました。Xamarin 5.0 (2019) では CSS スタイルと Material Design テーマが導入されました。

最新のメジャーバージョン Xamarin.Forms 5.0 は 2021 年にリリースされました。Microsoft は Xamarin がサポートモードに入ることを発表し (サポート終了: 2024 年 5 月 1 日)、.NET 6+ の一部である .NET MAUI (Multi-platform App UI) への移行を推奨しました。Xamarin.Forms 5.0 は新機能を受け取らず、重要なセキュリティ修正のみを受け取ります。

Xamarin.Forms と Xamarin.Native の比較

Xamarin.Forms は、統一されたコンポーネントセットを通じてインターフェースを抽象化する UI フレームワークです。XAML マークアップ (ContentPage、StackLayout、Label、Button) は、レンダラーを介して各プラットフォームのネイティブコントロールにマッピングされます。Label は iOS では UILabel、Android では TextView に変換されます。このアプローチにより、最大 95% の共有 UI コードが実現します。

Xamarin.Native (Xamarin.iOS および Xamarin.Android とも呼ばれる) は、共有 UI なしのアプローチです。開発者は単一の C# バックエンドを使用して、iOS (Interface Builder または Storyboard) と Android (AXML) 用に個別の画面を作成します。これにより各プラットフォームの外観を完全に制御できますが、UI コードの重複が 50~60% に増加します。

Microsoft Developer Survey 2023 によると、Xamarin プロジェクトの 70% が Xamarin.Forms、20% が共有サービスを持つ Xamarin.Native、10% がプラットフォーム固有の最適化のためのカスタムレンダラーを使用したハイブリッドアプローチでした。

Xamarin のアーキテクチャ

Xamarin のアーキテクチャ は 2 つのレベルで構成されています。下位レベルは Mono Runtime で、プラットフォーム上で C# IL (Intermediate Language) を実行します。上位レベルは、iOS 用の Managed Callable Wrappers (MCW) と Android 用の Android Bindings で構成され、マネージド C# コードからネイティブ API へのアクセスを提供します。

Mono Runtime とプラットフォームバインディング

Mono は .NET Framework のオープンソース実装です。Xamarin では、Mono は Common Language Runtime (CLR) として動作し、C# アセンブリをロードしてマシンコードにコンパイルします。iOS では、Mono は事前コンパイル (AOT) で ARM64 マシンコードにコンパイルします。Apple はユーザーアプリケーションでの JIT コンパイルを禁止しているためです。Android では、Mono は AOT プロファイリングを使用した JIT コンパイルを使用します。

iOS バインディング (Xamarin.iOS) は、Objective-C ランタイム上の C# ラッパーです。各 UIKit クラス (UIView、UIViewController) は、Xamarin.iOS.dll アセンブリ内のマネージドクラスで表現されます。Objective-C セレクターは MessageUI メカニズムを介して呼び出されます。Android では、Xamarin.Android は Android Callable Wrappers (ACW) — C# と Java/Kotlin の間の JNI ブリッジを使用します。Kotlin ライブラリは Android Bindings Library を介してラップされます。

Xamarin における XAML と C#

XAML (eXtensible Application Markup Language) は UI を記述するための宣言型言語です。Xamarin.Forms では、XAML が画面構造を定義します: ページ (ContentPage)、コンテナ (StackLayout、Grid、FlexLayout)、要素 (Label、Entry、Button、ListView)。C# のコードビハインドはイベント (Clicked、PropertyChanged) を処理し、データバインディング (Binding、Data Binding) を管理します。

MVVM パターン は Xamarin.Forms で推奨されるアーキテクチャです。Model はデータを保持し、ViewModel は INotifyPropertyChanged とコマンド (ICommand) を実装し、View (XAML) は BindingContext を介してバインドします。RelayCommand や Prism DelegateCommand を介した ICommand の実装により、UI 依存関係なしで ViewModel をテストできます。Prism.Forms ライブラリは NavigationService、DialogService、およびモジュール性を提供します。

Xamarin.Forms アプリケーションの例

csharp
using Xamarin.Forms;

namespace XamarinApp
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            
            var label = new Label
            {
                Text = "Hello, Xamarin!",
                FontSize = 24,
                VerticalOptions = LayoutOptions.Center,
                HorizontalOptions = LayoutOptions.Center
            };
            
            Content = new StackLayout
            {
                Children = { label }
            };
        }
    }
}

Xamarin の利点と欠点

統一された C# 言語 — Xamarin の主な利点です。C# と .NET の開発者は、Swift、Kotlin、Objective-C を学ばずにモバイルアプリケーションを作成できます。ビジネスロジック、ネットワーキング、データベース (ORM 経由の SQLite)、暗号化、ロギングは一度記述すればすべてのプラットフォームで再利用できます。これによりコードの保守とテストが簡素化されます。

ネイティブ API へのアクセス — Xamarin はバインディングを介して iOS (Cocoa Touch) および Android (Android SDK) API への 100% のアクセスを提供します。iOS または Android の新しいバージョンがリリースされると、Microsoft は 24~48 時間以内に更新されたバインディングを公開します。不足しているバインディング (カスタム Objective-C または Kotlin ライブラリ) については、Android Bindings Library または iOS Binding Library を手動で作成します。

Microsoft エコシステムとの統合 — Xamarin は Visual Studio、Azure DevOps、App Center (CI/CD、テスト、監視)、Enterprise Mobility + Security (Intune、ADAL、MSAL) をサポートしています。App Center Analytics と Crashes はライブアプリケーションからデータを収集します。Visual Studio App Center はビルド、デバイステスト、アプリストアへの公開を自動化します。

欠点 として、アプリケーションサイズが挙げられます — 空の画面の Xamarin.Forms APK は 25~35 MB であるのに対し、ネイティブ Android アプリは 5~8 MB です。コンパイル時間も長く、中規模プロジェクトは 2~5 分かかるのに対し、ネイティブ Android Studio では 30~60 秒です。Mono Runtime は最終バイナリに 15~20 MB 追加します。

2 つ目の欠点は 新しい API の遅延 です。新しい iOS/Android 機能はネイティブ開発ではすぐに利用できますが、Xamarin ではバインディングリリースから 1~2 ヶ月後に到着します。iOS 17 SDK (2023) はリリースから 3 週間後に Xamarin で完全サポートされました。緊急のプロジェクトでは、これが重要になる可能性があります。.NET MAUI は .NET 8 との直接統合によりこの問題を解決します。

基準Xamarin.NET MAUI
プラットフォームiOS、Android、WindowsiOS、Android、Windows、macOS、Tizen
基本フレームワークMono + .NET Standard.NET 6+ (統合 BCL)
UI フレームワークXamarin.Forms.NET MAUI (後継)
サポート状況2024年5月1日でサポート終了Microsoft が活発に開発中
Hot Reload制限ありXAML Hot Reload + C# Reload

.NET MAUI への移行

.NET MAUI (Multi-platform App UI) は Xamarin.Forms の進化版で、Microsoft が 2022 年に .NET 6 とともにリリースしました。MAUI は iOS、Android、Windows、macOS を単一のプロジェクトに統合し、プラットフォームごとに個別のプロジェクトは必要ありません。Xamarin.Forms とは異なり、MAUI は Mono と .NET Standard ではなく .NET 6+ BCL を使用します。

Microsoft は 移行ツール — Visual Studio 用の .NET Upgrade Assistant を提供しています。これは Xamarin.Forms プロジェクトを分析し、名前空間を置き換え (Xamarin.Forms.* -> Microsoft.Maui.*)、.csproj ファイルを更新し (SDK スタイル形式)、Android と iOS の設定を統一構成に移行します。移行後、プロジェクトは .NET 8 のすべての新機能 (Native AOT、セキュリティ用の CodeQL、ビルドパフォーマンスの向上) を活用できます。

重要な変更は 単一プロジェクト です。Xamarin.Forms では 3 つの個別プロジェクト (iOS、Android、.NET Standard) が必要でしたが、.NET MAUI は Platforms/iOS、Platforms/Android、Platforms/Windows、Platforms/MacCatalyst フォルダを持つ 1 つのプロジェクトを使用します。各プラットフォームは、プラットフォーム固有の条件付きディレクティブ (#if ANDROID、#if IOS) を使用して共有コードからコンパイルされます。

既存のコードベース の場合、.NET MAUI は Xamarin.Forms との 90% の後方互換性を維持しています。API 互換性は ContentView、ContentPage、Shell、NavigationPage、DependencyService、MessagingCenter をカバーしています。主な変更は Device.StartTimer (IDispatcher に置き換え)、Platform API (Microsoft.Maui.ApplicationModel に移動)、非推奨のレンダラー (Handlers に置き換え) に影響しました。

移行 プロセスは 5 つのステップで構成されます。第一に — Xamarin.Forms を最新バージョン 5.0 に更新します。第二に — .NET Standard 2.0 を .NET 6 または 8 に置き換えます。第三に — Upgrade Assistant を実行してプロジェクトを自動変換します。第四に — Platforms フォルダ内のプラットフォーム固有コードを修正します。第五に — 特にカスタムレンダラーとプラットフォームサービスのテストを行います。

よくある質問

Xamarin とは何ですか?

Xamarin は、iOS、Android、Windows 向けの C# 開発のための Microsoft モバイルプラットフォームです。共有コードコンパイルに Mono Runtime を使用し、Xamarin.Forms (XAML による統一 UI) と Xamarin.Native (プラットフォームネイティブ画面) の 2 つのアプローチを提供します。2024 年以降、Xamarin はサポートモードです。

Xamarin と Flutter の違いは何ですか?

Xamarin は C# と .NET を使用し、バインディングを介してネイティブコントロール (UIKit、View) を通じてレンダリングします。Flutter は Dart と独自のレンダリングエンジン (Impeller) を使用し、ネイティブ UI コンポーネントに依存しません。Flutter はすべてのプラットフォームで一貫した外観を提供し、Xamarin は各 OS のネイティブな外観を提供します。Flutter は Google がサポートし、Xamarin の 15% に対して 46% のシェアを持っています。

2024 年に Xamarin で新しいプロジェクトを始めるべきですか?

いいえ。Microsoft は 2024 年 5 月 1 日に Xamarin の サポートを終了 しました。すべての新規プロジェクトは、.NET 8 に組み込まれ、.NET プラットフォームとともに更新を受ける後継の .NET MAUI で開始する必要があります。既存の Xamarin.Forms プロジェクトについては、12~18 ヶ月以内の移行が推奨されます。

Xamarin.Forms はネイティブアプリより遅いですか?

通常のアプリケーションではその差は わずか です。Xamarin.Forms は Managed-Wrapper-Native 層によるレンダリングオーバーヘッドが 5~10% 追加されます。大量のリスト (ListView 対 RecyclerView) やアニメーション (プラットフォーム API なしの Xamarin.Forms 使用) で問題が発生します。CollectionView (ListView を置き換え) とネイティブアニメーションの使用が推奨されます。

Xamarin で Kotlin ライブラリを使用できますか?

はい、Android Bindings Library を通じて可能です。この .NET プロジェクトタイプは、AAR または JAR アーカイブを自動クラスおよびメソッド生成付きの C# バインディングにラップします。Kotlin ライブラリには、コルーチンとシールドクラス用の追加ハンドラが必要で、Binding Library の Metadata.xml を介して設定されます。

まとめ

  • Xamarin — Mono Runtime 上に構築された、C# モバイル開発のための Microsoft プラットフォーム
  • Xamarin.Forms はネイティブレンダラーを使用した XAML マークアップにより 90~95% の共有コードを提供
  • Xamarin.Native は個別画面というコストで各プラットフォームの UI を完全制御
  • 欠点: APK サイズ 25~35 MB、コンパイル時間 2~5 分、新しい API の遅延
  • .NET MAUI — 単一プロジェクト、.NET 8、5 プラットフォームサポートを備えた Xamarin.Forms の後継
  • .NET MAUI への移行 は Upgrade Assistant を使用して中規模プロジェクトで 1~2 日
  • 新規プロジェクト には .NET MAUI を使用 — Xamarin は 2024 年 5 月にサポート終了

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください