最近USIプロトコルという通信プロトコルを使って将棋の思考エンジンを呼び出すものを作る機会がありました。 このUSIプロトコルというのは技術屋の立場から見るととてもプロトコルとは呼べないものでけっこう苦労したので書き留めておきます。 USIプロトコルとは USIプロトコルは将棋アプリのGUI等(以下、UI)と思考エンジン(以下、エンジン)が標準入出力で通信するためプロトコルです。USIプロトコルに対応しているUIとエンジンであれば自由に組み合わせて使うことができます。 UIはエンジンをサブプロセスとして起動して、棋譜データなどのコマンドをサブプロセスの標準入力に送信します。 エンジンはコマンドを受け取ると思考を開始して次の手を標準出力で返します。 コマンドはいくつかあるのですが、共通の仕様は以下の通りです。 コマンドの送信は改行コード コマンドとオプションなどは半角スペースで区切る 主なコ
![技術屋から見たUSIプロトコルのツライところ - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/b99f464ce512e41a5906888d4fdd7e348a64ed3b/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUU2JThBJTgwJUU4JUExJTkzJUU1JUIxJThCJUUzJTgxJThCJUUzJTgyJTg5JUU4JUE2JThCJUUzJTgxJTlGVVNJJUUzJTgzJTk3JUUzJTgzJUFEJUUzJTgzJTg4JUUzJTgyJUIzJUUzJTgzJUFCJUUzJTgxJUFFJUUzJTgzJTg0JUUzJTgzJUE5JUUzJTgyJUE0JUUzJTgxJUE4JUUzJTgxJTkzJUUzJTgyJThEJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0xYmI3NDUzOTMyZTAxZmU5ODY4ZDhlOWFhMDE0M2Q1NA%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwdGFnMTIxNiZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9NWViOTQyZDIyNTIzOTQ0YzM2YWU1Y2ZlZTY4NmQ5ZTQ%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D8e06f2275de21b520c19d4be79715778)