
コンピューティングにおいて、クロスプラットフォームソフトウェア(マルチプラットフォームソフトウェア、プラットフォーム非依存ソフトウェア、プラットフォーム非依存ソフトウェアとも呼ばれる)は、複数のコンピューティングプラットフォームで動作するように設計されたコンピュータソフトウェアです。[ 1 ]クロスプラットフォームソフトウェアの中には、プラットフォームごとに個別のビルドを必要とするものもありますが、インタープリタ言語で記述されているか、インタープリタまたはランタイムパッケージがサポートされているすべてのプラットフォームで共通または標準のコンポーネントである移植可能なバイトコードにコンパイルされているため、特別な準備をすることなくどのプラットフォームでも直接実行できるものもあります。[ 2 ]
例えば、クロスプラットフォームアプリケーションは、 Linux、macOS、Microsoft Windowsで動作する可能性があります。クロスプラットフォームソフトウェアは、複数のプラットフォームで動作することも、2つのプラットフォームで動作することも可能です。クロスプラットフォーム開発用のフレームワークとしては、Codename One、ArkUI-X、Kivy、Qt、GTK、Flutter、NativeScript、Xamarin、Apache Cordova、Ionic、React Nativeなどがあります。[ 3 ]
プラットフォームとは、オペレーティングシステム(OS)またはアプリケーションが実行されるプロセッサ(CPU)またはその他のハードウェアの種類、OSの種類、またはこれら2つの組み合わせを指します。[ 4 ]一般的なプラットフォームの例としては、ARMアーキテクチャファミリーで動作するAndroidがあります。その他のよく知られたプラットフォームとしては、Linux / Unix、macOS、Windowsがあり、これらはすべてクロスプラットフォームです。[ 4 ]アプリケーションは、特定のプラットフォーム(実行されるハードウェア、OS、または仮想マシン(VM)のいずれか)の機能に依存するように記述できます。たとえば、Javaプラットフォームは、多くのOSおよびハードウェアタイプで実行される一般的なVMプラットフォームです
ハードウェアプラットフォームとは、命令セットアーキテクチャを指します。例:ARMまたはx86アーキテクチャ。これらのマシンは、異なるオペレーティングシステムを実行できます
スマートフォンやタブレットは一般的に ARM アーキテクチャを採用しており、Android や iOS などのモバイル オペレーティング システムを採用していることが多いです。
ソフトウェアプラットフォームは、オペレーティングシステム(OS)またはプログラミング環境のいずれかですが、より一般的には両方の組み合わせです。例外はJavaで、OSに依存しない仮想マシン(VM)を使用してJavaバイトコードを実行します。ソフトウェアプラットフォームには、次のようなものがあります
Java言語は通常、Javaプラットフォームの一部であるVM上で動作するようにコンパイルされます。Java仮想マシン(Java VM、JVM)は、ソフトウェアで実装されたCPUであり、すべてのJavaコードを実行します。これにより、JVMを実装するすべてのシステムで同じコードを実行できます。Javaソフトウェアは、ハードウェアベースのJavaプロセッサで実行できます。これは主に組み込みシステムで使用されます。
JVMで実行されるJavaコードは、適切な権限が付与されていれば、ディスク入出力(I/O)やネットワークアクセスといったOS関連サービスにアクセスできます。JVMはJavaアプリケーションに代わってシステムコールを実行します。これにより、ユーザーはアクセス制御リスト(ACL)に応じて適切な保護レベルを決定できます。例えば、ディスクおよびネットワークアクセスは通常、デスクトップアプリケーションでは有効ですが、ブラウザベースのアプレットでは有効ではありません。Java Native Interface(JNI)を使用してOS固有の機能にアクセスすることもできますが、移植性は損なわれます。
現在、Java Standard Editionソフトウェアは、Microsoft Windows、macOS、いくつかのUnix系OS、そして組み込みデバイス向けのいくつかのリアルタイムOSで実行できます。モバイルアプリケーションの場合、WindowsおよびMacベースのデバイスではブラウザプラグインが使用され、AndroidにはJavaのサポートが組み込まれています。また、リソースが限られたデバイス向けに設計されたJavaのサブセットとして、Java CardやJava Platform, Micro Editionなどがあります。
ソフトウェアがクロスプラットフォームと見なされるためには、複数のコンピュータアーキテクチャまたはOSで動作する必要があります。OSによってアプリケーションプログラミングインターフェース(API) が異なるため、このようなソフトウェアの開発は時間のかかる作業になる可能性があります
あるOS向けに書かれたソフトウェアが、そのOSがサポートするすべてのアーキテクチャで自動的に動作するとは限りません。ソフトウェアがCやC++などの一般的なプログラミング言語で書かれているからといって、その言語をサポートするすべてのOSで動作するとは限りません。同じOSの異なるバージョンでさえも動作するとは限りません。
ウェブアプリケーションは、理想的にはどのウェブブラウザからでもアクセスできるため、一般的にクロスプラットフォームと呼ばれます。ブラウザがプラットフォームなのです。ウェブアプリケーションは一般的にクライアントサーバーモデルを採用していますが、複雑さや機能は大きく異なります。機能への欲求と互換性の必要性を両立させることは難しい場合があります
基本的なウェブアプリケーションは、ステートレスサーバー上ですべてまたはほとんどの処理を実行し、その結果をクライアントのウェブブラウザに渡します。ユーザーとアプリケーション間のやり取りは、データ要求とサーバー応答の単純なやり取りで構成されます。このタイプのアプリケーションは、World Wide Webアプリケーション開発の初期段階では標準でした。このようなアプリケーションは、静的ウェブページを提供する場合と同じ、単純なトランザクションモデルに従います。今日でも、特に高度な機能よりもクロスプラットフォームの互換性とシンプルさが重要視される場合、比較的よく使用されています。
高度なウェブアプリケーションの代表的な例としては、 Gmailや Googleマップのウェブインターフェースが挙げられます。こうしたアプリケーションは、一般的なウェブブラウザの最新バージョンにのみ搭載されている追加機能を日常的に利用しています。これらの機能には、Ajax、JavaScript、ダイナミックHTML、SVG、その他のリッチウェブアプリケーションのコンポーネントが含まれます。
互換性と機能性という相反する利益のために、数多くのデザイン戦略が生まれました
多くのソフトウェア システムでは、プラットフォームに依存するコードが最上位層と最下位層に制限される階層化アーキテクチャが使用されています。
グレースフルデグラデーションは、すべてのユーザーとプラットフォームに同一または類似の機能を提供しながら、より制限されたクライアントブラウザではその機能を最小公分母にまで縮小しようとします。たとえば、機能が制限されたブラウザを使用してGmailにアクセスしようとするユーザーは、Gmailが基本モードに切り替わり、機能が制限されているもののまだ使用できることに気付くかもしれません
一部のソフトウェアは、同等の機能を持つ異なる(ハードウェアおよびOS)プラットフォーム向けに、異なるコードベースで保守されています。これによりコードの保守に多くの労力が必要になりますが、プラットフォーム固有のコードの量が多い場合は、メリットがあります
この戦略は、複数のプラットフォーム固有の形式にコンパイルできる1つのコードベースを持つことに依存しています。1つの手法は条件付きコンパイルです。この手法では、すべてのプラットフォームに共通するコードは繰り返されません。特定のプラットフォームにのみ関連するコードブロックは条件付きにされ、必要な場合にのみ解釈またはコンパイルされます。もう1つの手法は機能の分離です。これは、ブラウザやOSでサポートされていない機能を無効にしながら、ユーザーに完全なアプリケーションを提供します。(「関心の分離」も参照)この手法は、解釈されたコード(スクリプト言語など)が実行中のプラットフォームに問い合わせて、条件付きで異なるブロックを実行できるWeb開発で使用されます。[ 6 ]
サードパーティライブラリは、ベンダーロックインを犠牲にして、 クライアント差別化の複雑さを単一の統合APIの背後に隠すことで、クロスプラットフォーム機能を簡素化しようとします
レスポンシブウェブデザイン(RWD)は、スマートフォンからデスクトップコンピューターのモニターまで、幅広いデバイスで最適な閲覧体験(最小限のサイズ変更、パン、スクロールで読みやすく、操作しやすい)を提供するために、サイトの視覚的なレイアウトを作成することを目的としたウェブデザインの手法です。この手法では、プラットフォーム固有のコードはほとんど、またはまったく使用されません
クロスプラットフォームアプリケーションには、より多くの統合テストが必要です。一部のウェブブラウザでは、同じマシンに異なるバージョンをインストールすることが禁止されています。複数のプラットフォームをターゲットとするアプローチはいくつかありますが、いずれもテストとメンテナンスに多大な手作業を必要とするソフトウェアになります。[ 7 ]完全仮想化などの技術が、この問題の回避策として使用されることがあります
ページオブジェクトモデルなどのツールを使用すると、クロスプラットフォームテストをスクリプト化して、1つのテストケースで複数のバージョンのアプリをカバーできます。異なるバージョン間でユーザーインターフェースが類似している場合、1つのテストケースですべてのバージョンをテストできます。
ウェブアプリケーションはますます普及していますが、多くのコンピュータユーザーは依然として、クライアント/ウェブサーバーアーキテクチャに依存しない従来のアプリケーションソフトウェアを使用しています。従来のアプリケーションとウェブアプリケーションの区別は必ずしも明確ではありません。ウェブアプリケーションと従来のアプリケーションの機能、インストール方法、アーキテクチャは重複しており、区別が曖昧になっています。しかしながら、この簡略化された区別は一般的で有用な一般化です
従来のアプリケーションソフトウェアは、特に実行可能ファイルはバイナリファイルとして配布されてきました。実行可能ファイルは、その対象プラットフォームのみをサポートします。つまり、単一のクロスプラットフォーム実行可能ファイルは、特定のプラットフォームでは実行されないコードで非常に肥大化する可能性があります。代わりに、通常は、それぞれが1つのプラットフォーム用に構築された複数の実行可能ファイルが用意されています
C や C++ で書かれたものなど、バイナリ実行可能ファイルとして配布されるソフトウェアの場合、単一のコードベースを複数のバイナリ実行可能ファイルに変換 (トランスコンパイル) するツールセットを使用して、各プラットフォーム用のソフトウェア ビルドが必要です。たとえば、オープンソースの Web ブラウザーであるFirefox は、Windows、macOS ( Apple 社がユニバーサル バイナリと呼ぶものを通じてPowerPCと x86 の両方)、Linux、および複数のコンピューター アーキテクチャ上の BSD で利用できます。4 つのプラットフォーム (この場合は Windows、macOS、Linux、および BSD) は、大部分が同じソース コードから作成されていますが、別々の実行可能ファイルのディストリビューションです。まれに、複数のプラットフォーム用にビルドされた実行可能コードが、ファット バイナリと呼ばれる単一の実行可能ファイルに結合されることがあります。
異なるツールセットを使用するだけでは、異なるプラットフォームで動作する実行ファイルを構築できない場合があります。この場合、プログラマーはソースコードを新しいプラットフォームに移植する必要があります。例えば、x86ファミリーのWindowsで既に動作しているFirefoxなどのアプリケーションは、x86(および他のアーキテクチャ)のLinuxでも動作するように修正・再構築できます。複数のバージョンのコードは、別々のコードベースとして保存することも、1つのコードベースに統合することもできます。
移植の代替手段として、クロスプラットフォーム仮想化があります。これは、あるプラットフォーム向けにコンパイルされたアプリケーションを、ソースコードやバイナリを変更することなく別のプラットフォーム上で実行できるものです。例えば、IntelベースのMacintoshコンピュータに組み込まれているAppleのRosettaは、PowerPC CPUを搭載した前世代のMac向けにコンパイルされたアプリケーションを実行します。また、IBMのPowerVM Lx86は、Linux/x86アプリケーションをLinux/Power OS上で変更せずに実行できるようにします。
クロスプラットフォームバイナリソフトウェアの例:
スクリプトは、そのインタープリタが複数のプラットフォームで利用可能であり、かつスクリプトが言語に組み込まれた機能のみを使用している場合、クロスプラットフォームであるとみなされます。例えば、Unix系システム向けにPythonで書かれたスクリプトは、Windowsでもほとんど、あるいは全く変更を加えることなく実行できる可能性があります。なぜなら、PythonはWindowsでも動作し、多くの実装が存在するからです(例えば、.NET Framework用のIronPython )。多くのオープンソースのスクリプト言語でも同様です。
バイナリ実行ファイルとは異なり、スクリプトを解釈するソフトウェアがインストールされているすべてのコンピュータで、同じスクリプトを使用できます。これは、スクリプトが通常、テキストファイル内にプレーンテキストで保存されるためです。改行文字の表現など、いくつかの些細な問題が発生する可能性があります。
人気のあるクロスプラットフォーム スクリプト言語は次のとおりです。
クロスプラットフォームまたはマルチプラットフォームとは、様々なビデオゲーム機でリリースされるビデオゲームにも適用される用語です。クロスプラットフォームゲームの例としては、マイナー2049er、トゥームレイダー:レジェンド、FIFAシリーズ、NHLシリーズ、 Minecraftなどがあります
それぞれ、 Wii、PlayStation 3、Xbox 360、パソコン、モバイルデバイスなど、さまざまなゲーム プラットフォームでリリースされています。
プラットフォームによっては、他のプラットフォームよりも開発が難しく、同じ基準でビデオゲームを開発するにはより多くの時間が必要です。これを補うために、ビデオゲームは最初にいくつかのプラットフォームでリリースされ、その後他のプラットフォームにリリースされることがあります。これは通常、新しいゲームシステムがリリースされたときに行われます。これは、ビデオゲーム開発者がそのハードウェアとソフトウェアに精通する必要があるためです。
一部のゲームは、開発者とビデオゲーム機メーカー間のライセンス契約により開発が特定のゲーム機に限定されているため、クロスプラットフォームに対応していない場合があります。例えば、ディズニーが任天堂とソニーの最新ゲーム機でリリースすることを想定してゲームを制作したとします。ディズニーが先にソニーからライセンスを取得した場合、そのゲームを短期間または無期限にソニーのゲーム機でのみリリースすることが求められる可能性があります。
いくつかの開発者は、異なるプラットフォームを使用しながらオンラインでゲームをプレイする方法を実装しています。Psyonix 、Epic Games、Microsoft、Valveはすべて、Xbox 360およびPlayStation 3のゲーマーがPCゲーマーとプレイできる技術を保有しており、どのプラットフォームを使用するかは消費者に委ねられています。PCとコンソールゲーム(専用キーボードとマウスを備えたドリームキャスト)間でこのレベルのインタラクションを可能にした最初のゲームは、Quake 3でした。[ 11 ] [ 12 ]
クロスプラットフォームのオンラインプレイを特徴とするゲームには、Rocket League、Final Fantasy XIV、Street Fighter V、Killer Instinct、Paragon、Fable Fortune、Windows 10、 VR エディション、Pocket EditionおよびXbox Oneでの Better Together アップデートを適用したMinecraft などがあります。
クロスプラットフォームプログラミングとは、複数のプラットフォームで動作するようにソフトウェアを意図的に作成することです
クロスプラットフォームアプリケーションを作成するには、さまざまな方法があります。1つの方法は、同じソフトウェアの複数のバージョンを異なるソースツリーに作成することです。つまり、アプリケーションのMicrosoft Windows版には1セットのソースコードファイルがあり、Macintosh版には別のセットのソースコードファイルがある場合があります。一方、FOSSの*nixシステムには3つ目のセットがある場合があります。これは簡単ですが、1つのプラットフォームのみ向けに開発する場合と比較して、より大きなチームに支払うコストが大幅に増加したり、製品のリリースが遅くなったりする可能性があります。また、追跡して修正する必要があるバグが増える可能性もあります
もう一つのアプローチは、プラットフォーム間の違いを隠蔽するソフトウェアを使用することです。この抽象化レイヤーは、アプリケーションをプラットフォームから分離します。このようなアプリケーションはプラットフォームに依存しません。JVM上で実行されるアプリケーションは、このように構築されています。
一部のアプリケーションでは、クロスプラットフォームプログラミングの様々な手法を組み合わせて最終的なアプリケーションを作成します。例えば、Firefoxウェブブラウザは、一部の低レベルコンポーネントを抽象化によって構築し、プラットフォーム固有の機能(GUIなど)を実装するための個別のソースサブツリーと、ソフトウェアの移植性を高めるための複数のスクリプト言語を実装しています。Firefoxは、ブラウザを拡張するためのXUL、CSS、JavaScriptに加え、従来のNetscapeスタイルのブラウザプラグインも実装しています。ブラウザ自体の大部分は、XUL、CSS、JavaScriptで記述されています。
クロスプラットフォームプログラミングのプロセスを支援する ツールは数多くあります[ 13 ] [ 14 ]
クロスプラットフォーム ソフトウェアを開発する際には多くの課題があります。
Collabora Officeは、Microsoft Officeスイートに代わる人気のオープンソースソフトウェアです。LibreOfficeをベースにしており、Windows、Linux、iOS、Androidなど、さまざまなプラットフォームで利用できます。今年7月には、オフィススイートのメジャーアップデートでChrome OSデバイスのサポートが追加されました
タッチに最適化されたインターフェース: タブレット用とスマートフォンの画面用に 1 つずつ。...(iOS、iPadOS、Chromebook、Android)。
人気のRaspberry Pi 4プラットフォーム向けの初の実用的なセルフホスト型ウェブオフィスソリューション。