はじめに
請求書や納品書、あるいはデビットノート(Debit Note)といった帳票を、いまだにExcelやWordのテンプレートに手で数字を打ち込んで作っている——そんな現場は少なくないのではないでしょうか。
私が担当した輸入卸の業務も、まさにそうでした。取引ごとにテンプレートを開き、金額を転記し、PDFに書き出す。数が増えるほど、この作業がボディブローのように効いてきます。
この記事では、そうしたテンプレート運用から脱却し、データから帳票を機械的に生成するアプローチの全体像を解説します。使ったのはpdf-libというJavaScriptのライブラリです。
テンプレート運用の限界
属人化と転記ミス
ExcelやWordのテンプレート運用は、始めるのは簡単です。ですが続けていくと、じわじわと問題が溜まっていきます。
一番怖いのが転記ミスです。金額のセルを一つずらして貼り付けた、消費税の計算式が壊れていた、宛先の会社名が前の取引先のまま残っていた——こうしたミスは、帳票という「お金の書類」では致命的です。
そしてもう一つが属人化。「あのファイルの触り方はあの人しか分からない」という状態は、担当者が休んだ瞬間に業務を止めてしまいます。
コピー運用が生む「地層」
テンプレート運用のもう一つの罠が、ファイルのコピーが際限なく増えていくことです。
取引ごとにファイルが増殖。どれが最新版か分からなくなり、古い書式のまま送ってしまう事故も
帳票の実体はデータ。書式はコード側に一元化され、常に同じ品質の帳票が出力される
「先月のあの請求書をベースに…」とコピーを重ねていくと、書式のバージョンがバラバラの「地層」ができあがります。ここから抜け出すには、発想を変える必要がありました。
コードで帳票を生成する発想
「書式」と「データ」を分ける
このアプローチの核心は、帳票を「書式」と「データ」に分けて考えることです。
Excelのテンプレートは、書式とデータがひとつのファイルに混ざっています。だから触るたびに壊れるリスクがあります。一方、コード生成では書式はコード(レイアウトの定義)に、データはデータベースに、それぞれ分かれて存在します。
帳票を作るときは、この2つを合成してPDFを吐き出すだけ。書式を直したいなら、コードを1箇所直せば、以降すべての帳票に反映されます。ここが手作業運用との決定的な違いなんです。
pdf-libで描画する
具体的な生成にはpdf-libを使いました。これはブラウザでもサーバー(Node.js)でも動く、PDFを直接組み立てられるライブラリです。
取引データ・明細(SKU・数量・単価)・宛先情報を用意する
表題・宛先・明細表・合計・振込先などをコードで座標配置
pdf-libがPDFのバイナリを組み立てる
生成したPDFを保管し、必要に応じてダウンロード・送付
テキストの位置や罫線を座標で指定していくので最初は手間ですが、一度組めば以降はデータを変えるだけ。何百枚でも同じ品質で出力できます。
明細作成を効率化する仕組み
帳票の中身で一番手間がかかるのが、明細行の作成です。「どの商品を、何個、いくらで」を1行ずつ埋めていく作業ですね。
ここではSKU検索キャッシュを用意しました。一度引いた商品コード(SKU)の情報を手元に保持しておき、次に同じSKUを打ち込んだときは再検索せずに即座に呼び出せるようにしています。明細を組み立てるスピードが上がり、担当者のストレスも減りました。
帳票の種類と自動化の効果
請求書・納品書・デビットノート
輸入卸の現場では、扱う帳票が一種類ではありません。
これらを別々に手作業で作ると、明細の食い違いが起きがちです。同じデータから生成すれば、請求書と納品書の内容が自動的に一致します。
効いてくる「一貫性」
自動化のわかりやすい効果は時間短縮ですが、私が一番大きいと感じたのは一貫性です。
コード生成がもたらすもの
同じデータソースから生成する限り、帳票同士の数字は必ず一致します。「請求書と納品書で合計が違う」という、あってはならない事故が構造的に起きなくなります。
人間はどうしても間違えます。だからこそ、間違えようがない仕組みに寄せていくことが大切だと考えています。
まとめ
テンプレートの手作業運用から、データによる機械生成へ。この転換によって、転記ミス・属人化・書式のばらつきといった、帳票運用の慢性的な悩みを一気に解消できました。
とはいえ、コードで帳票を作るには乗り越えるべき壁がいくつかあります。それぞれ別記事で掘り下げていますので、あわせてご覧ください。
- 日本語フォントの埋め込み:pdf-libは標準では日本語を出力できません。フォントを埋め込み、かつファイルサイズを抑える工夫を 日本語フォント埋め込みとファイルサイズ最適化 で解説します。
- 宛先・自社プロファイルのマスタ管理:帳票ごとに会社情報を打ち直さない設計を 宛先・自社プロファイルのマスタ管理 で紹介します。
- 保管と再発行:帳票は「作って終わり」ではありません。いつでも同じものを出せる仕組みを 生成PDFの保管と再発行の設計 で解説します。