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

Unity Asset版 1.0.0での検知範囲

このページで説明するのは、現在販売中のUnity Asset版 1.0.0における、生成バイナリとC#ソース定義の構造的な不整合検知です。Standalone版とUE5出力はComing Soonであり、ここで説明する現行機能の範囲には含めません。

LoadBasicPackFromHash のハッシュ比較や、関連機能のチェックサムは、想定した生成物との差異、ファイル破損、意図しない変更を検知するためのものです。

セキュリティ上の境界

ハッシュやチェックサムだけでは、データの暗号学的真正性を証明できません。電子署名ではなく、攻撃者による改変防止も保証しません。攻撃者がデータと検証値の両方を変更できる環境では、改変後に検証を通過させられる可能性があります。

信頼できないファイルを、チェックサムに通ったことだけを理由に読み込ませないでください。真正性の確認が必要な配布経路では、利用側で電子署名、認証付き暗号、安全な鍵管理などを設計してください。

検知のタイミング

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/08/09 23:18
Prev
軽量難読化・変更検知
Next
ローカライズ