メインコンテンツへスキップ
技術

Shopify チェックアウト検証:Shopify Functions で無効注文をブロックする方法

Jahangir Alam2026年5月3日14 min read

Shopify のチェックアウト検証は、Shopify Functions を使ってビジネスルールを Shopify 自身のチェックアウトエンジン内部でサーバーサイドに適用します。クライアントサイドの JavaScript 回避策やテーマレベルの裏技と違い、チェックアウト検証は回避できません — Shop Pay、Apple Pay、Google Pay、ヘッドレスストアフロントを含むあらゆるチェックアウトで実行されます。OrderRules はこの API を用いて、購入時点で注文上限、顧客ごとの上限、支出上限を強制します。

チェックアウト検証とは

Shopify Functions は、アプリが Shopify のインフラ内部で動作するサーバーサイドロジックを書ける比較的新しい技術です。チェックアウト検証関数をストアに追加すると、それは Shopify のチェックアウトエンジン自体の一部になります — 別サービスでも、テーマスクリプトでも、外部 API 呼び出しでもありません。

ここが他と違うところです:

  • サーバーサイド:関数は Shopify のサーバー上で動作し、顧客のブラウザ上では動きません。マーチャント側で完全に制御できます。
  • すべての経路で実行:Web チェックアウト、Shop Pay、Apple Pay、Google Pay、ヘッドレスストアフロントのどれを使っても、同じ検証ルールが適用されます。
  • 回避不可:顧客は JavaScript を無効化したり、DOM を改変したり、検証を避けるリクエストを作ったりして回避することはできません。チェックアウトフロー自体に組み込まれています。
  • 高速:関数は Shopify の WebAssembly ランタイムで5ミリ秒未満で実行されます。チェックアウト速度への目に見える影響はありません。

チェックアウト検証は決済ステップを特に押さえます。Shopify が決済を処理する前にあなたの関数が走り、注文がルールに違反していれば Shopify がチェックアウトをブロックしてカスタムエラーメッセージを表示します。ルールがすべて通れば、チェックアウトは通常通り進みます。

なぜクライアントサイド検証は失敗するのか

多くの Shopify ストアオーナーは、テーマコードやサードパーティアプリでカートページに JavaScript を注入して注文を制限しようとします。理論的には良さそうに見えても、実運用では機能しません — そして気づくのが遅すぎます。

JavaScript は無効化できる。 顧客がブラウザで JavaScript をオフにすれば、あなたの検証はすべてスキップされます。最近のブラウザでは簡単にできます。

テーマの裏技は Shopify アップデートで壊れる。 Shopify が新しいテーマバージョンをリリースすると、カスタムコードが動かなくなったり予想外の挙動になります。回避策のメンテナンスに追われることになります。

ドラフト注文はテーマコードをバイパス。 ストアオーナー(または管理者)が Shopify のドラフト注文ツールで直接注文を作ると、カートページは一度も読み込まれません。テーマの検証は走りません。

ヘッドレスストアフロントはテーマを使わない。 Hydrogen やカスタム React アプリで独自ストアフロントを構築している場合、Shopify テーマコードは存在しません。検証ロジックをフロントエンドで作り直す必要があり、しかも依然としてクライアントサイドです。

POS 注文には影響しない。 Shopify POS で実店舗販売をしている場合、カートページは存在しません。テーマコードは関係ありません。

実際に機能するものの比較:

方式Web チェックアウトShop PayApple PayGoogle PayPOSヘッドレス回避不可
テーマ JavaScript
カートページスクリプト
Shopify Functions

チェックアウト検証は、すべての経路をカバーし回避できない唯一の方式です。

OrderRules が Shopify Functions をどう使うか

OrderRules はチェックアウト検証 API にフックします。顧客が決済ステップに到達すると、当社の関数が走り、設定済みのすべての注文ルールを検査します:

  • 日次/週次/月次の注文上限:ストアが時間枠ごとに受け付ける注文総数を制限。
  • 商品ごとの上限:特定商品の購入数を顧客単位/注文単位で制限。
  • 顧客ごとの注文上限:1人の顧客が出せる注文数を制限(生涯または期間単位)。
  • 支出上限:合計または顧客ごとの最大注文金額を超える注文をブロック。
  • 営業時間:営業時間外の注文を防止。
  • 最小注文数量:注文が最小単位数を満たすことを保証。

ルールが1つでも失敗すれば、チェックアウトはブロックされます。決済の試行は発生しません。顧客には理由と次の行動を示す明確かつ親切なエラーメッセージが表示されます。

すべて通れば、関数は静かに戻り、Shopify は通常通り決済処理を続けます。

バックエンドの様子は次のとおりです:

// Simplified pseudocode — actual implementation is more complex
function validateCheckout(input) {
  const cart = input.cart;
  
  // Check daily order limit
  const ordersToday = countOrdersToday();
  if (ordersToday >= dailyLimit) {
    return {
      errors: [{
        message: "We've reached our daily order limit. Please try again tomorrow!"
      }]
    };
  }
  
  // Check per-customer limit
  const customerOrders = countCustomerOrders(cart.buyerIdentity.email);
  if (customerOrders >= perCustomerLimit) {
    return {
      errors: [{
        message: "You've reached your order limit. Contact support for exceptions."
      }]
    };
  }
  
  // All rules passed
  return { errors: [] };
}

エラーが返ると Shopify はチェックアウトでそれを表示し、決済を阻止します。空のエラー配列が返ると、チェックアウトは通常通り進みます。

顧客に見えるもの

ルールが通っているときのチェックアウト検証は不可視です — 顧客はいつも通り購入を完了します。

ルール違反時、顧客は決済ステップで以下を目にします:

Shopify Functions の強制とカートスクリプト系アプリを比較する OrderRules ダッシュボード — Shop Pay、Apple Pay、Google Pay、直リンク URL はカートスクリプトを回避するが、Shopify Functions では強制される

壊れたページではありません。意味不明な500エラーでもありません。明確で親切なメッセージです:

「本日の注文上限に達しました。明日もう一度お試しください!」

または

「今週はすでに3件のご注文をいただいています。上限は2件です。来週改めてお試しください。」

これらのメッセージはカスタマイズ可能で、OrderRules のダッシュボードで設定し、顧客の言語(ストアが多言語対応の場合)で表示されます。

顧客は決済へ進めません。メッセージを回避することもできません。ルールが注文を許可するまで待つか、サポートに連絡して例外対応を依頼します。

顧客向けに表示されるチェックアウト検証メッセージ

技術的な詳細

開発者にとって重要な技術的注記をいくつか:

Shopify の関数上限:1ストアあたり最大25個の検証関数をデプロイできます(Shopify API の上限)。OrderRules はひとつにまとめた関数を使うので、これは制約になりません。

性能:関数は Shopify の WebAssembly ランタイムで5ミリ秒未満に実行されます。顧客がチェックアウトでレイテンシを感じることはありません。

互換性:チェックアウト検証は以下と動作します:

  • Online Store 2.0(最新の Shopify テーマシステム)
  • Shopify Plus(エンタープライズプラン)
  • Hydrogen やカスタムフレームワークで構築したヘッドレスストアフロント
  • POS(店舗内販売)
  • Shop Pay や高速チェックアウト

カスタムドメインや IP 許可リスト不要:関数のデプロイと運用は Shopify が行います。インフラ、スケーリング、信頼性を気にする必要はありません。

ノーコードでのセットアップ

Shopify Functions の技術的なパワーにもかかわらず、OrderRules がすべての実装を肩代わりします。

行わないこと:

  • 関数コードを書く
  • Shopify CLI でデプロイする
  • WebAssembly バイナリを管理する
  • 関数ログを監視する

行うこと:

  1. Shopify App Store から OrderRules をインストール
  2. OrderRules ダッシュボードを開く
  3. 注文ルール(日次上限、顧客ごとの上限、支出上限)を設定
  4. 保存

それだけです。チェックアウト検証はすぐに有効化されます。コーディング不要、デプロイ不要、CLI ビルド待ちもありません。

詳しくは:Shopify で注文上限を設定する方法

チェックアウト検証と他の方法の使い分け

チェックアウト検証を使うべき場面

  • 絶対に破ってはいけない厳格ルール(法定下限、容量制約、在庫しきい値)
  • すべてのチャネル(Web、モバイル、POS、ヘッドレス)に共通するルール
  • 回避させてはいけないルール

例:「弊社は週100点しか製造しないので厳密に強制する必要がある」、「業界規制で1顧客あたり月5件まで」。

テーマレベルのメッセージングを使うべき場面

  • ソフトな注意喚起や緊急感のトリガー
  • ライブ在庫カウンター(「残り3点!」)
  • プロモーション文言(「お急ぎを — 金曜から上限アップ!」)
  • ブランド固有のビジュアルデザイン

例:「在庫が残り少なくなっています」のバナー、「次回上限アップは2日後」など。

ベストプラクティス:両方使う。OrderRules がチェックアウト検証(硬いルール)を提供し、補完的なテーマメッセージングで顧客が上限に到達する前に緊急感を作り教育します。上限超過時は親切なエラーが出ます。フラストレーションを減らすなら、ページ上で事前に警告しましょう。

詳しくは:動的ストアフロントメッセージ

回避策不要、頭痛知らず

チェックアウト検証は、クライアントサイドのアプローチでは決して完全に解決できない問題を解きます:マーチャントは「自分のルールが本当に強制されている」という信頼を、顧客の経路に関わらず、すべての注文で得る必要があります。

Shopify Functions ならその信頼が組み込まれています。ルールは Shopify のサーバーで動作し、無効化や改変、回避はできません。実装も透明で、ストアオーナーは技術的な詳細を考える必要すらありません — ルールを設定して次に進むだけ。

容量管理、顧客ごとの購入制御、支出上限の強制を必要とするストアにとって、チェックアウト検証は Shopify で利用できる最も信頼性の高いソリューションです。

関連記事

サーバーサイドのチェックアウト検証を今日から

Shopify App Store から OrderRules をインストール — チェックアウト検証は無料と Pro を含むすべてのプランで利用可能です。

アプリを比較中ですか?

このカテゴリの他のShopifyアプリすべてとOrderRulesを比較してご覧ください。

注文管理を手中に収める準備はできていますか?

OrderRulesを無料で試す