
はじめに
みなさんは、「ローカル環境ではうまく動いたのにデプロイしたら動かなくなった!」という経験はありますでしょうか?
今回はC#のコードでPDFを生成するためにDinkToPDF
というライブラリを利用した際、ローカル環境では問題なく動作していたにも関わらず、デプロイ環境でPDFが生成されないという問題に遭遇しました。
同様の問題に遭遇した方の助けになればと思い、試行錯誤した解決策を備忘録としてまとめます。また、調査の過程で英語での情報が多かったため、日本語での情報共有に貢献できれば幸いです。
エラーを見てみた
デプロイ後、ログを確認すると、次のようなエラーが神々しく表示されていました。

<省略>/libwkhtmltox.so: cannot open shared object file: No such file or directory
「...いや、ライブラリはちゃんと入れたはずでは?!」と、かなり焦りました。だってローカルでは動いていたんですから。
"見つからない"と言われても、一体どうすれば良いのか途方に暮れました。
解決への道のり - まずは検索から
エラーメッセージを頼りに、まずは検索を開始しました。「libwkhtmltox.so
って一体何者...?」と思いながら調べましたが、ヒットするのはStack OverflowやGitHubのIssueなどで英語の会話ばかり。
サイトの内容を一つ一つ翻訳し、解決策を試していくには時間がかかります。改めて、プログラミングにおいて英語力は必須だと痛感しました。
Dockerfileとの勝負
デプロイ環境ではDockerを使って色々試していたことを思い出し、気分転換にDocker関連の記事を調べていると、「もしかして、これを編集すればうまくいくのでは?」と思い、Dockerfileを編集することに。
結論から言うと、「必要なライブラリがなければ、Dockerfileにインストールするように記述するだけ」でした。当たり前ですが、そこにたどり着くまでが長かった...!
解決策 - Dockerfileの記述追加
Dockerfileに以下の記述を追加しました! (権限がない 等がでたら USER root を書くとうまくいくかもしれません。)
...
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
zlib1g \
fontconfig \
libfreetype6 \
libx11-6 \
libxext6 \
libxrender1 \
curl \
&& curl -o /usr/lib/libwkhtmltox.so \
--location \
https://github.com/rdvojmoc/DinkToPdf/raw/v1.0.8/v0.12.4/64%20bit/libwkhtmltox.so
...
これでライブラリがインストールされ、PDFが出力されるようになりました!...しかし、現実はそう甘くありませんでした。
第二の試練 - 文字化けとの戦い
出力されたPDFの中身を確認すると、日本語部分が綺麗に文字化けしており、豆腐のような状態になっていました。英語や数字は正常に表示されているのに...。
「なんだこの豆腐の羅列...化けてるにしても糸へんの漢字沢山のほうでしょう...?」と思いながらも、一筋縄ではいかないことを悟りました。「C#、PDF、文字化け、豆腐」で検索しても有効な情報は見つからず、途方に暮れかけました。
↓実際のPDF (一部切り取り)

救いの手 - チームメンバーからの助言
「うわ~~~もうだめか~!!!」と思って嘆いていたらチームメンバの一人が「日本語フォント入れてみたら?」と助言してくれたので、藁にも縋る思いで、Dockerfileに日本語フォントのインストール処理を追加しました。
...
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
zlib1g \
fontconfig \
libfreetype6 \
libx11-6 \
libxext6 \
libxrender1 \
curl \
fonts-ipafont-gothic \
fonts-ipafont-mincho \
&& curl -o /usr/lib/libwkhtmltox.so \
--location \
https://github.com/rdvojmoc/DinkToPdf/raw/v1.0.8/v0.12.4/64%20bit/libwkhtmltox.so
...
そして、祈るような気持ちで再度実行した結果...
なんと、文字化けせずにPDFが出力されました!

まとめ
今回はDinkToPDF
を使ったC#コードがデプロイ環境で動かなくなった問題について、解決までの過程をまとめました。
この経験から学んだことは、「問題は一人で抱え込まず、人に頼ることの大切さ」です。
作業中、どうしても詰まって分からなくなった場合、検索や生成AIを使っても解決できない場合は、ぜひ周りの人に相談してみてください。きっと同じような問題に遭遇した経験のある人がいるはずです。
今回の記事が、DinkToPdf
で同様の問題に直面している方、または他のライブラリでデプロイ時のトラブルに遭遇している方の助けになれば幸いです。