Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

CSA 形式

CSA 標準棋譜ファイル形式は、コンピュータ将棋協会(CSA)が定めた標準的な棋譜交換フォーマットです。異なる将棋ソフト間でのデータ交換を可能にするために設計されています。

公式仕様

概要

CSA形式は以下の特徴を持ちます:

  • テキストファイル形式で処理が容易
  • プログラムによる解析を重視(人の可読性より機械処理を優先)
  • 標準化された駒と位置の表記
  • バージョン管理により仕様の拡張に対応

ファイル構造

CSA棋譜ファイルは以下の順序で構成されます:

  1. 文字コード宣言(V3.0以降)
  2. バージョン情報
  3. 棋譜情報(対局者名、棋戦名など)
  4. 開始局面(持駒、手番を含む)
  5. 指し手と消費時間
  6. コメント

セパレータ(/だけの行)で区切ることで、複数の棋譜を1ファイルに記録できます。

基本表記

文字コード(V3.0以降)

ファイル先頭で文字コードを宣言します:

'CSA encoding=UTF-8
  • UTF-8 または SHIFT_JIS を指定可能
  • この行がない場合は SHIFT_JIS と判断(過去の互換性)

バージョン

V3.0

現在のバージョンは以下の通り:

  • V3.0 (2024年5月14日) - 最新版
  • V2.2 (2008年1月12日)
  • V2.1 (2005年9月10日)
  • V2 (2002年11月15日)

バージョンがない場合は、1997年8月25日の仕様と判断されます。

駒の表記

駒種表記成駒表記
FUTO
KY成香NY
KE成桂NK
GI成銀NG
KI--
KAUM
HIRY
OU--

位置の表記

  • 2桁の数字で表記:11(1一)~ 99(9九)
  • 駒台00
  • 先手(下手)は +後手(上手)は - を付ける

例:

  • +2726FU:先手が7六歩(77→76)
  • -8384FU:後手が8四歩(83→84)

棋譜情報

対局者名

N+先手の名前
N-後手の名前

各種情報($で開始)

$EVENT:棋戦名
$SITE:対局場所
$START_TIME:2024/05/05 15:05:40
$END_TIME:2024/05/05 15:31:22
$OPENING:戦型名

持ち時間(V3.0で改定)

$TIME:900+0+5

形式:(初期持ち時間)+(秒読み)+(フィッシャー方式加算)

  • 単位は
  • 小数点でミリ秒単位まで記述可能(最大3桁)
  • 切れ負けの場合、秒読みを 0 とする

例:

$TIME:1500+0+0      # 25分切れ負け
$TIME:1800+30+0     # 30分 + 秒読み30秒
$TIME:0+30+0        # 初手から30秒秒読み
$TIME:900+0+5       # フィッシャー方式: 初期900秒、加算5秒

先手と後手で持ち時間が異なる場合:

$TIME+:450+0+5      # 先手
$TIME-:900+0+5      # 後手

その他の情報(V3.0で追加)

$MAX_MOVES:320                 # 最大手数
$JISHOGI:27                    # 持将棋ルール(24点法/27点法)
$NOTE:備考1行目\n2行目\\     # 備考(\nで改行、\\で\)

開始局面

平手初期配置

PI

駒落ち

平手から落とす駒を指定:

PI82HI22KA          # 二枚落ち

一括表現

1行ごとに駒配置を記述:

P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI *  *  *  *  * -KA *
P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P4 *  *  *  *  *  *  *  *  *
P5 *  *  *  *  *  *  *  *  *
P6 *  *  *  *  *  *  *  *  *
P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P8 * +KA *  *  *  *  * +HI *
P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
  • 1枡3文字で9枡分を記述
  • 先後の区別が +/- 以外のとき、駒がないとする

駒別単独表現

個別に駒の位置を指定:

P-22KA              # 後手の2二角
P+99KY              # 先手の9九香
P+00KIOOFU          # 先手の持駒:金と歩
P-00AL              # 後手の残り全ての駒

手番

+                   # 先手番

または

-                   # 後手番

手番の指定は必須です。

指し手

通常の指し手

形式:(先後)(移動前)(移動後)(駒名)

+2726FU             # 先手 7六歩
-3334FU             # 後手 3四歩
+2625FU             # 先手 2五歩

消費時間

T に続いて秒単位で記述:

+2726FU
T15
-3334FU
T6.123              # ミリ秒単位(V3.0以降)

消費時間は省略可能です。

終局状況

% で始まる特殊な表記:

%TORYO              # 投了(消費時間記録可能)
%CHUDAN             # 中断
%SENNICHITE         # 千日手
%TIME_UP            # 時間切れ(手番側の負け)
%ILLEGAL_MOVE       # 反則負け(手番側)
%+ILLEGAL_ACTION    # 先手の反則行為により後手の勝ち
%-ILLEGAL_ACTION    # 後手の反則行為により先手の勝ち
%JISHOGI            # 持将棋
%KACHI              # 入玉宣言勝ち
%HIKIWAKE           # 入玉宣言引き分け
%MAX_MOVES          # 最大手数到達(V3.0)
%TSUMI              # 詰み
%FUZUMI             # 不詰
%ERROR              # エラー

%... の終局行の直後に続く T...(消費時間)と '*...(プログラムコメント)も記録できます。 rsshogi ではこれらを終局特殊手に保持し、to_csa() で再出力します。 終局 %... 行が欠けた棋譜も受理でき、その場合は main_terminal == None / result == GameResult::Invalid として保持します。

プログラムが読むコメント(V3.0追加)

通常のコメント

'* で始まる行はプログラムが読むコメント:

'*コメント1行目
'*コメント2行目

rsshogi では Record に保持する move / terminal comment を to_csa() で この '*... 形式にして出力します。parser 側も CSA 3.0 の定義に合わせ、 '*... だけをプログラムが読むコメントとして取り込み、plain な '... は 読み飛ばします('CSA encoding=... は文字コード宣言)。 手番行(+ / -)の後から初手までに現れる '*... は開始局面コメントとして Record.initial_comment / Record::initial_comment() に保持され、 to_csa() でも手番行直後へ書き戻されます。互換性のため、手番行より前の '*... も受理して initial_comment に正規化します。 この理由は、CSA 3.0 では '*...'... の意味が明確に分かれている一方、 既存ツールでは手番行前の '*... を開始局面コメントとして扱う例があるためです。 $NOTE:RecordMetadata.comment に対応し、匿名の '... ヘッダ行は メタコメントへは取り込みません。 終局特殊手がない Recordto_csa() すると、終局 %... 行は出力されません。

評価値・読み筋・ノード数

'** に続いて記述:

'** 30 +7776FU -9394FU +7968GI #1234

形式:'** (評価値) (読み筋) #(ノード数)

  • 評価値は整数(先手有利がプラス、後手有利がマイナス)
  • 先手勝ちの評価値は 30000、後手勝ちは -30000 を推奨
  • 読み筋は指し手を半角空白で区切る
  • ノード数は # の後に記述

読み筋内の特殊表記:

+PASS               # 先手番のパス
-PASS               # 後手番のパス
%TORYO              # 投了
%KACHI              # 入玉宣言勝ち
%SENNICHITE         # 千日手
%MAX_MOVES          # 最大手数
%REP_SUP            # 優等局面
%REP_INF            # 劣等局面

プログラムが読み飛ばすコメント

'(アポストロフィー)で始まる行:

'これはコメントです

マルチステートメント

,(カンマ)で複数行を1行にまとめることができます:

+2726FU,T15

ファイル例

'CSA encoding=UTF-8
'----------棋譜ファイルの例 "example.csa"---------------
'バージョン
V3.0
'対局者名
N+先手
N-後手
'棋譜情報
'棋戦名
$EVENT:34th World Computer Shogi Championship
'対局場所
$SITE:INTERNET
'開始日時
$START_TIME:2024/05/05 15:05:40
'終了日時
$END_TIME:2024/05/05 15:31:22
'持ち時間:フィッシャー方式、初期持ち時間:900秒、加算:5秒
$TIME:900+0+5
'戦型:矢倉
$OPENING:YAGURA
'最大手数:320
$MAX_MOVES:320
'持将棋ルールは、27点法
$JISHOGI:27
'備考
$NOTE:備考1行目\n2行目
'平手の初期局面
P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
P2 * -HI *  *  *  *  * -KA *
P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
P4 *  *  *  *  *  *  *  *  *
P5 *  *  *  *  *  *  *  *  *
P6 *  *  *  *  *  *  *  *  *
P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
P8 * +KA *  *  *  *  * +HI *
P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
'先手番
+
'指し手と消費時間
+2726FU,T0
'評価値、読み筋、ノード数
'** 30 -8384FU +2625FU -8485FU +6978KI -4132KI +3938GI -7172GI #1234
-3334FU
'ミリ秒単位の消費時間
T6.123
'*プログラムが読むコメント1行目
'*プログラムが読むコメント2行目
%CHUDAN
'-------------------------------------------------

rsshogi での対応状況

サポート済み

  • ✅ V2.1/V2.2 形式のパース
  • ✅ 基本的な棋譜情報の読み込み
  • ✅ 平手・駒落ち局面の解析
  • ✅ 指し手と消費時間の解析
  • ✅ 終局状況の解析
  • '*... プログラムコメント行の取り込みと再出力(plain な '... は読み飛ばし)
  • %... 終局行に続く T... / コメント行の保持
  • $TIME+ / $TIME- / $MAX_MOVES / $JISHOGI の取り込み
  • ✅ CSA 形式への出力

制限事項

  • ⚠️ V3.0 の新機能(評価値・読み筋)は部分対応
  • ⚠️ 分岐の出力は未対応(tsshogi準拠)
  • ⚠️ 評価値の出力は未対応

バージョン間の主な変更点

V3.0 (2024年5月14日)

  • 文字コード(UTF-8/SHIFT_JIS)の明示的な記述
  • 持ち時間表記の改定(フィッシャー方式、ミリ秒対応)
  • 消費時間のミリ秒単位対応
  • 評価値・読み筋・ノード数の記録機能
  • 棋譜情報に最大手数、持将棋ルール、備考を追加
  • %MAX_MOVES の追加
  • %MATTA の削除

V2.2 (2008年1月12日)

  • %+ILLEGAL_ACTION の追加
  • %-ILLEGAL_ACTION の追加

V2.1 (2005年9月10日)

  • %TIME_UP の追加
  • %ILLEGAL_MOVE の追加

V2 (2002年11月15日)

  • バージョン表記の導入
  • 棋譜情報の拡充

関連リンク

関連項目