「2本目は半額」「3点以上で 3点目から 500 円引き」。実店舗では当たり前の値付けなのに、Shopify で同じことをやろうとすると意外に手間がかかります。標準のディスカウントは「○点以上買ったら全部を○%引き」は得意でも、「2点目の 1 点だけ」「安いほうだけ」を狙って割り引くのは苦手だからです。
この記事では、UnReact が開発した Shopify アプリ「シンプル2点目購入割引|2点目以降自動セール設定」を、管理画面の全画面とテーマエディタの全設定項目まで、実際の画面を撮りながら 1 つずつ解説します。設定の意味だけでなく、画面を見ているだけでは気づけない動き(コレクションの扱い、点数の数え方、割引が止まる条件)も、アプリの実装から拾って書いています。
導入を検討している方は「メリット」「デメリット」「料金プラン」まで、すでに使っている方は「各画面の説明」から読み進めてください。
「シンプル2点目購入割引|2点目以降自動セール設定」は、同じ割引グループの商品を複数買ったお客様に、2点目以降の割引を自動でかけるアプリです。割引は Shopify の「ディスカウント」の仕組みの上で動くため、お客様はクーポンコードを入れる必要がありません。条件を満たしてカートに入れた瞬間に、カートと決済画面の金額が下がります。
アプリでできることは大きく 3 つです。
Shopify App Store の掲載ページでは、割引設定の作成画面と、商品ページでの見え方が紹介されています。


アプリの公開ページは Shopify App Store から開けます。操作の手順だけを短く確認したい方は、公式のご利用ガイド「Shopify で2点目以降の購入を自動割引できるアプリを徹底解説|ご利用ガイド」もあわせてご覧ください。
割引は Shopify の自動割引として動きます。メールマガジンや SNS でコードを配る必要がなく、商品ページを見たお客様がそのまま割引を受けられます。「コードを入れ忘れたので返金してほしい」という問い合わせも起きません。
適用条件は「2点目のみ」「3点目以降」のように、点数と範囲を組み合わせて決めます。さらに、カートに値段の違う商品が混ざったとき、高い商品と安い商品のどちらを割り引くかも選べます。標準のディスカウントでは作りにくい、実店舗そのままの値付けを再現できます。
割引がかかっていても、お客様が知らなければ「もう 1 点」は起きません。割引バッジと割引対象の商品一覧を商品ページに置けるので、商品を見た瞬間に「2点目がお得」と伝わります。一覧には「カートに追加」ボタンも付けられ、別の商品をそのままカートへ足してもらえます。

定額の割引額はストアの通貨で入れますが、別の通貨で買い物をしているお客様には、その通貨に換算した金額で割り引かれます。バッジの「2点目」という文言も、英語のストアでは「2nd item」のようにストアの言語に合わせて切り替わります。
同じ商品を「2点目 10%OFF」と「3点目以降 20%OFF」の両方に入れて、段階的に割引を強くする使い方はできません。別の割引設定で同じ商品を選んで保存すると、商品は新しい設定へ移動します。段階割引を作りたい場合は、数量割引に特化したアプリのほうが向いています。
コレクションを選んで割引設定を作ると、保存した時点でコレクションの商品が 1 件ずつ割引設定に取り込まれます。あとからコレクションに新商品を足しても、その商品は自動では割引の対象になりません。新商品を出すたびに、割引設定を開いて保存し直す運用が必要です。
割引の中身はアプリ側に保存されますが、バッジと一覧のブロックはテーマの設定として保存されます。テーマを切り替えたときは、新しいテーマにブロックを置き直してください。
プランは 1 つだけで、割引設定の件数や対象商品の数による追加料金はありません。7 日間の無料体験のあいだに、実際のカートで割引が効くところまで確かめられます。
Shopify 管理画面の左下にある「設定」から「アプリと販売チャネル」を開き、「Shopify App Store」でアプリ名を検索してインストールします。権限の確認画面で内容を確認して「インストール」を押せば完了です。
インストールしただけでは、まだどの商品にも割引はかかっていません。最初にやることは次の 4 つです。
アプリを開くと、左メニューに「2点目割引管理」「設定」が並びます。管理画面を日本語で表示しているときは「よくある質問」も出ます。

画面は全部で 5 つあり、次のように行き来します。
作った割引設定が 1 行ずつ並ぶ画面です。列は 5 つあります。
割引設定が 1 件も無いうちは、一覧の代わりに「割引設定を作成しましょう」という案内と「割引設定を追加」ボタンが表示されます。
行の右端にあるゴミ箱のアイコンを押すと「割引設定を削除しますか?」という確認が開き、「削除する」で削除、「キャンセル」で取りやめになります。

削除すると、その設定に入っていた商品の割引はすぐに解除されます。確認の文面にあるとおり元には戻せないので、キャンペーンを終えるときは、どの商品が入っていたかを控えてから消すと安心です。
一覧の下には、UnReact の他のアプリを紹介する「おすすめアプリ」が出ます。右上の × で閉じられます。
一覧の右上にある「割引設定を追加」を押すと、「割引設定作成」が開きます。上から「割引を設定する商品を選択」「割引を設定するコレクションを選択」「適用条件」「割引適用対象」「割引設定」の 5 枚のカードが並びます。

商品は、「割引を設定する商品を選択」の「商品を検索する」欄をクリックして選びます。Shopify おなじみの「商品を追加」の画面が開くので、チェックを入れて「追加」を押します。

選んだ商品は「2件の商品が選択されています」のように件数付きで並び、右端の × で外せます。

コレクションは「割引を設定するコレクションを選択」の「コレクションを追加」から選びます。選択画面には、コレクションごとの商品数も表示されます。

選んだコレクションはタグとして並びます。商品とコレクションは同時に選べ、両方に入っている商品は 1 件として数えられます。

ここで押さえておきたいのが、コレクションの扱いです。アプリは保存のタイミングでコレクションの中身を調べ、商品を 1 件ずつ割引設定に取り込みます。つまり割引設定が覚えているのは「コレクション」ではなく「保存した時点の商品」です。保存後にコレクションへ追加した商品には割引がかからないので、新商品を足したら割引設定を開いて保存し直してください。
「適用条件」では、何点目から割り引くかを数字で入れ、その右の「のみ」「以降」で範囲を決めます。
「割引適用対象」では、どの商品を割引の対象にするかを選びます。

点数の数え方には、画面からは読み取れない決まりがあります。
たとえば「2点目 以降 / 最も安い商品」で $100 の商品 1 点と $60 の商品 2 点を買うと、合計 3 点のうち 2 点が割引の対象になり、安い $60 の 2 点が割り引かれます。「最も高い商品」にしていれば、$100 の 1 点と $60 の 1 点が対象です。
最後の「割引設定」カードで、名前と割引額を決めます。

「定額」に切り替えると、入力欄の下に「割引額はストアの通貨で入力してください。」と出ます。


割引値の初期値は 0 です。0 のまま保存すると、割引設定としては残るものの割引は効かず、バッジも出ません。保存前に値が入っているかを必ず見てください。
右下の「保存する」で保存し、一覧に戻ります。入力が足りないときは、項目ごとに赤いエラーが出て保存されません。

選んだ商品が別の割引設定にすでに入っていると、保存の前に「他の割引設定に含まれる商品があります」という確認が出ます。商品だけを選んだ場合は「○件の商品が他の割引設定に紐づいています。」と件数も表示されます。
コレクションを選んだ場合は、重なりがあるかどうかに関係なく毎回この確認が出ます。コレクションの中身は保存のときに初めて分かるためです。

「上書き保存」を押すと、重なっていた商品は元の設定から外れて、いま作っている設定へ移ります。元の設定の「商品数」もその分だけ減ります。
一覧の行をクリックすると「割引設定編集」が開きます。中身は作成画面と同じで、いまの設定が入った状態で表示されます。

コレクションで作った割引設定も、編集画面では展開済みの商品の一覧として表示されます。商品の × を押して保存すれば、その商品の割引はその場で外れます。
画面の下には、赤い「削除する」と「保存する」が並びます。「削除する」は一覧のゴミ箱と同じ動きです。

左メニューの「設定」には、「テーマに機能を追加」と「言語設定」の 2 枚のカードがあります。

「テーマに機能を追加」の項目とボタンは次のとおりです。
どちらの追加ボタンも、テーマエディタ右上の「保存」を押すまではテーマに反映されません。日本語表示のときはカードの下に、自動追加がうまくいかない場合はご利用ガイドを見て手動で追加してほしい、という注意が出ます。テーマのバージョンによっては自動追加が効かないため、その場合はテーマエディタの「ブロックを追加」から「アプリ」を選んで置いてください。
「言語設定」では、「言語を選択」でアプリ管理画面の言語を選び、「変更する」で切り替えます。選べるのは Čeština / Dansk / Deutsch / English / Español / Français / Italiano / Nederlands / Norsk (bokmål) / Polski / Português (Brasil) / Português (Portugal) / Suomi / Svenska / Türkçe / ภาษาไทย / 日本語 / 简体中文 / 繁體中文 / 한국어 の 20 言語です。変わるのは管理画面だけで、ストアのバッジの文言はストアの言語で決まります。
管理画面を日本語で表示しているときだけ、左メニューに「よくある質問」が出ます。質問の行を押すと、回答が開きます。

アプリの画面ではありませんが、2点目割引の心臓部なので、あわせて見ておきます。アプリを開くと、Shopify 管理画面の「ディスカウント」に自動割引が 1 件作られます。

この自動割引を消したり無効にしたりすると、すべての 2点目割引が止まります。誤って消した場合は、アプリを開き直すと自動で作り直されます。
テーマエディタで置けるブロックは 2 つです。

どちらも、割引設定に入っていない商品のページでは何も出ません。商品ページのテンプレートに一度置けば、割引設定に入れた商品のページにだけ自動で現れます。商品ごとにブロックを置き分ける必要はありません。
プレビューでバッジをクリックすると、左に設定パネルが開きます。前半は「何を表示するか」の設定です。

[count] [discount_number][discount_unit])… バッジの文言です。記号の部分が割引設定の内容に置き換わります%OFF)… 割引率の設定のときに付く単位OFF)… 定額の設定のときに付く単位バッジテキストに書ける記号は 4 つあります。
[count] … 「2点目」「3点目」。「以降」の設定なら「2点目以降」になり、英語のストアでは「2nd item」と出ます[discount_number] … 「30」「$10」のような数値[discount_unit] … 上の単位テキスト[discount_value] … 数値と単位をつなげたもの記号以外の文字はそのまま出るので、まとめ買いで[count] [discount_value] と書けば「まとめ買いで2点目 30%OFF」になります。
パネルの後半は見た目の設定です。

割引対象の商品一覧は、「レイアウト」「スタイル」「間隔」の 3 グループに分かれています。まずレイアウトです。

表示モードを「ページネーション」に変えると、列数と行数の項目が入れ替わります。

一覧に並ぶ商品には決まりがあります。いま開いている商品自身と、売り切れの商品は出ません。並べる商品が 1 件も残らないときは、ブロックごと非表示になります。また、一覧のもとになる商品は 1 つの割引設定につき最大 100 件までです。
スタイルのグループでは、見出し・カード・画像・文字・ボタンの見た目を決めます。



ページネーションのときは、さらにナビゲーションの項目が加わります。

最後のグループは余白です。数字を少し動かすだけで、一覧の詰まり具合が大きく変わります。


最後に、お客様側でどう見えるかです。「2点目 のみ 30%」の設定で同じ商品を 2 点カートに入れると、2 点目の行に割引のラベルが付き、$749.95 → $524.97 のように値引き後の金額が並びます。決済画面でも同じラベルで割引が表示されます。

割引はブロックの有無とは関係なく効きます。バッジと一覧を置く前でも、割引設定さえ保存してあればカートでは割り引かれます。
アプリを使わずに 2点目割引を作る場合、やることは「割引の計算」と「商品ページの表示」の 2 つに分かれます。前者は Liquid やテーマの JavaScript では作れません。カートの金額を変えられるのは Shopify 側の仕組みだけだからです。
カートの割引を自作するには、Shopify Functions の割引用の関数を作り、アプリとしてストアに入れる必要があります。次は「同じ商品を 2 点以上入れたら、1 点を 30% 引く」だけを行う、最小の例です。
// カートの行を見て、数量 2 以上の行に 1 点ぶんの割引候補を出す
export function run(input) {
const candidates = input.cart.lines
.filter((line) => line.quantity >= 2)
.map((line) => ({
message: '2点目30%OFF',
targets: [{ cartLine: { id: line.id, quantity: 1 } }],
value: { percentage: { value: 30 } },
}));
if (candidates.length === 0) return { operations: [] };
return {
operations: [
{ productDiscountsAdd: { candidates, selectionStrategy: 'ALL' } },
],
};
}
この関数は、数量が 2 以上の行を探し、その行のうち 1 点にだけ 30% の割引をかけます。targets の quantity: 1 が「1 点だけ」の指定です。
ただし、これだけでは実店舗の 2点目割引にはなりません。違う商品を 1 点ずつ買ったときに合算する処理、高い商品と安い商品のどちらを割り引くかの並べ替え、定額のときの通貨換算、商品ごとに違う割引率を持たせるためのメタフィールドの読み書き、関数を有効にするための自動割引の作成まで、すべて自分で作る必要があります。さらに Shopify Functions はアプリとしてデプロイするものなので、開発用のアプリ環境とその保守も必要です。
表示のほうは Liquid で作れます。商品のメタフィールドに割引率を入れておき、値があるときだけバッジを出す例です。
{%- assign rate = product.metafields.custom.second_item_rate -%}
{%- if rate != blank and rate > 0 -%}
<p class="second-item-badge">2点目 {{ rate }}%OFF</p>
{%- endif -%}
このコードは、商品メタフィールド custom.second_item_rate に数値が入っている商品にだけ「2点目 ○%OFF」を出します。表示と計算が別々のデータを見ているため、割引率を変えるときは関数側とメタフィールド側の両方を直さないと、バッジと実際の割引額がずれます。
アプリなら、管理画面で割引設定を保存した時点で、計算に使う設定とバッジに出す設定が同じデータから書き込まれます。表示と割引がずれる心配が無いことが、自作との一番の違いです。
Shopify App Store には、数量に応じて割り引くアプリがほかにもあります。たとえば Discounty: Bulk Discount Sales、パンパーバンドルの数量割引、Discount Mixer: 一括割引、Discount Plus – カスタム割引 などです。ここでは料金や機能の比べ方ではなく、すでに別の割引アプリを入れているストアが、このアプリをどう組み合わせるかに絞って書きます。
数量割引アプリの多くは「○点以上で全部を○%引き」のように、数量のしきい値で割引を段階的に強くする考え方です。このアプリは「何点目の何点を割り引くか」を決める考え方なので、同じ「まとめ買い」でも値付けの見え方が違います。
このアプリの自動割引は、商品割引・注文割引・送料割引のすべてと組み合わせられる設定で作られます。一方、実際に重ねて適用されるかどうかは、相手の割引の「組み合わせ」の設定でも決まります。同じ商品に両方のアプリの割引がかかる設計にすると、想定より大きく値引きされたり、どちらか一方しか効かなかったりと、結果が読みにくくなります。
併用するときは、次の手順で商品を分けておくのが安全です。
商品ごとの割引どうしを重ねるのに比べ、「○円以上で送料無料」や注文全体のクーポンとの併用は分かりやすく働きます。2点目割引で点数を増やしてもらい、送料無料ラインで最後のひと押しをする、という組み合わせは相性のよい使い方です。この場合も、相手の割引側で商品割引との組み合わせが許可されているかを確認してください。
「シンプル2点目購入割引|2点目以降自動セール設定」は、実店舗でおなじみの「2点目割引」を、クーポンコードなしで Shopify に持ち込むアプリです。
一方で、1 つの商品は 1 つの割引設定にしか入れないこと、コレクションは保存した時点の中身で固定されることは、運用の前に知っておきたい点です。新商品を出したら割引設定を保存し直す、という手順をキャンペーンの段取りに組み込んでおけば、迷わずに使えます。
料金は月額 $9.99(年額 $99.99)で、7 日間の無料体験があります。まずは 1 つの商品で割引設定を作り、カートで 2 点目が割り引かれるところまで試してみてください。
2点目割引と組み合わせると効果が高い、UnReact の Shopify アプリを紹介します。
商品の値引き率を、商品ページや商品一覧に分かりやすく表示するアプリです。セール価格の商品で「何%お得か」を見せたいときに、2点目割引のバッジとあわせて使えます。
商品をカートに入れたタイミングで、別の商品をポップアップで提案するアプリです。1 点目をカートに入れた直後に同じ割引設定の商品を見せれば、2 点目の後押しになります。
画面をスクロールしても購入ボタンが付いてくるアプリです。商品ページで割引対象の一覧まで読み進めたお客様が、そのまま購入へ進めます。