Xamarin とはWhat is Xamarin?

iOS および Android での Xamarin サンプル アプリケーションのスクリーンショットScreenshots of example Xamarin application in iOS and Android

Xamarin は、.NET を使用して、iOS、Android、Windows 向けの最新で高性能なアプリケーションをビルドするためのオープンソースのプラットフォームです。Xamarin is an open-source platform for building modern and performant applications for iOS, Android, and Windows with .NET. Xamarin は、基になるプラットフォーム コードと共有コードの通信を管理する抽象化レイヤーです。Xamarin is an abstraction layer that manages communication of shared code with underlying platform code. Xamarin は、メモリ割り当てやガベージ コレクションなどの利便性を提供するマネージド環境で実行されます。Xamarin runs in a managed environment that provides conveniences such as memory allocation and garbage collection.

Xamarin を使用すると、開発者はプラットフォーム間でアプリケーションの 90% (平均) を共有できます。Xamarin enables developers to share an average of 90% of their application across platforms. このパターンにより、開発者はすべてのビジネス ロジックを 1 つの言語で記述 (または既存のアプリケーション コードを再利用) して、各プラットフォームでネイティブのパフォーマンスとルック アンド フィールを実現することができます。This pattern allows developers to write all of their business logic in a single language (or reuse existing application code) but achieve native performance, look, and feel on each platform.

Xamarin アプリケーションを PC または Mac で記述し、ネイティブ アプリケーション パッケージ (Android 上の .apk ファイルや、iOS 上の .ipa ファイルなど) にコンパイルできます。Xamarin applications can be written on PC or Mac and compile into native application packages, such as an .apk file on Android, or an .ipa file on iOS.

注意

現在、iOS 用のアプリケーションをコンパイルして展開するには、MacOS マシンが必要です。Compiling and deploying applications for iOS currently requires a MacOS machine. 開発要件の詳細については、システム要件を参照してください。For more information about development requirements, see system requirements.

Xamarin の対象者Who Xamarin is for

Xamarin は、次のような目標を持つ開発者を対象としています。Xamarin is for developers with the following goals:

  • プラットフォーム間でコード、テスト、ビジネス ロジックを共有する。Share code, test and business logic across platforms.
  • Visual Studio を使用して C# でクロスプラットフォーム アプリケーションを作成する。Write cross-platform applications in C# with Visual Studio.

Xamarin のしくみHow Xamarin works

Xamarin アーキテクチャの図

この図は、クロスプラットフォーム Xamarin アプリケーションのアーキテクチャ全体を示しています。The diagram shows the overall architecture of a cross-platform Xamarin application. Xamarin を使用すると、プラットフォームごとにネイティブ UI を作成し、プラットフォーム間で共有されるビジネス ロジックを C# で記述できます。Xamarin allows you to create native UI on each platform and write business logic in C# that is shared across platforms. ほとんどの場合、アプリケーション コードの 80% は Xamarin を使用して共有できます。In most cases, 80% of application code is sharable using Xamarin.

Xamarin は .NET 上に構築されています。このため、メモリの割り当て、ガベージ コレクション、基になるプラットフォームとの相互運用性などのタスクが自動的に処理されます。Xamarin is built on top of .NET, which automatically handles tasks such as memory allocation, garbage collection and interoperability with underlying platforms.

プラットフォーム固有のアーキテクチャの詳細については、「Xamarin.Android」および「Xamarin.iOS」を参照してください。For more information about platform-specific architecture, see Xamarin.Android and Xamarin.iOS.

追加された機能Added features

Xamarin には、ネイティブ プラットフォームの機能が組み合わされたうえ、次のような機能が多数追加されています。Xamarin combines the abilities of native platforms and adds a number of features, including:

  1. 基になる SDK の完全なバインディング – Xamarin には iOS と Android の両方の基になるプラットフォーム SDK のほぼ全体を対象としたバインディングが含まれています。Complete binding for the underlying SDKs – Xamarin contains bindings for nearly the entire underlying platform SDKs in both iOS and Android. さらに、これらのバインディングは厳密に型指定されています。つまり、ナビゲーションや使用が簡単で、開発時に堅牢なコンパイル時の型チェックが行われます。Additionally, these bindings are strongly-typed, which means that they’re easy to navigate and use, and provide robust compile-time type checking and during development. 厳密に型指定されたバインディングは、ランタイム エラーの削減とアプリケーションの品質向上につながります。Strongly-typed bindings lead to fewer runtime errors and higher-quality applications.
  2. Objective-C、Java、C、および C++ の相互運用 – Xamarin は Objective-C、Java、C、C++ ライブラリを直接呼び出す機能を提供しているため、サード パーティ製の豊富なコードを使用できます。Objective-C, Java, C, and C++ Interop – Xamarin provides facilities for directly invoking Objective-C, Java, C, and C++ libraries, giving you the power to use a wide array of third party code. この機能により、Objective-C、Java、C/C++ で記述された既存の iOS および Android のライブラリを使用できるようになります。This functionality lets you use existing iOS and Android libraries written in Objective-C, Java, or C/C++. さらに、Xamarin は宣言型の構文を使用してネイティブの Objective-C および Java のライブラリをバインドできるバインド プロジェクトも提供しています。Additionally, Xamarin offers binding projects that allow you to bind native Objective-C and Java libraries using a declarative syntax.
  3. 最新の言語構造 – Xamarin アプリケーションは、現代的な言語である C# で記述されています。これには、動的言語機能や、ラムダ、LINQ などの関数コンストラクト、並列プログラミング機能、ジェネリックなど、Objective-C と Java を超える大幅な改善が含まれています。Modern language constructs – Xamarin applications are written in C#, a modern language that includes significant improvements over Objective-C and Java such as dynamic language features, functional constructs such as lambdas, LINQ, parallel programming, generics, and more.
  4. 堅牢な基本クラス ライブラリ (BCL) – Xamarin アプリケーションでは .NET BCL が使用されます。これはクラスの大規模なコレクションで、強力な XML、データベース、シリアル化、IO、文字列、ネットワークのサポートなどの包括的かつ簡素化された機能が含まれています。Robust Base Class Library (BCL) – Xamarin applications use the .NET BCL, a large collection of classes that have comprehensive and streamlined features such as powerful XML, Database, Serialization, IO, String, and Networking support, and more. 既存の C# コードをコンパイルしてアプリで使用することができます。これにより、BCL を超える機能を追加する何千個ものライブラリにアクセスできるようになります。Existing C# code can be compiled for use in an app, which provides access to thousands of libraries that add functionality beyond the BCL.
  5. 最新の統合開発環境 (IDE) – Xamarin では最新の IDE である Visual Studio が使用されています。これには、コードのオート コンプリート、高度なプロジェクトとソリューションの管理システム、包括的なプロジェクト テンプレート ライブラリ、統合ソース管理などの機能が含まれます。Modern Integrated Development Environment (IDE) – Xamarin uses Visual Studio, a modern IDE that includes features such as code auto completion, a sophisticated project and solution management system, a comprehensive project template library, integrated source control, and more.
  6. モバイルのクロス プラットフォーム サポート – Xamarin には、iOS、Android、Windows という 3 つの主要なプラットフォーム向けの高度なクロス プラット フォーム サポートが用意されています。Mobile cross-platform support – Xamarin offers sophisticated cross-platform support for the three major platforms of iOS, Android, and Windows. 記述したアプリケーションは最大 90% のコードを共有することができ、Xamarin.Essentials では、3 つのすべてのプラットフォームに共通するリソースにアクセスするための Unified API が提供されます。Applications can be written to share up to 90% of their code, and Xamarin.Essentials offers a unified API to access common resources across all three platforms. 共有コードにより、モバイル開発者の開発コストと市場投入までの時間の両方が大幅に削減されます。Shared code can significantly reduce both development costs and time to market for mobile developers.

Xamarin.AndroidXamarin.Android

Xamarin.Android アーキテクチャ ダイアグラムXamarin.Android architecture diagram

Xamarin.Android アプリケーションでは、アプリケーションの起動時に、C# が 中間言語 (IL) にコンパイルされてから、ネイティブのアセンブリに Just-in-Time (JIT) コンパイルされます。Xamarin.Android applications compile from C# into Intermediate Language (IL) which is then Just-in-Time (JIT) compiled to a native assembly when the application launches. Xamarin.Android アプリケーションは、Mono 実行環境内で Android Runtime (ART) 仮想マシンとサイド バイ サイドで実行されます。Xamarin.Android applications run within the Mono execution environment, side by side with the Android Runtime (ART) virtual machine. Xamarin には、Android.* と Java.* 名前空間への .NET バインドが用意されています。Xamarin provides .NET bindings to the Android.* and Java.* namespaces. Mono 実行環境では、Managed Callable Wrappers (MCW) 経由でこれらの名前空間を呼び出し、Android Callable Wrappers (ACW) を ART に提供して、両方の環境で相互にコードを呼び出せるようにします。The Mono execution environment calls into these namespaces via Managed Callable Wrappers (MCW) and provides Android Callable Wrappers (ACW) to the ART, allowing both environments to invoke code in each other.

詳細については、Xamarin.Android のアーキテクチャに関するページをご覧ください。For more information, see Xamarin.Android architecture.

Xamarin.iOSXamarin.iOS

Xamarin.iOS アーキテクチャ ダイアグラムXamarin.iOS architecture diagram

Xamarin.iOS アプリケーションは、C# からネイティブ ARM アセンブリ コードに完全に Ahead-of-Time (AOT) コンパイルされます。Xamarin.iOS applications are fully Ahead-of-Time (AOT) compiled from C# into native ARM assembly code. Xamarin では、セレクターを使用して Objective-C がマネージド C# に公開され、レジストラーを使用してマネージド C# コードが Objective-C に公開されます。Xamarin uses Selectors to expose Objective-C to managed C# and Registrars to expose managed C# code to Objective-C. セレクターとレジストラーは、総称して "バインド" と呼ばれ、Objective-C と C# 間の通信を可能にします。Selectors and Registrars collectively are called "bindings" and allow Objective-C and C# to communicate.

詳細については、Xamarin.iOS のアーキテクチャに関するページをご覧ください。For more information, see Xamarin.iOS architecture.

Xamarin.Essentials

Xamarin.Essentials は、ネイティブ デバイスの機能にクロスプラットフォーム API を提供するライブラリです。 is a library that provides cross-platform APIs for native device features. Xamarin 自体と同様に、Xamarin.Essentials は、ネイティブ機能へのアクセス プロセスを簡略化する抽象化です。Like Xamarin itself, Xamarin.Essentials is an abstraction that simplifies the process of accessing native functionality. 以下に、Xamarin.Essentials で提供される機能の例の一部を示します。Some examples of functionality provided by Xamarin.Essentials include:

  • デバイス情報Device info
  • ファイル システムFile system
  • 加速度計Accelerometer
  • ダイヤラーPhone dialer
  • 音声合成Text-to-speech
  • 画面のロックScreen lock

詳細については、「Xamarin.Essentials」を参照してください。For more information, see Xamarin.Essentials.

Xamarin.Forms

Xamarin.Forms は、オープンソースの UI フレームワークです。 is an open-source UI framework. Xamarin.Forms を使用すると、開発者は 1 つの共有コードベースから Xamarin.iOS、Xamarin.Android、Windows のアプリケーションを作成できます。 allows developers to build Xamarin.iOS, Xamarin.Android, and Windows applications from a single shared codebase. Xamarin.Forms を使用すると、開発者は C# でコードビハインドを使用して、ユーザー インターフェイスを XAML で作成できます。 allows developers to create user interfaces in XAML with code-behind in C#. これらのユーザー インターフェイスは、各プラットフォームでパフォーマンスの高いネイティブ コントロールとしてレンダリングされます。These user interfaces are rendered as performant native controls on each platform. Xamarin.Forms で提供される機能の例には、次のようなものがあります。Some examples of features provided by Xamarin.Forms include:

  • XAML ユーザー インターフェイス言語XAML user-interface language
  • データ バインドDatabinding
  • ジェスチャGestures
  • エフェクトEffects
  • スタイルStyling

詳細については、「Xamarin.Forms」を参照してください。For more information, see Xamarin.Forms.

作業開始Get started

次のガイドは、Xamarin を使用して初めてのアプリをビルドする際に役立ちます。The following guides will help you build your first app using Xamarin:

他の Xamarin ビデオは、Channel 9 および YouTube でご覧いただけます。Find more Xamarin videos on Channel 9 and YouTube.