KI2 形式
KI2形式は、KIF形式をさらに簡略化した棋譜記述形式です。移動元座標を省略し、1行に複数の指し手を記録できるため、人間が読む際に読みやすくなっています。
公式仕様
- Kifu for Windows の紹介(柿木義一氏)
- 棋譜の表記方法(日本将棋連盟):公式な棋譜表記ルール
概要
KI2形式は以下の特徴を持ちます:
- 移動元座標を省略し、より簡潔な表記
- 1行に複数の指し手を記録可能
- 人間が読みやすい自然な日本語表記
- 棋譜入力が容易
- KIF形式と同様の対局情報を保持
KIF形式との違い
主な違い
| 項目 | KIF形式 | KI2形式 |
|---|---|---|
| 移動元座標 | あり 7六歩(77) | なし 7六歩 |
| 1行の指し手数 | 1手 | 複数可能 |
| ファイルサイズ | やや大きい | 小さい |
| 可読性 | 良い | より良い |
| 解析の複雑さ | 単純 | やや複雑(局面を進める必要) |
指し手の表記比較
**KIF形式:**
1 7六歩(77)
2 3四歩(33)
3 2六歩(27)
4 8四歩(83)
5 2五歩(26)
6 8五歩(84)
**KI2形式:**
▲7六歩 △3四歩 ▲2六歩 △8四歩 ▲2五歩 △8五歩
基本表記
文字コードと改行コード
KIF形式と同様:
- 拡張子
.ki2:Shift-JIS または UTF-8 - 改行コード:使用OSの標準
手番記号
▲:先手(下手)の手△:後手(上手)の手
KIF形式と異なり、KI2形式では手番記号が必須です。
指し手の表記
形式:<手番><移動先座標><駒><装飾子>
▲7六歩 # 先手 7六歩
△3四歩 # 後手 3四歩
▲2二角成 # 先手 2二角成
△同 銀 # 後手 同銀
▲5五角打 # 先手 5五角打
移動先座標
<X座標><Y座標>:全角数字(例:7六)同または同:直前の指し手の移動先
装飾子
打:駒を打つ場合成:駒が成る場合不成:成らない場合(通常は省略)右/左/直/寄/引/上/行:同種の駒を区別
駒の区別
同じ種類の駒が複数ある場合、以下の記号で区別します:
▲5八金右 # 右側の金
▲4八金左 # 左側の金
▲6七金寄 # 寄る金
▲6八金引 # 引く金
▲6九金上 # 上がる金
▲7七銀上 # 銀が上に移動
駒の相対位置と動作
日本将棋連盟の公式な棋譜表記方法に基づき、以下のように区別します:
駒の相対位置:
右:指す側から見て右側の駒左:指す側から見て左側の駒直:金銀が横に並んでいる場合のみ、中央の駒(例外的な表記)
駒の動作:
上:1段以上、上に動く寄:1マス以上、横に動く引:1段以上、下に動く
複数の駒がある場合の優先順位
- 動作が異なる場合:動作(
上/寄/引)を優先- 例:
82金上、82金寄
- 例:
- 動作が同じ場合:相対位置(
左/右)で区別(動作は省略)- 例:
81金左、81金右
- 例:
- 3枚以上の場合:動作と相対位置を組み合わせ
- 例:
88と左上、28銀左引
- 例:
竜・馬の特殊ルール
竜や馬が2枚以上ある場合、動作を優先しますが、直は使わずに 左/右 で記入します:
▲82竜引 # 引く竜が1枚の場合
▲82竜上 # 上がる竜が1枚の場合
▲88竜左 # 左側の竜
▲88竜右 # 右側の竜
詳細は日本将棋連盟の公式表記方法を参照してください。
1行複数手の記述
KI2形式の最大の特徴は、1行に複数の指し手を記述できることです:
▲7六歩 △3四歩 ▲2六歩 △8四歩 ▲2五歩 △8五歩
▲7八金 △3二金 ▲2四歩 △同 歩 ▲同 飛 △2三歩打
▲2八飛 △8六歩 ▲同 歩 △同 飛
半角空白または全角空白で区切ります。
ファイル構造
KIF形式とほぼ同じ構造を持ちます:
- コメント行(
#で始まる) - 対局情報(手合割、対局者名など)
- 開始局面(必要な場合)
- 指し手
- 指し手のコメント(
*で始まる)
対局情報
KIF形式と同じ形式で記述します:
開始日時:1999/07/15(木) 19:07:12
終了日時:1999/07/15(木) 19:07:17
手合割:平手
先手:先手の対局者名
後手:後手の対局者名
棋戦:第68期順位戦A級
詳細は KIF形式のドキュメント を参照してください。
終局・中断の表記
KIF形式と同様の表記を使用します:
まで123手で先手の勝ち
まで56手で後手の勝ち
まで77手で中断
まで88手で千日手
終局表記の種類
| 表記 | 意味 |
|---|---|
先手の勝ち / 後手の勝ち | 投了による勝敗 |
中断 | 対局中断 |
千日手 | 千日手 |
持将棋 | 持将棋 |
最大手数 | 最大手数到達による引き分け |
切れ負け | 時間切れ |
反則勝ち / 反則負け | 反則による勝敗 |
入玉勝ち | 入玉宣言勝ち |
詰み | 詰み(詰将棋) |
不詰 | 不詰(詰将棋) |
コメント
指し手のコメントは * で始まる行で記述します:
▲7六歩 △3四歩
*相矢倉の出だし
▲2六歩 △8四歩
*飛車先を受ける
変化手順(分岐)
KIF形式と同様に、変化:N手 の形式で変化手順を記録できます:
▲7六歩 △3四歩 ▲2六歩 △8四歩 ▲2五歩 △8五歩
変化:5手
▲7八金 △8五歩
*別の構想
rsshogi の実務互換メモ
- exporter は KIF 系ツールとの相互運用を重視し、ShogiHome/tsshogi 系の読み手と
shogi-validatorに寄せた順序・整形を採用します。 - 変化手順と終局要約 (
まで...) が両方ある場合は、変化ブロックを先に、 終局要約を最後に出力します。 - 終局行や要約行が欠けた棋譜も受理でき、その場合は
main_terminal == None/result == GameResult::Invalidとして保持します。 - 終局特殊手がない
Recordをto_ki2()すると、終局要約は出力されません。 EngineInfo.evalを持つ指し手は**評価値=...行として出力されます。
ファイル例
–– Kifu for Windows V3.53 棋譜ファイル ––
開始日時:1999/07/15(木) 19:07:12 終了日時:1999/07/15(木) 19:07:17 手合割:平手 先手:先手の対局者名 後手:後手の対局者名 棋戦:第68期順位戦A級 戦型:矢倉
▲7六歩 △3四歩 ▲2六歩 △8四歩 ▲2五歩 △8五歩 ▲7八金 △3二金 ▲2四歩 △同 歩 ▲同 飛 △2三歩打 ▲2八飛 △8六歩 ▲同 歩 △同 飛 ▲3四飛 △8八角成 ▲同 銀 △2八角打 ▲7七角 △8二飛 ▲3三角成 △同 桂 ▲3一飛成 △8六飛 ▲8七歩 △8一飛 ▲4一龍 △7一飛 *先手優勢
まで35手で中断
KI2形式の解析
KI2形式の解析には、局面を進めながら指し手を特定する必要があります:
解析の流れ
- 初期局面を設定(手合割に基づく)
- 指し手を読み取る(
▲7六歩など) - 合法手を生成して、表記に一致する手を探す
- 局面を進める
- 次の手に進む(繰り返し)
曖昧性の解決
同種の駒が複数ある場合、装飾子(右/左/直など)で判別します:
▲5八金右 # 右側の金が5八に移動
▲4八金左 # 左側の金が4八に移動
「同」の処理
同 は直前の手の移動先を参照します:
▲2四歩 # 2四に歩が移動
△同 歩 # 同じく2四に歩が移動(取る)
▲同 飛 # 同じく2四に飛が移動(取る)
rsshogi での対応状況
サポート済み
- ✅ KI2形式のパース(Rust / Python)
- ✅ KI2形式への出力(Rust / Python)
- ✅ 要約行(
まで...手で最大手数/まで...手で持将棋)の終局判定
import rsshogi as rs
# KI2 を読み込む
record = rs.record.Record.from_ki2_str(ki2_text)
# KI2 に変換して出力
ki2_text = record.to_ki2()
print(ki2_text)
KIF形式への変換
KI2形式からKIF形式への変換は、局面を進めながら移動元座標を補完することで実現できます。
rsshogi では、KI2をパースして Record にした後、KIF形式で出力することで変換できます:
use rsshogi::records::formats::{ki2, kif};
let ki2_text = "▲7六歩 △3四歩 ▲2六歩";
let record = ki2::parse_ki2_str(ki2_text)?;
let kif_text = kif::export_kif(&record)?;
利点と制約
利点
- 人間が読みやすい:自然な日本語表記
- ファイルサイズが小さい:座標情報の省略
- 入力が容易:簡潔な記述
制約
- 解析が複雑:局面を進める必要がある
- 曖昧性の解決が必要:同種の駒を区別
- プログラムでの扱いがやや難しい