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