マイクロソフトでは、React Native や Blazor などの代替技術が社内で大きな注目を集めているにもかかわらず、.NET を使用したクロスプラットフォーム コーディング用の Xamarin テクノロジの進化を続けています。
Xamarinの歴史は.NETの黎明期に遡ります。2001年、C#と.NETプラットフォームがまだプレビュー段階だった頃、Miguel de Icaza(GNOMEプロジェクトの共同創設者)はオープンソースのMonoプロジェクトを発表しました。MonoはLinux向けの.NET Framework実装であり、後にMacやその他のプラットフォームにも追加されました。2009年、MonoがNovellの傘下に入った頃、チームはAppleのiPhoneを.NETコードでターゲットにしたいという需要に気づき、iPhone API用のC#ラッパーであるMonoTouchを開発しました。
デ・イカザ氏は2009年の発表で、MonoTouchがiPhoneのネイティブコントロールを使用すると述べました。「これはクロスプラットフォームAPIではなく、開発者をiPhoneプラットフォームに縛り付けるものではありませんが、アプリケーションのルック&フィールがネイティブになり、開発者はiPhoneに近づくことになります」と彼は述べました。2011年1月、デ・イカザ氏はAndroid向けのMonoを発表しました。その頃、NovellはAttachmateに買収されており、Monoチームは2011年後半に退社し、Xamarinという新会社を設立しました。Microsoftは、自社の開発プラットフォームにモバイル向けの穴があることに気づき、2016年にXamarinを買収し、XamarinツールをVisual Studioにバンドルしました。
Xamarinチームは長年、クロスプラットフォームGUIフレームワークは間違いだと主張し、非ビジュアルコードのみを共有し、各プラットフォームごとにネイティブGUIを構築することを優先してきました。しかし、開発者の需要は高く、2014年にXamarin Formsをリリースしました。Xamarin Formsでは、XML言語であるXAMLのバリアント(MicrosoftのWindows Presentation FoundationやSilverlightで使用されるものとは異なる)を使用して基本的なGUIを定義できます。Xamarin Formsは、依然としてネイティブコントロールを使用しています。GUIコードの共有による生産性の向上が、多くの場合、デメリットを上回ることが判明したため、採用は同社の予想を上回りました。
2020年現在、既存のC#コードやスキルを持ち、iOSとAndroidをターゲットにする必要のある開発者にとって、Xamarinは依然として最適な選択肢です。XamarinはmacOSとUWP(ユニバーサルWindowsプラットフォーム)もターゲットにできます。今週初め、MicrosoftはXamarinの最新情報を開発者に伝えるバーチャルカンファレンスを開催しました。
まず注目すべき点は、Xamarin Forms(プラットフォームごとにネイティブGUIを個別に設計するのではなく)が、バーチャルカンファレンスでの注目度の高さから判断すると、現在主流となっているように見えることです。好評を博したセッションで、開発者のSteven Thewissen氏は「美しいアプリの構築」について講演し、「Xamarin Formsは、当初シンプルなデータ入力アプリケーション向けとしてリリースされたため、画像に関する問題が少しある」と指摘しました。Thewissen氏は、その名称はもはや誤称だと示唆しました。Thewissen氏は、GoogleのSkia GraphicsライブラリをベースにしたSkiaSharpなどのライブラリ、または近日公開予定のXamarin FormsグラデーションAPIを使用して、Xamarin Formsでグラデーション、シャドウ、タイポグラフィを使用する方法を説明しました。また、他のアプローチは「はるかにコストがかかる」ため、Formsの使用はクロスプラットフォームアプリに最適だと付け加えました。
もう一つの注目トピックは、Xamarin Shellです。これは、宣言的にベアボーンアプリケーションを作成し、必要に応じてリッチコンテンツを追加できる、簡素化されたXAMLフレームワークです。Shellを使用すると、フライアウト、タブ、ナビゲーションといった基本的な機能が提供されるため、パフォーマンスが向上するだけでなく、開発スピードも向上します。デュアルスクリーンのサポートも近日中に開始されます。
Xamarin Shellは、アプリケーションの「シェル」のための必要最低限の機能を備えた高性能なフレームワークです。
Xamarin Essentials を使用することで、生産性も向上します。Xamarin Essentials は、クリップボード、ファイル操作、加速度計、ネットワーク、位置情報、他のアプリケーションの起動、SMS メッセージの送信、さらにはテキストの音声変換といったハードウェアおよびオペレーティングシステムの機能にアクセスするためのクロスプラットフォーム API を提供します。先日リリースされたバージョン 1.5 では、OAuth 認証が追加されました。現在準備中のバージョン 1.6 では、macOS サポート(現在は Android、iOS、UWP のみ)に加え、ファイルピッカーや連絡先とカレンダーへのアクセスが追加される予定です。
テキサス州のシニアソフトウェアエンジニア、ロドニー・リトルズ2世氏は、自身がメンテナーを務めるReactiveUIについて発表しました。このライブラリは、その名の通り、ユーザーインターフェースのリアクティブプログラミングを可能にするライブラリです。このアプローチを用いることで、コードの可読性が向上するだけでなく、コードの再利用性も向上し、アプリケーションが複雑になっても理解しやすい状態を維持できると彼は述べています。
プラットフォームサポートに関しては、AppleのXcode 11.4のサポートがすでにリリースされており、Android 11のサポートはVisual Studio 2019 16.6プレビュー2で提供される予定です(現在のプレビューは16.6プレビュー1です)。Android開発においては、Windows版Visual Studioの方がVisual Studio Macよりも進んでいるようですが、後者はiOSをターゲットとするにはより便利で、macOSをターゲットとするには不可欠です。Jetpackとしても知られる更新されたAndroidサポートライブラリであるAndroidXはXamarinでサポートされており、プレビュー版のAndroidX移行ツールは既存アプリケーションのアップデートに役立ちます。
Windows 上での iOS 開発は、現在プレビュー中の Xamarin Hot Restart 機能のおかげで、より簡単になりました。この機能は iOS 向け Xamarin Forms アプリでのみ動作します。この機能を使用すると、接続された iOS デバイス上でアプリをデバッグし、コードを変更してデバイスにプッシュすることができます。完全なリビルドとデプロイは必要ありません。つまり、接続された Mac を使う必要がなくなり、Windows とデバイスだけでテストとデバッグが可能になります。
.NET CoreがWebアプリケーションとサーバーアプリケーションにおいてあらゆるプラットフォーム上で.NETの目標を実現するのであれば、Xamarinはクライアントアプリケーションにおいてほぼ同様のことを実現します。ただし、いくつか問題点があります。Windowsでは、XamarinはUWPをターゲットにできますが、従来のWin32アプリケーションはターゲットにできません。ただし、WPFはプレビュー版としてサポートされています。また、Microsoftが現在Windows開発の将来像と考えているWinUIに対するXamarin Formsのサポートについても不透明です。このトピックに関するGitHubのIssueは「検討中」となっています。
Xamarin: 1 つのコードベースから Windows、iOS、Android 向けのアプリを設計しますか?
続きを読む
Xamarin がクロスプラットフォームであるという事実は、これまで通り、メリットとデメリットが混在しています。1つのプラットフォームのみをターゲットにしたい場合、最適なテクノロジーとは言い難いでしょう。クロスプラットフォームを採用している場合でも、Microsoft 社内での Xamarin への関心は様々で、Windows チームは Web テクノロジーや React Native を推奨する傾向があります。クロスプラットフォーム化は複雑さを増し、Xamarin テクノロジーにも少なからず課題が伴います。
Visual Studio for Mac 8.5 を使用した iOS および Android 向け開発
しかし、Xamarinが実用的なクロスプラットフォームソリューションとして確固たる地位を築き、主要ターゲットであるiOSとAndroidの変化にも常に対応していることも特筆に値します。Microsoftによる買収は功を奏し、Xamarinと.NET Core間でのコード共有が拡大し、WindowsとMacの両方でVisual Studioのツールが改善されました(Visual Studio for Mac 8.5がリリースされたばかりです)。このプラットフォームは初期から大きく進化しており、特にXamarin Formsが実用的なクロスプラットフォームGUIフレームワークとして成功を収めたことが大きな成果です。®