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

フォーマット仕様一覧

rsshogi は、棋譜(1 局の手順とメタデータ)、定跡(局面から候補手集合への辞書)、および機械学習用の局面と自己対局バイナリまで、用途に応じた複数のデータフォーマットをサポートしている。 本ページでは、各フォーマットの特性比較と相互変換の全体像を示す。

フォーマット変換ハブ

rsshogi におけるデータ構造と外部フォーマットの対応関係を以下の図に示す。

flowchart LR
    subgraph TextRecords["テキスト棋譜フォーマット"]
        KIF["KIF (.kif)"]
        KI2["KI2 (.ki2)"]
        CSA["CSA (.csa)"]
        JKF["JKF (.jkf)"]
        USI["USI / SFEN"]
    end

    subgraph CoreIR["rsshogi メモリ表現"]
        Record["Record (棋譜ツリー)"]
        Position["Board / Position (局面)"]
        BookIR["BookDatabase"]
    end

    subgraph TrainingBin["学習用圧縮バイナリ"]
        SBIN["SBINPACK (.sbinpack)"]
        PACK["PACK (.pack)"]
        HCP["HCP / HCPE (32B / 38B)"]
        PSV["PackedSfen / PSV (32B / 40B)"]
        SAZ["SAZPACK (.sazpack)"]
    end

    subgraph BookFormats["定跡フォーマット"]
        NativeBook["Native Book v4 (.book)"]
        DB2016["YaneuraOu DB2016 (.db)"]
        YBB["YaneuraOu YBB (.ybb)"]
        SBK["ShogiHome SBK (.sbk)"]
    end

    KIF <--> Record
    KI2 <--> Record
    CSA <--> Record
    JKF <--> Record
    USI <--> Record
    Record <--> SBIN
    Record <--> PACK
    Position <--> HCP
    Position <--> PSV
    Position <--> SAZ
    BookIR --> NativeBook
    BookIR <--> DB2016
    BookIR --> YBB
    BookIR <--> SBK
    YBB --> NativeBook
    DB2016 --> NativeBook
    SBK --> NativeBook

1. 棋譜フォーマット(KIF / KI2 / CSA / JKF)

1 局の指し手、消費時間、コメント、対局者情報などを記録するテキストフォーマット群である。 すべて Record 型を介して相互に変換できる。

項目KIFKI2CSAJKF
主な用途将棋ソフト間の標準交換、観戦記新聞や書籍に近い人間向け表記コンピュータ将棋対局、通信プロトコルWeb アプリケーション、プログラム処理
文字コードUTF-8 / Shift_JISUTF-8 / Shift_JISUTF-8 / Shift_JISUTF-8(JSON 標準)
指し手表記7六歩(77)(手数と移動元座標あり)▲7六歩(相対動作表記で移動元省略)+7776FU(移動元、移動先、成後の駒種)構造化 JSON オブジェクト
分岐手順(変化)○(変化:N手)○(変化:N手)✕(仕様上非対応)○("forks" 配列)
消費時間の精度秒単位(MM:SS / HH:MM:SS)✕(記録なし)秒 / ミリ秒単位(T12 / V3.0 は T6.123)秒単位(time.now / time.total)
指し手コメント○(*コメント)○(*コメント)○('*コメント)○("comments" 配列)
終局表記と要約行がない場合main_terminal = None(Invalid)SpecialMove::Interrupt(Paused)main_terminal = None(Invalid)main_terminal = None(Invalid)

棋譜変換の実装例

Python

from rsshogi.record import Record

# KIF 文字列をパースして他フォーマットへ変換する
record = Record.from_kif_str(kif_text)
csa_text = record.to_csa()
ki2_text = record.to_ki2()
jkf_text = record.to_jkf()

# Shift_JIS(cp932)で KIF ファイルに書き出す
record.write_kif("game_sjis.kif", encoding="cp932")

Rust

Rust では rsshogi クレートの records feature を有効にすることで、各フォーマットの関数を利用できる。 KI2 のパースおよびエクスポート関数は独立した ki2 サブモジュールではなく、rsshogi::records::formats::kif モジュール内で定義され、rsshogi::records::formats::* および rsshogi::records::* に再エクスポートされている。

#![allow(unused)]
fn main() {
use rsshogi::records::formats::{
    csa::{export_csa, parse_csa_str},
    jkf::{export_jkf, parse_jkf_str},
    kif::{export_ki2, export_kif, parse_ki2_str, parse_kif_str},
};

let record = parse_kif_str(kif_text)?;
let csa_text = export_csa(&record)?;
let ki2_text = export_ki2(&record)?;
let jkf_text = export_jkf(&record)?;
}

2. 定跡フォーマット(Native Book / YaneuraOu / SBK)

局面から候補手、評価値、探索深さ、採択回数(重み)へのマッピングを保持するフォーマット群である。 rsshogi のアーキテクチャと変換規則の詳細は 定跡アーキテクチャ を参照。

項目Native Book v4YaneuraOu DB2016YaneuraOu YBBShogiHome SBK
形式不変本体 + 追記ログ(.book)テキスト(.db)固定長バイナリ(.ybb)Protobuf バイナリ(.sbk)
局面キー32B 正規形 PackedSfen(手数なし)正規化 SFEN 文字列32 バイト PackedSfen + plySFEN + PackedSfen 索引 + state_id
保持フィールド指し手、未評価/cp/詰み/bound、任意 depth、depth_kind、表示順、コメント、title/descriptionmv, ponder, score (Option<i32>), depth (Option<u32>), count (Option<u64>), commentmv, eval (i16), depth (Option<u16>), ply (u16)mv, evaluation (Option<i32>), weight (Option<i32>), next_state_id, evals, comment
読み込み方式RAM のブロック索引 + 独立圧縮ブロックの部分読込 + 差分索引ストリーミング走査または二分探索メモリ保持またはファイル参照。検索は PackedSfen 二分探索、全件走査はバッファ付き逐次読込PackedSfen 二分探索 + オンデマンド Protobuf 復号
書き出し対応○(NativeBookEditor / NativeBookBuilder)○(YaneuraOuDb2016Writer / BookDatabase::write_yaneuraou_db2016)○(YbbWriter / BookDatabase::write_ybb)○(BookDatabase::write_sbk)
Python 対応NativeBook, NativeBookEditor, NativeBookBuilderYaneuraOuBook(読み取り専用)✕(Rust のみ)SbkBook(読み取り専用)

YBB は YbbBook で読み込み、YbbEntry を走査できる。 YbbBook::write_native_book(path, &options) で Native Book へ直接変換できる。 変換設定と欠落フィールドの扱いは 1.7.0 の移行ガイド を参照。 BookDatabase への取り込みは、呼び出し側で局面と候補手を変換する。

3. 学習および圧縮バイナリフォーマット

ニューラルネットワークの学習データ生成、大規模棋譜の高速ストリーム処理、および MCTS 自己対局ログの保存に特化したバイナリフォーマット群である。

フォーマット1 要素のサイズ主な用途詳細ページ
HuffmanCodedPos (HCP)32 バイト固定Apery / cshogi 互換のハフマン符号化局面学習用バイナリ仕様
HuffmanCodedPosAndEval (HCPE)38 バイト固定HCP + 評価値 + 最善手 (AperyMove) + 勝敗結果学習用バイナリ仕様
PackedSfen32 バイト固定YaneuraOu 互換のビットパック局面学習用バイナリ仕様
PackedSfenValue (PSV)40 バイト固定PackedSfen + 評価値 + 指し手 (Move) + 手数 + 勝敗学習用バイナリ仕様
PACK可変長(対局単位)開始局面 + 手順 (AperyMove) と評価値 + 終局結果の連結保存学習用バイナリ仕様
SBINPACK (SBN2)可変長(チャンク / チェーン)合法手インデックスと評価値差分による高圧縮棋譜ストリームsbinpack フォーマット仕様
SAZPACK (SAZ2 v4)可変長(チャンク)AlphaZero 型 MCTS 自己対局のゲーム統計と疎な方策分布の保存sazpack フォーマット仕様

関連項目