[chrome-aws-lambda]文字化けする時の簡単な解決方法

2021-02-22

LambdaでPuppeteerを実行する時によく使うモジュールの一つがchrome-aws-lambdaですね。
これを使っている時に文字化けする場合の原因と解決方法を書きます。

原因

このモジュールはLambdaの50mb制限を回避するためにPuppeteerから色々なものを削ぎ落として構成されています。
そして削ぎ落とされたものの一つにFontもあります。
つまり、文字化けの原因は必要なFontがないため、その文字が表示できないので文字化けになります。

解決方法

日本語が文字化けした場合は下記を試してみてください。
他のブログなので紹介されているように.fonts/フォルダーを用意する必要ありません。
この1行で解決します。
公式ページで推薦しているように、CDNを介してフォントを読み込ませています。

const chromium = require('chrome-aws-lambda');
...
// これを追加
await chromium.font('https://raw.githack.com/minoryorg/Noto-Sans-CJK-JP/master/fonts/NotoSansCJKjp-Medium.ttf');
// Or 別のサーブセット
await chromium.font('https://raw.githack.com/ixkaito/NotoSansJP-subset/master/subset/NotoSansJP-Medium.otf');

上記はサブセット済みのFontを設置する一例です。
ここで利用したNotoSansCJKjp-Medium.ttfについて、もしくは他のFontについては下記のURLを見てみてください。
https://github.com/minoryorg/Noto-Sans-CJK-JP/
https://github.com/ixkaito/NotoSansJP-subset
https://github.com/ixkaito/NotoSerifJP-subset

公式ページ

https://github.com/alixaxel/chrome-aws-lambda#fonts