M1 Macにやねうら王とelmoをインストールする

## はじめに

将棋は割と好きな方で、将棋ウォーズで指したり、AbemaTVで将棋見たりしています。
仕事のチームメイトに将棋大好きエンジニアがいて、評価ソフトの話を最近聞きました。
大きくはGUIと評価エンジンが分かれており、それらを組み合わせて使うようです。

ちょっとまだよくわかってない部分があるのですが、今日はやねうら王とelmo（評価エンジン）をインストールして将棋所というGUIアプリケーションから使ってみたいと思います。

## 環境
色々調べてみるとMacで動かす系の記事は割とあるみたいなので、今回はM1 Macで動かしてみたいと思います。

MacOSX 12.0.1 (M1 Mac)
YaneuraOu https://github.com/yaneurao/YaneuraOu/commit/2176528e7f586cc8c256e050cbbcb1094b47a9c8
elmo https://github.com/mk-takizawa/elmo/releases/tag/elmo_wcsc27
将棋所Mac 1.4.2

## 導入

### やねうら王のビルド

```shell-session
$ git clone https://github.com/yaneurao/YaneuraOu.git
$ cd YaneuraOu
```

M1用に`Makefile`に変更を加える。

```diff
diff --git a/source/Makefile b/source/Makefile
index 69deb874..12e5c12a 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -49,7 +49,7 @@ YANEURAOU_EDITION = YANEURAOU_ENGINE_NNUE
 # --- Intel/AMD系 (x86/x64 Platform)
 #TARGET_CPU = AVX512VNNI
 #TARGET_CPU = AVX512
-TARGET_CPU = AVX2
+#TARGET_CPU = AVX2
 #TARGET_CPU = SSE42
 #TARGET_CPU = SSE41
 #TARGET_CPU = SSSE3
@@ -60,7 +60,7 @@ TARGET_CPU = AVX2
 #TARGET_CPU = ZEN2
 #TARGET_CPU = ZEN3
 # -- ARMとか
-#TARGET_CPU = OTHER
+TARGET_CPU = OTHER
 #TARGET_CPU = GRAVITON2


@@ -131,7 +131,8 @@ endif
 # clang用にCPPFLAGSなどを変更
 ifneq (,$(findstring clang++,$(COMPILER)))
        # stdlib
-       CPPFLAGS += -stdlib=libstdc++
+       ##CPPFLAGS += -stdlib=libstdc++
+       CPPFLAGS += -stdlib=libc++

        # C++17のfilesystem
        # LDFLAGS += -lstdc++fs
```

そしてビルド

```shell-session
$ cd source
$ make
$ ls
YaneuraOu-by-gcc
```

エラーが表示されず、バイナリファイル `YaneuraOu-by-gcc` が作成されていればOK。

以降のelmo実行環境用にディレクトリを作って、必要なディレクトリも作成しておきます。

```shell-session
$ mkdir ~/yaneuraou-elmo-exe
$ cp YaneuraOu-by-gcc ~/yaneuraou-elmo-exe/
$ mkdir ~/yaneuraou-elmo-exe/{book,eval}
```

### elmo導入

YaneuraOuは棋譜エンジン？というような感じのもので、評価用のエンジンは別になっているようです。
その一つがelmoで、これを導入することで実際に対局したり、棋譜を評価したりできるようです。

elmoは以下からダウンロードしました

https://github.com/mk-takizawa/elmo/releases/tag/elmo_wcsc27

`elmo.shogi.zip`をダウンロードして、解凍します。
そしてその中の `book/yaneura_format/standard_book.db` を実行用に準備した `elmo/book/` ディレクトリにコピーします。

```shell-session
$ cd elmo.shogi
$ tree
.
├── book
│   ├── Apery_format
│   │   └── book.bin
│   ├── ShogiGUI_format
│   │   └── elmo_wcsc27_16.sbk
│   └── yaneura_format
│       └── standard_book.db
└── eval
    ├── KKP_synthesized.bin
    ├── KK_synthesized.bin
    └── KPP_synthesized.bin

5 directories, 6 files
$ cp book/yaneura_format/standard_book.db /path/to/elmo/book/
```

### evalファイル

`evel` の方は `nn.bin` というのが必要なようなので、こちらは以下のファイルを使いました。

https://mk-takizawa.github.io/elmo/howtouse_elmo.html
→３．elmoをダウンロードします(新しい方が強いです)。
　→任意のファイルをダウンロード
（2021.12.06現在は`elmo 2019/5 世界コンピュータ将棋選手権(WCSC29)版`しかダウンロードできませんでしたので、それを使用しました。）

```shell-session
$ elmo_wcsc29_eval
$ tree
.
├── engine_name.txt
└── eval
    ├── memo.txt
    └── nn.bin

1 directory, 3 files
$ cp eval/nn.bin /path/to/elmo/eval/
```

先に準備していたelmo実行用ディレクトリは以下のようになります。

```shell-session
$ tree
.
├── YaneuraOu-by-gcc
├── book
│   └── standard_book.db
└── eval
    └── nn.bin

2 directories, 3 files
```

ちゃんと動くか試します。

```shell-session
$ ./YaneuraOu-by-gcc
usi  # 入力
id name YaneuraOu NNUE 7.00beta3 32OTHER
id author by yaneurao
option name Threads type spin default 4 min 1 max 512
  :
option name OutputFailLHPV type check default true
option name FV_SCALE type spin default 16 min 1 max 128
usiok
isready  # 入力
info string EvalDirectory = /Users/hattorihideo/tmp/YaneuraOu/source/elmo/eval
info string loading eval file : eval/nn.bin
info string read book file : book/standard_book.db
info string read book done. number of positions = 18781
info string USI_Hash : Start clearing with 4 threads , Hash size =  16[MB]
info string USI_Hash : Finish clearing.
readyok
```
`usi` `isready` の入力でbookファイルが読み込まれていれば準備完了です。

### GUI準備

将棋所を使います。

http://shogidokoro.starfree.jp/mac/index.html

将棋所Macのサイトから最新版をダウンロードします。

そしてエンジンを指定する設定項目があるので、先に準備していた `~/yaneuraou-elmo-exe/YaneuraOu-by-gcc`を割り当てます。
（対局→エンジン管理→追加 とかから指定できるはず。）

![shogidokoro-engine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775/bfee52a3-de28-f0bc-6e6a-4b039c3a95d4.png)


## 結果

最終的に以下のような感じで棋譜を読み込ませて解析させることができました。
1手10秒くらいでワラワラ駒が動いたり評価値動いたりするの見るだけで、テンション上がりますね!!
![shogidokoro-yaneuraou-elmo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1775/3c4e1cf0-bba3-1ea7-445a-cff93872c696.png)

先人に感謝 :pray: 
そして将棋強くなりたい!!