ACR開発のきっかけ
これまでのエンジニア人生において、ソフトウェア開発の大半を小売業や物流業のドメインに捧げてきました。その中で、切っても切り離せない存在だったのが「バーコード」と「ハンディターミナル(HT)」、そして「各種プリンタ」です。
今回は、私が開発している印刷エンジン「ACR」の誕生のきっかけと、そこに込めた技術的なアプローチについてお話しします。
開発のバックボーン
これまで、ハンディターミナルを駆使して以下のような多種多様な業務システムを開発してきました。
小売業: 発注、棚卸、店舗間移動、廃棄、値引シールの発行
物流業: 入出荷検品、倉庫内移動、段ボール・ケース用ラベルの発行
元々は基幹システムの「一サブシステム(周辺機能)」としての位置づけが多かったのですが、時代の変化とともに催事や移動販売のニーズが急増。それらに対応するため、レシートプリンタと連動した「ハンディPOSシステム」の開発なども手がけてきました。
専用ツールの運用コストへの疑問
業務アプリケーションの開発において、避けて通れないのが「帳票システム」です。
世の中には『Crystal Reports』や『ActiveReports』といった素晴らしい専用ツールが存在します。しかし、長年これらを使ったシステムを運用していく中で、そのライセンス費用や運用コストの高さに、徐々に疑問を抱くようになりました。
「もっと軽量で、シンプルで、運用のポータビリティが高い帳票システムを、自分の手で開発できないだろうか?」
これが、独自印刷エンジン「ACR」を開発しようと考えた原点です。
プリンタの基本は「3つの要素」
ACRの開発を進める中で、あるとき「印刷の本質」に気がつきました。
どんなに複雑に見える印刷データも、究極的には以下の3つの基本機能しか使っていないのです。
文字を印字する
線を引く
画像(バーコード)を配置する
システムがやるべきことは、この3つの要素を「どこに(印字座標)」「どのように(フォント、線の太さ、バーコードの種類など)」配置するかを指示するだけです。
ひらめき
「今まで開発してきたレシートやラベルの印刷システムに、このACRの仕組みをそのまま応用できるのではないか?」
「昨今のIPP(Internet Printing Protocol)を活用すれば、プリンタの機種(メーカー)に依存しない、真にポータブルなシステムが作れるのではないか?」
直面した課題(メーカー独自の壁と「ゴミの山」)
しかし、いざレシートやラベルプリンタの世界に目を向けると、現実の壁が立ちはだかります。この分野のシステム開発は、メーカーごとの独自機能(コマンド体系)が非常に多いのです。
そして何より開発者を苦しめるのが、「実機検証」のコストです。
開発・テストには必ず「実機」が必要
レイアウトを1ミリ微調整するたびに、大量のレシートやラベル用紙が消費される
結果として、開発現場には相当な量の「紙のゴミ」が発生する
特に「ラベル用紙」は台紙があるため、レシートロール紙の数倍のコストがかかります。テストを繰り返すだけで、コスト的にも精神的にも非常に厄介な問題でした。
(Mac版 レシート、ラベルデザイナー)
長年の経験を「ACR」に
は長年、さまざまなメーカーのプリンタやハンディターミナルと格闘してきました。だからこそ、その違いや泥臭い苦労が痛いほど分かります。
「文字・線・画像」という3つの基本機能に抽象化し、メーカーごとの仕様差をこのエンジンが吸収できれば、あの実機検証の苦痛やコストから全国のエンジニアを解放できるかもしれない。
そんな想いを胸に、現在ACRの開発をさらに前進させています。同じような領域で苦しんでいるエンジニアの方に、いつかこの成果を届けられれば幸いです。
