Welcome to telecotele.com » Projects

同人サークル向け会計システムの製作

同人イベントへのサークル参加にあたってレジを製作しました。

UPDATE

tags: store jvma esl comiket

同人サークル向け会計システムの製作のカバー画像

はじめに

同人イベント参加のときにレジのようなものを作ったのでここで自慢します。

Ver.1.0(2016年冬~)

最初にイベントへ参加したときです。 参加当日の数日前に

  • ノートPC
  • バーコードリーダー
  • レシートプリンタ

を組み合わせて作りました。 頒布物にはISDNのバーコードが振られており、これをバーコードリーダーで読み取ることで、レシートが発行されるようになっています。

試作の様子は次の図のとおり、

Ver.1.0試作の様子 Ver.1.0試作の様子

当日、机の上は次の図のようになっていました。

Ver.1.0設営の様子 Ver.1.0設営の様子

Ver.1.1(2017年春~)

Ver.1.0と比べ、

  • ノートPCの代わりにRaspberry Pi Zeroを使うようになった
  • カスタマディスプレイも導入した

が差分です。 レシートプリンタとカスタマディスプレイの操作で解析した内容が活かされています。

設営の様子は次のとおりです。

Ver.1.1設営の様子 Ver.1.1設営の様子

ノートPCが無くなったことでGUIが消え、何か問題があっても対応できなくなりました(完)

Ver.1.1 Rev.B(2017年秋~)

無印のVer.1.1と比べ、

  • バーコードリーダーが東芝テック製に変更(プロっぽいので)
  • レシートプリンタも東芝テック製のものを追加(何に使っていたのかは覚えていない)

が差分です。

当時は大量に在庫を抱え、イベント帰りに大雨が降っていてレシートプリンタを水たまりに落としてダメにしたり、 自転車を無施錠で停めてしまい盗まれ、さらに自転車の鍵と共に家の鍵も挿したまま盗られてしまい散々な時期でした。 もし家の鍵を開けられて侵入されたときに気付けるよう、空き缶で結界を張っていたことが懐かしいです。

結界の様子 結界の様子

(知恵袋: 賃貸の場合は管理会社にすぐ連絡しましょう。速攻で鍵を変えてくれます。盗難届を出せば鍵交換費用も保険でなんとかなります。うーn最高!)

Ver.2.0(2017年冬~)

これまでのVer.と比べて

  • レシートプリンタを使わなくなった
  • 電子棚札導入
  • キャッシュレス決済導入
  • (キャッシュレス導入に必要になるので)iPadを導入

が差分です。

レシート自体は残しましたが「その場での印刷」はやめて、事前に印刷するようになりました。 そのため、当日の設営ではレシートプリンタは要りません。

また電子棚札については、電子棚札の解析 ;-)の内容を活かしました。

また、キャッシュレス決済については主にSquare、と少しだけpixiv PAYの導入です。 Squareについては当時イヤホンジャックを使うタイプの端末で(これしか無く)、ICまたは磁気ストライプのクレジットカード決済を受け入れていました。 クレジットカードの差し込みがしやすくなるよう、補助ガイドをアクリル板で作ったりもしていました(次図)。

Squareの端末とガイド Squareの端末とガイド

Square(やpixiv PAY)の導入には、スマホかタブレット端末が必要となります。 個人のスマホでも良かったのですが、たとえばサークル主のスマホで対応する?サークル主が離れて売り子だけになった場合は?など考えると、別途専用にスマホかタブレットを用意したいです。

でも通信回線がなぁ…使うときだけ課金出来て月額0円というのが理想だけどそんなの無いよな…と思ったら、Apple SIMを使えばそうしたことが出来るようです。 いま(2024年時点)ならpovoという選択肢もありますが当時はサービス前、しかもApple SIMなら大手キャリアの回線が使えていました。 ということで通信回線はApple SIMを使う前提とし、Apple SIMが使えるのはiPadだけだったので自動的にiPadを使うことになりました。

せっかくiPadを用意したので、簡易的なレジの操作画面としても使うことにしました。 Web UIから頒布物を選択すると、SquareやpixivPAYのアプリと連動してそのまま会計できるような構成(再度SquareやpixivPAYの画面で選び直す必要が無い)です。 Squareアプリとの連携は公式に提供するPoint of Sale APIを利用しました。 pixivPAYには連携機能は無かったのですが、Bluetoothキーボードとして振る舞うAdafruit Bluefruit LE SPI Friendと、iOSのスイッチコントロール(機能のうちの一つで特定のキー入力で特定位置に画面タップが行える)を利用して無理やり外部のプログラムから操作しました。

Ver.2.0 Rev.B(2018年冬~)

無印のVer.2.0に比べて、

  • 交通系IC決済導入
  • PayPay決済導入

が差分です。設営の様子は次のとおりです。

Ver.2.0 Rev.B設営の様子 Ver.2.0 Rev.B設営の様子

交通系IC決済については以前から導入したかったです。 しかし、次の表のとおりサービス各社に申し込んでも審査が通らない状態でした。

申し込み時期社名・サービス名審査結果
2017年9月Rペイ即落ち
2018年7月Rペイ(再挑戦)何度かやり取りがあるもダメ
8月Aペイ激落ち
8月R社可決の見込みなしで強制終了
8月AR社常設店舗が必要で要件を満たせず
9月A社即落ち
9月U社何往復かやりとりするもダメ
9月J社即落ち

最終的にSTORES決済(当時はCoiney)に申し込んだところ、審査に通り交通系IC決済が扱えるようになりました。 このSTORES決済もiPad上のアプリを使って決済するタイプで、外部アプリからの連動方法も用意されていたのでそれを使っています。

また、PayPay決済については当時サービスが開始されたばかりのころです。 一応加盟店申請してみるかくらいで申し込むと、普通に通りPayPay決済が扱えるようになりました。 当時(特に個別の加盟店には)決済アプリの提供はなく、加盟店店頭に貼り出されたQRコードを利用者が読み取り金額を入力して決済する方式(ユーザースキャン)のみだったため、iPad側との連携はしていません。

Ver.2.1(2019年春~)

これまでと比べて、

  • Square Stand + Square Readerの導入
  • PayPay決済をストアスキャン方式に変更

が差分です。設営の様子は次のとおりです。

Ver.2.1設営の様子 Ver.2.1設営の様子

この頃、Squareが「Square Reader」(2024年現在では「第1世代」と呼ばれる)を発売しました。 クレジットカードのEMV Contactless決済に対応し、外部との接続インターフェースもイヤホンジャックからBluetoothに変更となっています。 さらに、別途Square Stand(これも現在は「第1世代」と呼ばれる)と専用ドッグも用意すればiPadと有線での接続も可能です。 イベント会場ではBluetoothが繋がらない可能性もあり、ここではその構成をとっていました。

ただ、Square Standだけはアメリカで購入した海外版(次図)を使っていました。 確か国内の販売価格よりも安かったような気がします。普通に使えました。

海外版Square Stand(帰国時に無事 "NOTICE OF BAGGAGE INSPECTION" の紙が入っていた) 海外版Square Stand(帰国時に無事 “NOTICE OF BAGGAGE INSPECTION” の紙が入っていた)

そのSquare Standには海外版のSquare Reader(次図)も同梱されていましたが、これは日本版と仕様が異なり技適も無いため使い物にはなりません。

海外版Square Reader(と、海外であることを示すために撮ったスイッチパネル。カバー周囲がコーキングされているのが新鮮) 海外版Square Reader(と、海外であることを示すために撮ったスイッチパネル。カバー周囲がコーキングされているのが新鮮)

また、PayPay決済についてはストアスキャン方式を利用したく、APIを提供している決済代行会社と契約しました。 (これによってPayPay以外のバーコード決済も使えるようになりました) 加盟店がやることはユーザのバーコードを読み取ってそのAPIを叩けば良いです。

バーコードの読み取りについては、(PayPayだけなら1次元のみでも良いですが)一応2次元バーコードも読めるようにしたほうが良いかな?と思い、いろいろ試していました。 いつから使い始めたかは覚えていませんが、“Honeywell Xenon 1900” は中古なら安価で性能も良かったのでしばらくこればっかり使っていたと思います。

Ver.2.2(2021年冬~)

これまでと比べて、

  • Square Terminal導入
  • STORES決済を使わなくなった

が差分です。設営の様子は次のとおりです。

Ver.2.2設営の様子 Ver.2.2設営の様子

2021年春にSquare Terminalが発売されました。 スタンドアロンの決済端末で、Wi-FiまたはEthernetでインターネットに接続すれば利用できるようになります。 同時に、Squareでも(審査次第で)交通系IC、iD、QUICPayが扱えるようになりました。 これを導入し使い始めたのがこのときです。

無事交通系IC、iD、QUICPayの審査も通り、従来から使えるクレジットカード決済も含めてその辺が1台で処理できるようになりました。 そしてこれによりSTORES決済が不要となりました…。 残しても良いと言えば良いのですが、STORES決済の端末はBluetoothのみの接続となりイベント会場の状況によってはうまく繋がらないことがあります。 なんとか導波管のような機構で繋げられないか試したり、端末製造元のMiuraのSDKを使ってなんとか有線で繋げられないか考えたこともありますが、Square Terminalを使うだけで済むならその方が楽です。

なお、Square Terminalについては従来のSquare Readerと方法は変わりますが、Terminal APIを利用すれば外部アプリとの連携も可能で、ここではこれを利用しています。 ちなみに連携用の画面は次の図のような感じです。

Ver.2.2連携用画面 Ver.2.2連携用画面

金額を確定させ「クレジットカード」「交通系IC」「iD」「QUICPay」のボタンを押せば、Square Terminalの画面が起動し指定した金額で決済しようとします。 また、(Square Terminalと関係無い)「QRコード決済」のボタンを押せば、バーコードリーダーが起動し利用者が提示したコードを読み取ると決済代行会社のAPIを叩き決済しようとします。

Ver.3.0(2022年夏~)

これまでと比べて、

  • 現金の受け渡しを自動化した
  • バーコードリーダーをQK30に変更した

が差分です。設営の様子は次のとおりです(@sugerestのtweetより)。

筐体の設計は次の図のような感じで、

Ver.3.0 設計図 Ver.3.0 設計図

構成図は次の図のような感じです。

Ver.3.0 構成図 Ver.3.0 構成図

これで現金に触れずに会計できるようになりました。 理由はそう!感染症対策で~というのは半分建前で、本音はコインメックとビルバリを扱ってみたかったからです。 この辺については JVMA方式の調査 に詳細があります。

バーコードリーダーについてもこの機器に組み込みたく、QK30を使ってみました。 普通に使えています。

また、これらの機器には電源が必要です。 これまで、だいぶ前に買った容量小さめのポータブル電源をだましだまし使ってきましたが、そろそろ限界を感じました。 とはいえ、大容量のポータブル電源は値段もそれなりです。 おそらく年に数回使うだけになる、あまり使わないのに場所を取って経年劣化だけしていくことになるのでは?という懸念があります。 そこで、ここではポータブル電源をレンタルして使うことにしました。 副次的ですが宅配便で受け渡す場合、 発送先をイベント参加のために宿泊しているホテル宛にできたり、 会場から直で返送も出来たりしてこの点も楽でした。

Ver.3.1(2023年夏)

これまでと比べて、

  • 2000円札対応
  • 省スペース化した
  • 前面にパネルを付けた

が差分です。設営の様子は次のとおりです(@sugerestのtweetより)。

あと次の図もありました。

Ver.3.1設営の様子 その1 Ver.3.1設営の様子 その1

Ver.3.1設営の様子 その2 Ver.3.1設営の様子 その2

2000円札については、2000円札取扱銀行 - 二千円札@wikiを参考に現物を入手して検証し対応しました。 省スペース化については設計の見直しで実現しています。 また、前面パネルについてはFDM_TonerTransferで実現しました。

まとめ

以上、自慢でした。 結構やっていましたね。

これをやって何になったか?う~~~ん・・・・・・

おまけ: 心残り

おまけとして心残りも述べさせてください。

音声認識したかった

「新刊1部、QUICPayで」と言われたら自動で決済できるようにすればオペレーションを簡素に出来たかも知れないです。

ただ、来場者側の発話を認識する? それは無断で音声を録音していることになるのでは…という懸念があって進めていませんでした。 ただ、別にこれは「売り子側が言い直す」「売り子に(許可を得たうえで)ピンマイクを付けてそこだけ認識する」ようにすれば良かったかも知れません。

実装についても当初は「新刊」「交通系IC」「QUICPay」のような単語のみをウェイクワード認識のように行う? Vosk?Whisperを使う?と思っていましたが、まずWeb Speech APIを試すくらいはしても良かったなと思います。 いや、そう言うならいま試せという話で、Webページでブラウザの音声認識機能を使おう - Web Speech API Speech Recognition #JavaScript - QiitaWeb Speech API Speech Recognition で数値の認識を統一する #JavaScript - Qiitaを参考にして試してみます。

(※PC ChromeとiOS Safariでは動きましたが他は未確認です。「終わり」と言うとStopします)

ここに結果が表示されます

これは結構いけるんじゃないでしょうか? 微妙にうまくいかないときもありますが、言い直せば良いだけです。 ガヤガヤした会場だとどうなるかは分からないですが、これは咽喉マイクで対策できるかも…と思います。

通信回線を冗長にしたかった

キャッシュレス決済のために通信回線が必要です。 もし通信できないと決済できなくなり、ゆゆ式事態となります。

そこで冗長化を考えますが…これまで普通に通信できており、対応の優先度が低くなっていました。 商用製品を使うのは非現実的なため、もし自前で対応するとしたらOpenMPTCProuterをRedundant Schedulerで使うのが無難かなと思います。

もっと小型化したかった

いや、これ以上は厳しいかも

他にデバイスを持ち込みたかった

このNAYAXの端末とか、

NAYAX VPOS Touch(未解析。元々EV充電スタンドで使われていた模様) NAYAX VPOS Touch(未解析。元々EV充電スタンドで使われていた模様)

ほかグローリーやValtecの中古券売機を購入しており(未解析)、それらを解析して得られるであろう何かとか。

Passbookみたいなのを試せば良かった

これを電子版の配布に使ったり。 ついでにApp Clipも試したり。

システムダウン時の対応

例えばiPadとSquare Terminalの連携が不可能になった場合、なんとか手動で連携して継続するフローを作ったり。