MENU

STEPmini V1.01 仕様書

STEPmini V1.01 仕様

目次

1. 目的

STEPmini V1.01 は、従来の STEPmini V1.0 にあった

  • バッチ未実行日の取りこぼし
  • 完全一致日のみ送信される硬い運用

を改善し、過去日付で未送信のstepがあれば順番に救済送信できるようにしたバージョンです。


2. V1.0 の課題

V1.0 では、顧客ごとの経過日数 elapsed を計算し、
steps.date_from_start完全一致したstepだけを送信していました。

V1.0 の問題点

  • バッチを毎日回さないと、その日のstepを取りこぼす
  • 一度取りこぼしたstepは後から送られない
  • 手動運用やトリガー停止時に弱い

3. V1.01 の基本思想

V1.01 では、送信判定を次の考え方に変更します。

  • 今日までに送るべきstep
  • まだSUCCESSになっていないstep
  • その中で最も古いstepを1件だけ送る

これにより、取りこぼしがあっても、次回以降の実行で順番に追回しできます。


4. 対象シート

V1.01 で使用するシートは以下の5つです。
元コードでもこの5シート前提です。

  • settings
  • customers
  • scenarios
  • steps
  • logs

5. 各シートの役割

5-1. settings

システム全体の送信設定を保持するシートです。

主な項目例

  • from_name
  • from_address
  • reply_to
  • signature
  • global_active
  • test_email

V1.0 の送信処理では、特に以下を使用していました。

  • reply_to
  • from_name
  • signature
  • global_active

5-2. scenarios

シナリオ単位の有効・無効を管理するシートです。

想定列

  • A列:scenario_id
  • C列:active

V1.0 では active=TRUE のものだけ有効シナリオとして読み込んでいました。


5-3. steps

各シナリオで何日後に何を送るかを定義するシートです。

想定列

  • A列:scenario_id
  • B列:step_no
  • C列:date_from_start
  • D列:enabled
  • E列:subject
  • F列:body
  • G列:send_time

V1.0 では enabled=TRUE の行だけを取り込み、scenario_id ごとに stepsMap を作っていました。


5-4. customers

顧客ごとの開始日・停止フラグ・シナリオ番号を保持するシートです。

想定列

  • A列:customer_id
  • B列:name
  • C列:company
  • D列:email
  • E列:start_date
  • F列:tag
  • G列:stop_flag
  • H列:memo
  • I列:scenario_id

5-5. logs

送信結果の履歴を保持するシートです。

想定列

  • A列:送信日時
  • B列:customer_id
  • C列:email
  • D列:scenario_id
  • E列:step_no
  • F列:result
  • G列:error_message
  • H列:備考

V1.0 では result === "SUCCESS" のものを再送防止判定に使用していました。


6. V1.01 の送信判定仕様

6-1. 顧客の基本チェック

顧客ごとに以下を確認します。

  • email が存在し、メール形式らしいこと
  • start_date があること
  • stop_flag が TRUE ではないこと
  • scenario_id があること
  • scenario が active であること

これらの基本チェックの考え方は V1.0 を踏襲します。


6-2. elapsed の意味

elapsed は、start_date から今日までの経過日数です。
V1.0 でもこの式で計算していました。

  • start_date = 2026/4/29 → elapsed = 0
  • start_date = 2026/4/28 → elapsed = 1
  • start_date = 2026/4/27 → elapsed = 2

6-3. V1.01 の送信対象step

V1.01 では、対象stepを次の条件で抽出します。

  • step.days <= elapsed
  • まだ logsSUCCESS がない
  • scenario_id が顧客の scenario_id と一致する
  • step が enabled = TRUE

つまり、今日までに送るべきだった未送信step が対象です。


6-4. 1回の実行で送る件数

V1.01 では、1顧客につき1回の実行で送るstepは 1件だけ です。

対象stepが複数ある場合は、

  • date_from_start が最も小さいもの
  • 同日なら step_no が小さいもの

を優先します。

つまり、最も古い未送信stepを1件だけ送る仕様です。


6-5. 同一顧客への1日1通制限

V1.01 では、同一メールアドレスに対して 同じ日に複数通送らない ようにします。

そのため、logs の SUCCESS を見て、

  • 今日すでに送信済みの email

は、その日は追加送信しません。


7. V1.01 の動作例

条件

steps が以下の場合

  • step1 = 0日後
  • step2 = 1日後
  • step3 = 2日後

ケース1:通常運用

  • 4/29 実行 → elapsed=0 → step1送信
  • 4/30 実行 → elapsed=1 → step2送信
  • 5/1 実行 → elapsed=2 → step3送信

ケース2:3日止まった

  • 4/29〜5/1 未実行
  • 5/2 実行 → elapsed=3

V1.0 なら対象ゼロでした。
V1.01 では

  • 未送信の step1 を送信

翌日実行で

  • 未送信の step2 を送信

さらに翌日実行で

  • 未送信の step3 を送信

となります。


8. ログ仕様

V1.01 では、原因調査しやすいようにログを強化します。

主な出力内容

  • settings全体
  • global_active raw
  • global_active type
  • quota
  • customer check
  • elapsed
  • scenarioSteps
  • dueSteps
  • send success
  • send error
  • skip: ~

skipログ例

  • skip: email不正
  • skip: startDateなし
  • skip: stopFlag=true
  • skip: scenarioIdなし
  • skip: scenarioが非アクティブ
  • skip: stepsなし
  • skip: 送るべき未送信stepなし
  • skip: 本日すでに送信済み

9. V1.01 のメリット

9-1. 取りこぼし救済

バッチ停止や手動実行漏れがあっても、後から追回しできます。

9-2. 順番維持

過去stepを一度に全部送らず、最古stepから順に送るため、流れが崩れにくいです。

9-3. 暴発防止

同一顧客に1日1通だけなので、同日に何度実行しても安全性が高いです。

9-4. 実務向け

完全一致仕様よりも現場運用に向いています。


10. V1.01 の注意点

10-1. 追いつくまで日数がかかる

過去未送信stepが3件あれば、3日かけて順番に追回しします。

10-2. 即時一括送信はしない

意図的に1日1通にしているため、遅れを一気に取り戻す設計ではありません。

10-3. logs が重要

SUCCESS 判定は logs に依存するため、logs を消すと再送判定が崩れます。


11. 運用ルール

V1.01 の推奨運用は以下です。

  • バッチは基本的に毎日1回実行
  • ただし未実行日があっても追回し可能
  • 同一顧客への重複送信を防ぐため logs は保持する
  • steps は enabled=TRUE を明示
  • scenarios は active=TRUE を明示
  • customers は scenario_id を必須とする

12. V1.0 との違いまとめ

V1.0

  • step.days === elapsed の完全一致
  • 取りこぼし救済なし
  • 運用が止まると送信漏れが残る

V1.01

  • step.days <= elapsed の未送信stepを対象
  • 最も古い未送信stepを1件送信
  • 1日1通制限あり
  • 送信漏れを順次追回し可能

13. バージョン位置づけ

  • V1.0
    完全一致型の初期版
  • V1.01
    運用安定化版
    過去日付未送信救済、1日1通制御、ログ強化
  • V1.1
    別途計画済みの次期機能拡張版

14. 補足

元コードでの基本構造は以下でした。

  • settings取得 getSettings(sheetSettings)
  • global_active 判定
  • active scenario 抽出
  • enabled step 抽出
  • SUCCESS 再送防止キー作成
  • elapsed 計算
  • 完全一致判定
  • sendEmail 実行
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次