【ITニュース解説】Postage calculation --SPL Programming Practice
2025年09月05日に「Dev.to」が公開したITニュース「Postage calculation --SPL Programming Practice」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
ECサイト送料は重さで決まり、300ドル以上は無料。この複雑なルールを、料金テーブルと注文データからプログラミングで自動計算する。処理ステップと結果がある。
ITニュース解説
B2Cサイト、つまり企業が一般の顧客に商品を販売するウェブサイトでは、注文された商品の送料を正確に計算する仕組みが必要になる。このニュース記事では、その送料計算の具体的なルールと、それをシステムでどのように実現するかを解説している。システムエンジニアを目指す上で、このようなビジネスルールをどのようにプログラムに落とし込むかを理解することは非常に重要だ。
まず、送料計算のルールを見てみよう。基本的には、注文された商品の合計重量によって送料が決まる。しかし、特別なルールとして、注文の合計金額が300ドルを超えた場合は、重量に関わらず送料が無料になるという条件がある。これは顧客へのサービスとして設定されたルールであり、システムはこのルールを忠実に守って送料を計算する必要がある。
具体的な送料の料金表「mailCharge」テーブルは、このビジネスルールをデータとして表現したものだ。 このテーブルには、大きく分けて二つの種類のルールが記録されている。一つは金額に関するルールで、COSTの範囲が300ドルから100万ドルの場合に送料が0ドルとなることを示している。これは先ほどの「300ドル以上で送料無料」という特別ルールを意味する。もう一つは重量に関するルールで、WEIGHTの範囲が0kgから1kgの場合は送料が10ドル、1kgから5kgの場合は送料が20ドル、5kgから100万kgの場合は送料が30ドルとなることを示している。これらのルールを組み合わせることで、あらゆる注文に対する送料が決定される。
そして、ウェブサイトには「testOrders」という具体的な注文データがある。このデータには、各注文のID、注文金額(COST)、合計重量(WEIGHT)が含まれており、これらの情報を使って実際に送料を計算してみるのが、このニュース記事の目的だ。
送料を計算するシステムを構築する際、どのような手順で処理を進めるべきかを考える。基本的な考え方は、まず最も優先度の高いルールから適用していくことだ。今回の場合は「金額が300ドルを超えると送料無料」というルールが特別条件なので、これを最初にチェックするのが効率的だ。もしこの条件を満たさない場合は、次に「重量に応じた送料」という一般的なルールを適用する。
この一連の処理を「SPL」というデータ処理言語を使って実装する例が紹介されている。SPLは、複雑なデータ処理を簡潔に記述できる特徴を持つ言語だ。
実装のステップを見ていこう。
最初のステップは、必要なデータをシステムに取り込むことだ。これは、送料計算の料金表である「mailCharge」テーブルと、実際に送料を計算したい注文データである「testOrders」をそれぞれ読み込む作業に当たる。システムがこれらのデータにアクセスできなければ、計算は開始できない。
次に、読み込んだ料金表から、送料計算に必要な特定の情報を抽出・整理する作業を行う。ここでは二つの重要な情報を抽出する。一つは「送料無料」の条件だ。これは料金表の中から、注文金額(COST)が300ドルを超え、かつ送料が0ドルとなるレコード(ルール)を抜き出す作業になる。この情報は後で、各注文の金額をチェックする際に使われる。もう一つは「重量別の料金」の条件だ。料金表の中から、重量(WEIGHT)に関するルールだけを抽出し、さらに重量の軽い順に並べ替える。このように並べ替えるのは、後で特定の重量がどの料金範囲に属するかを効率的に探し出すためだ。例えば、0kgから1kg、1kgから5kg、というように順序よく並んでいると、検索がしやすくなる。
最後のステップは、実際に各注文の送料を計算し、その結果を注文データに追加する作業だ。 ここでの処理の流れは以下のようになる。まず、処理対象となるすべての注文データに対して一つずつ、送料を計算していく。 各注文について、最初に確認するのは、その注文の合計金額(COST)が、先ほど抽出した「送料無料」の条件を満たしているかどうかだ。もし注文金額が300ドルを超えているならば、その注文の送料は迷うことなく0ドルと決定される。これが優先ルールだ。 もし注文金額が300ドル以下で送料無料の条件を満たさない場合、次に重量に応じた送料を決定するステップに進む。このとき、注文の合計重量(WEIGHT)が、先ほど整理した「重量別の料金」テーブルのどの範囲に当てはまるかを検索する。SPLでは「SEGP」という関数がこの範囲検索を効率的に行ってくれる。例えば、注文の重量が2.5kgであれば、「1kgから5kg」の範囲に該当することを見つけ出し、その範囲に対応する送料(この場合は20ドル)を取得する。ここで使われている「@r」というオプションは、検索する範囲が「左側は含まないが、右側は含む」という定義であることを示している。例えば、「1kgから5kg」の場合、1kgは含まないが5kgは含む、という意味になる。このような細かい指定も、正確な送料計算には不可欠だ。
このようにして、すべての注文に対して送料が計算され、元の注文データに「postage」という新しいフィールドとして送料が追加される。これにより、最終的に各注文に適切な送料が割り当てられたデータが完成する。
このニュース記事で紹介されたSPLによる送料計算の例は、システムエンジニアを目指す上で非常に良い学習材料となる。データ処理の基本的な流れ、ビジネスルールの理解とそれをシステムロジックへの変換、条件分岐による処理の切り替え、そしてデータの範囲検索といった、システム開発における重要な概念が凝縮されているからだ。身近な「送料計算」という問題を通して、複雑なビジネス要件を効率的に、かつ正確に処理するためのシステム構築の考え方を学ぶことができる。