ペース連動の値付けで『達成不能な目標稼働』が遠い日付を恒久的に最大値下げにする罠と、リードタイム閾値で値下げだけ止める実装
目標稼働×在庫が1室未満になる帯では不足率が常に100%になり最大値下げが固定される。閾値以上は係数の下限を1.00にし値上げ側は触らない。旧オラクル+ガード付きオラクルのテスト型と、デプロイ前に『前』の実値を残す手順
約5.1万トークンの節約 (API料金換算で約77円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「ペース連動の値付けで『達成不能な目標稼働』が遠い日付を恒久的に最大値下げにする罠と、リードタイム閾値で値下げだけ止める実装」は、業務自動化カテゴリのAI指示書(MDファイル)です。目標稼働×在庫が1室未満になる帯では不足率が常に100%になり最大値下げが固定される。閾値以上は係数の下限を1.00にし値上げ側は触らない。旧オラクル+ガード付きオラクルのテスト型と、デプロイ前に『前』の実値を残す手順この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約5.1万トークン(API料金換算で約77円)・85%のトークンを節約できます。
- カテゴリ
- 業務自動化
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約6万トークン
- この巻物使用時
- 約9,000トークン
- 節約量
- 約5.1万トークン (約77円)
- 更新日
- 2026-09-15
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/md-3b9ec541/raw を読み込んで、この指示書どおりに実装して"
中身
ペース連動の値付けで『達成不能な目標稼働』が遠い日付を恒久的に最大値下げにする罠と、リードタイム閾値で値下げだけ止める実装
症状
- 先の日付(例: 91日以上)の価格が常に 係数 0.70 で固定される。
- 1室が売れると係数が 1.025 に跳び、前日比で +46% の段差が生じる。
- 価格を下げても遠い帯は売れない。実際に空室が残っているのはリードタイムが長すぎるため。
- RevPAR が前年同期に比べて減少し、目標稼働率が遠のく。
原因(数式で)
// soldRatio : 実際販売数 ÷ 目標販売数
// target : 目標販売率(帯ごとに設定、例 0.10)
// shortfall : (target - soldRatio) / target
// excess : (soldRatio - target) / target
function paceFactor(soldRatio, target) {
var factor;
if (soldRatio < target) {
var shortfall = (target - soldRatio) / target;
factor = Math.max(0.70, 1 - 0.30 * shortfall);
} else {
var excess = (soldRatio - target) / target;
factor = Math.min(1.10, 1 + 0.10 * excess);
}
return factor;
}
- 退化条件:
target * inventory < 1の帯では、目標販売数が 1 室未満になるためsoldRatioが常に 0 となりshortfall = 1→factor = 0.70が固定化する。
直し方
-
リードタイム閾値を設定できるように
config.pace.noDiscountMinLeadDaysを導入する。- デフォルトは 91 日。
0以下に設定すると機能を無効化する。
-
係数計算直後にガードを挿入するだけで完了する。
// 既存の paceFactor 呼び出し直後に追加
var factor = paceFactor(soldRatio, target);
var threshold = (typeof config !== 'undefined' && config.pace && typeof config.pace.noDiscountMinLeadDays === 'number')
? config.pace.noDiscountMinLeadDays
: 91; // デフォルト
if (threshold > 0 && daysAhead >= threshold && factor < 1.0) {
factor = 1.0;
record.paceDiscountSuppressed = true; // デバッグフラグ
}
- 値上げ側 (
factor > 1.0) と残室連動の上乗せロジックは一切触らない。 - 閾値未満の日付は価格を一切変更しない。
テストの型(旧オラクル方式)
-
旧オラクルの保存
- 既存実装を
oldPaceFactor.jsとしてテストディレクトリにコピーする。 - 同ファイルにガードだけを足した
oldPriceGuarded.jsを作成する。
- 既存実装を
-
全域比較テスト
for (var daysAhead = 8; daysAhead <= 200; daysAhead++) {
for (var sold = 0; sold <= 4; sold++) {
var target = getTargetForBand(daysAhead);
var inv = getInventoryForBand(daysAhead);
var soldRatio= sold / (target * inv);
var newFactor = computeFactorWithGuard(daysAhead, soldRatio, target);
var oldFactor = oldPriceGuarded(daysAhead, soldRatio, target);
// 1円単位の一致を保証
assert(Math.abs(newFactor - oldFactor) < 0.01, 'Mismatch at d=' + daysAhead + ', s=' + sold);
}
}
- リードタイム閾値専用テスト
// ケース 1: 91日以上、販売なし
var f1 = computeFactorWithGuard(100, 0, 0.10);
assert(f1 === 1.0, 'Factor should be 1.0 for distant band with no sales');
assert(record.paceDiscountSuppressed === true, 'Flag must be true');
// ケース 2: 境界 90日、販売なし(従来通り 0.70)
var f2 = computeFactorWithGuard(90, 0, 0.10);
assert(f2 < 1.0, 'Factor must be discounted before threshold');
// ケース 3: 91日以上、販売あり(値上げ側は変わらない)
var f3 = computeFactorWithGuard(110, 7, 0.10);
assert(f3 > 1.0, 'Upsell factor must stay unchanged');
// ケース 4: 閾値 0 で無効化
config.pace.noDiscountMinLeadDays = 0;
var f4 = computeFactorWithGuard(120, 0, 0.10);
assert(f4 === 0.70, 'Discount must apply when guard disabled');
- 本番コード自己テスト
E1: 91日・0室は割引しないことをassertE2: 90日は係数 0.70 になることE3: 値上げ側 (sold > target * inventory) は係数 > 1.0 のままE4:config.pace.noDiscountMinLeadDays = 0でガードが無効になること
デプロイ前に「前」の実値を保存する
-
API で価格取得
- 対象期間は閾値前後を跨ぐ 8日分(例:
threshold-4〜threshold+3)。 GET /pricing?start=...&end=...のレスポンスを JSON ファイルに保存する。
- 対象期間は閾値前後を跨ぐ 8日分(例:
-
公開予約ページのスクリーンショット
- ブラウザ自動化ツールで同期間のページをキャプチャし、ローカルに保存。
-
デプロイ後の検証
- 同じ API コマンドで再取得し、閾値以上は係数 1.00、閾値未満は従来のカーブになっているか比較。
- スクリーンショットでも同様に 、閾値以上の日付の表示額が「値下げ前のカーブ価格」に戻り、閾値未満は変わっていないことを自分の目で確認する。
- 「前」の値は必ずデプロイ前に取ったものを使う。デプロイ後に自分が動かした値を「前」として比べない。
一般化ルール
- target × 在庫 < 1 単位 になる帯では、不足率モデルは退化する(「0 単位」が常に不足率 100% になる)。
- 直すときは値下げ側だけを止め、値上げ側と残室連動の上乗せは触らない。
- 旧オラクル+ガード付きオラクルで「ガード以外は 1 円も変わっていない」を全域比較で証明してから出す。
よくある質問
+「ペース連動の値付けで『達成不能な目標稼働』が遠い日付を恒久的に最大値下げにする罠と、リードタイム閾値で値下げだけ止める実装」とは何ですか?
目標稼働×在庫が1室未満になる帯では不足率が常に100%になり最大値下げが固定される。閾値以上は係数の下限を1.00にし値上げ側は触らない。旧オラクル+ガード付きオラクルのテスト型と、デプロイ前に『前』の実値を残す手順
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約6万トークンかかりますが、この巻物を使えば約9,000トークンで済みます。差し引き約5.1万トークン(API料金換算で約77円)・85%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
Google Meet 自動参加&動画配信Bot 開発指示書
指定した時刻に Google Meet へ自動参加し、動画を再生しながら画面共有する Bot を、Claude Code に一発で作らせる開発指示 MD。朝会の定例動画配信・ウェビナーの自動放送に。
受信メール添付を案件フォルダへ自動取込するパイプライン
メールを読むアプリとドライブに書くアプリが別、という現実的な構成で顧客メールの添付を案件フォルダへ無人保存する設計。権限追加を避ける理由、実行時間制限下の予算3本立て、二重の重複防止、base64url/行数上限/変換判定などの実装罠、案件と顧客のマッチング、名寄せは候補提示+人の承認にする型まで。
Gmail 自動仕分け&返信ドラフト生成MD
受信メールを AI が分類 (要返信/情報/営業/スパム) してラベル付けし、要返信メールには返信ドラフトまで自動生成する仕組みを作らせる指示書。DWD (ドメイン全体委任) 設定手順込み。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア