●SGFファイル形式


  1. SGFとは

     SGFとは「Smart Game Format」の略語です。
     SGFファイル形式とはインターネットで標準となっている棋譜のファイル形式です。

     もともとは「Smart Go Board」というシェアウェアプログラムで使われたファイル形式ですが、現在は多くのプログラムで採用されています。
     SGFはいろいろな種類のデータを蓄えることができます。
     手順はもちろんのこと、盤上に記号を振ったり、コメントをいれたり、対局情報(いつどこでだれが対局し、置き石はいくつで結果はどうなったか等)等も入れることができます。




  2. SGFファイルの記述例

    具体的にSGFのサンプルとその読み方をお見せしましょう。

    SGFのサンプル
    サンプルファイル 読み方
    (;FF[4]GM[1]SZ[19]
    AP[SGFC:1.13b]
    PB[troy]BR[12k*]
    PW[john]WR[11k*]
    KM[0.5]RE[W+12.5]
    DT[1998-06-15]
    TM[600]
    ;B[pd];W[dp];B[pq];W[dd];B[qk];W[jd]
    ;B[fq];W[dj];B[jp];W[jj]
    ;B[cn]LB[dn:A][po:B]
    C[dada: other ideas are 'A' (d6) or 'B' (q5)]
    ;W[eo](;B[dl]C[dada: hm - looks troublesome.
    Usually B plays the 3,3 invasion - see variation]
    ;W[qo];B[qp]
    ...
    ;W[sr];B[sk];W[sg];B[pa];W[gc];B[pi]
    ;W[ph];B[de];W[ed];B[kn]
    ;W[dh];B[eh];W[se];B[sd];W[af];B[ie]
    ;W[id];B[hf];W[hd];B[if]
    ;W[fp];B[gq];W[qj];B[sj];W[rh];B[sn]
    ;W[so];B[sm];W[ep];B[mn])
    ...
    (;B[dq]N[wrong direction];W[qo];B[qp])
    )
    枝開始ファイル形式[v4]ゲーム種別[囲碁]路数[19]
    プログラム[SGFCv1.13b]
    対局者白[troy];棋力[12級]
    対局者黒[jhon];棋力[11級]
    コミ[半目];結果[白12.5目勝ち]
    対局日[1998-06-15]
    持ち時間[600秒]
    ;黒[16,4];白[4,16];黒[16,17];白[4,4];黒[7,11];白[10,4]
    ;黒[6,17];白(4,10];黒[10,16];白[10,10)
    ;黒[3,14];ラベル[4,14:A][16,15:B]
    ;注釈[other ideas are 'A' (d6) or 'B' (q5)]
    ;白[5,15]枝開始;黒[4,12]注釈[dada: hm - looks troublesome.
    Usually B plays the 3,3 invasion - see variation]
    ;白[16,15];黒[17,16]
    ...
    ;白[19,18];黒[19,11];白[19,7];黒[16,1];白[7,3];黒[16,9]
    ;白[16,8];黒(4,5];白[5,4];黒[11,14];
    ;白[4,8];黒[5,8];白[19,5];黒[19,4];白[1,6];黒[9,5]
    ;白[9,4];黒[8,6];白[8,4)黒[9,6]
    ;白[6,16];黒[7,17];白[17,10];黒[19,10];白[18,8];黒[19,14]
    ;白[19,15];黒[19,13];白[5,16];黒[13,14]枝終了
    ...
    枝開始;黒[4,17];名前[悪い方向];白[17,15];黒[17,16]枝終了
    枝終了


     SGFはテキスト形式で木構造になっています。
     木構造とはひとつのデータから始まって、そこからメインパス(実際に打った手順)と変化のパス(変化手順)を辿ることができる構造です。変化の変化も辿れます。
     SGFを上手に作るには、その内部構造についての知識を有る程度もっておく必要が有ります。




  3. 一般概念

     SGFは「ノード」という要素の木構造で構成されます。「ノード」が一つ以上集まって枝になります。枝にはひとつの親と一つ以上の子があって、このなかにゲームの手順や変化が蓄えられます。

     ●ユーザはノード単位に参照できます。
     ユーザはノード単位に局面を進めたり戻したりできます。
     ●ノードはプロパティの集合体です。
     プロパティはただ一つの情報を表現します。例えばB[ ]は黒の着手を表現するプロパティです。C[ ]はコメントを表現するプロパティです。

     ●編集情報には2レベルあって、ひとつはプロパティであり、もう一つはそれをまとめたノードです。
     一つの着手情報はノードの一部となります。ノードを部品として含むことはできません。一手は一つのプロパティのなかに表現され、ノードは複数のプロパティで構成されます。

     あなたがSGFアプリケーションを使って、ある局面を表示しているとします。
     ここで次の局面に進めたら、次の着手が盤上に示され、コメントがコメントウィンドウに、また盤上にいろいろな記号を見たとしますと、これらはおのおの別の種類のプロパティによって表示されたものですが、一つのノードに含まれているのです。これがノードという括りです。

     ●石を盤上に表示するために、着手,配石または局面の2つの方法を提供しています。

     着手と配石を明確に区別して、それぞれ「着手プロパティ」と「セットアッププロパティ」という2つの群に分けています。
     それゆえ、着手プロパティとセットアッププロパティを同じノードにいれてはならないとしました。





  4. 盤上に記号を振る

     SGFは広範な記号を提供しています。大部分は雑誌や単行本につかわれているもので、それがSGFでも使えます。とはいっても、アプリケーションによっては使えない記号もあります。
     以下に記号のいろいろをまとめました。

    盤上の記号の一覧
    記号 プロパティ 概要
    石の記号 MA[ ] ×印
    TR[ ] △印
    M[ ] MA[ ]やTR[ ]にとって代わられましたが今なお古いAPはこれを使っていて、MA[ ]やTR[ ]を扱えない。
    CR[ ] ○印
    SQ[ ] □印
    LB[ ] 「A」「B」などの文字
    MS-DOS MGTは複数の時を扱えますが、たいがいは2,3文字止まり。
    L[ ] LB[ ]にとって代わられましたが今なおMS-DOS MGTなど古いAPはこれを使っていて、LB[ ]を扱えません。
    領域の記号 SL[ ] ■印
    DD[ ] 網掛け(FF[4]から)
    盤の記号 AR[ ] 矢印(FF[4]から)
    LN[ ] 直線(FF[4]から)





  5. コメントと評価

     コメントを着手や配石に付けるためにSGFではテキストをノードに貯えることができます。
     コメントは通常コメント専用のウィンドウに表示します。テキストは編集したりするのは簡単ですが、いくつかの不便さもあります。
     というわけで、SGFは「評価プロパティ」と呼ぶセットを提供します。
     このプロパティは別々のコードでファイルされます。読んで判るテキスト形式ではないのですが、トークンのように特別に意味をもたせています。それでSGFのアプリケーションはファイルを読んでそれらの意味を知って、以下のようにユーザに伝達できるのです。
    • マルチリンガルサポート-アプリケーションは指定した言語でメッセージを表示できます。
    • 検索などデータベースの機能対応が可能になります。
    • コンピュータ棋士が布石や定石のライブラリにある評価情報を使って最適のまたは好ましい次の手を決めることができるようになります。

     評価プロパティには3つのタイプがあります。一般/着手/配石の3つです。以下のテーブルを参照してください。

    評価プロパティの一覧
    評価プロパティタイプ強調あり?意味
    Good for BlackGB一般ありなかなか良い黒の手
    Good for WhiteGW一般ありなかなか良い白の手
    Even positionDM一般ありいいかげんの分かれ
    Unclear positionUC一般ありはっきりしない局面です
    Hot spotH0一般あり急ぐところ
    TesujiTE着手あり手筋
    Bad moveBM着手あり悪手
    Doubtful moveD0着手なし怪しい手
    Interesting moveIT着手なし妙着
    Black to playPL配石なし黒の手番
    White to playPL配石なし白の手番


     残念ながらこのプロパティはたくさんのアプリケーションには行き渡っていません。




  6. ゲームインフォメーション

     SGFは対局者名や棋力を初めとする蓄積用の広範囲のプロパティを提供していまして、それをゲームインフォメーションと呼んでいます。
     標準のルールに従ったデータ入力形式(これを固定形式と呼びましょう)にすれば、簡単に構文解析できますね。
     対局集から簡単に検索できるようにもなるし、スクリーンに表示する構成を自由に操れるようになるからです。

     ※推奨形式は必ずしもその形式でなければならないというものではありませんが、できる限りそれに従うことをお奨めします。
     固定形式は必ずその形式にしてください。

    ゲームインフォメーションの一覧
    表現内容 プロパティ 注釈
    対局者の名前
    Black/white name
    PB[ ]
    PW[ ]
    白と黒の対局者の名前。
    棋力
    Black/white rank
    BR[ ]
    WR[ ]
    対局者の棋力:推奨形式
  7. 級位者→"10k" or "10 kyu"
  8. 有段者→"3d" or "3 dan"
  9. チーム名
    Black/white team
    BT[ ]
    WT[ ]
    団体戦などでのチーム名を指定します。
    結果
    Result
    RE[ ] 結果:固定形式
  10. 持碁の時→"0" (zero)
  11. 黒勝ちの時→"B+score"
  12. 白勝ちの時→"W+score"

  13. 例えば "B+2.5", "W+64" or "B+0.5"
    中押し勝ちの時→"B+R"/"B+Resign" and "W+R"/"W+Resign"
    コミ
    Komi
    KO[ ] コミ:固定形式
    例えば "5.5", "0", "0.5" or "-10" 等々。
    置き石
    Handicap
    HA[ ] 置き石数:固定形式
    0より大きい整数を使います。例えば  "1", "5" or "9"
    持ち時間
    Time
    TM[ ] 持ち時間:固定形式
    時間は秒表示します。たとえば "4600", "300"
    手合い日
    Date
    DT[ ] 手合い日:固定形式
    ISO標準形式("YYYY-MM-DD")
    例: 1997年3月5日ならば→1997-03-05
    大会名
    Event
    EV[ ] 大会名 (例:トーナメント名)
    何回戦
    Round
    RO[ ] トーナメントの何回戦かを表示する。
    対局場
    Place
    PC[ ] 対局場の名前(例: 市、県、国) 手合いをした地名
    適用ルール
    Rules
    RU[ ] 適用ルール
    例:日本, 中国, AGA, GOE, etc.
    手合の名前
    Game name
    GN[ ] 手合の名前
    布石情報
    Opening
    ON[ ] 布石形式を表現する。
    例:三連星
    手合いコメント
    Game comment
    GC[ ] General comment about the game
    引用元
    Source
    SO[ ] 引用元を書きましょう (e.g. book, journal, etc.)
    記録者
    User
    US[ ] 棋譜を作成したソフトまたは記録者
    評者名
    Annotation
    AN[ ] 評者の名前
    著作権
    Copyright
    CP[ ] 著作権に関する情報




  14. SGFのバージョン

    SGFはAnders Kierulfさんが1987年に開発し徐々に普及してきました。これまで大きな改訂が2度ありました。

    • FF[1]
       Anders Kierulfさんによるオリジナル仕様です。
       仕様面でも後続バージョンのコアとして生きています。
       現在でも一部のアプリケーションはこの形式を採用しているものがあり、例えばMGT(MS-DOS version)はWindowsがはやる前は大変に人気がありました。

    • FF[3]
       Martin Mlerさんが1993年に改訂し、SGF標準として仕様を整理した最初のものになりました。
       このバージョンから囲碁のスタンダードとしてインターネット上で受け入れられました。
       たくさんのプロパティ、たとえばゲームインフォメーションや記号類が追加されました。

    • FF[4]
       Arno Hollosiさんが1997年に改訂したもので現在に至っています。
       これは多くのSGFプログラマの協力があります。
       FF[4]はFF[3]の考え方を受け継ぎ、曖昧さの解消をはかるとともに新しい機能(矢印や線分、縦横任意の路数など)を組み込みました。
       しかしながらできてから日が浅く、まだ広く採用されていません。これからも変化していくでしょう。