cosense-iconでGoogleフォントが使えるようにした
cosense-iconでGoogleフォントが使えるようにした
前々回→Scrapboxのアイコンをいい感じにサッと作るWebアプリをCloudflare Workersで作る
前回→cosense-iconでランダムで「いい感じ」に色を変える機能を追加した
とアップデートをしてきたが,ここでふと,Googleフォント,使いたいなぁという気持ちになったので,実装してみた.
https://icon.soui.dev/bg-1e40af/fg-ffffff/font-Rampart%20One/%E3%81%93%E3%81%86%E3%81%84%E3%81%86.svg
https://icon.soui.dev/bg-50b8cf/fg-192439/font-Potta%20One/%E3%82%AA%E3%82%B7%E3%83%A3%E3%83%AC%E3%81%AA%5Cn%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88%E3%82%92.svg
https://icon.soui.dev/bg-d1fbf6/fg-22403a/font-Reggae%20One/%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%A8%E5%AC%89%E3%81%97%E3%81%84%5Cn%E3%82%88%E3%81%AD%EF%BC%9F.svg
これの難しい点として
Googleフォントの文字のPathをSVGでどのように作る?
Cloudflare Workersの無料枠でやれるか?
ここまでの実装だと,フォントはユーザのブラウザ内蔵のフォントを使う形をとっていて,ただ文字を埋め込んでいただけだけど,Googleフォントのようなものはそもそもユーザの環境にはないものなので,インストールしてもらう必要がある.
だけど,このサービスはただSVGを返すだけなので,普通のWebサイトのようにフォントをインストールさせるようなことができない.
なので,対策をシンプルに考えれば,これまでと同じURLでアクセスするAPIを提供しつつ,バックエンドのWorkersでGoogleフォントを取得して,フォントのPathになるSVG生成して返せばよさそうなんだけど, Cloudflareの無料プランでは処理時間が足りなさそう(10ms/1リクエスト制限)
なので,Pathの生成をクライアントでやらせようという作戦をとっています.
つまり,エディタ側で作成した時にブラウザ側で
Googleフォントを非同期で取得
フォントからPathのSVGを生成
生成したPath情報をR2に保存する
こんな戦略になっています
ただし,これだとBotとかに無制限に攻撃されて僕のR2がえらいことになってしまいますので,Turnstileを使って不正アクセスを防止しています.
今までのようにURLだけからパッと使えるわけではありませんが,エディタ側でSVGを生成すれば気軽に使えるのでおすすめです.
もちろん今までの機能は引き続き使えます.
#publish #blog