SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

UWPアプリ開発の最前線

UWPアプリを書けばiOS/Android/Webでも動く!?
~Uno Platform:クロスプラットフォーム開発環境

UWPアプリ開発の最前線 第15回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Uno Platformの仕組み

 Uno Platformの仕組みは、「How It Works - Uno Platform」で次の図のように説明されています。

Uno Platformの仕組み
Uno Platformの仕組み(「How It Works - Uno Platform」より)

 まず一番左のUWPは、通常のUWPアプリとまったく同じです。つまり、UWP APIと.NET Core(の一部)を使って動きます。

 残り3つは、.NET Framework互換環境であるMonoの上に構築されています。そのうちの右2つ、iOSとAndroidではMonoの上でXamarinも使っています。また、左から2番目のWebアプリは、図には描いてありませんがWebAssemblyという仕組みを使って、Webブラウザー上でMonoを実行します。

 UWPアプリのコード(図の「APPLICATION CODE」と書いてある青色の部分)からMonoやXamarinのAPIを呼び出す仕組みがUno Platformだということになります。大雑把な言い方をするならば、Uno PlatformとはUWP互換のAPIです。

 具体的には、同じ名前のAPIであっても、実装されているバイナリが異なります。例えば、画面の親クラスであるPageクラス(Windows.UI.Xaml.Controls名前空間)の定義を見てみましょう。UWPアプリのプロジェクトでは、Windows.Foundation.UniversalApiContractに定義されている通常のUWP APIの実装が使われています(次の画像)。

UWPアプリのプロジェクトでは通常のUWP APIの実装が使われる
UWPアプリのプロジェクトでは通常のUWP APIの実装が使われる

 ところが、AndroidアプリのプロジェクトではAndroid用の実装が、iOSアプリのプロジェクトではiOS用の実装が使われるようになっているのです(次の画像)。残念ながらWebAssemblyでの実装は、私(=筆者)にはまだよく理解できていません。

AndroidアプリのプロジェクトではMonoAndroid90フォルダーのUno.UI.dllにある実装が使われる
AndroidアプリのプロジェクトではMonoAndroid90フォルダーのUno.UI.dllにある実装が使われる
iOSアプリのプロジェクトではxamarinios10フォルダーのUno.UI.dllにある実装が使われる
iOSアプリのプロジェクトではxamarinios10フォルダーのUno.UI.dllにある実装が使われる

 大雑把にこんな仕組みになっているので、UWPアプリのコードがそのまま通るのです。Uno Platformとは、いわば「UWP→iOS/Android/WebAssemblyブリッジ」のようなものです。

Uno Platformの仕組みをもっと学ぶには?

 実際には、上に書いたような単純な話では終わりません。より詳しく学ぶには、本稿執筆時点ではJérôme Laban氏(Uno PlatformのCTO)とDavid Oliver氏(Uno Platformコントリビューター)の記事が役に立ちます。

次のページ
プラットフォーム依存コード

関連リンク

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
UWPアプリ開発の最前線連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11795 2019/11/13 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング