same-day-delivery について
EC事業者向けに、当日地域配送の導入を案内するスキルです。チェックアウト時の時間枠、配送エリア、配車方法、各種プラットフォームや独自ストアでの運用上の注意点を扱います。
主な機能
- 01配送エリアと時間枠の設計
- 02自社ドライバーか配送業者の選択
- 03注文と配車プラットフォームの連携
- 04枠の上限数と締切の設定
- 05配送時の例外への対応
活用シーン
- 01地域向け当日配送の開始
- 02チェックアウトでの時間指定受付
- 03配送注文の配車設定
- 04時間枠の予約超過防止
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill same-day-deliveryインストール後、Claude Code で/same-day-deliveryを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
tile.jsonevals/atomic-slot-booking-with-concurrency-con/criteria.jsontask.mdevals/driver-dispatch-eta-updates-and-failure-/criteria.jsontask.mdevals/postgis-zone-schema-and-point-in-polygon/criteria.jsontask.md詳細
当日配送
概要
地域内の当日配送を実現するには、チェックアウト時に顧客が配送時間帯を選択できる仕組み、ドライバーに注文を割り当てる仕組み、配送状況を顧客に知らせる仕組みの3つが連携して機能する必要があります。多くの販売事業者にとって、サードパーティのラストマイル配送サービス(DoorDash Drive、Uber Direct、Onfleet)を利用するのが、当日配送を最も早く実現する方法です。ドライバーの手配はサービス側に任せ、運営業務に集中できます。
このスキルを使う場面
- 対象地域を定めて、当日配送または翌時間配送サービスを開始するとき
- チェックアウト時に顧客が希望する配送時間帯を選択できるようにするとき
- 未対応の注文を表示し、ルートを最適化するドライバー割り当てダッシュボードを構築するとき
- サードパーティのラストマイル配送業者(DoorDash Drive、Uber Direct、Onfleet)と連携するとき
- 配送リソースの過剰な割り当てを防ぐため、時間帯ごとの受け入れ上限を管理するとき
基本手順
ステップ1:プラットフォームと配送モデルを決める
| プラットフォーム | 推奨ツール | 理由 |
|---|---|---|
| Shopify | Zapiet のローカル配送 + DoorDash Drive または Uber Direct | Zapiet はチェックアウト時の時間帯予約を処理し、DoorDash Drive/Uber Direct はドライバーを自動で手配します |
| WooCommerce | WooCommerce Local Pickup Plus + Onfleet または自社ドライバー | Local Pickup Plus は配送ゾーンと時間帯を管理し、Onfleet はドライバーの割り当てと追跡を提供します |
| BigCommerce | Zapiet Delivery + Onfleet または Dispatch Science | Zapiet などのアプリで配送日時を指定できるようになり、Dispatch Science はルートを最適化します |
| **カスタム/ヘッドレス | 時間帯予約を構築し、Onfleet/DoorDash Drive API と連携してドライバーを割り当てる | 配送ゾーン、時間帯ごとの受け入れ上限、ドライバーのルート設定をすべて制御できます |
まず配送モデルを選択してください:
- 自社ドライバー: 品質とコストを管理できますが、ドライバーの稼働状況、車両、ルートを管理する必要があります。最適な業種:花屋、食料品店、地域に固定客を持つレストラン。
- オンデマンド配送業者(DoorDash Drive、Uber Direct): 固定費なしで必要なときにドライバーを手配できます。最適な販売事業者:ドライバーの車両を抱えずに、必要に応じて当日配送を行いたい事業者。
- ハイブリッド: 予約時間帯には自社ドライバーを使い、急ぎの注文にはオンデマンド配送業者を使います。
ステップ2:配送ゾーンと時間帯予約を設定する
Shopify
Zapiet — Pickup + Delivery を使う場合(最も機能が充実したアプリ):
- Shopify App Store から Zapiet — Pickup + Delivery をインストールします
- Zapiet で Delivery → Zones に移動し、次の方法で配送対象地域を定義します:
- 郵便番号/ZIP コード(最も簡単):配送対象の ZIP コードをすべて登録します
- 店舗住所からの半径
- カスタムのポリゴン描画(上位の Zapiet プランが必要です)
- Delivery → Time Slots で時間帯を設定します:
- 1日の時間帯を定義します(例:10am–12pm、12pm–2pm、2pm–4pm、4pm–6pm)
- 時間帯ごとの上限を設定します(例:2時間枠あたり最大20件)
- 各時間帯の注文締め切り時刻を設定します(例:2pm–4pmの時間帯の注文は12pmまでに行う必要があります)
- Delivery → Rates で配送ゾーンごとの配送料を設定します(距離に応じた料金または一律料金を設定できます)
- 顧客が住所を入力すると、Shopify のチェックアウト時に選択可能な時間帯が表示されます
Zapiet での注文管理:
- Zapiet → Orders に移動すると、配送注文を時間帯順に確認できます
- この画面から、ドライバー用のピッキングリストと配送明細をエクスポートします
- 注文を「配達中」および「配達済み」に設定して、顧客に状況を知らせます
WooCommerce
WooCommerce Local Pickup Plus(WooCommerce.com 公式拡張機能)を使用する場合:
- WooCommerce.com から Local Pickup Plus をインストールします
- WooCommerce → Settings → Shipping → Local Pickup Plus に移動します
- 集荷/配達場所を追加します。配達の場合は、郵便番号または半径でサービスエリアを定義します
- 「配達日時の選択」を有効にして、お客様が時間枠を選択できるようにします
- プラグインの設定で時間枠と受け入れ可能数を設定します
より高度なエリア管理を行う場合: Flexible Shipping プラグインまたは WooCommerce Table Rate Shipping を使用して、郵便番号の一致に基づく配達料金を設定します。
ドライバーの配車を行う場合: WooCommerce の Webhook 統合機能がある Onfleet(onfleet.com)を使用します。新しい配達注文は、ドライバーの割り当てのために自動的に Onfleet に表示されます。
BigCommerce
BigCommerce で Zapiet を使用する場合:
- BigCommerce App Marketplace から Zapiet をインストールします
- 上記の Shopify ワークフローと同じ設定を行います。エリア、時間枠、受け入れ可能数を定義します
ShipperHQ を使用する場合:
- ShipperHQ には、地域配達エリアと時間帯制限が組み込まれています
- ShipperHQ → Carrier Manager → Add Local Delivery carrier に移動し、エリアのルールを定義します
ステップ 3:ドライバー配車プラットフォームに接続する
DoorDash Drive を使用する場合(オンデマンド、ドライバーの固定費なし)
DoorDash Drive は、DoorDash のギグワーカーのドライバーを派遣して、注文を集荷・配達します。米国の主要都市のほとんどで利用できます。
- developer.doordash.com/portal で DoorDash Drive API キーを取得するために登録します
- Shopify の場合:Shopify App Store から DoorDash Drive をインストールします。注文を配車対象として指定すると、DoorDash の配達が自動的に作成されます
- DoorDash は SMS でリアルタイム追跡リンクをお客様に通知します
- 配達ごとに料金を支払います(距離に応じて通常 7~15 ドル)
Uber Direct を使用する場合(オンデマンド)
DoorDash Drive と同様に、Uber Direct は Uber のドライバーを利用して地域配達を行います。
- developer.uber.com/products/uber-direct で登録します
- プラットフォームで利用可能な場合は Uber Direct アプリをインストールするか、REST API を使用します
- Uber Direct API に集荷先住所(店舗)と配達先住所(お客様)を送信して配達を作成します
Onfleet を使用する場合(自社ドライバー+ルート最適化)
自社の配達チームがあり、ルート最適化とリアルタイム追跡が必要な場合に最適です。
- onfleet.com で登録します(ドライバー 3 名まで月額 349 ドルから)
- WooCommerce の Webhook 統合機能をインストールするか、Zapier を使用してプラットフォームを Onfleet に接続します
- 新しい注文によって Onfleet のタスクが自動的に作成されます
- 配車担当者が Onfleet のウェブダッシュボードでドライバーにタスクを割り当てます
- ドライバーは、ターンバイターン方式のナビゲーションと配達完了証明の写真撮影機能を備えたモバイルアプリを利用します
- ドライバーがルートを開始すると、お客様にリアルタイム追跡リンクを記載した SMS が届きます
ステップ 4:例外的なケースに対処する
お客様が時間枠を表示した後に枠が埋まった場合:
- ほとんどのアプリ(Zapiet、Onfleet のスケジュール管理)は、チェックアウト時に時間枠の空き状況をリアルタイムで確認します
- アプリの設定で時間枠の受け入れ可能数の制限を有効にし、過剰予約を防ぎます
配達先住所が配達エリア外の場合:
- Zapiet は時間枠を表示する前に配達エリアを確認します。住所がエリア外の場合、配達オプションは非表示になり、集荷または通常配送のみが表示されます
- 公開前に、エリア境界付近の住所を使って十分にテストします
ドライバーが注文に対応できない場合:
- DoorDash Drive/Uber Direct の場合:プラットフォームが自動的に別のドライバーを割り当てます
- 自社ドライバーの場合(Onfleet):配車担当者がダッシュボードで手動で再割り当てする必要があります。時間枠が近づいている未割り当てタスクについて、Onfleet のアラートを設定します
受付締切時刻の管理:
- 商品のピッキング、梱包、積み込みにかかる時間を確保できるよう、配達時間枠の 2~3 時間前に注文の受付締切を設定します
- Zapiet は、締切時刻を過ぎた時間枠を自動的に非表示にします
ステップ 5:カスタム/ヘッドレス実装
エリア管理と時間枠予約を完全に制御する必要があるヘッドレスストアの場合:
// Check if a customer address is in a delivery zone
async function checkDeliveryEligibility(params: {
customerZip: string;
deliveryZones: { name: string; zipCodes: string[]; deliveryFeeCents: number }[];
}): Promise<{ eligible: boolean; zone?: string; feeCents?: number }> {
const zone = params.deliveryZones.find(z => z.zipCodes.includes(params.customerZip));
if (!zone) return { eligible: false };
return { eligible: true, zone: zone.name, feeCents: zone.deliveryFeeCents };
}
// Get available time slots for today (slots with remaining capacity)
async function getAvailableSlots(params: {
date: Date;
zone: string;
slots: { id: string; label: string; capacity: number; booked: number; cutoffTime: Date }[];
}): Promise<{ id: string; label: string; spotsRemaining: number }[]> {
const now = new Date();
return params.slots
.filter(slot => slot.cutoffTime > now && slot.booked < slot.capacity)
.map(slot => ({
id: slot.id,
label: slot.label,
spotsRemaining: slot.capacity - slot.booked,
}));
}
// Dispatch a delivery via DoorDash Drive API
async function dispatchDoorDashDelivery(params: {
externalDeliveryId: string;
pickupAddress: Address;
dropoffAddress: Address;
customerPhone: string;
pickupWindow: { startTime: string; endTime: string }; // ISO 8601
}): Promise<{ trackingUrl: string; fee: number }> {
const response = await fetch('https://openapi.doordash.com/drive/v2/deliveries', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.DOORDASH_DRIVE_JWT}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
external_delivery_id: params.externalDeliveryId,
pickup_address: `${params.pickupAddress.street1}, ${params.pickupAddress.city}, ${params.pickupAddress.state} ${params.pickupAddress.zip}`,
dropoff_address: `${params.dropoffAddress.street1}, ${params.dropoffAddress.city}, ${params.dropoffAddress.state} ${params.dropoffAddress.zip}`,
dropoff_phone_number: params.customerPhone,
pickup_time: params.pickupWindow.startTime,
}),
});
const data = await response.json();
return { trackingUrl: data.tracking_url, fee: data.fee };
}
ベストプラクティス
- 半径やポリゴンではなく、まず郵便番号の配達エリアから始めます — 郵便番号ベースの配達エリアは管理しやすく、顧客にも「この郵便番号の地域に配達します」と伝えやすく、ジオコーディングも不要です
- 時間枠の締め切り時刻には余裕を持たせます — 倉庫が注文の締め切りから時間枠の開始までに、商品のピッキング、梱包、ドライバーへの引き渡しを行えるよう、少なくとも2時間を確保してください
- 各時間枠の開始前に配達マニフェストを作成します — ドライバーの出発30分前にマニフェストを印刷します。各注文の住所、時間枠、特記事項を記載してください
- ドライバーが近づいたら、到着予定時刻のプッシュ通知を送信します — 到着予定時刻をリアルタイムで確認できる顧客からは、「配達はどこですか」という問い合わせが大幅に減ります。Onfleet と DoorDash Drive はどちらもこれを自動で処理します
- 時間枠の予約率を監視します — 時間枠の開始時刻より何時間も前に予約が埋まる状態が続く場合は、受け入れ可能数を増やします。締め切り時点で予約率が50%未満の場合は、時間枠を統合するか、数を減らします
よくある問題
| 問題 | 解決策 |
|---|---|
| 2人の顧客が同時に、時間枠の最後の空き枠を予約する | 容量を確認しながら、空き枠をアトミックに減らします。Zapiet はこれに対応しています。独自に実装する場合は、データベースレベルのロックまたはアトミック更新を使用します |
| 顧客が配達エリア外の住所を入力しても、時間枠が表示される | クライアント側だけでなく、チェックアウト時にサーバー側で配達エリアの対象かどうかを検証します。Zapiet はこれを自動で適用します |
| 顧客に表示される締め切り時刻のタイムゾーンが誤っている | 時刻は常に UTC で保存して比較し、ブラウザーの Intl API を使用して顧客の現地タイムゾーンで表示します |
| 時間枠内に配達できる量を超える注文がドライバーに割り当てられる | ドライバー1人あたりの時間枠ごとの注文数に上限を設け、Onfleet のルート最適化を有効にします。時間枠のスケジュールを作成する際は、現実的な受け入れ可能数を設定してください |
関連スキル
- @order-fulfillment-workflow
- @shipment-tracking
- @order-management-system
- @international-shipping
- @dropshipping-integration