インポート、出所、共有

インポート:何が書き込まれ、何が決して書き込まれないか

マッチ、ポジション、あるいは別のデータベースをインポートすると、足りないものが追加されます。すでにあるものが置き換えられることはありません。

  • ポジションが重複することはありません。それを見分けるのは、チェッカー、キューブ、ダイス、スコアからなるその同一性であって、由来するファイルではありません。二つのマッチで出会った同じポジションは、1 行のままです。

  • データベースのインポートは、エクスポートが書き出すすべてを読み戻します。解析とコメントを含むポジションのほか、マッチ(ゲームと手を含む)、運営と対戦会を伴うトーナメント、文字起こしの下書き、エイリアス、コレクション、レッスン、Anki デッキも対象です(データベースの統合 を参照)。何も上書きされません。すでに存在するマッチは再コピーされず、同名のトーナメントはイベントの日付を変えずにマッチを受け取り(受け取る新しいマッチの分、最終更新日は進みます)、すでに運営を持つトーナメントはそれを保ちつつインポートされた対戦会の外に置かれ、すでに別のトーナメントや表の別の位置に振り分けられているマッチはそこに残り、データベースがすでに決めていたことはその決定のまま残ります。インポートが作成するトーナメント、運営、対戦会、文字起こしの下書き、エイリアスは元の日付を保ちます。作成されるコレクション、レッスン、Anki デッキは保ちません。

  • エンジンごとに 1 つの分析。eXtreme Gammon、GNUbg、BGBlitz、および内蔵の評価エンジンは同じポジションの上で共存し、分析パネルはそれぞれの出所を示します。一方をインポートしても他方が消えることはありません。

  • インポートされた解析は決して再計算されません。 blunderDB はそれをそのまま保存します。レベルのラベル(「3-ply」「XG Roller++」「Book」)、エクイティ、エラー、確率、そしてロールの運も含まれます。ルールは「評価は穴を埋めるだけ」です。インポート後の自動解析は、解析を一つも持たないポジションだけを対象とし、古い gammonNet 解析の再解析は、インポートされた解析を持つポジションにはいっさい手を触れません(設定 を参照)。

  • 既に保存されているマッチを再インポートしても、より深い解析だけが加わります。マッチは解析ではなくプレイ(プレイヤー、長さ、ダイス、手、キューブ)で識別されます。マッチ、ゲーム、手は一切書き換えられません。元のソフトウェアで付けたマークは追加され、保存済みより深い解析はポジションごとにそれを置き換えます — 同じマッチの Roller++ 版は、インポートの順序にかかわらず 3-ply 版を置き換えます。深さが同じか浅い場合は、保存済みの解析が残ります。したがって同じファイルを再インポートしても何も書き換えられません。インポートレポートは、何ももたらさなかった重複と解析を深めた重複を区別します。コマンドラインでは --skip-duplicates が重複をスキップし、マーク以外は何も取り込みません。途中で切れて後に完結したマッチ(ゲーム数が多い)は同じマッチではなく、2 つ目のマッチとしてインポートされます。

  • 読めない解析があってもマッチのインポートは止まりません。解析に有限の数ではない値(一部の XG ファイルに含まれる NaN や無限大)を含む判断は、その解析なしでインポートされます。マッチの残りは通常どおり取り込まれ、インポートレポートが該当する判断の数を示します。

  • すでに別の名前で存在するマッチは、報告されるだけで統合されません。2つのマッチのフィンガープリントにはプレイヤー名が含まれるため、「Martin A.」と「Alice Martin」は2つのマッチになります。インポートはダイス(長さ、初期スコア、各ゲームのダイス)も比較し、ファイルの行の下とレポートに、同じダイスを持つ、別の名前ですでにデータベースにあるマッチを報告します。blunderdb repair --duplicatesは、既存のデータベースにあるこれらのペアを、途中で切れたマッチとその長いバージョンとともに一覧表示します。

  • 別の表記で知られている名前は、正規の名前で記録されます。別名は、「Martin A.」が「Alice Martin」の別の表記である(またはあるイベント名が別のイベント名の別の表記である)ことを示します。インポート時、プレイヤーとイベントの名前は正規の名前に置き換えられ、マッチは正規のイベントのトーナメントに入ります。マッチのフィンガープリントはファイルの名前を保つため、別名が存在する前にインポートされたファイルも常に認識されます。ダイスがデータベース内のマッチと同じで、名前が既知の別名だけで異なるマッチは、二つ目のマッチではありません。その解析は、保存済みのマッチを補強します。

別名は設定のコーパスタブで管理します。プレイヤーまたはイベントを選び、別名と正規名を入力するか、一覧から別名を削除します。提案は、大文字小文字、アクセント、句読点、語順だけが異なる名前を一覧にします。適用をクリックするまで何も適用されません。同じタブには、チェックボックスインポート時に重複をスキップ(セッション中の --skip-duplicates に相当)と、既存のデータベースの重複の可能性の検索(blunderdb repair --duplicates と同じもの)があります。各ペアはマッチ番号で示され、何も統合されません。ダイスが同一のペアの下で、これらの別名を作成は、2つのマッチに同じプレイヤーを名指しさせるプレイヤー別名を1クリックで登録し、より新しいマッチの表記が別名になります。両方に共通の名前が1つある場合は提案が1つだけ、そうでなければ2つ(席ごと、次に交差)で、誰が誰かを示す方を選びます。コマンドラインでは blunderdb players alias と blunderdb events alias を使います。

  • フォルダーは並列でインポートされます。 ファイルは複数のコアで同時に読み込まれ、常にフォルダーの順序でグループごとに書き込まれます。マッチ番号はマシンに依存しません。同じフォルダーですでに読み込んだファイルとバイト単位で同一のファイルは再読み込みされず、重複として数えられます。キャンセルすると処理中のグループでインポートが止まり、すでに書き込まれた内容は残ります。

  • 進捗は 1 秒あたりのポジション数で表されます。 インポートウィンドウには、読み込んだ割合、処理速度、推定残り時間、現在の件数(インポート済み、重複、エラー)が表示されます。最小化するとステータスバーに収まり、そこのチップから再び開けます。作業中もインポートは続き、終了時にはウィンドウがレポートとともに自動的に戻ります。最初の 100 件のエラーが一覧表示され、それ以降は件数のみ表示されます。すべてのエラーはアプリケーションのログに記録されます。コマンドラインでは、blunderdb import --type batchが同じ進捗を標準エラー出力に表示し、--format jsonは最終オブジェクト(progress)でそれを返します。

  • インポートの各ファイルはジャーナルに記録され、中断されたインポートは再開できます。 各ファイルについて、バッチのジャーナルはパス、サイズ、更新日時、SHA-256 フィンガープリント、結果を保持します。結果は、新規マッチ(その番号付き)、重複(それを含むマッチ付き)、補強されたマッチ、またはエラー(メッセージ付き)のいずれかです。キャンセルまたは中断されたインポートは、判定済みの内容をやり直さずに続行されます。パス・サイズ・日付が同じファイルは読み込まずにスキップされ、内容が同じファイルは読み込まれますが解析されません。エラーになったファイルは再試行されます。アプリケーションでは、インポート終了ウィンドウがジャーナルを一覧表示し(1 行に 1 ファイル、結果とエラーのメッセージ付き。再試行されたファイルは最後の結果を表示)、マッチが得られた行はそれを開きます。キャンセルされたインポートでは、ウィンドウが開いたまま残り、再開ボタンが表示されます。コマンドラインでは、 blunderdb import --type batch --dir <フォルダ> --resume <バッチ> が、インポート開始時に番号が表示されたバッチを再開し、 --format json は最終オブジェクトにジャーナル(journal)を返します。サーバーは imports.batch のリクエストで resume を受け付け、 imports.files でジャーナルを返します。ジャーナルはインポートのデータです。データベースを開いたり読んだりしても、そこには何も書き込まれません。

  • アプリケーションの停止で途切れたインポートは、ウィンドウから再開できます。 :resume コマンドは完了していないインポートを一覧します。続けるものを選び、コマンドラインの --dir と同様に、フォルダまたはファイルをもう一度指定します。バッチのジャーナルが、再読み込みしないものを決めます。

  • 大きなフォルダーは一括モードでインポートされます。 200 ファイル以上の場合、blunderDB はより大きなキャッシュと少ないチェックポイントで書き込みます。データベースにまだポジションがひとつもない場合はさらに進め、検索インデックスは最後にのみ再構築され、書き込みはディスクに同期されなくなります。このようなインポート中の停電はデータベースを損傷することがあり、その場合はデータベースを作り直してインポートをやり直す必要があります。一方、プログラムの異常終了で残るのはインデックスの欠落だけで、次に開いたときに再構築されます(ログに記録されます)。

  • blunderDB が決して書き込まないもの:再計算されたラック(ソースファイルから読み取られるか、不明のまま)と、自身で実行していないロールアウト。.xg ファイルに含まれるロールアウトのデータは開かれません。blunderDB 自身が生成するロールアウト(ロールアウト)だけが、分析の隣に保存されます。

メタデータパネル

Metadata パネル(CTRL-M)は、現在のデータベースの一般情報を表示します:ユーザー、作成日(作成)、スキーマの バージョン、説明。ユーザー、日付、説明はその場で編集でき、欄を離れると保存されます。バージョンは読み取り専用です。コマンド meta からも開けます。

また、存在する場合に限りデータベースの出所も表示します(データベースの配布:出所とパスワードを参照)。通常のデータベースではこの区画は表示されません。

データベースの配布:出所とパスワード

ポジションのデータベースを配る指導者には、互いに独立した二つの仕組みがあります。どちらも任意で、エクスポート時に選びます。ファイルに出所を記載すること、そしてパスワードで保護することです。

注釈

どちらもファイルのその後を追跡しません。blunderDB はデータベースを受け取った側では何も記録しません。記載のあるデータベースを開く操作は、ほかのどのデータベースを開く場合とまったく同じで、誰がいつ開いたのか、内容がどこから来たのかは、どこにも残りません。

データベースに出所を記載する

エクスポートウィンドウは一画面に収まります。ヘッダー帯(エクスポートするポジション数、キャンセル、エクスポート…)と、その下にファミリーごとに一行ずつ件数を示すグリッドが並びます。これらの件数は正確です。ボックスを変えるたびにサーバーから、エクスポートと同じ選択に対して読み取られ、ファイルに入る内容そのものです。ファイルは最後に、エクスポート…の後で選びます。名前を付けずにこの選択を閉じると、グリッドに戻ります。書き込みの間は進行状況が重なって表示され、ウィンドウは自動的に閉じ、結果はステータスバーに表示されます。

注意すべき点が九つあります:

  • 範囲:リスト(検索やコレクション)からは、範囲の行で現在のリストとライブラリ全体のどちらかを選びます。現在のリストはそのポジションをエクスポートし、マッチの行にはこれらのポジションがプレイされたマッチだけが表示されます。チェックを入れたマッチは、そのすべてのポジションとともに出力されます。ライブラリからは、範囲はライブラリです。

  • ライブラリ全体は、サーバーと export --type database のエクスポートです。すべてのファミリーが最初からチェックされ、Anki デッキは復習履歴付きで、進行中の書き起こしも残りとともに出力されます。

  • 同期:ライブラリ全体を選ぶと、同期の行にこのフォルダーへの前回のエクスポート以降の新しいものだけとフォルダーを選択…ボタンが表示されます。このときファイルは尋ねられません。そのフォルダーに新しい名前で書き込まれ、件数は新しいものの件数です(2台のマシンを同期するを参照)。

  • マッチは記譜の下書きとともに出力されます。これはマッチの行の書き起こしのチェックボックスで、最初からチェックされています。トーナメントが持ち出すマッチも同様です。まだマッチを生成していない下書きは、ライブラリ全体とともにのみ出力されます。ローカルの動画にリンクされたマッチや書き起こしは、フォルダーを除いたファイル名だけを持ち出し、受け取る側が自分のコピー上で場所を指定し直します。Web リンクはそのまま出力されます。マッチのインポート元のファイルも、名前だけが出力されます。

  • マッチは、その選手とイベントの別名とともに出力されます。最初からチェックされている別名のチェックボックスにより、選手の統合も引き継がれ、受け取る側は統合された選手を一人として読み取ります。エクスポートされるマッチの誰も指していない別名は、手元に残ります。

  • ポジションの一部しかリストにないコレクションは、切り詰められて届きます。コレクションの一覧には、それぞれの対象範囲の割合(「12/40」)が表示され、部分的な場合は赤で示されます。+ その局面のチェックボックスは、チェックを入れたコレクションのポジションを持ち出します。手作業で作ったリストのポジションや、ライブコレクションのクエリが選ぶポジションです。ファイルに含まれない行をクエリが指すライブコレクションは、固定されて出ます。現時点でクエリが選ぶ一覧として届き、一覧では赤で「固定」と注記付きで示されます。+ その局面にチェックを入れると、ライブのまま保てます。

  • トーナメントは常にそのマッチと一緒に書き出されます: マッチがなければトーナメントとマッチの関連が存在せず、トーナメントは空の状態で届きます。トーナメントにチェックを入れると、マッチのボックスがオフでも他のマッチに限定されていても、そのマッチが一緒に書き出されます。運営(ジャーナル、ペア、テーブル、書き出されたマッチの紐付け)も一緒に書き出され、対戦会はそのトーナメントの一つが書き出された時点で書き出されます。運営の出力フォルダーは手元に残ります。運営はファイルを開くか、別のデータベースにインポートすると確認できます。

  • Anki デッキはそのポジションとともに出力されます。新しい学習用コピーとしてです。学習履歴を含めるのチェックボックスは、さらに各カードの状態とその復習のログを持ち出します。バックアップや、別のマシンに移したデッキのためのものです。リストでは未チェック、ライブラリではチェック済みです。

  • 保存されたフィルターはコンテンツではなくあなた自身の検索をエクスポートするもので、他人のデータベースでは役に立ちません。リストでは未チェックです。ポジション、マッチ、トーナメントを番号で指すフィルターは、ファイルのために番号が振り直されます。出力されないものを指している場合は、手元に残ります。

コレクション、レッスン、文字起こし、Anki デッキ、エイリアス、トーナメントは、エクスポート日ではなく、お手元で持っている作成日と追加日のまま書き出されます。

ユーザー、説明、作成日のフィールドは生成されたファイルを記述します。元のデータベースから事前に入力されています。

透かしにチェックを入れると、二つのフィールドが現れます。

  • 出所:このファイルが何であり、どこから来たのかを、ご自身の言葉で記します。「Jean Dupont の講座 — 2026年3月12日」。このフィールドは必須です。空の間は赤い枠で囲まれ、エクスポートボタンは無効のままです。

  • 備考(任意) — 利用条件、連絡先、再配布しないでほしいという依頼など。

記載はあなたの発行者の識別情報で署名されます。したがって改変も偽造もできません。誰も内容を書き換えられず、あなたの名前で作ることもできません。一方で消せないわけではありません。配布されるファイルはごく普通の SQLite データベースであり、blunderDB は自由ソフトウェアだからです。記載は何かを禁じるものではなく、ファイルの出所を告げるだけです。

あなたが書いたコメントは同じ識別情報で署名されます。受取人は、それがあなたからのものであること、また途中で改変されていないことを確認できます(コメントパネル を参照)。すでに別の発行者の署名が付いたコメントは、その署名を保ちます。ステータスバーには、エクスポートの終了時に、署名されたコメントの件数が表示されます。マークなしのエクスポートでは何も署名されません。

発行者の識別情報

記載はあなたの発行者の識別情報で署名されます。これは初めてファイルに記載したときに自動で作られ、設定は不要です。データベースではなく人に属するので、あなたのすべてのファイルがA3F1-9C24-7B05-E1D8のような同じ公開フィンガープリントを持ちます。

このフィンガープリントを配布先に伝えておけば、ファイルが本当にあなたから来たものかを確認してもらえます。識別情報は一つのファイル(拡張子.bdbid)として別のパソコンへ持ち運べ、必要ならパスフレーズで保護できます。このファイルがあればあなたの名前で署名できます。共有しないでください。

設定(ツールバーの歯車アイコン)の発行者の識別情報タブには、名前とフィンガープリントが表示され、識別情報を保存…、識別情報を読み込む…、再生成…が用意されています。

警告

再生成しても、何かが失効するわけではありません。記載には署名に使われた公開鍵が埋め込まれているため、それ自体でいつまでも検証できます。識別情報のファイルが漏れた場合、それを持つ人は古いフィンガープリントで署名し続けられ、その記載は有効なままです。

漏洩のあとにあなたを守るのはソフトウェアではありません。新しいフィンガープリントを公表し、古いものはもう自分のものではないと配布先に伝えることです。

再生成は現在の鍵を上書きします。blunderDB は置き換える前に保存するかどうかを尋ねます。

データベースをパスワードで保護する

パスワードは伏せ字で入力します。保護されたファイルを開くときも同じです。目の形のアイコンは押している間だけパスワードを表示し、離すとすぐにまた隠します。

パスワードにチェックを入れると、拡張子 .dbx のファイルが生成されます。保存ウィンドウで選んだ名前が .db で終わっていても同じです。開くには通常のデータベースを開く操作を使います。選択ウィンドウは .db と .dbx のどちらも受け付けます。blunderDB はそこでパスワードを求め、隣に通常のデータベースを作成します。その後は何も求められません。

ウィンドウでは開いたあとに保護ファイルを削除することも選べます。そうしなければ、同じ内容を二つの名前で持ち続けることになります。このチェックは既定では入っていません(渡すつもりなら保護ファイルは手元に残ります)。削除は開くことに成功したあとにだけ行われます。

警告

パスワードが守るのはファイルの受け渡しであって、データベースそのものではありません。ダウンロードフォルダーに置き忘れたファイルや、誤って転送された添付ファイルを第三者が開くのを防ぎます。パスワードを教えた相手からは守れません。

パスワードは開くたびに検証されます。そのパソコンで以前に開いたことがあるファイルでも同じです。

技術的には、データベースはAES-256 の GCM モードで暗号化され、鍵はパスワードからArgon2id(メモリ 64 MiB、3 パス、4 スレッド)で導出されます。ソルトはファイルごとに無作為です。GCM モードは全体を認証するため、誤ったパスワードはそれと判別され、暗号化ファイルの改変も同様に検出されます。壊れたデータベースが黙って開かれることはありません。

保護ファイルのヘッダーは平文のままです。出所はパスワードなしでも読めます。

ファイルの出所を読む

アプリケーションでファイルを開き、メタデータパネルを表示します(コマンドmeta)。パネルの先頭に読み取り専用の出所の区画が現れ、何が記載されたか、誰が、いつ、そして署名の状態が示されます。

  • 「✓ あなたが印を付けた」:ファイルにはあなたの印がそのまま残っています。

  • 「✓ 署名を検証しました」:記載は無傷で、別の鍵によるものです。作成者から伝えられたフィンガープリントと見比べてください。

  • 「⚠ 署名が無効です」:文書が改変されたか、偽造されています。

通常のデータベースではこの区画は表示されません。

コマンドラインでは、blunderdb info --db fichier.dbが出所と署名の状態を表示します。ファイルに書き込むことは決してありません。保護されたファイルにもパスワードなしで使えます。exportの--watermarkと--password、およびidentityとopenについてはCLI_USAGE.mdを参照してください。

データベースを他者に公開する

印の付いたデータベースは他のどんなファイルとも同じように配布される——電子メール、個人サイト、USB メモリ。blunderDB はいかなるサービスも提供しない:リポジトリも、ホストされたカタログも、アカウントもない。これは設計から直接導かれる:ファイルを受け取った側では何も記録されないのだから、たとえサービスがあったとしても報告するものが何もない。

公開されたデータベースを他人が使えるものにするのは、すでに存在する四つの欄に尽きる:

  • ユーザー——誰が構築したか。名前として挙げてほしい表記で書く。

  • 説明——データベースの中身を、一覧に収まる一文で:「スコアでのキューブ判断 240 件、コメント付き、中級」。

  • 出所(透かしの)——このファイルが何であり、誰のために作られたか。受け取った側がメタデータパネルで最初に読むものである。

  • 発行者の指紋——ファイルの中ではなく、ファイルの傍らに公開する:受け取った側はそれを照合して、そのファイルがあなたから来たものであり、あなたの名を騙る誰かからのものではないことを確かめる。

透かしなしで公開されたデータベースも完全に使える。ただ匿名であるというだけで、メタデータパネルには出所の節が現れない。

データベースを知ってもらうには、リポジトリのディスカッション の Show and tell カテゴリが目録の役を果たす:公開する人たち自身が保つ一覧であって、blunderDB が提供するサービスではない。そこで告知するには、リンクと上の四つの欄と指紋が要る。