マルチプラットフォームとは、iOSや Android 、Windows や macOS など、異なるプラットフォーム上で同じ仕様のプログラムやソフトウェア、アプリを動作させることを指します。
この記事では、マルチプラットフォームでの開発のメリットとデメリット、代表的な開発環境、使えるプログラミング言語について解説します。
マルチプラットフォームとは、コンピュータプログラムやソフトウェアを、異なる機種や OS 間で同じように動作させられることを指します。この項目では、マルチプラットフォームの意味や語源について解説します。
マルチプラットフォームとは、特定のコンピュータプログラムやソフトウェアをいくつもの異なる OS や機種で同じように動作させられることを指します。もう1つ、入力装置などの周辺機器を複数の異なる機種につないで動作できることも意味します。
スマートフォンの場合、iOS でも Android でも同じようにアプリが動作するのは、マルチプラットフォームがあるからです。
ちなみに、ゲームで使われるマルチプラットフォームは、同じゲームタイトルを、ゲーム機、スマートフォン、PCなど、プラットフォームの垣根を越えてプレイできることを指します。
マルチプラットフォームの語源は「マルチ」と「プラットフォーム」で、2つの単語が1つになってできた単語です。マルチとは「多数の、多用の」、「プラットフォーム」は「(システムなどの)基盤」を意味します。
つまり、マルチプラットフォームとは「多用の(システムなどの)基盤」という意味です。
マルチプラットフォームの開発とはどのようなものでしょうか。ここでは、マルチプラットフォーム開発の概要と、メリットとデメリットについて解説します。
マルチプラットフォームの開発は、OSに依存する部分と非OS依存部分を分けて開発します。従来、OS ごとに開発する必要がありましたが、マルチプラットフォーム開発では非 OS 部分を共通化して開発するため、効率がよくなります。
マルチプラットフォーム開発にはさまざまなメリットがあります。特に重要なのが、開発にかかる工数を減らせること、開発人員を確保しやすいことの2点です。
現在、どちらの OS もシェアが確保されているため、いずれにも対応したアプリを作る必要があります。クロスプラットフォームは、1つのコードで iOS と Android の両方に対応したアプリを作成できるため、コーディングが1回で済みます。
システム開発では、仕様変更を求められるケースがあります。クロスプラットフォームなら、iOS とAndroid それぞれに修正する必要がないため1回で済みますし、開発を進めながら詳細な仕様を決めていくアジャイル開発の際にも、仕様変更に対応しやすいです。アプリの作成時も仕様変更の際にも工数を減らせます。
アプリの保守運用やメンテナンスにかける人員を減らすことができ、開発コストと運用コストの両方を大きくコストダウンできます。
もう1つのメリットである開発人員の確保について、クロスプラットフォームでは OS のネイティブ言語に依存しないため、エンジニアの採用に多様性が生まれます。開発時には、自社のエンジニアに合った言語を採用できるのもメリットです。
クロスプラットフォームにはデメリットもあります。ここではクロスプラットフォームのデメリットとして、それぞれの OS で発生する不具合への対応が難しいことと、日本での開発事例が少ないことを挙げて解説します。
クロスプラットフォーム開発では、それぞれの OS で発生する不具合への対応が困難です。 OS の仕様が原因で不具合が生じた場合、その部分だけは各言語で作り直すなど、個別に対応しなければなりません。
クロスプラットフォームは、OS のネイティブ言語に依存しないで開発できることがメリットですが、OSの仕様が原因で発生した不具合への対応は、ネイティブ言語で対応しなければなりません。各機能を切り離すなどマイクロサービス化が求められ、管理が煩雑になります。
現状、日本でのクロスプラットフォームアプリ開発の実績はまだそれほど多くありません。そのため、エラー内容を調べる際、ネットで検索しても日本語で書かれたソースが少なく、エンジニアにとってハードルが高く感じられます。
マルチプラットフォームには、ネイティブ型、ハイブリッド型、独自レンダラ型の3種類あります。
この項目では、それぞれの詳細について解説します。
ネイティブ型は、それぞれの OS プラットフォームの描画エンジンを使用します。ネイティブアプリで使えるUIは基本的に利用できるので、操作性が高いです。他の方法よりも実行速度が速く、オフライン環境でも利用可能なアプリの開発に向いています。代表的な開発フレームワークに「 Xamarin 」や「 React Native 」があります。
ハイブリッド型は、Safar や Chrome などのブラウザのレンダリングエンジンを利用するため、HTML5/JavaScript など WEB ベースで動作します。代表的な開発フレームワークに「 Cordova 」や「 Electron 」があります。
独自レンダラ型は、独自のシステムであるレンダリングエンジンで画面の描画を行います。ネイティブ型は OS プラットフォームを使用しますが、独自レンダラ型はOSに依存せずに利用できます。代表的な開発環境に「 Unity 」や「 Flutter 」があります。
前項で挙げたものも含め、マルチプラットフォームの代表的な開発ツール6つについて、詳しく紹介します。
Xamarin(ザマリン)は、C#を用いてWindows、AndroidやiOSなどのネイティブアプリを作成するクロスプラットフォーム開発フレームワークです。
従来のネイティブアプリ開発では、Windows ではC#、Android であれば Java かKotlin 、iOSであれば Objective-C かSwift と、それぞれのプラットフォームに適した言語が異なりました。
Xamarin を使用すると、各プラットフォームのアプリケーションをすべて C# を使って開発できます。マルチプラットフォームに対応したアプリケーションにおいて、多くのコードを共通化でき、開発費用の削減と保守性、品質向上を実現できます。
Unity (ユニティ)は、 Unity Technologies が提供するゲーム開発用ツールです。主に 2D ゲームや 3D ゲームの開発に使用されています。統合開発環境のサポートがあり、開発効率の向上につながります。使用する言語は C# です。
スマートフォンゲーム開発と言えば Unity と言われるほどで、 iOS や Android などに対応したゲームアプリはもちろん、コンシューマーゲームなど幅広いゲーム開発が可能です。
Flutter (フラッター)は、 Google が提供するアプリケーションフレームワークです。 iOS 、 Android 、 Windows 、 Mac 、 Linux のアプリ、 Web アプリ、組み込みデバイスのアプリ生成を ワンコードでカバーします。 Flutter での開発は Dart という言語を使用します。
Google は2021年3月に、 Flutter の新バージョン Flutter2 を公開しています。 新バージョンの公開後、世界企業である、 Microsoft (マイクロソフト)、 Canonical (カノニカル)、 TOYOTA (トヨタ)が Flutter2 を実装した次世代プロダクトの検討・開発を進めていることを公表しています。
React Native (リアクト・ネイティブ)は、 Facebook 改め Meta が開発したモバイル向けアプリケーションフレームワークです。 JavaScript を使って、 Android と iOS のネイティブアプリを作成できます。 JavaScript は、Web アプリケーション開発で用いられることが多い言語のため、エンジニアを確保しやすいです。 Instagram や NAVITIME などのアプリが React Native で開発されています。
Apache Cordova (アパッチ・コルドバ)は、モバイルアプリ開発に使われているオープンソースフレームワークです。クロスプラットフォームに対応した、ハイブリッド性があるモバイルアプリを開発できます。開発には HTML5 、 CSS3 、 JavaScript などを使用します。
Cordova が登場して10年以上になるため、インターネット上にある情報が豊富なうえ、プラグインも数多くあり、情報を得やすい開発環境です。
Telerik Platform(テレリック・プラットフォーム)は、ハイブリッド型の開発環境です。Web 上でアプリ開発ができます。 Telerik Platform の公式サイトにはテンプレートが豊富に用意されています。クラウドサービスを備えており、Webアプリ、ネイティブアプリ、ハイブリッドアプリの構築、管理、テスト、デプロイが可能な開発環境です。ドラッグ&ドロップで直感的に開発できます。
マルチプラットフォームで開発を行うには、プログラミング言語が必須です。
この項目では、マルチプラットフォームに対応しているプログラミング言語を紹介します。
.NETは、マルチプラットフォームに対応したオープン ソース開発者用プラットフォームです。Windowsアプリケーション開発に使用するため、C#などを含むフレームワークとして登場しました。
.NET を使用すると、複数の言語、エディター、ライブラリを使用し、Webやモバイル、デスクトップ、ゲーム、IoT 向けにビルドすることができます。
Dart は、Google が主導し、オープンソースで開発している言語で、マルチプラットフォームを推進しています。Dart 言語のフレームワークとして「 Flutter 2 」があります。
Flutter2 は、マルチプラットフォームのアプリケーション開発に対応するフレームワークです。Android、iOS 、Windows 、Mac 、Linux 、Web 、IoT に対応しています。
ちなみに、TOYOTA は、新しい自動車向けのインフォテインメントシステム(インフォメーション+エンターテインメント)の開発に Flutter 2 を採用したと発表しています。
Android 用の開発言語として人気が高い Kotlin も、マルチプラットフォーム化を推進しています。Kotlinは、2017年に Google がAndroid の正式な開発言語にしたことで脚光を浴びるようになった言語です。 Kotlin で Android 向けアプリを開発するためのUIフレームワークとして、 Google の Jetpack Compose が用意されています。
かつては、Android のUI を構成するためにXMLのコードの記述が必須でした。開発者は、 Kotlin でプログラミングに加え XML で UI を構成するという手間が必要でしたが、Jetpack Composeによって UI もすべて Kotlin のコードで記述できるようになりました。
また、2018年にはKotlinの対応言語が拡張され、Android のほか iOS、Windows 、Mac 、Linux のネイティブアプリケーションも開発できる「 Kotlin/Native 」が登場し、Kotlin自体がマルチ OS 対応となっています。
.NET、Kotlin、Dart、Kotlinなどのプログラミング言語は、マルチプラットフォーム対応への動きを本格化させています。
このように、マルチプラットフォームへの対応を積極的に行うプログラミング言語やフレームワークが次々に登場するのは、言語とフレームワークの発展と成長の鍵を握るのが、マルチプラットフォーム対応だからです。
プラットフォームの数が増えている今、特定のプラットフォームのみのサポートでは、せっかく作ったシステムやアプリが発展せず、衰退していく可能性があります。また、開発には人的リソースが不可欠なため、開発者に人気のない言語は、淘汰されていく可能性が高いです。
言語を発展させるための1つの施策として、マルチプラットフォーム対応が進められています。
現在、iPhone や Android のようなスマートフォンやタブレット、Windows や Mac 、Linux 、IoT やクラウドなど、プラットフォームは数多くあります。ユーザーの選択肢が多く、複数の端末間においてシームレスな利用が増えている昨今、さまざまなプラットフォームに対応した開発が必須です。
マルチプラットフォームでの開発は、工数削減や人員確保にもつながるため、今後、採用されることが増えていくことが予測できます。