MOTK 072 Guide
Start with the answer. Keep the full reference.まず要点を読む。必要なら全文へ。
Use the three starting points below for common needs. The complete guide remains on this page and the sidebar jumps directly to every major part.よくある目的は下の3つから始められます。完全版ガイドも同じページに残し、サイドバーから各部へ直接移動できます。
The English translation is incomplete in several technical parts. Historical 071 identifiers and capacity statements retained inside the complete reference need verification against the current 072 development package.技術的な章の一部は英訳作業中です。完全版に残る071の旧識別子や利用人数の記述は、現在の072開発パッケージに対して要検証です。
序文 — 本書について
本書は MOTK(MOTKsheets) の完全版ユーザーガイドです。日々の操作からデータモデル、管理運用、障害対応、内部アーキテクチャまで、MOTKに関するすべてを一冊に収めた「辞書」として編纂されています。
MOTKは、映像制作のためのプロダクション管理ツールです。Google スプレッドシートをデータベース、Google ドライブをファイル保管庫、Google Apps Script をサーバーとして動作し、ブラウザだけで Shot・Asset・Task・スケジュール・素材ファイル・ディスカッションを一元管理できます。
Foreword — About This Guide
This is the complete user guide for MOTK (MOTKsheets) — a single reference covering everyday operations, the data model, administration, incident response, and internal architecture.
MOTK is a production management tool for film and animation work. It uses Google Sheets as its database, Google Drive as its file vault, and Google Apps Script as its server. Everything — Shots, Assets, Tasks, schedules, media files, and discussions — is managed from the browser.
本書の構成
| 部 | 内容 | 主な読者 |
|---|---|---|
| 第1部 図解で見るMOTK | システム全体像を8枚の図で掴む | 全員 |
| 第2部 クイックスタート | 10分で基本操作を覚える | 新規参加者 |
| 第3部 画面ガイド | 全画面・全機能の完全リファレンス | 全員 |
| 第4部 作成・編集・表示 | レコード作成、インライン編集、表示仕様 | Artist / Editor |
| 第5部 ナビゲーションとURL | 画面遷移、URLパラメータ体系 | 全員(後半は技術者) |
| 第6部 アクセス権と共有 | 権限モデル、スタッフの参加・退場 | Supervisor / Admin |
| 第7部 管理・保守 | セットアップ、保守、障害Runbook | Admin |
| 第8部 データモデル | 全シート・全カラムのリファレンス | Admin / 技術者 |
| 第9部 デバッグとQA | DebugPanel、テスト、問題報告 | QA / Admin |
| 第10部 確定仕様集 | 動作検証済みの確定仕様(P0確認) | 技術者 |
| 第11部 禁止事項・注意事項 | やってはいけないこと総覧 | 全員必読 |
| 第12部 アーキテクチャ更新補遺 | 2026年6月の堅牢化(v483〜v488) | Admin / 技術者 |
| 第13部 用語集 | 全用語の辞書 | 全員 |
How this book is organized
| Part | Contents | Main audience |
|---|---|---|
| Part 1 MOTK in Diagrams | Grasp the whole system in 8 figures | Everyone |
| Part 2 Quick Start | Learn the basics in 10 minutes | New members |
| Part 3 Screens & Features | Complete reference of every screen | Everyone |
| Part 4 Create / Edit / Render | Record creation, inline editing, display rules | Artists / Editors |
| Part 5 Navigation & URLs | Screen transitions, URL parameters | Everyone (latter half technical) |
| Part 6 Access & Sharing | Permission model, onboarding / offboarding | Supervisors / Admins |
| Part 7 Admin & Maintenance | Setup, upkeep, incident runbooks | Admins |
| Part 8 Data Model Reference | Every sheet and column | Admins / Engineers |
| Part 9 Debug & QA | DebugPanel, tests, issue reporting | QA / Admins |
| Part 10 Verified Specifications | Behavior confirmed by P0/P1 verification | Engineers |
| Part 11 Prohibitions & Cautions | Everything you must not do | Required reading |
| Part 12 Architecture Addendum | The June 2026 hardening (v483–v488) | Admins / Engineers |
| Part 13 Glossary | Dictionary of all terms | Everyone |
読者別の読み方
初めて使う人(Artist / Viewer) 第1部の図 → 第2部クイックスタート → 第3部の自分が使う画面の節 → 第11部の禁止事項。これだけで日常業務に必要な知識は揃います。
Supervisor / Producer 上記に加えて、第6部(アクセス権)、第3部のScheduler/SchedView節、第4部の編集ワークフロー。
Admin(管理者)
全部。特に第7部(管理・保守)と第11部(禁止事項)は運用前に必ず通読してください。第12部は2026年6月以降のセキュリティ切替手順(auth.write.mode)を含みます。
トラブルが起きた人 各部末尾の「トラブルシュート」節 → 第9部の問題報告テンプレート → それでも解決しなければOpsLogシート(第12部参照)を確認して管理者へ。
Reading paths
First-time users (Artist / Viewer) — Part 1 figures → Part 2 Quick Start → the sections of Part 3 for the screens you use → Part 11 prohibitions. That covers daily work.
Supervisors / Producers — Add Part 6 (access), the Scheduler/SchedView sections of Part 3, and the editing workflows in Part 4.
Admins — Everything; Parts 7 and 11 are mandatory before operating. Part 12 contains the production security switch (auth.write.mode).
When something breaks — The troubleshooting section at the end of each part → the report template in Part 9 → check the OpsLog sheet (Part 12) and contact your admin.
表記について
このような等幅文字はシート名・URLパラメータ・設定キー・IDなどの厳密な文字列を表します。- 「Shot / Asset / Task」など大文字始まりのカタカナ無し表記はMOTKのエンティティを指します。
- ID例(
sh_0001など)は説明用であり、実際のIDはプロジェクトごとに異なります。 - 本書の内容は 2026年6月時点のMOTK(v488)に基づきます。
Conventions
Monospacemarks exact strings: sheet names, URL parameters, config keys, IDs.- Example IDs such as
sh_0001are illustrative; real IDs differ per project. - This book reflects MOTK as of June 2026 (v488).
第1部 図解で見るMOTK
文章を読む前に、まず8枚の図でMOTKの全体像を掴んでください。本書の以降の章は、すべてこの図のどこかの詳細です。
Part 1 — MOTK in Diagrams
Before reading any prose, absorb these eight figures. Every later chapter is a detail of something on this page. (Figure labels are in Japanese; the captions below explain each one.)
図1 システム構成
MOTKは「サーバーを持たない」構成です。ブラウザが Google Apps Script(GAS)のWebアプリを呼び、GASがスプレッドシート(データ)とドライブ(ファイル)を読み書きします。
ポイント:
- データ本体のワークブック(
[071] MOTK)に Shots / Assets / Tasks などの全データが入っています。 - 管理用ワークブック(
[071] MOTK_admin)は別ファイルで、管理者リスト(ADMIN_USERS)とプロジェクト設定(project_meta)だけを持ちます。これを見られる人=管理権限を定義できる人、という信頼境界になっています。 - Webアプリは「アクセスした本人として」実行されます(USER_ACCESSING)。MOTKが勝手に高い権限で動くことはありません。
Figure 1 System architecture
MOTK has no dedicated server. The browser calls a Google Apps Script (GAS) web app, which reads and writes the spreadsheet (data) and Drive (files).
Key points:
- The data workbook (
[071] MOTK) holds all entity data — Shots / Assets / Tasks / Users / Pages / Fields and the operational sheets. - The admin workbook (
[071] MOTK_admin) is a separate file holding only the admin list (ADMIN_USERS) and project settings (project_meta). Whoever can see this file defines who is an administrator — it is the trust boundary. - The web app runs as the visiting user (USER_ACCESSING). MOTK never acts with elevated rights on a normal user's behalf.
図2 画面マップ
すべての画面は Shell(共通枠)の中に表示され、上部のグローバルナビ(GNAVI)で行き来します。
Figure 2 Screen map
Every screen renders inside the Shell (shared frame) and is reached from the global navigation (GNAVI).
図3 エンティティ関係
MOTKが管理する5つの主要エンティティと、そのつながりです。矢印はリンクフィールド(IDで他レコードを指す欄)を表します。
ポイント:
- TaskはShot(またはAsset)にぶら下がり、ProjectMemberに割り当てられます。
- ProjectMemberは「プロジェクト上の役割」、Userは「Googleアカウントを持つ人」です。1人のUserが複数のMember役割を持てます。
Figure 3 Entity relationships
The five main entities and their links. Arrows are link fields — columns that hold another record's ID.
- A Task hangs off a Shot (or an Asset) and is assigned to a ProjectMember.
- A ProjectMember is a role on the project; a User is a person with a Google account. One User can hold several Member roles.
図4 シートの行構造
データシートは3層構造です。1行目がフィールドID(fi_xxxx)、2行目が人間用の見出し、3行目以降がデータです。
1行目と2行目を絶対に削除・並べ替えしないでください。 アプリはこの構造を前提に動いています(第11部 禁止事項参照)。
Figure 4 Sheet row structure
Data sheets have three layers: row 1 is the field ID (fi_xxxx), row 2 the human label, and data starts at row 3.
Never delete or reorder rows 1–2. The app binds columns by field ID (see Part 11).
図5 権限モデル
「誰が何をできるか」は2つの場所で決まります。日常の権限は Users.permission、管理者は管理用ワークブックの ADMIN_USERS です。
2026年6月以降は、書き込み全体を一括制御するスイッチ auth.write.mode が管理用ワークブックの project_meta にあります(第12部参照)。
Figure 5 Permission model
Who can do what is decided in two places: day-to-day rights come from Users.permission; administrators come from ADMIN_USERS in the admin workbook.
Since June 2026 a single switch, auth.write.mode in the admin workbook's project_meta, gates all writes (Part 12).
図6 ファイルパイプライン(Originals / Proxies)
アップロードした元素材(Originals)は重いので、表示用の軽量ファイル(Proxies)を別途生成します。変換はローカルPCで動くProxy Worker(WorkerKit)が担当します。
Figure 6 File pipeline (Originals / Proxies)
Uploaded source files (Originals) are heavy, so lightweight display files (Proxies) are generated separately by a Proxy Worker (WorkerKit) running on a local PC.
図7 Scheduler Publish の2段階
スケジュールの「Publish」は2段階です。まず編集中スケジュールをロック付きスナップショットとして確定し、その内容をTasksシートへ反映します。完了済みTaskはスキップされます。
Figure 7 Scheduler Publish, two stages
Publish is a two-step operation: first the working schedule is frozen as a locked snapshot, then its contents are written into the Tasks sheet. Completed tasks are skipped.
図8 キャッシュの3層構造
MOTKが「2回目から速い」のは、3層のキャッシュがあるからです。表示がおかしいときに「どの層が古いのか」を考える手がかりにもなります。
| 層 | 場所 | 中身 | 寿命 |
|---|---|---|---|
| ブラウザ localStorage | 各ユーザーのPC | 行データ・ページ設定・リンクラベル・起動キャッシュ | 約30分(キーによる) |
| CacheService | GASサーバー(全ユーザー共有) | リンクマップ・Pages一覧・書き込みゲート設定 | 60秒〜5分 |
| Cacheシート | ワークブック内 | Originals URLなどの解決結果 | 永続(Hydratorが毎日更新) |
強制的に最新を見たいときは、ブラウザのハードリロード(Ctrl+Shift+R)で1層目が飛び、60秒〜5分待てば2層目が自然に入れ替わります。
Figure 8 The three cache layers
MOTK is fast on the second visit because of three cache layers. When a display looks stale, think about which layer is old.
| Layer | Where | Holds | Lifetime |
|---|---|---|---|
| Browser localStorage | each user's PC | rows, page configs, link labels, boot cache | ~30 min |
| CacheService | GAS server (shared by all users) | link maps, Pages list, write-gate mode | 60 s – 5 min |
| Cache sheet | inside the workbook | resolved Originals URLs etc. | persistent (refreshed daily) |
To force freshness: a hard reload (Ctrl+Shift+R) clears layer 1; layer 2 turns over by itself within 60 s – 5 min.
第2部 クイックスタート — 10分でMOTKを使えるようになる
Part 2 — Quick Start: productive in 10 minutes
1. アクセスする
- 管理者から渡されたWebアプリURL(
https://script.google.com/macros/s/.../exec)をブラウザで開きます。 - Googleアカウントでのログインを求められたら、プロジェクトに登録されているアカウントでログインします。
- 最初に開くのはShotテーブルです。URLはブックマークしておきましょう。
うまく開けない場合: 別のGoogleアカウントが選ばれていることが大半です。ブラウザのプロファイルを確認するか、シークレットウィンドウで開き直してください。
1. Access
- Open the web app URL handed to you by your admin (
https://script.google.com/macros/s/.../exec). - When asked to sign in, use the Google account registered to the project.
- The Shot table opens first. Bookmark the URL.
If it will not open: nine times out of ten the browser has picked a different Google account. Check your browser profile or retry in an incognito window.
2. 画面の見かた(30秒)
- 上部バー(GNAVI): Shots / Assets / Tasks / Members / Users / Schedule / Forum などの画面切替。
- テーブル画面: 行=レコード、列=フィールド。列見出しでソート、ツールバーで検索・フィルタ・列の表示切替。
- 行のリンクをクリックすると、そのレコードの詳細画面(Detail)へ。
- 詳細画面の各欄はクリックでそのまま編集できます(編集可の欄のみ)。
2. Reading the screen (30 seconds)
- Top bar (GNAVI): switch between Shots / Assets / Tasks / Members / Users / Schedule / Forum.
- Table view: rows are records, columns are fields. Sort by header; search, filter and column toggles live in the toolbar.
- Click a row link to open that record's Detail view.
- In Detail, click any editable field to edit it in place.
3. 最初にやってみる5つの操作
3.1 レコードを探す
テーブル右上の検索ボックスにコード名や名前の一部を入力。フィルタを組み合わせるなら ツールバー > Filter。
3.2 セルを編集する
テーブルのセルをダブルクリック(またはDetailの欄をクリック)→ 値を変更 → Enter。保存は自動です。ステータスバーに「Updated!」と出れば完了。
3.3 リンクを張る(Task に Shot を結びつける等)
リンク欄(Shot Link / Asset Link / Assigned member など)を編集すると Link Picker が開きます。一覧から相手を選ぶだけ。IDを手入力する必要はありません。
3.4 ファイルをアップロードする
ShotまたはAssetのDetail画面右下の Upload ボタン → ファイルを選択(複数可)→ アップロード。素材はそのレコードのOriginalsフォルダに入り、表示用Proxyは後から自動生成されます。
3.5 スケジュールを見る
GNAVIの Schedule(URLは ?p=schedview)。閲覧専用のカレンダー表示です。編集権限のある人だけが Scheduler(?p=schedule)で組み替えられます。
3. Your first five operations
3.1 Find a record
Type part of a code or name into the search box at the table's top right. Combine conditions with Toolbar > Filter.
3.2 Edit a cell
Double-click a table cell (or click a Detail field) → change the value → Enter. Saving is automatic; "Updated!" in the status bar means done.
3.3 Link records (e.g. attach a Shot to a Task)
Editing a link field (Shot Link / Asset Link / Assigned member …) opens the Link Picker. Pick the target from the list — never type IDs by hand.
3.4 Upload files
On a Shot or Asset Detail page: Upload button (bottom right) → choose files (multiple OK) → upload. Files land in that record's Originals folder; display Proxies are generated automatically afterwards.
3.5 View the schedule
GNAVI > Schedule (?p=schedview) — read-only calendar. Only users with edit rights rearrange it in the Scheduler (?p=schedule).
4. やってはいけないこと(最低限)
詳細は第11部にありますが、最低限これだけは:
- スプレッドシートを直接編集しない(特に1〜2行目のヘッダ、ID列)。必ずアプリの画面から編集する。
- 行の削除・並べ替え・シート名の変更をしない。
- 同じレコードを複数人で同時に編集しているときは、最後に保存した人の値が残ります。担当範囲を分けましょう。
4. The minimum "don'ts"
Part 11 has the full list; at minimum:
- Never edit the spreadsheet directly (especially header rows 1–2 and the ID column). Always edit through the app.
- Never delete rows, reorder rows, or rename sheets.
- With simultaneous edits, the last save wins — divide ownership of records.
5. 困ったら
| 症状 | まず試すこと |
|---|---|
| 画面が真っ白/エラーページ | リロード。直らなければ Ctrl+Shift+R(ハードリロード) |
| 表示が古い気がする | ハードリロード。リンクのラベルは最大1分で追いつきます |
| 編集できない | その欄が編集可か(グレー表示は不可)、自分の権限(viewerは閲覧のみ)を確認 |
| それでもダメ | 画面URL・操作手順・時刻を添えて管理者へ(報告テンプレートは第9部) |
5. If you get stuck
| Symptom | First try |
|---|---|
| Blank screen / error page | Reload; then hard reload (Ctrl+Shift+R) |
| Display looks stale | Hard reload; link labels catch up within a minute |
| Cannot edit | Is the field editable (grey = no)? Is your permission viewer-only? |
| Still stuck | Send the URL, steps, and the time of day to your admin (template in Part 9) |
第3部 画面と機能の完全ガイド
1. MOTKの一文説明候補
MOTKは、映像・アニメーション・VFX・ストップモーション制作のために、ショット、アセット、タスク、メンバー、スケジュール、素材フォルダ、プロキシ、レビュー状態を一つのブラウザUIで扱えるようにする制作管理ツールである。
MOTKは、Google Sheets上の制作データをそのまま使いながら、制作現場で必要な「探す」「並べる」「見る」「編集する」「関連をたどる」「スケジュールに置く」「Driveフォルダを開く」「診断する」を行うためのアプリである。
MOTKは、ShotGridのような制作管理思想をGoogle Sheets/Driveベースで軽量に実装し、制作規模に応じてローカル・社内・クラウド運用へ拡張できるようにするための基盤である。
2. 利用者別の使い方
2.1 Producer / Production Manager
Producerは、Tableで全体の進捗を見て、Status、Due Date、Assignee、Task Link、Asset Linkを更新し、Schedulerでメンバーごとの作業量や詰まりを見る。
Producerは、TableのSort/Filterを使って「未着手」「レビュー待ち」「締切が近い」「担当未設定」「アセットリンクが空」「素材が未アップロード」などを抽出する。
Producerは、Detailで1ショットまたは1タスクを開き、関連アセット、関連タスク、Drive Originals、プロキシ、ノート、履歴を確認する。
Producerは、SchedViewのDailyまたはSlotで作業配置を確認し、編集が必要な場合はSchedulerへ移動する。SchedulerではSave Asで別案を作り、カードを調整し、Publishで確定版として扱う。
2.2 Director / Supervisor
DirectorやSupervisorは、Detailでショット単位・アセット単位の情報を確認し、ShotView、AssetView、Comp、Versions、Producer Note、Artist Noteなどを見る。
Supervisorは、Tableでレビュー対象だけを絞り込み、DetailのPrev/Nextで連続チェックする。
Supervisorは、プロキシやサムネイルがある場合、直接Driveを探さずにMOTK上から最新ビューやバージョンを開ける。
2.3 Artist / Animator
Artistは、自分に割り当てられたTaskをTasks Table、Member DetailのAssigned Tasks、またはSchedViewから探す。
Artistは、Task Detailで必要なShot Link、Asset Link、Materials、Originals、Version、Due Date、Statusを確認する。
Artistは、作業したファイルをDetailのVersions Uploadなどから追加し、必要に応じてProxyJobs/UploadInboxの処理に乗せる。
Artistは、Statusを進行中、レビュー待ち、完了などに更新し、必要なノートを残す。
2.4 Admin / Pipeline / Technical Director
Adminは、Settingsでproject_meta、PNAVI、Theme、Drive folders、Proxy Ops、Proxy Audit、User Access、Sharing、Hydrate Originals、Task Est Recalculateを管理する。
Adminは、DebugPanelでPerformance Snapshot、Viewer State、Regression Coverage、Console、Schema/Meta Health、FieldTypes Health、Column Contract、Binding Integrity、Originals diagnostics、Link replacer diagnosticsを確認する。
Adminは、問題があった場合、まずDebugPanelとConsoleを見て、Fields定義、PageConfig、ServerFields、CommonRenderer、Router、Table/Detailの解釈を追う。
3. 全体画面構造
3.1 GLOBAL NAV
GLOBAL NAVはアプリ全体の固定ナビゲーション。基本的にはプロジェクトやページの種類に関係なく同じ位置に出る。
主な項目:
- MOTKロゴ
- Dashboard
- Settings
- Guide
- Debug
Dashboardはプロジェクトの入口。
Settingsは管理者・編集者向けの設定画面。別タブで開くことが多い。
GuideはUserGuideを開く。
Debugは診断コンソールを開く。通常ユーザーは毎日使う必要はないが、問題報告時には重要。
3.2 PROJECT NAV / PNAVI
PNAVIはプロジェクト固有のナビゲーション。project_metaの pnavi.config.json によって設定できる。
主な項目:
- Shots
- Assets
- Tasks
- Members
- Users
- Schedule
- Forum
PNAVIはプロジェクトごとに出す項目を変えられる。たとえば小規模制作ではUsersを隠し、大規模制作ではScheduleやForumを強く見せるなどが可能。
Scheduleは現在、基本的に ?p=schedview のSchedViewへ移動する。Daily/Slotの表示確認はSchedViewで行い、編集が必要なときはInteractionをEditにして ?p=schedule のSchedulerへ移動する。
Forumは制作上の議論、ショットやタスクに紐づくやりとり、または軽い連絡用として位置付ける。
3.3 Page Toolbar
Page Toolbarは現在開いている画面だけに関係する操作領域。
Tableなら Page selector, Save, Sort, Filter, Fields, New, Server search, pager。
Detailなら Prev, Next, Discuss, Cards, Save Menu, View/Edit mode, Preset selector。
SchedViewなら schedule switch, Daily/Slot, Lane, Interaction, Zoom, Card List検索, display fields, lane visibility, status。
Schedulerなら Save As, Publish, Undo, Settings, Inspector, slot editing controls。Schedulerは編集用で、読み取り表示はSchedViewが担当する。
Settingsなら Reload, Save, maintenance buttons。
DebugPanelなら Run all checks, Copy report, Export TXT/JSON, local runner generation。
4. Dashboard
Dashboardは、MOTKを開いたときの入口。全体状況、最近の更新、主要エンティティへの導線、プロキシやスケジュールへの導線を置く場所。
Dashboardで説明すべきこと:
- 現在のプロジェクトを確認する場所。
- Shots, Assets, Tasks, Membersなどに移動する入口。
- 最近更新されたレコードを見る場所。
- スケジュールやプロキシ状況の要約を見る場所。
- 作業開始時に最初に見る画面。
Dashboardは「編集する画面」よりも「状況を見る画面」として説明するのがよい。
5. Table Page
5.1 Table Pageの役割
Table Pageは、ショット、アセット、タスク、メンバー、ユーザーなどのレコードを一覧で見る画面。
大量のレコードを検索、フィルタ、並び替え、ページングしながら見るための画面。
複数レコードを比較する、進捗をまとめて確認する、担当者別に見る、ステータス別に見る、締切順に見る、といった作業に向いている。
Detail Pageは1件を見る画面。Table Pageは多数を見る画面。
5.2 Table Pageでできること
- entityごとの一覧表示
- ページレイアウトの選択
- 表示列の変更
- ソート
- フィルタ
- サーバー検索
- ページング
- 1ページあたりの行数変更
- ALL表示
- 新規レコード作成
- インライン編集
- Link fieldから関連レコードへ移動
- Originals/Versions/Thumbnailsなどの特殊フィールド表示
- 状態のローカル保存
- 2回目表示時の復元
- DebugPanelへの状態共有
5.3 Table Toolbar
Preset Selectは、保存されたTableレイアウトを選ぶ。プロジェクトやユーザーごとに、レビュー用、編集用、制作進行用、アーティスト用などの列構成を切り替えるために使う。
Save menuは、列構成やページ設定を保存するためのメニュー。セルの値を保存するものではない。セルの値はインライン編集時に保存される。
Sortは、現在のTable表示を指定フィールドで並べ替える。
Filterは、条件に合うレコードだけを表示する。
Fieldsは、表示列を選ぶ。必要な列だけを出して表示を軽くするためにも使う。
Newは、新規レコードを作成する。作成時には必須フィールド、ID、自動生成項目、初期値の扱いを説明する必要がある。
Server Searchは、ブラウザ内ではなくサーバー側に問い合わせる検索。大量行のときに重要。
Pagerは、行数が多い場合にページを切り替える。50/100/200/500/ALLのような選択肢がある。
5.4 Tableの読み込みとキャッシュ
Tableは初回表示時にサーバーからデータを取得する。
2回目以降は、前回のViewer State、rows cache、bootpack、column manifestなどを使って、できるだけ早く画面を復元する。
ユーザー向けには「2回目の表示は前回状態を使って先に画面を出し、その後サーバーの最新データで更新されることがある」と説明できる。
ただし、空状態が一瞬表示される場合は、キャッシュ復元の前に空表示が走っている可能性がある。これはユーザーガイドのトラブルシュートに書ける。
5.5 Tableのステータス表示
画面下部またはstatus areaには、loading、saving、applying page、rows count、errorなどが出る。
以前の問題として 0 of 0 のような誤解を招く表示があった。UserGuideでは「読み込み中やキャッシュ復元中は、実データが0件という意味ではない」と明記できる。
5.6 Tableの列固定・列マニフェスト
MOTKはTableの列構成を保存し、ページ再表示時に同じ列順を復元しようとする。
Column Manifestは、ページIDごとの表示列リスト。古い列や別エンティティの列が混ざった場合は、コード側がエンティティに合わないfield_idを除外する。
ユーザー向け説明では「表示列が変になったときは、Fieldsメニューやページ設定の保存状態が原因の可能性がある。データそのものが壊れたとは限らない」とする。
5.7 TableのSearchとFilterの違い
Searchは、サーバー側に問い合わせて検索する。大量行の中から文字列を探す場合に使う。
Filterは、現在のTable表示に対して条件をかける。Statusがreview、Due Dateが今日以前、Assigneeが空などの絞り込みに使う。
Sortは、表示対象を並べる。フィルタ後に並べることもできる。
5.8 TableのInline Editing
Inline EditingはTable上でセルを直接編集する機能。
編集できるかどうかはFieldsのeditable設定とfield typeによる。
編集対象:
- text
- date
- select
- checkbox
- entity_name
- link field
- 一部URL/metadata fields
編集しない対象:
- id
- originals
- generated fields
- system-managed fields
- read-only json
idは機械用の一意識別子。通常ユーザーは編集しない。
entity_nameは人間が見る名前。ShotCode, Asset Name, Task Name, Role, User Nameなど。
Inline Editingは、短い修正に向いている。長い説明文や複雑なリンク修正はDetailの方が安全な場合がある。
5.9 Link fieldの表示
Link fieldには asset_link, shot_link, task_link, member_link, user_link がある。
シート上にはIDが保存されるが、UIでは可能な限りentity_nameとして表示される。
たとえば as_0001 はAsset Nameで表示され、クリックするとAsset Detailに移動できる。
複数IDが入る場合はチップ、ピル、リストとして表示する。
リンク先の解決にはLINK_MAPSが使われる。LINK_MAPSが未取得または古い場合、ID表示のままになることがある。
5.10 Tableの日常ワークフロー例
Production Managerが朝に使う:
- Dashboardを開く。
- Tasks Tableへ移動。
- FilterでStatusがcompleted以外のタスクを表示。
- SortでDue Date順に並べる。
- Assigneeが空のものを探す。
- 必要に応じてインラインでAssigneeやDue Dateを更新。
- 気になるタスクをDetailで開く。
- Shot LinkやAsset Linkから関連先を確認。
- Schedulerで日程上の詰まりを確認。
Supervisorがレビューに使う:
- Shots Tableへ移動。
- FilterでStatusがreviewのショットだけ表示。
- ShotViewまたはCompのある列を表示。
- 1件目をDetailで開く。
- Prev/Nextで連続確認。
- Producer NoteまたはStatusを更新。
- 必要ならTask Linkから担当タスクへ移動。
Artistが自分の作業を探す:
- Tasks Tableへ移動。
- Assigneeで自分のメンバーをFilter。
- Statusがnot_started/in_progressのものを見る。
- Due Date順に並べる。
- Task Detailで関連Shot/Asset/Originalsを開く。
- 作業後にStatusをreviewへ変更。
6. Detail Page
6.1 Detail Pageの役割
Detail Pageは1つのレコードを深く見るための画面。
Tableは一覧、Detailは個別確認。
ショット、アセット、タスク、メンバー、ユーザーのそれぞれにDetailがある。
Detailは、関連レコード、リンク、Driveフォルダ、サムネイル、バージョン、ノート、ステータス、日付、カードレイアウトをまとめて見せる。
6.2 Detail Toolbar
Titleは現在のレコード名。ShotならShotCode、AssetならAsset Name、TaskならTask Nameのように、人間が識別しやすいentity_nameを優先する。
Prev/Nextは、同じTable内の前後レコードに移動するためのボタン。レビューやチェック作業で重要。
DiscussはForumまたは議論ページを開く。
CardsはDetail内のカード構成を編集する機能。
Save MenuはDetailカードレイアウトやプリセットを保存する機能。
View mode / Edit modeは、レイアウト編集や誤編集を防ぐための切り替え。
Preset SelectはDetailの表示構成を切り替える。
6.3 DetailのCard
Detailは、フィールドをカードとして配置して見せる。
カードにはTable型とSingle Field型がある。
Table型カードは複数フィールドをまとめる。
Single Fieldカードはサムネイル、バージョン、ノート、リンクなど、重要な1フィールドを大きく見せる。
カードはレビュー用、編集用、素材確認用、スケジュール確認用などに分けるとよい。
6.4 Detail Preset
Detail Presetは、カード構成を保存したもの。
例:
- Shot Review Preset
- Asset Review Preset
- Task Edit Preset
- Producer Notes Preset
- Media Check Preset
- Minimal Preset
Save Asで新しいプリセットを作る。
Revertで保存状態に戻す。
6.5 DetailのVersions Upload
DetailにはUpload Versionsのモーダルがある。
Upload Versionsでは、現在のentity、record_id、field_idに対してファイルをアップロードする。
複数ファイルを選べる。
アップロードされたファイルはVersions folderまたはOriginals/Proxies連携に入る。
アップロード後、UploadInboxやProxyJobsに記録され、Workerによるプロキシ生成対象になる場合がある。
ユーザー向けには「ファイルを直接Driveに置くより、MOTKのUploadから入れた方がVersionsやProxyと結びつきやすい」と説明できる。
6.6 DetailのSoft Navigation
Shell内ではDetailが静的に埋め込まれており、SoftNavでTableとDetailを切り替える。
通常ユーザーにSoftNavという言葉は不要だが、ユーザーガイドのトラブルシュートでは「画面が切り替わったように見えてもブラウザ全体は再読み込みされないことがある」と説明できる。
DetailのPrev/Nextは、Tableから引き継いだrowsまたはサーバーから取得したrowsを使って移動する。
6.7 Detailの日常ワークフロー例
Shotのレビュー:
- Shots Tableでレビュー対象をFilter。
- 1件目のShot IDまたはShotCodeをクリック。
- DetailでShotView、Comp、Versions、Notesを確認。
- 必要ならOriginalsを開く。
- Statusをreviewからapprovedへ変更。
- Prevで前、Nextで次へ移動。
Assetの確認:
- Assets Tableを開く。
- Asset Typeでcharacter/prop/environmentを絞る。
- Asset Detailを開く。
- AssetView、AssetView Versions、Linked Shots、Linked Tasksを確認。
- アセットが使われるショットへ移動。
Taskの作業確認:
- Tasks TableまたはSchedulerからTask Detailへ移動。
- Assignee、Due Date、Status、Shot Link、Asset Linkを確認。
- 必要素材をOriginalsまたはLinked Shot/Assetから開く。
- 作業後にVersionをUpload。
- Statusを更新。
7. CommonRenderer / 表示タイプ
CommonRendererは、field typeに応じて値の見せ方を変える共通レンダラー。
UserGuideでは、フィールドタイプごとに「表示」「編集」「保存される値」を説明するとよい。
7.1 id
idは機械用の一意識別子。
例:
- sh_0001
- as_0001
- tk_0001
- pm_0001
- us_0001
idは原則編集しない。
リンク、Driveフォルダ、タスク、スケジュール、プロキシ、Versionsなどの内部処理はidを基準にする。
7.2 entity_name
entity_nameは人間が見る名前。
例:
- ShotCode
- Asset Name
- Task Name
- Role
- User Name
DetailタイトルやLink chipの表示名に使う。
idとentity_nameは別物。名前が変わってもidは変わらない。
7.3 text
自由入力テキスト。
ノート、説明、メモ、補足、短い値に使う。
長文の場合はDetailのカードで見る方がよい。
7.4 select
選択式の値。
Status、Asset Type、Task Type、Departmentなどに使う。
選択肢はFields.optionsまたは過去入力値から生成されることがある。
新しい値を許可する設計の場合、入力値がoptionsに蓄積される。
7.5 checkbox
true/falseを扱う。
project_metaのEpisode/Act/Sequence/Scene/Shot表示設定や、UI設定に使われる。
7.6 date
日付を扱う。
Due Date、Schedule関連日付、作成日、更新日などに使う。
Timezoneと表示形式に注意する。制作管理では日付の1日ズレが大きな問題になるため、SettingsやSchedulerではTZも表示する。
7.7 json
機械用設定やページ設定を保存する。
UserGuideでは通常ユーザー向けには「編集しないフィールド」と説明する。
Admin向けには、PAGESやproject_metaに保存されるレイアウト・表示設定・PNAVIなどがJSONであると説明する。
7.8 originals
OriginalsはGoogle Drive上のオリジナル素材フォルダへのリンク。
MOTK_ORIGINALS内の対応フォルダを開く。
ユーザーはこのリンクから素材フォルダへ移動できる。
Originalsの中のファイルはアプリから勝手にリネーム・削除しない方針。
7.9 file_list
複数ファイルのリスト。
Materials、Refs、資料、撮影素材、コンセプトアートなどに使う。
UIではファイル名、数、タグ、リンクなどとして表示する。
7.10 thumbnails
サムネイルグリッド。
ShotView、AssetView、TaskView、Compなどの視覚確認に使う。
プロキシやDriveプレビューから表示する。
7.11 versions
バージョン管理用フィールド。
Latest versionを1枚だけ見せたり、version historyを選べるようにしたりする。
ファイルアップロード、プロキシ、Originals/Proxiesフォルダと結びつく。
7.12 link fields
link fieldsは他のentityへの関係を表す。
- asset_link: Assetへリンク
- shot_link: Shotへリンク
- task_link: Taskへリンク
- member_link: ProjectMemberへリンク
- user_link: Userへリンク
シートにはIDが保存される。UIでは名前を表示する。
Link Pickerで検索・選択できる。
リンクが解決されない場合、表示名ではなくIDが出ることがある。
8. Entities
8.1 Shots
Shotsは制作の最小または主要な映像単位。
代表フィールド:
- Shot ID
- ShotCode
- Episode
- Act
- Sequence
- Scene
- Shot
- Status
- TC @fps
- Artist Note
- Producer Note
- Frames
- ShotView
- ShotView Versions
- Materials
- Comp
- Comp Versions
- Asset Link
- Task Link
- Due Date
Shotsはレビュー、進捗管理、素材確認、タスク連携、アセット連携、スケジュール連携の中心。
8.2 Assets
Assetsは制作で使う再利用可能な要素。
代表フィールド:
- Asset ID
- Asset Name
- Asset Type
- Status
- AssetView
- AssetView Versions
- Shot Link
- Task Link
Assetsは、キャラクター、プロップ、背景、環境、衣装、小道具、モデル、リグ、素材などを扱う。
8.3 Tasks
Tasksは作業単位。
代表フィールド:
- Task ID
- Task Name
- Task Type
- Assignee
- Status
- Due Date
- Shot Link
- TaskView
- TaskView Versions
- Asset Link
Schedulerは主にTasksをカードとして扱う。
タスクはShotまたはAssetと結びつく。
8.4 ProjectMembers
ProjectMembersは制作上の役割または参加メンバー。
代表フィールド:
- Member ID
- Role
- Department
- User Link
- Task Link
Schedulerのlaneに出る場合がある。
Member Detailでは、member側のtask_linkフィールドを使ってAssigned Tasksカードを表示できる。Assigned TasksはTasks側Assigneeの逆引きを通常経路にせず、Member行に保存されたTask IDを元にTask Table presetの列順・表示非表示・sort/filter・列幅を引き継いで表示する。
UserとMemberを分けることで、Googleアカウントと制作上の役割を分離できる。
Task Linkは、担当者に紐づくTask一覧をMember Detail内で確認するためにも使える。
8.5 Users
UsersはGoogleアカウントや実ユーザー情報。
代表フィールド:
- User ID
- User Name
- Department
- Notes
SettingsのUser Access/Sharingと関係する。
8.6 Pages
PagesはTableやDetailなどの表示設定を保存するためのentity。
代表フィールド:
- Page ID
- Page Name
- Page Type
- Entity
- Config JSON
- Created By
Table presetやDetail presetやSchedView viewの保存に使われる。
9. Scheduler / SchedView
9.1 Schedule系の全体像
MOTKにはSchedule表示が2系統ある。
SchedViewは読み取り中心の表示画面。
Schedulerは編集中心の画面。
SchedViewはDailyとSlotの両方を表示できる。
SchedulerはSlot編集を行う。現在のモデルでは、Daily/SlotのView表示はSchedView、Slot編集はSchedulerに分かれている。
UserGuideでは「見るならSchedView、動かすならScheduler」と説明すると分かりやすい。
9.2 SchedView
SchedViewはスケジュールを読む画面。
できること:
- scheduleの切り替え
- Daily表示
- Slot表示
- Lane axis切り替え
- Interaction切り替え
- Zoom調整
- Inspector確認
- Card List検索
- Settings表示
- Lane visibility調整
- Task Display設定
- Fit
- Apply
- Save view
Dailyは日単位のトークン表示。日ごとに何があるかを大まかに見るのに向く。
Slotは時間・スロット単位のバー表示。作業時間、占有、流れを見るのに向く。
Lane axisは、縦または横のlaneをMember基準にするかAsset基準にするかの切り替え。
InteractionがViewならSchedView内で読み取り。EditにするとSchedulerへ移動し、Slot編集用の画面になる。
ZoomはDailyではday height、Slotではslot pixelに関係する。
9.3 Scheduler
Schedulerは編集画面。
できること:
- Slot上でカードを動かす
- カードをリサイズする
- 複数カード選択
- Undo
- Save As
- Publish
- Inspector編集
- Task Assetsのインラインリンク編集
- Lane width調整
- Inspector width調整
- Work hours設定
- Origin date設定
- Slot minutes設定
- Display field設定
- Asset conflict表示
- Taskless card表示
- Camera move badge表示
9.4 Schedulerのカード
カードはTaskを表すことが多い。
カードにはTask ID、Main field、Sub field、extra fields、status、assignee、duration、asset link、shot linkなどが表示される。
ステータスによりカード色が変わる。
未割り当てやtasklessは別色になる。
Asset conflictがある場合、警告的な表示になる。
Camera moveがある場合、カード内にbandやaccentが出る。
9.5 Scheduler Inspector
Inspectorは右側パネル。
タブ:
- INSPECTOR
- CARD LIST
- SETTINGS
INSPECTORは選択したカードの詳細や編集欄を表示する。
CARD LISTはカード一覧と検索。クリックで該当カードへジャンプ。
SETTINGSはschedule表示・lane・zoom・display fields・lane visibility・幅・fit/saveなどを扱う。
9.6 Save As / Publish
Save Asは、現在のscheduleを別名で複製して実験用または別案として保存する。
Publishは、作業中のscheduleを確定版として扱うための操作。
Publishは段階的な操作として説明する必要がある。
例:
- draft scheduleを作る
- reviewする
- snapshotとしてlockする
- locked snapshotをTasksへ反映する
現在のモデルでは、最初のPublishでSchedsのpublished timestampを設定してsnapshotをlockする。lock済みのscheduleでは編集が制限され、次のPublish操作でTasks側の予定フィールドへ反映する。
UserGuideでは、Publishの意味を慎重に書く必要がある。誤ってTasksに反映する操作は制作に影響が大きい。
9.7 Schedulerの日常ワークフロー例
制作進行が翌週の作業を組む:
- SchedViewを開く。
- Dailyで全体の作業密度を見る。
- LaneをMemberにする。
- 問題のありそうな日を見つける。
- InteractionをEditにしてSchedulerへ移動。
- Save Asで新しい案を作る。
- Slot上でカードを動かす。
- Card Listで未割り当てや締切近いカードを探す。
- InspectorでAssigneeやTask Assetsを確認。
- 問題なければPublishする。
SupervisorがAsset負荷を見る:
- SchedViewを開く。
- LaneをAssetにする。
- Slot表示にする。
- 同じAssetに作業が集中していないか確認する。
- Asset conflict表示があれば該当カードを選択。
- 関連Task/Shotへ移動して調整する。
Artistが自分の予定を見る:
- SchedViewを開く。
- LaneをMemberにする。
- 自分のlaneだけ表示する。必要に応じてMember DetailのAssigned Tasksも確認する。
- Dailyで今日・明日の作業を確認。
- カードをクリックしてTask detailを開く。
10. Settings
10.1 Settingsの役割
SettingsはMOTKの管理画面。
通常作業者ではなく、Admin、Editor、Pipeline担当者が使う。
Settingsはプロジェクトメタ、テーマ、PNAVI、Originals URL水和、Task計算式、Driveフォルダ、User Access、Sharing、Proxy Ops、Proxy Auditを扱う。
10.2 project_meta
project_metaはプロジェクト単位の設定を保存する。
Settingsではmeta_key、meta_value、meta_type、note、updated_atを一覧で見る。
updated_atは読み取り専用。
meta_typeはtext、number、checkboxなど。
project_metaには、ui_theme、pnavi.config.json、drive originals/proxies root id、proxy preset、schedule settingsなどが入る。
10.3 Theme
Themeはsystem/dark/lightを選べる。
保存先はproject_metaのui_theme。
次回ページロード時に反映される。
一部ではlocalStorageにも保存され、初期ちらつきを減らす。
10.4 PNAVI Config
PNAVI Configはproject_metaのpnavi.config.jsonに保存される。
プロジェクトナビゲーションの項目、ラベル、リンク、page、entity、enabled、targetなどを制御する。
Reset DefaultでShots, Assets, Tasks, Members, Users, Scheduleなどの標準構成に戻す。
ユーザー向けには「PNAVIはプロジェクトの入口を決める設定」と説明する。
10.5 Hydrate Originals URLs
Hydrate Originals URLsは、Drive上のOriginalsフォルダとシート上のOriginals URLを同期する操作。
対象はall/shot/asset/task。
これはデータ修正というより、アプリ管理用のリンクキャッシュを補完する処理として説明する。
実行すると、MOTK_ORIGINALS内の対応フォルダを見て、該当レコードのOriginals URLを埋める。
既存の有効リンクは維持する。
無効なリンクはクリアまたは更新されることがある。
10.6 Task Est Recalculate
Task Est Recalculateは、Tasksの推定日数・推定時間・計算式などを現在のproject_meta設定に基づいて再計算する。
対象例:
- 推定日数
- 推定時間
- 計算結果フィールド
内部的には sv_task_recalculate_v1 が使われる。完了済みタスクを含めるかどうかのオプションがあるため、運用時は対象範囲を確認してから実行する。
10.7 Drive Folders - Ensure Missing
Ensure All Foldersは、Shots/Assets/Tasksに対応するOriginalsフォルダが存在しない場合に作成する。
既存フォルダやファイルは動かさない。
これは安全な補完処理として説明できる。
10.8 Drive Folders Diff / Fix
Diffは、指定entityのデータとDriveフォルダの対応を比較する。
Fix Missingは、足りないフォルダだけを作成する。
既存ファイルの削除・移動・リネームは行わない方針。
10.9 User Access / Sharing
User Access / Sharingは、Users.permissionに基づき、DriveやSpreadsheetの共有状態を同期する。
役割:
- viewer
- editor
- admin
Admin listは管理用workbookのADMIN_USERS sheetに関係する。Users.permissionのeditor/viewerとは別に、ADMIN_USERSでis_admin=TRUEのユーザーが管理者として扱われる。
Sync Checkedは選択したユーザーを同期する。
Sync Mismatchesは、権限設定と実際の共有状態が合っていないものを同期する。
UserGuideでは「MOTK内の権限表示」と「Google Drive/Sheetsの実共有」がズレることがあるため、同期機能があると説明する。
10.10 Proxy Ops
Proxy Opsは、OriginalsとProxiesのroot id、proxy preset default、アップロード、ProxyJobs、UploadInbox、ProxyWorkersを管理する。
できること:
- originals root idを設定
- proxies root idを設定
- default proxy presetを設定
- Originalsへファイルアップロード
- Recent Proxy Jobsを確認
- Recent Uploadsを確認
- Workersを確認
Proxy Worker Kitとの連携説明もここに置ける。
10.11 Proxy Audit
Proxy Auditは、OriginalsはあるがProxyがないレコードを検出する。
Daily ScanをONにできる。
Hour、Limit、対象entityを設定できる。
Run Audit Nowで即時実行できる。
Latest Missing Proxiesで不足プロキシ一覧を見る。
Proxy Auditは、レビュー用サムネイルや軽量プレビューが足りない箇所を見つけるための機能。
10.12 Settingsの運用注意
Settingsは制作全体に影響する。
PNAVIやThemeは比較的安全。
Hydrate OriginalsやEnsure Missingは補完系。
Sharing Sync、Proxy Config、Task Recalculate、Publish系は影響範囲が大きい。
Admin以外は不用意に触らない方がよい。
11. DebugPanel
11.1 DebugPanelの役割
DebugPanelは、MOTKの状態を調べるための診断画面。
通常作業者向けではなく、問題報告、開発確認、回帰テスト、パフォーマンス確認、スキーマ確認に使う。
11.2 DebugPanelの主要カード
Performance Snapshot:
- route open
- paint speed
- first paint
- table paint
- cache restore
- raw timing
Viewer State:
- 現在のtable/entity/page/fieldIds/rowsLength/cache keyなど
- 2回目表示や復元問題の調査に使う
Regression Coverage:
- 受け入れ済みレポート
- live checks
- 現在の診断結果
Console:
- アプリのconsole buffer
- Panel側のlog
- Copy console可能
Runtime:
- google.script.runが使えるか
- server ping
- location
- URL params
Data Maps / Page:
- FIELD_TYPES
- LINK_MAPS counts
- Layout presets
Schema/Meta Health:
- project_meta-firstの健全性
- Fields/metadataの解釈
SchemaMeta / FieldTypes Health:
- field typesの検出
- entity_name fid検出
Last callFirst Trace:
- API fallbackや呼び出し順の調査
Scheduler Load Diagnostics:
- Scheduler読み込み状態の調査
FieldTypes diagnostics:
- shot/asset/task/member/userのentity_name fid検出
Originals resolver:
- Originals URL解決経路の確認
Entity samples:
- 各entityのid/name sample
Originals diagnostics:
- DriveBuilder、ServerAPIs、ProjectMetaRoot、Final URLの確認
Link replacer diagnostics:
- router detected
- gNav anchors replaced
- sample diff
- dry-run task link
Column Contract / No Index Binding:
- field_idに基づいて列を扱えているか
- column indexに依存していないか
Binding Integrity:
- fidからcell valueへの対応が壊れていないか
11.3 DebugPanelを使う場面
- Tableが遅い
- 2回目表示でも空になる
- Link chipがIDのまま
- Detailが違うrecordを開く
- Inline editが違う列に入る
- Scheduleが表示されない
- Cardが違うlaneに出る
- Originalsが開けない
- Proxyが表示されない
- Settingsが保存できない
- 権限同期がおかしい
- ThemeやPNAVIが反映されない
11.4 問題報告時にコピーすべきもの
- Copy report
- Copy console
- Viewer State JSON
- Performance raw JSON
- Column Contract結果
- Binding Integrity結果
- URL
- 操作手順
- 期待した結果
- 実際の結果
12. File / Drive / Originals / Proxies
12.1 MOTK Drive構造
MOTKはGoogle Driveにプロジェクトフォルダを持つ。
基本構造:
- MOTK[Project:...]
- MOTK_ORIGINALS
- MOTK_PROXIES
Originalsはオリジナルファイルを保持する。
Proxiesは軽量表示・レビュー用ファイルを保持する。
12.2 Originals
Originalsは元素材の保管場所。
MOTKはOriginals内の既存ファイルを勝手にリネーム・削除しない。
Originalsは制作上の信頼できる素材置き場として扱う。
Shot/Asset/Taskごとにフォルダが作られる。
例:
- 01shots/sh_0001__501A
- 02assets/as_0012__Sword100
- 03tasks/tk_0017__Lighting
12.3 Proxies
Proxiesはレビュー・サムネイル・軽量再生用の派生ファイル。
命名にはrecord id、timestamp、field_id、proxyが入る。
例:
- sh_0001_20250815-041700_fi_0013_proxy.mp4
- as_0012_20250815-041700_fi_0023_proxy.png
- tk_0017_20250815-041700_fi_0032_proxy.jpg
12.4 Proxy Workflow
- ユーザーがDetailまたはSettingsからファイルをアップロード。
- Originalsにファイルが置かれる。
- UploadInboxとProxyJobsに処理対象として記録される。
- Workerがプロキシを生成する。
- MOTK_PROXIESに保存される。
- Table/Detail/SchedViewでサムネイルやプレビューとして表示される。
12.5 Proxyが出ないときの説明
Proxyが出ない理由:
- Originalsにファイルがない
- Proxy jobがqueuedのまま
- Workerが動いていない
- Proxies root idが未設定
- Proxy Auditでmissingになっている
- field_idとproxy filenameの対応が合っていない
- Drive権限が足りない
- キャッシュが古い
ユーザー向けには、まずSettingsのProxy OpsとProxy Auditを確認するよう説明する。
13. Forum / Discussion
Forumは、MOTK内の議論・連絡・メモを扱う入口。
DetailのDiscussボタンからForumを開ける。
ForumはForumThreads、ForumPosts、ForumRecentを使って、record単位またはgeneralな会話を保存する。
主な用途:
- ショット単位の議論
- タスク単位の質問
- アセット単位の確認
- レビューコメント
- 制作進行メモ
- 決定事項の記録
レコードに紐づくthreadは、entityとrecord idの組み合わせで扱われる。一般連絡はgeneralなthreadとして扱う。
14. WorkerKit
WorkerKitはローカルまたは外部ワーカーでプロキシ生成などを行うためのキット。
基本的な流れ:
- WorkerKitをダウンロードする
- SettingsのProxy Configを確認する
- worker-bootstrapでspreadsheetIdやwebapp urlを取得する
- ローカルでWorkerを起動する
- ProxyJobsとUploadInboxを見る
- 生成済みProxyがMOTK_PROXIESへ入る
- Workerが止まっている場合はProxy Jobsがqueuedのままになる
15. Routing / URL
MOTKはURLパラメータで画面を切り替える。
代表例:
- Dashboard:
?page=DashboardまたはShell内のDashboard - Table:
?p=table&e=shots - Assets Table:
?p=table&e=assets - Tasks Table:
?p=table&e=tasks - Members Table:
?p=table&e=members - Users Table:
?p=table&e=users - Detail:
?page=DetailShot&entity=shot&id=sh_0001 - SchedView:
?p=schedview - Scheduler:
?p=schedule - Settings:
?page=Settings - UserGuide:
?page=UserGuide - DebugPanel:
?page=DebugPanelPage
ShellではDashboard/Table/DetailがSoft Navigationで切り替わる。
Settings、Debug、Guide、Schedule系は別ページまたは別タブになることがある。Schedule navは通常SchedViewを開き、Schedulerは編集導線から開く。
16. Page / Preset / Config
MOTKでは表示設定をPagesとして保存する。
Pagesはユーザーが見る画面ではなく、表示構成を保存するためのデータ。
Table preset:
- 表示列
- 列順
- sort/filter状態
- page type
- entity
Detail preset:
- card layout
- card title
- field set
- view/edit permission
SchedView view:
- view mode
- lane axis
- zoom
- visible lanes
- display fields
- lane width
- inspector width
- date range
UserGuideでは「データそのもの」と「見え方の保存」を明確に分ける必要がある。
セル編集はデータ変更。
Save/Save As/Revertは、主にページ設定やレイアウト保存。
17. キャッシュと復元
MOTKは速度向上のため複数のキャッシュを使う。
ユーザー向けに完全な技術名は不要だが、トラブルシュートでは役立つ。
主なキャッシュ:
- Viewer State
- Table rows cache
- Link maps cache
- AppData cache
- Versions context cache
- Bootpack
- Column Manifest
- Detail rows cache
- localStorage theme cache
- console buffer
キャッシュがあるため、画面が先に表示され、その後最新データに更新されることがある。
キャッシュが古いと、表示名、列順、リンク名、状態が一時的に古く見える場合がある。
問題が続く場合はDebugPanelのViewer StateとConsoleを確認する。
18. 権限と共有
MOTKには内部ロールとGoogle側共有がある。
内部ロール:
- admin
- editor
- viewer
Google側共有:
- Spreadsheetアクセス
- Drive folderアクセス
- Originals folderアクセス
- Proxies folderアクセス
SettingsのUser Access / Sharingは、内部設定とGoogle共有を合わせるための機能。
ユーザーが画面を開けない場合、MOTKのUsers設定とGoogle Drive/Sheets共有の両方を見る必要がある。
19. 典型的な作業シナリオ
19.1 新しいショットを作る
- Shots Tableを開く。
- Newを押す。
- 必須項目を入力する。
- Shot IDは自動生成される。
- ShotCodeはEpisode/Act/Sequence/Scene/Shot設定から生成または編集される。
- Statusをnot_startedにする。
- 必要ならDue Dateを入れる。
- Asset LinkまたはTask Linkを追加する。
- Detailを開いてOriginalsやVersionsを確認する。
19.2 ショットにアセットを紐づける
- Shots TableまたはShot Detailを開く。
- Asset Linkを編集する。
- Link PickerでAssetを検索する。
- 対象Assetを選択する。
- 保存する。
- Asset Detailから逆方向にShot Linkを確認する。
19.3 タスクを担当者へ割り当てる
- Tasks Tableを開く。
- FilterでAssigneeが空のものを出す。
- Assigneeをクリック。
- member_link pickerで担当Memberを選ぶ。
- Due DateとStatusを更新する。
- SchedViewで配置を確認し、編集が必要ならSchedulerへ移動する。
19.4 プロキシを作るために素材をアップロードする
- Detailを開く。
- Upload Versionsを開く。
- Filesを選ぶ。
- Uploadする。
- UploadInboxとProxyJobsに処理対象が作られる。
- SettingsのProxy Opsでjobを確認する。
- Worker実行後、Table/Detailでサムネイルを確認する。
19.5 スケジュール案を作る
- SchedViewで現在のscheduleを見る。
- Dailyで大まかな日付を確認。
- Slotで時間密度を確認。
- InteractionをEditにする。
- SchedulerでSave Asを押す。
- カードを移動・調整する。
- Inspectorで詳細を確認。
- 問題なければPublishする。
19.6 表示列を制作会議用に保存する
- Tableを開く。
- Fieldsで必要な列だけを表示。
- Sort/Filterを設定する。
- Save Asで「Production Meeting」などの名前をつける。
- 次回会議ではPresetから選ぶ。
19.7 Detailレビュー用レイアウトを作る
- Detailを開く。
- View/Edit modeを切り替えてカード編集を可能にする。
- Cardsを開く。
- ShotView、Comp、Status、Producer Note、Artist Note、Due Dateなどを配置する。
- Save AsでReview用Presetとして保存する。
20. トラブルシュート
20.1 Tableが遅い
確認するもの:
- 初回表示か2回目表示か
- row count
- selected entity
- page preset
- displayed fields count
- server search中か
- ALL表示か
- DebugPanel Performance Snapshot
- Viewer State
- Console
説明候補:
Tableは大量行を扱うため、初回表示はサーバー取得が入る。2回目はキャッシュ復元により速くなる想定。2回目でも遅い場合、キャッシュが使われていない、page/entityが一致していない、列構成が再計算されている、またはサーバー取得を待ってから描画している可能性がある。
20.2 一瞬空のTableが出る
原因候補:
- cached rowsを適用する前にempty stateが描画されている
- bootpack復元前にfull network load待ちになっている
- entity/page mismatchでcacheが無効化されている
- rowsLengthが0のsnapshotを読んでいる
- fieldIdsのreconcile中
ユーザー向け説明:
空表示が一瞬出ても、実データが0件という意味ではない場合がある。読み込み中やキャッシュ復元中の中間表示の可能性がある。
20.3 Linkが名前ではなくIDで出る
原因候補:
- LINK_MAPS未取得
- link map cacheが空または古い
- field typeが正しくlink typeとして解釈されていない
- target entityが解決できていない
- CommonRendererのlink target推定が失敗
確認:
- DebugPanelのLINK_MAPS counts
- Fields type
- Entity samples
- Console
20.4 Detailが開かない
原因候補:
- URLのentity/idが不足
- Routerのentity mapping問題
- record idがrowsにない
- sv_getRecordが返っていない
- google.script.runが使えない
- Shell SoftNavがDetail containerを表示していない
確認:
- URL
- DebugPanel Runtime
- Console
- Detail smoke diag
20.5 Inline editが保存されない
原因候補:
- field editableがfalse
- id/originals/system fieldを編集しようとしている
- API failure
- permission不足
- date/select/link value validation
- network/GAS error
説明:
保存されない場合、まずstatus areaとConsoleを見る。idやOriginalsはユーザー編集対象ではない。
20.6 Originalsが開けない
原因候補:
- Originals URLが未水和
- Drive folderがまだ作られていない
- Drive権限がない
- project_metaのoriginals root idがない
- Folder IDが無効
対処:
- SettingsのHydrate Originals URLs
- Drive Folders Diff
- Ensure Missing
- Originals diagnostics
20.7 Proxyが出ない
原因候補:
- OriginalsだけでProxyがない
- Proxy job未処理
- Worker停止
- Proxies root未設定
- Auditでmissing
- field_idとfilenameの対応不一致
確認:
- Settings Proxy Ops
- Proxy Audit
- Worker status
- Recent Proxy Jobs
20.8 Schedulerが空
原因候補:
- date range外
- lane visibilityで全lane非表示
- schedule idが違う
- task cardsがない
- view modeが違う
- display filters
- Scheduler load API failure
確認:
- Fit
- Lane visibility
- Card List
- Scheduler Load Diagnostics
- Console
20.9 Settingsが保存できない
原因候補:
- 管理権限がない
- project_metaがread-only mode
- invalid JSON
- missing required field
- API timeout
説明:
Settingsの保存は制作全体に影響するため、エラーが出た場合はLogとDebugPanelをコピーする。
21. この部の主要用語
MOTK: 制作管理アプリ本体。
Entity: Shot, Asset, Shot, Asset, Task, Member, User, Pageなどのデータ種別。
Record: Entity内の1行。たとえば1つのShot、1つのTask。
Field: 1つの列または属性。Status、Due Date、ShotCodeなど。
Field ID: fi_0001のような機械用フィールドID。
Field Name: 人間向けの列名。
Type: text, select, date, thumbnails, versions, asset_linkなどの表示・編集種別。
entity_name: 人間が見る名前。
id: 機械が使う一意ID。
Originals: 元ファイルのDriveフォルダ。
Proxies: 軽量プレビュー・サムネイル用ファイル。
Page: 表示設定や画面プリセット。
Preset: 保存されたTable/Detail/View設定。
PNAVI: Project Navigation。プロジェクトごとの上部ナビ。
GNAVI: Global Navigation。アプリ全体の上部ナビ。
DebugPanel: 診断コンソール。
SchedView: 読み取り用スケジュール表示。
Scheduler: 編集用スケジュール画面。
Lane: スケジュール上の行または列。MemberまたはAsset基準。
Card: Scheduler上の作業単位。多くはTask。
Publish: スケジュール変更を確定し、Tasks等へ反映する操作。
Save As: 表示設定やschedule案を別名保存する操作。
Hydrate: Driveやメタ情報から不足しているリンクやキャッシュを補完すること。
LINK_MAPS: IDを人間向けの名前へ変換するためのマップ。
FIELD_TYPES: Fields定義から作られるfield typeのマップ。
Viewer State: Tableの現在状態を保存したもの。
Column Manifest: 表示列の順序・構成を保存したもの。
25. Pages / PageConfig / Preset 詳細
25.1 Pagesの基本
Pagesは、MOTKの「見え方」を保存するためのデータである。
Tableで表示列を変える、Detailでカード配置を変える、SchedViewでlaneやzoomを変えるといった操作は、制作データではなくPages側のView Configとして保存される。
説明では、次の区別を明確にする。
- Shots/Assets/Tasks = 制作データ
- Pages = 表示設定
- project_meta/SystemConfig = プロジェクト設定
- Drive = ファイル実体
25.2 Pagesの保存対象
Pagesに保存される主な項目:
- pageId
- entity
- pageType
- pageName
- sharedWith
- config JSON
- createdBy
- createdAt
- modifiedBy
- modifiedAt
config JSONに入る主な項目:
- order
- widths
- hidden
- group
- filterGroups
- sort
- display fields
- lane visibility
- zoom
- mode
- column order
- detail card layout
- scheduler view settings
25.3 PageType
PageTypeは、Pagesの設定がどの画面のものかを示す。
想定されるPageType:
- table
- detail
- schedule
- editor
- view
Table presetはTable用、Detail presetはDetail用、SchedView viewはSchedule表示用である。
同じPageNameでも、entityやpageTypeが違えば別の設定として扱う。
現在のMOTKでは、View表示はSchedView、Slot編集はSchedulerが担当する。
25.4 pageId
pageIdはPages内の一意識別子である。
例:
- pg_default_shot
- pg_default_asset
- pg_...
通常ユーザーはpageIdを意識しないが、DebugPanel、URL、トラブルシュートでは重要になる。
25.5 Default Page
Pagesが空の場合や該当設定がない場合、MOTKはFields metadataからDefault Pageを合成することがある。
Default Pageは、id、entity_name、status、episode/act/sequence/scene/shotなどの基本列を選んで作る。
ユーザー向けには「初期表示はFields定義から自動で作られる。必要に応じてSave Asで自分の見え方を保存する」と説明する。
25.6 PageConfigの読み込み
TableやDetailは、現在のentityとpageIdに合うPageConfigを読み込む。
失敗例:
- not_found
- header_unrecognized
- pages_sheet_not_found
Presetが表示されない、保存したViewが見えない、Page selectorが空の場合の原因候補:
- Pagesシートがない
- Pagesシートのヘッダが想定と違う
- pageTypeが違う
- entityが違う
- pageIdが違う
- config JSONが壊れている
- Pagesのキャッシュが古い
25.7 PageConfigの保存
Save / Save As / Revertは、基本的にPageConfigを保存・復元する操作である。
Table上のセル値保存とは別である。
- セルを編集する = 制作データの変更
- Save menuで保存する = 見え方・レイアウト設定の変更
25.8 Pages Cache
Pages一覧は短時間キャッシュされる。
保存・削除時にはキャッシュが無効化される。
保存直後にリストが古い場合はRefreshまたは再読み込みで更新される。
25.9 Page Presetの日常例
制作進行用Table preset:
- ShotCode
- Status
- Due Date
- Assignee
- Task Link
- Asset Link
- Producer Note
レビュー用Table preset:
- ShotCode
- Status
- ShotView
- Comp
- Versions
- Artist Note
- Producer Note
アーティスト用Task preset:
- Task Name
- Status
- Due Date
- Shot Link
- Asset Link
- TaskView
- Notes
Schedule view preset:
- Lane = Member
- Mode = DailyまたはSlot
- Visible lanes = 自分の部署
- Display field = Task Name / ShotCode / Status
編集が必要な場合は、SchedViewのInteractionをEditにしてSchedulerへ移動する。
26. Fields / ServerFields / Schema 詳細
26.1 Fieldsの基本
Fieldsは、MOTKが各列をどう読むかを決める定義である。
Google Sheetsの1行目のfield_idと、Fieldsシートのmetadataを使って、MOTKは列の意味を判断する。
MOTKは列番号ではなくfield_idを基準に動く。Admin向けには「列を移動してもfield_idが正しければMOTKは読める。ただしfield_idが欠けると壊れる」と説明する。
26.2 field_idとlabel
field_idは機械用、labelは人間用である。
例:
- fi_0001 = Shot ID
- fi_0002 = ShotCode
- fi_0013 = ShotView
実際の番号はプロジェクト定義による。UserGuideでは、番号を固定例として断定せず、「例」と明記する。
26.3 SchemaResolver
SchemaResolverは、entityごとにid field、entity_name field、type別field、field_name別fieldを探す共通解決器である。
SchemaResolverが見つけるもの:
- id field
- entity_name field
- field nameからfid
- fidからfield meta
- fidからentity
- typeからfid一覧
26.4 entity_name
entity_nameは、IDを人間向けに見せるための基準である。
Link chip、Detail title、Dashboard feed、Forum entity link、Scheduler card labelなどで使われる。
entity_nameが正しく設定されていないと、IDだけが表示されたり、カード名が分かりにくくなったりする。
26.5 LinkMaps
LinkMapsは、IDから表示名へ変換するための辞書である。
例:
- sh_0001 -> 501A
- as_0003 -> Robot Arm
- tk_0012 -> Animation Block
- pm_0004 -> Animator A
- us_0002 -> user name
LinkMapsはShots, Assets, Tasks, Users, Membersから作られる。
LinkMapsがない、古い、または対象recordが存在しない場合はIDがそのまま出る。
26.6 Originals URL resolver
ServerFieldsにはOriginals URL resolverがある。
優先順位:
- Sheet上の保存済みOriginals URLを読む。
- allowFallbackがtrueならDrive scanを試す。
- 見つからなければDriveBuilderのensureEntityFolderでフォルダを自動作成する。
- URLを返す。
Open Originalsを押したとき、フォルダがまだなければ作成される場合がある。ただし通常操作として強調しすぎず、Admin/トラブルシュートで扱う。
26.7 Originals URLの保存値
Originals URLは、以下の形式から正規化される可能性がある。
- Google Drive folder URL
- Drive open?id形式
- folder id単体
UIでは最終的に https://drive.google.com/drive/folders/... 形式で開く。
26.8 ServerFieldsのトラブルシュート
Originalsが開けない原因候補:
- idがない
- entityが不明
- sheetがない
- id fieldが解決できない
- originals columnが解決できない
- Sheet上のOriginals URLが空
- DriveBuilderがない
- originals_root_urlがない
- Drive権限がない
LinkMapが解決しない原因候補:
- 対象entity sheetがない
- 2段ヘッダを正しく読めていない
- entity_name列がない
- LINK_MAPS cacheが古い
- record idが存在しない
27. DriveBuilder 詳細
27.1 DriveBuilderの役割
DriveBuilderは、MOTKプロジェクトのGoogle Driveフォルダ構造を保証・監査するためのサーバー側ヘルパーである。
目的:
- Originals rootを確認する
- entity rootを作る
- record folderを作る
- id__code形式にリネーム・統合する
- Versions field folderを作る
- 不足フォルダを検出する
- 不足フォルダを作る
- Soft delete用のdeleted folderへ移動する
27.2 基本フォルダ構造
Originals rootの下にentity rootを作る。
標準構造:
- 01shots
- 02assets
- 03tasks
- 04misc
- 05deleted
プロジェクトセットアップ時に必ず作るのは主に01shotsと02assetsである。03tasks、04misc、05deletedはオンデマンド作成される。
27.3 Entity root
entityとrootの対応:
- shot / shots -> 01shots
- asset / assets -> 02assets
- task / tasks -> 03tasks
- user / users -> 04misc
- member / members -> 04misc
- page / pages -> 04misc
- sched / card / misc -> 04misc
- deleted -> 05deleted
Admin向けには「Task foldersは必要になった時点で作られる」と説明する。
27.4 Record folder naming
record folderは基本的に以下の形である。
- id
- id__code
codeが分かる場合は id__code にする。
例:
- sh_0001__501A
- as_0002__RobotArm
- tk_0012__Lighting
codeが後から設定された場合、bare idフォルダをid__codeへ統合・リネームする処理がある。
27.5 Folder consolidation
DriveBuilderは、bare idフォルダとid__codeフォルダが両方ある場合、内容を統合し、重複フォルダをtrashへ送ることがある。
通常ユーザー向けには詳しく書かず、Admin向けに「重複フォルダがある場合は統合される可能性がある」と書く。
27.6 Versions folder
Versions fieldごとに、record folder内にversions用サブフォルダを作る。
命名規則:
- field_id__label
例:
- fi_0013__shotview
- fi_0023__assetview
- fi_0032__versions
古い shotview や assetview だけのフォルダがある場合、field_id付きの命名へ移行される可能性がある。
27.7 Versions folder repair
SettingsまたはDebug系から、versions field folderを修復する処理がある。
指定entity、field_id、label、limitをもとに、各recordにVersions folderを作る。
対象entity:
- shot
- asset
- task
Admin向けには「Versions fieldを追加した後、既存recordsに対応フォルダを作るための修復処理」と説明する。
27.8 Drive Diff / Fix Missing / Ensure All Folders
Drive Diffは、Sheets上のrecord IDとDrive上のrecord foldersを比較する。
出力:
- missing
- existing
- hubTotal
- driveTotal
Fix Missingは、Drive Diffでmissingになったrecord folderだけを作る。
Ensure All Foldersは、すべての主要entityに対して不足フォルダを作る。
UserGuideでは「既存フォルダや既存ファイルは削除しない」と明記する。
27.9 Soft Delete
Soft deleteはrecord folderを05deletedへ移動する。
削除ではなく移動である。
管理・保守寄りの操作として扱い、通常ユーザー向けには「削除ではなく退避」と説明する。
28. Settings詳細補足
28.1 Settingsの構成
Settingsは、複数の管理機能が同じ画面に集約されている。
大分類:
- project_meta editor
- Theme
- PNAVI Config
- Hydrate Originals URLs
- Task Est Recalculate
- Drive Folders Ensure Missing
- Drive Folders Diff / Fix
- User Access / Sharing
- Proxy Ops
- Proxy Audit
- Log
Settingsは日常作業画面ではなく、管理・保守・初期設定の画面として説明する。
28.2 project_meta editor
project_meta editorでは、meta_key、meta_value、meta_type、note、updated_atを管理する。
新規行はmeta_key、meta_value、meta_type、noteが必須。
updated_atはread-only。
project_metaが外部SpreadsheetからIMPORTRANGEされている場合、ローカル側ではread-onlyになる。この場合、Settings上では保存ボタンを押しても書き込めない。
28.3 project_meta管理モード
想定されるモード:
- local_sheet
- external_importrange_mirror
- formula_managed_local_sheet
- external_source_only
- missing
local_sheet: このSpreadsheet内のproject_metaを直接編集する。
external_importrange_mirror: 外部Spreadsheetからproject_metaをミラーしている。ローカルでは読み取り専用。
formula_managed_local_sheet: ローカルsheetだが数式管理されているため読み取り専用。
external_source_only: admin workbook側のproject_metaを参照している。
missing: project_metaが見つからない。
28.4 SystemConfig
SystemConfigは、ProxyやAuditなどのシステム設定を保存する別系統の設定である。
主なキー:
- drive.originals.root_id
- drive.proxies.root_id
- proxy.preset.default
- proxy.audit.enabled
- proxy.audit.hour
- proxy.audit.limit
- proxy.audit.entities
- proxy.audit.last_run_at
- proxy.audit.last_missing_count
- proxy.audit.last_error
project_metaはプロジェクト全体の意味設定。SystemConfigはシステム運用やProxy/Auditのための設定。
28.5 Access / Write Access
Settingsの読み取りと書き込みには権限チェックがある。
読むだけならaccess。
書き込みはwrite access。
Admin/Editor/Viewerの関係は権限章でまとめる。
28.6 Admin users
SettingsにはAdmin listがあり、管理用workbookのADMIN_USERS sheetと関係する。
Admin追加モーダルでは、ユーザーを選んでAdmin権限を付与する。
初期セットアップ時の「最初のAdminをどう作るか」は別途詳しく書く。
28.7 Sharing sync
Users.permissionを基準に、Google Drive/Sheetsの実共有と同期する。
Valid roles:
- viewer
- editor
AdminはUsers.permissionとは別に、管理用workbookのADMIN_USERS sheetで管理される。
Sync Checked: 選択したユーザーだけ同期。
Sync Mismatches: 設定と実共有がズレているユーザーを同期。
Refresh: 現状を読み直す。
28.8 Settings Log
SettingsのLogは、保守操作の結果やエラーを表示する。
保守操作を実行したらLogを確認する。
問題報告時はSettings Logをコピーする。
29. Upload / Versions / ProxyJobs 詳細
29.1 Uploadの全体像
MOTKのUploadは、単にDriveへファイルを置くだけではない。
Uploadすると、以下が同時に進む。
- 対象entity/record_id/field_idを決定する。
- record folderを解決または作成する。
- versions field folderを解決または作成する。
- Drive fileを作成する。
- UploadInboxへ行を追加する。
- ProxyJobsへpending jobを追加する。
- versions latest pointerを書き込む。
- Originals URLをtouch/updateする。
現行MOTKでは、独立したUpload専用ページを前提にせず、DetailのVersions UploadやSettingsのProxy Ops upload導線から入るものとして説明する。
29.2 UploadInbox
UploadInboxは、アップロードされたファイルの記録である。
主な列:
- upload_id
- ts
- entity
- record_id
- originals_folder_id
- drive_file_id
- drive_file_name
- uploaded_by
- proxy_job_id
- status
- field_id
- latest_pointer_json
29.3 ProxyJobs
ProxyJobsは、プロキシ生成ジョブを管理するシートである。
現行MOTKでは、Proxy Queueという別シートではなく、ProxyJobsとUploadInboxを分けて説明する。
主な列:
- job_id
- status
- source_file_id
- source_file_name
- entity
- record_id
- originals_folder_id
- proxies_folder_id
- output_file_name
- preset
- claimed_by
- claimed_at
- heartbeat_at
- finished_at
- error_message
- field_id
- source_updated_at
- output_file_id
- output_updated_at
status候補:
- pending
- claimed
- processing
- done
- error
Worker側の状態は、ProxyJobsのstatus、claimed_by、claimed_at、heartbeat_at、finished_at、error_messageなどで確認する。
29.4 latest_pointer_json
versions fieldは、最新ファイルへのpointerをJSONで保持する。
pointerには、source、fileId、name、mimeType、updatedAt、url、openUrl、previewUrl、thumb、fieldId、recordIdなどが含まれる。
通常ユーザーには「Latest Versionの参照情報」と説明する。Admin向けには「versions fieldが空に見える場合はlatest_pointer_jsonやfield_idを確認する」と書く。
29.5 Default versions field
Upload時にfield_idが指定されない場合、entity内のversions type fieldを探してdefaultにする。
優先候補:
- ShotView
- AssetView
- Versions
ただし、実際にはFields定義次第である。フィールド名やfield_idを固定前提にせず、versions typeのFields metadataから解決されるものとして説明する。
29.6 Requeue
Proxy Audit rowからProxy jobを再作成する機能がある。
OriginalsはあるがProxyがない場合に、再度ProxyJobsへ入れるための操作である。
29.7 Upload失敗時
原因候補:
- write accessがない
- entityがない
- record_idがない
- versions fieldが見つからない
- field_idがversions typeではない
- field_id entity mismatch
- upload fileがない
- drive.proxies.root_idが未設定
- originals folderが作れない
- Drive権限がない
報告時に必要な情報:
- entity
- record_id
- field_id
- file name
- Settings Log
- ProxyJobs row
- UploadInbox row
- Console
30. Proxy Ops / Proxy Audit / WorkerKit 詳細
30.1 Proxy Ops
Proxy Opsは、MOTKの軽量プレビュー生成パイプラインの管理画面である。
Originalsは素材の元ファイル。
Proxiesは表示・レビュー用の軽いファイル。
Proxy WorkerはProxyJobsを読み、ffmpegなどで変換し、Proxies folderへ出力する。
30.2 Proxy Config
必要設定:
- drive.originals.root_id
- drive.proxies.root_id
- proxy.preset.default
proxy.preset.defaultは通常 proxy_h264 のような変換presetである。
30.3 Proxy Overview
SettingsのProxy Opsでは以下を表示する。
- Recent Proxy Jobs
- Recent Uploads
- Workers
- Summary pills
Summaryはstatusごとの件数。
Proxyが出ない場合はここを最初に確認する。
30.4 WorkerKit画面
WorkerKit画面は、MOTK Proxy Worker Kitをダウンロードし、ローカルワーカーを動かすための入口である。
画面にある導線:
- Download Worker Kit
- Open GitHub Repo
- Setup手順
- MOTK Proxy Worker.bat
- 04_run_worker_once.bat
30.5 WorkerKit setup
- Worker Kitをダウンロードする。
- zipを展開する。
MOTK Proxy Worker.batを起動する。- MOTKのpublic URLを貼る。
- Detectを押す。
- Google sign-inを行う。
- ffmpeg、OAuth token、Spreadsheet accessを確認する。
- WorkerをStartする。
- SettingsのProxy OpsでWorkersとProxyJobsを見る。
30.6 Worker behavior
Workerはpending proxy jobを1件ずつ取得する。
処理中はjob statusを更新する。
完了すると、output file idやoutput updated atをProxyJobsに書き戻す。
Versions pointerも更新される。
複数Workerを使えば、処理スループットが上がる。
30.7 Media behavior
WorkerKit画面のmedia behavior:
- Video becomes MP4 proxy.
- Images become image proxy without resizing.
- PDFs pass through as original.
30.8 Run one job only
04_run_worker_once.bat は1件だけjobを処理する用途。
本番連続運用の前に1件だけ動かして確認する。
30.9 Proxy Audit
Proxy Auditは、OriginalsとProxiesの対応を検査する。
ProxyAudit sheetの主な列:
- scanned_at
- entity
- record_id
- display_name
- originals_folder_id
- originals_folder_url
- originals_file_count
- latest_original_file_name
- latest_original_file_id
- latest_original_modified
- proxy_status
- proxy_file_name
- proxy_file_id
- latest_job_status
- latest_job_id
- latest_upload_status
- note
30.10 Proxy Audit config
設定:
- enabled
- hour
- limit
- entities
- last_run_at
- last_missing_count
- last_error
- trigger state
対象entity:
- shot
- asset
- task
Daily ScanをONにすると、時間指定で定期検査される。
30.11 Proxy Auditの読み方
proxy_statusがmissingなら、OriginalsにファイルがあるがProxyがない。
latest_job_statusがerrorなら、Worker側で失敗した可能性が高い。
latest_upload_statusがqueuedのままなら、アップロード後の処理が進んでいない可能性がある。
originals_file_countが0なら、そもそもOriginalsにファイルがない。
latest_original_modifiedとoutput_updated_atを比較すると、Proxyが古い可能性を見ることができる。
30.12 Proxyトラブルシュート
Proxyが見えないときの順序:
- DetailのVersions fieldにlatest pointerがあるか。
- Originals folderにファイルがあるか。
- UploadInboxにqueued/doneの記録があるか。
- ProxyJobsにpending/error/doneがあるか。
- Workerが動いているか。
- Proxies root idが設定されているか。
- ProxyAuditでmissingになっていないか。
- DebugPanelでVersions/Originals resolverを見る。
31. Forum 詳細
31.1 Forumの基本
Forumは、MOTK内のスレッド型コミュニケーション画面である。
General ThreadとEntity Threadがある。
General Threadはプロジェクト全体や一般的な話題。
Entity Threadはshot/asset/task/member/userなど特定recordに紐づく議論。
現行MOTKでは、ForumThreads、ForumPosts、ForumRecentに保存され、APIは 2SV_DataCore.js 内の sv_forum_overview_v2 / sv_forum_post_v1 などで扱われる。
31.2 Forumの画面構成
左側:
- Threads
- Search
- Tags
- New Thread
- Refresh
- Thread List
右側:
- 選択中ThreadのTitle
- thread metadata
- Post button
- Composer
- Thread Posts
- Recent posts
31.3 Thread List
Thread Listには、thread type、entity:record_id、updated time、title、last post preview、tagsが表示される。
クリックすると該当Threadを開く。
検索やタグで絞り込める。
31.4 Tag Search
Tag Cloudからタグを選ぶと、そのタグを持つスレッドに絞り込む。
Composerではtagsをカンマ区切りで入力する。
タグ例:
- review
- proxy
- design
- animation
- blocking
- client
31.5 Composer
投稿モード:
- General Thread
- Entity Thread
入力欄:
- Thread Title
- Entity
- Record ID
- Post Title
- Body
- Tags
General Threadではthread titleが重要。
Entity Threadではentityとrecord_idがthread keyになる。
31.6 DetailからForumへ
DetailにはDiscussボタンがある。
DetailからForumを開く場合、entity、record id、titleをprefillできる。
ショットやタスクの議論をrecordに紐づけやすい。
31.7 Forumの日常ワークフロー
ショットレビューコメント:
- Shot Detailを開く。
- Discussを押す。
- Entity ThreadとしてForumが開く。
- Post Titleに要点を書く。
- Bodyにレビューコメントを書く。
- tagsにreview, animation, compなどを入れる。
- 投稿する。
プロキシ不具合報告:
- 対象TaskまたはShot Detailを開く。
- Discussを押す。
- Post Titleに「proxy missing」などを書く。
- Bodyに何が見えないかを書く。
- tagsにproxy, bugを入れる。
- 投稿後、AdminがProxy Auditを確認する。
General Threadで制作連絡:
- Forumを開く。
- New Threadを押す。
- General Threadを選ぶ。
- Thread Titleを書く。
- Bodyに連絡内容を書く。
- tagsをつける。
31.8 Forumで追加確認する点
保存先sheet名と基本API名は確認済みである。
32. Dashboard 詳細
32.1 Dashboardの位置付け
Dashboardは、MOTKの入口であり、プロジェクトの概要と最近の更新を見る画面である。
Shellに埋め込まれ、SoftNavでTable/Detailと切り替わる。
Dashboardは編集よりも「状況把握」「入口」「軽いOps」に向いている。
32.2 Dashboardの表示内容
主なWidget:
- Project Snapshot
- Update Feed
- Drive Repair / Ops
- Layout
Project Snapshotは、Shots、Assets、Tasks、Membersなどの件数を表示する。
Update Feedは、最近更新されたshots/assets/tasksなどを表示する。
Drive Repair / Opsは、Drive folder repair、safe folder sync、proxy pipeline state、WorkerKitへの導線を持つ。
Layoutは、Dashboard widgetsの配置をleft/center/right/hiddenに変更する。
32.3 Dashboard layout
Dashboardはleft column、center feed、right columnを持つ。
left/rightは隠せる。
both offの場合、centerだけの表示になる。
layout stateはlocalStorageに保存される。
32.4 Dashboardからの導線
Dashboardから移動できるもの:
- Shots Table
- Assets Table
- Tasks Table
- Members Table
- Detail page
- Forum thread
- WorkerKit
- Settings
- Debug
- Schedule / SchedView
Feed itemやstatをクリックしてTable/Detailへ移動する。
32.5 DashboardのDrive Repair / Ops
DashboardにもSettingsの一部に近いOps導線がある。
ボタン:
- Refresh
- Fix Shot
- Fix Asset
- Fix Task
- Ensure Drive Folders
- Worker Kit
- Download Worker
DashboardのOpsはショートカットであり、本格設定はSettingsで行う。
32.6 Dashboardの使用例
朝の確認:
- Dashboardを開く。
- Project Snapshotで件数を見る。
- Update Feedで直近更新を確認する。
- Tasksに移動して今日の作業を見る。
- SchedViewで作業量を見る。
Adminの軽い確認:
- Dashboardを開く。
- Drive Repair / OpsをRefresh。
- Proxy状態を見る。
- 必要ならWorkerKitへ移動。
- 問題があればSettingsで詳細確認。
33. 管理者向け初期セットアップ
33.1 初期セットアップの章を作る理由
MOTKは単なるHTMLアプリではなく、Sheets、Drive、Apps Script、権限、Workerが関係する。
UserGuideには日常作業編とは別にAdmin Setup Guideが必要である。
33.2 初期セットアップ候補手順
- Host Spreadsheetを用意する。
- Apps Scriptをデプロイする。
- HOST_SS_IDを設定する。
- project_metaを用意する。
- SystemConfigを用意する。
- Fieldsを用意する。
- Shots/Assets/Tasks/ProjectMembers/Users/Pagesを用意する。
- Drive Originals rootを作る。
- Drive Proxies rootを作る。
- project_metaまたはSystemConfigへroot id/urlを保存する。
- Settingsを開く。
- Themeを設定する。
- PNAVIを設定する。
- Ensure All Foldersを実行する。
- Hydrate Originals URLsを実行する。
- User Access / Sharingを設定する。
- WorkerKitをダウンロードする。
- Proxy Configを保存する。
- 1件だけVersions Upload -> Worker once -> Proxy表示までテストする。
- SchedViewで表示確認し、Schedulerで編集導線を確認する。
- DebugPanelでRun all checksを実行する。
33.3 セットアップ完了判定
完了条件:
- Dashboardが開く
- TableでShots/Assets/Tasksが表示される
- Detailが開く
- Link chipが名前で表示される
- Originalsが開く
- Uploadできる
- ProxyJobsにjobが入る
- Workerで1件処理できる
- DetailまたはTableにproxy/thumbnailが出る
- SchedViewとSchedulerが開く
- Settingsでproject_metaが読める
- DebugPanelで重大エラーが出ない
33.4 初期セットアップ時の注意
project_metaがexternal sourceの場合、local Settingsからは編集できない。
Drive root idが未設定だと、Originals/Proxy関連が動かない。
Fieldsのid/entity_name/typeが不正だと、LinkMaps、Detail title、Table columnsが壊れる。
Pagesが空でもDefault表示は可能だが、保存したpresetは出ない。
Google権限はSpreadsheetとDriveの両方が必要。
34. 権限・共有の補足
34.1 MOTK内権限とGoogle共有
MOTKの権限は、アプリ内でユーザーが何をできるかを決める。
Google共有は、実際にSpreadsheetやDrive folderへアクセスできるかを決める。
どちらか片方だけ合っていても、完全には動かない。
34.2 権限不一致の例
MOTKではeditorだが、Drive Originals folderにアクセス権がない:
- Tableは見える
- Detailは見える
- Originalsを開くとGoogle Drive側で拒否される
- Uploadできない可能性がある
Google Driveにはアクセスできるが、MOTKではviewer:
- Driveは見える
- MOTK上では編集できない
- Settings保存やUploadは拒否される可能性がある
34.3 User Access / Sharingで見るべきもの
- Users list
- permission
- checked users
- mismatches
- resources
- summary
34.4 権限問題の報告テンプレート
- どのGoogleアカウントか
- どのページか
- 何を押したか
- MOTK上のrole
- Google Drive/Sheetsで開けるか
- Settings Access summary
- エラー文
35. 追加ワークフロー
35.1 プロジェクト開始前のAdminワークフロー
- Host Spreadsheetを作る。
- Fieldsを確定する。
- 各entity sheetを作る。
- id/entity_name/typeの整合を確認する。
- project_metaを作る。
- PNAVIを作る。
- Pages defaultを確認する。
- Drive Originals/Proxiesを作る。
- Settingsでroot idを保存する。
- Drive Ensureを実行する。
- Hydrate Originalsを実行する。
- DebugPanelでSchema/Meta Healthを確認する。
- Test recordを作り、Table/Detail/Versions Upload/Proxy/SchedView/Schedulerを1周確認する。
35.2 新規スタッフ参加時
- UsersにGoogle accountを追加する。
- permissionをviewer/editorに設定する。
- ProjectMembersに制作上のroleを追加する。
- User LinkでUsersとProjectMembersを紐づける。
- SettingsのSharing Syncを実行する。
- そのユーザーがDashboardとTableを開けるか確認する。
- Drive Originals/Proxiesへのアクセスを確認する。
- 必要ならSchedViewのlane visibilityに追加し、編集が必要な場合はSchedulerでも確認する。
35.3 Fieldsを追加したとき
- Fieldsに新fieldを追加する。
- 対象entity sheetにfield_id列を追加する。
- type、label、editable、requiredを設定する。
- Pages presetに列を追加する。
- Detail presetにカードを追加する。
- versions typeならVersions folder repairを実行する。
- DebugPanelでFieldTypes Healthを確認する。
- TableとDetailで表示確認する。
35.4 新しいVersions fieldを追加したとき
- Fieldsでtype=versionsを追加する。
- 対象entity sheetへ列を追加する。
- Detail presetにversions cardを追加する。
- SettingsまたはDebugからversions folder repairを実行する。
- 既存recordにfield_id__labelフォルダができるか確認する。
- Test uploadをする。
- ProxyJobsが作られるか見る。
- Worker onceで処理する。
- Detailで最新versionが表示されるか確認する。
35.5 Drive folderが壊れたとき
- SettingsのDrive Diffを実行する。
- missing一覧を見る。
- Fix Missingで不足分だけ作る。
- Ensure All Foldersを必要に応じて実行する。
- Hydrate Originals URLsを実行する。
- 対象DetailでOriginalsを開く。
- DebugPanelのOriginals diagnosticsを確認する。
35.6 Proxy pipelineを復旧するとき
- Settings Proxy Opsでroot idを確認する。
- Recent Proxy Jobsを見る。
- Workerがonlineか確認する。
- Proxy AuditをRun Nowする。
- missing rowsを見る。
- 必要ならRequeueする。
- Worker onceで1件処理する。
- ProxyJobsがdoneになるか見る。
- Detailでproxy表示を確認する。
35.7 ページ表示がおかしくなったとき
- 別presetを選ぶ。
- Fields menuで表示列を確認する。
- Save/Revertを確認する。
- DebugPanel Viewer Stateを見る。
- Column Manifestを疑う。
- PageConfigが別entityのものを読んでいないか確認する。
- Pages sheetのentity/pageType/pageId/configを確認する。
36. FAQ補足
Q. Saveとセル編集の保存は同じですか?
違う。セル編集は制作データの値を更新する。Save/Save As/Revertは主に表示設定やレイアウトを保存する。
Q. Link fieldにIDが見えます。壊れていますか?
必ずしも壊れていない。LinkMapsがまだ読み込まれていない、対象recordの名前が取れない、またはcacheが古い場合はID表示になることがある。
Q. Originalsを押したらフォルダが作られました。正常ですか?
MOTKは対象recordのOriginals folderがない場合、アクセス時に作ることがある。Admin運用ではDrive EnsureやHydrateで事前に作っておく方がよい。
Q. Proxyがすぐ出ません。
Upload後、ProxyJobsに入り、Workerが処理してから表示される。Workerが止まっている場合やProxy rootが未設定の場合は出ない。
Q. Dashboardの左右パネルは消せますか?
消せる。Dashboardはleft/right panelをhiddenにでき、配置はlocalStorageに保存される。
Q. ForumはShot専用ですか?
Shot専用ではない。General ThreadとEntity Threadがあり、shot/asset/task/member/userに紐づけられる。
Q. project_metaが編集できません。
外部Spreadsheetからミラーされている、または数式管理されている場合はread-onlyになる。管理元のSpreadsheetを編集する必要がある。
Q. Pagesが空でもTableは開きますか?
Fields metadataからDefault Pageが合成される場合がある。ただし保存されたpresetは表示されない。
Q. Workerは何をしますか?
ProxyJobsからpending jobを取り、動画をMP4 proxyに変換し、画像をimage proxyとして扱い、PDFはoriginalとして通す。完了後にProxyJobsやVersions pointerを更新する。
38. Scheduler / SchedView 詳細
38.1 Scheduler / SchedViewの基本分類
Scheduler / SchedViewは、MOTKの中でも操作リスクが高い領域である。
TableやDetailは主にrecord単位の編集だが、Schedulerは複数のTask、担当、開始/終了、Duration、Asset conflict、Publish状態に影響する。
Schedulerは単なるカレンダー画面ではない。Taskを時間軸とlane上に配置し、制作上の負荷・順序・担当・競合を見ながら、必要に応じて保存・複製・公開するSchedule editorである。
SchedViewはScheduleを読むための表示画面である。
SchedulerはScheduleを編集するための画面である。
38.2 SchedView
SchedViewは読み取り中心のSchedule viewerである。
できること:
- Daily表示
- Slot表示
- Member lane表示
- Asset lane表示
- View / Edit interaction切り替え
- Zoom調整
- Lane visibility調整
- Display fields調整
- Card list検索
- Inspector確認
- Schedulerと同じ視覚要素の一部共有
SchedViewは、今のスケジュールを理解する、密度を見る、担当やAssetごとの偏りを見る、編集前に確認するための画面である。
38.3 Scheduler
Schedulerは編集中心のSchedule boardである。
できること:
- Cardを移動する
- Cardをresizeする
- 複数Cardを選択する
- Laneを変える
- Date / Slotを変える
- InspectorでCard内容を確認・編集する
- Save Asする
- Publishする
- Undo modalを使う
- Snapshot / named snapshotを使う
- Settingsで表示・編集条件を調整する
Schedulerは計画を変える画面である。UserGuideでは、ViewとEditの違いを強く説明する。
39. SchedView 詳細
39.1 SchedViewの一文説明
SchedViewは、スケジュールを読むためのビューアである。Dailyで日ごとの密度を見たり、Slotで作業の時間幅を見たり、Member/Assetごとのlaneで負荷や競合を確認する。
39.2 SchedView toolbar
SchedView toolbarにあるもの:
- schedule switch
- Mode: Daily / Slot
- Lane: Member / Asset
- Interaction: View / Edit
- Zoom
- Fit
- Apply
- Save view
- Card List search
- Settings / display fields
- Lane visibility
39.3 Schedule switch
Schedule switchは、複数のscheduleやviewを切り替えるためのselectである。
選ぶ対象はschedule本体、またはPagesに保存されたSchedView viewである。
39.4 Mode: Daily
Dailyは日単位で見る表示である。
向いている用途:
- 1日ごとの作業量を見る
- 今日・明日・今週の密度を見る
- PMやDirectorが会議で全体を確認する
- Artistが自分の予定をざっくり確認する
Dailyでは細かいslot幅より、日ごとのまとまりが重要である。
39.5 Mode: Slot
Slotは時間またはslot単位で見る表示である。
向いている用途:
- 作業の長さを見る
- 同じ日に複数Taskが重なっていないか見る
- Lane上の隙間を見る
- Asset conflictやMember負荷を見る
SlotはSchedulerの編集画面と近い見た目を持つが、View interactionでは読み取り専用である。
39.6 Lane: Member
Member laneは、担当者または制作上のroleごとにScheduleを見る。
向いている用途:
- 担当者の作業量を見る
- 誰に負荷が集中しているか見る
- 空いているMemberを探す
- Artistが自分のlaneを見る
39.7 Lane: Asset
Asset laneは、AssetごとにScheduleを見る。
向いている用途:
- 同じAssetに作業が集中していないか見る
- Asset conflictを確認する
- Character / prop / set単位の負荷を見る
- Asset Detailと行き来して調整する
39.8 Interaction: View
Viewは読み取りモードである。
会議、レビュー、個人確認ではViewを基本にする。
誤ってScheduleを変更しないため、UserGuideではまずViewで確認する流れを書く。
39.9 Interaction: Edit
EditにするとSchedulerへ移動し、Slot編集用の操作に入る。
現行MOTKでは、Daily + ViewとSlot + ViewはSchedView、Slot + EditはSchedulerで扱う。
39.10 Zoom
Zoomは表示密度を変える。
Dailyではday height、Slotではslot pixelや時間幅の見え方に関係する。
Zoomはデータを変えず、見え方だけを変える。
39.11 SchedView Inspector
SchedViewにもInspectorがある。
SchedViewのInspectorは確認用である。TaskやCard dataを変更する場合はScheduler Editへ移動する。
39.12 SchedViewの日常ワークフロー
PMが朝に確認する:
- SchedViewを開く。
- Daily表示にする。
- LaneをMemberにする。
- 今日と明日の密度を見る。
- 負荷が高いMemberを確認する。
- Card Listで締切近いTaskを探す。
- 必要ならTableやDetailを開く。
- 必要ならInteractionをEditにしてSchedulerへ進む。
SupervisorがAsset負荷を見る:
- SchedViewを開く。
- Slot表示にする。
- LaneをAssetにする。
- Asset conflictがあるCardを見る。
- 該当Task/Asset Detailを開く。
- PMと調整する。
Artistが自分の予定を見る:
- SchedViewを開く。
- LaneをMemberにする。
- 自分のlaneだけ表示する。
- Dailyで今日の作業を見る。
- CardをクリックしてTask Detailを開く。
40. Scheduler画面構成 詳細
40.1 Scheduler toolbar
Scheduler toolbarには、Scheduleの選択、保存、Publish、Undo、Settings、表示切替、Lane操作、Zoomや幅調整などがまとまる。
40.2 Grid area
Grid areaはScheduleの本体である。
ここにlane、date axis、slot、Cardが表示される。
操作:
- Card選択
- Drag
- Resize
- Drop
- Multi select
- Lane scroll
- Date scroll
40.3 Date axis
Date axisはScheduleの横または縦の時間軸である。
Dailyでは日付単位、Slotでは時間またはslot単位で見える。
40.4 Lane headers
Lane headersはMemberやAssetの名前を表示する。
Lane visibilityやLane orderの影響を受ける。
40.5 Asset column
SchedulerにはAsset columnがある。
Asset columnはAsset conflict、Asset grouping、Asset lane確認に関係する。
40.6 Inspector
Inspectorは選択したCardの情報を見る場所である。
主な内容:
- Card title
- Task link
- Assignee
- Start / End
- Duration
- Status
- Asset links
- Shot links
- Notes
- Conflict info
40.7 Inspector resizer
Inspector resizerは、Inspectorの幅を調整する。
大きい画面では広げ、小さい画面では畳む。
40.8 Settings modal / inline settings
SchedulerにはSettings modalがあり、InspectorのSettings tab内にdocked/inline表示される場合がある。
SettingsはSchedule表示や編集設定に影響する。
41. Card 詳細
41.1 Cardとは
CardはSchedule上の作業単位である。
多くの場合、CardはTaskを表す。
ただし、taskless cardのように、まだTask recordへ完全に紐づいていない作業単位もある。
41.2 Cardの表示要素
Cardに表示される要素:
- Task ID
- Main field
- Sub field
- Extra fields
- Status
- Assignee
- Start / End
- Duration
- Asset link
- Shot link
- Conflict indicator
- Camera move indicator
- Taskless marker
表示されるfieldは、Scheduler/SchedViewのdisplay fields設定に依存する。
41.3 Card status color
Cardの色はStatusに応じて変わる。
例:
- not_started
- in_progress
- review
- approved
- completed
- blocked
色は、進捗や注意状態を一目で見るための補助である。
41.4 selected / multi-selected
selectedは現在選択中のCardである。
multi-selectedは複数選択中のCardである。
複数選択では、まとめて移動できる場合がある。
41.5 unsaved
unsavedは、画面上では変更されたが保存が完了していない状態である。
保存中や失敗時はstatus areaを確認する。
41.6 taskless
taskless cardは、Task recordに紐づいていない、またはTaskとして未確定のSchedule cardである。
メモ、仮置き、作業枠、未確定予定に使われる可能性がある。
最終的にはTask recordへ変換するか、対応するTask Linkを持たせる運用が必要である。
41.7 camera-move
camera-moveは、撮影やカメラ移動に関係するCardを視覚的に区別する表示である。
Stop-motion/VFXでは、camera moveは撮影・モーションコントロール・コンポジットの連携に影響するため、Schedule上で視覚的に区別する価値がある。
41.8 asset-conflict
asset-conflictは、同じAssetに関係する作業が重なっている、または競合している可能性を示す。
asset-conflictが出た場合、Schedulerだけで直すのではなく、Task DetailとAsset Detailも確認する。
41.9 Card close/remove
Card close/removeは、Schedule上の配置を外す操作として説明する。
現行MOTKでは、Cardを消すことはTask record自体の削除ではなく、Schedule card rowまたは配置の削除として扱う。
Taskを削除する操作と混同しないように説明する。
41.10 Card resizer
Card resizerは、Cardのdurationやslot幅を変える操作である。
Resizeした結果がTask側のestimateへ反映されるか、Schedule側の配置情報として保存されるかは、Publishや設定との関係で説明する。
42. Lite token / Daily token
42.1 Lite tokenとは
Lite tokenは、Daily表示などで使う軽量なCard表現である。
Slot cardほど大きく表示せず、日ごとの予定を短く見せる。
42.2 Lite tokenの表示
Lite tokenに表示されるもの:
- Main field
- Sub field
- Status color
- Assignee
- Task / Taskless区別
42.3 DailyとSlotの違い
Daily:
- 日単位で見る
- 密度を見る
- 会議向き
- 全体把握向き
Slot:
- 時間またはslot単位で見る
- 長さを見る
- 編集前確認向き
- Scheduler編集に近い
43. Drag / Resize / Drop 操作
43.1 Drag preview
Drag previewは、Cardを動かしている途中に表示される仮表示である。
Drop前にどこへ置かれるかを確認する。
43.2 Drop slot line
Drop slot lineは、Cardを置く候補位置を示す線である。
Slotの境界や日付の境界を確認するために使う。
43.3 Gap marker / gap hitbox
Gap markerはSchedule上の空きや挿入候補を示す。
Gap hitboxは、その空きへCardを差し込むための操作領域である。
43.4 複数Card移動時の注意
複数Cardを移動すると、相対位置、日付、lane、durationの関係がまとめて変わる可能性がある。
Publishや保存の前に、以下を確認する。
- すべて同じ意図で移動したか
- 担当者が変わっていないか
- 日付がずれていないか
- Asset conflictが増えていないか
- Completed taskを意図せず動かしていないか
44. Inspector 詳細
44.1 Inspector tab
Inspector tabは、選択したCardの詳細を見る場所である。
表示候補:
- Card ID
- Task ID
- Task name
- Assignee
- Status
- Start
- End
- Duration
- Asset Link
- Shot Link
- Notes
- Conflict information
44.2 Card List tab
Card ListはSchedule上のCard一覧である。
できること:
- Card検索
- Statusで確認
- Assigneeで確認
- Tasklessを探す
- クリックして該当Cardへジャンプ
Scheduleが大きいときはCard Listから探す。
44.3 Settings tab
Settings tabではSchedule表示・編集の設定を行う。
扱うもの:
- Work hours
- Slot minutes
- Origin date
- Display fields
- Lane visibility
- Lane width
- Inspector width
- Asset width
- Color settings
44.4 Date picker overlay
Date picker overlayは、日付を直接選ぶためのUIである。
日付がずれる場合はtimezone guardやproject timezoneを確認する。
45. Lane管理
45.1 Lane visibility
Lane visibilityは、表示するlaneを選ぶ設定である。
部署、担当者、Asset種別などに応じて絞り込める。
45.2 Lane order
Lane orderは、laneの並び順である。
会議では、並び順を固定しておくと話しやすい。
45.3 Lane width
Lane widthは、laneの幅である。
名前が長い、Cardが多い、Inspectorを開いている場合に調整する。
45.4 Member laneとAsset laneの切り替え
同じScheduleでも、Member laneとAsset laneで見方が変わる。
Member lane:
- 人の負荷を見る
- 担当者ごとに整理する
Asset lane:
- Asset競合を見る
- Assetごとの作業集中を見る
46. Save View / Save As / Publish 詳細
46.1 Save View
Save Viewは、SchedViewの見え方を保存する操作である。
保存対象:
- Mode
- Lane axis
- Zoom
- Visible lanes
- Display fields
- Date range
- Width settings
Save ViewはTask dataを変えない。
46.2 Save As
Save Asは、現在のscheduleまたは表示設定を別名で保存する操作である。
Schedulerで大きな変更をする前にSave Asを推奨する。
使う場面:
- 来週案を作る
- 別案を比較する
- Published scheduleを直接編集せずdraftを作る
- 会議用の見方を保存する
46.3 Publish
Publishは、draftや作業中のscheduleを確定・反映する操作である。
現行MOTKではprogressive Publishとして扱う。
- 未publishedのscheduleをPublishすると、published timestampを設定してlocked snapshotにする。
- locked snapshotのPublishでは、Schedule cardをTasksへ反映する。
- Tasksへ反映するとき、Completed tasksはskipされる。
UserGuideではPublishを最も慎重に説明する。
46.4 Publish前チェックリスト
Publish前に確認するもの:
- 正しいscheduleを開いている。
- 正しいView/Modeで見ている。
- Member laneで負荷を確認した。
- Asset laneで競合を確認した。
- Completed taskを意図せず変えない。
- Taskless cardの扱いを確認した。
- Timezone warningがない。
- Save queueが詰まっていない。
- Card Listで未割り当てを確認した。
- 関係者に確認した。
- 必要ならSnapshotを作った。
- Publish後にTable/Task側で値が反映されるか確認する。
46.5 Publish後チェック
Publish後に確認するもの:
- Schedulerを再読み込みしてCard位置が残るか。
- SchedViewで同じscheduleが見えるか。
- Tasks Tableで担当、開始日、終了日、orderが想定通りか。
- Completed tasksがskipされているか。
- DebugPanelやConsoleにfatal errorがないか。
46.6 Publishを押してはいけない場面
- どのscheduleか分からない。
- Timezone warningがある。
- Save queueが残っている。
- Asset conflictを確認していない。
- Completed taskが混ざっている可能性がある。
- Taskless cardの扱いが未確認。
- Undo/Snapshotが取れていない。
- PM/Supervisorの確認前。
47. Undo / Snapshot 詳細
47.1 Undoの位置付け
Undoは、Scheduler上の変更を戻すための機能である。
Undo modalには履歴リストがある。
Undoは安全装置だが、Publish前の確認やSave Asの代わりにはならない。
47.2 Undo item
Undo itemの種類:
- Card move
- Card resize
- Lane change
- Field edit
- Batch edit
- Snapshot restore
- Publish-related action
Undo itemは、どのscope、どのschedule、どのactorの操作かを確認して使う。
47.3 Snapshot
Snapshotは、Scheduler状態の保存点である。
使う場面:
- 大きな変更前
- Publish前
- 会議前
- 別案比較前
- Undoだけでは不安なとき
Snapshotは戻れる場所として説明する。
47.4 Named Snapshot
Named Snapshotは、名前付きの保存点である。
例:
- Before Monday PM Review
- Director Alt A
- Pre Publish Check
重要な変更前にはNamed Snapshotを使う。
現行実装では、名前付きsnapshotはrolling cleanupから除外される。
47.5 UndoとRevertの違い
Undo: 直前または履歴上の操作を戻す。
Revert: 保存済み設定やpresetへ戻す。
Snapshot restore: 特定時点のScheduler状態へ戻す。
Publish: Scheduleを正式化またはTasksへ反映する。
47.6 Undo使用時の注意
Undo使用時に確認するもの:
- 正しいscheduleか。
- 正しいUndo itemか。
- 他の人の操作を戻していないか。
- Publish後の状態を戻そうとしていないか。
- Undo後に保存またはPublishが必要か。
48. Timezone guard
48.1 Timezone guardとは
Timezone guardは、project timezoneや実行環境timezoneが不足・不一致の場合に、Schedule操作を止める安全装置である。
Schedulerでは日付・slot・durationが重要なので、timezoneの不一致は重大な問題になる。
48.2 いつ出るか
- project timezoneが未設定
- Apps Script timezoneとproject timezoneが合わない
- browser側の日付解釈が不安定
- Schedulerが日付計算を安全にできない
48.3 UserGuideでの説明
日付が1日ズレるとSchedule全体が壊れる可能性がある。
Timezone warningが残っている場合はPublishしない。
Settingsやproject_metaでtimezoneを確認する。
49. Task recalculationとScheduler
49.1 Task Est Recalculate
Task Est Recalculateは、Tasksの推定日数・推定時間・計算式を再計算する管理操作である。
対象フィールドは固定field IDではなく、現行のFields metadataとproject_meta設定に従う。
49.2 Schedulerとの関係
SchedulerのCard duration、start/end、work hours、slot minutes、Task estimateは相互に関係する。
Schedule上でCardの長さを変更した場合、それがTaskのestimateへ反映されるか、Schedule専用の配置情報として保存されるかは、Publishや設定との関係で説明する。
確認すべき観点:
- Scheduler上のduration変更がTask sheetへ反映されるか。
- Task Est RecalculateがScheduler配置に影響するか。
- Publish時にTask側の開始/終了/担当が更新されるか。
- Schedule draftではTaskを変えず、Publishで反映するか。
49.3 Task Recalculateを使う場面
- project_metaのestimate ruleを変えた。
- Task typeやdepartmentごとの計算式を変えた。
- Task durationが古い。
- Scheduler上のdurationとTask上のestimateがずれて見える。
49.4 Task Recalculateの注意
Task Recalculateは広い範囲に影響する。
完了済みタスクを含めるかどうかを確認する。
実行前後でTasks TableとSchedulerを確認する。
50. Schedule Settings
50.1 Work hours
Work hoursは、1日の作業時間帯である。
例:
- start = 09:00
- end = 18:00
- lunch breakを考慮するか
Schedulerのduration計算やCard配置に影響する可能性がある。
50.2 Slot minutes
Slot minutesは、Schedulerの最小時間単位である。
例:
- 15分
- 30分
- 60分
Slot minutesが小さいほど細かく配置できるが、画面は密になる。
50.3 Origin date
Origin dateはSchedule表示の基準日である。
間違えるとSchedule全体がずれて見える。
50.4 Display fields
Display fieldsはCard内に出すfieldを選ぶ設定である。
候補:
- Task Name
- ShotCode
- Asset Name
- Status
- Assignee
- Due Date
- Task Type
- Department
実際の表示はFields metadataとTask/Shot/Asset link解決に依存する。
50.5 Main field / Sub field
Main fieldはCardで最も目立つ文字である。
Sub fieldは補助情報である。
例:
- Main = Task Name
- Sub = Assignee / Due Date
- Extra = ShotCode / Status
51. Schedule保存対象の分類
51.1 View settings
View settingsは見え方である。
保存対象:
- Mode
- Lane axis
- Zoom
- Visible lanes
- Display fields
- Widths
- Date range
Pagesまたはview configに保存される。
51.2 Schedule layout
Schedule layoutはCard配置である。
保存対象:
- Card lane
- Card date
- Card start/end
- Card order
- Card size
- Taskless card
SchedulerのSave/Publishで保存される。
51.3 Task data
Task dataはTasks sheetの値である。
例:
- Assignee
- Status
- Start Date
- End Date
- Due Date
- Duration
- Task Order
PublishまたはInspector編集で反映される可能性がある。
52. Schedule状態モデル
52.1 Draft
Draftは、まだ公開されていない編集途中のScheduleである。
試案、別案、調整中に使う。
52.2 Working
Workingは、現在編集しているScheduleである。
保存済みか未保存かをstatus areaで確認する。
52.3 Snapshot
Snapshotは、戻れる保存点である。
Named Snapshotは名前付きの重要保存点である。
52.4 Published
Publishedは、Scheduleが正式版として扱われる状態である。
現行MOTKでは、published timestampが入るとlocked snapshotとして扱われる。
52.5 Locked
Lockedは、直接編集できない状態である。
Published scheduleはlock indicatorで表示される。
編集したい場合はSave Asでdraftを作る。
53. Schedulerの日常ワークフロー
53.1 PMが週次スケジュールを調整する
- SchedViewを開く。
- Dailyで今週の密度を見る。
- LaneをMemberにする。
- 負荷が高いMemberを確認する。
- InteractionをEditにする。
- Schedulerで対象scheduleを確認する。
- Save Asで週次案を作る。
- Named Snapshotを作る。
- Cardを移動・resizeする。
- Asset laneでconflictを見る。
- Card Listで未割り当てを見る。
- Timezone warningがないことを確認する。
- Save queueが空になるまで待つ。
- Publish前チェックを行う。
- SchedViewで見え方を確認する。
- 問題なければPublishする。
53.2 SupervisorがAsset衝突を確認する
- SchedViewを開く。
- Slot表示にする。
- LaneをAssetにする。
- asset-conflict cardを見る。
- Task Detailを開く。
- Asset Detailを開く。
- 作業順序を確認する。
- 必要ならTaskのAssigneeや日付を調整する。
- PMに相談する。
- PMと確認してPublishする。
53.3 Artistが自分の作業だけを見る
- SchedViewを開く。
- Member laneにする。
- 自分のlaneだけ表示する。
- Dailyで今日のTaskを見る。
- CardからTask Detailを開く。
- 作業後にStatusを更新する。
53.4 Directorがレビュー日程を見る
- SchedViewを開く。
- Daily表示にする。
- StatusやDisplay fieldsをreview向けにする。
- ShotやTaskをDetailで開く。
- ForumまたはDetail Noteでコメントする。
54. Schedulerトラブルシュート
54.1 Boardが空
原因候補:
- date range外
- schedule idが違う
- view modeが違う
- lane visibilityで全lane非表示
- Cardがない
- load API failure
- timezone guardで止まっている
確認:
- URLの
?p=schedule/?p=schedview - schedId
- Fit
- Lane visibility
- Card List
- DebugPanel Scheduler Load Diagnostics
- Console
54.2 Cardsが見えないがCard Listにはある
原因候補:
- 現在のdate range外
- laneが非表示
- zoomが極端
- slot minutesが合っていない
- card heightが小さい
- filter/display設定
対処:
- Fitを押す
- Lane visibilityを全表示にする
- Zoomを戻す
- Card Listから該当Cardへジャンプする
54.3 Cardを動かしたのに保存されない
原因候補:
- View modeで見ている
- Published/locked scheduleを編集しようとしている
- Save queueが失敗した
- timezone guardが出ている
- write accessがない
- network/GAS error
確認:
- status area
- Console
- Settings Access
- Scheduler save path
54.4 Publish後にTaskが変わっていない
原因候補:
- 最初のPublishでlocked snapshotになった段階で、Tasks反映は次のPublish操作だった。
- Publish対象が別schedule。
- Completed tasksがskipされた。
- Taskless cardだった。
- Save queueが残っていた。
- Publish APIが失敗した。
確認:
- Publish status message
- Tasks Table
- SchedView
- Console
- DebugPanel
54.5 Undoできない
原因候補:
- Undo historyがない
- Snapshotがない
- すでにPublished/lockedで直接戻せない
- 他ユーザー操作とconflictしている
- Undo modalが開いていない
- API failure
54.6 日付が1日ずれる
原因候補:
- project timezone未設定
- Apps Script timezone不一致
- browser timezoneとの差
- date fieldの保存形式
対処:
- Timezone guardを確認する
- Settings/project_metaのtimezoneを確認する
- Publishしない
- DebugPanelに報告する
54.7 Asset conflictが消えない
原因候補:
- 同じAssetを複数Taskが同時に使っている
- Asset linkが古い
- Taskの開始/終了が重なっている
- Asset laneで見ていない
- cacheが古い
対処:
- SchedViewをAsset laneにする
- Task DetailでAsset Linkを見る
- Asset DetailでLinked Tasksを見る
- Schedulerで日付や担当を調整する
- SchedViewを再読み込みする
55. Acceptance test観点
55.1 Schedulerは完了判定のcore flow
Acceptance briefでは、Scheduler/SchedViewはoperational enough for normal useであることがcompletion criteriaに含まれている。
UserGuideでも、Schedulerはオプションではなく、MOTKの中核機能として扱う。
55.2 テストで見るべき項目
?p=scheduleが開く。?p=schedviewが開く。- Daily表示が出る。
- Slot表示が出る。
- Member laneが出る。
- Asset laneが出る。
- Cardが見える。
- Dragできる。
- Resizeできる。
- Save Asできる。
- Publishできる。
- Undo modalが開く。
- Snapshotを作れる。
- Taskless cardが壊れない。
- Completed tasksがPublishでskipされる。
- Consoleにfatal errorがない。
55.3 報告すべき重大不具合
Schedulerに関する重大不具合:
- Cardが別Taskへ保存される。
- Drag後に別laneへ勝手に入る。
- Publishで意図しないTaskが更新される。
- Undoが別scheduleへ戻す。
- 日付が1日ずれる。
- Upload/Proxyと同様に、違うrecordへ書く。
- Locked scheduleが直接編集できる。
55.4 軽微扱いでよいもの
- 文字が少し切れる
- Zoom初期値が好みでない
- Lane幅を手動調整したい
- 色が分かりにくい
- Card Listの並び順を変えたい
軽微でも、制作判断に影響する場合は報告する。
56. Scheduler用語集補足
SchedView: Scheduleを見るための画面。
Scheduler: Scheduleを編集するための画面。
Schedule: 作業配置のまとまり。
schedId: Scheduleを識別するID。
Card: Schedule上の作業単位。多くはTask。
Taskless card: Task recordにまだ紐づいていないSchedule card。
Lane: MemberまたはAssetなどで分けた行・列。
Member lane: 担当者基準のlane。
Asset lane: Asset基準のlane。
Daily: 日単位の表示。
Slot: 時間またはslot単位の表示。
Zoom: 表示密度。
Fit: 表示範囲に合わせる操作。
Inspector: 選択Cardの詳細パネル。
Card List: Schedule上のCard一覧。
Asset conflict: 同じAssetの作業が競合している可能性。
Camera move: 撮影・カメラ移動に関係するCard表示。
Publish: Scheduleを正式版としてlockし、lock済みsnapshotをTasksへ反映する操作。
Undo: Scheduler操作を戻す機能。
Snapshot: Scheduler状態の保存点。
Named Snapshot: 名前付きSnapshot。
Timezone guard: 日付ずれを防ぐ安全装置。
Save As: 別案やdraftを作る保存操作。
Save View: SchedViewの見え方を保存する操作。
第4部 作成・編集・表示
1. Create New Recordの基本
1.1 Create New Recordとは
Create New Recordは、Shots、Assets、Tasks、Usersなどのentityに新しいrecordを追加する操作。
Table toolbarのNewボタンから開く。
New modalは、現在開いているentityに対してrecordを作る。
例:
- Shots TableでNew → 新しいShotを作る。
- Assets TableでNew → 新しいAssetを作る。
- Tasks TableでNew → 新しいTaskを作る。
- Users TableでNew → 新しいUserを作る。
1.2 New modalの基本動作
Newボタンを押すとCreate modalが開く。
modal内には、そのentityで編集可能なfieldだけが表示される。
非編集fieldやsystem fieldは表示しない。
fieldの表示順は、Google Sheetsの列順に合わせる。
アルファベット順ではない。
これは重要。制作データでは、列順が人間の作業順になっていることが多い。
1.3 Create modalで出るfield
表示されるべきfield:
- editable=trueのfield
- required field
- text/select/date/linkなど、ユーザー入力対象のfield
- entity_name相当のfield
- Statusなど初期入力が必要なfield
- Shot/Asset/Task linkなどの関連field
表示されるべきでないfield:
- id field
- generated field
- system-managed field
- originals URL field
- computed field
- read-only json
- updated_atなどの自動更新field
- versions pointer JSON
1.4 IDの扱い
IDは通常自動生成される。
ユーザーはCreate modalでIDを入力しない。
理由:
- IDはlink、Drive folder、Versions、Scheduler、ProxyJobsなどの内部参照に使う。
- 手入力ミスがあると関連データが壊れる。
- 名前は後から変えられるが、IDは変えるべきではない。
UserGuideでは「IDは機械用、Name/Codeは人間用」と書く。
1.5 entity_nameの扱い
entity_nameは人間が見る名前。
Create時に必須になることが多い。
例:
- ShotCode
- Asset Name
- Task Name
- User Name
- Role
entity_nameが空だと、Link chipやDetail titleがID表示になりやすい。
1.6 Create後の表示
Createが成功すると、新しいrecordはTableに追加される。
MOTKでは作成されたrowにhighlightが付くことがある。
その後、Detailへ移動して詳細編集できる。
UserGuideでは「Createは最小情報を作る操作、Detailは作ったrecordを整える操作」と説明できる。
1.7 Create後に確認すること
新しいrecordを作った後に確認するもの:
- Tableにrecordが表示されたか。
- IDが自動生成されたか。
- entity_nameが期待通りか。
- Detailが開くか。
- Link fieldsが正しく表示されるか。
- Originals folderが必要なら開けるか。
- TaskならScheduler/Cardに出す必要があるか。
2. Create New Recordのentity別説明
2.1 New Shot
New Shotは新しいShot recordを作る。
入力候補:
- ShotCode
- Episode
- Act
- Sequence
- Scene
- Shot
- Status
- Due Date
- Artist Note
- Producer Note
- Asset Link
- Task Link
Shot IDは自動生成される。
ShotCodeは手入力またはEpisode/Act/Sequence/Scene/Shotから生成される可能性がある。
New Shot後の推奨確認:
- Shot Detailを開く。
- ShotView/Comp/Materials/Versionsカードがあるか確認する。
- Asset Linkを追加する。
- Taskを作る場合はTask Linkを追加する。
- Originals folderをEnsure/Hydrateする。
2.2 New Asset
New Assetは新しいAsset recordを作る。
入力候補:
- Asset Name
- Asset Type
- Status
- Shot Link
- Task Link
- Notes
Asset IDは自動生成される。
Asset Typeはcharacter、prop、environment、set、backgroundなどの分類に使う可能性がある。
New Asset後の推奨確認:
- Asset Detailを開く。
- AssetView/Versionsカードを確認する。
- 関連ShotがあればShot Linkを追加する。
- 関連TaskがあればTask Linkを追加する。
- Asset originals folderを確認する。
2.3 New Task
New Taskは新しい作業単位を作る。
入力候補:
- Task Name
- Task Type
- Status
- Assignee
- Due Date
- Shot Link
- Asset Link
- Notes
TaskはSchedulerと関係が深い。
New Task後の推奨確認:
- Task Detailを開く。
- Shot LinkまたはAsset Linkを確認する。
- Assigneeを設定する。
- Due Dateを設定する。
- Scheduler/SchedViewに出るか確認する。
- TaskView/Versionsが必要ならUploadする。
2.4 New User
New UserはGoogle accountまたはMOTK利用者を追加する。
入力候補:
- User Name
- Permission
- Department
- Notes
User IDは自動生成される。
New User後の推奨確認:
- Users Tableで表示を確認する。
- permissionを確認する。
- SettingsのUser Access / Sharingで同期する。
- Google Drive/Sheetsへの実アクセスを確認する。
- ProjectMembersとUser Linkで紐づける。
2.5 New Member
ProjectMembersは制作上の役割や参加者を表す。
入力候補:
- Role
- Department
- User Link
- Notes
UsersはGoogleアカウント。
ProjectMembersは制作上の立場。
同じ人が複数roleを持つ場合、UserとMemberを分ける意味がある。
3. Create modalのfield widget
3.1 text field
text fieldは自由入力。
用途:
- Notes
- Description
- Title
- Name
- Code
短文はTableでも編集できる。
長文はDetailで編集した方が安全。
3.2 select field
select fieldは選択肢から値を選ぶ。
用途:
- Status
- Asset Type
- Task Type
- Department
- Permission
選択肢はFields定義や既存値から来る可能性がある。
選択肢にない値を入れられるかどうかはfield設定による。
3.3 date field
date fieldは日付を入れる。
用途:
- Due Date
- Start
- End
- Updated date
Timezoneに注意。
ScheduleやDue Dateで1日ズレると運用上大きな問題になる。
3.4 checkbox field
checkbox fieldはtrue/falseを扱う。
用途:
- enabled
- visible
- required flag
- core field flag
- option toggles
Create modalで出ることは少ないが、設定系entityでは出る可能性がある。
3.5 link field
link fieldは他entityへの参照。
Create modalではLink Pickerを開いて選ぶ。
直接IDを手入力するよりPickerを使う方が安全。
link fieldの種類:
- asset_link
- shot_link
- task_link
- member_link
- user_link
3.6 versions field
versions fieldはCreate modalでは通常編集しない。
Versionsはrecord作成後にUploadで追加する。
Create時にversions pointer JSONを手入力するべきではない。
3.7 originals field
Originals fieldは通常Create modalでは編集しない。
Originals URLはDriveBuilder/Hydrate/Uploadによって補完される。
ユーザーが手入力すると、Drive folder整合性が壊れる可能性がある。
3.8 json field
json fieldは通常Create modalでは出さない。
Pagesやproject_metaなど一部Admin操作ではJSONを扱うが、一般record作成では非表示でよい。
4. Editable / Non-editable
4.1 editableの基本
editableは、ユーザーがUIから編集できるかどうかを決めるfield metadata。
editable=trueなら、Table inline editやDetail edit、Create modalに出る可能性がある。
editable=falseなら、通常ユーザーは編集しない。
4.2 requiredとの違い
requiredは、そのrecordを作る/保存するために必要なfield。
editableとrequiredは別。
- editable=true, required=true: ユーザーが入力すべき必須field
- editable=true, required=false: 任意入力field
- editable=false, required=true: システムが必ず持つべきfield。自動生成の可能性が高い。
- editable=false, required=false: 表示専用または内部用field
4.3 Non-editableを隠す理由
Create modalでnon-editable fieldを出すと、ユーザーが内部値を壊す可能性がある。
特に危険なfield:
- id
- field_id
- versions pointer
- originals url
- generated path
- updated_at
- system status
- worker job id
4.4 Acceptance観点
Create New RecordのAcceptanceでは、以下が確認項目。
- fields are shown in GS column order, not alphabetical
- only editable fields appear
- non-editable fields do not appear
- link fields open picker in front of modal
- field widgets match normal table/detail behavior
これはUserGuideにも「正しい挙動」として書ける。
5. Link Picker
5.1 Link Pickerとは
Link Pickerは、link fieldに他entityのrecordを選ぶためのUI。
IDを直接入力する代わりに、名前やIDで検索して選ぶ。
5.2 Link Pickerが使われる場所
使われる場所:
- Table inline edit
- Create New Record modal
- Detail field edit
- Scheduler InspectorのTask Assets編集
- Forum entity prefillの関連操作
5.3 Link Picker対象
対象entity:
- Asset Link → Assets
- Shot Link → Shots
- Task Link → Tasks
- Member Link → ProjectMembers
- User Link → Users
5.4 表示名
Link Pickerは、IDだけでなくentity_nameを表示するべき。
例:
- sh_0001 / 501A
- as_0002 / Robot Arm
- tk_0012 / Lighting
- pm_0003 / Animator A
- us_0001 / Producer
entity_nameが取れない場合はID表示になる。
5.5 複数選択
link fieldは複数IDを持てる場合がある。
例:
- Shotに複数Asset Link
- Assetに複数Shot Link
- Taskに複数Asset Link
複数選択時は、チップやカンマ区切りで表示される。
5.6 Pickerがmodalの後ろに出る問題
Create New RecordやDetail card settingsなどのmodal内でLink Pickerを開く場合、Pickerがmodalの後ろに出ると使えない。
Acceptanceでは「link picker appears in front of the modal」が確認項目。
UserGuideのトラブルシュートでは「Pickerが見えない場合はz-index問題」として書ける。
5.7 Link Pickerで選んだ後
選択後に確認すること:
- chipが表示されるか。
- IDではなく名前が出るか。
- 保存後にreloadして残るか。
- 関連Detailへ移動できるか。
- 逆方向リンクが必要なら反映されているか。
5.8 Link Pickerの失敗原因
原因候補:
- LINK_MAPSが空。
- target entityが解決できない。
- field typeがlinkとして認識されていない。
- entity_name fidがない。
- modalのz-index問題。
- API missing。
- 権限不足。
6. Inline Edit
6.1 Inline Editとは
Inline Editは、Table上のセルを直接編集する機能。
短い値やステータス更新に向いている。
長文、複雑なリンク、Versions、Originalsの操作にはDetailの方が向いている。
6.2 Inline Editの開始
セルをダブルクリック、または編集可能セルをクリックして開始する。
編集可能な場合、input/select/date/link pickerなどのwidgetが出る。
Acceptanceでは、Shot Noteのセルをダブルクリックし、値を入力してEnterで保存した例がある。
6.3 Inline Editの保存
保存方法:
- Enter
- blur
- 選択確定
- select変更
実装上の正確な保存トリガーはfield typeによる。
保存時はstatus barにUpdatingなどが出る。
成功後はTable表示が更新される。
6.4 Inline Edit後の確認
重要なのはreload後に値が残ること。
UserGuideでは、編集後に保存成功表示だけでなく、必要に応じてreload確認する方法を書く。
確認項目:
- セルが新しい値になる。
- Status barにエラーがない。
- Reload後も値が残る。
- Detailでも同じ値が出る。
- 違うfieldが変わっていない。
6.5 Inline Editに向くfield
向くfield:
- Status
- Due Date
- short text
- Assignee
- Permission
- Asset Type
- Task Type
- simple notes
向かないfield:
- long note
- versions
- originals
- json
- multi-line complex data
- generated fields
6.6 Inline Editの失敗例
失敗として扱うべきもの:
- 保存成功表示なのにreloadで戻る。
- 違うfieldが変わる。
- 違うrecordが変わる。
- INLINE_EDIT_EXCEPTIONが出る。
- 編集inputが出ない。
- edit後にTable全体が再描画されて選択を失う。
- stale dataで直近編集が上書きされる。
6.7 Inline Editの重大度
Inline editで違うfield/recordへ保存されるのはCRITICAL。
保存されないだけならHIGH。
表示上の反映が遅いだけでreload後に正しければLOW。
7. Detail Edit
7.1 Detailでの編集
Detailは1recordを深く編集する画面。
Tableよりも文脈が見えるため、以下に向いている。
- 長めのNote
- Versions upload
- Related links確認
- Card単位の整理
- Review status更新
- Shot/Asset/Taskの詳細確認
7.2 DetailのApply
Single-field cardにはApplyボタンがある場合がある。
Applyは、そのfield値を保存する操作。
Acceptanceでは、single-field card Applyが動作し、保存後にpersistしたことが確認されている。
7.3 DetailのSaveとCard layout Save
DetailにもSave系操作があるが、field値の保存とcard layout保存を混同しない。
- Field Apply / field save = 制作データ保存
- Cards / Preset Save = Detailの見え方保存
7.4 Detail edit後の確認
- Fieldが更新されたか。
- Reload後に残るか。
- Tableで同じ値が見えるか。
- Link fieldならchipが正しいか。
- Versionsならpreviewが出るか。
8. CommonRenderer
8.1 CommonRendererの役割
CommonRendererは、field typeに応じて値の見せ方・編集方法を決める共通レイヤー。
Table、Detail、Create modal、Link field、Versions、Thumbnailsなどで同じtype解釈を使う。
8.2 CommonRendererが重要な理由
同じfield typeなのにTableとDetailで挙動が違うと混乱する。
CommonRendererに寄せることで、以下を統一できる。
- link chip表示
- Drive link表示
- date表示
- select表示
- versions preview
- thumbnail表示
- field metadata解釈
- editable判定
8.3 SchemaResolverとの関係
CommonRendererはSchemaResolverを使い、field_idからmetadataを解決する。
SchemaResolverが見つけるもの:
- id fid
- entity_name fid
- type別fid
- field_name別fid
- fidからfield meta
- fidからentity
8.4 FIELD_TYPESとの関係
FIELD_TYPESが空または不正だとCommonRendererは正しいwidgetを出せない。
症状:
- link fieldがtextになる。
- versionsがJSON文字列になる。
- checkboxがtextになる。
- dateが通常文字列になる。
- editableでないfieldが編集可能になる。
8.5 LINK_MAPSとの関係
LINK_MAPSがないと、link chipの表示名がIDになる。
CommonRendererはLinkMapsを使ってIDを人間向けlabelへ変換する。
8.6 Routerとの関係
CommonRendererはlink chipからDetail URLを作る。
Routerはentityに応じてDetailShot、DetailAsset、DetailTask、DetailUser、DetailMemberなどへ振り分ける。
UserGuideでは「chipをクリックすると関連Detailへ移動できる」と説明する。
9. Field type別の操作説明
9.1 id
表示専用。
編集しない。
内部参照、Drive folder、link、versions、proxy、schedulerに使われる。
9.2 entity_name
表示名。
Create時・Detail編集時に重要。
変更してもIDは変わらない。
9.3 text
直接入力。
Table inline editまたはDetailで編集。
長文はDetail推奨。
9.4 select
選択肢から選ぶ。
Statusなどに使う。
Create modal、Table、Detailで同じ選択肢を使うべき。
9.5 date
日付入力。
Due DateやStart/Endに使う。
Timezoneと1日ズレに注意。
9.6 checkbox
true/false。
設定系ではよく使う。
制作recordでは限定的。
9.7 asset_link
Asset recordへのリンク。
PickerでAssetsから選ぶ。
選択後、Asset chipとして表示される。
9.8 shot_link
Shot recordへのリンク。
TaskやAssetからShotへ飛ぶために使う。
9.9 task_link
Task recordへのリンク。
ShotやAssetに関連Taskを紐づける。
9.10 member_link
ProjectMembersへのリンク。
Assigneeなどで使う。
UserではなくMemberを指す場合がある点に注意。
9.11 user_link
Usersへのリンク。
ProjectMemberとGoogle accountを紐づける用途。
9.12 originals
Originals folderへのリンク。
通常は編集しない。
Open OriginalsでDrive folderを開く。
9.13 thumbnails
サムネイル表示。
Table/Detailで視覚確認に使う。
直接編集より、Upload/Versions/Proxy経由で更新する。
9.14 versions
バージョン表示・アップロード・preview。
Upload overlayやDetail versions cardからファイルを追加する。
内部的にはlatest pointer JSONやProxyJobsと関係する。
10. Versions upload overlay
10.1 Versions upload overlayとは
TableやDetailのversions/shotview/assetviewセル上に出るUpload導線。
普段は常時表示せず、hover時に出る。
Acceptanceでは「versions upload overlay appears on hover, not always」が確認項目。
10.2 なぜhover overlayなのか
常時表示するとTableがうるさくなる。
hover時だけ出すことで、レビュー時の視認性とアップロード操作を両立する。
10.3 Upload modal
Upload overlayを押すとUpload modalが開く。
Upload modalには以下がある可能性がある。
- file input
- target entity
- record id
- field id
- proxy preset dropdown
- Upload button
- Cancel/Close
10.4 Proxy Preset
Upload modalにはProxy Preset dropdownがある。
例:
- proxy_h264
Proxy Presetは、Workerがどの変換設定でproxyを作るかを示す。
10.5 Upload後の流れ
- ファイルを選ぶ。
- Uploadを押す。
- modalが閉じる。
- UploadInboxに記録される。
- ProxyJobsにjobが入る。
- Versions pointerが更新される。
- Table/Detailのversions cell/cardが更新される。
- Worker処理後にProxy badgeまたはpreviewが出る。
10.6 Upload後に確認すること
- modalが閉じたか。
- cell/cardが更新されたか。
- previewできるか。
- correct record folderに入ったか。
- wrong bare folderが作られていないか。
- ProxyJobsが作成されたか。
- Worker処理後にproxyが出るか。
10.7 Uploadの重大不具合
重大な問題:
- 違うrecord folderへ入る。
- bare folderを再作成する。
- field_idが違うversions folderに入る。
- modalが閉じない。
- ProxyJobsが作られない。
- pointerが更新されない。
- Previewが壊れる。
10.8 Table uploadとDetail uploadの違い
Table upload:
- 一覧から素早く追加する。
- 複数recordを見ながら作業できる。
- 対象セルを間違えないように注意。
Detail upload:
- 1recordに集中して追加する。
- 関連情報を確認しながら安全に操作できる。
- 長期的にはDetail uploadの方が事故が少ない。
11. Preview modal
11.1 Preview modalとは
versionsやthumbnailのmediaを開いて大きく見るためのmodal。
画像ファイルではpreviewが表示される。
動画ではproxyまたはDrive previewを使う可能性がある。
11.2 Previewで確認すること
- 画像が表示される。
- 正しいrecordのmediaである。
- 最新versionである。
- ORIGINAL/PROXY badgeが意味と合っている。
- 閉じられる。
11.3 Previewが壊れる原因
- Drive権限がない。
- pointer JSONが壊れている。
- file idが無効。
- proxyがまだない。
- mime typeが対応外。
- image previewではなくPDF/videoだった。
- browser security制限。
12. ORIGINAL / PROXY badge
12.1 Badgeの意味
ORIGINALは元ファイルを表示している状態。
PROXYは軽量変換済みファイルを表示している状態。
12.2 どちらがよいか
レビューやTable表示ではPROXYが望ましい。
元ファイル確認や高画質確認ではORIGINALが必要な場合もある。
12.3 Badgeがcoherentであること
Acceptanceでは、ORIGINAL / PROXY state badgeがcoherentであることが確認項目。
coherentとは、表示されているmediaの状態とbadgeが一致していること。
例:
- ProxyがないのにPROXY表示されない。
- Originalを表示しているならORIGINALと出る。
- Proxy生成後はPROXYへ切り替わる。
13. Save status / Status bar
13.1 Table status bar
Table下部にはstatus barがある。
表示例:
- loading...
- Updating...
- applying page...
- 1-100 of 290 Shots
- error message
13.2 Status barを見る理由
保存や読み込みの状態を確認する。
Inline edit後はUpdatingが出る。
Errorが出たら値が保存されていない可能性がある。
13.3 0 of 0と空表示
過去には0 of 0が誤解を招く問題があった。
UserGuideでは「読み込み中やキャッシュ復元中の空表示は、実データ0件とは限らない」と説明する。
13.4 applying pageが残る場合
applying pageが長く残る場合、PageConfig適用やStatus recoveryの問題の可能性がある。
DebugPanelのViewer State、Performance Snapshot、Consoleを確認する。
14. Modal / z-index / focus
14.1 Modalの種類
MOTKには複数のmodalがある。
- Create New Record modal
- Upload modal
- Link Picker
- Preview modal
- Detail card settings modal
- Scheduler settings modal
- Undo modal
- Remove card modal
14.2 Modalの重なり順
Create modalやUpload modalはTable上に高いz-indexで表示される。
Link Pickerはmodalの上に出る必要がある。
Preview modalも他のUIに隠れない必要がある。
14.3 z-index問題の症状
- Link Pickerがmodalの後ろに出る。
- Previewが見えない。
- Upload modalが閉じられない。
- 背景のTableがクリックされる。
- Modal上のbuttonが押せない。
14.4 Acceptanceでの重要性
Link Pickerがmodalの前に出ることはAcceptance項目。
Modalが使えない場合、CreateやUploadが事実上壊れるためHIGH以上になりやすい。
15. Search / Filter / Fields / Paginationと編集の関係
15.1 編集前の絞り込み
Tableで編集する前に、対象recordをFilter/Searchで絞る。
間違ったrecordを編集しないために重要。
15.2 Server search
Server searchは、サーバー側で文字列検索する。
大量行の中から対象recordを探す場合に使う。
15.3 Filter
Filterは表示中のTableに条件をかける。
Status、Assignee、Due Dateなどで絞る。
15.4 Fields toggle
Fields toggleで必要なfieldだけ表示する。
編集時は、対象fieldと識別fieldを同時に出すと安全。
例:
- ShotCode + Status + Due Date + Assignee
- Asset Name + Asset Type + Status
- Task Name + Assignee + Due Date + Shot Link
15.5 Pagination
Paginationで別ページに移動すると、編集中の状態を失う可能性がある。
保存が完了してからページ移動する。
15.6 ALL表示
ALL表示は大量行では重くなる可能性がある。
大量編集の確認には便利だが、通常は100/200程度で使う方が安定しやすい。
16. TableとDetailの使い分け
16.1 Tableが向いている作業
- 複数recordの比較
- Statusの一括確認
- Due Date順の確認
- Assigneeの確認
- 短いinline edit
- Filter/Sort/Search
- 複数recordをまたぐチェック
16.2 Detailが向いている作業
- 1recordの深い確認
- 長文Note
- Versions upload
- Preview
- 関連Shot/Asset/Task確認
- Card layoutで情報を見る
- Review作業
16.3 Createは入口、Detailは整備
新規recordはTableのNewで作る。
作ったrecordはDetailで情報を整える。
17. 操作別ワークフロー
17.1 新しいShotを作ってAssetを紐づける
- Shots Tableを開く。
- Newを押す。
- ShotCodeやStatusなど必要fieldを入力する。
- Asset Link fieldでLink Pickerを開く。
- 対象Assetを検索して選ぶ。
- Createを押す。
- 作成されたrowがTableに出ることを確認する。
- Shot Detailを開く。
- Asset chipをクリックしてAsset Detailへ移動できるか確認する。
- 必要ならOriginals folderを開く。
17.2 Taskを作って担当者を入れる
- Tasks Tableを開く。
- Newを押す。
- Task NameとTask Typeを入れる。
- Statusをnot_startedにする。
- AssigneeでMember Link Pickerを開く。
- 担当Memberを選ぶ。
- Shot LinkまたはAsset Linkを選ぶ。
- Due Dateを入れる。
- Createする。
- Scheduler/SchedViewで表示されるか確認する。
17.3 TableでStatusを更新する
- 対象entityのTableを開く。
- Search/Filterで対象recordを絞る。
- ShotCode/Asset Name/Task Nameで対象を確認する。
- Status cellを編集する。
- 保存状態を確認する。
- Reloadしてpersistを確認する。
17.4 DetailでVersionを追加する
- 対象recordのDetailを開く。
- Versions cardを探す。
- Uploadを押す。
- ファイルを選ぶ。
- Proxy Presetを確認する。
- Uploadする。
- modalが閉じるか確認する。
- previewできるか確認する。
- ProxyOps/ProxyAuditでjob状態を見る。
17.5 Linkを修正する
- 対象recordをTableまたはDetailで開く。
- link fieldを編集する。
- Link Pickerで正しいrecordを選ぶ。
- 保存する。
- chipが期待名で表示されるか確認する。
- chipクリックでDetailへ飛べるか確認する。
- 必要なら逆側recordでも関連を確認する。
18. トラブルシュート
18.1 New modalが開かない
原因候補:
- New button handlerが壊れている。
- google.script.runが使えない。
- Fields metadataが取れていない。
- entityが不明。
- modalがCSSで隠れている。
- JavaScript error。
確認:
- Console
- Runtime
- FieldTypes Health
- URL entity
18.2 New modalにfieldが出ない
原因候補:
- editable=trueのfieldがない。
- Fields metadataが空。
- entity mismatch。
- field_idがsheetにない。
- field type判定が失敗。
確認:
- FieldTypes Health
- Column Contract
- Fields定義
- target entity
18.3 Non-editable fieldが出ている
これは危険。
原因候補:
- editable判定が壊れている。
- metadata bool変換が失敗。
- field type推定でsystem fieldをtext扱いしている。
対応:
- DebugPanelでFieldTypes Healthを見る。
- Createは中断する。
- Adminに報告する。
18.4 Link Pickerが空
原因候補:
- LINK_MAPSが空。
- target entityが間違っている。
- search条件が強すぎる。
- 権限がない。
- entity_name fidがない。
確認:
- LINK_MAPS counts
- Entity samples
- FieldTypes Health
- Console
18.5 Inline editが開始できない
原因候補:
- fieldがeditable=false。
- cellが特殊renderer。
- field typeが編集対象外。
- Tableがまだloading中。
- overlayが被っている。
18.6 Inline editが保存されない
原因候補:
- write accessがない。
- API failure。
- field validation failure。
- stale rows overwrite。
- wrong field binding。
確認:
- Status bar
- Console
- Binding Integrity
- Reload後の値
18.7 Upload modalが閉じない
原因候補:
- upload request failure。
- success handlerが走っていない。
- file size/mime type問題。
- Drive permission問題。
- proxy config missing。
確認:
- Console
- Settings Proxy Ops
- UploadInbox
- ProxyJobs
18.8 Previewが出ない
原因候補:
- file idが無効。
- Drive権限がない。
- pointer JSONが壊れている。
- Proxy未生成。
- mime type未対応。
確認:
- Versions field value
- Drive URL
- Proxy Audit
- Console
19. QA / Acceptance
19.1 Create New Recordで確認すること
- New button opens modal quickly enough for practical use.
- Fields are shown in GS column order, not alphabetical.
- Only editable fields appear.
- Non-editable fields do not appear.
- Link fields open picker in front of the modal.
- Field widgets match normal table/detail behavior.
- Record is created.
- Table highlights or surfaces it.
- Detail opens correctly.
19.2 Inline editで確認すること
- Safe text field can be edited.
- Safe select field can be edited.
- Safe permission/text field can be edited.
- No INLINE_EDIT_EXCEPTION.
- Value persists after refresh.
- No stale overwrite.
19.3 Versions uploadで確認すること
- Upload from Table works.
- Upload from Detail works.
- Modal closes on upload action.
- Uploaded file lands in correct record versions folder.
- Wrong bare folder is not recreated.
- Versions cell/card updates correctly.
- Preview can show image files.
- ORIGINAL / PROXY state badge is coherent.
19.4 重大Findingになるもの
- Create form omits editable fields.
- Create form includes non-editable fields.
- Link picker appears behind modal.
- Save appears successful but value does not persist.
- Stale data overwrites recent edit.
- Upload goes to wrong record folder.
- Wrong bare folder is recreated.
- Modal cannot be used.
20. 注意事項の要点
20.1 New Record注意
Newで作るのはrecordの入口です。作成後はDetailを開いて、関連リンク、Originals、Versions、Scheduleへの反映を確認してください。
20.2 Inline Edit注意
Tableのinline editは短い値の修正に向いています。長文Note、Versions、Originals、複雑なLink修正はDetailで行う方が安全です。
20.3 Link Picker注意
Link fieldはIDを直接入力せず、できるだけLink Pickerから選んでください。Pickerを使うと、対象entityと表示名を確認しながら安全にリンクできます。
20.4 Upload注意
Upload後、すぐにProxyが出るとは限りません。UploadはProxyJobsに入り、Workerが処理した後にProxyとして表示されます。
20.5 Save status注意
保存表示が出ても、重要な編集はreload後に残っているか確認してください。特に初期セットアップ中やfield定義変更後は確認が必要です。
第5部 ナビゲーションとURL
1. MOTKの画面遷移の基本構造
MOTKの画面遷移は、通常の単純なWebページ遷移ではない。
大きく分けると、以下の2種類がある。
-
Shell内で切り替わる画面 - Dashboard - Table - Detail
-
独立ページまたは別タブで開く画面 - Settings - UserGuide - DebugPanel - Forum - WorkerKit - Scheduler - SchedView
Shell内ではDashboard/Table/Detailが静的にincludeされ、クリックイベントを捕まえてSoft Navigationで表示を切り替える。ブラウザのURLは変わるが、毎回フルリロードしているとは限らない。
UserGuideでは、これを「作業画面内の高速切り替え」と「管理・診断・大画面系の別ページ」という二層で説明するとよい。
2. Server template routing
2.1 doGetの役割
GASの doGet は、URLパラメータを読み、どのHTML templateを返すかを決める。
代表的なtemplate:
3CL_Shell3CL_Forum3CL_WorkerKit1SA_DebugPanel3CL_UserGuide3CL_Scheduler3CL_SchedView3CL_Settings3CL_Upload
2.2 Shellへ入るページ
以下は主にShellへ入る。
- empty page
dashboardindextableviewershotsassetstasksmembersprojectmembersusers
つまり、Shots/Assets/Tasksなどは別templateではなく、Shell内のTableとして扱われる。
2.3 独立templateへ入るページ
以下は独立templateとして返る。
forum/chatworkerkit/workerdebug/debugpanel/debugpanelpage/tests/testresultsuserguide/guide/helpscheduleschedviewsettingsupload
2.4 Settingsのaccess check
Settingsはtemplateを返す前にaccess helperで権限チェックが行われる。
権限がない、またはSettings auth helperが欠けている場合、Settings本体ではなくAccess error pageが返る。
UserGuideでは、Settingsが開けない場合は単なる表示エラーではなく、権限または管理ヘルパー問題として見る。
3. URLパラメータの体系
3.1 page と p
MOTKには page と p の両方がある。
page は明示的なページ名として使われる。
p は短いroute keyとして使われることが多い。
例:
?page=Dashboard?p=table&e=shots?page=DetailShot&entity=shot&id=sh_0001?p=schedview?page=Settings
UserGuideでは「どちらも画面指定。内部で正規化される」と説明する。
3.2 entity と e
entity と e も両方ある。
Tableでは e がよく使われる。
Detailでは entity がよく使われる。
例:
?p=table&e=assets?page=DetailAsset&entity=asset&id=as_0001
3.3 id
id はrecord ID。
Detailではほぼ必須。
例:
?page=DetailShot&entity=shot&id=sh_0001?page=DetailAsset&entity=asset&id=as_0001?page=DetailTask&entity=task&id=tk_0001
3.4 pid
pid はpageIdまたはpreset idとして使われる可能性がある。
通常ユーザーは意識しないが、Table presetやPageConfig問題では重要。
3.5 schedId
schedId はScheduleを識別するID。
例:
?p=schedview&schedId=sched_0001
3.6 action
action は画面ではなく処理を返すrouteで使われる。
例:
?action=status?action=worker-bootstrap?action=diag-table-smoke?action=diag-scheduler-smoke?action=app-bundle
通常ユーザーは直接使わない。Admin/QA/WorkerKitでは重要。
4. Page / Entity normalization
4.1 正規化の目的
MOTKでは、複数の表記を内部の一貫した表現へ変換する。
例:
- shot / shots
- asset / assets
- member / members / projectmembers
- page / p
- entity / e
- table / viewer / index
4.2 entity正規化
基本対応:
- shots / shot → shot
- assets / asset → asset
- tasks / task → task
- users / user → user
- members / member / projectmembers / projectmember → member
- sched / schedule / schedules → sched
4.3 page正規化
代表例:
- empty / index / list / viewer → DashboardまたはTable
- table → Table
- schedule → Schedule
- schedview → SchedView
- settings → Settings
- testresults / tests / debug → DebugPanelPage
- forum / chat → Forum
- worker / workerkit → WorkerKit
4.4 Detail page正規化
Detail系は DetailShot, DetailAsset, DetailTask, DetailUser, DetailMember のように分かれる。
RouterはentityからDetail page名を作る。
例:
- shot → DetailShot
- asset → DetailAsset
- task → DetailTask
- user → DetailUser
- member → DetailMember
4.5 正規化が壊れた時の症状
- Assetsを開いたのにShots Tableが出る。
- DetailAssetのはずがDetailShotへ飛ぶ。
- MembersがUsers扱いになる。
- ScheduleがTable扱いされる。
- URLは変わるが画面が変わらない。
- PNAVIのactive表示がずれる。
5. Shellの役割
5.1 Shellとは
ShellはMOTKの主要作業画面を包むcontainer。
含まれるもの:
- GNAVI
- PNAVI
- Router
- Dashboard
- Table
- Detail
- console capture
- theme bootstrapping
- scriptUrl bridge
- soft navigation handler
- loader
5.2 Dashboard/Table/Detailの静的include
ShellはDashboard、Table、Detailを最初からincludeする。
表示中でないものはdisplay:noneで隠す。
これにより、Dashboard/Table/Detail間の切り替えを高速にできる。
5.3 Detail container
Detailは #detail-view-container に入る。
初期状態ではdisplay:none。
Detail routeになると表示され、bodyにdetail-page、htmlにdetail-rootが付く。
5.4 Loader
Shellには .loader があり、初期表示中はLoadingを出す。
route activationが完了するとloaderが消える。
loaderが消えない場合、route activationやsoftnav関数に失敗している可能性がある。
7. History / URL更新
7.1 GAS history API
GAS Web App内では、外側のscript.google.com URLをiframe内から直接変更しづらい。
Shellは google.script.history.push/replace を使って、外側のURLパラメータを更新する。
7.2 inner-frame history
Shellは同時にinner frame側のhistory.pushState/replaceStateも更新する。
これにより、セッション内の戻る/進む操作に対応する。
7.3 popstate
popstate時には現在URLを読み直し、Dashboard/Table/Detailを再表示する。
7.4 Reload時のroute復元
Reload時には google.script.url.getLocation で外側URLのパラメータを読む。
これにより、?p=table&e=assets のようなURLから直接開いても、適切な画面を復元できる。
7.5 URLと実画面がずれた場合
原因候補:
- GAS history更新に失敗。
- inner frame historyだけ変わった。
- Shell route parserが対象外routeと判断した。
- target=_blankで別ページとして開いた。
- URL正規化が期待と違う。
報告時には、address barのURLと実際に表示されている画面の両方を書く。
8. GNAVI
8.1 GNAVIとは
GNAVIはGlobal Navigation。
アプリ全体に共通する上部ナビゲーション。
主な項目:
- MOTK logo
- Dashboard
- Settings
- Guide
- Debug
8.2 Settings / Guide / Debugが別タブになりやすい理由
Settings、Guide、Debugはtarget=_blankで開くことが多い。
理由:
- 作業中のTable/Detailを失わない。
- Settings操作は管理作業なので通常作業と分ける。
- Guideを見ながら作業できる。
- DebugPanelは問題画面を残したまま診断する必要がある。
8.3 Debugは問題画面を閉じずに開く
UserGuideでは、問題報告時に「問題画面を閉じず、Debugを別タブで開く」と書く。
DebugPanelはShellのconsole bufferやViewer Stateを見るため、問題状態を残したまま開く方がよい。
9. PNAVI
9.1 PNAVIとは
PNAVIはProject Navigation。
制作データの主要entityへ移動するためのナビゲーション。
主な項目:
- Shots
- Assets
- Tasks
- Members
- Users
- Forum
- Schedule
9.2 PNAVI defaults
標準のPNAVI:
- Shots →
?p=table&e=shots - Assets →
?p=table&e=assets - Tasks →
?p=table&e=tasks - Members →
?p=table&e=members - Users →
?p=table&e=users - Forum →
?page=Forum - Schedule →
?p=schedview
9.3 PNAVI config
PNAVIはproject_metaの pnavi.config.json または pnavi.config から設定できる。
設定がなければdefaultsが使われる。
config itemに含まれる候補:
- id
- label
- href
- url
- page
- entity
- enabled
- target
9.4 enabled
enabled=falseの項目は表示しない。
小規模制作ではUsersやMembersを隠し、大規模制作ではScheduleを目立たせるなどができる。
9.5 Forum itemの強制追加
PNAVI configからForumが抜けていても、Forum itemを追加する処理がある。
議論導線を常に残すための設計と考えられる。
9.6 Schedule itemの特別扱い
Schedule-likeなitemは ?p=schedview に寄せられる場合がある。
PNAVIのScheduleは基本的にSchedViewを開く。
編集が必要なときはSchedViewのInteractionをEditにするか、Schedule editorへ進む。
9.7 PNAVI active表示
Tableではentity一致が優先される。
例:
- e=assetsならAssets active
- e=tasksならTasks active
Active表示がずれるだけなら軽微だが、route誤判定の結果ならDetail/Table遷移不具合につながる。
10. Router
10.1 Routerの役割
Routerは、MOTK内リンクを生成する共通ヘルパー。
主な役割:
- baseUrlの解決
- entity Detail URL生成
- Schedule URL生成
- Table/List URL生成
- Detail page name生成
10.2 baseUrlの解決
Routerは以下の優先順位でbase URLを解決する。
__VIEW_CTX__.scriptUrlwindow.__SCRIPT_URL__window.SCRIPT_URLwindow.scriptUrllocation.origin + location.pathname
GASでは /userCodeAppPanel になることがあるため、exec URLを優先する必要がある。
10.3 buildEntityUrl
Detail URLを作る。
例:
- shot + sh_0001 → DetailShot
- asset + as_0001 → DetailAsset
- task + tk_0001 → DetailTask
- sched + sched_0001 → SchedView
10.4 buildScheduleUrl
Schedule/SchedView URLを作る。
例:
?p=schedview&schedId=sched_0001
10.5 buildListUrl
Table/List URLを作る。
例:
- shot → Table Shots
- asset → Table Assets
- task → Table Tasks
10.6 CommonRendererとの関係
CommonRendererはLink chipを表示するとき、Routerを使ってDetail URLを作る。
Routerが壊れると、chipをクリックしても正しいDetailへ飛ばない。
10.7 Link replacer diagnosticsとの関係
DebugPanelのLink replacer diagnosticsは、RouterやGNAVI/PNAVI linkが正しく置き換えられているかを見る。
11. Dashboard routing
11.1 DashboardはShell内でも独立でも動く
DashboardはShellにincludeされる場合と、独立templateとして開かれる場合がある。
そのため、Dashboard内のリンクはSoftNavと通常遷移の両方を考える必要がある。
11.2 appHref
Dashboardは相対pathやqueryをscript URLに変換する。
例:
?p=table&e=shots→ full script URL?page=Forum→ full script URL
11.3 data-app-href
Dashboard内のlinkには data-app-href が付く場合がある。
Shell click interceptorはこれを拾ってSoftNavできる。
11.4 DashboardからDetailへ
Update FeedやProject SnapshotからDetailへ飛ぶ。
Detail URLはentityに応じてDetail page名を変える。
11.5 DashboardからForumへ
Forum linkにはentity/id/titleをprefillするURLを作る。
例:
?page=Forum&entity=shot&id=sh_0001&title=...
12. Forum routing
12.1 Forumは独立ページ
ForumはShell内SoftNav対象ではなく、独立templateとして開く。
Forumは自前のGNAVI/PNAVIを持つ。
12.2 Forum prefill
ForumはURLから以下をprefillする。
- entity
- id
- title
DetailからDiscussを押すと、該当entity/threadを開きやすくなる。
12.3 Forum detail links
Forum内のentity linkはDetail URLを作る。
例:
- shot → DetailShot
- asset → DetailAsset
- task → DetailTask
- member → DetailMember
- user → DetailUser
Forumはtarget=_blankでDetailを開くことがある。
13. WorkerKit routing
13.1 WorkerKit page
WorkerKitは ?page=WorkerKit またはworkerkit/worker routeで開く。
13.2 worker-bootstrap action
WorkerKitやWorkerは ?action=worker-bootstrap を使って、scriptUrl、spreadsheetId、spreadsheetTitle、workerKitUrl、githubRepoUrlを取得できる。
UserGuideでは、WorkerKit setup時にDetect/Bootstrapがこの情報を使うと説明できる。
13.3 DashboardからWorkerKitへ
DashboardのDrive Repair / OpsにはWorker KitやDownload Workerへの導線がある。
14. Settings / Debug / Guide routing
14.1 Settings
Settingsは ?page=Settings で開く。
GNAVIではtarget=_blankになっていることが多い。
Settingsは管理操作が多いため、作業中のTable/Detailと分けて開くのが自然。
14.2 DebugPanel
DebugPanelには複数aliasがある。
- debug
- debugpanel
- debugpanelpage
- tests
- testresults
すべてDebugPanelへ正規化される。
問題画面を残したまま診断するため、Debugは別タブで開く。
14.3 UserGuide
Guide/UserGuide/HelpはUserGuideへ正規化される。
別タブで開くことで、作業しながら参照できる。
15. Schedule routing
15.1 SchedView
PNAVIのScheduleは基本的に ?p=schedview を開く。
SchedViewは閲覧画面。
15.2 Scheduler
Schedule editorは ?p=schedule。SchedViewは ?p=schedview。
編集画面。
15.3 schedId
特定scheduleを開くにはschedIdを付ける。
例:
?p=schedview&schedId=sched_0001
15.4 target=_blank
Scheduleは別タブで開くことが多い。
理由:
- 画面が大きい。
- Dashboard/Table/Detailの作業状態を残したい。
- Scheduler編集は操作リスクが高い。
16. GAS / OAuth / scriptUrlの注意
16.1 GAS特有のURL問題
GAS HTML Serviceでは、実際の表示がiframeやuserCodeAppPanel内になることがある。
そのため、location.hrefだけを使うと正しいexec URLが取れない場合がある。
16.2 scriptUrl bridge
Shellはserverから渡されたscriptUrlを以下へbridgeする。
window.__SCRIPT_URL_SERVER__window.__SCRIPT_URL__window.SCRIPT_URLwindow.scriptUrl
RouterやDashboardはこれを使って正しいlinkを作る。
16.3 createOAuthDialog
OAuth dialogから戻ったURLには createOAuthDialog が付く場合がある。
Boot/Routerはこれを通常route hintと混同しないように処理する。
16.4 Return URL sanitization
OAuth後の戻りURLから、code/state/scope/authuser/promptなどを除去する処理がある。
通常ユーザーには説明不要だが、Admin/Developer向けには「OAuth後にURLが変でもroute復元処理がある」と書ける。
17. Console capture / quiet console
17.1 Early console capture
Shellはheadで早期console captureを入れている。
console logはlocalStorage/sessionStorageへ保存される。
DebugPanelのCopy consoleで使われる。
17.2 quiet_console
quiet_console=1 またはlocalStorage設定で、GAS/iframe/Tailwindなどのノイズを抑制できる。
抑制対象例:
- dropping postMessage
- SES removing unpermitted intrinsics
- unrecognized feature
- iframe allow-scripts/allow-same-origin warning
- Tailwind CDN warning
17.3 問題報告との関係
Console captureは問題発生前から記録を取るために重要。
問題が起きた後にDebugPanelを開いても、Shell側のconsole bufferが残っていれば報告できる。
18. Theme bootstrapping
18.1 Themeの初期適用
ShellはlocalStorageの motk_ui_theme を読み、dark/lightを早期にhtmlへ適用する。
その後、project_metaのui_themeを読み、bodyのdata-ui-themeへ反映する。
18.2 Theme値
候補:
- dark
- light
- system
- auto
system/autoはsystem扱い。
18.3 UserGuideでの説明
ThemeはSettingsで変える。
変更後、localStorageにも保存され、次回ロード時のちらつきを減らす。
20. URL報告テンプレート
20.1 画面遷移問題の報告
問題名:
現在のURL:
クリックしたリンクの表示名:
クリックしたリンクのhref:
期待した画面:
実際に開いた画面:
同じタブか別タブか:
GNAVI/PNAVIのactive状態:
Reload後に同じ画面になるか:
Console:
DebugPanel Link replacer diagnostics:
20.2 Detail link問題の報告
元画面:
元entity:
元record id:
クリックしたchip/リンク:
生成されたURL:
期待entity/id:
実際entity/id:
Reload後の結果:
Viewer State:
Console:
20.3 PNAVI問題の報告
PNAVI item:
href:
data-page:
data-entity:
期待画面:
実際画面:
active表示:
project_metaのpnavi.config.json:
21. 覚えておきたい要点
21.1 Shell内遷移
Dashboard、Table、Detailは同じShell内で高速に切り替わるため、URLが変わってもフルリロードされない場合があります。表示がおかしい場合は、まず通常の再読み込みでも再現するか確認してください。
21.2 Debug別タブ
問題調査では、問題が起きた画面を閉じずにDebugを別タブで開いてください。DebugPanelは、その時点のConsoleやViewer Stateを確認するために使います。
21.3 Settings別タブ
Settingsは管理操作用です。通常の作業画面を残すため、別タブで開く設計になっています。
21.4 Schedule別タブ
Schedule/SchedViewは大画面で扱うため、別タブで開くことがあります。閲覧はSchedView、編集はSchedulerを使います。
21.5 URL報告
画面遷移の問題を報告するときは、表示中のURL、クリックしたリンク、期待した画面、実際の画面を必ず一緒に送ってください。
第6部 アクセス権と共有
1. Access modelの基本
MOTKの権限は、少なくとも2層で考える必要がある。
-
MOTK内の権限 - Users sheetやADMIN_USERSなどに記録されるアプリ上の役割。 - MOTKのUI上で何を表示・編集・管理できるかに関係する。
-
Google側の実共有 - Spreadsheet、Drive root、Originals、Proxies、Admin workbookなどに対するGoogle Drive/Sheets上の共有権限。 - 実際にファイルやシートを開けるか、書き込めるかに関係する。
この2つは似ているが別物。
MOTK内ではeditorでも、Google DriveのOriginals folderにアクセス権がなければOriginalsは開けない。
Google Driveにはアクセスできても、MOTK内でviewerならTable編集やSettings保存はできない可能性がある。
UserGuideでは、権限問題を「MOTK内role」と「Google共有」の2段階で説明する。
2. UsersとProjectMembersの違い
2.1 Users
Usersは、MOTKを使う人、またはGoogleアカウントに近い概念。
代表的なfield:
- User ID
- User Name
- Permission
- Department
- Notes
Usersは、アクセス管理、共有同期、ログインユーザー判定、Googleアカウントとの対応に関係する。
2.2 ProjectMembers
ProjectMembersは、制作上の参加者・役割・担当枠を表す。
代表的なfield:
- Member ID
- Role
- Department
- User Link
- Notes
ProjectMembersは、Schedulerのlane、TaskのAssignee、制作上のrole、部署割り当てに関係する。
2.3 なぜUsersとProjectMembersを分けるのか
同じ人物でも、GoogleアカウントとしてのUserと、制作上のRoleは一致しない場合がある。
例:
- 1人がDirectorとAnimatorの両方を担当する。
- 1つのGoogleアカウントをProduction Teamとして使う。
- 外部スタッフにはGoogleアカウントはあるが、Scheduler laneには出さない。
- 仮の担当枠はあるが、まだUserが決まっていない。
- AdminはMOTK管理者だが、制作上のMemberではない。
UserGuideでは、Usersは「ログイン・共有・権限」、ProjectMembersは「制作上の担当・役割」と説明するとよい。
2.4 User Link
ProjectMembersはUser LinkでUsersと紐づく。
User Linkがあると、制作上の担当とGoogleアカウントを結びつけられる。
User Linkが空でも、ProjectMemberとしては存在できる可能性がある。
User Linkが不正だと、Assignee表示、共有、通知、Scheduler lane、担当者検索がズレる可能性がある。
3. Permission role
3.1 viewer
viewerは閲覧中心のrole。
できる可能性があること:
- Dashboardを見る。
- Tableを見る。
- Detailを見る。
- SchedViewを見る。
- Forumを見る、または投稿できるかは設定次第。
- Originals/ProxiesをGoogle側共有があれば開く。
できない、または制限される可能性が高いこと:
- Inline edit。
- Create New Record。
- Upload。
- Settings保存。
- Proxy requeue。
- Sharing sync。
- Drive Ensure/Fix。
- Publish。
3.2 editor
editorは制作データを編集するrole。
できる可能性があること:
- Table inline edit。
- Detail field edit。
- Create New Record。
- Versions upload。
- Forum投稿。
- Task/Status/Assignee/Due Date編集。
- Scheduler上の安全な編集。
制限される可能性があること:
- Settingsの管理操作。
- User Access / Sharing sync。
- Admin追加。
- project_meta編集。
- SystemConfig編集。
- Proxy root設定。
- Drive Ensure/Fix。
3.3 admin
adminは管理者role。
できる可能性があること:
- Settingsを開く。
- project_metaを編集する。
- PNAVI Configを保存する。
- Themeを保存する。
- Hydrate Originalsを実行する。
- Drive Diff/Fix/Ensureを実行する。
- Proxy Configを保存する。
- Proxy Auditを設定・実行する。
- Requeueする。
- User Access / Sharingを同期する。
- Admin listを管理する。
- DebugPanelで診断する。
注意:
admin roleでも、Google側の共有権限が不足しているとDrive/Sheet操作は失敗する。
3.4 open / bootstrap
Settings server側には、access infoとして open や bootstrap に近い状態が出る可能性がある。
bootstrapは初期管理者未設定時の暫定許可・初期化状態を示す可能性がある。
4. Admin list
4.1 Admin listとは
Admin listは、MOTKの管理者を識別するためのリスト。
Settings画面にはAdmins sectionがあり、Add Adminボタンがある。
管理用workbookのADMIN_USERS sheetに関係する可能性がある。
4.2 AdminとUsers.permissionの違い
Users.permissionのviewer/editorと、Admin listのadminは別管理の可能性がある。
Settings UIにも「Users.permission drives sharing. Valid roles: viewer/editor.」という説明があり、adminは別枠で扱われている。
UserGuideでは、以下のように分けるとよい。
- Users.permission: Google共有同期や通常の閲覧/編集roleに使う。
- Admin list: Settingsや管理操作の許可に使う。
4.3 Admin追加
Admin追加はSettingsのAdd Adminから行う。
想定手順:
- Settingsを開く。
- User Access / SharingのAdmins sectionを見る。
- Add Adminを押す。
- 候補Userを選ぶ。
- Addを押す。
- Admin listに追加されたことを確認する。
- 対象ユーザーがSettingsを開けるか確認する。
4.4 最初のAdmin
初期セットアップ時に最初のAdminをどう作るかは重要。
可能性:
- Script ownerがbootstrap adminになる。
- ADMIN_USERS sheetに手動で追加する。
- Admin workbookで管理する。
- Settingsのbootstrap modeから追加する。
4.5 Adminを削除する場合
削除・無効化導線は実行前に対象ユーザー、ADMIN_USERS、Google共有の3点を確認する。
Admin削除は高リスク。
最後のAdminを消すと管理不能になる可能性がある。
UserGuideでは、削除導線が確定するまで「最後のAdminを消さない」「Script ownerを残す」と注意を書く。
5. User Access / Sharing
5.1 User Access / Sharingの役割
User Access / Sharingは、MOTK内のUsers.permissionと、Google Drive/Sheetsの実共有状態を照合・同期するためのSettings section。
目的:
- 誰がMOTKにアクセスできるか確認する。
- Users.permissionとGoogle共有のズレを見つける。
- viewer/editorをDrive/Sheets共有に反映する。
- mismatchesを検出する。
- 必要なユーザーだけ同期する。
5.2 Valid roles
Sharing syncの対象roleは主に以下。
- viewer
- editor
adminはAdmin list側で別管理される可能性がある。
5.3 Refresh
Refreshは、User Access / Sharingの現在状態を読み直す。
見るもの:
- Users list
- permission
- Google共有状態
- mismatches
- resources
- summary
5.4 Sync Checked
Sync Checkedは、選択したユーザーだけ共有同期する。
使いどころ:
- 新規スタッフを1人追加した。
- 特定ユーザーの権限だけ直したい。
- 全体同期前に小さくテストしたい。
5.5 Sync Mismatches
Sync Mismatchesは、設定と実共有がズレているユーザーをまとめて同期する。
使いどころ:
- 共有状態を一括整備したい。
- ユーザー追加・削除後にズレが多い。
- Drive/Sheetsを手動で触った後にMOTK側へ合わせたい。
注意:
Sync Mismatchesは影響範囲が広い可能性がある。まずRefreshで件数を確認する。
5.6 Access Summary
Access Summaryには、role別件数、mismatch件数、resource別状態などが出る可能性がある。
UserGuideでは「同期前にsummaryを見る」と書く。
5.7 Access Table
Access Tableには各ユーザーの状態が出る。
見るべきもの:
- permission
- checked
- mismatch
- resource access
- Google sharing state
- sync result
- error message
6. Google共有の対象
6.1 Spreadsheet
MOTKのHost Spreadsheetへのアクセス。
Table/Detail/Settingsなど多くの操作に関係する。
viewerなら閲覧、editorなら編集が必要。
ただし、GAS Web Appが「実行ユーザー」または「デプロイ所有者」として実行される設定により、挙動が変わる可能性がある。
6.2 Project Drive root
MOTK project root folder。
OriginalsやProxiesを含む上位フォルダ。
6.3 Originals root
元ファイルの保管場所。
Originalsを開く、Uploadする、Drive Ensureする場合に必要。
6.4 Proxies root
Proxy出力の保管場所。
Proxy preview、Worker output、Proxy Auditに関係する。
6.5 Admin workbook
Admin listや管理用設定が外部workbookにある場合、そのworkbookへのアクセスも必要。
project_metaがexternal sourceの場合も同様。
6.6 Apps Script deployment
Web App自体へのアクセス。
Deployment設定が「Anyone」なのか「組織内」なのか、「実行ユーザー」が誰かによって、ユーザー体験が変わる。
7. 権限不一致の典型例
7.1 MOTKではeditorだがDriveが見えない
症状:
- Tableは見える。
- Detailは見える。
- Originalsを押すとGoogle Drive側でAccess denied。
- Uploadに失敗する。
- Previewが出ない。
- Proxyはあるのに開けない。
原因:
- Users.permissionはeditorだが、Originals/Proxies folderのGoogle共有が不足。
対応:
- SettingsのUser Access / SharingでRefresh。
- 対象ユーザーにmismatchが出るか確認。
- Sync Checkedを実行。
- Google Drive側で実際に開けるか確認。
7.2 Google Driveは見えるがMOTKでは編集できない
症状:
- Drive folderは開ける。
- Tableは見える。
- Inline editができない、または保存で拒否される。
- Settings保存ができない。
- Uploadできない。
原因:
- Google共有はあるが、MOTK内roleがviewer。
対応:
- Users.permissionをeditorに変更。
- 必要ならSharing sync。
- ReloadしてMOTK内roleを再判定。
7.3 AdminのはずがSettingsを開けない
症状:
- Settingsを開くとAccess error。
- Settings画面が出ない。
- Admin sectionが見えない。
原因候補:
- Admin listに入っていない。
- 使用中のGoogleアカウントが違う。
- Admin workbookが読めない。
- Settings auth helperがmissing。
- Web App実行設定によってユーザーemailが取れていない。
対応:
- 現在ログイン中のGoogleアカウントを確認。
- Admin listを確認。
- Script ownerでSettingsを開く。
- DebugPanelのSettings Access infoを見る。
7.4 UsersにいるがPNAVI/Tableが見えない
症状:
- LoginできるがTableが空。
- 一部ページだけ見えない。
- Driveは見えるがMOTKデータが出ない。
原因候補:
- Spreadsheet共有不足。
- Web Appが別Deployment。
- Host Spreadsheet IDが違う。
- Users sheetにemailがあるが、実ログインemailと一致しない。
- Permissionが空または無効値。
7.5 Syncしたのにまだ開けない
原因候補:
- Google共有反映に時間がかかる。
- 別Googleアカウントで開いている。
- Browser cache/sessionが古い。
- 対象resourceがSync対象に含まれていない。
- Shared Driveの権限継承が特殊。
- Web App deployment自体のアクセス制限。
対応:
- Googleアカウントを確認。
- 別ブラウザ/シークレットで試す。
- Drive folderを直接開く。
- SettingsでRefresh。
- DebugPanel Runtime/Accessを見る。
8. 新規スタッフ参加ワークフロー
8.1 最小手順
- Users Tableを開く。
- NewでUserを追加する。
- Emailを入力する。
- User Nameを入力する。
- permissionをviewerまたはeditorにする。
- ProjectMembers Tableを開く。
- 必要ならMemberを作る。
- User LinkでUserとMemberを紐づける。
- Settingsを開く。
- User Access / SharingでRefreshする。
- 対象Userにチェックを入れる。
- Sync Checkedを実行する。
- 対象UserにWeb App URLを渡す。
- Dashboard/Tableが開けるか確認する。
- Drive Originals/Proxiesが開けるか確認する。
8.2 制作上の担当者として追加する場合
- UsersにGoogle accountを追加。
- ProjectMembersに制作roleを追加。
- Departmentを設定。
- User Linkを設定。
- TasksのAssigneeでMemberを選べるか確認。
- SchedulerのMember laneに出るか確認。
- SchedViewでlane visibilityに表示されるか確認。
8.3 閲覧だけの外部スタッフ
- Usersに追加。
- permissionをviewerにする。
- ProjectMembersには追加しない、または必要に応じてGuest roleを作る。
- Sharing syncでviewer共有。
- Table/Detail/SchedViewが見えるか確認。
- Uploadや編集ができないことも確認する。
8.4 一時的な外部editor
- Usersに追加。
- permissionをeditorにする。
- 期間と担当範囲をNotesに書く。
- 必要なDrive folderだけ共有されるか確認する。
- 作業終了後にviewerへ戻す、または共有解除する。
- Sync Mismatchesで状態を揃える。
8.5 Adminを追加する場合
- 先にUsersに追加する。
- Google Drive/Sheets共有をeditor相当にする。
- SettingsのAdmin sectionからAdd Adminする。
- Admin listに出るか確認する。
- 対象者がSettingsを開けるか確認する。
- Proxy/Drive操作は最初に小さい操作でテストする。
9. スタッフ退場 / 権限削除ワークフロー
9.1 退場時の基本
- 対象Userを確認する。
- 担当中Tasksを確認する。
- ProjectMembersのroleを確認する。
- 未完了TaskのAssigneeを変更する。
- User permissionをviewerまたは無効相当に変更する。
- Google Drive/Sheets共有を外す。
- Admin listに入っていれば削除する。
- Sharing Syncを実行する。
- 対象Userでアクセスできないことを確認する。
9.2 退場前に確認するもの
- 担当中Task
- Scheduler card
- Forum投稿
- Upload履歴
- ProxyJobs claimed_by
- Drive上の所有ファイル
- Admin権限
- 外部共有リンク
9.3 完全削除ではなく無効化
制作履歴を保つため、User recordやProjectMember recordを物理削除しない方がよい場合がある。
退場者の記録を残しつつ、permissionと共有だけ外す運用が安全。
UserGuideでは「制作履歴を残すため、削除より無効化を基本にする」と説明候補にできる。
9.4 最後のAdminを消さない
最後のAdminを削除すると、Settingsを管理できなくなる可能性がある。
Admin削除前には、少なくとも2人のAdminが残るか確認する。
10. role変更ワークフロー
10.1 viewerからeditorへ
- Users Tableでpermissionをeditorに変更する。
- SettingsのUser Access / Sharingを開く。
- Refreshする。
- 対象UserをSync Checkedする。
- 対象UserがTable編集またはUploadできるか確認する。
10.2 editorからviewerへ
- 未完了の編集作業がないか確認する。
- Tasks/SchedulerのAssigneeを必要なら変更する。
- Users.permissionをviewerに変更する。
- Sync Checkedを実行する。
- 対象Userが編集できないことを確認する。
10.3 admin追加
- Users.permissionだけではadminにならない可能性がある。
- Admin sectionでAdd Adminする。
- Settingsを開けるか確認する。
- Google Drive/Sheetsのeditor権限も確認する。
10.4 admin解除
- 代替Adminがいるか確認する。
- 対象者の管理作業が完了しているか確認する。
- Admin listから外す。
- Users.permissionは必要に応じてeditor/viewerにする。
- Settings accessが消えたことを確認する。
11. Sharing syncの安全運用
11.1 まずRefresh
Sync前に必ずRefreshする。
現在のmismatchやresourcesを確認せずにSyncすると、意図しない共有変更が起きる可能性がある。
11.2 小さくSyncする
新しいユーザー1人だけなら、Sync Checkedを使う。
全体のズレを直す場合だけSync Mismatchesを使う。
11.3 実行後に確認する
Sync後に確認するもの:
- Settingsのstatus/log
- Access Summary
- 対象ユーザーのmismatchが消えたか
- Drive folderを直接開けるか
- Web Appを開けるか
- Table/Detail/Uploadの操作権限が期待通りか
11.4 大量同期前の注意
大量のUserをSyncする前に確認すること:
- Users.permissionが正しい。
- 退場者が残っていない。
- Adminを誤ってviewerにしていない。
- Drive root idが正しい。
- Host Spreadsheetが正しい。
- Script deploymentが正しい。
11.5 共有同期のログ
SettingsにはLogがある。
Sharing sync後はLogを確認する。
エラーが出た場合は、Settings LogとAccess Summaryを報告に含める。
12. Access errorの読み方
12.1 Access error page
Settingsを開いたときにAccess error pageが出る場合がある。
これはSettings templateが壊れたとは限らない。
権限チェックで止めている可能性がある。
12.2 Access required系
Access requiredと出た場合:
- ログイン中のGoogleアカウントを確認する。
- Users.permissionを確認する。
- Admin listを確認する。
- Google Drive/Sheets共有を確認する。
- Web App deploymentのaccess設定を確認する。
12.3 Settings auth helper missing
Settings auth helper missingは、権限判定用関数が見つからない状態。
通常ユーザーが直す問題ではない。
Admin/Developerへ報告する。
12.4 NO_ADMIN_WORKBOOK
Admin workbookが必要なのに見つからない場合の可能性がある。
初期セットアップ、admin workbook ID、共有権限を確認する。
13. Role別にできること
13.1 Viewer向けUserGuide
Viewerは、プロジェクトの状態を見るためのrole。
できること:
- Dashboardを見る。
- Shots/Assets/Tasks Tableを見る。
- Detailを見る。
- SchedViewを見る。
- Forumを見る。
- Drive共有があればOriginals/Proxiesを開く。
注意:
- 編集・Upload・Settings操作はできない場合がある。
- 見えないファイルがある場合はMOTKではなくGoogle Drive共有不足の可能性もある。
13.2 Editor向けUserGuide
Editorは制作データを更新するrole。
できること:
- Table inline edit。
- Detail edit。
- New Record作成。
- Link Pickerで関連付け。
- Upload Versions。
- Task status更新。
- Schedulerで自分の範囲を編集できる可能性。
注意:
- SettingsやSharing操作はAdmin向け。
- ID、Originals URL、versions pointer JSONなどは直接編集しない。
13.3 Admin向けUserGuide
Adminはプロジェクト運用を保守するrole。
できること:
- Settings管理。
- Users/Sharing同期。
- project_meta/SystemConfig管理。
- PNAVI/Theme設定。
- Drive Ensure/Fix/Hydrate。
- Proxy Config/Audit/Requeue。
- WorkerKit setup。
- DebugPanel診断。
注意:
- Admin操作は制作全体に影響する。
- Sync Mismatches、Drive Ensure、Proxy Requeue、Task Recalculate、Publishは実行前に対象を確認する。
14. User Access / SharingのUI
14.1 Admins section
Admins sectionは、MOTKの管理者一覧を表示する。
AddボタンからAdminを追加する。
Admin workbookまたはADMIN_USERS sheetに関係する。
14.2 Sharing sync section
Sharing sync sectionは、Users.permissionをもとにGoogle共有を同期する。
説明文としては「Users.permission drives sharing. Valid roles: viewer / editor.」がある。
14.3 Refresh button
現在のUsersと共有状態を読み直す。
14.4 Sync Checked button
チェックしたユーザーだけ同期する。
14.5 Sync Mismatches button
設定と共有がズレているユーザーをまとめて同期する。
14.6 accessHint
処理中や結果のメッセージが出る。
14.7 accessSummary
role別件数、mismatch件数、resource別状態などのsummaryが出る。
14.8 accessTable
ユーザーごとの状態を表示する。
15. Dashboard側のUser Access表示
DashboardにもUser Access / SharingやSystem Health / Mismatchが出る可能性がある。
Dashboardでの位置付け:
- 軽い確認
- mismatchの気づき
- Settingsへ移動する前のsummary
Settingsでの位置付け:
- 詳細確認
- 同期実行
- Admin追加
- Log確認
UserGuideでは、Dashboardは確認、Settingsは実行、と分ける。
16. User/Member/Task/Schedulerの関係
16.1 TaskのAssignee
TaskのAssigneeはProjectMemberを指すことが多い。
つまり、TaskはGoogle Userではなく制作上のMemberへ割り当てられる。
16.2 Scheduler lane
SchedulerのMember laneはProjectMembersを使う可能性が高い。
Usersに追加しただけではScheduler laneに出ない場合がある。
16.3 Google accountとの接続
ProjectMemberがUser Linkを持つことで、Google accountと制作上の担当を結びつける。
16.4 権限と担当は別
editor権限があることと、Task担当であることは別。
- editor権限: MOTK上で編集できる。
- Assignee: 作業担当としてスケジュールやTaskに出る。
この違いはUserGuideで強調する必要がある。
17. セキュリティ上の注意
17.1 viewer/editorの最小権限
必要以上にeditorを付与しない。
閲覧だけの人はviewerにする。
外部スタッフは必要期間だけeditorにする。
17.2 Adminは少数にする
AdminはSettings、Sharing、Drive、Proxy、project_metaに影響する。
制作メンバー全員をAdminにしない。
17.3 Drive共有リンクに注意
Google Driveの共有リンクが「リンクを知っている全員」になっていると、MOTK内権限とは別にファイルが見える可能性がある。
UserGuideでは、Drive rootやOriginals/Proxiesの共有設定を確認するよう書く。
17.4 Web App deployment設定
Web Appの公開範囲と実行ユーザー設定は、MOTKのセキュリティに強く影響する。
- 誰がアクセスできるか
- 誰の権限で実行されるか
- ユーザーemailが取得できるか
17.5 退場者処理
退場者はUsers.permissionだけでなく、Google Drive/Sheets共有も外す必要がある。
Admin listからも外す。
18. 権限問題トラブルシュート
18.1 Settingsが見えない
確認順:
- どのGoogleアカウントで開いているか。
- Usersにそのemailがあるか。
- Admin listにあるか。
- Spreadsheetを開けるか。
- Admin workbookを開けるか。
- Web App deploymentが許可しているか。
- DebugPanelでSettings Access infoを見る。
18.2 Tableは見えるが編集できない
確認順:
- Users.permissionがviewerではないか。
- editorになっているか。
- 対象fieldがeditableか。
- write accessがあるか。
- Consoleにpermission errorがないか。
- Google Spreadsheet側で編集権限があるか。
18.3 Uploadできない
確認順:
- Users.permissionがeditor以上か。
- write accessがあるか。
- Originals folderに書き込めるか。
- Proxies root idが設定されているか。
- field_idがversions typeか。
- Console/Settings Logを見る。
18.4 Originalsを開けない
確認順:
- Originals URLがあるか。
- Drive folderが存在するか。
- Google Drive共有があるか。
- Hydrate Originalsを実行済みか。
- Drive rootが正しいか。
18.5 Sync Checkedが失敗する
確認順:
- Admin権限があるか。
- 対象Userのemailが正しいか。
- permissionがviewer/editorか。
- Drive/Sheets resource IDが正しいか。
- Admin workbookにアクセスできるか。
- Settings Logを見る。
18.6 Sync Mismatchesが怖い場合
まずRefreshして、mismatch件数と対象ユーザーを確認する。
不明なユーザーが含まれる場合はSync Checkedで小さく試す。
大量同期は、退場者や外部共有を確認してから実行する。
19. 問題報告テンプレート
19.1 権限問題テンプレート
問題名:
対象ユーザーemail:
ログイン中のGoogleアカウント:
MOTK Users.permission:
Admin listにいるか:
ProjectMemberにいるか:
User Link:
操作した画面:
操作内容:
Observed result:
Expected result:
Spreadsheetを直接開けるか:
Originals folderを直接開けるか:
Proxies folderを直接開けるか:
Settings User Access / Sharing summary:
Settings Log:
Console:
19.2 新規ユーザー追加失敗テンプレート
追加したUser:
Email:
Permission:
ProjectMember:
User Link:
Sync Checked実行済みか:
Drive/Sheetsを直接開けるか:
Web Appを開けるか:
Dashboard表示:
Table表示:
Detail表示:
Upload可否:
19.3 Admin追加失敗テンプレート
対象User:
対象email:
Usersに存在するか:
Add Admin操作結果:
Admin listに表示されるか:
対象者がSettingsを開けるか:
Access error message:
Admin workbook access:
Settings Log:
19.4 Sharing sync失敗テンプレート
操作:
- Refresh
- Sync Checked
- Sync Mismatches
対象User数:
対象email:
permission:
mismatch表示:
sync result:
error message:
Google Drive/Sheets実確認:
Settings Log:
20. QA / Acceptance
20.1 User Access / Sharingで確認すること
- SettingsがAdminで開ける。
- Admin listが表示される。
- Add Admin modalが開く。
- Users listが表示される。
- mismatches filterが動く。
- all users filterが動く。
- searchが動く。
- resource filterが動く。
- Refreshが動く。
- Sync Checkedがcoherentに応答する。
- Sync Mismatchesがcoherentに応答する。
- frontend/backend result mismatchがない。
20.2 Access制限はbug扱いしない場合がある
非AdminユーザーでSettingsが見えないことはexpectedの場合がある。
QA報告では、access-limitedとbugを分ける。
20.3 高重大度になる問題
- viewerが管理操作できる。
- editorがSharing syncできる。
- AdminではないのにAdmin追加できる。
- 退場者がまだDrive/Sheetsにアクセスできる。
- Syncで意図しないユーザーをeditorにする。
- Users.permissionと違う共有が大量に適用される。
20.4 中重大度になる問題
- Settings UIではerrorだがbackendは成功している。
- Summaryのmismatch件数が更新されない。
- Search/filterが効かない。
- Sync後に画面更新が必要。
20.5 低重大度になる問題
- 表示文が分かりにくい。
- Role説明が不足。
- Table幅が狭くて読みづらい。
- 読み込みが遅いが正しい。
21. 注意事項の要点
21.1 UsersとMembers
UsersはGoogleアカウントとMOTK権限に関係します。ProjectMembersは制作上の担当・役割に関係します。TaskのAssigneeやScheduler laneに出したい場合は、UserだけでなくProjectMemberも確認してください。
21.2 権限は2層
MOTK内でeditorでも、Google Drive/Sheetsの共有が不足しているとファイルを開いたりUploadしたりできません。権限問題では、MOTK内roleとGoogle共有の両方を確認してください。
21.3 Sync前のRefresh
Sharing syncを実行する前に、必ずRefreshして現在のmismatchと対象ユーザーを確認してください。
21.4 Adminは最小限
AdminはSettings、Drive、Proxy、Sharingに影響します。通常の制作編集者はeditorで十分な場合があります。
21.5 新規スタッフ追加
新規スタッフを追加したら、Usersへの追加、ProjectMembersとの紐づけ、Sharing sync、実際のログイン確認までを1セットとして扱ってください。
21.6 退場者処理
退場者はMOTKのpermissionだけでなく、Google Drive/Sheets共有とAdmin listも確認してください。
第7部 管理・保守(Adminガイド)
1. Admin setupの位置付け
MOTKは単なるフロントエンドではない。
Admin setupでは、以下をつなぐ必要がある。
- Google Apps Script Web App
- Host Spreadsheet
- project_meta
- SystemConfig
- Fields
- Pages
- Shots / Assets / Tasks / ProjectMembers / Users
- Google Drive Originals root
- Google Drive Proxies root
- Proxy Worker Kit
- User Access / Sharing
- DebugPanel
UserGuideでは、Admin setupを「最初に1回だけ行う設定」と「制作中に継続的に行う保守」に分ける。
2. Admin setupの大分類
2.1 Initial setup
初回構築。
やること:
- Host Spreadsheetを決める。
- Apps Scriptをデプロイする。
- HOST_SS_IDを設定する。
- project_metaを用意する。
- Fieldsを用意する。
- 各entity sheetを用意する。
- Drive rootを作る。
- Settingsを開く。
- User Access / Sharingを設定する。
- WorkerKitをセットアップする。
- DebugPanelで診断する。
2.2 Maintenance
制作中の保守。
やること:
- Drive foldersをEnsure/Fixする。
- Hydrate Originalsを実行する。
- Proxy Auditを見る。
- Requeueする。
- Users/Sharingを同期する。
- FieldsやPages変更後にDebugPanelで確認する。
- Worker稼働を確認する。
2.3 Recovery
問題発生時の復旧。
やること:
- DebugPanelで原因範囲を切る。
- Settings Logを確認する。
- Drive Diff/Fixを使う。
- ProxyJobs/UploadInbox/ProxyAuditを見る。
- Cache Hydrateする。
- FieldTypes/Column Contract/Binding Integrityを確認する。
- PublishやSyncなど広範囲操作の前に対象を限定する。
3. 初期セットアップ完全版
3.1 Host Spreadsheetを決める
Host SpreadsheetはMOTKの制作データを保持する中心ファイル。
入るもの:
- Shots
- Assets
- Tasks
- ProjectMembers
- Users
- Pages
- Fields
- project_meta
- SystemConfig
- UploadInbox
- ProxyJobs
- ProxyAudit
- ProxyWorkers
一部は外部admin workbookやIMPORTRANGE mirrorになる可能性がある。
3.2 HOST_SS_IDを設定する
DriveBuilderには installHostSpreadsheet() があり、Active SpreadsheetのIDをScript PropertiesのHOST_SS_IDへ保存する。
手順:
- Host Spreadsheetを開く。
- Apps Script editorを開く。
installHostSpreadsheet()を1回実行する。- LogでHOST_SS_IDが設定されたことを確認する。
注意:
- 間違ったSpreadsheetで実行すると、MOTKが別のデータを読む。
3.3 Apps Script Web Appをデプロイする
設定時に確認すること:
- Web App URLを取得する。
- Execute asの設定。
- Who has accessの設定。
- Google認証が必要か。
- Deployment URLをUserGuide/Debug/WorkerKitに渡す。
3.4 project_metaを用意する
project_metaはプロジェクト全体の意味設定。
代表key:
- originals_root_url
- ui_theme
- pnavi.config.json
- schedule系設定
- fieldmap系設定
- project name系設定
project_metaはlocal_sheet、external_importrange_mirror、formula_managed_local_sheet、external_source_only、missingなどの管理モードがある。
Settingsでread-onlyになる場合がある。
3.5 SystemConfigを用意する
SystemConfigは運用設定。
代表key:
- drive.originals.root_id
- drive.proxies.root_id
- proxy.preset.default
- proxy.audit.enabled
- proxy.audit.hour
- proxy.audit.limit
- proxy.audit.entities
- project_meta.source_spreadsheet_id
Proxy/Worker/Audit/外部project_metaに関係する。
3.6 Fieldsを用意する
FieldsはMOTKのschema。
必須:
- field_id
- entity
- label / field_name
- type
- editable
- required
- options
- core flag
UserGuideでは、FieldsがMOTKの列理解の中心であると説明する。
3.7 Entity sheetsを用意する
必要sheet:
- Shots
- Assets
- Tasks
- ProjectMembers
- Users
- Pages
行構造:
- 1行目: field_id
- 2行目: label
- 3行目以降: data rows
MOTKは列番号ではなくfield_idで読むべき。
3.8 Drive Originals rootを作る
Originals rootは元ファイルを保持するDrive folder。
Settingsまたはproject_meta/SystemConfigにfolder id/urlを保存する。
DriveBuilderはOriginals rootの下にentity rootを作る。
3.9 Drive Proxies rootを作る
Proxies rootはProxy Workerが出力する軽量プレビュー用folder。
SystemConfigの drive.proxies.root_id に保存する。
3.10 Settingsで初期確認
Settingsで見るもの:
- project_meta rowsが読める。
- meta_management modeが期待通り。
- Themeが保存できる。
- PNAVI Configが保存できる。
- SystemConfigにroot idがある。
- User Access / Sharingが表示される。
- Proxy Opsが表示される。
- Proxy Auditが表示される。
3.11 DebugPanelで初期診断
初期セットアップ完了前にDebugPanelでRun all checks。
見るもの:
- Runtime
- Data Maps / Page
- Schema/Meta Health
- FieldTypes Health
- Entity samples
- Originals diagnostics
- Column Contract
- Binding Integrity
3.12 1件のEnd-to-End test
最初に1件だけテストrecordで全体を通す。
推奨:
- Test Shotを作る。
- Shot Detailを開く。
- Open Originalsを試す。
- Versions Uploadを試す。
- ProxyJobsにjobが入るか見る。
- Worker onceで1件処理する。
- Previewが出るか見る。
- Taskを作り、Shot Linkを設定する。
- Scheduler/SchedViewに出るか見る。
- ForumでEntity Threadを作る。
- DebugPanelで重大エラーがないか見る。
4. DriveBuilder運用
4.1 DriveBuilderの役割
DriveBuilderはMOTKのGoogle Drive folder構造を保証・監査する。
役割:
- Originals rootを確認する。
- 01shots / 02assets rootを作る。
- 03tasks / 04misc / 05deletedをオンデマンドで作る。
- record folderを作る。
- id__codeへrename/consolidateする。
- Versions folderを作る。
- Diff/Fixする。
- Soft deleteする。
4.2 Safety principle
DriveBuilder系操作は「不足分を作る」方向が基本。
SettingsのEnsure All Foldersは安全系。
既存フォルダやファイルを削除・移動・掃除しない。
ただし、folder consolidationやsoft deleteは重複整理・移動を含む可能性があるため、Admin向けに慎重に説明する。
4.3 Ensure All Folders
用途:
- 初期セットアップ後。
- 新規Shot/Asset/Taskを大量追加した後。
- Drive folderが不足しているとき。
動作:
- Shots / Assets / Tasks の不足Originals folderを作る。
- 既存folder/fileは動かさない。
実行後確認:
- Settings Log。
- Drive Diff。
- 対象DetailのOpen Originals。
- DebugPanel Originals diagnostics。
4.4 Drive Diff
用途:
- Sheets上のrecordとDrive folderのズレを見る。
出力:
- missing
- existing
- hubTotal
- driveTotal
使い方:
- Settingsを開く。
- Drive Folders Diff/Fixへ移動。
- entityを選ぶ。
- Diffを押す。
- missing件数を見る。
4.5 Fix Missing
用途:
- Drive Diffでmissingになったfolderだけを作る。
安全性:
- 不足folderだけ作る。
- 既存folder/fileは基本的に動かさない。
使い方:
- Diffを実行する。
- missingがあることを確認する。
- 必要ならlimitを入れる。
- Fix Missingを押す。
- 再度Diffを実行する。
4.6 Record folder naming repair
DriveBuilderは、bare id folderとid__code folderを統合する可能性がある。
例:
sh_0001sh_0001__501A
両方ある場合、canonical folderへ中身を統合し、重複folderをtrashに送る場合がある。
UserGuideでは、通常ユーザー向けではなくAdmin/Recovery向けに書く。
4.7 Versions folder repair
用途:
- 新しいversions fieldを追加した。
- 既存recordsにversions folderがない。
- legacy
shotview/assetviewfolderをfield_id付きに移行したい。
動作:
- record folder内に
field_id__labelfolderを作る。 - legacy folderがあればrename/promotionする可能性がある。
- nested versions folderをpromoteする可能性がある。
確認:
- 対象record folder内のversions folder名。
- Upload後の保存先。
- ProxyJobsのfield_id。
- Detail versions card。
4.8 Soft delete
Soft deleteはrecord folderを05deletedへ移動する。
完全削除ではない。
UserGuideでは「物理削除ではなく退避」と説明候補にする。
5. Cache Hydrator運用
5.1 Cache Hydratorの役割
Cache HydratorはOriginals URLの定期水和処理。
目的:
- Shots / Assets / TasksのOriginals URLを埋める。
- 既存の有効URLは維持する。
- 無効なURLはclearする。
- Drive folder名からrecord IDを推定してmapする。
5.2 Daily hydration
SA_installCacheHydratorTriggers() は毎日3時に SA_runCacheHydrationDaily を動かすtriggerを作る。
SA_runCacheHydrationDaily() は SA_hydrateOriginalsUrls() を実行する。
5.3 Hydrate Originals URLs
SettingsにもHydrate Originals URLs操作がある。
対象:
- all
- shot
- asset
- task
ただし実装側の SA_hydrateOriginalsUrls() は全entityを回す形に見える。
5.4 Hydrationがすること
各entityで行うこと:
- 対象sheetを開く。
- id columnを見つける。
- originals columnを見つける。
- originals root folderを見つける。
- entity root folderを探す。
- folder名からrecord IDを抽出する。
- 現在のOriginals URLが有効なら維持する。
- 無効ならclearする。
- 空ならDrive folder mapからURLを入れる。
5.5 Hydrationの結果
結果summary:
- updated
- unchanged
- missing
- invalidCleared
- ms
5.6 Hydrationを使う場面
- 手動でDrive folderを作った。
- Sheet上のOriginals URLが空。
- Originals URLが無効になった。
- Drive rootを移行した。
- Open Originalsが効かない。
- Proxy AuditがOriginals folderを見つけられない。
5.7 Hydrationの注意
HydrationはURLキャッシュ補完であり、record自体を作るものではない。
Drive folderがない場合、Hydrateだけではmissingのままになる可能性がある。
その場合はDrive Ensure/Fixが必要。
6. Proxy Worker運用
6.1 Proxy pipelineの全体
Proxy pipelineは以下の流れ。
- UserがVersions/OriginalsへUploadする。
- UploadInboxへ記録される。
- ProxyJobsへpending jobが入る。
- Workerがpending jobをclaimする。
- Workerがffmpeg等でproxyを作る。
- Proxies rootへoutputする。
- ProxyJobsがdoneまたはerrorになる。
- Versions pointerが更新される。
- Table/Detail/Previewに反映される。
6.2 WorkerKitのSetup
手順:
- WorkerKit pageを開く。
- Download Worker Kitを押す。
- zipを展開する。
MOTK Proxy Worker.batを起動する。- MOTK public URLを貼る。
- Detectを押す。
- Google sign-inを行う。
- Companion appがffmpeg、OAuth token、Spreadsheet reachabilityを確認する。
- Startする。
- Settings Proxy OpsでWorkersとProxyJobsを見る。
6.3 Run one job only
04_run_worker_once.bat は1件だけ処理する。
使いどころ:
- 初回セットアップ確認。
- 変換preset確認。
- エラー再現。
- 本番連続運転前の小テスト。
6.4 Workerが処理するmedia
WorkerKitの説明:
- Video becomes MP4 proxy.
- Images become image proxy without resizing.
- PDFs pass through as original.
UserGuideに書ける方針:
- 動画は軽量MP4化。
- 画像はimage proxyとして扱う。
- PDFは変換せずoriginal扱い。
6.5 Workerが止まっている場合
症状:
- ProxyJobsがpendingのまま。
- UploadInboxはqueuedだがPreviewが出ない。
- Proxy Auditでmissingになる。
- Recent Proxy Jobsのheartbeatが古い。
対応:
- WorkerKitを起動する。
- OAuth/token状態を確認する。
- ffmpegが使えるか確認する。
- Spreadsheet reachabilityを確認する。
- Run one job onlyで1件処理する。
- Settings Proxy Opsでdone/errorを見る。
7. Proxy Audit運用
7.1 Proxy Auditの目的
Proxy Auditは、OriginalsにファイルがあるのにProxyがないrecordを見つける。
制作レビューではProxyがないとTable/Detailの表示が重くなる、またはPreviewできない。
7.2 Proxy Audit schedule
設定:
- Daily Scan enabled
- Hour
- Limit
- Entities: shots/assets/tasks
Daily ScanをONにすると、指定時間に自動scanする。
7.3 Run Audit Now
手動でscanする。
使いどころ:
- Upload後に確認したい。
- Worker復旧後にmissingが減ったか確認したい。
- Release前チェック。
- 週次保守。
7.4 Proxy Audit rowの読み方
見る項目:
- entity
- record_id
- display_name
- originals_file_count
- latest_original_file_name
- latest_original_file_id
- latest_original_modified
- proxy_status
- proxy_file_name
- latest_job_status
- latest_upload_status
- note
7.5 Requeue
Proxy Audit rowからRequeueすると、新しいProxyJobsを作る。
使いどころ:
- Originalsはある。
- Proxyがmissing。
- Workerを再起動済み。
- 既存jobがerrorまたは古い。
注意:
- 同じrecordに重複jobを作りすぎない。
- まず1件で試す。
- Worker onceで結果を見る。
7.6 Proxy Audit復旧手順
- Settings Proxy Opsでroot idを確認。
- Workerが動いているか確認。
- Proxy AuditをRun Now。
- Missing rowsを見る。
- 1件だけRequeue。
- Worker onceで処理。
- ProxyJobsがdoneになるか確認。
- Detail/Previewで表示確認。
- 問題なければ複数件を処理する。
8. Field追加後の保守手順
8.1 通常fieldを追加した場合
- Fieldsに新fieldを追加する。
- 対象entity sheetの1行目にfield_idを追加する。
- 2行目にlabelを追加する。
- typeを設定する。
- editable/required/optionsを設定する。
- Pages presetに表示列を追加する。
- Detail presetにcardを追加する。
- DebugPanelでFieldTypes Healthを確認する。
- Column Contractを確認する。
- Table/Detailで表示確認する。
- Inline editが必要ならsafe fieldでテストする。
8.2 link fieldを追加した場合
追加確認:
- link target entity。
- LINK_MAPSに対象entityがある。
- Link Pickerが開く。
- IDではなくentity_nameで表示される。
- chip clickでDetailへ飛ぶ。
- Table/Detail/Create modalで同じwidgetが出る。
8.3 versions fieldを追加した場合
追加手順:
- Fieldsでtype=versionsを設定する。
- 対象entity sheetへfield_id列を追加する。
- Detail presetにversions cardを追加する。
- SettingsまたはDebugからVersions folder repairを実行する。
- 既存recordに
field_id__labelfolderができるか確認する。 - Test uploadする。
- UploadInboxとProxyJobsを見る。
- Worker onceで1件処理する。
- Detail/Previewで表示確認する。
8.4 originals fieldを追加/変更した場合
追加確認:
- originals columnをServerFieldsが見つける。
- Hydrate Originalsが対象列へ書く。
- Open Originalsが正しいfolderを開く。
- Drive Diff/Fixと整合する。
8.5 field_idを変えてはいけない理由
field_idはMOTK内の参照ID。
変更すると以下が壊れる可能性がある。
- Pages JSON
- Detail card layout
- Table preset
- Versions folder name
- ProxyJobs field_id
- latest_pointer_json
- Column Contract
- Binding Integrity
field labelは変えられるが、field_idは原則変えない。
9. PageConfig / Preset保守
9.1 Presetが壊れたとき
症状:
- Tableに列が出ない。
- Detail cardが空。
- 別entityのfieldが出る。
- Save/Revertが効かない。
- Page selectorに出ない。
原因候補:
- Pages JSONが壊れている。
- field_idが存在しない。
- entity/pageType mismatch。
- Pages cacheが古い。
- Fields変更後にpresetを更新していない。
9.2 修復手順
- DebugPanelのData Maps / Pageを見る。
- Schema/Meta Healthを見る。
- Pages JSONがvalid field_idだけを参照しているか確認する。
- TableでDefault Pageを開く。
- Fields menuで必要列を選び直す。
- Save Asで新しいPresetを作る。
- 壊れたpresetを退避または修正する。
9.3 Default Pageに戻す
Pagesが壊れた場合、Fields metadataからDefault Pageを合成できる可能性がある。
UserGuideでは「表示設定が壊れたら、まずDefault表示に戻してデータ自体が読めるか確認する」と書ける。
10. Drive障害Runbook
10.1 Open Originalsが開けない
確認順:
- record IDがあるか。
- Originals URL fieldがあるか。
- Sheet上のOriginals URLが空か無効か。
- project_meta/SystemConfigにOriginals rootがあるか。
- Drive folderが存在するか。
- Google共有があるか。
- Hydrate Originalsを実行する。
- それでもなければDrive Diff/Fixを実行する。
- DebugPanel Originals diagnosticsを見る。
10.2 Folderが重複している
例:
sh_0001sh_0001__501A
対応:
- どちらにファイルがあるか確認する。
- DriveBuilder consolidation対象か確認する。
- いきなり手動削除しない。
- AdminがDriveBuilder修復処理または手動統合を判断する。
- 修復後、Hydrate Originalsを実行する。
10.3 Wrong folderにUploadされた疑い
重大度は高い。
確認:
- entity
- record_id
- field_id
- UploadInbox originals_folder_id
- ProxyJobs originals_folder_id
- Drive folder path
- latest_pointer_json
- Detail Preview
対応:
- 追加Uploadを止める。
- 対象recordを特定する。
- Drive上の実ファイルを確認する。
- UploadInbox/ProxyJobsのrowを確認する。
- DebugPanel Originals diagnosticsを見る。
- 必要なら手動移動ではなく修復方針を決める。
10.4 Drive rootを移行した場合
手順候補:
- 新しいOriginals rootを作る。
- 新しいProxies rootを作る。
- project_meta/SystemConfigのroot id/urlを更新する。
- Drive Ensureを実行する。
- Hydrate Originalsを実行する。
- Proxy Auditを実行する。
- WorkerKitのconfigを再Detect/確認する。
- 1件Upload/Worker onceで確認する。
- DebugPanelでOriginals diagnosticsを見る。
11. Proxy障害Runbook
11.1 UploadしたがProxyが出ない
確認順:
- Uploadが成功したか。
- UploadInboxにrowがあるか。
- ProxyJobsにpending jobがあるか。
- Workerが動いているか。
- Worker heartbeatがあるか。
- ProxyJobsがerrorになっていないか。
- Proxies root idが設定されているか。
- Proxy Auditでmissingか。
- Requeueが必要か。
11.2 ProxyJobsがpendingのまま
原因候補:
- Workerが起動していない。
- OAuth tokenがない。
- Spreadsheet reachabilityがない。
- Workerが別deployment URLを見ている。
- pending job claimに失敗している。
対応:
- WorkerKitを開く。
- Companion checksを確認する。
04_run_worker_once.batで1件だけ処理する。- Settings Proxy Opsでjob statusを見る。
11.3 ProxyJobsがerror
原因候補:
- failed transcode。
- invalid file type。
- source fileにアクセスできない。
- upload to Proxies failed。
- ffmpeg missing。
- output filename issue。
対応:
- error_messageを見る。
- source fileをDriveで開けるか確認。
- Worker環境でffmpegを確認。
- 1件だけ再実行。
- 必要ならRequeue。
11.4 Proxyが古い
原因候補:
- Originalが更新されたがProxyが再生成されていない。
- latest_original_modifiedがoutput_updated_atより新しい。
- latest_pointer_jsonが古い。
対応:
- Proxy Auditを実行。
- Requeue。
- Worker once。
- Previewで確認。
12. Sharing/Access障害Runbook
12.1 新規ユーザーが開けない
確認順:
- Usersにemailがあるか。
- permissionがviewer/editorか。
- User Access / SharingでRefresh。
- Sync Checkedを実行。
- Spreadsheetを直接開けるか。
- Originals/Proxiesを直接開けるか。
- Web App deployment accessを確認。
- Googleアカウントが違っていないか確認。
12.2 EditorがUploadできない
確認順:
- MOTK roleがeditorか。
- Google Drive Originalsに書けるか。
- Proxies root idが設定されているか。
- write access errorが出ていないか。
- Settings LogとConsoleを見る。
12.3 AdminがSettingsを開けない
確認順:
- Admin listにいるか。
- Usersにemailがあるか。
- Admin workbookが開けるか。
- Settings auth helperがあるか。
- Web App execution user設定を確認。
13. Release前チェックリスト
13.1 Workbook Contract Tests
確認:
- fieldmap.* が存在するFields.field_idを指す。
- 参照fieldが意図したentityに属する。
- required sheetがrequired field idsを含む。
- Pages JSONがvalid field idsだけを参照する。
13.2 App Behavior Tests
確認:
- list viewが全entityで開く。
- detail save pathがfull side effectsを起こす。
- settingsがproject_metaを読み書きできる。
- schedulerがload/commit/snapshot/restoreできる。
13.3 Drive Tests
確認:
- stored URLからOriginals解決できる。
- fallback folder discoveryが動く。
- folder auto-createが動く。
- orphan folder soft deleteが想定通り。
13.4 Proxy Tests
確認:
- uploadでqueue itemが1件作られる。
- workerが1件claimする。
- worker heartbeatが更新される。
- proxy fileがtarget folderへuploadされる。
- queue itemが決定的にcompleteまたはfailする。
13.5 Failure Tests
確認:
- stale worker claim recovery。
- failed transcode。
- failed upload。
- missing folder permissions。
- invalid file type。
14. 週次保守チェックリスト
14.1 毎週見るもの
- Dashboard Project Snapshot。
- Update Feed。
- Settings Proxy Ops summary。
- Proxy Audit missing count。
- User Access mismatches。
- DebugPanel Regression Coverage。
- Scheduler/SchedViewが開くか。
14.2 毎週やる可能性がある操作
- Proxy Audit Run Now。
- Missing ProxyのRequeue。
- Worker heartbeat確認。
- Drive Diff確認。
- User Access Refresh。
- 問題があればSync Checked。
- DebugPanel Run all checks。
14.3 毎週やらない方がよい操作
- 無意味なSync Mismatches一括。
- 不要なDrive Fix大量実行。
- 不要なTask Recalculate。
- Publish前提のScheduler操作。
- field_id変更。
15. 月次保守チェックリスト
15.1 月次で見るもの
- ProjectMeta management mode。
- SystemConfig root id。
- Drive root共有。
- Admin list。
- 退場者の共有。
- ProxyJobs error傾向。
- UploadInbox増加量。
- Pages presetの不要/重複。
- FieldTypes Health。
- Column Contract / Binding Integrity。
15.2 月次で整理するもの
- 退場者のpermission。
- 外部共有。
- 古いdraft schedule。
- 不要なtest record。
- 古いproxy errors。
- 壊れたpreset。
16. 危険操作リスト
16.1 高リスク操作
- Publish schedule。
- Sync Mismatches。
- Admin追加/削除。
- project_meta root id変更。
- SystemConfig root id変更。
- field_id変更。
- Pages JSON直接編集。
- Proxy requeue大量実行。
- Task Recalculateでcompleted含める。
- Drive root migration。
16.2 中リスク操作
- Drive Ensure All。
- Hydrate Originals。
- Fix Missing。
- Versions folder repair。
- PNAVI Config変更。
- Theme変更。
16.3 低リスク操作
- DebugPanel Run all checks。
- Proxy Audit Refresh。
- User Access Refresh。
- SchedViewでView mode確認。
- Dashboard layout変更。
16.4 高リスク操作前チェック
- 対象が正しいか。
- 変更範囲が分かっているか。
- 直前状態を記録したか。
- DebugPanel reportを取ったか。
- 小さい対象で試せるか。
- 失敗時に戻す方法があるか。
- 他の人が作業中でないか。
17. Recovery時の基本原則
17.1 まず壊れている層を分ける
層:
- UI表示
- PageConfig/Preset
- Fields/Schema
- Data rows
- Drive folder
- Proxy queue
- Worker
- Permission/Sharing
- Routing
どの層かを分けずに修復すると、別のものを壊しやすい。
17.2 データ修正より診断を先にする
まず見るもの:
- DebugPanel report
- Console
- Settings Log
- Viewer State
- Schema/Meta Health
- FieldTypes Health
- Column Contract
- Binding Integrity
- Proxy Ops/Audit
- Drive Diff
17.3 いきなり手動でDriveを削除しない
Drive folderの重複やmissingがあっても、手動削除は最終手段。
まずDriveBuilderのDiff/Fix/Ensure/Hydrateで状態を把握する。
17.4 いきなりfield_idを変えない
field_idはMOTK全体の参照基盤。
表示名やlabel変更で済むならfield_idは変えない。
17.5 大量修正前に1件で試す
Proxy Requeue、Worker、Upload、Drive Fix、Sharing Syncは1件または小範囲で試す。
18. Admin向け問題別Runbook一覧
18.1 Tableが空
- DebugPanel Viewer State。
- Data Maps / Page。
- FieldTypes Health。
- Schema/Meta Health。
- Pages JSON。
- Table entity/preset。
- Console。
18.2 Detailが開かない
- URL entity/id。
- Router/Link diagnostics。
- Entity samples。
- Detail smoke。
- Console。
18.3 Link chipがID表示
- LINK_MAPS counts。
- Entity samples。
- entity_name fid。
- FieldTypes Health。
- CommonRenderer。
18.4 Originalsが開かない
- Originals diagnostics。
- project_meta/SystemConfig root。
- Hydrate Originals。
- Drive Diff/Fix。
- Google共有。
18.5 Proxyが出ない
- UploadInbox。
- ProxyJobs。
- Worker heartbeat。
- Proxy Audit。
- Requeue。
- Worker once。
18.6 Settingsが保存できない
- Access info。
- project_meta management mode。
- read-onlyか。
- Admin list。
- Console/Settings Log。
18.7 Schedulerが壊れた
- SchedViewで見る。
- Scheduler Load Diagnostics。
- Card List。
- Lane visibility。
- Snapshot/Undo。
- Publish前ならPublishしない。
第8部 データモデルリファレンス
1. Data modelの基本原則
MOTKのデータモデルは、Google Sheetsを中心にする。
Sheetsは制作データのソース。
Fieldsは、Sheets上の列をアプリがどう読むかを決める翻訳レイヤー。
Pagesは、データの見え方を保存する表示設定。
Driveは、OriginalsとProxiesというファイル実体を保持する。
ProxyJobs / UploadInbox / ProxyAuditは、ファイルとプロキシ生成の状態を記録する運用テーブル。
DebugPanelは、これらの解釈と整合性を検査する診断レイヤー。
UserGuideでは、まず次の分類を出すと理解しやすい。
-
Entity data - Shots - Assets - Tasks - ProjectMembers - Users - Pages
-
Schema / metadata - Fields - project_meta - SystemConfig
-
File / proxy operations - UploadInbox - ProxyJobs - ProxyAudit - ProxyWorkers
-
Aggregation / acceleration - DataHub - cache / viewer snapshot / bootpack
-
External storage - MOTK_ORIGINALS - MOTK_PROXIES
2. Source of truthの説明
2.1 Google Sheets is source
MOTKでは、Google Sheets上のデータ構造・値・ヘッダを正しいものとして扱う。
問題が起きた場合、UserGuideでは「シートが間違っている」と書かない。
正しい説明は以下。
- アプリ側が現在のGS構造を正しく解釈できていない。
- Fields/metadataの翻訳が足りない。
- ServerFieldsやCommonRendererの解釈が合っていない。
- PageConfigが現在のFieldsと合っていない。
2.2 Fieldsは翻訳レイヤー
FieldsはGS実データに合わせてアプリが意味を理解するための翻訳レイヤー。
Fieldsが壊れているからGSを変える、という説明は避ける。
必要なら「現在のGS構造を正しく読むためにFieldsまたは解釈コードを調整する」と説明する。
2.3 field_idはアプリの契約
各entity sheetの1行目にfield_idがある。
アプリはfield_idを基準に列を解釈する。
列番号に依存しない。
field_idを勝手に変えると、Pages JSON、Detail layout、ProxyJobs、Versions folder、latest_pointer_json、Column Contractが壊れる可能性がある。
2.4 labelは人間向け
2行目のlabelは人間向け。
表示名やUI上の説明に使う。
labelは変えられる可能性があるが、field_idとは別。
2.5 idとentity_nameの分離
idは機械用。
entity_nameは人間用。
例:
- Shot ID = sh_0001
- ShotCode = 501A
- Asset ID = as_0001
- Asset Name = Robot Arm
- Task ID = tk_0001
- Task Name = Layout
- Member ID = pm_0001
- Role = Lead Animator
- User ID = us_0001
- User Name = John Smith
idは変えない。
entity_nameは表示名として編集可能にする方針。
3. Sheet row structure
3.1 Entity sheetの標準構造
Shots、Assets、Tasks、ProjectMembers、Users、Pagesは標準的に2段ヘッダを持つ。
- Row 1: Field IDs
- Row 2: Labels
- Row 3+: Data rows
Row 1のfield_idはアプリが読む。
Row 2のlabelは人間が読む。
Row 3以降が実データ。
3.2 なぜ2段ヘッダか
2段ヘッダにする理由:
- field_idでコードが安定して読む。
- labelで人間が分かりやすく見る。
- label変更と内部参照を分離する。
- 列移動に強くする。
- 多言語化や表示名変更に対応しやすくする。
3.3 Admin向け注意
Admin向けには以下を明記する。
- Row 1のfield_idは消さない。
- Row 1のfield_idは重複させない。
- Row 2のlabelだけでfieldを判断しない。
- Row 3以降にデータが入る。
- 新しい列を追加したらFieldsにも定義が必要。
- field_idを変更した場合、PagesやVersionsなども連動して壊れる可能性がある。
3.4 通常ユーザー向け説明
通常ユーザーには、2段ヘッダの詳細は不要。
ただし、Tableで見える列名はlabelであり、内部的にはfield_idで管理されていると軽く説明する価値がある。
4. Entities overview
4.1 shot
shotは映像制作上のショット単位。
主な用途:
- 進捗管理
- レビュー
- タスク連携
- アセット連携
- 素材管理
- スケジュール連携
代表ID:
- sh_0001
代表entity_name:
- ShotCode
4.2 asset
assetは制作で再利用される要素。
主な用途:
- キャラクター
- プロップ
- セット
- 背景
- 環境
- 衣装
- モデル
- リグ
- 素材
代表ID:
- as_0001
代表entity_name:
- Asset Name
4.3 task
taskは作業単位。
主な用途:
- 担当割り当て
- Due Date管理
- Scheduler Card
- Shot/Assetとの紐づけ
- Status管理
- Version upload
代表ID:
- tk_0001
代表entity_name:
- Task Name
4.4 member
memberは制作上の担当・役割。
主な用途:
- Task Assignee
- Scheduler lane
- Department
- Role
- User Link
代表ID:
- pm_0001
代表entity_name:
- Role
4.5 user
userはGoogleアカウントやMOTK利用者。
主な用途:
- Permission
- Sharing sync
- Admin/User access
- Memberとの紐づけ
代表ID:
- us_0001
代表entity_name:
- User Name
4.6 page
pageはTable/Detail/SchedView/Schedulerなどの見え方を保存する設定データ。
主な用途:
- Table preset
- Detail card layout
- Schedule view
- Config JSON
代表ID:
- pg_default
- pg_shot_detail_grid
代表entity_name:
- Page Name
5. Entity relationship
5.1 ShotとAsset
ShotはAsset Linkで複数Assetを参照できる。
AssetはShot Linkで使用先Shotを参照できる。
関係:
- Shot → Asset: このShotで使うAsset
- Asset → Shot: このAssetが使われるShot
UserGuideでは、どちらか一方のlinkだけで十分なのか、双方向更新されるのかは最終確認が必要。
5.2 ShotとTask
ShotはTask Linkで関連Taskを参照できる。
TaskはShot Linkで対象Shotを参照できる。
関係:
- Shot → Task: このShotに必要な作業
- Task → Shot: この作業が属するShot
SchedulerではTaskがCardになる可能性が高い。
5.3 AssetとTask
AssetはTask Linkで関連Taskを参照できる。
TaskはAsset Linkで対象Assetを参照できる。
関係:
- Asset → Task: このAssetに必要な作業
- Task → Asset: この作業が属するAsset
Asset laneやAsset conflictの判定に関係する。
5.4 TaskとMember
TaskはAssigneeまたはmember_linkでProjectMemberを参照する。
Memberは制作上の担当者・役割。
関係:
- Task → Member: 誰が担当するか
- Member → Task: その人/役割の担当作業
5.5 MemberとUser
ProjectMemberはUser LinkでUserを参照する。
関係:
- Member → User: 制作上の担当をGoogleアカウントへ紐づける
- User → Member: そのGoogleアカウントが持つ制作上の役割
5.6 PageとEntity
PageはEntityを対象に持つ。
例:
- table page for shot
- detail page for asset
- schedule view for task/member
Pageは制作データではなく、見え方の設定。
5.7 Upload/ProxyとEntity
UploadInboxとProxyJobsはentityとrecord_idを持つ。
関係:
- UploadInbox → entity/record_id/field_id
- ProxyJobs → entity/record_id/field_id/source_file/output_file
- ProxyAudit → entity/record_id/originals/proxy status
つまり、ファイルは単独で存在するのではなく、必ずentity recordとfield_idへ結びつく。
6. Shots sheet detail
6.1 役割
Shots sheetは、ショット単位の制作データを持つ。
レビュー、進行、素材、タスク、アセット、スケジュールの中心。
6.2 代表field
代表field:
- Shot ID
- ShotCode
- Episode
- Act
- Sequence
- Scene
- Shot
- Status
- TC @fps
- Artist Note
- Producer Note
- Frames
- ShotView
- ShotView Versions
- Materials
- Comp
- Comp Versions
- Asset Link
- Task Link
- Due Date
6.3 Shot ID
Shot IDはprimary key。
形式例:
- sh_0001
編集不可。
Drive folder、link、versions、proxy、schedulerの参照基盤。
6.4 ShotCode
ShotCodeは人間が見るショット名。
例:
- 201A
- 501A
Episode/Act/Sequence/Scene/Shotから派生する可能性がある。
ただし、manual editをAutomationが上書きしないことが重要。
6.5 Hierarchy fields
階層field:
- Episode
- Act
- Sequence
- Scene
- Shot
これらはShotCode生成やHierarchy navigationに使う。
project_metaで表示/非表示が制御される可能性がある。
6.6 Status
Shotの進捗。
例:
- not_started
- in_progress
- review
- approved
- completed
Table filter、Dashboard summary、Scheduler card color、レビュー抽出に使う。
6.7 Shot media fields
ShotView、Comp、Materialsなどは映像・画像・素材に関係する。
- ShotView: レビュー用のショットビュー
- ShotView Versions: バージョン履歴
- Materials: 参照素材や撮影素材
- Comp: 合成結果
- Comp Versions: 合成バージョン履歴
6.8 Link fields
ShotはAsset LinkとTask Linkを持つ。
Asset Link: このShotで使うAsset。
Task Link: このShotに必要なTask。
6.9 Due Date
Shotの締切。
SchedulerやProduction reviewで重要。
Timezoneやdate handlingに注意。
7. Assets sheet detail
7.1 役割
Assets sheetは、制作で使う要素の管理。
キャラクター、プロップ、環境、背景、セット、リグ、モデル、素材などを管理する。
7.2 代表field
代表field:
- Asset ID
- Asset Name
- Asset Type
- Status
- AssetView
- AssetView Versions
- Shot Link
- Task Link
- Notes
7.3 Asset ID
Asset IDはprimary key。
形式例:
- as_0001
編集不可。
7.4 Asset Name
Asset Nameは人間向け表示名。
例:
- Robot Arm
- Body Geo
- Sword100
7.5 Asset Type
Asset Typeは分類。
例:
- character
- prop
- set
- environment
- background
- costume
- rig
- model
実際のoptionsはFields定義に従う。
7.6 Asset media fields
AssetView、AssetView Versionsなど。
Assetのサムネイル、レビュー画像、リファレンス、バージョン確認に使う。
7.7 Asset LinkではなくShot Link
Assets sheet側では、使用先ShotをShot Linkで持つ。
TasksとはTask Linkでつながる。
7.8 Asset conflictとの関係
SchedulerのAsset laneやasset conflictは、TaskのAsset LinkまたはAsset sheetとの関係を使う可能性がある。
Asset Linkが不正だと、conflict表示も不正になる。
8. Tasks sheet detail
8.1 役割
Tasks sheetは作業単位を持つ。
SchedulerでCardとして扱われる可能性が高い。
8.2 代表field
代表field:
- Task ID
- Task Name
- Task Type
- Assignee
- Status
- Due Date
- Shot Link
- Asset Link
- TaskView
- TaskView Versions
- Notes
- Estimate / formula fields
8.3 Task ID
Task IDはprimary key。
形式例:
- tk_0001
編集不可。
8.4 Task Name
Task Nameは人間向け表示名。
例:
- Layout
- Animation Block
- Lighting
- Comp
8.5 Task Type
Task Typeは作業種別。
例:
- layout
- animation
- lighting
- comp
- modeling
- rigging
- review
実際のoptionsはFields定義に従う。
8.6 Assignee
AssigneeはProjectMemberを指すmember_linkである可能性が高い。
UserではなくMemberを参照する点が重要。
8.7 Task Status
Taskの進捗。
Scheduler card color、Table filter、Dashboard summaryに使う。
8.8 Task Due Date
Task締切。
Scheduler、Producer workflow、遅延検出に使う。
8.9 Task Link directions
TaskはShot LinkとAsset Linkを持つ。
Shot taskならShot Linkを持つ。
Asset taskならAsset Linkを持つ。
両方持つ場合もある。
8.10 Task estimate fields
Task Est Recalculateの対象fieldがある。
具体field番号はプロジェクト定義依存。
UserGuideでは「推定日数・推定時間・作業量などを計算するfield」と説明する。
9. ProjectMembers sheet detail
9.1 役割
ProjectMembersは制作上の担当・役割。
Usersとは別。
Scheduler laneやTask Assigneeに使う。
9.2 代表field
- Member ID
- Role
- Department
- User Link
- Notes
9.3 Member ID
形式例:
- pm_0001
編集不可。
9.4 Role
Roleはentity_name。
例:
- Lead Animator
- Producer
- Lighting Artist
- Director
9.5 Department
Departmentは部署。
例:
- ANIMATION
- LIGHTING
- EDITORIAL
- ART
- PRODUCTION
9.6 User Link
User LinkはUsers sheetのUser IDを指す。
MemberとGoogle accountを結びつける。
9.7 使い方
TaskのAssigneeではProjectMemberを選ぶ。
Scheduler laneではProjectMembersが出る。
Userが退場しても、制作履歴上のMemberは残す可能性がある。
10. Users sheet detail
10.1 役割
Users sheetはMOTK利用者やGoogleアカウントを管理する。
10.2 代表field
- User ID
- User Name
- Department
- Permission
- Notes
10.3 User ID
形式例:
- us_0001
編集不可。
10.4 Email
EmailはGoogle accountとの対応に重要。
Sharing sync、Access check、Admin追加、User Linkと関係する。
10.5 Permission
Permissionはviewer/editorなど。
adminはAdmin list側に分かれる可能性がある。
10.6 Department
Userの部署。
MemberのDepartmentと一致するとは限らない。
11. Pages sheet detail
11.1 役割
Pages sheetは表示設定を保存する。
制作データそのものではない。
11.2 代表field
- Page ID
- Page Name
- Page Type
- Entity
- Config JSON
- Created By
11.3 Page ID
形式例:
- pg_default
- pg_shot_detail_grid
編集不可または慎重に扱う。
11.4 Page Name
人間向け表示名。
例:
- Default
- Shot Review
- Production Meeting
- Asset Detail Grid
11.5 Page Type
画面種別。
例:
- table
- detail
- dashboard
- schedule
- view
11.6 Entity
対象entity。
例:
- shot
- asset
- task
- member
- user
11.7 Config JSON
表示構成を保存するJSON。
例:
- Table columns
- Column widths
- Hidden fields
- Sort/filter
- Detail cards
- Grouping
- View type
- Scheduler lane settings
11.8 Created By
ProjectMembersへのmember_link。
Page presetを誰が作ったかを表す。
12. Fields sheet detail
12.1 役割
Fields sheetは、MOTKのschema定義。
各field_idがどのentityのどのfieldで、どのtypeで、編集可能かどうかを定義する。
12.2 代表column
- field_id
- entity
- field_name
- type
- editable
- required
- options
- Core
- Core_values
12.3 field_id
fi_0001 形式。
entity sheetのRow 1と対応する。
12.4 entity
対象entity。
例:
- shot
- asset
- task
- member
- user
- page
12.5 field_name
人間向けfield名。
entity sheetのRow 2と対応する。
12.6 type
fieldの表示・編集タイプ。
CommonRenderer、Create modal、Inline edit、Detail card、Link Picker、Upload処理に影響する。
12.7 editable
ユーザー編集可能か。
Create modalやInline editに出すかどうかに影響する。
12.8 required
recordとして必須か。
Create/Save validationに影響する。
12.9 options
select fieldの候補。
カンマ区切りなどの形式。
新しい値を追加できる運用かどうかは最終確認が必要。
12.10 Core
DataHubに集約するかどうか。
Core=TRUEのfieldはCore_valuesへ集約される。
12.11 Core_values
DataHubに渡す集約値。
形式例:
- FieldName | value1 | value2 | value3
13. Field type完全
13.1 id
機械用の一意識別子。
保存例:
- sh_0001
- as_0001
- tk_0001
- pm_0001
- us_0001
- pg_default
編集不可。
UIでは表示のみ。
内部参照、Drive folder、Versions、ProxyJobs、Scheduler、Linkに使う。
13.2 entity_name
idに対応する人間向け名前。
保存例:
- ShotCode
- Asset Name
- Task Name
- Role
- User Name
- Page Name
編集可能なlabel。
Title、Link chip、Detail header、Dashboard feed、Scheduler cardに使う。
13.3 text
自由入力テキスト。
Notes、Description、TC、Commentなど。
Table/Detailで編集。
13.4 select
選択式の文字列。
Status、Type、Department、Permissionなど。
Fields.optionsから候補を出す。
13.5 date
日付。
Due Date、Start、End、Createdなど。
Timezoneと1日ズレに注意。
13.6 checkbox
真偽値。
Project settings、visibility、flagsなど。
13.7 json
構造化データ。
Pages Config JSON、settings、layout、pointer、metadataなど。
通常はread-onlyまたはAdmin向け。
13.8 originals
Originals Drive folderへのURLまたはfolder id。
UIではOpen Originalsボタン。
通常ユーザーは編集しない。
Hydrate/DriveBuilderで補完される。
13.9 file_list
1recordに紐づく複数ファイル情報。
Materials、Refs、資料など。
server側でDrive folderから解決する可能性がある。
13.10 thumbnails
複数ファイルのサムネイル一覧。
Gridやcontact sheet表示。
ProxyやDrive previewを使う。
13.11 versions
最新バージョンや履歴を扱うfield。
ShotView、AssetView、Comp、TaskViewなど。
latest pointer JSON、Versions folder、ProxyJobsと関係する。
13.12 asset_link
Asset IDを保存するlink field。
UIではAsset Nameのchip。
target entityはassetに固定。
13.13 shot_link
Shot IDを保存するlink field。
UIではShotCodeのchip。
Target entityはshotに固定。
13.14 task_link
Task IDを保存するlink field。
UIではTask Nameのchip。
Target entityはtaskに固定。
13.15 member_link
ProjectMember IDを保存するlink field。
UIではRoleのchip。
Target entityはmemberに固定。
13.16 user_link
User IDを保存するlink field。
UIではUser Nameのchip。
Target entityはuserに固定。
14. Link fieldsの設計
14.1 generic entity_linkではない
MOTKはgenericなentity_linkではなく、専門typeを使う。
- asset_link
- shot_link
- task_link
- member_link
- user_link
これにより、target entityをtype名から確定できる。
14.2 Link fieldの保存値
GSにはtarget entityのidを保存する。
例:
- asset_link → as_0001
- shot_link → sh_0001
- task_link → tk_0001
- member_link → pm_0001
- user_link → us_0001
複数値の場合はカンマ区切り、JSON、または独自形式の可能性がある。最終仕様確認が必要。
14.3 Link fieldの表示
UIではIDではなくentity_nameを出す。
例:
- as_0001 → Robot Arm
- sh_0001 → 501A
- tk_0001 → Layout
14.4 Link fieldの遷移
Chipをクリックするとtarget entityのDetailへ移動する。
RouterがtypeからDetail pageを生成する。
14.5 Link validation
保存時にはtarget entityにIDが存在するか確認するべき。
ただし、GSデータを疑うのではなく、コードの解釈ロジックが現在のGSに合っているかを確認する。
15. project_meta detail
15.1 役割
project_metaはプロジェクト全体の意味設定。
例:
- project_id
- storage_provider
- originals_root_url
- proxies_root_url
- created_at
- Episode visibility
- Act visibility
- Sequence visibility
- Scene visibility
- Shot visibility
- ui_theme
- pnavi.config.json
15.2 project_meta without field_id
project_metaはentity sheetとは違い、field_idを持たない形式の可能性がある。
Settingsではmeta_key/meta_value/meta_type/note/updated_at形式で扱う実装もある。
旧資料のproject_meta column型と、現ブランチのSettings型が混在している。
UserGuideでは最終版前に現行シートの実構造を確認する必要がある。
15.3 表示階層制御
Episode / Act / Sequence / Scene / Shot のTRUE/FALSEにより、Shot hierarchy columnsの表示を制御する。
UserGuideでは、プロジェクトのショット命名体系に合わせてこれらをON/OFFできると説明する。
15.4 root url/id
Originals/Proxies rootはproject_metaまたはSystemConfigのどちらか、または両方に出る可能性がある。
現ブランチではSystemConfigの drive.originals.root_id, drive.proxies.root_id も重要。
16. SystemConfig detail
16.1 役割
SystemConfigは運用設定。
project_metaよりもシステム的な値を保持する。
16.2 代表key
- drive.originals.root_id
- drive.proxies.root_id
- proxy.preset.default
- proxy.audit.enabled
- proxy.audit.hour
- proxy.audit.limit
- proxy.audit.entities
- proxy.audit.last_run_at
- proxy.audit.last_missing_count
- proxy.audit.last_error
- project_meta.source_spreadsheet_id
16.3 project_metaとの違い
project_meta: プロジェクトの意味設定。
SystemConfig: 運用・接続・Proxy/Auditなどの機械設定。
UserGuideではAdmin向けにこの違いを説明する。
17. UploadInbox detail
17.1 役割
UploadInboxは、MOTK経由でアップロードされたファイルの履歴。
17.2 代表column
- upload_id
- ts
- entity
- record_id
- originals_folder_id
- drive_file_id
- drive_file_name
- uploaded_by
- proxy_job_id
- status
- field_id
- latest_pointer_json
17.3 使う場面
- Uploadが成功したか確認する。
- どのrecord/fieldへUploadされたか確認する。
- ProxyJobsと紐づける。
- Wrong folder問題を調査する。
- latest pointerの更新を確認する。
17.4 UserGuide説明
通常ユーザーには見せない。
Admin/QA編では「Upload履歴」と説明する。
18. ProxyJobs detail
18.1 役割
ProxyJobsまたはProxyJobsは、Proxy Workerが処理するjob queue。
旧資料ではProxyJobs、現ブランチではProxyJobsという名前も使われる。
18.2 代表column
旧ProxyJobs:
- job_id
- entity
- id
- original_file_id
- shotCode
- fps
- frames
- status
- created
- modified
現ProxyJobs候補:
- job_id
- status
- source_file_id
- source_file_name
- entity
- record_id
- originals_folder_id
- proxies_folder_id
- output_file_name
- preset
- claimed_by
- claimed_at
- heartbeat_at
- finished_at
- error_message
- field_id
- source_updated_at
- output_file_id
- output_updated_at
18.3 status
旧資料:
- queued
- processing
- done
- error
現行候補:
- pending
- claimed
- processing
- done
- error
18.4 使う場面
- Proxyが出ない。
- Workerが止まっている。
- jobがerror。
- Requeueが必要。
- Proxyが古い。
19. ProxyAudit detail
19.1 役割
ProxyAuditは、OriginalsとProxiesの差分を記録する。
19.2 代表column
- scanned_at
- entity
- record_id
- display_name
- originals_folder_id
- originals_folder_url
- originals_file_count
- latest_original_file_name
- latest_original_file_id
- latest_original_modified
- proxy_status
- proxy_file_name
- proxy_file_id
- latest_job_status
- latest_job_id
- latest_upload_status
- note
19.3 proxy_status
例:
- missing
- ok
- stale
- no_originals
実際のstatusは確認が必要。
19.4 使う場面
- Missing Proxy一覧。
- Requeue対象選定。
- Weekly maintenance。
- Release前check。
20. ProxyWorkers detail
20.1 役割
ProxyWorkersは、Workerの稼働状態を記録する可能性がある。
20.2 代表情報
- worker id
- claimed_by
- heartbeat_at
- last job
- status
- error
20.3 使う場面
- Workerが動いているか。
- heartbeatが古くないか。
- stale claimを確認する。
- 複数Workerの状態を確認する。
21. DataHub detail
21.1 役割
DataHubはCore=TRUEのfieldを集約し、高速アクセスするためのsheet。
旧構想では、12,792+ Shots rowsのlazy loadやslice取得のために使う。
21.2 Columns
DataHub columns:
- Shots
- Assets
- Tasks
- ProjectMembers
- Users
- Pages
- Fields
- project_meta
21.3 Core_values
FieldsのCore=TRUE fieldがCore_valuesとしてDataHubへ集約される。
形式:
- FieldName | value1 | value2 | value3
21.4 使い方
- Dashboard summary。
- LinkMaps生成。
- Lazy table load。
- folder diff。
- quick entity samples。
21.5 現ブランチでの注意
現ブランチではentity sheets直接読み取りとDataHub利用が混在している可能性がある。
UserGuideではDataHubを「高速化/集約用」と説明し、通常ユーザーには意識させない。
22. Sheet間の参照関係図
22.1 Production data
Shots:
- references Assets via Asset Link
- references Tasks via Task Link
- references Drive via Originals / Versions
Assets:
- references Shots via Shot Link
- references Tasks via Task Link
- references Drive via Originals / Versions
Tasks:
- references Shots via Shot Link
- references Assets via Asset Link
- references Members via Assignee/member_link
- references Drive via TaskView/Versions
- appears in Scheduler
ProjectMembers:
- references Users via User Link
- appears in Scheduler lane
- referenced by Tasks
Users:
- referenced by ProjectMembers
- used for Sharing / Permission
Pages:
- references entity by Entity field
- references fields by Config JSON
- controls UI layout
22.2 File/proxy data
UploadInbox:
- references entity
- references record_id
- references field_id
- references Drive file id
- references proxy_job_id
ProxyJobs:
- references source Drive file
- references output Drive file
- references entity/record_id/field_id
- status tracked by Worker
ProxyAudit:
- references entity/record_id
- compares Originals and Proxies
22.3 Schema/meta data
Fields:
- defines every field_id
- defines entity/type/editable/required/options/core
project_meta:
- project meaning and display hierarchy
- root url or project settings
SystemConfig:
- operational keys
- proxy/audit/root IDs
DataHub:
- aggregates Core fields
23. UserGuide用Data Model章の原案
23.1 Chapter: Data model overview
MOTK stores production data in Google Sheets and production files in Google Drive. Sheets contain entities such as Shots, Assets, Tasks, ProjectMembers, Users, and Pages. Drive contains Originals and Proxies. Fields tells the app how to read each column. Pages stores how data should be displayed. ProxyJobs and UploadInbox track file processing.
23.2 Chapter: Entity sheets
Entity sheets use two header rows. Row 1 stores field IDs for the app. Row 2 stores labels for people. Row 3 and below stores records. This lets MOTK read data by field_id, not by column number.
23.3 Chapter: Fields sheet
Fields is the schema sheet. It defines which entity each field belongs to, how it should be rendered, whether it is editable, whether it is required, and whether it is included in Core_values.
23.4 Chapter: Links
Links are stored as target record IDs but displayed as human-readable names. asset_link points to Assets, shot_link points to Shots, task_link points to Tasks, member_link points to ProjectMembers, and user_link points to Users.
23.5 Chapter: Files
Originals are source files and should remain intact. Proxies are lightweight review files generated from uploads. UploadInbox records uploaded files. ProxyJobs queues conversion work. ProxyAudit finds missing or stale proxies.
23.6 Chapter: Views
Pages stores view configuration. A Table preset or Detail layout changes how records are displayed, but does not change the production data itself.
24. Data Model FAQ
Q. field_idと列名は同じですか?
違う。field_idはアプリ用の内部ID。列名/labelは人間向け。MOTKはfield_idを基準に読む。
Q. IDと名前は同じですか?
違う。IDは機械用の一意識別子。名前は人間向けの表示名。名前は変えられても、IDは変えない。
Q. Link fieldには何が保存されていますか?
保存されるのは相手recordのID。UIではLinkMapsを使って相手のentity_nameを表示する。
Q. Pagesは制作データですか?
違う。Pagesは見え方の設定。TableやDetailの列・カード・レイアウトを保存する。
Q. OriginalsとProxiesの違いは何ですか?
Originalsは元ファイル。Proxiesは表示・レビュー用の軽量ファイル。MOTKはOriginalsを壊さず、Proxiesを生成して表示に使う。
Q. DataHubは直接編集しますか?
通常は編集しない。Core fieldの集約や高速化に使う内部/管理用sheetとして扱う。
Q. project_metaとSystemConfigの違いは何ですか?
project_metaはプロジェクトの意味設定。SystemConfigは運用・接続・Proxy/Auditなどの機械設定。
25. Data Modelトラブルシュート
25.1 Link chipがID表示になる
見るもの:
- Fieldsのtype
- entity_name field
- LINK_MAPS
- target entity sheet
- Entity samples
25.2 Table列がずれる
見るもの:
- Row 1 field_id
- Fields sheet
- Pages Config JSON
- Column Contract
- Binding Integrity
25.3 Detail titleがIDになる
見るもの:
- entity_name type field
- SchemaResolver
- Entity samples
- FieldTypes Health
25.4 Upload先が違う
見るもの:
- entity
- record_id
- field_id
- Originals folder
- Versions folder
- UploadInbox
- ProxyJobs
25.5 Proxyが出ない
見るもの:
- UploadInbox
- ProxyJobs
- ProxyAudit
- ProxyWorkers
- SystemConfig root IDs
- WorkerKit
25.6 Page presetが壊れる
見るもの:
- Pages Config JSON
- field_id existence
- entity/pageType
- Fields
- Data Maps / Page
第9部 デバッグとQA
1. DebugPanelの位置付け
1.1 一文説明
DebugPanelは、MOTKの現在状態、表示状態、データ解釈、リンク解決、Originals解決、回帰テスト結果、console log、パフォーマンスをまとめて確認し、報告用にコピー・エクスポートするための診断画面。
1.2 誰が使うか
使う人:
- Admin
- Pipeline / TD
- QA tester
- Developer
- 問題報告をまとめるProducer
通常ArtistやSupervisorは毎日使う必要はない。
ただし、問題が起きたときには、Adminから「DebugPanelでCopy reportとCopy consoleを取ってください」と案内されることがある。
1.3 いつ使うか
使う場面:
- Tableが空になる。
- Tableが遅い。
- Link chipがIDのまま。
- Detailが違うrecordを開く。
- Inline editが保存されない。
- Schedulerが空。
- Cardが消える。
- Originalsが開けない。
- Proxyが出ない。
- Settings保存ができない。
- Dashboard widgetが空。
- Sharing syncが成功したのにエラー表示が出る。
- Acceptance Testを実施する。
- リリース前の回帰確認をする。
1.4 DebugPanelへの導線
Global NavigationのDebugから開く。
URL例:
?page=DebugPanelPage
DebugPanelは別タブで開くことが多い。
UserGuideでは「問題が出た画面は閉じずに、別タブでDebugPanelを開く」と説明する。
2. DebugPanel Actions
2.1 Run all checks
Run all checksは、DebugPanel上の主要診断をまとめて実行するボタン。
使いどころ:
- リリース前確認。
- 問題報告時の初回調査。
- 大きな修正後の回帰確認。
- Table/Detail/Scheduler/Originals/Linksの複合問題調査。
UserGuideでは、DebugPanelを開いたらまずRun all checksを押す手順を書ける。
2.2 Refresh Coverage
Regression Coverageの情報を再取得する。
受け入れ済みレポートとlive checksの表示を更新する。
2.3 Copy report
診断結果をまとめてクリップボードにコピーする。
問題報告時の最重要ボタン。
UserGuideには「報告時はCopy reportを貼る」と明記する。
2.4 Copy console
panel logとapp console bufferをまとめてコピーする。
JavaScriptエラーやAPIエラーがある場合に重要。
2.5 Export TXT
診断結果をテキストファイルとして保存する。
長い報告やエージェント引き継ぎに使える。
2.6 Export JSON
診断結果をJSONで保存する。
自動解析やAgentへの入力に向いている。
2.7 Download local runner (.bat)
ローカルのbrowser suiteを起動するbatを生成する。
Admin / QA向け。
Deployment URL、storage state、model、headless/visibleなどを使ってローカル実行コマンドを作る。
3. Performance Snapshot
3.1 Performance Snapshotとは
Performance Snapshotは、route openとpaint speedを確認するパネル。
TableやDashboardの読み込み速度、初期描画、キャッシュ復元、first paintの問題を見る。
3.2 見るべき値
見るべきもの:
- route open timing
- first paint timing
- table paint timing
- cache restore timing
- raw timing JSON
- budget status
3.3 Table遅延調査での使い方
Tableが遅い場合:
- 対象Tableを開く。
- 読み込みが完了するまで待つ。
- DebugPanelを開く。
- Performance Snapshotを見る。
- Viewer Stateと一緒に確認する。
- Copy reportを取得する。
3.4 2回目表示が遅い場合
2回目表示が遅い場合に見るもの:
- cache restoreが走っているか。
- table paintがnetwork後になっていないか。
- rowsLengthが0になっていないか。
- page/entityがcache keyと一致しているか。
- bootpackが使われているか。
UserGuideでは「2回目でも遅い場合はPerformance SnapshotとViewer Stateをセットで見る」と説明する。
3.5 slow but correctの扱い
Acceptance観点では、読み込みが遅くても正しく表示され、保存やデータ整合性が壊れていない場合はLOW扱い。
遅さとデータ破損を混同しない。
4. Viewer State
4.1 Viewer Stateとは
Viewer Stateは、現在のTable/Viewerがどのentity、page、fieldIds、rows、cache、snapshotを見ているかを表す状態。
Tableの表示問題では最重要情報の一つ。
4.2 見るべき項目
見るべきもの:
- entity
- pageId
- pageType
- fieldIds
- rowsLength
- cache key
- selected record
- filter/sort state
- page size
- local snapshot
- bootpack
- column manifest
実際のJSON構造は実装に依存するため、UserGuideでは項目名を断定しすぎない。
4.3 何が分かるか
Viewer Stateから分かること:
- どのentityとして表示しているか。
- pageIdが正しいか。
- rowsが取得済みか。
- fieldIdsが空でないか。
- 別entityのPageConfigを読んでいないか。
- cacheが使われているか。
- 空表示が本当に0件なのか、一時的な状態なのか。
4.4 報告時の使い方
Table/Detailの問題では、Viewer State JSONをそのまま報告に含める。
特に以下の場合:
- Tableが空。
- 列が違う。
- クリックしたrecordと違うDetailが開く。
- Link chipがIDのまま。
- 2回目表示が遅い。
5. Console
5.1 Console panel
DebugPanelのConsoleは、panel logとapp console bufferをまとめて見る場所。
保存されるconsole bufferはsessionStorageの motk:console:buffer:v1 を使う。
表示は直近行に制限される。
5.2 Copy console
問題報告時はCopy consoleを押す。
特にJavaScriptエラー、google.script.run failure、missing api、URL constructor error、INLINE_EDIT_EXCEPTIONなどはconsoleに出る可能性がある。
5.3 Consoleで見るべきエラー
見るべきもの:
- TypeError
- ReferenceError
- missing api
- google.script.run failure
- INLINE_EDIT_EXCEPTION
- Save failed
- Upload failed
- Proxy requeue failed
- Failed to construct URL
- Access required
- Permission denied
5.4 Consoleだけでは不十分
Consoleだけでは、Sheets側の値、field mapping、PageConfig、Drive folder状態は分からない。
必ずViewer State、Schema/Meta、Originals diagnosticsなどと併用する。
6. Runtime
6.1 Runtime panel
Runtimeは、現在のブラウザとGAS実行環境の基本状態を確認する。
見るもの:
- google.script.runが使えるか。
- server pingが返るか。
- location。
- URL params。
6.2 google.script.run
google.script.runが使えない場合、GASのクライアントAPIが動いていない。
原因候補:
- GASページとして開いていない。
- local fileとして開いている。
- iframe / cross origin問題。
- ScriptApp deploymentの問題。
- HTMLが途中で壊れている。
6.3 Server ping
Server pingが失敗する場合、GASサーバーへの通信ができていない。
原因候補:
- デプロイURLが違う。
- 権限がない。
- GAS側の関数エラー。
- ネットワーク問題。
6.4 URL Params
URL Paramsは、現在の画面が何を開こうとしているかを確認する。
Table/Detail/Schedulerでは重要。
例:
- page
- p
- entity
- e
- id
- schedId
7. Regression Coverage
7.1 Regression Coverageとは
Regression Coverageは、受け入れ済みレポートと現在のlive checksをまとめて見るパネル。
旧TestResults pageはDebugPanelに吸収されている。
7.2 Accepted Reports
Accepted Reportsは、過去の受け入れテスト結果や完了判定を表示する。
UserGuideでは「過去にどこまで確認済みかを見る場所」と説明できる。
7.3 Live Checks
Live Checksは、現在の実行状態で確認できる項目。
Acceptance test前後に見る。
7.4 Completion verdict
Acceptance reportでは、verdictは以下のいずれか。
- acceptable for completion
- acceptable with known minor issues
- not yet acceptable
UserGuideには、この3段階をQA判定として載せる。
7.5 acceptable for completion
すべてのcore flowが動作し、データ整合性の問題がない状態。
必要条件:
- Dashboard operational
- Table operational
- Detail operational
- Create flow operational
- Versions upload operational
- Scheduler operational enough for normal use
- no data-integrity bug
7.6 acceptable with known minor issues
core flowは動くが、軽微なUI問題や低リスクの既知問題がある状態。
例:
- 遅いが正しい。
- 一部Widgetが空だがcore flowは動く。
- misleading errorがあるがbackend処理は成功している。
- cosmetic issue。
7.7 not yet acceptable
core save path、create flow、upload、folder targeting、stale/no-persistなどに問題がある状態。
UserGuideでは、本番利用前に止めるべき状態として説明する。
8. Data Maps / Page
8.1 FIELD_TYPES
FIELD_TYPESは、field_idからfield typeやmetadataを引くためのmap。
これが空または不正だと、Table/Detail/CommonRendererが正しく表示できない。
見るべき症状:
- link fieldがtext扱いになる。
- versions fieldが通常文字になる。
- thumbnailsが出ない。
- editableでないfieldが編集可能になる。
- id fieldが編集対象になる。
8.2 LINK_MAPS counts
LINK_MAPS countsは、ID→表示名mapがどれだけ入っているかを見る。
見るべきentity:
- assets
- shots
- tasks
- users
- members
countが0の場合、そのentityのlink chipはID表示になりやすい。
8.3 Layout presets
Layout presetsは、DetailやTableのPageConfig/Presetが取れているかを見る。
Detailカードが表示されない、Presetが出ない場合に確認する。
9. Schema/Meta Health
9.1 Schema/Meta Healthとは
Schema/Meta Healthは、project_meta-first方針に基づいて、schemaとmetaが正しく読めているか確認する診断。
UserGuideではAdmin向けに「設定とfield定義の健全性を見る場所」と説明する。
9.2 見るべき問題
- project_metaが読めない。
- project_metaが外部sourceでread-only。
- required metaがない。
- fieldmapが存在しないfield_idを指している。
- referenced fieldが別entityに属している。
- required sheetにrequired field_idがない。
- Pages JSONが無効なfield_idを参照している。
9.3 Workbook Contract Testsとの関係
Test PlanではWorkbook Contract Testsとして以下を確認する。
- each fieldmap.* points to an existing Fields.field_id
- each referenced field belongs to the intended entity
- each required sheet contains required field ids
- Pages JSON references only valid field ids
これはDebugPanelのSchema/Meta Healthと強く関係する。
10. SchemaMeta / FieldTypes Health
10.1 FieldTypes Healthとは
FieldTypes Healthは、Fields定義からfield typeやentity_name fidを正しく検出できているかを見る。
10.2 entity_name fid 検出
DebugPanelにはentityごとのentity_name fid検出がある。
対象:
- shot
- asset
- task
- member
- user
entity_name fidが取れないと、表示名、link chip、Detail title、Dashboard feed、Scheduler card labelが壊れる。
10.3 FieldTypes不具合の症状
- Detail titleがIDになる。
- Link chipがIDのまま。
- New record modalのfield widgetが不正。
- Inline editが期待fieldと違う。
- Versions uploadが正しいfieldに入らない。
- Scheduler card main/sub fieldが空。
11. Last callFirst Trace
11.1 callFirst Traceとは
callFirst Traceは、複数候補APIの呼び出し順やfallback経路を調べるための診断。
GASでは関数名の互換aliasやfallbackがあるため、実際にどのAPIが呼ばれたかを確認する必要がある。
11.2 使う場面
- Detail APIがどれを使っているか分からない。
- Originals resolverが複数aliasを持つ。
- Scheduler load API名が複数ある。
- 旧関数と新関数が混在している。
- fallbackが期待通りに動かない。
11.3 UserGuideでの説明
通常ユーザーには不要。
Admin/Developer向けに「API互換やfallback確認」として説明する。
12. Scheduler Load Diagnostics
12.1 Scheduler Load Diagnosticsとは
Scheduler/SchedViewの読み込み状態を確認する診断。
見るべきもの:
- schedId
- schedule config
- cards count
- lanes count
- tasks count
- load API result
- errors
12.2 使う場面
- Schedulerが空。
- SchedViewが空。
- Card Listにはあるがgridに出ない。
- lanesがない。
- Inspectorが空。
- Save/Publish後に表示が変わらない。
12.3 Scheduler問題の報告
Scheduler問題の報告には以下を入れる。
- URL
- schedId
- mode Daily/Slot
- lane Member/Asset
- visible lanes
- selected card id
- Scheduler Load Diagnostics JSON
- Console
- 操作直前/直後の状態
13. Originals resolver / Originals diagnostics
13.1 Originals resolver panel
Originals resolverは、現在のentity/idに対してOriginals URLがどう解決されるかを見る。
表示項目:
- Context
- Expected policy
- Resolve result
- originals_root_url
13.2 Originals diagnostics panel
Originals diagnosticsは、Originals解決の詳細経路を見る。
表示項目:
- Input
- DriveBuilder
- ServerAPIs
- ProjectMetaRoot
- Final URL
- Raw trace
13.3 使う場面
- Open Originalsが空。
- Driveフォルダが作られない。
- 間違ったフォルダが開く。
- bare id folderが再作成される。
- id__code folderにならない。
- Drive rootが違う。
- 権限エラーが出る。
13.4 Originals問題の基本切り分け
- Sheet上にOriginals URLがあるか。
- field_idがOriginals type/labelとして解決されるか。
- project_meta/SystemConfigにrootがあるか。
- DriveBuilderが使えるか。
- ensureEntityFolderが正しいrootに作るか。
- final URLが期待Drive folderを指しているか。
- Google Drive側で権限があるか。
14. Link replacer diagnostics
14.1 Link replacerとは
Link replacerは、GAS Web App内のリンクを正しいrouting形式に置き換えるための仕組み。
DebugPanelでは、router検出、gNav anchors replacement、sample diff、dry-run task linkを見る。
14.2 使う場面
- GNAVI/PNAVIのリンクが違う。
- Table linkが別タブや古いURLへ飛ぶ。
- Detail linkが正しいentity/idを持たない。
- ForumからDetailへ飛べない。
- Schedule linkが違う。
14.3 static diagnostic
Link replacer diagnosticsはstatic diagnosticであり、DOMを変更しない。
安全に確認できる。
15. Entity samples
15.1 Entity samplesとは
Entity samplesは、各entityのidとname sample、sourceを表示する。
対象:
- shot
- asset
- task
- member
- user
- page
15.2 使う場面
- LINK_MAPSが空。
- entity_name fidが分からない。
- id/nameのサンプルを確認したい。
- Sheetから期待通りに読めているか見る。
15.3 見方
サンプルにidしか出ない場合、entity_name解決が壊れている可能性がある。
サンプルが空の場合、対象sheet、field id、row start、権限、APIを疑う。
16. Column Contract / No Index Binding
16.1 Column Contractとは
Column Contractは、TableやDetailが列番号ではなくfield_idでデータを扱えているかを確認する診断。
MOTKでは、列位置が変わってもfield_idが正しければ正しいfieldとして扱う必要がある。
16.2 No Index Binding
No Index Bindingは、固定の列番号に依存していないこと。
列番号に依存すると、Sheets上で列追加・移動しただけで別fieldへ書き込む危険がある。
16.3 なぜ重要か
MOTKの重大事故は、見た目の問題よりも「違う列に保存すること」。
Column Contractは、それを防ぐための診断。
16.4 使う場面
- Inline editが違う列に保存された疑い。
- New recordがfield順を間違える。
- Link fieldが別fieldとして表示される。
- Pages JSONのfieldIdsが不正。
- FIELDS定義変更後。
16.5 UserGuideでの位置付け
Admin/QA編では必須。
問題報告テンプレートにもColumn Contract結果を入れる。
17. Binding Integrity
17.1 Binding Integrityとは
Binding Integrityは、fidからcell valueへの対応が壊れていないかを確認する診断。
Column Contractが「列の契約」なら、Binding Integrityは「実際の値の紐づき」の確認。
17.2 使う場面
- 表示値と保存値が違う。
- 編集後に別fieldが変わる。
- DetailとTableで同じrecordの値が違う。
- New record作成後、fieldがずれている。
17.3 重大性
Binding Integrityが壊れている場合は、データ破損リスクがあるため高優先。
UIが少し崩れているより重大。
18. Contract Inspector
18.1 Contract Inspectorとは
Contract Inspectorは、契約違反やフィールド/列/表示の整合性を詳細に見るためのログ領域。
Column ContractやBinding Integrityの詳細ログを読む場所として使える。
18.2 UserGuideでの説明
通常ユーザー向けには不要。
Admin/Developer向けに「field_idベースの整合性確認ログ」として説明する。
19. Raw snapshot
19.1 Raw snapshotとは
Raw snapshotは、DebugPanelが集めた生状態をそのまま表示する領域。
整形済みの各cardで分からない場合、生JSONを見る。
19.2 報告での使い方
問題が再現している状態でRaw snapshotをコピーすると、後から解析しやすい。
ただし長いので、通常はCopy reportを使う。
20. Local Runner
20.1 Local Runnerとは
Local Runnerは、ローカル環境からブラウザ回帰テストを実行するための支援機能。
DebugPanelでは、deployment URL、storage state、model、browser modeを指定し、suite commandやbatを生成できる。
20.2 Storage state
Storage stateは、Googleログイン済み状態を保存したPlaywright用ファイル。
Admin browser testで使う。
20.3 Headless / Visible Chrome
Headlessは画面を出さずに実行。
Visible Chromeはブラウザを見ながら実行。
手動確認や不具合再現時はVisibleが向く。
20.4 使う場面
- リリース前Acceptance Test。
- 修正後の回帰確認。
- Agentに実ブラウザテストをさせる。
- GAS iframe / cross-originでDOM直接取得が難しい場合のスクリーンショット確認。
21. Acceptance Testの全体構成
21.1 Acceptance Testの目的
Acceptance Testは、MOTKが「運用可能か」を判断するための総合確認。
単なるsmoke testではない。
見る範囲:
- Dashboard
- Table
- Detail
- Create New Record
- Settings
- Scheduler / SchedView
- Versions upload / preview
- User access / sharing
- Proxy audit / requeue flow
21.2 Findings first
Acceptance ReportはFindings firstで書く。
重大度順に問題を書く。
各Findingには以下を含める。
- area
- severity
- repro steps
- observed result
- expected result
- URL
- likely file
21.3 Passed areas
問題だけでなく、動いた範囲を明記する。
MOTKは機能が多いため、「何が確認済みか」を残すことが重要。
21.4 Open risks
Open risksは、テストで完全には確認できなかったが注意すべき点。
例:
- account permissionの影響で判定不能。
- 一部entityのinline editを未確認。
- Widgetが空だがdataがないだけか不明。
21.5 Completion verdict
最後にverdictを書く。
- acceptable for completion
- acceptable with known minor issues
- not yet acceptable
UserGuideにはQA用の判断基準として入れる。
22. Test Plan
22.1 Workbook Contract Tests
Workbook Contract Testsでは、SpreadsheetとFields/Pagesの整合性を見る。
確認項目:
- each fieldmap.* points to an existing Fields.field_id
- each referenced field belongs to the intended entity
- each required sheet contains required field ids
- Pages JSON references only valid field ids
UserGuideではAdmin Setupの最後に入れる。
22.2 App Behavior Tests
App Behavior Testsでは、主要画面の基本動作を見る。
確認項目:
- list view loads for all entities
- detail save path triggers full side effects
- settings reads and writes project_meta
- scheduler loads, commits, snapshots, restores
22.3 Drive Tests
Drive TestsではOriginals/Drive解決を見る。
確認項目:
- originals resolution from stored URL
- fallback folder discovery
- folder auto-create
- orphan folder soft delete
22.4 Proxy Tests
Proxy TestsではUpload/Worker/ProxyJobs / UploadInboxを見る。
確認項目:
- upload registers one queue item
- one worker claims one job
- worker heartbeat is updated
- proxy file uploads to target folder
- queue item completes or fails deterministically
22.5 Failure Tests
Failure Testsでは失敗時の挙動を見る。
確認項目:
- stale worker claim recovery
- failed transcode
- failed upload
- missing folder permissions
- invalid file type
23. Severity分類
23.1 CRITICAL
即停止すべき問題。
例:
- 保存が違うrecordへ入る。
- 保存が違うfieldへ入る。
- Uploadが違うrecord folderへ入る。
- Publishで意図しないTaskを大量更新する。
- データが消える。
- 権限のないユーザーが管理操作できる。
23.2 HIGH
本番運用前に修正すべき重大問題。
例:
- Tableが主要entityで開かない。
- Detailが主要recordで開かない。
- Create New Recordが壊れている。
- Inline editが保存されない。
- Scheduler save pathが壊れている。
- Versions uploadが使えない。
- Settingsが保存できない。
23.3 MEDIUM
運用上困るが、回避可能またはデータ破損ではない問題。
例:
- Backendは成功しているがfrontendがerror表示する。
- 一部widgetが空。
- 一部filterが効かない。
- Requeueボタンが反応するが表示更新が遅い。
- 非owner accountでadmin widgetが分かりにくい。
23.4 LOW
軽微なUXまたは表示問題。
例:
- 見た目が詰まっている。
- 読みにくい。
- 遅いが正しい。
- 説明文が足りない。
- Widget headingがやや曖昧。
23.5 INFORMATIONAL
欠陥ではなく、確認不足・制限・注意。
例:
- account permissionで確認できない。
- データがないため空表示が正常か不明。
- 試験対象外。
24. 重大不具合と軽微問題の判定基準
24.1 Real failureとして扱うもの
- save appears successful but value does not persist
- stale data overwrites a recent edit
- table/detail/scheduler page is blank or broken
- modal cannot be used
- link picker appears behind modal
- upload goes to the wrong record folder
- wrong bare folder is recreated
- create form omits editable fields
- create form includes non-editable fields
- dashboard center feed disappears when columns are hidden
24.2 過剰報告しないもの
- small visual polish issues
- slow but correct loading
- expected admin gating
- access-limited checks that cannot be performed due to auth scope
24.3 MOTK特有の優先順位
MOTKでは、UI polishよりもfield bindingとfolder targetingが重要。
重大度の優先順位:
- データが壊れる。
- 違うrecord/folderへ書く。
- 保存されない。
- 作成できない。
- Upload/Proxyが間違う。
- Schedule Publishが危険。
- 表示が誤解を招く。
- 遅い。
- 見た目が悪い。
25. 問題報告テンプレート
25.1 最小テンプレート
問題名:
Area:
Severity:
URL:
Repro steps:
1. 2. 3.
Observed result:
Expected result:
Did it persist after reload?:
Copied DebugPanel report:
Copied console:
Screenshots / notes:
25.2 Table問題テンプレート
Entity:
Page/Preset:
Rows count shown:
Field/Column:
Operation:
Before value:
After value:
Reload result:
Viewer State:
Column Contract result:
Binding Integrity result:
Console:
25.3 Detail問題テンプレート
Entity:
Record ID:
Detail URL:
Card name:
Field:
Operation:
Save result:
Reload result:
Viewer State:
Console:
25.4 Scheduler問題テンプレート
Schedule ID:
URL:
Mode:
Lane axis:
Selected card:
Operation:
Before lane/date/duration:
After lane/date/duration:
Save/Publish action:
Reload result:
Scheduler Load Diagnostics:
Console:
25.5 Upload/Proxy問題テンプレート
Entity:
Record ID:
Field ID:
File name:
Upload source: Table / Detail / Settings
Expected folder:
Actual folder:
UploadInbox row:
ProxyJobs row:
ProxyAudit row:
Worker status:
Console:
25.6 Sharing問題テンプレート
User email:
MOTK permission:
Google Drive access:
Google Sheets access:
Operation:
Observed result:
Expected result:
User Access / Sharing summary:
Console:
26. Acceptance Reportの読み方
26.1 Dashboardの確認項目
確認するもの:
- default route lands on Dashboard
- Dashboard renders content, not blank shell
- left/right columns can be hidden independently
- center feed remains visible
- widget headings are understandable
- Project Snapshot links open correct entity tables
- Update Feed links open correct pages
- User Access / Sharing renders rows and filters
- System Health / Mismatch renders
- Drive Repair / Ops renders
- Proxy Audit Schedule renders
- Proxy Audit rows with Requeue clickable
26.2 Tableの確認項目
確認するもの:
- shot table loads
- asset table loads
- user table loads
- toolbar renders
- rows render
- sort works
- filter works
- fields toggle works
- pagination works
- versions/shotview cells render media
- versions upload overlay appears on hover
- preview modal works
- inline edit persists after reload
- no INLINE_EDIT_EXCEPTION
26.3 Detailの確認項目
確認するもの:
- Shot Detail loads
- Asset Detail loads
- User Detail loads
- cards render
- versions single-field card renders media
- Apply works
- new card works
- new table card starts empty
- card settings modal readable
- text edit persists
- upload modal opens/closes
- uploaded media appears
26.4 Create New Recordの確認項目
確認するもの:
- New modal opens quickly
- fields are in GS column order
- only editable fields appear
- non-editable fields do not appear
- link picker appears in front of modal
- field widgets match table/detail behavior
- test record created
- table surfaces it
- detail opens correctly
26.5 Settingsの確認項目
確認するもの:
- page opens
- rows render
- reversible meta edit saves and persists
- proxy/system config areas render
- no stale reload bug
- owner-gated sections are clearly gated
26.6 Scheduler/SchedViewの確認項目
確認するもの:
- Schedule page loads
- board renders
- cards render
- lanes render
- inspector opens
- safe edit persists
- SchedView loads
- no broken save path
- no destructive corruption
- no stale writeback
26.7 Versions / Proxyの確認項目
確認するもの:
- upload from Table works
- upload from Detail works
- modal closes on upload
- proxy preset dropdown exists
- ORIGINAL / PROXY badge coherent
- versions cell/card updates
- preview shows image
- proxy audit rows render
- requeue clickable
- upload goes to correct record versions folder
- wrong bare folder not recreated
26.8 User Access / Sharingの確認項目
確認するもの:
- rows render
- mismatches filter works
- all users filter works
- search works
- resource filter works
- refresh works
- sync responds coherently
- frontend/backend result mismatch is reported accurately
27. DebugPanelをUserGuideにどう入れるか
27.1 一般ユーザー向け
一般ユーザーには短く説明する。
「問題が起きたら、Debugを開いてCopy reportとCopy consoleを押し、管理者に送る。」
27.2 Admin向け
Admin向けには各panelの読み方を書く。
優先順:
- Runtime
- Console
- Viewer State
- Performance Snapshot
- Schema/Meta Health
- FieldTypes Health
- Data Maps
- Originals diagnostics
- Column Contract
- Binding Integrity
- Scheduler Load Diagnostics
- Regression Coverage
27.3 Developer/Agent向け
Developer/Agent向けには、report templateとlocal runnerを含める。
- Copy report
- Export JSON
- Local runner command
- Acceptance report format
- Severity classification
- Repro steps
- likely file
28. DebugPanelを使った標準調査フロー
28.1 Tableが壊れた場合
- 問題のTableを開いたままにする。
- DebugPanelを別タブで開く。
- Run all checksを押す。
- Viewer Stateを見る。
- Data Maps / Pageを見る。
- Column Contractを実行する。
- Binding Integrityを実行する。
- Consoleをコピーする。
- Copy reportを取る。
28.2 Detailが壊れた場合
- 問題のDetail URLを控える。
- DebugPanelを開く。
- Runtime URL Paramsを見る。
- Viewer Stateを見る。
- FieldTypes Healthを見る。
- Entity samplesを見る。
- Consoleをコピーする。
- Report templateにrecord idを入れる。
28.3 Originalsが壊れた場合
- 対象recordのentity/idを控える。
- Originals resolverを見る。
- Originals diagnosticsをRunする。
- DriveBuilder、ServerAPIs、ProjectMetaRoot、Final URLを見る。
- SettingsでHydrate Originalsを実行するか判断する。
- 報告にはFinal URLとRaw traceを含める。
28.4 Schedulerが壊れた場合
- schedule URLとschedIdを控える。
- Scheduler Load DiagnosticsをRefreshする。
- Consoleをコピーする。
- Acceptance基準に沿って、blank/save/persist/staleを分類する。
- Publish前後の問題なら、操作順とcard idを必ず書く。
28.5 Proxyが壊れた場合
- 対象recordとfield_idを控える。
- Settings Proxy Opsを見る。
- Proxy Auditを見る。
- UploadInbox/ProxyJobsのstatusを見る。
- DebugPanelのOriginals diagnosticsを見る。
- Workerが動いているか確認する。
29. QA運用ルール
29.1 報告は観察ベース
QA報告では、推測ではなく直接観察した事実を書く。
悪い例:
- たぶんAPIが壊れている。
良い例:
- Sync Checkedを押すと6秒後に赤いエラー
Failed to construct 'URL': Invalid URLが表示された。ただしSystem Healthは更新された。
29.2 成功したことも書く
問題だけを書くと、どこまで使えるか分からない。
Passed areasを必ず書く。
29.3 Access limitedをbug扱いしない
非owner accountでAdmin機能が制限されるのはexpectedの場合がある。
その場合は「access-limited」と書き、bug扱いしない。
29.4 Slow but correct
遅いが正しい場合はLOW。
保存失敗やデータ破損とは分ける。
29.5 Reversible edits
テスト編集はreversibleな値を使う。
例:
- TEST_FINAL_001
- TEST_FINAL_002
- TEST_FINAL_USER_NOTE
29.6 編集したrecordを必ず書く
テストで作成・編集した場合、entity、record、field、before/afterを書く。
30. 困ったとき最初に見る場所
問題別の最初に見る場所:
- Tableが遅い → Performance Snapshot / Viewer State
- Tableが空 → Viewer State / Data Maps / Console
- 列が違う → Column Contract / Pages / FieldTypes
- 保存が違う → Binding Integrity / Console
- LinkがID表示 → LINK_MAPS counts / Entity samples / FieldTypes
- Detailが開かない → Runtime URL Params / Console / Entity samples
- Originalsが開けない → Originals resolver / Originals diagnostics
- Proxyが出ない → Settings Proxy Ops / Proxy Audit / UploadInbox / ProxyJobs
- Schedulerが空 → Scheduler Load Diagnostics / Card List / Lane visibility
- Sharingがおかしい → Dashboard User Access / Sharing / Settings Log
- Settingsが保存できない → Access / project_meta management mode / Console
第10部 確定仕様集(P0/P1検証記録)
1. P0確認の基本方針
確認なしで断定してはいけない。
P0確認では、以下を必ず残す。
- 確認対象
- 確認したファイルまたは画面
- 操作手順
- 実際の結果
- UserGuideで断定できる文
- まだ断定できない文
- 追加で必要な確認
UserGuide上では、P0未確認が残る項目は「Known limitations」または「Admin confirmation required」に逃がす。
2. P0-01 Scheduler Publish確認
2.1 確認したいこと
SchedulerのPublishが何をどこへ反映するのか。
特に以下。
- Schedule draftをpublished扱いにするだけか。
- Task sheetへstart/end/duration/assignee/orderを書き戻すのか。
- Pages/Configだけを更新するのか。
- Snapshotを自動作成するのか。
- Published scheduleをSchedViewが読むのか。
- Publish後にUndo可能か。
2.2 確認すべきファイル
3CL_Scheduler.html3CL_SchedView.html- Scheduler server API実装ファイル
2SV_DataCore.js- Scheduler関連のsave/publish/snapshot関数
- Pages/Settings/Schedule保存先sheet
2.3 検証手順候補
- テスト用Scheduleを開く。
- Publish前のSchedule ID、Task ID、Card位置を記録する。
- Named Snapshotが作れるなら作る。
- 1件だけCardを移動する。
- SaveまたはPublishを実行する。
- Schedulerをreloadする。
- SchedViewで同じScheduleを見る。
- Tasks Tableで該当Taskのstart/end/assignee/duration/statusが変わったか確認する。
- Pages/Config/Schedule sheetにどの値が変わったか確認する。
- Undo/Snapshotで戻せるか確認する。
2.4 記録すべき結果
- Publish button label
- Publish API名
- 書き込み先sheet
- 書き込みfield
- 変更されたrow数
- 自動snapshotの有無
- Undo可否
- Publish後のSchedView表示
- Task sheetへの反映有無
2.5 UserGuideで使う文の分岐
Taskへ反映する場合:
「Publishは、現在のSchedule変更を正式版として確定し、対象TaskのSchedule関連fieldへ反映します。Publish前にSnapshotと対象Card確認を行ってください。」
Taskへ反映しない場合:
「Publishは、Schedule view/configを正式版として保存する操作です。Task sheetの値を直接変更する操作ではありません。」
未確認の場合:
「Publishは広範囲に影響する可能性があるため、AdminまたはProducerが確認してから実行してください。」
3. P0-02 Save View / Save As / Save / Publish / Undo / Snapshotの違い
3.1 確認したいこと
これらの操作の保存対象と影響範囲。
- Save View
- Save
- Save As
- Publish
- Revert
- Undo
- Snapshot
- Named Snapshot
3.2 分類表として確定したい項目
各操作について以下を確認する。
- UI上の場所
- 対象画面
- 保存先
- 制作データを変えるか
- 表示設定だけか
- 別名保存か
- 戻せるか
- 複数ユーザーに影響するか
- 高リスクか
3.3 検証手順候補
- TableでSave/Save As/Revertを確認する。
- DetailでApplyとPreset Saveを確認する。
- SchedViewでSave Viewを確認する。
- SchedulerでSave/Save As/Publish/Undo/Snapshotを確認する。
- 各操作後にSheets/Pages/Schedule/Tasksのどこが変わったか見る。
- Reload後に残るか確認する。
3.4 UserGuide上の重要表現
必須で分ける表現:
- セル編集 = 制作データの変更
- Page Save = 見え方の保存
- Upload = Drive/UploadInbox/ProxyJobs/Versions pointerの変更
- Publish = 要確認の高リスク操作
- Debug Copy = 読み取り操作
4. P0-03 Card removeの意味
4.1 確認したいこと
Scheduler上でCardを削除・removeした場合、何が消えるのか。
可能性:
- Schedule上の配置だけを消す。
- TaskとのSchedule linkだけを外す。
- Task record自体を削除する。
- Card statusをinactiveにする。
- taskless cardだけ削除可能。
4.2 確認手順候補
- テスト用taskless cardを作る。
- Removeする。
- Reload後に消えるか確認する。
- Taskに紐づくCardをテスト用に作る。
- Removeする。
- Tasks TableにTask recordが残るか確認する。
- Schedule sheet/configで該当Cardがどう変わるか確認する。
- Undoで戻るか確認する。
4.3 UserGuide文の分岐
配置だけ消す場合:
「RemoveはSchedule上の配置を外す操作です。Task record自体は削除されません。」
Taskも消す場合:
「RemoveはTaskに影響するため、実行前に対象Taskを必ず確認してください。」
未確認の場合:
「Card removeの影響範囲はAdmin確認が必要です。通常作業では不用意に使わないでください。」
5. P0-04 Upload target / Default versions field
5.1 確認したいこと
Uploadボタンを押したとき、どのentity/record/field_idに保存されるか。
特に以下。
- Table cell上のUpload overlayはそのcellのfield_idへ入るのか。
- Detail versions cardのUploadはそのcardのfield_idへ入るのか。
- field_id未指定時のdefault versions fieldは何か。
- ShotView / AssetView / TaskView / Versionsの優先順位。
- Upload modalにtarget fieldが表示されるか。
- ProxyJobs field_idが一致するか。
5.2 確認手順候補
- ShotのShotView cellからUploadする。
- UploadInboxのentity/record_id/field_idを見る。
- ProxyJobsのentity/record_id/field_idを見る。
- Drive folder内のversions folder名を見る。
- Detail cardで表示されるか見る。
- AssetView / TaskView でも同じ確認をする。
- field_idなしUpload経路があれば、どこへ入るか確認する。
5.3 UserGuideで断定したい文
- 「TableのVersions/ShotView/AssetViewセルからUploadした場合、そのセルに対応するversions fieldへ保存されます。」
- 「DetailのVersions cardからUploadした場合、そのcardのfield_idへ保存されます。」
- 「Upload対象fieldはUpload modalで確認できます。」
これらは確認後にだけ断定する。
6. P0-05 UploadInbox / ProxyJobs / ProxyAudit schema
6.1 確認したいこと
現行ブランチで使われる実schema。
候補が複数ある。
- ProxyJobs vs ProxyJobs
- pending vs queued
- record_id vs id
- field_idの有無
- latest_pointer_jsonの保存先
6.2 確認対象
- Settings Proxy Ops
- WorkerKit
- Upload server API
- Proxy server API
- Host Spreadsheetの実sheet
- DebugPanel / Proxy Audit
6.3 確認するcolumn
UploadInbox:
- upload_id
- ts
- entity
- record_id
- originals_folder_id
- drive_file_id
- drive_file_name
- uploaded_by
- proxy_job_id
- status
- field_id
- latest_pointer_json
ProxyJobs:
- job_id
- status
- source_file_id
- source_file_name
- entity
- record_id
- originals_folder_id
- proxies_folder_id
- output_file_name
- preset
- claimed_by
- claimed_at
- heartbeat_at
- finished_at
- error_message
- field_id
- output_file_id
ProxyAudit:
- scanned_at
- entity
- record_id
- display_name
- originals_folder_id
- originals_file_count
- proxy_status
- latest_job_status
- latest_upload_status
- note
6.4 UserGuide分岐
未確定ならUserGuide本編では「Upload履歴」「Proxy変換キュー」「Proxy監査結果」とだけ説明し、column名はTechnical Referenceへ逃がす。
7. P0-06 ProxyJobs status / Worker status
7.1 確認したいこと
WorkerとProxyJobsのstatus名。
候補:
- pending
- queued
- claimed
- processing
- done
- error
- failed
- skipped
7.2 確認手順候補
- Uploadしてjobを作る。
- Workerを起動しない状態でstatusを見る。
- Worker onceを実行中にstatusを見る。
- 成功時のstatusを見る。
- 意図的に失敗させられるならerror時のstatusを見る。
- Worker heartbeatを見る。
7.3 UserGuideに必要な説明
- pending/queued: まだWorkerが処理していない。
- claimed/processing: Workerが処理中。
- done: Proxy生成済み。
- error/failed: Worker処理に失敗。
正式status名は実装確認後に統一する。
8. P0-07 WorkerKit配布ファイル構成
8.1 確認したいこと
WorkerKitをユーザーにどう案内するか。
確認対象:
- Download Worker Kitの実ファイル名
- zip内構成
MOTK Proxy Worker.bat04_run_worker_once.bat- 設定ファイル
- ffmpeg同梱有無
- OAuth token保存場所
- Logs場所
8.2 確認手順候補
- WorkerKit pageを開く。
- Download Worker Kitを押す。
- zipを展開する。
- ファイル一覧を記録する。
- 通常起動batを確認する。
- one-job batを確認する。
- Detect手順を確認する。
- OAuth/ffmpeg/Spreadsheet reachability checkを確認する。
8.3 UserGuide文の分岐
ffmpeg同梱の場合:
「WorkerKitには必要な変換実行環境が含まれています。」
ffmpeg別途必要な場合:
「Worker実行にはffmpegが必要です。Companion checkでffmpegの利用可否を確認してください。」
9. P0-08 Users.permission / Admin listの関係
9.1 確認したいこと
Admin権限がどこで決まるか。
可能性:
- Users.permissionにadminが入る。
- Users.permissionはviewer/editorのみ。
- AdminはADMIN_USERSまたはadmin workbookで別管理。
- Script ownerはbootstrap adminになる。
9.2 確認対象
- Settings UI
- Admin Add modal
1SA_Settings.js- access helper
- ADMIN_USERS sheet
- admin workbook
- Users sheet
9.3 確認手順候補
- Users.permissionのoptionsを確認する。
- Settingsの説明文を確認する。
- Add Admin操作でどこに行が追加されるか確認する。
- Admin追加後にUsers.permissionが変わるか確認する。
- Admin listから外した場合、Users.permissionがどうなるか確認する。
- Script ownerがUsersにいない場合でもSettingsを開けるか確認する。
9.4 UserGuideで断定したい文
- 「Users.permissionはviewer/editorを管理します。」
- 「AdminはAdmin listで管理されます。」
- 「AdminでもGoogle Drive/Sheets共有が不足すると保守操作は失敗します。」
これは確認後に断定する。
10. P0-09 Sharing Sync対象resource
10.1 確認したいこと
Sync Checked / Sync Mismatchesがどのresourceの共有を更新するか。
候補:
- Host Spreadsheet
- Project Drive root
- Originals root
- Proxies root
- Admin workbook
- WorkerKit folder
- Script projectは対象外の可能性
10.2 確認手順候補
- User Access / Sharingでresource listを確認する。
- 1人のtest userをviewerにする。
- Sync Checkedする。
- Google Drive/Sheets側の共有を確認する。
- editorに変更して再Syncする。
- どのresourceのroleが変わるか記録する。
- Admin workbookが対象か確認する。
10.3 UserGuideに必要な説明
- Sync対象resource一覧。
- viewer/editorがGoogle側でどのroleになるか。
- Sync対象外resource。
- Sync後も手動確認すべきresource。
11. P0-10 project_meta現行形式
11.1 確認したいこと
project_metaが現行ブランチでどの形式か。
候補:
- meta_key / meta_value / meta_type / note / updated_at
- 旧styleのcolumn型
- 外部SpreadsheetからのIMPORTRANGE mirror
- admin workbook source
11.2 確認手順候補
- Settings project_meta editorを見る。
- Host Spreadsheetのproject_meta sheet headerを見る。
- external source設定を見る。
- read-only modeか確認する。
- 1つのsafe metaを編集してpersistするか確認する。
- updated_atの更新を確認する。
11.3 UserGuideへの反映
旧形式はLegacy noteにする。
project_metaがread-onlyの場合は、管理元のSpreadsheetを編集すると書く。
12. P0-11 SystemConfig schema
12.1 確認したいこと
SystemConfig sheetの実schema。
候補key:
- drive.originals.root_id
- drive.proxies.root_id
- proxy.preset.default
- proxy.audit.enabled
- proxy.audit.hour
- proxy.audit.limit
- proxy.audit.entities
- project_meta.source_spreadsheet_id
12.2 確認手順候補
- Settings Proxy Opsを見る。
- SystemConfig sheet headerを見る。
- root id保存後にどの行/columnが変わるか確認する。
- Proxy Audit設定保存後にどのkeyが変わるか確認する。
- project_meta external sourceを設定する場合のkeyを確認する。
12.3 UserGuideへの反映
SystemConfigは通常ユーザー向けには出さない。
Admin Guideでは「Proxy/Audit/Drive rootの運用設定」として説明する。
Technical Referenceではkey一覧を載せる。
13. P0-12 Pages Config JSON現行形式
13.1 確認したいこと
Pages Config JSONに何が入るか。
Table:
- fieldIds
- order
- hidden
- widths
- sort
- filter
- group
Detail:
- cards
- card type
- card fieldIds
- layout
- title
SchedView/Scheduler:
- mode
- lane axis
- visible lanes
- zoom
- display fields
- range
13.2 確認手順候補
- Table presetをSave Asする。
- Pages sheetでconfigを見る。
- Detail card layoutをSave Asする。
- Pages sheetでconfigを見る。
- SchedView Save Viewを実行する。
- Pages/Schedule configを見る。
- field_idが存在しない場合の挙動を見る。
13.3 UserGuideへの反映
通常ユーザーにはJSONを見せない。
Admin GuideではPresetが壊れたときの確認項目にする。
Technical Referenceで形式を載せる。
14. P0-13 Link field複数値の保存形式
14.1 確認したいこと
link fieldに複数IDを入れる場合の保存形式。
候補:
- comma-separated string
- newline-separated string
- JSON array
- Apps Script array serialized
- single value only
14.2 確認手順候補
- ShotのAsset Linkに複数Assetを選ぶ。
- Sheet上の保存値を見る。
- Table表示を見る。
- Detail表示を見る。
- Link Pickerで再編集する。
- 1つだけ削除して保存する。
- reload後に残るか確認する。
14.3 UserGuideへの反映
複数選択可の場合:
「Link fieldは複数recordを持てます。UIではchipとして表示されます。」
単一のみの場合:
「このfieldは1つのrecordだけを参照します。」
保存形式はTechnical Referenceへ。
15. P0-14 Forum API / 保存先 / 権限
15.1 確認したいこと
Forumの保存先と操作権限。
確認項目:
- Threads sheet名
- Posts sheet名
- schema
- General Threadのkey
- Entity Threadのkey
- edit可否
- delete可否
- tags保存形式
- viewer投稿可否
- editor投稿可否
- admin moderation有無
15.2 確認手順候補
- General Threadを作る。
- Entity Threadを作る。
- 投稿する。
- Sheet上にどのように保存されるか確認する。
- DetailからDiscussでprefillされるか確認する。
- viewer/editor/adminで投稿権限を確認する。
- edit/delete UIの有無を確認する。
15.3 UserGuideへの反映
保存先・権限が未確認なら、UserGuide本編では「Forumはスレッド型の連絡・議論画面」とだけ説明し、詳細は保留する。
16. P0-15 Schedule / SchedView正式URL
16.1 確認したいこと
候補:
?p=schedule?p=schedview?p=schedview&schedId=sched_0001
16.2 確認手順候補
- それぞれのURLを開く。
- どれが正しく表示されるか確認する。
- GNAVI/PNAVIが生成するURLを確認する。
- Routerが生成するURLを確認する。
- DebugPanel Runtime URL Paramsを見る。
16.3 UserGuideへの反映
UserGuideには公式表記を1つだけ載せる。
aliasはTechnical Referenceに載せる。
17. P1確認: 最初のAdmin bootstrap
17.1 確認したいこと
最初のAdminをどう作るか。
候補:
- Script ownerが自動Admin。
- ADMIN_USERS sheetへ手入力。
- Admin workbookへ手入力。
- Settings bootstrap modeから追加。
17.2 UserGuideへの反映
Admin Setup章に必須。
未確認なら、初期セットアップを断定できない。
18. P1確認: HOST_SS_ID正式手順
18.1 確認したいこと
installHostSpreadsheet() を使うのが正式か。
確認項目:
- function名
- 実行場所
- 必要権限
- Script Propertiesのkey
- DebugPanelで確認できるか
- 別Spreadsheetへ切り替える手順
18.2 UserGuideへの反映
Admin Setupの初期手順に載せる。
19. P1確認: Hydrate entity選択の反映
19.1 確認したいこと
Settings UIのHydrate Originals対象選択が実装に反映されるか。
候補:
- all/shot/asset/taskが選べる。
- 実装は常にallを処理する。
- UIだけentity選択がある。
19.2 UserGuideへの反映
反映される場合:
「対象entityを選んでHydrateできます。」
反映されない場合:
「HydrateはShots/Assets/Tasks全体を処理します。」
20. P1確認: Versions folder repairのUI導線
20.1 確認したいこと
Versions folder repairがSettingsまたはDebugPanelから実行できるか。
確認対象:
- Settings button
- DebugPanel button
- server API
- DriveBuilder function
20.2 UserGuideへの反映
UI導線がある場合はAdmin Guideに手順を載せる。
UI導線がない場合はTechnical/Admin internal noteにする。
21. P1確認: Task Recalculateの影響範囲
21.1 確認したいこと
Task Est Recalculateがどのfieldを変更するか。
確認項目:
- 対象field_id
- completed taskを含めるoption
- formula更新か値更新か
- Scheduler durationとの関係
- StatusやDue Dateに影響するか
21.2 UserGuideへの反映
Admin Guideに「実行前に対象fieldとcompleted含有を確認」と書く。
22. P1確認: Deployment推奨設定
22.1 確認したいこと
GAS Web Appの推奨deploy設定。
確認項目:
- Execute as MeかUser accessingか
- Who has access
- email取得の制限
- User Access / Sharingとの関係
- External staffが開けるか
22.2 UserGuideへの反映
Admin Setupの必須項目。
ただし、セキュリティに関わるため、実運用方針確定後に書く。
23. P2確認: DataHubの現行利用範囲
23.1 確認したいこと
DataHubが現ブランチでどこまで使われているか。
候補:
- 旧設計のみ。
- LinkMaps生成に使う。
- Dashboard summaryに使う。
- Folder diffに使う。
- Table lazy loadに使う。
23.2 UserGuideへの反映
通常ユーザーには出さない。
Technical Referenceで「集約/高速化用」として扱う。
24. P2確認: 3CL_Upload templateの実体
24.1 確認したいこと
DataCoreにはupload routeがあるが、3CL_Upload.html が見つからない。
確認項目:
- template名が違うのか。
- 未同梱なのか。
- Uploadはmodalだけでpageは未使用なのか。
- routeだけ残っているのか。
24.2 UserGuideへの反映
Upload専用ページがない場合、GuideにはTable/Detail Uploadだけを載せる。
26. 確認結果を記録するテンプレート
26.1 仕様確認テンプレート
確認項目:
優先度:
確認日:
確認者:
Branch / Commit:
画面URL:
関連ファイル:
操作手順:
1. 2. 3.
Observed:
Expected:
UserGuideに断定してよい文:
UserGuideで避けるべき文:
残った不明点:
26.2 Scheduler確認テンプレート
Schedule ID:
Card ID:
Task ID:
Before:
After Save:
After Publish:
After Reload:
Task sheet changed?:
Schedule config changed?:
Snapshot created?:
Undo possible?:
26.3 Upload/Proxy確認テンプレート
Entity:
Record ID:
Field ID:
Upload source:
File name:
UploadInbox row:
ProxyJobs row:
Drive folder path:
Versions pointer:
Preview result:
Proxy Audit result:
26.4 Permission確認テンプレート
User email:
Users.permission:
Admin list:
Google Drive role:
Google Sheets role:
Can open Dashboard?:
Can edit Table?:
Can upload?:
Can open Settings?:
Can sync sharing?:
28. 次に進む場合の候補
Option A: Final Outline Draft
MOTK_UserGuide_Final_Outline_Draft_01 を作る。
内容:
- Part A: Basic User Guide
- Part B: Producer/Supervisor Workflow
- Part C: Admin Guide
- Part D: Technical Reference
- Part E: QA / Acceptance
- Known unresolved specs
これは最終化の入口。
Option B: Basic User Guide Draft
MOTK_UserGuide_Basic_Draft_01 を作る。
内容:
- 初めて使う人向け
- Dashboard / Table / Detail / Upload / SchedView / Forum
- SettingsやAdmin詳細は省略
Option C: Admin Guide Draft
MOTK_AdminGuide_Draft_01 を作る。
内容:
- Settings / Drive / Proxy / Sharing / DebugPanel / Maintenance
Option D: Technical Reference Draft
MOTK_TechnicalReference_Draft_01 を作る。
内容:
- Data model / Routing / Field types / DebugPanel / Proxy schema / Known unresolved specs
第11部 禁止事項・注意事項 — 全員必読
この部はMOTK全体の「やってはいけないこと」を1か所に集約したものです。各章にも文脈ごとの注意がありますが、迷ったらここに戻ってください。
Part 11 — Prohibitions & Cautions (required reading)
Everything you must not do, collected in one place. When in doubt, come back here.
1. 禁止事項(データを壊す操作)
1.1 スプレッドシート直接編集に関する禁止
| 禁止 | 理由 |
|---|---|
データシートの1行目(fi_xxxx)・2行目(見出し)を編集・削除・並べ替え |
アプリは列をフィールドIDで結び付けています。壊すと全画面が誤動作します |
| ID列(A列)の値を変更 | 全リンク・全フォルダ対応・全スケジュールカードが切れます |
| 行の削除(レコードを消したい場合も) | リンク先を失った参照が残り、復旧が困難。レコードの無効化はステータス等で運用 |
| シート名の変更・シートの削除 | コードはシート名で参照しています。DataHub Cache OpsLog Pages Fields Scheds SystemConfig などは特に厳禁 |
| DataHubシートへの書き込み | 数式で管理されており、手書きすると数式が壊れます |
| OpsLog / Cacheシートの手編集 | 自動管理(ローテーション/Hydrator更新)されます。読むのは自由です |
| 列の挿入・削除をアプリ外で行う | フィールド追加は必ずFieldsシートの正規手順(第7部)で |
1.2 管理用ワークブックに関する禁止
| 禁止 | 理由 |
|---|---|
ADMIN_USERS を不用意に共有 |
管理者を定義できる人の範囲そのものです。共有=管理権限の委譲と同義 |
project_meta のキー名変更・行削除 |
auth.write.mode ほか運用スイッチの置き場です。値の変更のみ可 |
| 管理用ワークブックのIDを差し替える | アプリ全体の管理者解決が壊れます |
1.3 GAS / デプロイに関する禁止
| 禁止 | 理由 |
|---|---|
| Apps Scriptエディタでの直接コード編集 | ローカルのgitリポジトリが正。次回デプロイで上書きされ、変更は消えます |
スクリプトプロパティ HOST_SS_ID の無断変更 |
アプリが読むワークブックそのものが切り替わります |
| デフォルトデプロイメントの削除操作の試行 | GASの仕様上残ります。運用デプロイは1本に保たれています |
executeAs を USER_DEPLOYING に変更 |
全ユーザーがデプロイ者権限で動く=権限モデルの崩壊 |
1. Prohibited — operations that destroy data
1.1 Direct spreadsheet edits
| Prohibited | Why |
|---|---|
Editing / deleting / reordering row 1 (fi_xxxx) or row 2 (labels) of a data sheet |
The app binds columns by field ID; breaking them misbehaves every screen |
| Changing values in the ID column (A) | Severs every link, folder mapping and schedule card |
| Deleting rows (even to remove a record) | Orphaned references remain and recovery is hard; retire records via status fields instead |
| Renaming or deleting sheets | Code references sheets by name — DataHub Cache OpsLog Pages Fields Scheds SystemConfig above all |
| Writing into DataHub | Formula-managed; hand edits break the formulas |
| Hand-editing OpsLog / Cache | Auto-managed (rotation / Hydrator). Reading is fine |
| Inserting/deleting columns outside the app | Add fields only via the Fields sheet procedure (Part 7) |
1.2 The admin workbook
| Prohibited | Why |
|---|---|
Casually sharing ADMIN_USERS |
Sharing it is delegating admin rights |
Renaming keys / deleting rows in project_meta |
It holds operational switches incl. auth.write.mode; change values only |
| Swapping the admin workbook ID | Breaks admin resolution app-wide |
1.3 GAS / deployment
| Prohibited | Why |
|---|---|
| Editing code in the Apps Script editor | The local git repo is the source of truth; the next deploy overwrites you |
Changing script property HOST_SS_ID without coordination |
Repoints the app at a different workbook |
Switching executeAs to USER_DEPLOYING |
Every user would act with the deployer's rights — the permission model collapses |
2. 要注意操作(可能だが慎重に)
| 操作 | 注意点 |
|---|---|
| Sharing Sync(共有の一括同期) | 退場処理を含むため、対象ユーザーを必ず確認してから実行。誤実行で外部の人に共有が飛ぶ/必要な人の共有が外れる |
| Scheduler Publish | 2段階で不可逆寄り。Publish前にSnapshotを確認。完了済みTaskはスキップされる仕様 |
| Card remove | 消えるのはスケジュール上のカード(配置)であって、Taskレコードは消えません。逆に「Taskを消したつもり」にならないこと |
| Task Recalculate(includeCompleted) | 完了済みTaskの見積を上書きし得ます。通常はincludeCompletedを使わない |
| Field追加・削除 | 追加はFieldsシート正規手順+PageConfig更新+キャッシュ反映確認まで1セット(第7部)。削除は原則しない(非表示で運用) |
auth.write.mode の変更 |
strictに切り替えると、Usersに登録のない人は即座に書き込み不可。切替は告知してから。反映まで最大60秒 |
| Proxy Workerの複数起動 | 同一ジョブの取り合いはclaim機構で防がれますが、同一PCでの多重起動は転送帯域を食い潰します |
| ブラウザ拡張による画面改変系ツール | innerHTML操作系の拡張はテーブル描画と衝突することがあります |
2. Handle with care
| Operation | Caution |
|---|---|
| Sharing Sync | Includes offboarding; verify the target users first. A wrong run shares to outsiders or strips needed access |
| Scheduler Publish | Two-stage and effectively irreversible; check the Snapshot first. Completed tasks are skipped by design |
| Card remove | Removes the schedule placement, not the Task record |
| Task Recalculate (includeCompleted) | Can overwrite estimates of finished tasks; normally leave it off |
| Adding / removing fields | Adding = Fields sheet procedure + PageConfig update + cache verification as one set (Part 7). Avoid removal; hide instead |
Changing auth.write.mode |
strict instantly blocks anyone not in Users; announce before switching. Takes up to 60 s |
| Multiple Proxy Workers on one PC | Job claiming prevents conflicts, but you will saturate bandwidth |
| DOM-rewriting browser extensions | Can fight the table renderer |
3. 運用上の注意事項
3.1 同時編集
- 行ロックはありません。最後に保存した値が勝ちます。 同じレコードを同時に触らない運用(担当分け)が基本です。
- 書き込みはサーバー側で直列化(ロック)されるため、混雑時は保存に数秒かかることがあります。失敗時はUIが楽観値を保持し再試行できます。
3.2 パフォーマンス
- 初回アクセスは各種キャッシュが空のため遅くなります(正常)。2回目以降はローカルキャッシュ先行で表示されます。
- 200人規模での同時利用を想定した設計ですが、全員が同時刻に初回アクセスするような使い方(例: 一斉キックオフで全員同時に開く)は避け、数分の分散を推奨します。
- 巨大なページ設定(数百列の表示)は描画を遅くします。用途別にPreset(ページ)を分けてください。
3.3 ファイル運用
- Originalsフォルダのファイルをドライブ側で直接移動・改名しないでください。アプリとの対応が切れます。
- Proxyが生成されない場合はWorkerの稼働とffmpegのPATHを確認(第7部 Proxy障害Runbook)。
3.4 アカウント・共有
- MOTKのアクセス権はGoogleの共有と連動します。ドライブやシートを手動で共有しないでください。必ずUser Access / Sharing Sync経由で行います。
- 退場者の処理は「Usersのpermission変更 → Sharing Sync」の順。手動で共有だけ外すと権限不一致として検出され続けます。
3.5 報告とログ
- 2026年6月以降、サーバーエラー・権限拒否・ブラウザの未捕捉エラーはワークブックの
OpsLogシートに自動記録されます。障害報告の際は発生時刻を必ず添えてください。 OpsLogの該当行と突き合わせます。 - OpsLogは約2000行で自動ローテーションします。保全したい記録は別シートへコピーしてください。
3. Operational notes
3.1 Concurrent editing
No row locks: the last save wins. Divide record ownership. Server writes are serialized, so saves can take a few seconds under load; on failure the UI keeps your value for retry.
3.2 Performance
First visit is slow (caches are cold) — normal. Avoid having everyone open the app at the same instant; spread by a few minutes. Split huge views (hundreds of columns) into purpose-built presets.
3.3 Files
Never move or rename files inside Originals folders directly in Drive. If Proxies stop appearing, check the Worker and ffmpeg PATH (Part 7 runbook).
3.4 Accounts & sharing
MOTK access rides on Google sharing. Never share sheets/folders by hand — always go through User Access / Sharing Sync. Offboard via Users.permission → Sharing Sync, in that order.
3.5 Reports & logs
Since June 2026, server errors, permission denials and uncaught browser errors are recorded in the OpsLog sheet. Always include the time of day in problem reports so they can be matched to OpsLog rows. OpsLog rotates at ~2,000 rows; copy out anything you need to keep.
第12部 アーキテクチャ更新補遺(2026年6月 / v483〜v488)
本書の元素材が書かれた後、2026年6月に堅牢化のための大規模な改修(v483〜v488)が行われました。この部はその差分を正典として記録します。本書の他章と矛盾がある場合は本部が優先です。
Part 12 — Architecture Addendum (June 2026 / v483–v488)
A major hardening pass (v483–v488) landed after the source chapters of this book were written. This part records the differences and takes precedence over any conflicting statement elsewhere in the book.
1. リンクラベル問題の根治(v483)
長く続いた「リンク欄がIDのまま表示される」問題の根本原因は、サーバーの sv_getLinkMaps() が SpreadsheetApp.getActive() でシートを読もうとしていたことでした。MOTKのスクリプトはスプレッドシート非バインドのスタンドアロン型のため getActive() は常にnullとなり、リンクマップが黙って空になっていました。v483でホストワークブック解決(HOST_SS_ID →既定ID)経由に修正済みです。
1. Root fix of the link-label bug (v483)
The long-standing "link fields show raw IDs" bug was caused by the server's sv_getLinkMaps() reading sheets via SpreadsheetApp.getActive(). MOTK's script is standalone (not bound to a spreadsheet), so getActive() always returned null and the link maps were silently empty. v483 routes all reads through host-workbook resolution (HOST_SS_ID → default ID).
2. 同型バグの一掃(v485, v487)
同じ「スタンドアロンでは取得できないAPI」に依存していた箇所を全て修正しました。
getActiveSpreadsheet()直呼びの15か所 → ホスト優先リゾルバ_SS_()へ(エンティティ読み取り、Forumシート確保、Scheduler保存、versionsポインタ等)- 毎日のCache Hydratorトリガー(スタンドアロン文脈で全く動いていなかった)→ ホスト解決で復活
getDocumentCache()(スタンドアロンではnull)→ ScriptCacheフォールバック。これによりv469で導入されていたPages一覧キャッシュとScheduler読み込みキャッシュが本番で初めて有効化
2. Sweep of the same bug class (v485, v487)
Every other dependency on "APIs that return null in standalone context" was fixed:
- 15 direct
getActiveSpreadsheet()call sites → host-first resolver_SS_()(entity reads, Forum sheet creation, Scheduler saves, versions pointers, …) - The daily Cache Hydrator trigger (which had been a silent no-op in standalone context) now works
getDocumentCache()(null in standalone) → ScriptCache fallback, which finally activated the v469 Pages-list cache and Scheduler load cache in production
3. パフォーマンス(v484, v486)
- リンクマップのサーバー共有キャッシュ: 全ユーザー共有・TTL5分・書き込み時自動無効化。従来は呼び出しのたびに5シート全読みでした。
- クライアントの重複フェッチ排除: 起動時と描画後の二重リクエストを1本に共有。
- テーブルのコールドブート並列化: 初回起動時に行データ取得がスキーマ読込完了を待っていた直列構造を解消。2回目以降と同じ「待たずに取得開始」へ。
3. Performance (v484, v486)
- Shared server cache for link maps: all users share it, TTL 5 min, auto-invalidated on writes. Previously every call re-read five full sheets.
- Client fetch dedupe: boot and post-render no longer issue duplicate requests.
- Parallelized cold boot: the table no longer serializes row fetching behind the schema load on first visit.
4. 書き込みゲート(v485, v488)
エンティティ書き込み(sv_setRecord)とScheduler保存に中央権限ゲート _dc_requireWriteAccess_() が入りました。動作モードは管理用ワークブックの project_meta のキー auth.write.mode で制御します(v488で管理用ワークブックへ移動。SystemConfig は旧フォールバックとしてのみ参照)。
| モード | 動作 |
|---|---|
open(現在値・開発中) |
従来どおり制限なし |
identified |
匿名アクセスは通すが、ログイン済みユーザーはUsers権限(editor/manager/admin)が必要 |
strict(本番推奨) |
ログイン必須+Users権限必須。拒否はOpsLogに監査記録 |
- 反映は最大60秒(サーバーキャッシュTTL)。
- 切替できるのは管理用ワークブックを編集できる人だけ=
ADMIN_USERSと同じ信頼境界。
本番移行手順: 管理用ワークブック project_meta の auth.write.mode 行を open から strict に書き換えるだけです。コード変更・再デプロイは不要。
4. The write gate (v485, v488)
A central permission gate _dc_requireWriteAccess_() now guards entity writes (sv_setRecord) and Scheduler saves. Its mode is set by the key auth.write.mode in the admin workbook's project_meta (moved there in v488; SystemConfig remains only as a legacy fallback).
| Mode | Behavior |
|---|---|
open (current, development) |
No restriction — legacy behavior |
identified |
Anonymous passes; signed-in users need editor/manager/admin in Users |
strict (recommended for production) |
Sign-in required AND Users permission required; denials audited to OpsLog |
- Takes effect within 60 seconds (server cache TTL).
- Only people who can edit the admin workbook can flip it — the same trust boundary as
ADMIN_USERS.
Production cutover: change the auth.write.mode row in the admin workbook's project_meta from open to strict. No code change, no redeploy.
5. 運用ログ OpsLog(v487)
データワークブックに OpsLog シートが追加されました。
- 記録対象: doGet致命エラー、保存失敗、リンクマップ異常、書き込みゲート拒否(AUDIT)、ブラウザ未捕捉エラー(1ページ最大5件・サーバー側で毎時120件上限)
- 列:
ts | level | tag | detail | actor | context - 約2000行で自動ローテーション。手編集禁止(閲覧は自由)
- トリアージ: まず
level=ERRORで絞り込み。AUDITはセキュリティイベントであり故障ではありません
また doGet に大域ガードが入り、致命エラー時もGASの素のエラー画面ではなく再読み込み案内ページが表示されます。
5. The OpsLog operations log (v487)
A new OpsLog sheet in the data workbook records:
- fatal
doGeterrors, save failures, link-map anomalies, write-gate denials (AUDIT), and uncaught browser errors (max 5 per page load, server-capped at 120/hour) - columns:
ts | level | tag | detail | actor | context - auto-rotates at ~2,000 rows; never hand-edit (reading is fine)
- triage: filter
level=ERRORfirst;AUDITrows are security events, not failures
doGet also gained a global guard: fatal errors now show a friendly "please reload" page instead of the raw Apps Script error screen.
6. ワークブック整理(v487)
MigrationLogシートを削除(2026年3月の移行記録。scripts/apply_migration.py再実行時に再生成されます)OpsLogシートを新設
6. Workbook cleanup (v487)
- Deleted the
MigrationLogsheet (March 2026 migration trail; regenerable byscripts/apply_migration.py) - Created the
OpsLogsheet
7. ロールバック手段
Apps Scriptはpushごとに全バージョンを保持しています。障害時は、(a) GASエディタ > デプロイ > 旧バージョンを選択、または (b) gitの旧コミットをcheckoutして scripts/deploy_gas_webapp.py を再実行。gitのコミット(v4xx接頭)とGASバージョンは対応しています。
7. Rollback
Apps Script keeps every pushed version. To roll back: (a) Apps Script editor > Deployments > point the active deployment at an older version, or (b) check out an older git commit and rerun scripts/deploy_gas_webapp.py. Git commits (v4xx prefixes) correspond to GAS versions.
8. 200人運用の根拠(要約)
- GASの同時実行は約30枠。v484〜487の改修で1ブートあたりのサーバー呼び出しは2〜3本に削減済み
- リンクマップ・Pages一覧は全ユーザー共有キャッシュ(1人が温めれば全員が速い)
- 行データはローカルキャッシュ先行表示+裏で更新(SWR)
- 書き込みはロックで直列化。混雑時は保存に数秒かかるのが正常挙動
詳細な運用チェックリストはリポジトリの docs/DELIVERY_GUIDE.md を参照してください。
8. Why 200+ users works (summary)
- GAS allows ~30 simultaneous executions; v484–487 cut a boot to 2–3 short calls
- Link maps and the Pages list are shared caches — one user warms them for everyone
- Rows render cache-first from localStorage with background refresh (SWR)
- Writes serialize on a lock; a few seconds' save latency under load is normal
See docs/DELIVERY_GUIDE.md in the repository for the operational checklist.
第13部 用語集(辞書)
MOTKで使われる用語を分野別に収録した辞書です。五十音/ABC順ではなく、関連する用語が近くに並ぶよう分野別に配置しています。探すときはブラウザのページ内検索(Ctrl+F)を使ってください。
Part 13 — Glossary (Dictionary)
All MOTK terms, grouped by domain so related entries sit together. Use your browser's in-page search (Ctrl+F) to look things up.
1. エンティティとID
エンティティ(Entity) MOTKが管理するデータの種類。Shot / Asset / Task / ProjectMember / User の5主要種に加え、Page / Sched などの補助種がある。
Shot(ショット)
映像のカット単位。Shots シートの1行。ID接頭辞 sh_。ShotCode(例 201A)で人間が識別する。
Asset(アセット)
キャラクター、プロップ、セットなどの制作物。Assets シートの1行。ID接頭辞 as_。
Task(タスク)
作業単位。ShotまたはAssetに紐づき、ProjectMemberに割り当てられる。Tasks シートの1行。ID接頭辞 tk_。
ProjectMember(メンバー)
プロジェクト上の役割(例 Lead Animator)。ProjectMembers シートの1行。ID接頭辞 pm_。Userとは別概念で、User Linkで人と結ばれる。
User(ユーザー)
Googleアカウントを持つ実在の人。Users シートの1行。ID接頭辞 us_。permission 列が日常権限を決める。
レコード(Record) エンティティの1件=シートの1行。
ID接頭辞
sh_ as_ tk_ pm_ us_ fi_ pg_ upl_ fr_ mig_ など、IDの種類を表す先頭文字。IDは一度発番されたら変更禁止。
fi_xxxx(フィールドID) 列を一意に識別するID。データシートの1行目に並ぶ。表示名(2行目)が変わってもfi_は不変で、アプリは常にfi_で列を参照する。
ShotCode Shotの人間向けコード。リンクラベルとしても使われる。
1. Entities & IDs
Entity — A kind of data MOTK manages: Shot / Asset / Task / ProjectMember / User, plus auxiliary kinds (Page, Sched).
Shot — One cut of footage. A row in Shots; ID prefix sh_. Humans identify it by ShotCode (e.g. 201A).
Asset — A produced thing: character, prop, set. A row in Assets; prefix as_.
Task — A unit of work, tied to a Shot or Asset and assigned to a ProjectMember. Row in Tasks; prefix tk_.
ProjectMember — A role on the project (e.g. Lead Animator). Row in ProjectMembers; prefix pm_. Linked to a person via User Link.
User — A real person with a Google account. Row in Users; prefix us_. The permission column sets daily rights.
Record — One entity instance = one sheet row.
ID prefixes — sh_ as_ tk_ pm_ us_ fi_ pg_ upl_ fr_ mig_ etc. mark an ID's kind. IDs never change once issued.
fi_xxxx (field ID) — Uniquely identifies a column; lives in row 1 of data sheets. Labels (row 2) may change, fi_ never does — the app always binds by fi_.
ShotCode — The human-facing Shot code; also used as the link label.
2. 画面・UI
Shell(シェル) 全画面共通の外枠。GNAVI・テーマ・エラービーコンなどを持ち、各ページはShellの中で動く。
GNAVI(グローバルナビ) 画面上部のメインナビゲーション。エンティティ切替と主要ページへの導線。
PNAVI(ページナビ) ページ内のサブナビゲーション。
Table(テーブル画面) エンティティ一覧画面。検索・フィルタ・ソート・列表示切替・インライン編集・ページング(Pager)を備える。
Detail(詳細画面)
1レコードの全フィールドを表示・編集する画面。DetailShot DetailAsset などエンティティ別に存在。Uploadボタンもここにある。
Dashboard(ダッシュボード) 管理者向け運用ハブ。レコード作成、共有監査、アクセス同期など。admin/manager専用機能を含む。
Settings(設定画面) 管理者向け設定。Proxy Ops、Proxy Audit、Admin管理、Versions修復など。役割ゲートあり。
DebugPanel(デバッグパネル) 診断ハブ。パフォーマンス計測、スキーマ健全性、契約検査(Contract Inspector)、受け入れテストなどを集約。
Forum(フォーラム) ディスカッション機能。entityスレッド(レコード紐づき)とgeneralスレッドがある。
Scheduler(スケジューラ)
スケジュール編集画面(?p=schedule)。カードをレーンに配置して編集し、Publishする。
SchedView(スケジュールビュー)
スケジュール閲覧画面(?p=schedview)。閲覧専用。
カード(Card) スケジュール上の1配置。Taskに対応するものとTaskless(メモ的)なものがある。カード削除はTask削除ではない。
レーン(Lane) スケジュールの行(担当者・部署など)。
Create modal(作成モーダル) 新規レコード作成ダイアログ。エンティティに応じたフィールドウィジェットを出す。
Link Picker(リンクピッカー) リンクフィールド編集時に開く相手選択UI。IDの手入力を不要にする。
インライン編集(Inline Edit) テーブルのセルを直接編集する操作。Enterで確定、Escで取消。
Preview modal(プレビューモーダル) 素材のプレビュー表示。ORIGINAL / PROXY バッジでどちらを表示中か示す。
ステータスバー 画面下部の保存状態表示。「Updated!」=保存完了。
2. Screens & UI
Shell — The shared frame around every page: GNAVI, theme, error beacon.
GNAVI — Global navigation bar at the top; switches entities and major pages.
PNAVI — In-page sub-navigation.
Table — The entity list view: search, filter, sort, column toggles, inline editing, pager.
Detail — Single-record view/editor (DetailShot, DetailAsset, …). The Upload button lives here.
Dashboard — Admin operations hub: record creation, sharing audit, access sync. Includes admin/manager-only functions.
Settings — Admin settings: Proxy Ops, Proxy Audit, admin management, Versions repair. Role-gated.
DebugPanel — Diagnostics hub: performance, schema health, Contract Inspector, acceptance tests.
Forum — Discussions; entity threads (tied to a record) and general threads.
Scheduler — Schedule editor (?p=schedule): place cards in lanes, then Publish.
SchedView — Read-only schedule view (?p=schedview).
Card — One placement on a schedule; may correspond to a Task or be taskless (a note). Removing a card never deletes a Task.
Lane — A schedule row (person, department, …).
Create modal — The new-record dialog with per-entity field widgets.
Link Picker — UI for choosing link targets; no hand-typed IDs.
Inline Edit — Editing a table cell in place; Enter commits, Esc cancels.
Preview modal — Media preview; the ORIGINAL / PROXY badge shows which file is displayed.
Status bar — Save-state display at the bottom; "Updated!" = saved.
3. ページ設定・表示
Pages / PageConfig
Pages シートに保存される「表示設定一式」(列の並び・幅・フィルタ・ソート・グループ)。ID接頭辞 pg_。
Preset(プリセット)/ View 保存済みページ設定のこと。テーブル上部のセレクタで切替える。
pid
URLパラメータでページ設定を指すID(?pid=pg_0001)。
Fields / フィールド定義
Fields シートにある全フィールドのマスタ(entity、fi_、表示名、型、編集可否、target)。フィールド追加はここが起点。
フィールド型(Field type) text / number / date / select / checkbox / entity_link / versions / url など。型がウィジェットと表示(CommonRenderer)を決める。
リンクフィールド(Link field) 他レコードのIDを保持する欄(Shot Link、Asset Link、Assigned member等)。複数値はカンマ区切りで保存される。
CommonRenderer
フィールド型に応じた表示・編集ウィジェットを全画面共通で提供するクライアント部品。FieldsAPI を公開する。
LINK_MAPS(リンクマップ)
ID→表示名の対応表(assets/shots/tasks/users/membersの5バケット)。サーバー sv_getLinkMaps が生成し、共有キャッシュされる。
3. Page configs & display
Pages / PageConfig — A saved display setup (column order, widths, filters, sort, grouping) stored in the Pages sheet; prefix pg_.
Preset / View — A saved page config, switched from the selector above the table.
pid — URL parameter selecting a page config (?pid=pg_0001).
Fields sheet — Master list of all fields (entity, fi_, label, type, editability, target). Adding a field starts here.
Field type — text / number / date / select / checkbox / entity_link / versions / url … The type picks the widget and renderer.
Link field — A column holding other records' IDs (Shot Link, Asset Link, Assigned member …). Multiple values are comma-separated.
CommonRenderer — The shared client component that renders/edits every field type; exposes FieldsAPI.
LINK_MAPS — The ID→label table (five buckets: assets/shots/tasks/users/members), built by sv_getLinkMaps and shared-cached.
4. ファイル・素材
Originals(オリジナル) アップロードされた元素材。レコードごとのOriginalsフォルダに保管。ドライブ側での直接移動・改名は禁止。
Proxies(プロキシ) 表示・レビュー用の軽量変換ファイル。Proxy Workerが生成。
Versionsフィールド 素材のバージョン群を保持する特殊フィールド。Detailのアップロード先になる。アップロード先の指定はhiddenのfield_idで行い、未指定時はデフォルトversionsフィールドが使われる。
Upload(アップロード)
Detail画面のUploadボタンからの複数ファイル一括投入。UploadInbox に記録され、Proxyジョブが積まれる。
UploadInbox アップロード受付の記録シート。
ProxyJobs
Proxy変換ジョブのキュー。status は pending / claimed / processing / done / failed。エラー内容は error_message 列。
ProxyWorkers 稼働中Workerの登録・ハートビート記録シート。
Proxy Worker / WorkerKit ローカルPCで動く変換ワーカーとその配布物(zip)。ffmpegがPATHにあることが前提。
ffmpeg 動画変換に使う外部ツール。Worker動作の必須条件。
Proxy Audit Proxy欠落のスキャンと日次スケジュール設定。Settings内。
DriveBuilder レコードに対応するドライブフォルダ群を生成・整備するサーバー部品。
Originals URL解決 セルのURL/Cacheシート/レジストリ/project_metaの順でOriginalsフォルダURLを解決する仕組み。
4. Files & media
Originals — Uploaded source files, stored per record in its Originals folder. Never move/rename them directly in Drive.
Proxies — Lightweight display/review files generated by the Proxy Worker.
Versions field — The special field holding a record's media versions; the upload target on Detail. Selected via a hidden field_id, else the default versions field.
Upload — Multi-file upload from Detail; recorded in UploadInbox, queues proxy jobs.
UploadInbox — Upload intake log sheet.
ProxyJobs — Proxy conversion queue. Status: pending / claimed / processing / done / failed; errors go to error_message.
ProxyWorkers — Worker registration / heartbeat sheet.
Proxy Worker / WorkerKit — The local conversion worker and its distributable zip; requires ffmpeg on PATH.
ffmpeg — External video converter the Worker depends on.
Proxy Audit — Missing-proxy scan and its daily schedule, in Settings.
DriveBuilder — Server component that creates/repairs per-record Drive folders.
Originals URL resolution — Resolves a record's Originals folder URL via cell URL → Cache sheet → registry → project_meta, in that order.
5. データ基盤・シート
ホストワークブック(データ本体)
[071] MOTK。全エンティティシートとPages/Fields/運用シートを含む。スクリプトプロパティ HOST_SS_ID で指される。
管理用ワークブック(Adminワークブック)
[071] MOTK_admin。ADMIN_USERS(管理者リスト)と project_meta(プロジェクト設定)のみを持つ別ファイル。共有範囲=管理権限の信頼境界。
ADMIN_USERS 管理者リストシート。is_admin=TRUE の行が管理者。Users.permissionとは独立。
project_meta
プロジェクト設定のkey-valueシート(meta_key / meta_value …)。Originals/Proxiesルート、見積ルール、auth.write.mode などを保持。
SystemConfig
データ本体側の運用チューニング設定シート(config_key / config_value …)。Proxy監査設定など。権限系は置かない(第12部)。
DataHub 数式で管理される集計・参照シート。手書き禁止。
Cacheシート Originals URLなどの解決結果を保持する永続キャッシュ。Cache Hydratorが毎日更新。
OpsLog 2026年6月新設の運用ログシート。エラー・監査・クライアントエラーが自動記録される。約2000行で自動ローテーション。
Scheds / sched_xxxx
スケジュールの台帳(Scheds)と、スケジュールごとのカードデータシート(sched_0001 など)。
ForumThreads / ForumPosts / ForumRecent Forumのスレッド・投稿・最近の活動の保存先。
スレッドキー(thread_key)
entityスレッドは entity:recordId、generalは global または general:ft_xxx。
5. Data foundation & sheets
Host workbook (data) — [071] MOTK; all entity sheets plus Pages/Fields and operational sheets. Pointed to by script property HOST_SS_ID.
Admin workbook — [071] MOTK_admin; holds only ADMIN_USERS and project_meta. Its sharing = the admin trust boundary.
ADMIN_USERS — The admin list; rows with is_admin=TRUE are administrators. Independent of Users.permission.
project_meta — Project settings key-value sheet (meta_key / meta_value …): Originals/Proxies roots, estimate rules, auth.write.mode.
SystemConfig — Operational tuning sheet in the data workbook (config_key / config_value …): proxy audit settings etc. Holds no permissions (Part 12).
DataHub — Formula-managed aggregation sheet. Never write to it.
Cache sheet — Persistent cache of resolved Originals URLs etc., refreshed daily by the Cache Hydrator.
OpsLog — Operations log sheet (June 2026): errors, audits, client errors. Auto-rotates at ~2,000 rows.
Scheds / sched_xxxx — Schedule ledger (Scheds) plus one card-data sheet per schedule (sched_0001, …).
ForumThreads / ForumPosts / ForumRecent — Forum storage.
thread_key — Entity threads use entity:recordId; general threads use global or general:ft_xxx.
6. 権限・共有
permission(Users.permission)
日常権限。viewer(閲覧)/ editor(編集)が基本。manager / admin 相当値も許容。
Admin(管理者)
ADMIN_USERS で定義される最上位権限。Settings・Dashboard管理機能・共有同期を使える。
Bootstrap admin ADMIN_USERSが空のとき、Users.permission=editor のユーザーを暫定管理者として扱う立ち上げ用ルール。
Sharing Sync(共有同期) Usersシートの権限に合わせて、ワークブック・Originals/Proxiesルートフォルダ等のGoogle共有を一括同期する機能。Project Root / Admin Root優先、なければ個別リソース。スクリプトプロジェクト自体は対象外。
権限不一致(Mismatch) Usersの権限と実際のGoogle共有がずれている状態。Dashboard/Settingsで検出・修復できる。
auth.write.mode
書き込みゲートの動作モード(open / identified / strict)。管理用ワークブックの project_meta で設定(第12部)。
書き込みゲート(dc_requireWriteAccess) 全エンティティ書き込みとScheduler保存に入る中央権限チェック。拒否はOpsLogへAUDIT記録。
USER_ACCESSING Webアプリが「アクセスした本人として」実行されるデプロイ設定。MOTKの権限モデルの土台。
6. Permissions & sharing
permission (Users.permission) — Daily rights: viewer (read) / editor (read+write) primarily; manager / admin values also accepted.
Admin — Top-level rights defined by ADMIN_USERS; unlocks Settings, Dashboard admin ops, sharing sync.
Bootstrap admin — Startup rule: if ADMIN_USERS is empty, editors act as provisional admins.
Sharing Sync — Bulk-aligns Google sharing (workbooks, Originals/Proxies roots) to Users permissions. Project/Admin roots take priority; the script project itself is excluded.
Mismatch — A divergence between Users permission and actual Google sharing; detected and repairable from Dashboard/Settings.
auth.write.mode — Write-gate mode (open / identified / strict) set in the admin workbook's project_meta (Part 12).
Write gate (dc_requireWriteAccess) — Central permission check on all entity writes and Scheduler saves; denials audited to OpsLog.
USER_ACCESSING — Deployment setting: the web app runs as the visiting user. Foundation of MOTK's permission model.
7. アーキテクチャ・技術
GAS(Google Apps Script) MOTKのサーバー実行環境。スタンドアロン型スクリプト(スプレッドシート非バインド)。
スタンドアロン文脈
コンテナバインドでない実行環境のこと。getActive() 系・getDocumentCache() がnullになる。MOTKの歴史的バグの主因(第12部)。
doGet
WebアプリのHTTPエントリポイント。ルーティングと診断アクション(?action=diag-*)を担う。大域エラーガード付き。
google.script.run
ブラウザからサーバー関数(sv_*)を呼ぶGASの仕組み。1呼び出し=1実行枠。
sv_*
サーバー公開関数の接頭辞(例 sv_listRowsPage sv_setRecord sv_getLinkMaps)。
SS() / getHostSpreadsheet_()
ホストワークブックを正しく解決する内部リゾルバ。直接 getActiveSpreadsheet() を呼ぶことは禁止パターン。
CacheService GASのサーバーキャッシュ。ScriptCache(全ユーザー共有・キー100KB上限)を使用。
LockService
書き込み直列化のためのロック。sv_setRecord は最大10秒待つ。
SWR(stale-while-revalidate) 「キャッシュを即表示し、裏で最新を取得して差し替える」表示戦略。テーブルの基本動作。
ブートキャッシュ(Boot cache) 初回描画を速くするための起動時ローカルキャッシュ。
ソフトナビゲーション(Soft Navigation) ページ全体を再読み込みせずURLと画面を切り替えるSPA的遷移。
OpsLogビーコン(sv_clientLog) ブラウザの未捕捉エラーをOpsLogへ送る仕組み。1ページ5件・毎時120件に制限。
診断アクション(diag-*)
?action=diag-table-smoke などのヘルスチェックURL群。
デプロイメント(Deployment) GAS Webアプリの公開単位。運用は1本をin-place更新し、URLは不変。バージョン履歴からロールバック可能。
HOST_SS_ID データ本体ワークブックのIDを保持するスクリプトプロパティ。
OAuth / scriptUrl 認証とWebアプリURL解決まわりの总称。ログインアカウント違いがアクセス不能の最多原因。
7. Architecture & technology
GAS (Google Apps Script) — MOTK's server runtime; a standalone script (not bound to a spreadsheet).
Standalone context — Execution without a container binding; getActive*() and getDocumentCache() return null there. Historically MOTK's main bug source (Part 12).
doGet — The web app HTTP entry point: routing plus ?action=diag-* diagnostics; globally error-guarded.
google.script.run — The GAS mechanism for the browser to call server functions (sv_*). One call = one execution slot.
sv_* — Server-side public functions (sv_listRowsPage, sv_setRecord, sv_getLinkMaps, …).
SS() / getHostSpreadsheet_() — Internal resolvers that open the host workbook correctly. Calling getActiveSpreadsheet() directly is a forbidden pattern.
CacheService — GAS server cache; MOTK uses ScriptCache (shared across users, 100 KB/key).
LockService — Write serialization; sv_setRecord waits up to 10 s.
SWR (stale-while-revalidate) — Show cached data instantly, refresh in the background; the table's default strategy.
Boot cache — Local cache used to paint the first screen fast.
Soft Navigation — SPA-style transitions without a full page reload.
OpsLog beacon (sv_clientLog) — Sends uncaught browser errors to OpsLog; 5 per page load, 120/hour server cap.
diag-* actions — Health-check URLs such as ?action=diag-table-smoke.
Deployment — A GAS web app release. One production deployment is updated in place; the URL never changes; versions allow rollback.
HOST_SS_ID — Script property holding the data workbook's ID.
OAuth / scriptUrl — Sign-in and web app URL resolution; a wrong Google account is the top cause of access failures.
8. 運用・QA
Cache Hydrator Originals URL等のCacheシートを毎日温める時間トリガー処理。
Acceptance Test(受け入れテスト) DebugPanelから実行する一連の動作検証。リリース前チェックの中核。
Contract Inspector / Column Contract 列とフィールドIDの結び付き(契約)を検査する診断。インデックス依存バインディングの検出など。
Regression Coverage 既知の不具合の再発を監視する診断群。
Runbook(ランブック) 障害種別ごとの対応手順書(Drive障害/Proxy障害/共有障害)。第7部参照。
Severity(重大度) 問題報告の分類(動作不能/主要機能不全/限定的不具合/軽微)。
Publish(パブリッシュ) Schedulerの確定操作。①ロック付きスナップショット化 → ②Tasksへ反映、の2段階。完了済みTaskはスキップ。
Snapshot(スナップショット) スケジュールの保存時点コピー。Publishの土台であり、巻き戻しの拠り所。
Save / Save As / Save View Save=現スケジュールの上書き保存。Save As=別スケジュールとして複製保存。Save View=表示設定(Pages)の保存であってスケジュールデータの保存ではない。
8. Operations & QA
Cache Hydrator — Daily trigger that pre-warms the Cache sheet (Originals URLs etc.).
Acceptance Test — The release-gate test suite run from DebugPanel.
Contract Inspector / Column Contract — Diagnostics validating column↔field-ID bindings (e.g. detecting index-based binding).
Regression Coverage — Diagnostics watching for the return of known bugs.
Runbook — Per-incident response procedure (Drive / Proxy / Sharing); see Part 7.
Severity — Issue triage classes (system down / major feature broken / limited defect / minor).
Publish — Scheduler commit: ① freeze a locked snapshot → ② write into Tasks. Completed tasks are skipped.
Snapshot — A point-in-time copy of a schedule; the basis of Publish and rollback.
Save / Save As / Save View — Save = overwrite current schedule; Save As = duplicate to a new schedule; Save View = saves display settings (Pages) only, not schedule data.