KAWARU CLOUD / REQUIREMENTS — 8/9 実績反映版

開発要件 14件 — 8/7 計画と、8/9 時点の実績

2026-08-04 のヒアリングで挙がった開発要件を、実コードで裏を取って整理したもの。8/9 に状況を再取得し、計画と実績の差分を反映した。下の SECTION 00 が最新の状況、SECTION 01 以降は 8/4 時点の計画(記録として残している)。

整理日 2026-08-04 最終更新 2026-08-09 当初の展開日 2026-08-07 午前 対象 CRM入力画面(GAS WebApp → Cloud Run 移行中)
営業が使う本番画面
未反映
旧GAS側は 8/3 から1行も変わっていない
要件のステータス
0 / 17
dev_done・closed ともに0件
新基盤で実装が進んだ要件
5件
Cloud Run 版の中で完成
当初期日を超過
13件
target 8/7 → 8/9 現在も未達
SECTION 00 / 2026-08-09 追記

この5日間で起きたこと — 前提が2つ変わった

8/4 の計画時点と、いま(8/9)では前提が変わっている。計画の良し悪しの前に、まず何が変わったかを共有する。

1基盤が GAS から Cloud Run + IAP へ動き出した

8/4 に 案A(Cloud Run + IAP)が追加され、以降の実装はすべて新基盤の中で進んでいる。Node.js のサーバー実装一式、テスト、設計判断記録(D-1〜D-19)まで揃っている。

これは①(速度)への根本的な回答。8/4 時点で「GASの往復 0.3〜0.8秒は仕様上削れない」と整理したが、その制約は基盤を替えれば消える。当時提案した楽観的UI更新(対症療法)より筋が良い。
ただし作業の意味が変わる。旧GAS側に書いたコードは、移行が既定路線なら作り直しになる。「どちらに書くか」を決めずに着手すると二重に作ることになる。
2要件がリポジトリ管理になった(1要件=1ファイル)

この14件が REQ-0001〜0017 として整理され、運用の仕組みまで作られている。

追加されたもの役割
requirements/REQ-*.mdstatus / priority / needs / target / deployed_at を持つ
requirements/validate.js要件ファイルの検査
.github/workflows/CI で自動検査
.claude/skills/req/起票用スキル
needs: に ui_overlay / ui_core / bq_view / bq_ddl / deploy を持たせている。BQ作業と deploy が要るかを機械的に判別する設計。8/4 に「レイヤ判定が担当と手順を決める」と整理した考え方が、そのまま仕組みになっている。

🔴 いちばん重要な事実

新基盤(Cloud Run 版) 実装は進んでいる 8/5 フェーズ管理を新画面へ 8/7 No.3・No.4a・No.13(一括) 8/7 No.4b 商談議事録 テストも厚い。品質面の心配は小さい 旧本番(営業が今使っている画面) 1行も変わっていない Api.gs / Repo.gs / Index.html / JavaScript.html / sql/ → 8/3 以降の変更 0ファイル → 要件17件すべて deployed_at が空 = 8/7 の「全営業が使い始める」は達成できていない
誤解しないための補足。これは「作業が遅れている」という話ではない。この5日間の実装量は大きく、テストも厚い。ただしその成果は新基盤の上にあり、営業が今開いている画面には届いていない。基盤を移すという判断をした以上、旧画面への反映が止まるのは構造上むしろ自然で、問題は「いつ新基盤に切り替えて営業に渡すか」が決まっていないことにある。

要件17件の現在地

ID要件status優先target本番反映8/9 時点のメモ
REQ-0001案件ボードの表示速度改善in_progressP008-08未唯一の着手中。owner 高倉さん。Cloud Run 移行そのものが対策
REQ-0002カード削除+権限reviewingP108-07未旧GAS側に未検証の実装1440行が手元に残存
REQ-0003取り込み済みデータを既定で全表示reviewingP208-07未新基盤で実装済み(8/7 コミット)
REQ-0004ポップアップの横長化reviewingP108-07未新基盤で実装済み(8/7 コミット)
REQ-0005商談議事録の反映reviewingP108-07未新基盤で実装済み。8/4 に「15日以上・単独プロジェクト規模」と見積もった要件が入っている
REQ-0006NA内容・期日の表示、超過で色reviewingP108-07未旧画面では既に実装済み。新基盤側の移植状況は要確認
REQ-0007デリバリー・請求管理draftP308-31未新規に切り出された要件。⑫の事業目的が独立した形
REQ-0008日次取込の自動化draftP1—未設計判断は 8/6 に記録済み(D-19〜)。target 未設定
REQ-0009新規登録・一括分類を新画面へdraftP2—未新規要件(移行に伴って発生)
REQ-0010無効化フェーズを別タブに移動reviewingP308-07未8/5「フェーズ管理を新画面へ」で関連実装が入った
REQ-0011フェーズ選択肢をフェーズ管理と連動reviewingP108-07未同上。8/4 に「確実に入る」と判定した要件
REQ-0012Slackリマインド連携reviewingP208-07未時間トリガーの論点は Cloud Run 移行で前提が変わる
REQ-0013特定フェーズ移動時に背景を必須化reviewingP108-07未—
REQ-0014提案商材の複数選択reviewingP108-07未—
REQ-0015最終決定サービス+料金を必須化reviewingP108-07未請求管理の本体。REQ-0007 と対
REQ-0016ボードの大分類をフェーズと連動reviewingP208-07未新基盤で実装済み(8/7 コミット)
REQ-0017確度をパーセンテージ3分類にreviewingP108-07未—

status は reviewing 13 / draft 3 / in_progress 1。dev_done と closed はいずれも0件。コードが入っている要件も status は reviewing のままなので、ファイルの状態と実装の実態がずれている。ここを合わせないと、この仕組みは進捗を映さなくなる。

8/4 の見積もりは当たっていたか

当たっていたもの

レイヤ判定が律速になるという読み。実際、要件ファイルの needs: に同じ考え方が採用された。

①(速度)は小手先では届かないという判断。基盤の載せ替えという回答になった。

2.5日で10件は入らないという見立て。実際、旧画面への反映は0件。

外していたもの

④b 商談議事録を「15日以上・8/7 には不可能」と見積もったが、新基盤の上で 8/7 に実装が入っている。基盤を替えるという選択肢を計算に入れていなかったのが原因。

既存資産の制約を前提に見積もると、作り直す判断の方が速い場合を見落とす。

まだ判定できないもの

新基盤の実装が営業の業務で実際に使えるかは、切り替えるまで分からない。テストは厚いが、テストが通ることと現場で回ることは別。

旧画面とのデータの地続き性も未検証。

SECTION 01

時間の現実 — 積み上げると入らない

「最高」+「高」の10件を積み上げると、使える 2.5 日を大きく超える。どれを落とすかを決めないと、全部が中途半端に終わる。

使える時間 2.5 営業日 8/4 残り 0.5 + 8/5 + 8/6 積み上げると必要な時間(正攻法で作った場合) ①速度 2日 ⑧ 1日 ⑥ ④a ②削除+権限 3日 ⑩⑪⑫⑭ マスタ 8日 ⑤ 取込の復旧・即時化 13日 ④b 商談議事録の連携 15日〜 ← ここまでしか入らない 必要 42日 / 使える 2.5日 — 正攻法で全部作ると 17 倍の時間がかかる。縮小案か、落とす判断が必須。
SECTION 02

14件の一覧 — 優先度と 8/7 判定

判定は「8/7 午前に本番で使える状態にできるか」。○=確実、△=縮小案なら可、✕=不可能。

No要件優先度 8/7レイヤ所要判定の理由
1更新・読み込みの高速化最高△画面+GAS+BQ2日実測0.5秒は物理的に不可。体感を上げる方式なら可
2カード削除+権限(高橋のみ)高✕BQ3日BQ作業が2種類(権限+VIEW)。高倉さん枠が2回必要
3取り込み済みデータを既定で全表示中○画面0.5日チェックの初期値のみ。ただし件数5.8倍で①と衝突
4aポップアップの横長化高○画面0.5日CSSと配置のみ
4b商談議事録の反映高✕BQ新規15日〜実装ゼロ。データ取得元も未定。単独プロジェクト規模
5デジマ取込の即時反映高✕BQ+基盤13日遅いのではなく7/23から停止中。復旧が4段階
6NA内容・期日の表示、超過で色高○画面0.5日ほぼ実装済み。色の割り当て変更のみ
7無効化フェーズを別タブに移動低○画面+GAS1日⑧⑬と同根。まとめれば追加コストは小さい
8フェーズ選択肢をマスタと連動高○画面1日原因特定済み。除外処理を足すだけ
9Slackリマインド連携中✕manifest+外部10日時間トリガー導入は安全設計の変更。要合意
10特定フェーズ移動時に背景を必須化高△画面+BQ0.5日入力欄は既存。正攻法はBQマスタ、直書きなら即日だが規約違反
11提案商材の複数選択高△画面+BQ0.5日複数化はデータ構造変更で不可。単一のまま更新画面に出すなら可
12最終決定サービス+料金を必須化高✕画面+GAS+BQ5日BQに列が無い=保存先が存在しない。列追加が先
13ボードの大分類をフェーズと連動中○画面0.3日⑧と同根。同時に直せば追加コストほぼゼロ
14確度をパーセンテージ3分類に高△画面+BQ0.5日既存データの移行は不可。UIだけ3択にするなら可
優先度の分布から見えること

「高」が9件で全体の64%。優先度がついていない状態に近い。しかも同じ「高」の中に、0.3日で終わる⑬と、15日以上かかる④bが同居している。このままだと、すぐ終わるものが大物に埋もれて後回しになる。

SECTION 03

要件の詳細

各要件の現状を実コードで確認した結果。「現状」はすべて実測・実ファイルの記述に基づく。

最高

1更新・読み込みの高速化8/7 △
要望

情報の読み込み、フェーズ・ステータスの移動を 0.5秒程度にしたい。

現状

v1.4.0 で 11秒 → 3秒前後まで改善済み(マスタキャッシュ TTL1800 / 往復統合 / ボード遅延描画)。

内訳時間削れるか
GASの往復 google.script.run0.3〜0.8秒ほぼ不可(仕様)
BigQuery のクエリ0.5〜2秒限界あり
画面の再描画0.2〜0.5秒可
実測0.5秒は現構成では到達できない。固定費の合計が既に0.5秒前後あるため。
体感0.5秒なら作れる。サーバーの返事を待たず画面を先に動かし、失敗したら戻す方式。ただし「画面では移動したのに保存されていない」を絶対に起こせないので、失敗時の見せ方の設計に時間がかかる。
この要件が抱える構造的な問題

③(既定で全件表示)と正面衝突する。

表示件数
現在の既定80件
③を実施した場合461件(Notion 148 + 旧CRM 233 が加わる)

描画対象が 5.8倍になる。速くしたい要望と、表示を増やす要望を同時に叶えるには、仮想スクロールかページングが必要になり、③は「チェックの初期値を変えるだけ」では済まなくなる。

判断が必要:速度と全件表示、どちらを優先するか。

高(9件)

8フェーズ選択肢をフェーズ管理と連動8/7 ○
原因は特定済み

JavaScript.html:639 で STATE.statuses を無条件に全件ループしている。マスタとは繋がっているが、無効化されたフェーズを除外する処理が無い。

サーバー側は既に正しい

Api.gs:691-698「いま既にその値である場合だけは無効化済みでも通す」。廃止フェーズの案件で担当やメモだけ直す操作をブロックしないための判定。UIをこれと鏡合わせにすればよい。

直し方:選択肢から is_active=FALSE を除外。ただし現在値だけは残す。画面のみで完結、BQ不要。
6NA内容・期日の表示、超過で色8/7 ○
ほぼ実装済み

JavaScript.html:121 naCellHtml_ が一覧・ボードカードの両方で使われ、既に3段階で表示している。

状態表示現在の色
超過「N日超過」赤
当日「本日」黄
未来「あとN日」通常

NA内容も18文字まで表示済み。

要確認:ご要望の「黄色」は現在当日を表している。実画面で見えていれば色変更のみ。見えていなければ別の不具合(データ側に期日が入っていない等)。
4aポップアップの横長化8/7 ○

更新ダイアログ dlgUpdate の幅を広げ、項目配置を見直す。画面のみで完結。

注意:Style.html に display を書き足すときは [hidden]{display:none !important} を殺していないか必ず確認。過去にこれでモーダルが閉じなくなり、画面が使用不能になる本番障害が発生している。
4b商談議事録の反映8/7 ✕

商談ごとの議事録をカードの中に直接反映したい。

現状

議事録関連の実装は Api.gs に 0件。完全に新規。議事録の取得元(Zoom/手入力/他システム)も未確定。

新しいデータソースの追加にあたるため、4箇所への波及ルールがまるごと当たる。過去にこの波及を1箇所忘れて163件が「unknown」に落ちた事故がある。単独で1プロジェクト規模。
分割を推奨:④a(横長化・0.5日)とは切り離す。横長化だけなら 8/7 に入る。
5デジマ取込の即時反映8/7 ✕
「遅い」のではなく止まっている。docs/DATA_MODEL.md:270:stg_intake_event が 2026-07-23 から更新停止(119行)。
復旧は4段階
#内容
1Notion取込の倍増バグ修正(2回loadすると倍になる)
2取りこぼし監視の復旧(現在0行=1件も評価していない)
3取込の復旧・日次自動化
4即時化
順序を飛ばすとデータが倍になる。1 を飛ばして 3 をやると実害が出る。
10特定フェーズ移動時に背景を必須化8/7 △
入力欄は既にある

Index.html:208 に「変更理由・メモ」欄が存在し、raw_ui_event.change_note に入る。設計書に「口頭/メールでのキャンセル等、唯一の受け皿」とある。新しいダイアログは不要。

必要なのは必須化のロジック

対象フェーズ(開約・失注・対応不可)で、空のまま保存できなくする。

正攻法はBQマスタ。「どのフェーズが対象か」をコードに書くと、区分値をコードに書かないという設計の柱に違反する。フェーズが増減するたびにコード改修が必要になる。
抜け道:直書きなら 0.5日で 8/7 に入る。ただし明示的な技術的負債として記録し、来週マスタ化し直す前提が必要。
11提案商材の複数選択8/7 △
現状と要望の差は3つ
現状要望
場所新規登録のみ(更新画面に無い)更新画面にも
個数単一値複数選択
入力自由入力(datalist)選択肢固定
複数値化はデータ構造の変更。1案件1商材の前提で列が作られているため、4箇所への波及が当たる。8/7 には入らない。
縮小案:単一選択のまま更新画面にも商材欄を出す(0.5日)。複数化は来週。
⑫と対の概念。提案商材 → 最終決定サービス。商材マスタは共通なので同時に設計すべき。
12最終決定サービス+料金を必須化8/7 ✕
ルール
移動元移動先
商談実施 / 担当者合意 / 決済者合意契約書締結 / デリバリー中 / デリバリー完了

必須:最終決定サービス + 初期費用・月額費用・一括請求費用のいずれか1つ以上。解約は対象外。目的は請求書管理の徹底。

BQに列が無い=保存先が存在しない。列追加(ALTER TABLE)が先。列が無い状態でコードを書いても保存できない。
「必須」はDBでは守れない。BigQuery の ADD COLUMN は NOT NULL を付けられない(既存行を埋められないため)。担保はサーバー側の検証でしか実現できず、過去データは全てNULLのまま残る。請求管理では「いつ以降のデータが信頼できるか」の明示が要る。
列追加には前例がある。Phase3 で8列以上を冪等に追加した実績があり、同じ形を踏襲できる。
14確度をパーセンテージ3分類に8/7 △
現状:確度はマスタではない

JavaScript.html:650 で 実データのDISTINCT を拾っているだけ。入力欄も自由入力。フェーズ(マスタ駆動)とは作りが違う。

必要な作業は4段階
1確度マスタを新設BQ
2既存データを3分類へマッピングBQ
3自由入力 → 固定選択に変更画面
4フィルタの供給元を実データ→マスタへ画面
2が論点。現在どんな値が入っているか(「A」「高」「80%」等の混在の可能性)を見ないと移行ルールが決められない。フィルタのプルダウンを開けば実在する値がそのまま出る。
縮小案:UIだけ3択に固定(0.5日)。既存データはそのまま残るので不整合は出る。
2カード削除+権限(高橋さんのみ)8/7 ✕
物理削除は実装しない。append-only の設計の柱を壊すため。根拠3箇所:IAMで人間のDELETE/UPDATEを与えない方針、禁止事項5、そして「基本、削除はないはず」という依頼者ご自身の発言が実装コメントに引用されている。
方式

論理削除イベントを追記し、画面が読むVIEW側で除外する。

BQ作業が2種類必要:権限マスタの変更(admin 3名 → 1名)+ VIEWの変更。高倉さんの枠が2回要る。
目的が「テスト用データの除去」なら別解がある。テストモードで入れたデータを弾く仕組みが既に実装済み。VIEW 1本で除外できる可能性があり、その場合コード変更は不要。

中(3件)・低(1件)

3取り込み済みデータを既定で全表示8/7 ○

チェックボックス「取り込み済みデータ(Notion・CRM)も表示」は既定OFF。既定表示 80件 / 全件 461件。

①(速度)と正面衝突する。描画対象が5.8倍になる。両立には仮想スクロールかページングが必要。
13ボードの大分類をフェーズと連動8/7 ○

JavaScript.html:586-587 で STATE.stages を無条件に全件ループ。⑧と全く同じ原因。

⑧と同時に直せば追加コストはほぼゼロ。優先度は「中」だが、⑧が「高」なので実質同時に片付く。
9Slackリマインド連携8/7 ✕

NA期日の当日・3日前・1週間前に、担当者へメンション付きで通知。

明文化された安全装置を壊す。運用手順書に「このプロジェクトには時間トリガーが1本もないので、pushによる本番への副作用はありません。トリガーを追加する場合はこの前提が崩れる。必ず高倉さんに相談」と明記されている。時間トリガーを1本入れた瞬間、pushしただけで本番が動く世界に変わる。
manifest変更も必要。現在は外部HTTP通信の権限が無い。追加すると、剥がれると404になり修復が難しい設定ファイルを触ることになる。
7無効化フェーズを別タブに移動8/7 ○

マスタ管理の「一覧・編集」タブから無効化フェーズを外し、専用タブへ移す。

⑧⑬と同根。優先度は「低」だが、まとめて直すのが正しい。片方だけ直すと必ず兄弟が残る(このプロジェクトで4日間に9回起きた事故の型)。
SECTION 04

同じ根っこでまとまるもの

14件はバラバラではない。3つのグループに束ねられる。束ねて直すと安く済み、バラして直すと必ず取りこぼす。

GROUP A 無効化が除外されていない ⑦ マスタ管理の一覧タブ ⑧ フェーズ選択肢(更新・新規・一括) ⑬ ボードの大分類フィルタ 3箇所とも同じ原因。まとめて1.5日 / 別々なら2.5日 GROUP B 入力の統制(マスタ設計) ⑩ 背景テキストの必須化 ⑪ 提案商材 + ⑫ 最終決定サービス ⑭ 確度の3分類 4件とも同じBQマスタ作業。1回にまとめれば依頼も1回 GROUP C 単独プロジェクト規模 ④b 商談議事録の連携 ⑤ 取込の復旧・自動化・即時化 ⑨ Slackリマインド 他と並行させない。混ぜると小粒が全部止まる
SECTION 05 / 8/4 時点の記録(結果は SECTION 00 参照)

8/7 に向けた3つの選択肢

実作業 2.5 日をどう配分するか。①(最高)に2日使うと、他は2件しか入らない。ここが最大の判断ポイントだった。実際にはこの3案のいずれも採られず、基盤を Cloud Run へ移すという第4の道が選ばれた。以下は当時の検討として残す。

A. 速度優先

3件

①の体感高速化に2日を使う。残り0.5日で⑥⑧のみ。

最優先の要望に正面から応えるが、誤入力を防ぐ修正がほとんど入らないまま全員が使い始めることになる。

入るもの:① ⑥ ⑧

C. 中間(推奨)

4件+α

①の高速化をフェーズ移動だけに絞る(1日)。残り1.5日で小粒を回す。

遅さが最も刺さるのはボードでカードを動かす操作。そこだけ体感を上げれば「使えない」という第一印象は避けられる。一覧の初回読み込みは1回だけなので3秒でも致命傷にならない。

入るもの:①(部分) ⑥ ⑧ ④a + ⑬⑦(同根なのでほぼ無料)

B. 件数優先

6件

①は実測のみ(0.5日)にして、小粒を最大化する。

件数は稼げるが、最優先とされた速度が展開日に改善されない。9月の本作業の前提は固まる。

入るもの:⑥ ⑧ ④a ⑪縮小 ⑭縮小 ⑩縮小

NEXT / 2026-08-09 時点

いま決めるべきこと

8/4 の論点(deploy枠の確保・担当者マスタ・A/B/Cの配分)は、基盤移行という判断によって役目を終えた。いまの論点は3つに変わっている。

実装は進んでいる。決まっていないのは「いつ営業に渡すか」

01 切り替え日を決める 新基盤に5件分の実装が入っているが、営業が開く画面には届いていない。要件17件すべて deployed_at が空。「新基盤をいつ本番として営業に渡すか」が決まらない限り、実装を積んでも現場の状況は変わらない。ここが最大の未決事項。
02 要件ファイルの status を実態に合わせる コードが入っている REQ-0003・0004・0005・0016 も status は reviewing のまま。dev_done が0件のため、ファイルを見ても進捗が分からない状態になっている。仕組みを作った意味が失われるので、実装済みのものを先に進める。
03 旧GAS側に残した作業の処遇 8/3 に着手したカード削除(REQ-0002)の未検証コード1440行が手元に残っている。旧基盤を捨てるなら破棄、当面併存させるなら検証してPR。放置すると、後から「本番にあるのに git に無い」の逆パターンを生む。