WienerWiener
  • はじめに
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • マスターデータコンバート
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • はじめに
  • 競合比較
  • 価格・入手
  • FAQ
  • 向いているケース
  • ライセンス
  • Unity Asset版とStandalone版の違い
  • 簡易難読化・改ざん検知
  • 整合性検知・デバッグ
  • ローカライズ
  • バージョン管理
  • Google Sheets入力
  • Excel
  • YAML
  • 設定ファイル
  • データフォーマット
  • マスターデータコンバート
  • ValueOnlyフォーマット
  • スタートアップ
  • サンプル
  • Converter
  • YAML Editor
  • Setting Editor
  • 日本語
  • English
  • 機能

    • 簡易難読化・改ざん検知
    • 整合性検知・デバッグ
    • ローカライズ
    • バージョン管理
    • Google Sheets入力

整合性検知とカスタムハンドラ

Wienerはマスターデータとソース定義の不整合を自動的に検知し、検知後の挙動をカスタムハンドラで制御できます。

検知のタイミング

1. ロード時(LoadBasicPackFromHash の第二引数)

開発用ロードメソッド LoadBasicPackFromHash の第二引数に Action<string[]> デリゲートを渡すと、ロード時に不整合が見つかったクラス名の一覧が返ってきます。

WienerManager.LoadBasicPackFromHash(path, (missingTargets) => {
    // missingTargets: 不整合が見つかったクラス名の配列
    foreach (var target in missingTargets)
    {
        Debug.LogWarning($"不整合: {target}");
    }
});

不整合があってもロードは成功し、ソースに存在してバイナリに存在しないデータは default 値が補填されます。

2. プロパティアクセス時(SetMissingDelegate)

SetMissingDelegate でデリゲートを登録しておくと、LoadBasicPackFromHash でロードした際に正常にロードできなかったマスターデータのプロパティへのアクセスを検知できます。

全体の使用例

var wm = new WienerManager();

wm.LoadBasicPackFromHash(path, (missingTargets) =>
{
    // ロード時:不整合が見つかったクラス名の配列が返ってくる
    foreach (var target in missingTargets)
    {
        Debug.LogWarning($"不整合: {target}");
    }
});

wm.SetMissingDelegate((className) =>
{
    // プロパティアクセス時:不整合なマスターへのアクセスが発生したクラス名が返ってくる
    Debug.LogError($"未ロードマスターへのアクセス: {className}");
});

// Name が不整合でロードできていない場合、SetMissingDelegate のデリゲートに通知が飛ぶ
var name = wm.Item[0].Name;

本番モードと開発モードの違い

本番ロード(LoadBasicPack)開発ロード(LoadBasicPackFromHash)
不整合発見時即エラー返却(安全停止)第二引数デリゲートで不整合クラス一覧を通知
欠損フィールドロード失敗default 値を補填して継続
プロパティアクセス検知—SetMissingDelegate で検知可能
用途リリースビルド開発・CI・デバッグ

活用シナリオ

環境やること
開発時onMissingTargets でログ出力、SetMissingDelegate でEditorダイアログ
CI実行時onMissingTargets の配列が空でなければビルドエラー
チーム通知onMissingTargets の内容を Slack / Discord へ Webhook 送信

CSV出力

WriteCSV を使うと内部で保持しているデータをヘッダー付きCSVとして取得できます。
戻り値は Dictionary<string, string>(Key: ファイル名、Value: CSV内容)です。

var csvs = WienerManager.WriteCSV();
foreach (var csv in csvs)
{
    File.WriteAllText(csv.Key, csv.Value);
}

用途

  • バイナリの中身を確認したいとき
  • 他ツール・スクリプトでデータを集計したいとき
  • データの差分をとりたいとき(git diff等)
  • 開発中のアプリからデバッグコマンドでマスターデータの中身をSlackへ送信したいとき

関連

  • 簡易難読化 — 改ざん検知との組み合わせ
  • バージョン管理 — 開発データの本番除外
  • C# API リファレンス
最終更新:: 2026/06/12 2:44
Contributors: artisan-sawasaka
Prev
簡易難読化・改ざん検知
Next
ローカライズ