ネットショップを続けていると、「この注文は受けたくない」という場面が必ず出てきます。送料に見合わない少額の注文、転売目的と思われるまとめ買い、配送できない地域からの注文、会員向けに用意した商品を一般のお客様が買ってしまうケース。どれも、注文を受けてから取り消すと、返金の作業とお詫びの連絡が発生します。お客様にとっても「買えたはずの商品が後から取り消された」という体験になり、次の購入につながりません。
そこで必要になるのが、注文が確定する前に止めて、理由を伝える仕組みです。この記事で解説する「シンプルチェックアウト注文制限|お手軽購入制限ルール」は、カートとチェックアウトの段階で、条件に当てはまる注文だけをブロックできる Shopify アプリです。金額・数量・重量・商品・配送先・顧客・B2B・マーケット・言語・通貨・時間帯といった45種類の条件を、管理画面で組み合わせてルールにできます。
この記事では、管理画面の画面をひとつ残らず取り上げ、設定項目の意味・選べる値・初期値・気をつける点まで書いていきます。あわせて、アプリを使わずにテーマのコードで似たことをする場合の書き方と、その限界にも触れます。
このアプリは、Shopify の Cart and Checkout Validation という仕組みを使って、カートとチェックアウトで注文の可否を判定します。判定の結果ブロックされた注文は、支払いへ進めなくなり、画面には設定したメッセージが表示されます。
判定はサーバー側で行われるため、Shop Pay・PayPal・Google Pay・Apple Pay のようなエクスプレス決済のボタンから進んだ場合も同じように止まります。テーマのコードを書き換えて購入ボタンを隠す方法と違い、ボタンの見た目をいじる必要がなく、アプリを削除してもテーマに残骸が残りません。

ルールは何本でも作れます。1本のルールの中に入れた条件はすべて満たされたときだけブロックになり(AND)、ルールが複数あるときは、どれか1本でも当てはまればブロックになります(OR)。この2段構えのおかげで、「会員タグが無い、かつ、会員限定コレクションの商品が入っている」といった絞り込みと、「深夜帯の注文」「1回で10個を超える注文」といった別々の制限を、同じストアに同居させられます。
管理画面は日本語を含む20言語に対応しています。日本語で使う場合、条件の名前も選択肢もすべて日本語で表示されるため、英語の管理画面に読み替えながら設定する必要がありません。
正直に書いておきます。次の点が許容できるかどうかで、このアプリが向いているかが決まります。
料金は次のとおりです。金額はアプリストアの掲載ページに表示されているものです。
条件の数や作れるルールの本数でプランが分かれていないため、「上位プランでないと使えない条件」を探す必要がありません。最初から45種類すべてを試せます。
Shopify App Store のページから、他のアプリと同じ手順で導入できます。
管理画面の「設定」から「アプリと販売チャネル」を開き、アプリストアへ進んで、アプリ名で検索します。公開されてまもないアプリのため、検索結果の上位に出ないことがあります。見つからないときは、掲載ページを直接開いてください。

詳細ページで「インストール」を押すと、アプリが必要とする権限の確認画面が出ます。このアプリが求めるのは、チェックアウトルールの読み取りと書き込み、そして商品の読み取りの3つです。承認して進むと、プランの確認画面を経てアプリが開きます。

初めてアプリを開いたとき、Shopify 側に3つのチェックアウトルールが自動で作られ、有効になります。マーチャントの操作は不要です。
管理画面はとてもシンプルで、左メニューは「購入制限ルール」と「設定」の2つだけです。日本語で表示しているときは、ここに「よくある質問」が加わることがあります。ルールの作成・編集は「購入制限ルール」から、すべてのルールに共通する設定は「設定」から行います。

ここからは、管理画面に出てくる画面を1つずつ見ていきます。条件のカードは種類によって入力欄が変わるので、カテゴリごとに分けて解説します。
アプリを開いて最初に表示される画面です。登録済みのルールが表形式で並びます。列の意味は次のとおりです。
操作ボタンの挙動には、知っておくと事故を防げる違いがあります。
ルールが1本も無いときは、「購入制限ルールがまだありません」という案内と作成ボタンが表示されます。また、問題があるときだけ、一覧の上にお知らせが出ます。Shopify 側でチェックアウトルールが無効にされている場合は赤色のバナー、保存容量が上限に近づいている場合は黄色または赤色のバナーが表示され、使用量が「8,240 / 10,000」のような数字で示されます。
一覧の右上にある「ルールを作成」から開く画面です。上から「基本情報」と「条件」の2枚のカードが並び、いちばん下に保存とキャンセルのボタンがあります。

基本情報の3項目は次のように使います。
条件カードの下には、カテゴリ・条件タイプ・「条件を追加」の3つが横に並んでいます。カテゴリを選ぶと条件タイプの一覧が入れ替わり、追加ボタンを押すと条件カードが1枚増えます。カードの右上にあるゴミ箱のアイコンで、その条件だけを取り消せます。
条件カードの上には、青いお知らせで「すべての条件に当てはまる注文をブロックします」と表示されています。ここがこのアプリの設計の要です。
条件を1つも入れずに保存したルールは、何もブロックしません。作りかけのルールを保存しても、お客様に影響が出ないようになっています。
条件の組み合わせによっては、同じルールに入れられないものがあります。すでに入っている条件と両立しない条件タイプは選択肢が灰色になり、選ぶと追加ボタンが押せなくなって、次のようなお知らせが出ます。

これは、判定を3つのチェックアウトルールに分けて行っているためです。Shopify は1つのルールに渡せる情報の量に上限を設けており、45種類すべてを1つにまとめられません。そのため、このアプリは「カート・商品」「顧客・B2B」「地域・配送・時間」の3グループに分けています。同じグループの条件どうしなら、いくつでも組み合わせられます。
カテゴリ「カート全体」には、カート全体の合計で判断する条件と、配送の種類・カート属性の条件が入っています。
数値で比べる条件には、演算子と値の欄が出ます。

演算子は、未満・以下・超・以上・等しい・等しくない・範囲内・範囲外の8種類です。範囲内と範囲外を選ぶと、入力欄が「値(下限)」と「値(上限)」の2つに分かれます。範囲内は下限と上限の両方を含む判定です。金額はストアの通貨で入力し、お客様が別の通貨で買っている場合は換算して比べられます。
カテゴリ「数量」「金額」「重量」には、対象の商品を絞り込んでから数える条件があります。まずは個数制限から見ていきます。

金額制限(基準価格)は、対象の商品の代金の合計で判断します。入力欄は対象スコープ・演算子・金額の3つで、基準になるのは販売価格です。重量制限は、対象の商品の重さの合計で判断します。こちらの初期値も「超・0kg」なので、重さが登録されている商品はすべて当たってしまいます。値の入れ直しを忘れないでください。
カテゴリ「商品」には、カートに何が入っているかで判断する条件が6つあります。代表的なのが商品の有無です。

カテゴリ「配送先」には、お届け先の住所や配送方法で判断する条件が9つあります。国・州・郵便番号・市区町村・会社名・宛名・電話番号・配送方法・配送オプション名です。
国の条件では、欄に名前を入力すると候補が出ます。

候補を選ぶとチップになり、選択済みであることが分かります。複数の国をまとめて指定することもできます。

リストで指定する条件には、必ず「リスト方向」の欄があります。「リスト該当をブロック(拒否リスト)」はリストに載っているものを止め、「リスト以外をブロック(許可リスト)」はリストに載っていないものを止めます。日本にだけ配送するなら、許可リストにして日本を1件だけ登録します。なお、リストが空のときはどちらの方向でも何も止まりません。
住所の細かい項目は、文字の一致方法を選べます。完全一致・前方一致・部分一致の3つで、大文字と小文字は区別しません。郵便番号だけは完全一致と前方一致の2つです。離島を郵便番号の頭で指定したいときは前方一致が向いています。
配送方法の条件は、SHIPPING(配送)・PICK_UP(店舗受取)・LOCAL(ローカルデリバリー)のような英語のコードを大文字で入力します。「ゲストには店舗受取を使わせない」といった制限が作れますが、配送方法の選択肢そのものを隠すことはできません。選んだ時点で止まる形になります。
配送先の条件は、住所が入力されるまで判定されません。カートの段階では素通りし、チェックアウトで住所を入れた時点でブロックされることがあります。これは仕様なので、テストするときは住所まで入力して確かめてください。
カテゴリ「顧客」には、お客様のアカウントや連絡先で判断する条件が8つあります。

値を入力する欄では、文字を入れたあとに Enter キーを押すと確定してチップになります。入力しただけで確定していない状態はチップが出ないので、保存する前に見た目で確認できます。
カテゴリ「B2B」は、Shopify の B2B 機能で会社として購入しているお客様向けの条件です。7つとも同じグループなので、自由に組み合わせられます。
会社として購入していないお客様には、会社や拠点の情報がありません。その場合、これらの条件は「当てはまらない」と判断され、注文は止まりません。個人注文を止めたいときは、B2B 購入かどうかの条件を使います。
海外向けに販売しているストア向けの条件です。
カテゴリ「時間帯」には、1日の中の時刻で判断する「時刻帯」と、日付で判断する「日時範囲」があります。

時刻帯では、設定画面で登録した4つの枠から1つを選び、その枠の内側を止めるか外側を止めるかを決めます。営業時間外の注文を受け付けたくない場合は、営業時間を枠にして外側を選びます。設定画面で時間を入れていない枠を選んだ場合、その条件は判定されません。
日時範囲では、期間モードを4つから選びます。指定日より前をブロック・指定日より後をブロック・期間内をブロック・期間外をブロックです。期間内は開始日と終了日の両方を含みます。前後を指定するモードでは開始日の欄だけが表示され、当日は止まりません。日付の欄はカレンダーから選ぶほか、直接入力もできます。
どちらの条件も、判定に使われるのはストアのタイムゾーンです。管理画面を操作している人の居場所ではないので、海外から運営している場合は特に注意してください。
一覧の「編集」から開く画面です。作成画面と同じ内容に加えて、いちばん下に削除ボタンが増えています。

「このルールを削除する」を押すと、確認のダイアログが表示されます。一覧の削除ボタンとは違い、ここでは一度確認が入ります。

保存できなかったときは、画面の下にお知らせが出ます。数値の欄が空のままなら入力内容の誤りとして、同じルールに入れられない条件が混ざっていればその旨が、容量が上限に達していればその案内が表示されます。容量の案内が出たときは、商品を1つずつ指定している箇所をコレクションやタグにまとめると軽くなります。
左メニューの「設定」を開くと、すべてのルールに共通する設定がまとまっています。

一部の条件は、どのデータを見るかをストア全体で1組だけ決める必要があります。ルールごとに別々のメタフィールドを見ることはできません。
ここが空のままだと、対応する条件は判定されません。条件は作れてしまい、画面にも警告は出ないので、これらの条件を使うときは設定画面を先に埋めてください。
時刻帯の条件が使う時間帯を、4つまで登録できます。

欄を押すと30分刻みの一覧が開き、末尾には1日の終わりを指定するための 23:59:59 が入っています。直接入力もでき、22:00 のように短く打っても、欄を離れると秒まで補われます。終了は開始より後でなければ保存できません。22:00 から翌朝6時までのように日をまたぐ時間帯は、Shopify の判定が日付をまたがないため成立しません。この場合は、22:00:00 から 23:59:59 までと、00:00:00 から 06:00:00 までの2つの枠に分け、それぞれを参照するルールを2本作ります。
全体設定・参照先・時刻枠は、カードの下にある1つの保存ボタンでまとめて保存されます。
管理画面の表示言語を切り替えるカードです。

20言語から選んで「変更する」を押すと、表示が切り替わります。ここで変わるのは管理画面だけで、お客様に表示されるメッセージは、ルールに入力した文章がそのまま使われます。多言語で販売しているストアでは、どの国のお客様にも伝わる書き方にしておくと安心です。
カードの下には、同じ開発元の他アプリを紹介するカードが並びます。不要であれば右上の閉じるボタンで消せます。
日本語で表示しているときは、左メニューに「よくある質問」が加わることがあります。アプリの使い方についての質問と回答がまとまっている画面で、サポートに問い合わせる前に確認できます。
このアプリの判定は、Shopify の「設定」から「チェックアウト」を開いた先にある、チェックアウトルールの欄で動いています。アプリを初めて開いたときに、購入制限ルール(カート・商品)、購入制限ルール(顧客・B2B)、購入制限ルール(地域・配送・時間)の3つが作られ、有効になります。

ここで無効にされていると、アプリ側でルールを有効にしていても注文は止まりません。アプリの一覧には赤いバナーが出るので気づけますが、この3つは消さないでください。なお、判定が失敗したことがある場合、Shopify がこの欄に警告を表示することがあります。
ルールに当てはまったとき、お客様の画面には設定したメッセージが表示されます。チェックアウトでは画面の上部に出て、注文を確定できなくなります。

カートページからチェックアウトへ進もうとした場合は、テーマによってダイアログや画面内の表示でメッセージが出ます。どちらの場合も、理由と次にしてほしいことを1文で書いておくと、問い合わせが減ります。

複数のルールに当てはまった場合は、それぞれのメッセージが並んで表示されます。また、判定に必要な情報がまだ無い条件(住所が未入力、ログインしていないなど)は「当てはまらない」として扱われ、注文は止まりません。例外はログイン必須と顧客タグの許可リストの2つで、こちらはログインしていないお客様を止めます。
アプリを使わずに、テーマのコードで似たことをする方法もあります。よくあるのは、カートページで合計金額を見て、条件を満たさないときにチェックアウトのボタンを押せなくする書き方です。Dawn などのテーマでは、カートのテンプレートに次のような Liquid を足します。
{%- assign minimum_total = 500000 -%}
{%- if cart.total_price < minimum_total -%}
<p class="cart__minimum-note">
{{ minimum_total | money }} 以上のご注文から承っております。
あと {{ minimum_total | minus: cart.total_price | money }} 分の商品を追加してください。
</p>
<style>
.cart__checkout-button { pointer-events: none; opacity: 0.4; }
</style>
{%- endif -%}
この例では、カートの合計金額(cart.total_price)が 5,000 円(Liquid では最小単位なので 500000)に届かないときだけ、案内文を出してチェックアウトのボタンを押せなくしています。金額の表示は money フィルタに任せているので、通貨の書式はストアの設定に従います。
ただし、この方法には穴があります。ボタンを押せなくしているだけなので、/checkout を直接開かれると素通りしますし、Shop Pay や Apple Pay のように、カートページのボタンを経由しない決済も止まりません。JavaScript で補強することもできますが、こちらも同じ理由で確実ではありません。
document.addEventListener("submit", (event) => {
const form = event.target.closest("form[action*='/cart']");
if (!form) return;
const total = window.__cartTotal ?? 0;
if (total < 500000) {
event.preventDefault();
alert("5,000円以上のご注文から承っております。");
}
});
こちらは、カートのフォームが送信されたときに合計金額を見て、足りなければ送信を取り消す書き方です。画面上の操作は止められますが、ブラウザの外から注文を作られた場合や、エクスプレス決済のボタンから進んだ場合には効きません。加えて、テーマを更新したときに書き足した部分が消えることがあり、テーマを乗り換えるたびに移植が必要になります。条件が増えるほど分岐も増え、保守する人が読めなくなっていきます。
注文そのものを確実に止めたい場合は、Shopify のサーバー側で判定する仕組みを使うことになります。これを自分で作るにはアプリの開発が必要で、Shopify Functions で動く関数を書き、ストアに配布する形になります。今回のアプリは、その仕組みを管理画面の操作だけで使えるようにしたものです。テーマを触らずに済み、条件を増やしてもテーマの保守に影響しないという点が、コードで自作する場合との大きな違いです。
同じように購入制限をかけられるアプリを4本、実際に開発用ストアへインストールして触りました。それぞれの特徴を簡単にまとめます。

ひな形(既成ルール)を選んでから中身を調整する作りです。割引の重ねがけの禁止や割引総額の上限など、割引まわりの条件を持っているのが特徴でした。顧客名や SKU、日時スケジュールなど一部の条件は上位プラン向けの印が付いています。

編集画面では、条件を AND でつなぐボタンと、OR にあたる代替ルールを足すボタンが分かれていました。アプリストアの対応言語は英語だけと書かれていますが、実際の管理画面は日本語で表示されました。ただし、ひな形の名前とエラーメッセージの初期値は英語のままです。月額は $6.99 からです。

インストール直後の管理画面は英語で、右上の切り替えから Japanese を選べます。商品ページやカートで「あと何個買えるか」を知らせる表示に強く、通知を出すにはテーマに専用のブロックを追加する必要があります。

制限の種類は、商品・コレクション・顧客タグ・注文・特定商品の有無の5つに分かれています。

注文の制限では、数量・金額・重量から条件を選びます。有料プランでは、一生に1回・年に1回・月に1回といった再購入の制限も設定できました。過去の購入をもとに制限できる点は、今回触った中では Avada だけの特徴です。有効期間の時刻が協定世界時を基準にしている点は、日本のストアでは注意が必要です。月額は $9.99 からです。

購入制限だけでなく、チェックアウトの見た目や購入後のページまで扱う総合的なアプリです。管理画面は英語が初期表示で、切り替えると日本語を含む26言語から選べました。

ルールは条件と動作を組み合わせる形で、動作には「ブロックする」だけでなく「止めずに警告だけ出す」も選べます。本番に影響させずに試せるテストモードもありました。無料の範囲ではエラーメッセージを編集できないため、本格的に使うなら有料プランが前提になります。価格は月額 $9.99 のプランから始まります。

日本語の管理画面で、やりたいことを文章で説明すると人工知能がルールを組み立てる機能がありました。ルールはチェックアウトの検証だけでなく、決済方法や配送方法を隠す種類も選べます。

カスタムルールを作るときは、先に検証タイプを選び、その種類で使える条件から組み立てます。条件の数は多い一方、目的の条件がどの種類に入っているかを最初に探す必要があります。クーポンコードを扱う種類は Shopify Plus が必要と表示されていました。月額は $4.99 からです。
決済方法や配送方法を選択肢から隠したい場合は BoomGate や Blockify、割引コードの使い方まで制限したい場合は Cart Lock や Blockify、過去の購入回数をもとに制限したい場合は Avada、というように、目的によって向き不向きがあります。今回紹介しているアプリは、日本語の管理画面で条件を組み合わせて注文を止めることに絞ったアプリです。条件ごとの初期値や、同時に指定できない組み合わせの案内まで日本語で出るので、設定の途中で迷いにくい点が特徴です。
購入制限は、入れた直後から売上に影響する設定です。だからこそ、条件の意味と初期値を理解したうえで、テスト注文で確かめてから本番に出すことが欠かせません。この記事では、管理画面のすべての画面と45種類の条件、そして画面には出てこない制約まで見てきました。
もう一度、押さえておきたい点を挙げておきます。
カートとチェックアウトで確実に止めたい、けれどテーマは触りたくない。その条件に当てはまるなら、このアプリは手早く導入できる選択肢です。7日間の無料体験があるので、実際のストアでテスト注文まで通してから判断できます。
同じ開発元では、ストア運営の細かな困りごとを1つずつ解決する「シンプル」シリーズのアプリを公開しています。購入制限とあわせて検討しやすいものを挙げておきます。
いずれも管理画面は日本語で、設定はノーコードで完結します。