おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

wkhtmltopdfの次どうするか問題

wkhtmltopdfというライブラリは、HTMLからPDFを生成してくれるライブラリです。Rubyからだとwicked_pdfpdfkit 経由で使われることが多いです。

さてそんなwkhtmltopdfですが、GitHubリポジトリ を見るとわかるようにアーカイブされてしまっています。公式ページ に経緯が書いてありますが、要約するとwkhtmltopdfが依存しているQtWebkitのメンテが止まったのが原因でメンテが続けられなくなったということのようです。

wkhtmltopdfが参照しているQtWebkitはかなり古いものなので、モダンなブラウザでの描画と差分が出たり、脆弱性を付かれたりする可能性がありそう。なのでなにか別のやり方に乗り換えたい。

選択肢を考えてみる

乗り換え先は具体的に何がいいの、というと僕も自信を持ってこれだ!という解を持っていないのですが、headless chromeを使ってHTMLをPDFに変換するという方法がぱっと思い浮かびます。そしてchromeを動かすライブラリとしては ferrum がいいかな?となっているところです。同系統のgemには他にも grover などのgemがありますが、これはpuppetterを経由してchromeを実行します。ferrumは直接chromeを操作するので、登場人物が一つ減る分運用が楽そう。

しかしそもそもchromeを使ってHTMLをPDFに変換するのってメモリ容量やCPUへの負荷はどれくらいかかるものでしょうか?まだなにも計測していないのですが、wkhtmltopdfのときよりも負荷が高そうな雰囲気を感じます。(もちろん要件次第ですが)Thinreports などの直接PDFを生成するツールを活用したほうが良かったりするかもしれません。

と、以上のように考えていたら煮詰まってきました。そこでいったんここまでの状態でまとめて、PDFに詳しい人からのご意見を聞けたらいいなと思ってブログとして公開しておきます。だれか知見を持っている人アドバイスください :pray:

余談

wkhtmltopdf自体のインストール方法はいくつかありますが、wicked_pdfやPDFKitのREADMEなどで紹介されている wkhtmltopdf_binary_gem を使ってていることが多いかと思います。このgemは現在メンテナンスが滞り気味で、例えばaarch64(M1 mac)用のバイナリに現状対応していません。M1 macで開発していて困っている人、それなりにいるのではないでしょうか。

とりあえずdebianに関してはこのPR で対応済みなので、現状M1で使えなくて困るぞ、というのであればこのブランチを使ってください。