麻雀AI対戦サーバMjaiのインストール

<!----------------------------------------------------------------------------------------------------------------------------------->
## [1.]概要
<!----------------------------------------------------------------------------------------------------------------------------------->

### [1-1.]目的

麻雀AI対戦サーバ「Mjai」をインストールする手順をまとめます。

### [1-2.]「Mjai：麻雀AI対戦サーバ」とは
「Mjai：麻雀AI対戦サーバ」(以下mjai)とは、麻雀AI同士で対戦することができるrubyベースのアプリケーションです。
詳細は[Mjai 麻雀AI対戦サーバ](http://gimite.net/pukiwiki/index.php?Mjai%20%E9%BA%BB%E9%9B%80AI%E5%AF%BE%E6%88%A6%E3%82%B5%E3%83%BC%E3%83%90)にて公開されています。

### [1-3.]実行環境
下記で環境で動作させます

* ディストリビューション
    * Linux Mint 21.2 Victoria Xfce(64-bit)
* ソフトウェア
    * ruby 3.0.2p107
* IPアドレス
    * 192.168.xx.yy
* ホスト名
    * <任意の名前>で設定可能

<!----------------------------------------------------------------------------------------------------------------------------------->
## [2.]debパッケージ導入
<!----------------------------------------------------------------------------------------------------------------------------------->

### [2-1.]ログイン
一般ユーザでログインする

### [2-2.]必要パッケージのインストール
rubyなど必要なパッケージをインストールする。

```shell:
$ sudo apt update

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Ign:2 http://packages.linuxmint.com victoria InRelease
Get:3 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]

(略)

Fetched 11.3 MB in 15s (761 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
327 packages can be upgraded. Run 'apt list --upgradable' to see them.

```

```shell:
$ sudo apt-get install -y ruby ruby-dev build-essential zlib1g-dev libssl-dev

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done

(略)

```

### [2-3.]rubyの動作確認
rubyの利用が可能であるかの確認を行う。

```shell:
$ ruby -v

ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux-gnu]

```

### [2-4.]gemの動作確認
gemの利用が可能であるかの確認を行う。

```shell:
$ gem -v

3.3.5

```


<!----------------------------------------------------------------------------------------------------------------------------------->
## [3.]mjaiインストール
<!----------------------------------------------------------------------------------------------------------------------------------->

### [3-1.]mjaiインストール
gemを利用して、mjaiをインストールする。

```shell:
$ sudo gem install mjai

[sudo] password for xxx:
Successfully installed mjai-0.0.7
Parsing documentation for mjai-0.0.7
Done installing documentation for mjai after 4 seconds
1 gem installed
```

### [3-2.]mjai-manueのインストール
mjai作者によるmjaiクライアントも併せてインストールする。

```shell:
$ sudo gem install mjai-manue

[sudo] xxx のパスワード:
Fetching mjai-manue-0.0.2.gem
Successfully installed mjai-manue-0.0.2
Parsing documentation for mjai-manue-0.0.2
Installing ri documentation for mjai-manue-0.0.2
Done installing documentation for mjai-manue after 0 seconds
1 gem installed
```

### [3-3.]ログディレクトリの作成
ログディレクトリを作成する。

```shell:
$ mkdir log
```

<!----------------------------------------------------------------------------------------------------------------------------------->
## [4.]mjaiの起動(評価用4人同時プレイ)
<!----------------------------------------------------------------------------------------------------------------------------------->

### [4-1.]mjaiを起動する
4人同時接続で、mjaiを起動する。

```shell:
$ mjai server --host=192.168.xx.yy --port=11600 --game_type=one_kyoku --room=default --log_dir=./log "mjai-shanten mjsonp://192.168.xx.yy:11600/default" "mjai-shanten mjsonp://192.168.xx.yy:11600/default" "mjai-shanten mjsonp://192.168.xx.yy:11600/default" "mjai-shanten mjsonp://192.168.xx.yy:11600/default"
```

* [Mjai 麻雀AI対戦サーバ](http://gimite.net/pukiwiki/index.php?Mjai%20%E9%BA%BB%E9%9B%80AI%E5%AF%BE%E6%88%A6%E3%82%B5%E3%83%BC%E3%83%90)

<!----------------------------------------------------------------------------------------------------------------------------------->
## [5.]mjaiの起動(外部クライアント向け3人起動：サーバ側の起動方法)
<!----------------------------------------------------------------------------------------------------------------------------------->

### [5-1.]リモート環境から実行する準備を行う
ネットワーク疎通ができる環境であれば、mjai起動時に外部クライアントからの接続も可能となる。

### [5-2.]サーバとしてmjaiを起動する
3人同時接続で、mjaiを起動する。

・一局戦
```shell:
$ mjai server --host=192.168.xx.yy --port=11600 --game_type=one_kyoku --room=default --log_dir=./log "mjai-shanten mjsonp://192.168.xx.yy:11600/default" "mjai-shanten mjsonp://192.168.xx.yy:11600/default" "mjai-shanten mjsonp://192.168.xx.yy:11600/default"
```

・東南戦
```shell:
$ mjai server --host=192.168.xx.yy --port=11600 --game_type=tonnan --room=default --log_dir=./log "mjai-shanten mjsonp://192.168.xx.yy:11600/default" "mjai-shanten mjsonp://192.168.xx.yy:11600/default" "mjai-shanten mjsonp://192.168.xx.yy:11600/default"
```

<!----------------------------------------------------------------------------------------------------------------------------------->
## [6.]mjaiの起動(外部クライアント向け3人起動：クライアント側の起動方法)
<!----------------------------------------------------------------------------------------------------------------------------------->

### [6-1.]クライアントからmjaiサーバに接続する
以下からサンプルスクリプトをダウンロードする。

```shell:
$ get https://raw.githubusercontent.com/gimite/mjai/master/samples/tsumogiri_player.rb
```

* サンプルスクリプト入手先
    * [ツモ切りサンプルスクリプト(tsumogiri_player.rb)](https://raw.githubusercontent.com/gimite/mjai/master/samples/tsumogiri_player.rb)

### [6-2.]別ターミナルを起動する
別のターミナルを起動する。

### [6-3.]クライアントからmjaiサーバに接続する
別ターミナルから下記コマンドを実行する。

```shell:
ruby ./tsumogiri_player.rb mjsonp://192.168.xx.yy:11600/default
```

上記コマンドでサーバ側と連動してクライアントの処理が開始されます。

<!----------------------------------------------------------------------------------------------------------------------------------->
## [7.]コマンド一覧
<!----------------------------------------------------------------------------------------------------------------------------------->

### [7-1.]ヘルプ表示
-hでヘルプ表示。コマンドの一覧が表示される。

```shell:
$ mjai -h

Basic Usage:
  /usr/local/bin/mjai server --port=PORT
  /usr/local/bin/mjai server --port=PORT [PLAYER1_COMMAND] [PLAYER2_COMMAND] [...]
  /usr/local/bin/mjai stats 1.mjson [2.mjson] [...]
  /usr/local/bin/mjai convert hoge.mjson hoge.html
  /usr/local/bin/mjai convert hoge.mjlog hoge.mjson

Complete usage:
  /usr/local/bin/mjai server \
    --host=IP_ADDRESS \
    --port=PORT \
    --room=ROOM_NAME \
    --game_type={one_kyoku|tonpu|tonnan} \
    --games={NUM_GAMES|infinite} \
    --log_dir=LOG_DIR_PATH \
    [PLAYER1_COMMAND] [PLAYER2_COMMAND] [...]

See here for details:
http://gimite.net/pukiwiki/index.php?Mjai%20%CB%E3%BF%FDAI%C2%D0%C0%EF%A5%B5%A1%BC%A5%D0

```

<!----------------------------------------------------------------------------------------------------------------------------------->
## [8.]最後に
<!----------------------------------------------------------------------------------------------------------------------------------->

### [8-1.]最後に
麻雀プログラムを行う上で皆様のご参考になればと思います。

### [8-2.]参考情報

* 参考情報
    * [麻雀AIと麻雀AI対戦サーバを公開](http://d.hatena.ne.jp/Gimite/20120430/1335798590)
    * [シャンテン数計算アルゴリズムで各言語をベンチマーク](http://d.hatena.ne.jp/Gimite/20130919/1379601037)
    * [mjai | RubyGems.org ](https://rubygems.org/gems/mjai/)
    * [mjai-manue | RubyGems.org](https://rubygems.org/gems/mjai-manue/)

<!----------------------------------------------------------------------------------------------------------------------------------->