.NET 6の現状を把握し、具体的な移行方法を学ぶ連載。今回は、「クロスプラットフォーム」が普及しなかった理由を考察し、.NET 6におけるクロスプラットフォーム技術についてまとめる。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
2022年5月23日、.NET MAUI(Multi-Platform App User Interface)がGA(一般提供)されました。そして.NET MAUIのリリースをもって、.NET 6ではクロスプラットフォーム化が「いったん完成」の域に達します。
「クロスプラットフォーム」という言葉が一般的になって10年ほど経過していますが、.NETの世界では「Unity」を除き、クロスプラットフォームはあまり普及していません。
.NET 6の現状を把握し、具体的な移行方法を学ぶ本連載「.NET 6移行入門」。前回では.NET 6で開発できるアプリの種類について総括しました。Windowsアプリを例にしても、WinForms、WPF(Windows Presentation Foundation)、WinUI 3といった世代ごとのフレームワークの存在やクロスプラットフォーム化によってモバイルアプリの流れをくむMAUIも利用可能になるなど、同じ種類のアプリを開発する方式が複数ある状況になっており、選択が難しくなっています。また、今後もクロスプラットフォーム化の流れが後退することはないと考えられます。
この10年でアプリの主要な動作プラットフォームの主役はPCからスマートフォンに移り変わっている背景の中で.NET 6への移行時にも、現時点でそのアプリがクロスプラットフォームを必要としているかどうかに関係なく、将来を見据えてクロスプラットフォーム観点での検討する価値はあると考えられます。今回は、.NET 6におけるクロスプラットフォームの意義について考えていきます。
一般的になった当初、クロスプラットフォームはiOS、Androidのアプリを一括で開発する目的で導入されていきました。
当時真っ先にメリットとして挙げられたのはアプリの共通化による効率化、つまりコストダウンでした。ところが、アプリを開発してみると、クロスプラットフォーム開発ではネイティブ開発の知見にプラスしてクロスプラットフォームフレームワーク自体の知見も必要になることが分かりました。そのため、「学習コストがかさみ、思うようにコストダウンできない」「クロスプラットフォームフレームワーク自体や各種ツールの使い勝手や制限事項などによって品質の保証が難しい」といった問題が発生しました。その結果、クロスプラットフォームへの期待感は低下し、ネイティブ開発への揺り戻しが起こって今に至っています。
では、「クロスプラットフォームは不要な技術なのか」というと、「そうではない」と筆者は考えています。クロスプラットフォームのゴールはターゲットプラットフォームに依存しない共通化された「Write once, run anywhere」のアプリ開発ですが、当初クロスプラットフォームのメリットとして開発コストの削減が注目され過ぎたことが問題だったと考えられます。
当時の失敗を振り返ると、クロスプラットフォームで開発するには開発側もクロスプラットフォームに対応できる体制として、「ターゲットプラットフォームに依存しない汎化(はんか)された知見を深めること」「経験がないプラットフォームに短期間で対応できる開発プロセスを確立すること」「利用するクロスプラットフォームのSDKやツールの開発にもコミットし、ある程度の開発ツール起因の問題までは自チームで解決できる体制」などが必要だったのではないでしょうか。
これらのことを主導するには、アプリケーション アーキテクトの役割が重要になります。
「ターゲットプラットフォームに依存しない汎化された知見」というのは、「UI、各種センサー、アプリの処理フロー、バックエンドとのインタフェースやセキュリティなどに関して、具体的にアプリケーションコードをどのような構文で記述するか」という知識ではなく、昨今のトレンドにのっとった共通認識として設計や実装パターンの知見です。
これについては、クロスプラットフォームのSDKはその多くがオープンソースソフトウェア(OSS)ですから、複数のクロスプラットフォームのSDKを検証し、ソースコードを解析することで知見がたまります。
「経験がないプラットフォームに短期間で対応できる開発プロセス」というのは、UI、各種センサー、アプリの処理フロー、バックエンドやセキュリティなどに関して汎化された知見を背景に、各プラットフォーム固有のAPIや動作を公式情報から素早く理解し、アプリケーションのコードに落とし込める能力です。この能力を磨くには日常的に検証を行い、具体化された知見を積み上げ、それと汎化された知見をひも付けることが必要です。
その知見を社内やチーム内で共有できる状態に整備することで、チームの実力が向上します。
「利用するクロスプラットフォームのSDKの開発にもコミットし、ある程度の開発ツール起因の問題までは自チームで解決できる体制」というのは、昨今の開発のスピード感の中でSDKが枯れるまで待てない状況において、クロスプラットフォームのSDKに機能が足りない場合や問題が発生した場合に、自分でIssue(イシュー)を立て、場合によっては自分で問題を改修し、コントリビューションするような動きです。
以上の3つのような動きができることで、以下のようなクロスプラットフォームのメリットを効果的に享受でき、デメリットを軽減できます。
各技術のクロスプラットフォーム化が進み、それぞれのタイプのアプリで利用できる技術が複数存在するために、例えばモバイルアプリを開発する場合でも、「開発者がモバイルアプリの知見があるか、それともWindowsアプリやWebアプリの知見があるか」といった開発者の得意分野によって、技術を選択できます。
ドキュメントレベルではなく、単一のコードによって一貫性が保証されます。
クロスプラットフォーム開発体制が整っている場合、単一のコードの開発となるので、コストの低減が見込めます。
単一のコードの修正となるので、メンテナンスは比較的容易です。
NuGetパッケージで.NET 6アプリは「Microsoft Azure」と簡単に統合できます。ネイティブアプリのバックエンドとして統合できますし、MAUI Blazorアプリでネイティブアプリ内に統合されたWebアプリを開発できます。
ネイティブアプリと全く同じUXを提供しようとすると手間がかかったり、違いを吸収できなかったりする場合があります。
一般的な機能のアプリ開発には問題ありませんが、プラットフォーム固有の緻密な制御が必要なアプリには不向きです。
アプリはクロスプラットフォームの抽象化レイヤー上に構築され、マッピングされたネイティブの具象レイヤーによって動作するので、オーバーヘッドが大きく、ネイティブアプリと比較して速度の低下や消費リソースの増大といったパフォーマンス上の問題があります。
クロスプラットフォーム対応のツールはネイティブ向けのツールより数が少ないので、必要なツールが提供されておらず、スクラッチ開発が必要になる可能性があります。
ネイティブ環境アップデート後のリリースとなるので、クロスプラットフォームアプリではアップデートにタイムラグがあります。
ここで、.NET 6の範囲で、開発者の技術知見とターゲットにおけるアプリごとの技術選択の一例を見てみます。
この表の通り、保持している知見ごとに各ターゲットアプリの技術選択が異なっています。.NET 6では、各技術のクロスプラットフォーム化が進み、開発者の知見に応じた選択肢が提供されています。
Uno Platformは、Microsoftによる開発ではありませんが、Xamarin/MAUI(以後、MAUI)と似ており、C#およびXAML(eXtensible Application Markup Language)で開発し、クロスプラットフォームでアプリを出力できるOSSのフレームワークです。Uno PlatformのiOS/Android向けの部分はそれぞれ「Xamarin.iOS」「Microsoft.iOS」と「Xamarin.Android」「Microsoft.Android」上に構築されています(Xamarin.Forms/MAUIへの依存はなし)。Microsoftと協力関係も深く、海外では企業でも利用されている実績もあるフレームワークです。
MAUIとUno Platformの決定的な思想の違いとしては、MAUIはWPFやWinUIにインスパイアされたMAUI独自の、プラットフォームに依存しないXAMLベースのAPIを「新規定義」していますが、Uno PlatformはWinUI APIを「そのまま」利用していることです。MAUIはC#/XMALベースのニュートラルを目指し、Uno PlatformはWinUI APIを普遍的なものと位置付けAnywhereを目指しています。
.NET 6でクロススプラットフォームが「いったん完成」したことによって選択肢が広がりました。また、.NET以外の世界も含めると、1つのアプリの開発に対してかなり多くの選択肢がある状況になりました。さらに、スクラッチ開発とローコード開発の組み合わせなども検討すると、選択肢はもはや無限です。
クロスプラットフォームは新しいSDKの登場やバージョンアップのたびに注目されるものの、まだまだスクラッチアプリ開発の主役になっていません。普及するカギはやはり「いかに利用されているか」「多数のフィードバックで磨かれていくか」です。SDKが枯れるまで様子見をしていては昨今のデジタルトランスフォーメーション(DX)のスピード感の中では置き去りにされてしまいます。
.NETが好きな一人の開発者として、今後も.NETが継続的に発展していくために、.NET 6のクロスプラットフォーム開発環境を体験し、フィードバックしていただけることを願っています。
Copyright © ITmedia, Inc. All Rights Reserved.