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は、将棋の棋譜を表現する主要なフォーマットに対応しています。各フォーマットには特徴と用途があり、状況に応じて使い分けることができます。

サポートしているフォーマット

フォーマット説明パース出力主な用途
KIF人間が読みやすい標準形式棋譜の保存・閲覧
KI2KIFの簡略版棋譜入力・閲覧
CSAコンピュータ将棋協会の標準形式データ交換・大会
JKFJSON形式の棋譜Webアプリ・プログラム処理

学習バイナリ形式

フォーマット説明主な用途
HCP / HCPE / PackedSfen / pack固定長/可変長の局面・学習データNN 学習データ、主要な参照実装との互換
sbinpackバイナリ棋譜(Stockfish binpack の将棋版)NN 学習・バイナリ棋譜アーカイブ
sazpackAlphaZero 系 sparse policy 教師データAZ/self-play shard・policy/value 学習

定跡フォーマット

フォーマット説明主な用途
定跡アーキテクチャ(3 層モデル)ルックアップ層 / 外部リーダ層 / 編集 IR 層の設計定跡 API の全体像把握
Bookrsshogi 独自の定跡バイナリ大規模定跡の高速参照
外部定跡(DB2016 / YBB / SBK)DB2016・YBB・SBK 形式の外部定跡既存ツールと互換性のある定跡の参照
DB2016 形式やねうら王のテキスト定跡フォーマット詳細DB2016 の構造・書式の理解
SBK 形式ShogiGUI 由来の protobuf 定跡フォーマット詳細SBK の構造・スキーマの理解

フォーマット比較

可読性

最も読みやすい: KI2 > KIF > CSA > JKF

  • KI2:自然な日本語表記で最も読みやすい
  • KIF:日本語表記で読みやすく、詳細な情報も含む
  • CSA:機械処理優先だが、慣れれば読める
  • JKF:JSON形式で人間が直接読むには不向き

ファイルサイズ

最も小さい: CSA ≈ KI2 < KIF < JKF

  • CSA:簡潔な表記で最小
  • KI2:移動元座標を省略するため小さい
  • KIF:詳細な情報を含むためやや大きい
  • JKF:JSON形式のオーバーヘッドで最大

プログラムでの扱いやすさ

最も扱いやすい: JKF > CSA > KIF > KI2

  • JKF:構造化されたJSON形式で解析が容易
  • CSA:シンプルな文法で実装しやすい
  • KIF:日本語表記だが、構造は明確
  • KI2:局面を進めながら解析する必要があり複雑

情報の保持

最も豊富: JKF ≈ KIF ≈ CSA V3.0 > CSA V2.x > KI2

  • JKF:分岐、コメント、時間など全てサポート
  • KIF:分岐、コメント、しおりなど豊富
  • CSA V3.0:評価値・読み筋など新機能を追加
  • CSA V2.x:基本的な情報を保持
  • KI2:基本的な指し手情報のみ

フォーマット選択のガイド

用途別の推奨フォーマット

棋譜を人間が読む・編集する

KI2 または KIF を推奨

  • KI2:より簡潔で読みやすい
  • KIF:詳細な情報も確認したい場合

プログラムで棋譜を処理する

JKF または CSA を推奨

  • JKF:Webアプリケーション、JavaScript/TypeScript
  • CSA:コンピュータ将棋、データ交換

将棋ソフト間でデータ交換

CSA を推奨

  • コンピュータ将棋協会の標準形式
  • 多くのソフトがサポート

棋譜データベース・アーカイブ

KIF または CSA を推奨

  • KIF:情報が豊富で可読性も高い
  • CSA:ファイルサイズが小さく、処理も高速

Webアプリケーション

JKF を推奨

  • JSON形式でJavaScriptとの親和性が高い
  • 構造化されたデータで扱いやすい

rsshogi の互換方針

rsshogi は仕様書どおりの文法だけでなく、実際に流通している棋譜との実務互換も重視します。

  • parser は ShogiHome/tsshogi 系が読み書きする入力を広く受ける方向を優先します。
  • exporter は shogi-validator に近い標準的な見た目を意識しつつ、 Record が保持している終局情報やコメントをできるだけ落としません。
  • KIF/KI2 では、変化手順と まで... 要約が同居する場合、変化ブロックを先に、 要約行を最後に出力します。
  • CSA では、CSA 3.0 のプログラムコメントである '*... をコメントとして受理し、出力も '*... に寄せます。plain な '... は通常コメントとして読み飛ばします。

フォーマット詳細

KIF形式

柿木将棋や「Kifu for Windows」で採用されている、人間が読みやすい棋譜形式です。

特徴:

  • 日本語表記で読みやすい
  • コメント機能が充実
  • しおり機能で特定局面を記録
  • 詰将棋情報にも対応
**例:**
開始日時:1999/07/15
手合割:平手
先手:先手の名前
後手:後手の名前
手数----指手---------消費時間--
   1 7六歩(77)   ( 0:16/00:00:16)
   2 3四歩(33)   ( 0:00/00:00:00)
   3 中断         ( 0:03/ 0:00:19)

KI2形式

KIF形式を簡略化したもので、移動元座標を省略し、1行に複数の指し手を記録できます。

特徴:

  • 移動元座標を省略
  • 1行に複数の指し手を記録可能
  • より簡潔で読みやすい
  • ファイルサイズが小さい

例: 開始日時:1999/07/15 手合割:平手 先手:先手の名前 後手:後手の名前

▲7六歩 △3四歩 ▲2六歩 △8四歩 ▲2五歩 △8五歩
▲7八金 △3二金 ▲2四歩 △同 歩 ▲同 飛 △2三歩打

CSA形式

コンピュータ将棋協会が定めた標準的な棋譜交換フォーマットです。

特徴:

  • プログラムによる解析を重視
  • 標準化された駒と位置の表記
  • バージョン管理により拡張可能
  • V3.0で評価値・読み筋に対応
**例:**
'CSA encoding=UTF-8
V3.0
N+先手
N-後手
$EVENT:第34回世界コンピュータ将棋選手権
$START_TIME:2024/05/05 15:05:40
PI
+
+2726FU
T0
-3334FU
T6
%CHUDAN

JKF形式

将棋の棋譜をJSON形式で表現するフォーマットです。

特徴:

  • JSON形式でプログラムでの扱いが容易
  • 構造化されたデータ
  • 分岐を完全にサポート
  • Webアプリケーションとの親和性が高い

例:

{
  "header": {
    "先手": "先手の名前",
    "後手": "後手の名前",
    "開始日時": "1999/07/15"
  },
  "initial": {
    "preset": "HIRATE"
  },
  "moves": [
    {},
    {
      "move": {
        "from": {"x": 7, "y": 7},
        "to": {"x": 7, "y": 6},
        "piece": "FU"
      }
    }
  ]
}

フォーマット間の変換

rsshogiを使用すると、フォーマット間の変換が簡単に行えます:

Python での例

import rsshogi as rs

# KIF を読み込み
kif_text = open("game.kif", "r", encoding="utf-8").read()
record = rs.record.Record.from_kif_str(kif_text)

# 各フォーマットに変換
csa_text = record.to_csa()
ki2_text = record.to_ki2()
jkf_text = record.to_jkf()

# ファイルに保存
with open("game.csa", "w", encoding="utf-8") as f:
    f.write(csa_text)

with open("game.ki2", "w", encoding="utf-8") as f:
    f.write(ki2_text)

with open("game.jkf", "w", encoding="utf-8") as f:
    f.write(jkf_text)

Rust での例

use rsshogi::records::formats::{kif, csa, ki2, jkf};
use std::fs;

// KIF を読み込み
let kif_text = fs::read_to_string("game.kif")?;
let record = kif::parse_kif_str(&kif_text)?;

// 各フォーマットに変換
let csa_text = csa::export_csa(&record)?;
let ki2_text = ki2::export_ki2(&record)?;
let jkf_text = jkf::export_jkf(&record)?;

// ファイルに保存
fs::write("game.csa", csa_text)?;
fs::write("game.ki2", ki2_text)?;
fs::write("game.jkf", jkf_text)?;

rsshogi の対応状況

完全対応

  • ✅ KIF のパース・出力
  • ✅ CSA のパース・出力
  • ✅ KI2 のパース・出力
  • ✅ JKF のパース・出力

部分対応

  • ⚠️ CSA V3.0 の新機能(評価値・読み筋)は部分対応

未対応

  • ❌ 評価値の出力(全フォーマット)

実装上の注意点

分岐の扱い

各フォーマットでの分岐の対応状況:

フォーマットパース出力備考
KIF変化:N手 形式
KI2変化:N手 形式
CSA⚠️仕様上の制限
JKFforks フィールド

文字コード

フォーマット推奨文字コード備考
KIFUTF-8 (.kifu) / Shift-JIS (.kif)拡張子で区別
KI2UTF-8 / Shift-JIS自動判定
CSAUTF-8 (V3.0) / Shift-JIS (V2.x)ファイル内で宣言
JKFUTF-8JSON標準

参考リンク

公式仕様

関連サイト

関連ドキュメント