📑
receiptlineをラズパイとHonoで扱う
receiptlineとは?
OSFCが作成しているレシート記述言語です。ほぼマークダウンに近い書き心地でレシートを記述できます。素晴らしいです。
honoといったフレームワークで扱う際は、receiptlineではなくreceiptioを使ったほうが使いやすいと思います。
試してみたい方はこちら。
ラズパイへのhonoとreceiptlineのインストール
nvm → pnpm → hono → receiptio の流れでインストールしていきます。
nvmのインストール
こちらに沿ってインストールします。
NVMのインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
パスの設定
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
nodeのインストール(最新のLTSを入れる場合)
nvm install --lts
pnpmのインストール
npm install -g pnpm
honoの設定
今回はprinter-app
というディレクトリにhonoを構成していきます。
pnpm create hono printer-app
cd printer-app
receiptioのインストール
pnpm add receiptio
lp
グループにユーザーを入れます。
sudo gpasswd -a USER lp
再起動します。
sudo reboot
これでラズパイで使う準備が整いました。
最後にindex.tsを編集する。
./printer-app/src/index.ts
を下記のように編集していきます。
今回は3000ポートで待ち受けをし、
POSTされたreceiptlineをUSB接続したサーマルプリンターで印刷するように設定しています。
corsの設定などはよしなにしていきます。
server.ts
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
import { cors } from 'hono/cors'
import * as receiptIo from 'receiptio'
const app = new Hono()
app.use(cors());
app.post('/print',async(c)=>{
const {markdown} =await c.req.json()
console.log(markdown);
receiptIo.print(markdown,'-d /dev/usb/lp0 -l ja -p -c 42');
return c.text('Printed!')
})
const port = 3000
console.log(`Server is running on port ${port}`)
serve({
fetch: app.fetch,
port
})
後はpackage.json
に以下の通りstart
を追記します。
package.json
{
"scripts": {
"dev": "tsx watch src/index.ts",
+ "start": "tsx src/index.ts"
},
"dependencies": {
"@hono/node-server": "^1.11.1",
"hono": "^4.3.1",
"receiptio": "^1.9.0"
},
"devDependencies": {
"@types/node": "^20.11.17",
"tsx": "^4.7.1"
}
}
最後にpnpm start
するとPOSTされたreceiptlineがそのまま印刷されるようになると思います。
デーモンで起動するには
pm2
をインストールします。
npm install pm2 -g
必ずnpmでインストールする。
そして起動します。
pm2 --name printer-app start npm -- start
これでデーモン起動できると思います。
Discussion