日本からのEMSサービスの料金を返すライブラリを書いた

このライブラリについて

日本郵便が提供しているEMS(国際郵便)サービスの料金を重量・エリアに応じて返してくれるライブラリです。 単位はグラム単位(1000g -> 1kg)で入力してください。 料金表が円(JPY)なので、ドル(USD)にしたい人は自分で何とかしてください。

料金のルールについては下記サイトの料金表を参考にして返しています。

https://www.post.japanpost.jp/int/charge/list/ems_all.html

リポジトリ

https://github.com/webuilder240/ems-from-jp

インストール方法

Packagistに公開しているので、Composerでインストールしてください。

1
composer require webuilder240/ems-from-jp

動機

最新のEC-CUBE3を使って、越境ECをやってみる案件があるので、 発送方法としてEMSに白羽の矢が立ったので、EMSの料金を計算する機能が必要になった。 ライブラリやWebAPIがあるだろうと思っていたらどうやらなさそうなので書いた感じ。

そこまで重い商品を取り扱うことはないので、2kgまで対応してくれればとりあえずいいよとクライアントのOKはもらったのだけど、 自作でECのCMSを作りたいと考えていたので、それ用に料金表に載っている30kgまで対応するライブラリを実装した。

実行例

1
2
3
4
5
6
7
8
9
<?php
require 'vendor/autoload.php'

use EmsFormJp/EmsFromJp;

echo EmsFromJp::returnFeeToAsia(300); //900
echo EmsFromJp::returnFeeToOceania(300); //1200 
echo EmsFromJp::returnFeeToEuropa(500); //1800
echo EmsFromJp::returnFeeToAfrica(30000); //69400

恥ずかしいところ

  • カバレッジは100%に近い数字を叩き出す自信があるのだけど、設定がうまくいってないのか、未だにカバレッジの数値が出なくて試行錯誤して、無駄にmaster pushとかしてしまった。(気が向いたらまた頑張る)
  • あと、Travisも殆ど触ってなかったので、そのへんでも無駄に試行錯誤でgit pushとかしてつらぽよだった。
  • ロジックが残念なことに… (とりあえず動いてくれればいいやで書いたので、だれか賢い人お願いします)

なので、使われていないようであれば、最初から initial commitしてやりなおしたい気持ちはある。

わかりにくいテストについて

きっちりテストを書くとなると、かなりかったるいけど書かないわけにもいかないので、こんな感じのコードで手を抜いた。 (見本なので短くしています。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$testcases = [
  24600 => [
      27010,
      28000,
  ],
  25400 => [
      28010,
      29000,
  ],
  26200 => [
      29010,
      30000,
  ]
];

foreach ($testcases as $expacted => $cases) {
  foreach ($cases as $weight) {
      $result = EmsFromJp::returnFeeToAsia($weight);
      $this->assertEquals($expacted, $result);
  }
}

こんなかんじで、keyに結果を、配列の内容に重量を入れてズルしてみた。

当分は自分でしか使わないだろうからこれでいいかな、とも思っている。