Linux/MacやiOS/Android対応の「Visual Studio Code」「Universal Windows Platform」など
プラットフォームの壁を越える!「Build 2015」新発表のポイント
2015年05月07日 06時00分更新
既存のAndroid/iOSアプリを簡単にWindows移植可能に
昨年のVisual Studioの発表では、Windows Store向けに開発したコードをAndroid/iOSに移植する方法が提示されたが、今回の発表はその逆だ。一部ニュースでは誤って報じられているが、Windows 10にAndroid/iOSアプリを動作させる機能が加わるのではなく、Android/iOSアプリのソースコードを簡単にUWP向けに移植できるというわけだ。
なお、Androidアプリ、iOSアプリをUWP対応にする手法は、それぞれ異なる。
AndroidアプリのUWP対応は「Project Astoria」と呼ばれており、現在、限定プレビューが始まっている(応募には開発済みのAndroidアプリAPKが必要)。グーグルが提供する「Android Studio」(Androidアプリ開発用のIDE)に追加できるWindows Phoneエミュレータなどを用意することで、既存のAndroidアプリ開発環境を使ってテストやデバッグが行える。また、ライセンスの関係でUWPアプリでは利用できないサービスは、マイクロソフトのサービスに変更することも可能だ(たとえば「Googleマップ」から「Bingマップ」へ、など)。
Project Astoriaでは、Android用のIDEも利用できるように、UWPアプリの.appxパッケージにAndroidアプリの.apkパッケージを入れる。また実行は、Windows 10側に作られた「Astoriaサブシステム」でAndroid互換の環境を作り、UWPのAPIに変換する仕組みとのこと。ただし基本的には、開発者が自身のパッケージをUWP向けにするためのもので、エンドユーザーが任意のAndroidアプリ(APK)を動かす目的のものではないようだ。
これに対して、iOSアプリのUWP対応は「Project Islandwood」と呼ばれる。これはVisual Studioで、iOS用のObjective-C(およびC++)コードのコンパイルや開発を可能にするもの。Xcode(iOSの開発環境)のプロジェクトをVisual Studioに直接読み込み、ビルドやデバッグが可能になる。こちらもUWP向けのライブラリ、ランタイムを併用するようだが、Visual Studio内で直接ソースコードを扱えるため、Visual StudioユーザーがiOSアプリをUWPに移植するような作業では(前述のAndroidよりも)有利と言える。
残る2つのUWPアプリ対応手法についても説明しておこう。
Windowsデスクトップ用アプリ(.NET/Win32アプリ)のUWP対応は「Project Centennial」と呼ばれている。これは、デスクトップアプリを“ラップ”して、UWPで動作させる仕組みだ。これも一部誤った報道がなされているが、Windows Storeでデスクトップアプリを直接配布できるようになるわけではない。
UWPの対象には、デスクトップ環境のない旧Windows Phoneなども含まれており、単純に.NET/Win32アプリを配布することはできない。また、UWPとデスクトップでは、実行ファイル形式やAPI環境などがまったく異なっている(双方に固有のAPIがある)。既存のデスクトップ向け.NET/Win32ソースコードを再利用し、おそらくはデスクトップ互換のAPI環境をライブラリとして用意して、外側をストアアプリの形式としてパッケージを作成するものと思われる。あくまでも、.NET/Win32アプリの開発者が既存のソースコードを生かしつつ、アプリをUWP対応にするものだ。
最後は、Webサイトを直接UWPアプリ化するもので「Project Westminster」と呼ばれている。具体的にはホストされているWebサイトを、オープンソースプロジェクトの「manifold.js」(Node.jsで動作するWebサイトをアプリに変換するツール)を使って、「Apache Cordova」(あるいは「PhoneGap」)でビルド可能なコードに変換する。つまり、Web/クラウドサービスを、そのままUWPや他のモバイルプラットフォーム向けアプリのコードベースとすることができる。
なお、このmanifold.jsのようなHTMLベースのアプリ開発で利用できるデバッガシステムとして、2日目の基調講演では「Vorlon.js」が発表された。これは、Node.jsなどをベースに動作するもので、オープンソースになっている。