PDF生成を自前実装すると、なぜ6か月後に負債になるのか
「この画面をPDFで出せるようにしてください」
要件だけを見ると、小さな追加機能に見えます。
HTMLを作り、ヘッドレスブラウザでPDF化する。あるいはPDFライブラリで文字と罫線を配置する。最初の1種類を出力するだけなら、短期間で実装できることもあります。
問題は、その機能が半年後にも同じ規模であることはほとんどない点です。
最初に増えるのは、帳票の種類ではなく例外
顧客名が長い。住所が2行になる。備考欄だけ文字数が多い。明細が1ページに収まらない。印影を追加したい。会社ごとにロゴを変えたい。税率ごとに集計したい。過去の版を再発行したい。
PDF生成の保守コストは、帳票数よりも例外の組み合わせで増えます。
しかも、画面上で正しく見えることと、PDFで正しく印刷されることは同じではありません。
自前実装で後から発生する7つの負債
- 日本語フォント
- 改ページ
- プレビュー差異
- デザイン変更
- 同期処理の限界
- バージョン管理
- 視覚的な品質保証
作るべきなのはPDFコードではなく、境界
帳票機能を安定させるには、次の3つを分離します。
- 業務データ
- 帳票テンプレート
- PDF生成処理
アプリケーションは、どのテンプレートへどのデータを渡すかだけを決める。デザイン変更はテンプレート側で行う。生成処理はAPIへ任せる。
この境界を作ることで、帳票の変更がアプリケーションの変更にならなくなります。
自前実装が妥当なケース
- 帳票が1種類で、今後もほぼ変わらない
- レイアウトが非常に単純
- 出力件数が少ない
- 専任の保守担当がいる
- データを外部サービスへ送れない明確な制約がある
- PDFレンダリング自体が競争力である
逆に、複数帳票、可変明細、日本語、顧客別デザイン、業務担当による変更、大量生成のいずれかがあるなら、生成基盤を切り出す価値が高くなります。
「一度作れば終わる機能」ではない
帳票生成は、完成後に最も変更要求が届きやすい機能の一つです。
法令、会社情報、ロゴ、振込先、注記、顧客要望、社内ルール。外部要因で書式が変わります。
比較すべきなのは、半年後、1年後に発生する変更・障害・テスト・運用を含む総コストです。
Re:port Flowは、ブラウザで作成したテンプレートへJSONデータを送り、同期・非同期・一括でPDFを生成できます。月30ファイルまで無料でAPIを試せます。
APIドキュメント: https://go.re-port-flow.com/rf30-09