マガジン

チェスの判定エンジンを同梱した理由とライセンスの扱い

遊びを見つける

執筆にClaudeを使用しています。

六種類の木製チェス駒が並び、手がナイトを持ち上げる初心者向けの盤面イメージ
記事のテーマをもとに制作したAI生成の写真風イメージ。

「灯りのチェス」は、判定エンジンとしてchess.jsを作品の中に同梱しています。ライブラリをCDN(外部のサーバーからファイルを配る仕組み)から読み込む方法もありますが、公式作品はそうしていません。この記事では「なぜ同梱なのか」と「同梱したライブラリの表示義務はどこで確かめられるのか」の二つを、確認済みの事実だけを手がかりに考えます。 先に断っておくと、ライセンス文の中身や、作品内のどこにどう表記しているかといった細部は、確認済み事項に含まれていません。そこで後半では、読者が自分の手で確かめる手順を具体的に示します。同梱という設計から読み取れることと、作品を開いて確かめることを分けて読み進めてください。

この記事の目次
  1. 確かな出発点は「外部通信なしで動く」こと
  2. 判定エンジンが担っている仕事の幅
  3. 同梱とCDNの違いを整理する
  4. 表示義務は何を求めるのか(一般論)
  5. 灯りのチェスで確かめる手順
  6. 自作ゲームで同じ考え方を使う
  7. 次の行動
  8. 参考資料

確かな出発点は「外部通信なしで動く」こと

確認済みなのは、13本の公式作品がすべて独立したHTMLで、外部通信なしに動くという点です。灯りのチェスもその一本で、判定エンジンとしてchess.jsを同梱しています。

ここから読み取れる設計上の筋道は単純です。外部通信なしで動かすなら、チェスの規則を判定するライブラリも作品の内側に置く必要があります。CDNから読み込む設計にすると、ゲームを開くたびに外部サーバーへの通信が発生し、「外部通信なし」という性質そのものが成り立たなくなります。同梱は、この共通方針をチェスという題材で守った結果だと読むのが自然です。

アソバースの実行環境もこの読み方と矛盾しません。ゲームはsandbox付きのiframeで動き、アップロードされたコードはメインサイトとは別のオリジンから配信されます。外の世界から切り離した小さな部屋でゲームを走らせる前提なので、部屋の中に必要な部品をすべて持ち込む設計と相性がよいのです。

判定エンジンが担っている仕事の幅

灯りのチェスが対応している規則は、キャスリング、アンパッサン、選択式の昇格、標準の終局判定です。駒の動き方ガイド、ヒント、一手戻す、取った駒と全棋譜の表示、黒側の盤面反転も備えています。

このうち規則の判定が絡むのは次のような場面です。

  • 駒をクリックしたときに、動かせるマスを示す
  • 自分のキングが取られる形になる手を除外する
  • ステイルメイトや駒不足など、引き分けを含む終局を判断する
  • CPUが次の手を選ぶ前に、候補となる合法手を並べる

チェスの規則は例外が多く、自前で書くと抜けが出やすい分野です。たとえばキャスリングは、キングやルークが動いたことがないか、通り道に攻撃されたマスがないかを同時に見る必要があります。アンパッサンは直前の一手にしか使えません。こうした処理を実績のあるライブラリに任せるのは、一般的に妥当な判断です。ただし、公式側がどの理由を重視したかは確認済み事項にないため、これは設計から推測できる範囲にとどめます。

CPUの思考時間が約450msに制限されている点も、エンジン周りの設計として読み取れます。外部の強力な探索サーバーを呼ぶのではなく、手元のブラウザで短時間に完結する範囲で相手を作っているということです。3段階の相手の強さの違いがどこから生まれるかは、確認済み事項にはありません。この部分は作品を開き、段階ごとに何局か指して確かめてください。

オンライン対戦については、手番・合法手・勝敗をサーバーで確認することが確認済みです。クライアント側のエンジンは画面上の案内や補助に使われ、対戦の成立そのものはサーバー側の確認が担う、という分担だと読めます。ただし、サーバー側で同じライブラリを使っているかどうかは不明です。

同梱とCDNの違いを整理する

同梱とCDN読み込みの違いは、一般的には次のように整理できます。公式作品の事情に当てはめるときは、右端の列を意識してください。

  • 外部通信、同梱:不要、CDN読み込み:開くたびに発生、公式作品の方針との関係:「外部通信なし」と一致するのは同梱
  • 外部サーバーの停止、同梱:影響を受けない、CDN読み込み:影響を受ける、公式作品の方針との関係:同梱のほうが安定
  • バージョン、同梱:手元で固定される、CDN読み込み:参照先の指定しだい、公式作品の方針との関係:同梱なら動作を再現しやすい
  • 更新の取り込み、同梱:自分で差し替える、CDN読み込み:参照先を変えるだけ、公式作品の方針との関係:同梱は手間が増える
  • ファイルサイズ、同梱:作品側が増える、CDN読み込み:作品側は増えない、公式作品の方針との関係:同梱は容量を負担する
  • ライセンス表示、同梱:配布物に自分で含める、CDN読み込み:配信側に任せられる場合がある、公式作品の方針との関係:同梱は表示の責任が作品側に移る

最後の行が、この記事の核心です。同梱は外部に頼らない代わりに、ライブラリの表示義務を作品側が自分の責任で満たす設計になります。

表示義務は何を求めるのか(一般論)

多くのオープンソースライブラリは、利用や再配布を認める条件として、著作権表示とライセンス文を配布物に残すことを求めています。ライブラリのファイルを自分の作品に含めて配るなら、その表示を一緒に届ける必要があるのが一般的な考え方です。

ただし、chess.jsがどのライセンスで、具体的に何を求めているかは、ここでは断定しません。ライセンスは配布元の表記が正であり、版によって変わる可能性もあるからです。確認は、配布元のライセンス表記と、同梱したバージョンに付属するファイルで行ってください。法的な判断が必要な場面では、専門家や公式情報で確認するのが確実です。

読者が確かめられる観点は三つあります。

  1. 同梱されたライブラリのファイル冒頭に、著作権表示やライセンスを示すコメントが残っているか
  2. ライセンス文そのものが、作品または配布物のどこかに含まれているか
  3. 画面上やクレジットの欄に、ライブラリの名前や出典が示されているか

どれがどこまで満たされているかは、確認済み事項にはありません。次の節の手順で、ご自身の目で確かめてください。

灯りのチェスで確かめる手順

作品を開くだけでできる確認です。ブラウザの開発者ツールを使うので、操作は大人の方と一緒に行うか、慣れてから試してください。

外部通信がないことを確かめる

  1. 灯りのチェスを開く前に、開発者ツールのネットワークタブを開きます。
  2. ページを読み込み直し、並んだ通信の接続先を眺めます。
  3. 外部のドメインのファイルが読み込まれていないかを見ます。

読み込み後の記録を簡易的に調べるなら、次のスニペットも使えます。ゲームは別オリジンのiframeで動いているため、コンソールの実行対象をゲームのiframeに切り替えてから貼ってください。

js
const here = location.origin;
const rows = performance.getEntriesByType('resource').map(e => ({
  url: e.name,
  外部: new URL(e.name).origin !== here
}));
console.table(rows);
console.log('外部の数:', rows.filter(r => r.外部).length);

「外部の数」が0なら、そのページが読み込んだファイルはすべて同じオリジンから来ています。ただしこれは簡易確認です。data:形式の資源は「外部」と判定されることがあり、iframeの選択を間違えると別のページを調べてしまいます。結果に迷ったら、ネットワークタブの接続先一覧を優先してください。

ライブラリの表示を探す

  1. ページのソースを表示するか、開発者ツールのソースタブで、読み込まれているスクリプトを開きます。
  2. 「chess」という語や、「Copyright」「License」といった語で検索します。
  3. 見つかった表記が、配布元のライセンス表記と同じ種類を指しているかを照らし合わせます。
  4. 画面側にクレジットや出典の表示があるかを、作品内のメニューや説明を一通り見て確かめます。

検索で何も見つからなくても、それだけで不備とは言えません。ファイルが圧縮されている場合や、表記が別のファイル、別の画面にある場合があるからです。見つからなかったときは「この部分は現在の案内で確認する」とし、判断を急がないでください。

自作ゲームで同じ考え方を使う

この話は、アソバースに作品を投稿する人にも関係します。HTMLやZIPで投稿する作品は、直下のindex.htmlを入口にして、素材を相対パスで読み込みます。ZIPは20MiB以内、展開後は合計100MiB・1,000ファイル以内、1ファイル30MiB以内という制限があり、サーバー用コードやサービスワーカーは対象外です。つまり、ライブラリを作品フォルダに入れて相対パスで読む形が、投稿の仕組みとそのまま噛み合います。

同じことをするときの確認事項を挙げます。

  • 使うライブラリのライセンスを、配布元の表記で確認します。
  • ライセンス文や著作権表示のファイルを、ライブラリと一緒にZIPへ含めます。
  • ライブラリ冒頭のコメントを、圧縮や加工で消していないか確かめます。
  • 作品の説明やクレジットに、使ったライブラリの名前を書いておきます。
  • 外部のCDNを参照していないか、前節の手順で自分の作品を調べます。

ライセンスの解釈で迷う場合は、断定せず、配布元の案内や専門家に確認してください。

次の行動

灯りのチェスを開き、ネットワークタブで外部の接続先がないことを確かめたうえで、スクリプトの冒頭にライブラリの表記が残っているか探してみてください。自作ゲームを投稿する予定があるなら、使うライブラリのライセンス文を先にZIPへ入れておくと、公開時に慌てずに済みます。

参考資料

  • chess.js 配布元のライセンス表記と付属ファイル
  • 各オープンソースライセンスの公式全文
  • ブラウザ開発者ツールの公式ドキュメント(ネットワークパネル)