タイトルの通り、このブログのHamliteのAIボタンを使えるようにしました。
↑ のオセロの盤面が、Hamliteです。AIボタンを押すと、評価値が表示されると思います。

こんな風に表示されていればOK。
あとは技術的な話になります。つまり、これがどうやって動いてるかという話。
HamliteでAIボタンを押すと何が起こるか
Hamliteからサーバーに解析を要求
Hamliteから、othlog.hasera.net/edax.php に「この局面を解析して下さい!」とリクエストの通信が行われます。
具体的には、
https://othlog.hasera.net/edax.php?solve=all&board=–XXXXX–OOOOX—OOXXOXXOOXXOXXXOOOOXXOOOOOOXOX–OXXXX-XOXXXXXX-%20O
にアクセスしたときと同じような感じ。edax.phpに、「?」から後のパラメータが渡ります。これはHamliteが勝手にそういうリクエストを送信してくれます。盤面を表す64文字と、手番(O=白)です。
それに対する応答は、
callBackResult(11,”H6:+0,H8:-8,G2:-22,H2:-24,G7:-42,H6:BEST”);
です。空きマスの数、座標:評価値、最善手が返るわけです。それで、あとはHamliteが上記のように表示してくれます。
edax.phpは何をしているか
ソースコード貼ります。これは現在(2026/8/13)動いているもので、変更する可能性はあります。
edax.php
<?php header(‘Content-Type: text/javascript; charset=UTF-8’)
;
if (!isset($_GET[‘board’]) || trim($_GET[‘board’]) === ”) {
echo ‘callBackEmpties(15);’;
exit;
}$board = trim($_GET[‘board’]);
$empties = substr_count($board, ‘-‘);
if ($empties >= 16) {
echo ‘callBackEmpties(‘ . $empties . ‘);’;
exit;
}$board_escaped = escapeshellarg($board);
$cmd = “cd ~/edax; printf ‘setboard %s\\nhint 20\\n’ $board_escaped | ./lEdax-native | grep -E ‘^[[:space:]]*[0-9]+[[:space:]]+[+-][0-9]+’ | awk ‘
{
move = \”\”;
for (i = 1; i <= NF; i++) {
if (\$i ~ /^[a-hA-H][1-8]$/) {
move = toupper(\$i);
break;
}
}if (move != \”\”) {
if (count > 0)
printf \”,\”;printf \”%s:%+d\”, move, \$2;
if (count == 0 || \$2 > best) {
best = \$2;
bestmove = move;
}count++;
}
}
END {
if (bestmove != \”\”)
printf \”,%s:BEST\”, bestmove;
}'”;$result = shell_exec($cmd);
echo ‘callBackResult(‘ . $empties . ‘,”‘ . trim($result) . ‘”);’ . PHP_EOL;
ほとんど、ChatGPTが作ってくれました。
1.Hamliteから来るパラメータを受け取って
2.それをedax(lEdax-native)に渡して
3.edaxの出力から、合法手と評価値の組を作って、さっき書いたHamliteへの応答の形式にして出力します。
callBackResult(11,”H6:+0,H8:-8,G2:-22,H2:-24,G7:-42,H6:BEST”);
さっきの局面なら、こういう応答になりす。
つまり、HamliteのAIボタンを押しただけで、サーバー側でedaxが一瞬動いて解析します。
補足
Hamliteのダウンロード、編集
Hamliteは、https://hamlite.ifdef.jp/download.html からダウンロードできます。
hamcode.js の中の、
var ONLINE = “//reversi-ai.appspot.com/endgame?”;
というのが、AIボタンを押したときにリクエストが飛ぶ先のURLで、これは今はもうないので動かないわけです。ここを、
var ONLINE = “https://othlog.hasera.net/edax.php?”;
に書き換えました。
あと、
if (nextMoveNo > 45)
という行がありますが、これは、45手目以降にAIボタンを有効にするという意味なので、40にすれば40手目から解析できます(edax.phpの中の、15とか16を、20、21にすれば20個空きくらいから動きますが、サーバーへの負荷が大きくなりすぎるかも知れません)
edaxのコンパイル
GitHubからedaxのソースコード(https://github.com/abulmo/edax-reversi/releases/tag/v4.6)をダウンロードして、サーバー上でコンパイルしました。
cd src
mkdir ../bin
make build ARCH=native CC=cc LIBS=”-lm -lrt -pthread”
で、../bin に lEdax-native(edaxの実行ファイル)ができました。
これは、環境によって異なると思います。
最初は
make build ARCH=native
とやってエラーが出て、エラーメッセージをChatGPTに貼り付けて教えてもらいました。まだ何か色々表示されていたのですが、動いたからヨシ!(えー)

lEdax-nativeはbin配下のままでも良いのですが、1つ上の階層にコピーしました。
eval.datは、Windows版のを流用しました。
book.datは勝手にできました(84バイトしかなくて、内容は空です)
edax.iniには、「-n 3」と書いてあります。3スレッド使うという意味。デフォルトのlevel 21で動いてるはずなので、24個空きくらいまでは、edax.iniに書かなくても完全読みしてくれると思います。24個空きまで読ませるなら、edax.phpの中の「hint 20」を「hint 24」にしないと行けないかも知れません(打てる場所の数が最大24カ所になるかも知れないから)
あとがき
Hamliteを私が提供しても、私のサーバーが使えなくなったら動かなくなってしまいます。liveothelloもそうで、ずっとliveothelloが使えるかは分かりません。
なので、本当は、誰かが提供したものを使うのではなく、分かる人が自分のサーバーにHamliteをアップロードして、edax.phpとedaxみたいにサーバー上で解析できる環境を作って動かすようにすると良いと思います。
Hamliteだけだと解析できないですが、今は、Hamliteから棋譜をコピーして手元のソフトに貼り付ければ解析できるので、PCで見てればあまり困らないんですよね。スマホだとまだちょっとコピーが面倒くさいかな。
自分のサーバーにHamliteをアップロードして、hamcode.js中の「var ONLINE = …」のところを
var ONLINE = “https://othlog.hasera.net/edax.php?”;
のように書き換えるだけでも、AIボタンが動くと思います。ただ、othlog.hasera.netがなくなると、AIボタンは使えなくなくなります。
edaxをサーバー上で動かすのは、私が書いた内容で分かる人向けです。

