画像のホスティングに Cloudflare Images はいかが?
Webアプリケーションを作る場合に画像のホスティングをどうするのか悩むことがあると思う。
弊社で一番よくあるパターンは「APIにData URI化した画像を送る」。そしてAPI側でそれをAWS S3に保存する。画像のトリミングはフロントエンド側で行い、リサイズはサーバーサイド側で実行する。
画像のパターンをフロントエンド側で調べてバックエンド側に連絡したり、画像側に何か変更があるとバックエンド側に手間をかけてしまう。これが気難しいバックエンドエンジニアが相手だとフロントエンドエンジニアが消耗…といった具合にあまり良くないケースだ。
画像まわりはフロントエンド側で巻き取れないのか?
Cloudflare Images を使ってみよう
Cloudflare Imagesによる画像パイプラインの簡素化と拡張 | Cloudflare
Clouflare Imagesを利用するとWebアプリケーションにおける画像登録・配信のフローは以下のようになる。
- 画面上で画像を選択。必要があればトリミング。
- RemixでCloudflareのDirect Upload APIを実行するAPIを作る。
- Remixのクライアントサイドから上記APIを実行し、ワンタイムアップロードURLを入手する。
- 同じくクライアントサイドからワンタイムアップロードURLに画像をファイル送信。
- レスポンスで画像のIDが入手できる。
- その画像IDを自WebサービスのAPIに登録する。
フロントエンド側でRemix等なにかしらバックエンド処理ができるのが条件になるが、画像系処理をフロントエンド側で巻き取ることができる。
Cloudflare Images は安い
気になるのは料金だ。残念ながらさすがに無料ではない。これが無料だったらCloudflareの収益体系を本当に疑う。管理画面に保存時のコストの説明があった。
100万枚の画像をホストしても月50ドル。これはお安い。
ストレージは、保存されている画像 100,000 枚につき 5 ドルです。
とあるので自分でカスタムして請求額を決めることも可能だ。そして、後述するが自分のストレージを利用することも可能らしい。S3に画像をホストしてどうする?と思うがこれもメリットがある。
Transform images · Cloudflare Image Optimization docs
このTransformという機能は、Cloudflare Image外に保存されている画像に何かしらの加工を加え、Cloudflareを通して配信することが可能な模様。自分の用途だとこれを利用するケースが現状無いのでこれ以上は深掘りをしない。
料金についてのページのドキュメントはこちら。
Pricing · Cloudflare Image Optimization docs
配信について、が重要。
- S3やR2など他の場所に保存された画像を最適化する場合、画像配信の料金は発生しない。
- 価格設定:10万枚の画像配信につき1ドル。
- ブラウザによって要求された画像1枚につき、1回の配信としてカウントされる。
- 例:
- 製品ページに10枚の画像(Images製品内に保存)が表示されている場合
- そのページが1ヶ月間に1万回訪問された場合
- 結果:10万枚の画像配信(10枚 × 1万回)となり、1ドルの請求対象使用量になる。
この料金体系は、Cloudflare Images製品を使用して画像を保存・管理する場合にのみ適用され、外部ストレージからの画像最適化には適用されないことが重要なポイント。
Variants
Create variants · Cloudflare Image Optimization docs
バリアントを使うと、アップロードした画像に対してどのように加工するのかをあらかじめ定義しておくことができる。バリアントは最大100個作成することができる。
これはダッシュボードから作成が可能だ。
ちなみに画像には以下のようなパスでアクセスする。
https://imagedelivery.net/[アカウントハッシュ]/[画像ID]/[バリアント]
バリアントを指定しないとアクセスはできない。デフォルトではPublicというバリアントが付与されている。
Fit Options
Fitプロパティは、幅と高さの寸法をどのように解釈するべきかを記述する。
- Scaledown
- Contain
- Cover
- Crop
- Pad
どれも使いそうなオプションなので詳細をドキュメントを読んでほしい。
あとは画像のメタデータの保存方法も選択できたりする。
バリアントの違いだけで画像のサイズを変更できるのは非常に便利だ。
今回はCloudflare Imagesの基本的な概念をご紹介した。次回は実際に実装に組み込む方法を紹介したい。
Discussion