Minecraftサーバーを作ってポート開放・転送設定なしでマルチプレイする方法（Minecraft + remote.it）

#はじめに
過去にremote.itを使ったAWSサーバーへの接続方法をご紹介しましたが、今回はもう少しライトで具体的な用途として、Minecraftサーバーへ接続する方法をご紹介します。
通常、Minecraftサーバーを自分でホストして友人とマルチプレイするためには、ポート開放やポート転送、ファイアウォールの設定を行なってインターネットからの接続をオープンにする必要がありますが、remote.itを使うことでそれらが不要になります。

https://qiita.com/tkhmhiroc/items/0724d4b1d6bc688aa474

https://qiita.com/tkhmhiroc/items/7afe26c945b5e2b9be01

#概要
Minecraftサーバーをインストールする環境は、エンジニアとしてはLinuxを選択したいところではありますが、今回は広く一般にお試しいただけるユースケースとして、Windowsを使いたいと思います。
また、Minecraftサーバーのインストール手順にも触れますが、最適化や自動起動化などは考慮しておりませんのであらかじめご了承ください。今回紹介する手順では以下のような環境としています。

###サーバー側環境

* Windows 10
* JDK 17
* Minecraft Java Edition サーバー
* Minecraft Java Edition クライアント
* remote.it Desktop Application 3.2.2


###クライアント側環境 （共有先の友人側想定）

* macOS 11.6
* Minecraft Java Edition クライアント
* remote.it Desktop Application 3.2.2


#Minecraftサーバーを立てる
まず、Windows 10上にMinecraftサーバーを立てて、プレイできるところまで確認します。Minecraftのクライアントライセンスは持っている前提として、手順では割愛します。

###1. JDKインストール
Java実行環境としてJDKをインストールします。現時点（2021.10.1）の最新版はJDK 17です。下記のダウンロードサイトからWindows版をダウンロードしてインストールしてください。（x64 Installer か x64 MSI Installer が良いと思います。）なお、MinecraftサーバーはJRE 8では動作しませんのでご注意ください。

https://www.oracle.com/java/technologies/downloads/#jdk17-windows

###2. Minecraftサーバーのインストールと実行
次にMinecraftサーバーをインストールします。以下のダウンロードサイトからMinecraft Java Edition サーバーの jar ファイル「minecraft_server.X.XX.X.jar」をダウンロードします。

https://www.minecraft.net/ja-jp/download/server

![キャプチャ003.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/add07765-0c16-5bd3-e1cd-30d66d47e301.png)

ダウンロードした「minecraft_server.X.XX.X.jar」ファイルを適当なフォルダに保存し、ファイルの名前を「minecraft_server.jar」に変更します。（私はデスクトップに「Minecraft」というフォルダを作ってそこにコピーしました。）
![キャプチャ031.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/99948d37-0615-c75c-1aa6-12133e841255.png)

次にMinecraftサーバーを起動するためのバッチファイルを作ります。
jarファイルを保存したフォルダ内にメモ帳で新しいテキストファイルを作成します。ファイル名は任意の内容で問題ありません。（例：「マイクラ起動.txt」など。私は「launch-minecraft.txt」としました。）
![キャプチャ006.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/f34cb1fc-96fe-918f-8bc4-3b87c6330899.png)

作成したテキストファイルを開いて、以下の内容をコピーして貼り付け、保存します。（真ん中の行は、Minecraftサーバーのダウンロードページに記載されていた内容を使用し、jarファイル名の箇所だけを変更しています。）

```launch-minecraft.txt
@echo off
java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
pause
```
こんな感じです。
![キャプチャ007.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/c99151c7-7c1b-6cba-914f-055e6712b1b9.png)

保存したらファイルの拡張子を「.txt」から「.bat」に変更します。

![キャプチャ008.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/7a4cff18-ef4e-ca2e-abc6-a3c679d29cce.png)

拡張子を変更したbatファイルをダブルクリックして実行します。
コマンドプロンプトが開いて、以下のように `"You need agree to the EULA in order to run the server. Go to eula.txt for more info."` というメッセージで途中で止まることを確認したら、コマンドプロンプトを閉じます。
![キャプチャ009.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/40c6d216-6f4a-8914-dc4d-5b675db7620e.png)

batファイルを実行したフォルダに戻ると、いくつか新しいファイルが作られていることが確認できます。その中の「eula.txt」を開いて、`eula=false` の部分を `eula=true` に書き換えて保存します。

```eula.txt
:
eula=true
```
![キャプチャ010.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/9be42540-ea16-51c0-2637-7df757ac9c77.png)
![キャプチャ012.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/8df55a8e-f094-9e2d-21ab-228316b72402.png)

もう一度 batファイルをダブルクリックして実行します。コマンドプロンプトが開き、今度は初期化の処理が走ります。しばらく待って、`Done` のメッセージが表示されれば、Minecraftサーバーの起動は完了です。（終了する場合は、`stop` とタイプして実行してください。）
![キャプチャ013のコピー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/a33fba09-76e2-86f1-ce0e-a156009e1ba6.png)

###3. Minecraftクライアントからの接続確認

無事サーバーが起動したら、まずは自分自身でプレイできるか確認してみます。
Minecraft Java Editionのクライアントソフトを起動し、「Multiplayer（マルチプレイ）」をクリックします。
![キャプチャ014.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/79966b86-f782-89e7-e63d-a0ca04b2f33a.png)

「Add Server（サーバーを追加）」ボタンをクリックします。
![キャプチャ015.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/e666a633-63b6-0e1c-be83-a41bcf268795.png)

「Server Address（サーバーアドレス）」の欄に `localhost` と入力して「Done（完了）」ボタンをクリックします。
![キャプチャ016.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/65446356-ad9b-e00b-a86c-cb89a33749b7.png)

追加したサーバがオンラインになっていることを確認してクリックします。
![キャプチャ017.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/c0228595-a12d-42de-5910-45a74983f979.png)

無事に世界へ降り立つことができました。
![スクリーンショット 2021-09-30 20.51.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/e9a75a1f-359c-41a5-ccb2-0c3b2898dfb6.png)

これでMinecraftサーバーの準備は完了です。
次に、remote.itを使って友人にサーバーを共有してみます。


#remote.itを使ってMinecraftサーバーを共有する

remote.itを使ってMinecraftサーバーをリモート接続のターゲットとして登録し、友人と共有します。
なお、共有する側とされる側の双方がremote.itアカウントを持っている必要があります。まだremote.itアカウントを持っていない場合は、ホームページの「Get Started」から無料でサインアップできます。

https://remote.it/


###1. remote.itデスクトップアプリのインストールとターゲット登録
今回はremote.itデスクトップアプリを使います。
まず、下記のremote.itのダウンロードサイトの「Desktop Applications」から、ソフトウェアをダウンロードします。

https://remote.it/download/

ダウンロードしたインストーラーを実行してインストールします。
![キャプチャ019.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/69d20694-7ace-2a09-ffd9-d6b2f6f8c7c5.png)
![キャプチャ020.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/996d0aab-5f2b-4b37-620b-94a4284719c0.png)

インストール完了後、アプリが起動してサインインを求められますので、remote.itアカウントでサインインします。
まだremote.itアカウントを持っていない場合は、「SIGN　IN」ボタンの下の "Sign up for free" からアカウントを作成してください。
![キャプチャ021.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/0fee1dbb-64b3-d5d5-3973-5f02fa94a542.png)

サインイン後、画面上部の「Set up this device」をクリックします。
![キャプチャ022.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/947b7dfc-211e-9a1a-8162-52b4e2bbb926.png)

このPCをremote.itによる接続先として登録するための画面が表示され、登録可能なサービスのリストが表示されます。
"NAME"のフィールドに任意の登録名を入力し、"Services"の下の"Minecraft Server"のチェックだけ残して「REGISTER」ボタンをクリックします。
![キャプチャ023.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/8bfa2565-408a-c96d-5339-9c9b5c589a14.png)

登録が完了すると、"Device registered successfully!"というメッセージが表示されます。
中央に"Device offline"と表示されている場合は、少し間を置いて右上にある更新アイコンをクリックしてください。
![キャプチャ025.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/3a05b111-f404-1a23-820f-794348583fce.png)

次に、中央のサービスから "Minecraft Server" をクリックして、右の「Edit」をクリックします。続けて「SAVE」ボタンの上の「CONNECTION DEFAULTS」をクリックして展開します。
![キャプチャ027.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/43e5be66-db90-59fb-eba3-9c373d1b4ef1.png)

"DEFAULT CONNECTION PORT"フィールドに `25565` と入力して「SAVE」ボタンをクリックして設定を保存します。
![キャプチャ028.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/2bd83fa9-96cf-3173-2782-ed245affc7f8.png)

以上でMinecraftサーバーをremote.itを使って共有する準備の完了です。

###2. Minecraftサーバーを他者のremote.itアカウントと共有する

続けて、中央の"Minecraft Server"をクリックした状態で、右上の"Share"アイコン（人型のアイコン）をクリックします。
![キャプチャ029.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/16fbb706-2521-4e84-2a5d-88c06f23229d.png)

右上のフィールドに、共有したいユーザーのremote.itアカウント（メールアドレス）を入力し、「SAVE」ボタンをクリックします。
![キャプチャ030.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/07cd47d8-c448-f8f4-629a-df287827d30e.png)

以上で共有完了です。
これで、共有されたユーザーは、Minecraft Serverに接続することができます。（ポート開放やポート転送は不要です！）


#remote.itを使って共有されたMinecraftサーバーへ接続する
では、実際に共有されたMinecraftサーバーへ接続してみます。
ここからの手順は、共有されたユーザー側で行う内容です。サーバー側との対比として、Mac版のクライアント画面で説明します。

サーバー側と同様に、下記のremote.itのダウンロードサイトの「Desktop Applications」から、ソフトウェアをダウンロードしてインストールします。

https://remote.it/download/

アプリケーションをインストールしてサインイン（共有されたremote.itアカウントで）すると、先ほど共有されたMinecraftサーバーのデバイス名がリストに表示されていますので、これをクリックします。
![スクリーンショット 2021-09-30 21.14.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/0bfcb0b1-fcf3-cf2a-8b84-315e5662df8a.png)

中央の "Minecraft Server" をクリックして、右下の「ADD TO NETWORK」ボタンをクリックします。
![スクリーンショット 2021-09-30 21.14.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/b7e74344-6d87-0d64-597f-512762577e8a.png)

ボタンのラベルが「REMOVE FROM NETWORK」に変わったら準備完了です。
![スクリーンショット 2021-09-30 21.23.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/ed7203b2-f500-da18-b254-8ae00ef253fc.png)

Minecraftクライアントを起動し、「Multiplayer（マルチプレイ）」ボタンをクリックします。
![スクリーンショット 2021-09-30 21.18.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/edbbfb26-61f8-d701-84f3-479c684897ac.png)

「Add Server（サーバーを追加）」ボタンをクリックします。
![スクリーンショット 2021-09-30 21.19.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/ed11a7b9-207a-bbf6-056f-44322afb7f07.png)

「Server Address（サーバーアドレス）」の欄に `localhost` と入力して「Done（完了）」ボタンをクリックします。
![スクリーンショット 2021-09-30 21.19.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/f3725592-241b-8a3a-1f29-533e85aea509.png)

共有されたMinecraftサーバーへ接続が開始されます。初回は接続されるまでに少し時間がかかるため、オンラインにならない場合は「更新」ボタンをクリックしてください。
![スクリーンショット 2021-10-04 16.44.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/4298c98f-52a2-dc45-a4d8-39b118717bbb.png)
![スクリーンショット 2021-10-04 16.44.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/5c4c4ef2-dcad-7b1c-7027-ae2867ec9406.png)

無事に接続できました。これで一緒にプレイできます。
![スクリーンショット 2021-09-30 21.20.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344121/2350177e-0256-b4d9-d827-61cc029652ad.png)

#まとめ
今回ご紹介した手順のとおり、ルーター等のネットワーク機器でインターネット経由の接続を受け入れるためのポート解放やポート転送の設定をしたり、ファイアウォールに穴を開けるなどの設定をすることなく、簡単にMinecraftサーバーへの接続を（ネットワーク的には、TCP25565ポートへの通信だけが、指定したユーザだけに。）許可することができます。インターネットに対してMinecraftサーバーがオープンにならないため、不正アクセスされる恐れもありません。

今回はWindowsのローカルマシン上で動作するMinecraftサーバーの例を紹介しましたが、一般的なTCP/IPの作法に則ったアプリ（IPアドレスとポート番号で会話できるアプリ）であれば、プロトコルやターゲットのロケーション（回線の種別）は問いません。アイデア次第で様々なアプリケーションの通信に使うことができます。ぜひ色々と試してみていただければと思います。