KIF 形式
KIF(Kifu)形式は、柿木将棋や「Kifu for Windows」シリーズで採用されている、人間が読みやすい棋譜ファイル形式です。対局情報や指し手を日本語表記で記録し、コメントも自由に付加できます。
公式仕様
- 棋譜ファイル KIF 形式(柿木義一氏)
- 棋譜の表記方法(日本将棋連盟):公式な棋譜表記ルール
概要
KIF形式は以下の特徴を持ちます:
- テキストファイル形式で編集が容易
- 日本語表記により人間が読みやすい
- コメント機能が充実
- しおり機能で特定局面を記録
- 詰将棋情報にも対応
ファイル構造
KIF棋譜ファイルは以下の要素で構成されます:
- コメント行(主に
*で始まる) - 対局情報(手合割、対局者名など)
- 開始局面(駒落ち・詰将棋の場合)
- 指し手と消費時間
- 指し手のコメント(
*で始まる) - しおり(
&で始まる)
文字コードと改行コード
- 拡張子
.kif:Shift-JIS - 拡張子
.kifu:UTF-8 - 改行コード:使用OSの標準(Windowsなら CR+LF)
基本表記
コメント行
先頭が * で始まる行はコメントとして扱われます:
* ---- Kifu for Windows V3.53 棋譜ファイル ----
* このファイルは柿木将棋で作成されました
コメント行はファイルのどこに挿入されても構いません。
rsshogi の parser では、同一手に続く複数のコメント行を \n 区切りで 1 つの
指し手ノード annotation に保持します。初手前の連続コメントは開始局面コメントとして
Record.initial_comment / Record::initial_comment() に保持されます。
parser は実務互換のため '... 形式もコメントとして受理します。
備考:... はコメント行ではなくメタデータとして扱い、
RecordMetadata.comment に保持されます。
手合割
手合割:平手
対応する手合割:
- 平手
- 香落ち、右香落ち
- 角落ち
- 飛車落ち
- 飛香落ち
- 二枚落ち、三枚落ち、四枚落ち、五枚落ち、左五枚落ち
- 六枚落ち
- 左七枚落ち、右七枚落ち
- 八枚落ち、十枚落ち
- その他
省略時は平手と判断されます。
対局者名
先手:先手の対局者名
後手:後手の対局者名
下手:下手の対局者名
上手:上手の対局者名
対局情報
(キーワード): で始まる情報を追加できます:
開始日時:1999/07/15(木) 19:07:12
終了日時:1999/07/15(木) 19:07:17
棋戦:第68期順位戦A級
戦型:矢倉
表題:注目の一局
持ち時間:各6時間
秒読み:30秒
消費時間:123▲234△
場所:東京・将棋会館
掲載:将棋世界 2019年7月号
備考:備考欄
先手省略名:羽生
後手省略名:藤井
記録係:記録係の名前
標準対局情報
| キーワード | 説明 | 必須 |
|---|---|---|
開始日時 | 対局開始日時(対局日 も可) | - |
終了日時 | 対局終了日時 | - |
棋戦 | 棋戦名 | - |
戦型 | 戦型名 | - |
表題 | 棋譜の表題 | - |
持ち時間 | 持ち時間 | - |
秒読み | 秒読みの秒数 | - |
消費時間 | 消費時間の記録 | - |
場所 | 対局場所 | - |
掲載 | 掲載誌 | - |
備考 | 備考 | - |
先手省略名 | 局面図の印刷用 | - |
後手省略名 | 局面図の印刷用 | - |
記録係 | 記録係の名前 | - |
日付形式
開始日時・終了日時は 1999/07/15 形式で日付を記録する必要があります。
秒読み形式
秒読み:30秒
詰将棋情報
詰将棋の場合、以下の情報を記録できます:
作品番号:123
作品名:鳳凰
作者:作者名
発表誌:詰将棋パラダイス
発表年月:2019年7月
出典:詰将棋パラダイス 2019年7月号
手数:99手詰
完全性:完全作
分類:中編
受賞:看寿賞
備考:対局情報としても使われる
指し手の表記
基本形式
<手番><移動先座標><駒><装飾子><移動元座標>
手番
▲:先手(下手)△:後手(上手)
※現在のKIF形式では手番は省略されています。
移動先座標
<X座標><Y座標>:全角数字(例:2六)同または同:直前の指し手の移動先
X座標は全角アラビア数字 1~9、Y座標は全角漢数字 一~九 で表記します。
「同」の後には通常、全角空白が続きますが、無い場合もあります。
駒
駒名(全角):
| 駒 | 表記 | 成駒 | 表記 |
|---|---|---|---|
| 歩 | 歩 | と | と |
| 香 | 香 | 成香 | 成香 / 杏 |
| 桂 | 桂 | 成桂 | 成桂 / 圭 |
| 銀 | 銀 | 成銀 | 成銀 / 全 |
| 金 | 金 | - | - |
| 角 | 角 | 馬 | 馬 |
| 飛 | 飛 | 龍 | 龍 / 竜 |
| 玉 | 玉 | - | - |
※成銀を「全」、成桂を「圭」、成香を「杏」で表す場合もあります(詰将棋パラダイスでも使用)。
装飾子
打:駒を打つ場合(必須)成:駒が成る場合不成:成らない場合(表記しない)
移動元座標
(11) ~ (99) のように、括弧で囲んだ半角2桁の数字で表記します。
指し手の例
1 7六歩(77)
2 3四歩(33)
3 2六歩(27)
4 8四歩(83)
5 2五歩(26)
6 8五歩(84)
7 7八金(69)
8 3二金(41)
9 2四歩(25)
10 同 歩(23)
11 同 飛(28)
12 2三歩打
13 2八飛(24)
14 8六歩(85)
15 同 歩(87)
16 同 飛(82)
消費時間
指し手と同じ行に、消費時間を記述します:
1 7六歩(77) ( 0:16/00:00:16)
2 3四歩(33) ( 0:00/00:00:00)
形式:( M:SS/HH:MM:SS)
- 最初の数字:その1手の消費時間(分:秒)
- 次の数字:累積の消費時間(時:分:秒)
消費時間は省略可能です。
終局・中断の表記
通常の指し手以外に、以下の表記があります:
| 表記 | 意味 |
|---|---|
中断 | 対局中断 |
投了 | 手番側が投了(消費時間を記録) |
持将棋 | 持将棋 |
最大手数 | 最大手数到達による引き分け |
千日手 | 千日手(消費時間は0) |
切れ負け | 時間切れで負け |
反則勝ち | 直前の手が反則 |
反則負け | 手番側の反則負け |
入玉勝ち | 入玉宣言で勝ち |
不戦勝 | 先手(上手)の不戦勝 |
不戦敗 | 先手(上手)の不戦敗 |
詰み | 詰み(主に詰将棋) |
不詰 | 不詰(主に詰将棋) |
入玉宣言について
- 入玉宣言で持将棋になった場合は
持将棋とする - 入玉宣言で条件を満たさず負けた場合は
反則負けとする
まで...手で... の要約行について、rsshogi では
までN手で最大手数 と までN手で持将棋 をそれぞれ
DRAW_BY_MAX_PLIES / DRAW_BY_IMPASSE として解釈します。
終局行や要約行が欠けた棋譜も受理でき、その場合は main_terminal == None /
result == GameResult::Invalid として保持します。
rsshogi の実務互換メモ
- exporter は ShogiHome/tsshogi 系の読み手と
shogi-validatorを意識した整形を行います。 - 変化手順と終局要約 (
まで...) が両方ある場合は、変化:N手ブロックを先に、 終局要約を最後に出力します。これは export → parse の round-trip でmain_terminalを保持しやすくするためです。 - 指し手行末尾の
(<elapsed>/<total>)形式の消費時間も parser が指し手ノード annotation として取り込みます。 - 終局特殊手がない
Recordをto_kif()すると、終局行とまで...要約は出力されません。 - 指し手表記では
成香/成桂/成銀を使い、盤面図では杏/圭/全を使い分けます。 EngineInfo.evalを持つ指し手は**評価値=...行として出力されます。
開始局面
詰将棋や任意の局面から始まる棋譜は、指し手の前に開始局面が付きます。
初期配置から始まる棋譜(駒落ちを含む)は、開始局面を省略できます。
開始局面の例
後手の持駒:飛 角 金二 銀二 桂二 香二 歩十五
9 8 7 6 5 4 3 2 1
+---------------------------+
|v香v桂 ・ ・ ・ ・ ・v桂v香|一
| ・ ・ ・ ・ ・ ・ ・v玉 ・|二
| ・ ・ ・ ・ ・ ・v金v銀v歩|三
|v歩v歩v歩v歩v歩v歩 ・v歩 ・|四
| ・ ・ ・ ・ ・ ・v歩 ・v歩|五
| ・ ・ 歩 ・ ・ ・ ・ ・ ・|六
| 歩 歩 ・ 歩 歩 歩 歩 歩 歩|七
| ・ ・ ・ ・ ・ ・ ・ 飛 ・|八
| 香 桂 ・ ・ 玉 金 銀 桂 香|九
+---------------------------+
先手の持駒:銀 歩
手数----指手---------消費時間--
1 2四歩(25)
指し手のコメント
各指し手の後に * で始まる行を追加すると、その指し手に対するコメントになります:
1 7六歩(77)
*矢倉を目指す
2 3四歩(33)
*相矢倉の構え
初手の前のコメントは、開始局面のコメントとなります。
複数行のコメントも可能です:
3 2六歩(27)
*飛車先の歩を突く
*攻めの形を作る
しおり
& で始まる行は、その前の手を指した局面に対するしおりを示します:
10 7七銀(78)
&矢倉完成
しおり名は & の後に記述します。
変化手順(分岐)
KIF形式では、変化手順を 変化:N手 の形式で記録できます:
15 3七銀(48) 16 4四角(22)
変化:15手
15 4八銀(59)
*別の構想
16 3三桂(21)
変化手順は 本手順の N 手目からの分岐として解釈されます。
ファイル例
# ---- Kifu for Windows V3.53 棋譜ファイル ----
開始日時:1999/07/15(木) 19:07:12
終了日時:1999/07/15(木) 19:07:17
手合割:平手
先手:先手の対局者名
後手:後手の対局者名
手数----指手---------消費時間--
1 7六歩(77) ( 0:16/00:00:16)
2 3四歩(33) ( 0:00/00:00:00)
3 中断 ( 0:03/ 0:00:19)
rsshogi での対応状況
サポート済み
- ✅ KIF形式のパース
- ✅ 基本的な棋譜情報の読み込み
- ✅ 平手・駒落ち局面の解析
- ✅ 指し手と消費時間の解析
- ✅ コメントの解析
- ✅ 変化手順(分岐)の解析
- ✅ 要約行(
まで...手で最大手数/まで...手で持将棋)の終局判定 - ✅ KIF形式への出力
- ✅ 分岐を含む出力
制限事項
- ⚠️ しおり機能は未対応
- ⚠️ 評価値の出力は未対応
KI2形式との関係
KI2形式は、KIF形式を簡略化したもので、以下の違いがあります:
- 移動元座標を省略(棋譜が短くなる)
- 1行に複数の指し手を記録できる
- 人間が読む際はさらに読みやすい
詳細は KI2形式 を参照してください。
関連リンク
- 棋譜ファイル KIF 形式(公式)
- Kifu for Windows
- 棋譜の表記方法(日本将棋連盟):公式な棋譜表記ルール