クロスプラットフォームとは、複数のプラットフォーム(ハードウェアとOSの組み合わせ)で動作するということである。
概要
クロスプラットフォームが非常識だった時代
プログラミングといえば機械語とアセンブラしかなかった時代、プログラムは特定のハードウェアでしか動作しないのが当然であった。
その後C言語が登場すると、依然ハードウェアに依存した部分は大きかったものの、プログラムを他のハードウェアに移植する際、ソースコードの一部を流用することが可能になってきた。
Java仮想マシンの登場
1995年にJavaが登場。Java仮想マシンがハードウェアやOSの違いを吸収して一度プログラムを作れば全ての環境で動作する"Write Once, Run Anywhere"という謳い文句が出てくるようになった(現実はそんなに甘くないのでWrite once, Debug Everywhereと揶揄されていたが)。
その後に登場したプログラミング言語は、仮想マシン方式こそ取らないものの、一度ソースコードを書けば複数のプラットフォームで動作するものも多くなってきた。
しかし、クロスプラットフォームとは言ってもCUIレベルの話で、Hello Worldはクロスプラットフォーム化できても、ウィンドウを表示したりするためには個々のハードウェアに依存するライブラリに頼らざるを得ないことが一般的であった。
GUIのクロスプラットフォーム
2000年代にもJavaの標準GUIであったSwingなど、クロスプラットフォームのGUI環境がなくはなかったが、実用性という点ではいまひとつであった。
2010年代に入ってようやくGUIのクロスプラットフォームが現実味を帯びてきた。
一方でクロスプラットフォームを名乗るにはWindowsとMac(とLinux)さえ押さえておけば良かったのが、2010年代におけるスマホの台頭により、AndroidとiOSもカバーする必要が出てきた。(もちろん2つ以上カバーできれば名目上はクロスプラットフォームだが。)
各論
CUIレベルのクロスプラットフォームはJavaの登場以降、たいていのメジャーなプログラミング言語であれば達成している。といっても、Windows, Mac, Linuxくらいまでで、モバイル開発(AndroidやiOS)までカバーしていることは稀である。
GUIのクロスプラットフォームについてはブラウザ関連技術を用いたものが多い。
以下ではCUIのクロスプラットフォームについては省略して、個々のGUIのクロスプラットフォーム技術について述べる。
Swing / JavaFX
WebView / Electron
HTML + CSS + JavaScript で実装するGUI。実質的にはブラウザ。
モバイル向け
宣言型プログラミング
Reactの宣言型プログラミングの考え方に触発されたGUIフレームワーク。
- React / React Native
- Flutter: GoogleがAndoridの代替として開発しているとの噂のあるFuchsiaのGUIフレームワーク。画面表示にはskiaというライブラリを用いている。skiaはChromeがレンダリングに用いている。つまり、Chromeが動く環境ならどこでも動作する可能性があるということ。
- Compse MultiPlatform: Googleが宣言型プログラミングGUIをAndroid向けにしたJetpack Composeを、Jetbrainsがクロスプラットフォーム化したもの。なお、これも画面表示にはskiaを用いている。
- .Net MAUI: .Net系のGUIクロスプラットフォーム。2022年2月現在、Preview版の段階である。
- SwiftUI: Reactに触発されたGUIだが、よく考えたらクロスプラットフォームじゃなかった。
ゲームのクロスプラットフォーム
ゲームはハードウェアの性能を極限まで引き出すことが求められるため、パソコン用ソフト以上に特定のハードウェアでしか動作しない傾向が強かったが、ハードウェアの性能向上で余裕が生まれてきたことに伴い複数のハードウェア上で同時発売といった展開をするゲームタイトルも日常的に見られるようになってきた。
ゲーム会社が独自に複数ハードウェア展開する以外に、Unity, Steamなどクロスプラットフォームなゲーム開発環境というものもあり、これらを用いて開発すると特に何もしなくてもクロスプラットフォーム展開が可能になる。
関連項目
- プログラミング言語
- ハードウェア / オペレーティングシステム
- オープンソース
- Java仮想マシン
- LLVM
- フレームワーク / ミドルウェア
- GUI / Swing ./ JavaFX
- WebView / React(フレームワーク)
- RoboVM
- プログラミング関連用語の一覧
- 2
- 0pt