マインクラフトにはJava版(Minecraft Java Etiion)と統合版(Minecraft Bedrock Edition)という2つのエディションがあります。Windowsのユーザーは大抵どちらかを選ぶ事になるので、2つのエディションの違いをよく調べてから購入しているはずです。統合版では機種が違ってもマルチプレイできるとか、Java版ではMODを使えるとか、それぞれに良さがあります。しかし、なぜ2の異なるエディションがあるのでしょうか?
※この記事は個人による推測を多く含んでいます。
マインクラフトの歴史
マインクラフトはスウェーデンのゲームクリエイターであるマルクス・ペルソン(愛称:ノッチ)と彼が設立したMojangが開発したゲームです。2009年5月に開発が始まりましたが、ノッチさんは仕事で作り始めた訳ではなく、個人製作による同人ゲームがルーツです。仕事の合間に作ってたんですね。プログラミングとゲームが大好きな方みたいで7歳ぐらいからプログラミングをしていたそうです。
最初マインクラフトはJavaで開発されました。それが瞬く間に人気となりスマホやゲーム専用機でも売りましょう、となって各デバイス用のマインクラフトを作る必要があった、そしてそれらを統合したのが統合版です。さて、ではJavaとは一体何でしょうか?
Javaとは何か
Javaは世界で最も使われていると言っていいほど人気のあるプログミング言語です。このJavaの最大の特徴は、どんなデバイスでも動きますよ、というプラットフォーム非依存性でしょう。この言語を開発したサン・マイクロシステムズのスローガンは”Write once, run anywhere” (WORA、「一度(プログラムを)書けば、どこでも実行できる」)でした。だからJava版はmacOSのパソコンやLinuxにも対応しています。どんなプラットフォームで動かすようにするためには、仮想マシン(JVM:Java Virtual Machine)という各OSの差異を吸収するソフトウェアが必要です。
現在ではAPIを含んだJRE(Java Runtime Environment)というソフトがオラクル社から提供されています。現在のマイクラJava版はJREを同梱しており、マイクラと一緒にインストールされるので別途JREをインストールする必要はありません。
このようにJavaアプリケーションは仮想マシン上で動くので昔は遅いと言われていました。確かに原理からすればそうでしょう。しかし、今日ではそのような情報はあまり見当たりません。その理由は大人の事情かもしれませんし、本当にJavaは速くなったのかもしれません。
統合版はC++言語
統合版はC++という言語で書かれています。C++はJavaよりも歴史は古く、処理速度が求められる場合に使われる事の多い言語です。ゲームにはC++言語の方が向いていると言えるでしょう。私も仕事で C++, Java 両方とも使った事があります。しかし、同じ仕様のプログラムを両方の言語で作った事はありませんし、そもそも業務アプリが多かったのでゲームのようにシビアに処理速度が求められるような事がなく、実際にJavaはC++に比べて遅いなどと実感した経験はありません。
Javaの未来を背負うマインクラフトJava版
しかし今、マインクラフトという、似たような仕様でJavaとC++で書かれたゲームがある訳です。これは両方の言語を使っていたプログラマとしては非常に興味深い事です。Javaは本当に軽くなったのか。ふたつのマインクラフトがその答えを出してくれるはずです。
Java版と統合版の両方でマイクラをプレイすると…
Java版と統合版を同じPCでプレイしてみて気づいたのは、まずビデオ設定が全然違うという事です。Java版はビデオ設定の描画距離が2~32チャンクなのに対し、統合版は8~72チャンクになっています。
統合版はモブの窒息もありません。Java版はモブを窒息させる事でモブが増えすぎ重くなるのを避けているのかもしれません。2つのマインクラフトが全く同じ仕様ではないので単純に比較する事はできませんが、やっぱり統合版の方が処理速度については上ではないでしょうか。実際Java版の描画距離を32チャンクに設定すると、少し重く感じるのですが、統合版では40チャンクでもまだ余裕が感じられます。
またJava版と統合版の推奨スペックを比較してみると、CPUはJava版、グラフィック(GPU)は統合版の方に良いものを要求しています。ここから考えうるのは、JavaはCPUに負担がかかりチャンクを読み込み範囲が狭まるので、結果として描画範囲も狭まりGPUのスペックはそれほど要求されないのではないでしょうか。こういうところからも統合版の方がサクサク動くのだろうという推論に至ります。
Javaで書かれたゲームは珍しい
実際のところプレステやswitch、xbox等のゲーム専用機のゲームソフトはC++などの言語で書かれていますし、Javaで作られたゲームはほとんど無いはずです。そういう事からしても、ゲームは一般的にC++等で作るものなのでしょう。
では、なぜNotchさんがJavaを開発言語に選んだのでしょうか。こればかりは知る由もありません。最初はPCのみをターゲットにしていたのでWindowsだけでなくmacOSとLinuxでも動作する事を考慮したのか、ただJavaが好きだったとか、Javaに慣れ親しんだ開発者が多かったとか、最初からModを意識していたのか、理由は色々考えられますが、何はともあれJavaで作ったから現在のJava版マイクラがあるのでしょう。
現在マイクロソフトはMod開発を奨励しているようです。実際Modを使えるからJava版を支持している人は相当多いのではないかと思います。そういう事からも、両エディションには役割分担があり棲み分けが出来ているのかもしれません。
しかし、Java版とC++版の二つのエディションを持つゲームなどマイクラ以外に存在していません。マイクラは特殊なケースだと言えるでしょう。
結論
最初にJavaで作ったが思いのほか人気出ちゃって、移植するのにC++で作る必要があった、というのが二つのエディションが存在する理由だと考えます。
コメント