自作のRPGでセーブデータの中身が複雑になっていて、アップデートのたびに構造をいじっている——そんな方なら、「今までのセーブを新しいバージョンで読み込ませたら壊れていた」と、配信した後になって気づく怖さに心当たりがあるはずです。更新前と更新後のセーブを見比べると、変わった場所が数十から数百カ所も出てくることは珍しくなく、その中から本当に「更新のせいで壊れた」場所だけを探し出すのに時間がかかります。
さらに厄介なのが、セーブの中に「他の場所を指し示している」情報が含まれている場合です。たとえばアイテムの一覧の先頭に1つ追加すると、それより後ろの番号は全部1つずつずれます。ところが「何番目を指しているか」という情報そのものは文字としては1文字も変わらないまま、実際に指している中身だけが別のアイテムに入れ替わってしまいます。ふつうの見比べ方では、これは「変化なし」として見過ごされます。
save-diffに更新前と更新後のセーブデータを渡すと、消えてしまった項目・型が変わった項目・指し示す先が壊れてしまった箇所を、壊れている可能性が高い順に日本語の一覧にして返してくれます。セーブデータはどこにも送信されず、お使いのパソコンの中だけで処理されます。元のファイルが書き換えられることもありません。中身を読み取るだけです。
出力は3つの節に分かれます。
| 節 | 何が入るか |
|---|---|
| 更新で壊れた可能性が高いもの(error) | 参照切れ / 参照先すり替わり / 型変更 / 消失 / 要素消失 / 改名 |
| 中身を確認したほうがよい変更(warning) | 一律変化 / 配列ずれ / 値変更 |
| 増えたもの(info) | 追加 / 要素追加 |
セーブの差分は、遊んだ分だけ増えていく正常な値の変化が件数の大半を占めます。単純に上から順に並べてしまうと、更新で消えた1件の重要な変化がその中に埋もれてしまいます。「重要そうな順に並べ直す」こと自体が、この道具の中身です。試しに、フラグ230個・5人パーティ・入れ子構造・参照情報を含む1万バイト強の見本セーブに6種類の壊れ方を混ぜて試したところ、84件の所見(うち壊れの疑いが強いもの18件・要確認44件・増加22件)が70行にまとまって出力されました。同じデータを、順番通りに突き合わせるだけの素朴な比較にかけると、105件・107行になり、先頭30行はすべて遊んだ分の値変更のノイズで埋まり、参照先のすり替わり3件は検出する手段がないため0件、改名3件は「消えた3件」と「増えた3件」に別々に散らばりました。
無料版は、一度に比較できるのはセーブのペア1件まで、表示されるのは重要な順に先頭30行までです。検査のやり方・並べ替え・まとめ方・出力の形式は購入版とまったく同じで、機能を隠していることはありません。並べ替えの仕組みが同じなので、壊れている可能性が高い所見は無料版でも先頭に出てきます。先ほどの見本セーブでいうと、壊れの疑いが強いもの18件は無料版でも全部表示されます。
購入で外れるのはこの2つの上限だけです。上限はプログラムの中に組み込んであり、切り替えオプションのようなもので外せる作りにはなっていません。ライセンスキーもオンライン認証もなく、中身のプログラムも全部読める状態で入っています。技術的には制限を外すこともできてしまいますが、対価としていただいているのは「動かす権利」ではなく、更新や問い合わせへの対応です。
「差分を取る」という作業自体は、すでに無料の道具で十分できます。jd、dyff、difftastic、jsondiffpatch、PythonのDeepDiff、diffx、json-diff、git diff(いずれも無料)——これらで足りるなら、それで構いません。この製品は不要です。配列の番号ずれへの対応も、jdやjsondiffpatch、dyff、diffx、DeepDiffといった無料の道具にそれぞれ用意されている機能で実現できています。save-diffとの違いは、「どの情報を同じものとみなすか」を人が先に指定しなくてよい点だけです。
調べた範囲の無料の道具に見当たらなかったのは、次の点です。
ゲームのセーブデータ専用の比較・移行検証ツールは、無料・有料とも見当たりませんでした。見つかるのはセーブエディタと、生データの見た目上の差分だけです。差分が数行で済む方や、指し示す情報や改名がないセーブなら、jdやdiffxやgit diffで十分です。
単品買い切り 12,800円 で、BOOTHにて販売されています(無料版はsave-diff-free-1.0.0.zipとして別ページで配布)。月額課金やライセンスキーはありません。
実際にお使いいただくには、多少パソコンの操作に慣れた方か、社内外の詳しい方に用意してもらう必要があります。一度セットアップすれば、あとは更新前と更新後のセーブデータを渡すだけで、壊れていそうな箇所の一覧が返ってきます。
いくつか、知っておいてほしい限界があります。数値の細かいずれには許容誤差の仕組みがなく、項目の改名は「消えた1つ」と「増えた1つ」のペアにしか対応付けられません。配列の対応付けは、共通する要素が半分以上あるときだけ働きます。また、この製品は実在するゲームのセーブデータでは検証しておらず、検証には人工的に作ったデータを使っています。差分がゼロだったとしても、それはゲーム側でそのセーブを実際に読み込めることを保証するものではなく、最終確認は必ずゲームでそのセーブを読み込んで行ってください。実データで使う際は、ゲームを終了させたうえで元ファイルを別途バックアップし、コピー同士を比較することをおすすめします。
← 他のお悩みも見る