世界コンピュータ将棋選手権(以下、選手権)は、2006年5月に開催された第16回選手権より、段階的にEthernetによるローカルエリアネットワーク (LAN)を経由した対局に移行しています。 第16回は、主催者側の不手際によるトラブルもありましたが、多くの参加者の皆様に助けられ、なんとか全対局を行うことができました。 同時に、インターネットを通じたライブ中継も初めて行うことができ、広くコンピュータ将棋の魅力・意義・興奮を伝えることができたという点で、記念すべき選手権となりました。
主催者としては、この成果を移行計画の第一段階の成功と考えています。 このことを踏まえ、第17回選手権の参加者の皆さんには、LANによる対局を必須の機能として対応していただくこととなりました(RS-232C対応はトラブル対応のための推奨機能)。 LAN対局では、従来のように対局するコンピュータ同士をRS-232Cケーブルで直結して通信を行う方法とは異なり、選手権に参加するすべてのコンピュータは、Ethernetケーブルとスイッチングハブを用いて選手権の主催者側が用意する審判サーバ機器に接続していただきます。 これによって対局を行うコンピュータがクライアントとなるクライアント/サーバシステムを対局前に構築し、サーバ機器を経由した通信によってすべての対局を行います。 以下、参加するコンピュータをクライアント、審判サーバ機器をサーバと呼称いたします。
このたびのLAN対局への移行は、従来のRS-232C対局における下記の課題の解決を直接の目的としています。
RS-232Cによって通信可能な距離はきわめて短く、従来は手作業による指し手入力による対局と同様、対戦するコンピュータ同士を互いに隣接させて配置しなければなりませんでした。 このため、対局ごとに機器を移動しなければなりませんでした。 これは特に大型機器を持ち込む参加者にとって大きな作業負担になっています。
この負担を解消するためLANを導入し、本来のネットワークが持つ、位置の制約からの自由を達成させます。 これにより、ベストの機器の導入を躊躇させる要素をも排除します。
近年、RS-232Cは、一部用途を除いて他の通信規格による置き換えが進んでおり、年を追うごとにRS-232Cに対応した機器が減少しています。 RS-232Cコネクタを有するコンピュータの入手が困難となって久しく、このため多くの参加者は、USBケーブルとRS-232Cの変換器を導入するなど対策に追われていました。
これを、入手および導入が容易なネットワーク規格に置き換え、選手権の参加者が思考アルゴリズムの強化に専念できるようにします。 プロトコルはインターネットに用いられているTCP/IPがベースになっており、これをEthernetによって実現します。 現代はインターネットが広く普及しているうえ、有線の室内ネットワークのほとんどがEthernetを用いています。 TCP/IPとEthernetは、大多数のオペレーティングシステム(OS)にてサポートされており、大半の参加者にとって容易に利用可能です。 通信対局にこれらを採用することによって、機材の入手はきわめて容易になるうえ、通信部分のプログラミングも普及型の技術を用いて容易に行えるようになります。
通信による対局では、時おり何らかのトラブルによって対局継続が不可能になることがあります。 このとき従来のRS-232Cによる対局では、トラブルの原因や、相対するコンピュータのどちらに非があるかを客観的に知る方法がありませんでした。 このため、妥当な対策をとることが困難なだけでなく、対局の公正な判定や勝敗の決定が行える保証もありませんでした。
LAN対局では、クライアントのすべての通信をサーバとの間で行い、サーバの仲介によって対局を実現することにより、サーバがクライアントからの通信をすべて把握し、トラブルの原因を監視します。
従来は、コンピュータの消費時間をコンピュータ自身が計測していましたが、この計測が正確に行われていることを保証するのはきわめて困難でした。 これは不正の可能性ばかりでなく、機器の相違による計測差や、プログラミングのミスによっても不公正な状況をもたらす恐れがありました。 近年では、相手の手番のときに考える予測読みの処理も誤計測の原因となる恐れがありました。
LAN対局では、計測をサーバが集中的に行うことにより、公正さを保証します。
機器の持ち運び負担が軽減されるほか、通信の妥当性や計測の妥当性をサーバが保証することによって、参加者のデバッグの負担を軽減します。 また、棋譜の確認をサーバが行えるため、棋譜の確認および提出は、クライアントにとっては将来は必須ではなくなります。 加えて、プロトコルの検証作業の多くを、CSAが用意しているテスト用サーバによって行うことが可能です。
以上のメリットに加え、対局の観戦が容易になるという副次的な効果があります。 今回の選手権から、すべての対局が、サーバの仲介によって会場のプロジェクタに映し出され、同時に観戦できるようになります。 また今回は、世界中のインターネットユーザが全対局をリアルタイムに観戦できるようになり、コンピュータ将棋がますます注目される存在になるでしょう。
したがいまして、これまでRS-232Cのみに対応されていた方には、新たなプロトコルへの対応作業が必要になることをご了承願います。 本文書は、選手権でのLAN対局のルールの説明に加え、参加者の皆さんによるLAN対応をできる限り容易にすることを目的として作成されています。
LAN対局は、CSAサーバ プロトコル ver.1.2.1に従って行われます。 本節では、このプロトコルにおいて、選手権に関して特記すべき部分について述べます。
前節にて述べたとおり、サーバはプロトコルにしたがい、通信の妥当性の検証と消費時間の計測を担当します。 妥当でない通信を検知し、排除することによって、LANを正常に保つ役割も負います。 従来と異なり、サーバが計測した消費時間が常に正規の消費時間となります。 指し手ごとの消費時間は、プロトコルにしたがって1手ごとの指し手に付加され、対局する双方のクライアントに送信されます。
LAN対局において、クライアントは、プロトコルに規定された動作のうち、最低限、下記が可能なように実装されていなければなりません。
ログインに必要なログイン名とパスワードは、選手権参加手続きの過程において、以下の形式にて申請されたものを用います。
ログイン後、クライアントは、受け取った対局通知メッセージの終端を検出した後、対局を行うため 'AGREE' をサーバに回答する必要があります。 対局開始直後、手番を持つクライアント、すなわち 'Your_Turn:' と 'To_Move:' の内容が同一の対局通知メッセージを受信しているクライアントは最初の手を指さなければならず、もう一方のクライアントは指し手を受信するまで指し手を送 信してはいけません。 対局が開始されてから終了するまで、クライアントは、相手の指し手を解釈し、それに応じて局面を正しい状態で記憶し、それに応じた指し手をサーバに送信し 続ける必要があります。 また、TCP/IPのコネクション切断によってログアウトと同様の手続きを行うことが可能ですが、異常終了と区別できるよう、極力ログアウトコマンドの送 信によってログアウトを行うようにしてください。
前節にて述べたとおり、正規の消費時間はすべてサーバが計測したものを採用します。 クライアントは、常にこの時間を基づいて残り時間を計測し、かつ1手ごとの消費時間が多くなりすぎないよう時間を計測しつつ指し手を送信し、時間切れを回避しなければなりません。
対局中は、プロトコルに厳格に従うように開発を行ってください。 クライアントがプロトコルに従わない通信を行った場合は、反則負けとなります。 第16回選手権にて、あるクライアントが、相手玉を詰ました直後に相手の投了を待たずにコネクションを切断したことがありました。 これはプロトコルに反した動作ですので、第17回選手権以降では反則負けとして処理されると考えてください。
なお、何らかのトラブルの発生によってLAN対局が継続不可能になった場合は、審判の判定にしたがって、途中の局面から他のLAN対局可能な機器などによる対局に移行していただく可能性があります。 このとき、指し手を手動入力する必要が生じて消費時間などの点で不利になる可能性がありますが、ご了承ください。
プロトコルでは、対局通知メッセージによって対局条件を提示するための書式が定義されています。 ここで記述される事項は、一部を除いて、あらかじめ選手権のルールによって固定されています。 メッセージの内容のうちの固定された情報に関しては、クライアントがあらかじめその内容に適応していれば、それらを解釈する必要はありません。 具体的には、選手権ではCSAサーバ プロトコル ver.1.2.1を用い、600秒すなわち10分を全体の持時間とし、持時間が切れた後は1手あたり10秒の秒読み時間内の着手が必要となります(前回までの「切れ負け」ルールが変更され、また1手あたり最低1秒を消費するルールは採用されなくなりました)。この時間制は選手権中の全対局で同一ですので、持時間情報を解析する処理を持たせたり、遅延時間や加算時間に関する処理を持たせたりする必要はなく、持時間600秒、秒読み10秒の対局が固定的に行えれば充分です。 また、手数が256手に達した場合は対局打ち切りとなるルールに変わりました。打ち切り時点で先手玉が詰みの状態もしくは後手の勝利宣言が成立した状態であれば後手勝ち、それ以外の場合は引き分けとなります。 千日手は引き分けとして指し直しを行わず、持将棋における勝利宣言ルールが有効となります。 手数による対局打ち切り、および千日手の判定はサーバが行いますので、対局打ち切りと連続王手でない千日手については、あえて勝利を目指すのでなければクライアントで判定を行う必要はありません。 一方、連続王手の千日手については、連続王手を行った側の反則負けとなりますので、反則負けを避けるように判定を行うべきでしょう。また、持将棋における勝利宣言ルールは宣言時に宣言条件を満たしていなければ反則負けとなりますので、反則負けを避けるためにはクライアントが正しく条件を判定する必要があります。 プロトコル ver.1.2.1では、手番でないクライアントが情報の送信を行ったときのサーバの処理が '#ILLEGAL_ACTION' を送信する仕様に変更されましたが、結果は当該クライアントの反則負けとなる運用は変わりませんので、前回までの実装を特に変更する必要はないでしょう。投了、引分、入玉宣言、時間切れ、反則による終局判定がサーバによって行われた場合、終局が成立したものとして結果判定が行われますので、終局判定直後にクライアントが強制終了などの不正常な動作をした場合でも、不利な結果になることはありません。
また、対局ごとに変化する情報も、指し手の決定に直接影響しない情報か、または事前に知ることのできる情報のいずれかに限られますので、事前の設定が適切に行われていれば、これらのメッセージを解釈する必要はありません 対局通知を示す、'BEGIN Game_Summary' の行で開始され 'END Game_Summary' の行で終了するメッセージのうち、対局ごとに変化するのは、以下の項目のみです。
本節では、対局プロトコルを除く部分における各種設定、および必要な準備について述べます。 通信に用いられるTCP/IPにおける、IP(Internet Protocol)に関してのサーバおよびクライアントの設定内容、および参加者の皆さんに準備していただくEthernetケーブルは、下記のとおりとなります。
LAN対局においては、DNS(Domain Name Service)による名前の設定は行われません。 したがって、クライアントからサーバへの接続は、接続時に直接IPアドレスを用いてサーバを指定してください。
IPはバージョン4が用いられます。 したがって、すべてのIPアドレスは32ビット長で表現されます。 IPアドレスおよびポート番号に関する設定は、以下のとおりです。
選手権に用いられるLANは、カテゴリ3以上の伝送能力を持つEthernetケーブルおよびスイッチングハブを介してサーバとクライアントを接続することによって構築されます。 各参加者は、10BASE-Tや100BASE-TX、もしくはそれ以上の性能を有する、RJ-45コネクタを持つ普及型の3メートル~5メートルのEthernetストレートケーブルを1本持参してください。 それを会場にて指定されたスイッチングハブに接続することによって、クライアントをLANに接続していただきます。 各参加者のコンピュータを接続したスイッチングハブは、さらに上流のスイッチングハブに接続され集約されます。 サーバは上流のスイッチングハブに接続され、各クライアントとの通信を行います。
LAN対局における各種のトラブルを極力減らすため、LANに接続されるクライアントは、下記の注意事項が遵守されるよう実装および設定され、また正しく運用されなければなりません。
クライアントは、最低限の接続確認、サーバへの接続、最低限の指し手の送信、およびそれらのための経路情報の獲得に関する最低限の通信を除いて、不必要な通信および対局に無関係な通信を行ってはいけません。 具体的には、ICMPパケットによるエコー要求および応答、TCPパケットによる対局のための通信、ARP要求および応答を必要に応じて行うほかは、情報を送信してはいけません。 他のクライアントとの通信も行ってはいけません。 これは、LAN上の不必要なパケットを極力排除することによって、LANの混雑やルーティング情報の撹乱を防ぎ、LANの安定運用を確実なものにするためです。 特に、クライアントがコンピュータウィルスやワームに感染していないこと、HTTPサーバやDHCPサーバ、将棋以外のネットワークアプリケーションなどが動作していないことは、事前に充分に確認してください。
上記は、異常な動作をする他のクライアントの影響を受けることなく正常に動作しなければならないことを含みます。 すなわち、他のクライアントからウィルスを感染させられたり、対局と無関係な通信に応答したりしないよう、充分配慮されていなければなりません。
IPアドレスの設定は、正確に行われるよう慎重に確認して行ってください。 LANに接続されるコンピュータのIPアドレスが間違って設定された結果、サーバや他のクライアントと一致してしまうと、対局中に通信が突然途絶えてしまうなどの深刻なトラブルがすべてのクライアントに対して発生する恐れが生じます。 充分ご注意ください。
また、クライアントと、クライアントが接続されるスイッチングハブとの間の接続は確実に行い、通信品質が保たれるようにしてください。 対局中にLANケーブルが抜けることのないよう、持参するLANケーブルのRJ-45コネクタが「カチッ」と音がするまでしっかりとクライアントとハブに挿入し固定させ、対局中に引っ張られても抜けないようにしてください。 また持参するLANケーブルには、「カチッ」と固定されなかったり、引っ張られると抜ける恐れのあるようなコネクタがついたもの、選手権中に断線する恐れのあるような老朽化したものを避けてください。
各クライアントが接続されるスイッチングハブとサーバとの間の通信品質、およびサーバの通信品質は、主催者側の責任において、下記のように確保されます。
LAN対局のクライアント実装が正常に動作することを確認するため、CSAでは、インターネットを経由してアクセス可能な対局サーバを準備しています。 テスト用サーバでは、試合用とテスト用の両方のログイン名を使用してログインすることができます。 上記ログイン名は、選手権参加申込受付後、主催者側で速やかにサーバにて有効となるようにいたします。 その後、下記のインターネット対局サーバに接続することによって、テストを行うことができます。 なお、過去にGPW杯、コンピュータ将棋オープン戦、王者戦のいずれかに参加された方は、その際に使われたログイン名も使用することができます。
テスト用サーバへの接続は、IPアドレスを用いる選手権でのLAN対局と異なり、DNSを利用してサーバ名でアクセスしていただきます。 また、クライアントのサブネットマスクやIPアドレスなどには、各クライアントの接続環境に応じた設定を用いてください。
テスト用サーバにログインした直後、同様にログイン直後の他のクライアントが存在していない場合は、テスト用サーバは何も送信せず次のクライアントを待ちます。 同様のクライアントが存在する場合、もしくは他のクライアントがログインした場合は、その両者が対局を行うための対局通知メッセージがテスト用サーバからただちに送信されます。 LAN対局と同様、両者が対局通知メッセージに対して 'AGREE' をテスト用サーバに回答することによって対局が開始され、テストを行えます。 試合用とテスト用のログイン名で2つのクライアントをログインさせることにより、単独の参加チームだけでテストを行うことができます。
テスト用サーバは、対局が終了した後、もしくは一度送信された対局通知メッセージがいずれかのクライアントによって拒絶され不成立となった後のクライアントには対局通知メッセージを送信しません。 この状態からテスト対局をを行う場合は、いったんログアウトして再度ログインするか、もしくは下記のメッセージをテスト用サーバに送信することによって、再度対局通知メッセージを受信する必要があります。
CHALLENGEこれはテスト用サーバ接続時にのみ有効なメッセージであり、プロトコルには規定されていません。 また、LAN対局では意味を持ちません。 テスト用サーバは、上記のメッセージを送信したクライアントを、ログイン直後のクライアントと同様、対局通知メッセージを送信する対象のクライアントとみなします。 同様のクライアントが他に存在しない場合、テスト用サーバは、
CHALLENGE ACCEPTEDというメッセージをクライアントに送信し、次のクライアントを待つ状態に入ったことを示します。 同様のクライアントが存在する場合、もしくは他のクライアントが現れた場合は、ログイン直後と同様、ただちに対局通知メッセージが両者に送信されます。 以上の要領により、テストを継続することができます。
また、テスト用サーバに限り、中断した対局の再開テストを行えるようになっています。 現在、対局サーバが自動マッチメークした対局では、対局中に指し手として、
%CHUDANを送信することによって、先手および後手が各1回だけ対局を中断させることができます。 中断された対局は、
CHALLENGEの送信、または再ログインによって同じ対局者が同時に自動対局待ちの状態になったとき、中断直前の局面にて対局が再開されます。 再開時の局面は、プロトコルにしたがって初手から中断直前の局面までの指し手が対局通知に付加されることによって示されます。 したがって、中断再開機能を指し手つきの対局通知の読み込みテストに使用することができます。 再開後の対局は、中断した側の対局者の再中断が不可能になった点を除き、中断前と同様に進行します。 中断再開は、選手権において万一、トラブルによって対局の中断を余儀なくされた場合に、途中から対局を再開できるようにするための対応のテストとして利用することができます。 なお、選手権での対局ではクライアントからのコマンドによる対局の中断はできませんのでご注意ください。
インターネットでのテストが成功しましたら、皆さんのお手元の環境にてサーバ接続テストを実施されることをお薦めいたします。 これは、選手権でのLAN対局のようなネットワーク遅延のきわめて少ない環境でもクライアントが正常に動作するかどうかを検証するのに有効です。
ネットワーク遅延がわずかな場合、クライアントが指し手を送信し、サーバがその指し手に消費時間を付加してクライアントに送信した後、クライアントがその指し手の受信処理を行う前にサーバがその次の相手の指し手を送信することがあります。 この場合、サーバが送信した2つの指し手をクライアントが正常に処理しないと、指し手を正しく読み取れない恐れがあります。 一例として、連結した2つの指し手を1つの指し手とみなしてしまい、相手の次の手を見逃してしまう可能性があります。 これを正しく処理するためには、受信した指し手文字列中のすべてのLF(ラインフィード文字)を検出し、LFごとに区切られた文字列をひとつひとつの指し手とみなすようにしなければなりません。 この処理にバグが含まれていないかどうかを確かめるには、インターネットを介さないテストが有効です。 インターネット環境では、相手の指し手が届くまでの間に遅延が発生するため、それまでに自分の指し手の受信処理が終了する可能性が高く、指し手の区切り処理を検証する機会がきわめて少なくなります。
お手元の環境でのテストには、Shogi Framework Implements CSA Protocolに置かれている対局クライアントJavaアプレットのご利用を推奨いたします。 将棋盤のウィンドウが開いた後、メニューから[サーバ]→[簡易サーバ起動]を選択すると、Javaアプレットを実行したコンピュータで簡易なサーバが起動し、ポート番号4081でクライアントのログインを待ち受けます。 簡易サーバ起動後、2つのクライアントを簡易サーバにログインさせると、ただちに対局条件の送信が行われますので、以下インターネット上のサーバでのテストと同様に対局をお試しください。 ノータイムでの指し手が続いた場合でも受信処理が正しく行われるかどうかをテストされることをお薦めいたします。 なお、WindowsXPなど一部のOSでは、簡易サーバ起動時、セキュリティ警告メッセージが出る可能性があります。
Javaアプレットは、JavaプラグインがインストールされたコンピュータであればWebブラウザ上で動作させることができます。 簡易サーバの接続先となるIPアドレスは、クライアントソフトを動作させているコンピュータのIPアドレスとなります。 クライアントとサーバを同一のコンピュータで実行させている場合は、IPアドレス '127.0.0.1' またはホスト名 'localhost' を指定することもできます。 なお、簡易サーバはサーバとしてのすべての機能を備えてはいませんので、指し手の検証その他の用途にはCSAのサイトのサーバを利用されることをお薦めいたします。 また対局クライアントJavaアプレットは、簡易サーバとクライアントの機能を同時に利用することができますので、単独でコンピュータとの対戦テストに利用することができます。
LAN対局への移行をスムーズに行うためには、参加者の皆さんのご協力が不可欠です。 LAN対局の導入は、初期においては従来になかったトラブルが発生する可能性もありますが、中・長期的には現行のシステムの課題を改善し、より対局に集中できる運営が可能になる、と主催者側では判断しております。
また、LANからインターネットへの対局のリアルタイム中継が可能になることにより、コンピュータ将棋の強さを全世界にアピールすることができ、注目を集めることによって、コンピュータ将棋のさらなる発展が期待されます。
本文書について不明な点がありましたら、csa_protocol@computer-shogi.orgまでお気軽にお問い合わせください。