コンテンツにスキップ

配送キャリア別の配送希望日・時間帯ルール

  • 作成日: 2026-04-13
  • 目的: checkout の配送希望日・配送希望時間帯を、配送方法ごとの配送キャリア設定で制御する。

決定事項

  • 配送希望日候補は Channel ではなく ShippingMethod の custom field を正本とする。
  • ShippingMethod は SMILE から取り込まれた実在の配送方法を前提とし、seed で仮の配送方法を新設しない。
  • 配送方法ごとに次の値を Dashboard から編集できること。
  • smileShippingCompanyCodes
  • deliveryCarrierCode
  • deliveryDateLeadDays
  • deliveryDateSelectionStartOffsetDays
  • deliveryDateSelectionEndOffsetDays
  • deliveryTimeSlots
  • チャネルごとに次の営業スケジュールを Dashboard から編集できること。
  • deliveryClosedWeekdays
  • deliveryExcludeNationalHolidays
  • deliveryHolidayDates
  • checkout の既定配送方法は、原則として Customer.customFields.shippingCompanyCode と、選択可能な ShippingMethod.customFields.smileShippingCompanyCodes の一致で決定する。
  • ただし checkout 時点で選択可能な ShippingMethod が 1 件に確定している場合は、SMILE 側の shippingCompanyCode が欠落していても、その 1 件を既定配送方法として採用する。
  • SMILE 側の shippingCompanyCode が欠落しており、かつ checkout 時点で選択可能な ShippingMethod が複数件または 0 件の場合は、checkout を進めず「お問い合わせください」を表示する。
  • shippingCompanyCode は存在するが一致する ShippingMethod が存在しない場合も、checkout を進めず「お問い合わせください」を表示する。
  • checkout の配送希望日は自由入力ではなく select box とし、先頭に「最短日出荷」を表示したうえで、最短配達可能日 + 開始オフセット から 最短配達可能日 + 終了オフセット までの候補日を表示する。
  • checkout の初期選択は「最短日出荷」とする。保存済みの有効な日付指定がある場合は、その保存済み値を優先して復元する。
  • 「最短日出荷」は日付固定の配送希望日ではなく、最短で出荷・配送できる手配を依頼する特別候補として扱う。保存時は Order.customFields.deliveryDatenull にし、Order.customFields.specialInstructions最短日出荷 を付与する。
  • 最短配達可能日は deliveryDateLeadDaysdefaultCutoffTime と都道府県別 leadDaysOffset を合成して算出する。
  • effectiveLeadDays = deliveryDateLeadDays + leadDaysOffset + (基準時刻が cutoffTime を過ぎていれば +1)
  • 都道府県別 leadDaysOffsetProvinceDeliveryProfile を正本にする(docs/specifications/2026-05-shipping-zone-and-carrier-rules.md)。
  • defaultCutoffTime は SMILE Export Settings (smile.exportSettings.defaultCutoffTime) を正本とし、未保存の場合は共有定数 DEFAULT_CUTOFF_TIME ("14:00") にフォールバックする。これにより SMILE 設定保存有無で checkout の配送日 selector が silent hide されない。
  • checkout の配送希望時間帯は、選択中の配送方法の deliveryTimeSlots だけを表示する。
  • checkout の配送希望時間帯は「指定なし」を初期選択とする。選択中の配送方法の deliveryTimeSlots に「指定なし」が含まれていない場合も、checkout では先頭候補として補完する。保存済みの有効な時間帯指定がある場合は、その保存済み値を優先して復元する。
  • SMILE 受注CSVの 時間帯deliveryTimeSlots の表示文字列を直接出力しない。配送方法ごとの 「配送時間帯コード × 配送方法」マッピングで、表示文字列を SMILE の整数時間帯コードへ変換する。
  • 配送希望日候補は、チャネルに設定された休業曜日・休業日を除外した営業日だけを表示する。
  • deliveryExcludeNationalHolidays=true の場合、日本の祝日ライブラリ @holiday-jp/holiday_jp に含まれる祝日も候補から除外する。
  • checkout で日付候補を選択した場合は Order.customFields.deliveryDate、配送希望時間帯は Order.customFields.deliveryTimeSlot に保存する。「最短日出荷」を選択した場合は配送希望日を保存せず、備考で後続連携へ渡す。
  • 配送希望日または配送希望時間帯に必要な設定が未入力の配送方法では、未設定の selector を表示しない。
  • Order.customFields.deliveryTimeSlot に値があるのに、該当する配送方法の SMILE 時間帯コードマッピングが 見つからない場合、SMILE export は fail-closed で失敗させる。時間指定なしは 指定なし マッピングを経由して SMILE コード 99 として扱う。

配送キャリア別の既定値

  • この仕様でいう「初期データ」は、配送方法そのものの seed ではなく、SMILE 取込済み ShippingMethod に適用するためのキャリア別既定値を指す。
  • 運用では Dashboard 上で各配送方法の deliveryCarrierCode を選び、必要に応じて既定値を上書きする。
  • 既定配送方法の自動選択を安定させるため、各配送方法には smileShippingCompanyCodes を設定する。
  • 初期候補として 1(ゆうパック)と 4(ヤマト運輸)を用意するが、運用で必要に応じて編集できる。

SMILE 運送会社コードと配送キャリア判定

checkout では SMILE 由来の Customer.customFields.shippingCompanyCode を正規化し、選択可能な ShippingMethod.customFields.smileShippingCompanyCodes と照合して既定配送方法を決める。キャリアそのものは、 一致した ShippingMethod.customFields.deliveryCarrierCode を正本にする。

SMILE 運送会社コード 正規化後 想定配送キャリア ShippingMethod.smileShippingCompanyCodes ShippingMethod.deliveryCarrierCode 備考
1 1 日本郵便 / ゆうパック ["1"] japan-post 標準候補
0001 1 日本郵便 / ゆうパック ["1"] japan-post zero-padding を取り除いて 1 と同一扱い
4 4 ヤマト運輸 ["4"] yamato 標準候補
0004 4 ヤマト運輸 ["4"] yamato zero-padding を取り除いて 4 と同一扱い
空文字 / 未設定 なし 判定しない - - 選択可能な配送方法が 1 件だけなら採用する
その他 入力値 運用設定に従う 同じ値を候補に設定した配送方法 運用で設定した値 一致する配送方法が無ければ checkout 停止

14 からキャリアへ直接変換するのではなく、SMILE コードで配送方法を選び、その配送方法に設定された deliveryCarrierCode で配送希望日・時間帯候補を制御する。新しい SMILE コードを扱う場合は、 対象の ShippingMethod.smileShippingCompanyCodes に候補値を追加し、対応する deliveryCarrierCode を明示する。

  • japan-post
  • deliveryDateLeadDays: 0
  • deliveryDateSelectionStartOffsetDays: 1
  • deliveryDateSelectionEndOffsetDays: 7
  • deliveryTimeSlots: 午前中, 12-14時, 14-16時, 16-18時, 18-20時, 19-21時
  • yamato
  • deliveryDateLeadDays: 0
  • deliveryDateSelectionStartOffsetDays: 1
  • deliveryDateSelectionEndOffsetDays: 7
  • deliveryTimeSlots: 午前中, 14-16時, 16-18時, 18-20時, 19-21時

SMILE 時間帯コードマッピング

SMILE 側の時間帯マスタは配送キャリア別ではなく、整数コードのグローバルマスタとして扱われる。 配送会社ごとの時間帯統廃合や将来のコードレンジ分割に耐えるため、コード変換はキャリア定数ではなく 配送方法ごとのマッピングレコードを正本にする。

初期値:

配送方法 表示時間帯 SMILEコード
日本郵便 午前中 1
日本郵便 12-14時 2
日本郵便 14-16時 3
日本郵便 16-18時 4
日本郵便 18-20時 5
日本郵便 19-21時 7
日本郵便 指定なし 99
ヤマト運輸 午前中 1
ヤマト運輸 14-16時 3
ヤマト運輸 16-18時 4
ヤマト運輸 18-20時 5
ヤマト運輸 19-21時 7
ヤマト運輸 指定なし 99

将来 SMILE 側で 20 番台をヤマト、30 番台を日本郵便のように分ける場合も、 配送方法ごとのマッピングを差し替えるだけで checkout の表示候補と export の変換を維持する。

調査メモ

  • ヤマト運輸の法人 FAQ では、宅急便(常温)の日時指定は「発送日の翌日から 7 日以内」とされている。
  • 日本郵便の 2024-01-30 リリースでは、ゆうパックの配達希望時間帯は 2024-10-01 以降 6 区分で、20時-21時 は廃止されている。
  • 本システムでは UX を単純化するため、日付固定の配送希望日候補は両キャリアとも 最短配達可能日+1 から +7 に統一し、これとは別に「最短日出荷」を常に選べるようにする。将来差分が必要になった場合も ShippingMethod 画面で個別調整できる。
  • 祝日判定は外部 API へ依存せず、@holiday-jp/holiday_jp に同梱された日本祝日データを使用する。

出典

  • ヤマト運輸 法人 FAQ「宅急便の日時指定は、何日先までできますか?」
  • 日本郵便 ニュースリリース「2024年問題などを踏まえたサービスの見直し」
  • 日本郵便 別添3「ゆうパックの配達希望時間帯『20時-21時』の廃止」