ネットの海の片隅で

技術ネタの放流、あるいは不法投棄。

消費税つらい

これは何

消費税の端数処理がめんどくさすぎることについて、あーだこーだ言うだけのエントリ。

問題

あらためて言うまでもないかもしれないが、現在、この国では消費税というものがあって、一部の例外を除いて、商品の価格に加えて8%の金額を税として支払う必要がある。 税抜100円のものを買うと、8%にあたる8円の税がかかって税込108円支払う必要がある。

値札に税抜価格を表示して精算時に税込価格を算出すれば良いケースであれば、その通りにすれば良い。

一方、値札に税込価格を表示したいケースではめんどくさくなってくる。

税込価格と税抜価格の変換

税込680円ののものは 680 / 1.08 = 629.6296... となり、税抜630円になる。すると、630 x 1.08 = 680.4 となり、四捨五入して税込680円になる。

同様に税込780円のものについて考えると 780 / 1.08 = 722.22... となり、税抜722円になる。すると、722 x 1.08 = 779.76 となり、四捨五入して税込780円になる。

合わせ買い

税込780円のものを3つ買うと税抜合計が 722 * 3 = 2166] 円になる。この税抜合計2166円に対して税込価格を算出すると 2166 x 1.08 = 2239.28 となり、四捨五入して税込2339円になる。「780円のものを3つ」買ったはずなのに!

同様に税込680円のものを3つ買うと税抜合計が 630 x 2 = 1260 円になる。この税抜合計1260円に対して税込価格を算出すると 1260 x 1.08 = 1360.8 となり、四捨五入して税込1361円になる。「680円のものを2つ」買ったはずなのに!

ここでは端数処理を四捨五入 round で扱ったが、切り上げ ceil や切り捨て floor にしても同じ問題が起こる。

問題の構造

消費税が8% (0.08) であることによって、素朴な掛け算だけでは計算結果が整数に閉じない。そこで、round/floor/ceil あたりの端数処理を加えることになるが、この端数処理のせいで分配法則が成り立たなくなる。

つまり、税抜価格から税込価格を算出する関数 f について一般には

f:id:s_osa:20190329110602p:plain

が成り立たない。

解決策

税抜価格算出時の端数処理を floor にする

合わせ買いしたときにお客さんが損をしないようにする。

つまり、

f:id:s_osa:20190329110632p:plain

が常に成り立つようにする。

メリットはお客さんが損をすることがない。 デメリットは「利益が減る」「1円のお釣りが発生するケースが増える」あたり。

税込価格ではなく「参考税込価格」などとしながら、実際に運用されているのもよく見かける。

個々の商品に対して税額計算する

右辺を使うようにする。

これができるケースならシンプルで良さそう。

税込・税抜の併記をやめる

一番シンプルっぽいが、この問題にぶつかってる時点でこの選択肢を取れる場合は少なそう。ただ、本当に無理なのか問い直してみる価値はある。

消費税率を変更する

消費税率が8% (0.08)だから素朴な掛け算の結果が整数に閉じない。

つまり、消費税率が整数(0%, 100%, 200%, ..., 100 * n %, ...)であれば、整数に閉じるようになる。

通貨を変更する

我々は暗黙のうちに通貨が整数として定義されていることを受け入れてしまっている。

通貨の定義域が有理数に拡張されれば、8%の消費税を掛けた結果も有理数に閉じる。

おわりに

現実世界はたいへん。 すべての物事を設計するときに simplicity 大切にしてほしい。

ガッと書いたので漏れなどあるかも。

2018年振り返り

例年通り、簡単に今年を振り返ってみます。

料理

アイドルの誕生日にケーキをつくったり会社の飲み会で唐揚げを10kg以上つくったりと、わりと料理した年だったように思う。

ケーキは普通の料理より遊べることを発見したので、機会があればまたつくりたいが、設備が整ったキッチンを失ってしまったのでどうにかする必要がある。

s-dev talks

organizer のひとりとして、s-dev talks を立ち上げた。

s-dev-talks.connpass.com

勉強会を主催するということがそもそも初めてだったが、幸いにもいろんな人が参加してくれていてめっちゃ嬉しい。

継続的に開催していくのは決して楽ではないんだけど、立ち上げ時に「こうしたい!」と思っていたことは軒並み叶っている。ありがてぇ。

今後も、より良いコミュニティを目指してやっていきたい。

身の振り方を考えた

たぶんこれが今年を象徴する出来事。

異動して今までとは違う領域に触れてみたり初めての転職を決意したりした。

周囲の人達には迷惑をかけたと思ってるけど、自分の人生に責任を持てるのは自分だけなので、いろいろ考えた上で迷惑をかけると思いながらも思うようにさせてもらった。 *1

去年・一昨年の振り返りでは「挑戦と失敗が足りない」とか「覚悟が必要」とか言ってたけど、そういう意味では今年は一歩踏み出せたのかもしれない。

とはいえ、まだ一歩踏み出しただけなので、本当に重要なのはこれからですね。がんばります。

おわりに

今年1年間、本当にありがとうございました。

*1:@関係者各位 その節はすみませんでした & ありがとうございました。

クックパッド株式会社を退職しました。

2018-11-22 を最終出社日としてクックパッド株式会社を退職しました。 アルバイトを含めると、2015-04-16 入社なので、3年9ヶ月ほどいたことになります。

f:id:s_osa:20181122222312j:plain

ひとつの節目ということで退職エントリを書いておこうと思います。

在籍中にやったこと

大きく分けると以下の2つです。

クックパッド料理教室の開発

クックパッド料理教室というサービスをつくっていました。*1

時期によって増減するんですが、だいたいエンジニアが5人くらい、デザイナー・ディレクター・サポート・マーケティング・営業などの人たちを含めて20人くらいのチームでした。

この時期には、技術的なことだけでなく《サービスをつくる》ということについて、めちゃくちゃ多くのことを学ばせてもらいました。 間違いなく、この時の経験が s-dev talks を立ち上げるモチベーションになっています。

多くのことを学ばせてもらったにもかかわらず、サービスを軌道に乗せることができなかったのが申し訳ないです。

決済基盤の開発・運用

3年ほどサービスに携わったころに「もう少し裏側も触ってみたい」と思って相談した結果、異動した先が技術部決済基盤グループでした。

上記の料理教室時代にも自分のサービスの決済は触っていたんですが、他のサービスを含めクックパッドの関連サービスで広く使われている決済基盤を開発するのはプレッシャーを感じながらも良い経験でした。

また、決済は運用が結構重くて「新規開発をしつつも運用もやる、運用をやりつつも新規開発もする」という課題にどういう風に対処していくかを考えはじめるきっかけになったりもしました。

なんかめっちゃバズった技術基礎研修資料とかもこの時期の仕事です。

なぜ辞めるのか

理由はシンプルで2つだけです。

  • やりたいことができた
  • 自分が1人しかいない

昔から付き合いがある人に声をかけてもらって、話を聴くうちにやる気が高まってきたところで自分が1人しかいないことに気づいたので仕方なく辞めるという感じです。 (付け加えるなら、自分がそろそろいい歳になってきていろいろ振り返ってみたときに「今までに大きい失敗をしてない」ということは少し気になっていて、リスクを取りに行きたいという気持ちもある)

ともあれ、嫌になったから辞めるというわけではないです。

クックパッドという会社は Ruby を書き始めてしばらく経った頃から憧れの会社で、インターンダメ元で受けてたくらいなんですが、なんやかんやあって入社できて、入ってみたらインターネット越しに眺めていた《すごいエンジニア》がいっぱいいて、毎年入ってくる新卒も恐ろしく優秀で*2、エンジニア以外も含めた同僚が誠実で、情報の透明性が高くて、働きやすい良い会社だと思っています。

もちろん、現実に存在する会社なので良いところだけじゃなくてしんどいこととかもなくはないんですが、それについての変えていこうと思えるし、それができる会社だと思っています。

もしクックパッドに興味がある人がいるなら(もちろん人によって合う合わないはあるだろうけど)、「良い会社だよ」と胸を張って言えるし、自分がもう1人いるなら残していきたいと思っています。

これからやること

詳しくはまた年明けくらいにブログを書こうと思っていますが、八百屋をテックカンパニーにする仕事をします。

事業領域も会社のフェイズも今までとは全然違うところで、今までと変わらず《技術で問題を解決する》ということに向き合っていきます。

おわりに

特に引っ越しとかはしないですし、次の勤務地も近所です。

詳しくは飲みにでも行って話しましょう。

おまけ

送別会の様子

*1:僕の異動後にリブランディングして、今は Cookpad Do! というサービスになっています。

*2:マジで。