本文へスキップ
SheetForge

SheetForge — Unity 向けシート駆動型データパイプライン

SheetForge は、スプレッドシート(Google Sheets、またはローカルの TSV/CSV/xlsx)を、強く型付けされた C# クラスと、ゲームが安定したアドレスで読み込むベイク済み ScriptableObject へと変換します。

すべてのセルはインポート時に検証されます。不正な値は、実行時にその行へ最初に到達したときではなく、インポートした時点で捕捉されます。タブ・行・列と修正案を添えた一文として報告されます。パイプラインはコンパイラのように動作します: 一度のパスですべてのエラーを収集したうえで、完全にクリーンなシートからのみ、不変の Definitions を組み立てます。

シートは常に唯一の信頼できる情報源であり、ベイクされた SO は単なるルックアップキャッシュにすぎません。これを軸に、次の特徴があります。

  • ラウンドトリップ。 インポートには逆方向の経路もあります: Export/Push は、シートの構造を保ったまま値を書き戻します。
  • エディター内蔵のオーサリング。 エディター内蔵のオーサリングウィンドウ——Data Studio——は、Ctrl+Z による取り消しつきでシートを編集します。
  • ローカライズされた UI。 製品 UI は 10 言語で提供されます。
  • プラグインによる拡張。 プラグインは、Core を編集することなくセルタイプ・検証ルール・グラフエッジ・インポートソースを追加できます。その境界は C# コンパイラによって強制されています。

公開 API は オーサリングカーネル です。ノードグラフのキャンバスのような第二のオーサリングサーフェスを、Core や Editor を一切変更することなくその上に構築できます — 詳しくは オーサリングカーネル を参照してください。

必要環境: Unity 6Addressables パッケージ(com.unity.addressables)——実行時の読み込みはアドレス方式のためです。このアセットはパッケージがなくてもコンパイルできますが、パイプラインはインストールされるまでロックされたままです。案内付きのインストール手順は スタートガイド で扱います。

仕組み(概要)

              ENTRANCES                    TRUTH                       EXITS
  ┌───────────────────────────┐   ┌──────────────────┐   ┌───────────────────────────────┐
  │ Google Sheets (SheetsApi/ │   │                  │   │ Strongly-typed C# classes     │
  │   ExportUrl)              │──▶│  Immutable IR    │──▶│   (codegen, last stage)       │
  │ Local TSV / CSV / xlsx    │   │  (Definitions)   │   │ Per-tab Database SO (bake)    │
  │ Data Studio (in-editor    │   │                  │   │   → Addressables address      │
  │   authoring, WYSIWYG)     │   │  built ONLY if   │   │   "SheetForge/{tab}"          │
  │ Custom source providers   │   │  validation is   │   │ Export / Push back to the     │
  │   (plugin, e.g. DB/REST)  │   │  100% clean      │   │   sheet (round-trip)          │
  └───────────────────────────┘   └──────────────────┘   └───────────────────────────────┘

どのエントランスも同じ検証済みの IR を生成し、どのエグジットもそこから導出されます。どこか一箇所でもエラーがあれば ⇒ 出力は一切ありません(部分的な組み立てはありません)。

どのエラーも、次を教えてくれます:

  • どこで — タブ・行・列記号 + フィールド名
  • 何が — 問題のある値
  • なぜ — 違反したルール
  • どうすればよいか — 実行可能な提案

これは、チームが本来テーブルごとに書くことになる、パーサー・バリデーター・コードジェネレーター・読み込み経路を置き換えます。

主要な数値

  • 50,000 行 × 20 列のインポートは、実際のエディター上(Mono)で約 628 ms。180k 件の参照セルを含む 50 タブ × 2,000 行では約 294 ms
  • 構造化エラーコード — 完全な検証リファレンス。
  • 製品 UI 全体(メニュー、オーサリングウィンドウ、ダイアログ、レポート、ツールチップ)が 10 言語 に対応。
  • テストスイート: ヘッドレス .NET テストと Unity EditMode テストの二重体制で、失敗 0 件——正確な件数は 機能と制限 ▸ 検証済みの状態 を参照。

ドキュメントマップ

ページ内容
スタートガイド必要環境(Unity 6、Addressables)、インストール、設定、最初のインポート、デモシーン
コアコンセプトシート = 唯一の信頼できる情報源、IR、パイプラインの各段階、キャッシュとしてのベイク済み SO、baseline、自動インポートチェーン
シート構文マーカー(@name/@type/@desc/@overlap/@style/@enum/@loc)、型システム全体、enum 定義シート、表記ルール
Data Studioオーサリングサーフェス — 参照・検索・セル編集・構造編集・レコードキャンバス・Ctrl+Z・事前検証
ソース・エクスポート・プッシュローカルおよび Google のソース、プロバイダー設定、Export のラウンドトリップ、Push の安全機構、シートに書き込まれるドロップダウン
Googleシートの設定サービスアカウントと JSON キーの作成、シートの共有、SheetForge へのキーの指定
ローカライズ10 言語対応の UI、ユーザーごとの言語設定、メニューの再生成、翻訳の追加方法
ローカライズシートゲームのテキストをシートとして管理する——@loc ロケール列、LocRef 参照、キー定数、Unity Localization の StringTable ブリッジ、翻訳ワークフロー
プラグイン作成16 のプラグイン契約(セルタイプ・バリデーター・エッジ・マーカー・テンプレート・キャンバスオーバーライド・コードレジストリ・テーマ・宣言的オーサリングサーフェス・UI 文字列・パイプラインオブザーバー・ソース・Studio ウィジェット/アクション/セルエディター/パネル)+ オプトインの capability(自前の記法に完全な参照整合性を持たせる機能を含む) — Core への変更ゼロでドメインを追加
オーサリングカーネル公開エンジン API の上に第二のオーサリングサーフェス(グラフキャンバスなど)を構築する
API リファレンス公開 API サーフェスの全容 — アセンブリ別のすべての public 型
機能と制限何ができて、何ができないか、その理由までの完全なリスト
FAQ とトラブルシューティング初回実行時や導入時によくある問題と、その解決策
SheetForge Webブラウザ版のコンパニオンアプリ — 同一コアを WebAssembly にコンパイルし、オーサリング・検証・リフレクションの整合性を保つ、使いどころ
Web プラグインマーケットレジストリからのプラグインインストール(ワンクリック・ハッシュ固定)、互換性ゲート、GitHub URL による未レビュープラグインのサイドロード、Unity 内のマーケットウィンドウ
Web Google シートアクセス自分自身の OAuth を通じてデプロイ済みサイトから Google シートを読み書きする方法と、サービスアカウントキーはローカル専用というルール

SheetForge Web(コンパニオン)

web.sheetforge.workers.dev にあるコンパニオン Web アプリは、オーサリング・検証・シートのリフレクションをブラウザーにもたらします。

これは 同一の C# コアを WebAssembly にコンパイルしたものであり——再実装ではありません——そのためパーサーとバリデーターが Unity アセットから乖離することは決してなく、Unity でビルドされたプラグイン DLL も無改修のまま読み込めます。コード生成とベイクは引き続き Unity 側だけの責務であり、Web の出力はリフレクションされたシートです。

上記の三つの Web ページは、このアプリ本体・プラグインマーケット・Google シートアクセスをそれぞれ扱います。IntId@Tab の参照整合性を含め、このサイトのシート構文ルールはすべて、ブラウザーでも同一に成立します。

設計原則

  1. シートが正規です。 SO を直接編集するというワークフローは存在しません。すべてはシートと再インポート時の検証を経由します。(一時的なランタイム実験のために「テスト編集」トグルが用意されていますが、これは書き戻されることがなく、再インポートすると消えます。)
  2. すべてを収集し、壊れたものは何一つ組み立てない。 検証は最初のエラーで止まることがなく、一つでもエラーがあれば出力はゼロになります——「一つ直しては再インポート」を繰り返す代わりに、完全なリストを一度で直せます。
  3. WYSIWYG なオーサリング。 Data Studio では、ステージングした内容がそのまま反映後の姿でただちに表示されます——シートに書き込む前から、追加した列は表示され、削除した行は消えます。
  4. 完全自動。 オーサリング操作の後、コード生成 → 再コンパイル → ベイクは、ドメインリロードをまたいでも、あなたが何かを再実行することなく完了します。
  5. オープン・クローズドな拡張。 新しいセルタイプ、検証ルール、グラフエッジ、インポートソースは登録によって参加します——パイプライン自体が変更されることはありません。
  6. 文書化された制限。 この製品ができないことは、できることと同じくらい正確に文書化されています。機能と制限 を参照してください。
  7. オープンなデータ。 真実の情報源は、どんなツールからでも読める、ただの TSV/CSV/xlsx ファイルや Google シートです。SheetForge を取り除いても、失われるのはパイプラインだけで、データは残ります。

関連ページ