お店の機器とシステムをつなぐ仕事をしています。
レシートプリンターで何かを印刷しようとすると、まずメーカーごとのコマンドにぶつかります。ESC/POS、StarPRNT……と方言があって、文字を大きくする・罫線を引く・用紙を切るのにも、それぞれバイト列を調べて組む必要があるんですよね。
そこで今回は、**レシートを Markdown のようなテキストで書くだけで、プリンターのコマンドや SVG の画像に変換してくれる OSS「receiptline」**を紹介します。
内容は 2026 年 10 月時点の公式 README・npm の情報です。
receiptline とは
- リポジトリ:https://github.com/receiptline/receiptline
- ライセンス:Apache-2.0
- 最新版:4.0.4(npm・2026-07-31 公開)
- 公開元:Open Foodservice System Consortium(OFSC)
README の一言は「Markdown for receipts.」。名前は Receipt と Streamline を合わせた造語だそうです。
対応しているのは、エプソン TM、セイコーインスツル RP、スター精密 MC、シチズン CT、富士通 FP の各シリーズです。
まずはブラウザで試せます
インストール不要で、公式の ReceiptLine Designer で書いたものがその場でプレビューされます。
👉 https://receiptline.github.io/designer/
左に書くと右にレシートの見た目が出るので、記法を覚えるのはここが一番早いです。
記法の基本
列と寄せ
列の区切りは | です。README では「列は | に磁石のように引き寄せられる」と説明されていて、空白をどちら側に置くかで寄せが決まります。
-
|列 |(右だけ空ける)→ 左寄せ -
| 列|(左だけ空ける)→ 右寄せ -
| 列 |(両側を空ける)・区切りの無い 1 行 → 中央
README の例(2 列の表+罫線+横 2 倍):
Asparagus | 0.99
Broccoli | 1.99
Carrot | 2.99
---
^TOTAL | ^5.97
文字の装飾
| 記法 | 意味 |
|---|---|
_ |
下線 |
" |
強調(Emphasis) |
` |
反転 |
^ |
横 2 倍 |
^^ |
縦 2 倍 |
^^^ |
2 倍サイズ(^ を増やすと 6 倍まで) |
~ |
空白 |
罫線と用紙カット
-
-だけの行 → 水平の罫線 -
=だけの行 → 用紙カット
プロパティ({キー: 値})
1 列だけの行に {キー: 値; キー: 値} と書くと、レイアウトや画像・コードを指定できます。日本語の例(公式の example から抜粋):
{border:line}
^領 収 証
{border:space}
{width:*,2,10}
ビール | 2| ¥1,300
{width:*,2,10} で列の幅を、{border:line} で列の境界を縦線にしています。
バーコードと QR コード
{code:2012345678903;option:ean,hri}
option に種類(upc ean/jan code39 itf codabar/nw7 code93 code128)を書きます。hri を付けると下に数字が出ます。QR コードは option に qrcode を指定します。
画像は {image: <base64 の PNG>} で埋め込めます(モノクロ推奨)。
Node.js から使う
npm install receiptline
README の最小の例です。
const receiptline = require('receiptline');
const doc = '{code:2012345678903;option:ean,hri}';
const display = { cpl: 42, encoding: 'multilingual' };
const svg = receiptline.transform(doc, display);
transform(doc, printer) の第 2 引数で、何に変換するかを決めます。
| オプション | 意味 |
|---|---|
cpl |
1 行の文字数(既定 48) |
encoding |
文字コード。日本語は cp932 または shiftjis
|
command |
出力の種類(既定 svg) |
cutting |
用紙をカットするか(既定 true) |
spacing |
行間を空けるか(既定 false) |
gradient |
画像を写真向けに処理するか(既定 true) |
command には、たとえば次のようなものがあります(全部は README の Printer configuration を参照)。
-
svg(画面表示用)・text(プレーンテキスト) -
escpos/epson/sii/citizen/fit(ESC/POS 系) -
starmbcs(スター精密 StarPRNT の日本語)・starlinembcs(Star Line Mode の日本語)
同じテキストから、画面のプレビュー(SVG)と印刷用のコマンドの両方を作れるのがうれしいところです。
TypeScript の型定義も同梱されています。ブラウザでも lib/receiptline.js を読み込めば window.receiptline として使えます。
プリンターへ送るには
ここは注意点で、README には「プリンターとの通信・ステータス処理・エラー処理は範囲外」と明記されています。receiptline が作るのは送るためのバイト列までです。
送る部分は、公式の周辺ツールが用意されています。
-
ReceiptIO(CLI):IP アドレスを指定して、そのまま印刷できます
receiptio -d 192.168.192.168 -c 42 example.receipt - リポジトリの example/nodejs:Web フォームの入力をサーバーでコマンドに変換して、ソケットでプリンターへ送る例
- Receipt.js:ブラウザ用の SDK(Web Serial で印刷)
まとめ
- レシートをテキストで書いて、SVG にもプリンターのコマンドにも変換できる
- 記法は
|と空白で寄せ、-で罫線、=でカット、^で拡大、とシンプル - まずは Designer で触ってみるのがおすすめです
メーカーごとのコマンド表と格闘する前に、一度試してみてください 🙌
参考(公式)
- receiptline(GitHub):https://github.com/receiptline/receiptline
- npm:https://www.npmjs.com/package/receiptline
- ReceiptLine Designer:https://receiptline.github.io/designer/
- ReceiptIO:https://github.com/receiptline/receiptio
お店のプリンター・決済端末などの機器と、Web やアプリをつなぐ開発をお手伝いしています。
👉 接続開発サポート|MonoUni