🐇

Re: なんで今さら帳票エンジンを新規開発しているのか

2023/12/06に公開

pdfmeとは


Website: https://pdfme.com/

TypeScriptで書かれたオープンソースの無料の帳票エンジン。
テンプレートを使って宣言的にPDFを作成でき、サーバー、ブラウザどちらでも動作する。

2022年2月にbeta版としてリリースしてから現在 Version3で GitHubではStartが1500、npmではバラツキはあるが週間1万件くらいのダウンロードがある。

自分が把握しているだけで、世界中で採用事例があり、電子カルテ作成、工場の手順書作成、ECのカスタムパッケージ制作ソフトなど、すでにいろんなサービスに組み込まれている。

この記事ではどのようなモチベーションでpdfmeを開発しているのかということを説明したいと思います。

なんで帳票エンジンを新規開発するのか

PDFファイルを作成・編集するという観点ではpdfkitという素晴らしいライブラリが2014年から存在している。また、pdf-libは2018年から登場した後発のライブラリで、上記のpdfkitで実現したPDFファイルの作成機能に加えていくつかの機能を加えてTypeScriptで書かれている。

どちらもオープンソースかつ無料でMITライセンスの元で使うことができる。
上記の素晴らしいライブラリがあるにも関わらずなぜpdfmeを開発しているのか?

最初は一つの関数を作ることろから始まり、大したモチベーションはなかったのだが、やっていくうちに「おれが帳票作成というめんどくさい仕事をこの世からなくしてやる!」という気持ちになってきた。この気持ちが芽生えてきたのは下記の3ステップである。

1. JSONを受け取ってPDFを返す関数を作った 2020年~

  • pdfkit, pdf-libは素晴らしいライブラリだが命令的なコードを書く必要があり、テンプレート数をスケールすることが困難だった
  • 個人開発のプロジェクトで複数の帳票を管理する必要があり、JSONを受け取ってPDFを返す関数を作った
  • なんか便利そうだったのでnpmに公開し、pdfmeの前身となるlabelmakeが完成した

2. 同僚が帳票作成で困っていて、UIがあると良さそうだったので追加 2022年~

  • 当時、労働条件通知書か何かを作っていたが、Jaspersoftで作成していた。実装はかなり複雑で大変そうだった
  • 既存のソリューションはやりたいことに対して複雑だったり、良さそうなソリューションはライセンスが必要だったりとサクッと作成するのが難しそうなことに気がついた
  • パワーポイントみたいに簡単に使えるWYSIWYGを追加し、全身のlabelmakeからpdfmeとして名前を変えてbeta版でリリースした

3. OSSで商用ソフトウェアを塗り替えたい 💥今ここ💥

  • 帳票作成にそもそも問題があることに気がつく。なんでそんなにめんどくさいの?
  • 帳票作成がいつまで経っても面倒な作業でソリューションもモダンにならない理由を考える
    • pdfkitやpdf-libがコミュニティに還元したように、次のレベルでコミュニティに還元する人がいないと状況は変わらない
      • 逆にここのポジションは開いていて、そこを狙っているし、pdfmeによって状況は改善すると思っている
    • 便利そうなサービスは有料という現状に疑問を持つ。無料で使い続けられる選択肢がないの?
      • 0円と1円には導入の観点で大きな違いがある。無料の選択肢があるべき。
  • 帳票の作成はコストもかからずパッと終わらせたい

どのような帳票エンジンを作っているのか

必要十分な帳票機能を実装

シンプルさを捨てず、必要十分な帳票機能を実装することを目指して開発しています。
Version3では「カスタマイズ性」をキーワードにプラグインカスタムテーマ・ラベルの機能をリリースしました。

日本人ということもあって、ラテン文字のみを考慮して開発している製品に比べてCJKフォントを含めるカスタムフォントに関しても簡単に対応できるようにしています。実際にWebsiteへのアクセスで一番多い国は中国だったりします。

しかし、現状はまだニーズによっては必要十分とは言えず、よくあるユースケースである動的に高さが変わるようなテーブルレイアウトには対応できていません。
これに関しては次のVersion4では相対座標レイアウト + 動的テーブルのサポートを計画しています。

オープンソースとコミュニティー

すでに説明しましたが、今のモチベーションはpdfkitやpdf-libがコミュニティに還元したように、次のレベルでのコミュニティへの還元です。

メインの開発は自分ですが、3名程度、日々コントリビュートしてくれる方がいます。特にイギリスのPenny Blackに関してはCTO含め、かなり活発に貢献してくれているありがたい状況です。

もちろんバグ報告、機能提案はGitHub Issuesから行うことができますし、Discordも開放しています。
何かあったらオープンな場で明確な質問であれば、1,2日で自分含めて誰かしらレスしてくれると思います。

無料です

ライブラリで直接のマネタイズはしません。
普通にnpm install して使えます。当たり前ですが、商用利用xとかではないので安心して使ってください。

ただ、開発には普通に時間がかかるので、生きていくためのお金を稼ぐ必要はあります。
なので今はフルタイムで働いています。これからの数年もサイドプロジェクトとしてやっていくつもりです。

あとはpdfmeを使ったサービス、labelmake.jpというものでマネタイズしていたり、以前記事にしましたが、ちょくちょく問い合わせが来るのでそういうのでpdfmeを直接ではなく、活用してマネタイズしています。
https://zenn.dev/hand_dot/articles/82dc55c0cb27e3

サポート(ドキュメントも含む)はユーザーにとって一番ニーズがある場所だと思っているので、将来的にはニーズがあればですが、もっと安心してもらえるように体制を作っていく予定です。
株式会社クリアコードさんのGroongaサポートサービス, OSS開発支援サービス などを参考に考えています。

まとめ

  • 帳票作成をコストもかからずパッと終わらせられる未来を作っています
    • 「PDFの作成は昔はあんなに大変だったよね、あれはなんだったんだろうね」 と言えるようにしていく
  • 地味な領域でもコミュニテイへの還元によって進化していくと信じています
    • まさか数年前に作った関数の一つが今では世界中で動いているとは思わなかった
    • OSSは面白いし熱中できる!また面白い続編が書けるといいなと思っています

pdfmeをどうぞよろしくお願いします!


PS: yagisan-reports開発チームリーダーのterurouさんの記事を拝見し、自分もやる気がでました。そしてこの記事を書こうと思いました。この場を借りてお礼を言わせてください。

yagisan-reportsではpdfmeではまだ実装ができていないレイアウト方法、テーブルなど実装されています。下記の記事、製品も面白いのでチェックしてみてください。
https://zenn.dev/yagisan_reports/articles/4ce548fc8748eb

Discussion