会員システムを使う人の、大人の算数・国語・論理的思考

お金を扱う大人の算数、第12回。ここまで、税込と税抜、端数処理、割引、送料、ポイント、返金について考えてきました。今回は視点を変えます。「なんでもできる」を目指したとき、設計に何が起きるのか——1998年の買い物かごから始めます。

今回のテーマ

「なんでもできる」を求めると、なぜ設計は限界を迎えるのか。

1998年、私はインターネット上に買い物かごを作っていました。当時、商品価格を税込で管理するか、税抜で管理するかという選択があり、私は税込価格を選びました。理由は単純です。その方が、買い物かごの計算を単純にできたからです。

商品に表示されている価格を、そのまま足していけばよい。1,000円の商品を三つ買えば3,000円、そこへ送料を加えれば支払金額が出る。商品ごとに消費税を計算し、端数を処理し、最後に合計し直す必要がありません。

当時の私は、税の計算に時間を使いたいわけではありませんでした。商品をどう見せるか。どうすれば安心して買ってもらえるか。どのような商品説明を書けば、魅力が伝わるか。私は、そちらに時間を使いたかったのです。だから、買い物かごは、できるだけ単純にしたかった。Simple is beautiful.——仕組みが単純であれば、間違いが起きにくく、説明しやすく、直しやすい。運用する人も理解しやすい。1998年の私にとって、税込価格を選ぶことは、買い物かご全体を単純にするための設計でした。

要点先に、この回の要点

機能を一つずつ足すのは難しくないが、ポイント・クーポン・会員ランク・送料・税・返品などが掛け合わさると組み合わせが爆発し、「設計限界」に達します。設計とは全部に対応することではなく、何に対応し何にあえて対応しないかを決めること(=設計思想)です。

  • 各機能は簡単でも、金額条件・適用順・端数処理・返品再計算が掛け算で増え、「なんでもできる」は破綻を招く。
  • 処理を分けても、どの金額を次へ渡すか(値引前/後、丸め前/後、処理順)という境界の問題が残る。
  • 設計者の仕事は組み合わせをむやみに実装することではなく、必要な組み合わせだけが残るよう境界を引くこと。

何を優先するか

もちろん、税込価格で管理する方法にも弱点はあります。消費税率が変われば、商品価格そのものを変更しなければなりません。税抜価格で管理していれば、税率だけを変更し、税込価格を計算し直すこともできます。それでも私は、税込価格を選びました。将来の制度変更への柔軟性よりも、そのときの買い物かごを単純にすることを優先したのです。

これは、正しいか間違っているかという話ではありません。何を優先するかという話です。

当時のインターネット通販は、現在ほど複雑ではありませんでした。ポイント、クーポン、会員ランク、定期購入、軽減税率、複数の決済方法、一部キャンセル、部分返金——現在では当たり前になった多くの機能が、まだ存在していませんでした。税込価格を足して、送料を加える。それで、買い物かごは成立したのです。

30年で変わったもの

それから約30年。買い物かごの中には、多くの機能が入りました。商品価格、消費税、送料、ポイント、クーポン、会員ランク割引、定期購入割引、軽減税率、決済、返品、返金。問題は、機能が増えたことだけではありません。それぞれが、絡み合うようになったことです。

例えば、ポイントを付けるだけでも、決めることがあります。送料を対象にするのか。税込金額を基準にするのか、税抜金額か。クーポン適用前か、適用後か。ポイント利用前か、利用後か。同じ「1%ポイント」でも、何を基準にするかによって結果は変わります。

送料も同じです。「8,000円以上で送料無料」と書かれていても、税込なのか税抜なのか、クーポン適用前か後か、ポイント利用前か後かによって、送料が発生するかどうかが変わります。クーポンも、単純な引き算ではありません。消費税率10%の商品と8%の商品が混在する注文に1,000円引きのクーポンを使うとき、その1,000円を、どの商品からいくら引いたことにするのか。それによって税額が変わり、ポイントが変わり、送料判定が変わり、返品時の返金額まで変わります。

単純に数えてみる

ここで、設計の組み合わせを単純に数えてみます。対象を、クーポン・会員ランク割引・定期購入割引・送料判定・ポイント付与の五つとします。まず、それぞれを使うか使わないかがあり、使う場合には、どの順番で適用するかがあります。

組み合わせは、足し算ではなく掛け算で増える
五つすべてを使う場合の順番だけ5 × 4 × 3 × 2 × 1120通り
使う数(0〜5個)と順番を合わせて1 + 5 + 20 + 60 + 120 + 120326通り
+ 各処理に3通りの金額条件326 × 3⁵(243)79,218通り
+ 一部キャンセル・一部返品・個別例外79,218 × 2 × 2 × 2633,744通り
+ 軽減税率へのクーポン配分3・決済方法4633,744 × 3 × 47,604,928通り

「5,000円以上なら使える」「1万円以上では使えない」といった金額条件を各処理に三通り、一部キャンセル・一部返品・個別例外の可否、軽減税率へのクーポン配分、決済方法。ここまでを掛け合わせるだけで、五つの処理が約760万通りにふくれ上がります。

端数処理を加える

しかし、ここにはまだ端数処理を含めていません。消費税、クーポンの配分、会員ランク割引、ポイント付与、返品や返金の再計算——これらには、小数点以下をどう扱うかという問題があります。切り捨てるのか、四捨五入するのか、切り上げるのか。しかも方法だけではありません。商品ごとに処理するのか、税率ごとにまとめるのか、注文全体の最後に処理するのか。同じ切り捨てでも、どの単位で、どの時点で行うかによって最終金額は変わります。

端数処理を掛け合わせると
1箇所あたり6方式 ×5つの計算箇所6⁵7,776通り
先ほどの760万通りと掛け合わせて7,604,928 × 7,776約591億通り

もちろん、これは実際のシステム仕様を正確に数えたものではありません。成立しない組み合わせもあれば、異なる条件でも同じ結果になる場合もあります。反対に、対象商品・会員ランク・利用回数・有効期限・購入経路などを加えれば、組み合わせはさらに増えます。重要なのは、591億という数字そのものではありません。「なんでもできる」を目指したとき、組み合わせが足し算ではなく、掛け算で増えていくことです。

「なんでもできる」の正体

「ポイントを付けたい」「クーポンを使いたい」「送料無料にしたい」。一つ一つは、それほど難しい機能ではありません。しかし、「なんでもできる」を実現するとは、機能を増やすことだけではありません。

「なんでもできる」の中身
  • ×適用の有無を決める。
  • ×順番を変える。
  • ×利用条件を持たせる。
  • ×キャンセルや返品の後まで整合させる。
  • ×例外を認める。
  • ×そして、端数をどの方法で、どの単位で、どの時点に処理するかを決める。
その一つ一つが掛け算となって増えていきます。

ここまで実現しようとすると、設計は急激に複雑になります。

一つの機能を変更すると、別の機能に影響が出る。なぜその金額になったのか、説明できなくなる。新しい機能を追加するたびに、既存機能を広く確認しなければならなくなる。担当者が変わると、誰も安心して触れなくなる。技術的には作れる。しかし、安全に変更できない。正しく説明できない。将来の変化に耐えられない。

これが、私の考える設計限界です。

処理を分けても、限界はある

では、ポイント、クーポン、送料、税、決済、返金を、それぞれ分ければ解決するのでしょうか。確かに、処理を分ければ、一つ一つは分かりやすくなります。しかし、分けた処理は、最後には再びつながなければなりません。

どの金額を次の処理へ渡すのか。値引き前か、値引き後か。端数処理の前か、後か。どの処理を先に行うのか。返品時には、どこまで元に戻すのか。一つにまとめれば、その中が複雑になる。細かく分ければ、今度は処理同士の関係が複雑になる。

処理を分けることにも、設計限界があります。

設計思想とは何か

1998年、私は税込価格を選びました。買い物かご全体を単純にしたかったからです。その代わり、将来の税率変更への柔軟性は捨てました。当時の私は、「設計思想」という言葉で考えてはいなかったと思います。しかし、振り返れば、そこでしていたのは、まさに設計上の選択でした。何を優先するのか。どこまで対応するのか。何を標準とし、何を例外とするのか。そして、何を捨てるのか。

対応する組み合わせ、対応しない組み合わせ

設計とは、すべての組み合わせに対応することではありません。何に対応し、何にあえて対応しないかを決めることです。

対応すると決めた組み合わせ
  • 標準の割引・ポイント・送料の組み合わせ
  • よくある一部返品・一部キャンセル
  • 決められた範囲の端数処理
あえて対応しない組み合わせ
  • 例外だらけの特殊な配分
  • 無制限な適用順序の入れ替え
  • 後からいくらでも足せる特典の重ね掛け

「なんでもできる」は、設計限界を生みます。何に対応し、何にあえて対応しないかを決めること——それが設計思想です。

設計者は、何を減らし、何を残すのか

組み合わせの数に圧倒されて終わり、ではありません。設計者の仕事は、増える組み合わせをむやみに実装することではなく、減らすものと残すものを決めることです。

設計者が減らすもの
  • 適用順序を固定する
  • 併用できない機能を決める
  • 基準金額を一つにする
  • 端数処理を統一する
  • 例外をマスタ化する
  • 過去注文は再計算せず、当時の結果を保存する
設計者が残すもの
  • お客様への分かりやすさ
  • 再現性
  • 説明可能性
  • 変更しやすさ
  • 集計の一貫性

設計とは、複雑な組み合わせをすべて実装することではなく、
必要な組み合わせだけが残るように境界を引くことです。

現場では、こうなる

機能を一つ足すたびに、過去注文の金額まで変わってしまう。「前は合っていたのに」という問い合わせが増える。

今回の答え
設計の第12段 / 12 ・ 対応しない組み合わせを決める
設計思想とは、何を優先し、何を捨てるかを決めること。

設計とは、限界のない仕組みを作ることではありません。設計思想とは、何を優先し、何を捨てるかを決めることです。Simple is beautiful.——単純なのは、処理ではありません。考え方です。

実は、ECシステムは、すべて設計思想を持っています。何を優先するのか。どこまでを標準機能とするのか。利用者に、どこまで自由を与えるのか。何を外部サービスに任せ、どこから先を個別対応とするのか。そして、何をあえてできないようにするのか。その考え方は、システムごとに違います。

ECシステムの機能や料金を比較する記事は数多くあります。しかし、何を優先したのか。何を捨てたのか。なぜ、その形になったのか。それを商売の視点から読み解く記事に、私はまだほとんど出会っていません。機能の比較ではなく、料金の比較でもなく、そのシステムが持っている考え方を見る——いままで、あまり語られることのなかった世界です。

姉妹連載 ・ ECシステム論 この「設計限界」を、実在のECモールで読み解く ― 楽天市場・Yahoo!ショッピング Series ・ 特別編 大人の算数・国語・論理的思考 ― 連載一覧へ

よくあるご質問(FAQ)

Q機能を一つずつ足すだけなら簡単では?
A

一つ一つは簡単でも、ポイント・クーポン・送料・税・返品などが掛け合わさると組み合わせが急増し、条件の確認や整合が破綻します。これが設計限界です。

Q処理を分ければ設計限界は解決しますか?
A

完全には解決しません。分けても「どの金額を次の処理へ渡すか(値引前か後か、丸め前か後か、処理順)」という境界の問題が残ります。

Q「なんでもできる」システムは良いことではないのですか?
A

何にでも対応しようとすると組み合わせが爆発し、かえって壊れやすくなります。何に対応し、何にあえて対応しないかを決めることが設計思想です。

Q設計者の役割は何ですか?
A

増える組み合わせをむやみに実装することではなく、必要な組み合わせだけが残るよう境界を引き、減らすものと残すものを決めることです。

岸本 健志
会員ビジネスLab 主任研究員 / ハートランドITイノベーション代表

1997年よりインターネット業界に従事。2007年の創業以来、EC、メディア、SaaS、コミュニティサイトなど数多くの会員ビジネスの立ち上げと成長を支援。

30年近く会員システムの設計・運用に携わる中で、仕様は画面や機能だけでは完成せず、金額・言葉・条件という「基礎」をそろえて初めて一つに決まると考えるようになりました。この特別編では、その基礎を大人の算数・国語・論理的思考として整理しています。

「人との関係は設計できるのか」という問いに、これからも愚直に向き合い続けていきます。

← 大人の算数・国語・論理的思考 連載一覧へ