Shopify Functions

【Functions】冷凍品と常温品の同時購入ブロック・特定商品購入制限バリデーション

Shopify Functions(Cart Validation API)を用いて、カート内に温度帯が異なる商品が混在している場合や、特定商品の購入数量上限を超えている場合に、チェックアウトボタンをロックして警告メッセージを表示するロジック。

主な活用ユースケース: 食品ECの温度帯別同梱不可制御、限定スニーカーの1人1点制限、医薬品の確認事項同意チェック。
main.rsrust
use shopify_function::prelude::*;
use shopify_function::Result;

#[shopify_function_target(query_file = "src/run.graphql")]
fn run(input: input::ResponseData) -> Result<output::FunctionResult> {
    let mut errors = Vec::new();
    let mut has_frozen = false;
    let mut has_room_temp = false;

    for line in input.cart.lines {
        if let Some(attribute) = line.merchandise.as_product_variant().and_then(|v| v.product.metafield) {
            if attribute.value == "frozen" { has_frozen = true; }
            if attribute.value == "normal" { has_room_temp = true; }
        }
    }

    if has_frozen && has_room_temp {
        errors.push(output::FunctionError {
            localized_message: "冷凍商品と常温商品は同時にご注文いただけません。別々にご注文ください。".to_string(),
            target: "cart".to_string(),
        });
    }

    Ok(output::FunctionResult { errors })
}

アーキテクチャ & 実装のポイント

WasmバイナリとしてShopifyサーバー上で5ms未満で実行
テーマのJavaScript書き換えによる回避が不可能な完全バックエンド制御
Shopify PlusのCheckout Extensibilityに完全対応

このレシピに関するFAQ

Q. このバリデーションはスマホのブラウザバック時にも機能しますか?

A. はい。Shopifyのサーバーサイドで検証されるため、不正なリクエストや画面戻り時でも確実に購入をブロックします。

Functions受託開発のご相談

本コードスニペットをベースにした実ストアへの組み込み・Wasmビルド・保守運用を承っています。

AI見積もりシミュレーターを使う エンジニアに直接相談する