Cloudinaryの料金を調べてまとめてみた。無料プランでどれくらい使えるのか？

## 背景
画像のホスティングおよび最適化、編集のために[Cloudinary](https://console.cloudinary.com/invites/lpov9zyyucivvxsnalc5/ucs1spracoegjsiwmoh5)の利用を検討したのですが、
料金が不透明で怖かったので細かく調べてまとめてみました。

## この記事のゴール
読者が、ざっくりどのくらいの料金がかかりそうか分かる

## プラン
![ScreenShot_2022-11-19_00-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267536/4189fd63-db07-c8a8-6d75-5c56bfba2620.png)


## 無料プランでどこまでいけるか
無料プランだと**25クレジット**与えられ、自由に使えるという形になっています。

1クレジットにつき、以下のように利用できます。
- 1k Monthly Transformations もしくは
- 1GB Managed Storage もしくは
- 1GB Monthly Net Viewing Bandwidth 


そのため、無料プランの場合には25クレジット与えられるため、以下のように利用できます。
- 25k Monthly Transformations もしくは
- 25GB Managed Storage もしくは
- 25GB Monthly Net Viewing Bandwidth 

まず、これら3つの要素が or (=もしくは) と書かれており、andではない点に注意が必要です。

次に、それぞれの項目については、以下のように説明があります。
> **Monthly Transformations** - 過去30日以内にアップロードされたオリジナルと派生物（画像やビデオフレーム）を含む、新しく処理されたすべてのアセットの数。

> **Managed Storage** - Cloudinaryアカウントに保存されている、すべてのアセットの累積サイズです。

> **Monthly Net Viewing Bandwidth** - 過去30日以内にあなたのアカウントから配信されたコンテンツの総帯域幅です。

それぞれ、さらに詳しく説明します。

## Monthly Transformationsとは
Transformationsは「変換」のことであり、Cloudinaryの基本機能の画像等の変換や編集処理のことです。
変換は、以下のようなときに1回発生します。
- 最初のアップロード時
- リサイズなどの編集時

ただし、リサイズ時に他の編集を行った場合でもまとめて1回としてカウントしてくれます。
たとえば、リサイズおよびBlur(ぼかし)および拡張子変換をおこなっても、まとめて1回です。

## Managed Storageとは
Storageに関しては説明不要でしょう。単純に全てのファイル容量ですね。

## Monthly Net Viewing Bandwidthとは
このBandwidthというのが実はややこしいので、公式ヘルプサイトの文言をそのまま翻訳して紹介しておきます。

>表示/ダウンロードされたアセットごとに、リクエストされたアセットの**コピーを配信するために使用されたデータがカウントされます**。変換オプションを使用して配信されたアセットのファイル サイズを縮小する場合、**元のアセットのサイズではなく、配信された実際のコピーのサイズがカウントされます**。「ミッドグレス」帯域幅はカウントされず、リクエストごとに追加料金が発生し、異なる地理的リージョンのトラフィック、HTTPS リクエスト、または発信元へのトラフィックが発生します。アセットを削除または上書きするときに要求された場合、CDN の無効化に対する追加費用も発生しません。

たとえば、10MBの画像ファイルがあっても、変換後の1MBのファイルが配信されたら、1MBしか配信されていないことになりますよ。心配しないでくださいね、ということでしょう。

それが、ただのBandwidthではなく「Net Viewing Bandwidth」としている理由なのでしょう。

## その他の違い
基本的には上記の3つの項目でUsage-Basedな料金プランになっているのですが、
しかし、その違いだけではありません。

以下の細かな違いがあるので、チェックしておく必要があります。

![ScreenShot_2022-11-18_23-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267536/e58566f2-79ec-0cd5-cb7b-63d18d22f4a1.png)

まず、無料プランでは画像については1ファイルにつき10MBまで。動画については100MBまで。という制限があります。それがプランをアップグレードするにつれて増えていきます。

ただし、10MBの画像ファイルってかなりデカいので基本的には気にするほどの大きさではありませんね。しかし、動画の100MBは軽くいってしまうと思うので気をつけてください。

次に、この画像には写っていませんが、有料プランにするとAmazon S3やGoogle Cloud Storageにバックアップしておくというオプションが利用できます。良いですね。
ただし、もちろんそっちのストレージ料金はかかりますよ、とのことです。

また、独自ドメインからの配信という機能もAdvancedプラン（月額249ドル!)で利用できます。サービスが大きくなれば確かに使いたいかもしれないですね。


## 利用料を抑えるためにできること
このようなプランだと、割と無料プランを超えてしまうことは普通に想定できますよね。
そのため、できる限り利用料金を抑えるためにできることを考えてみました。

### Transformationsの回数を減らす
まず、Transformations、つまり変換の回数を減らします。不要な変換は行わないようにしましょう。

### アップロードされるファイルサイズを減らしてStorageを節約
ファイルサイズに関しては、アップロード時にそもそもファイルサイズを減らす工夫ができるでしょう。

たとえば、アプリケーションにおけるアップロード時に、バックエンドで画像を .png => .webp 形式の画像に変換してからCloudinaryにあげるようなことが考えられます。また、拡張子だけでなく単純にロスレス圧縮をおこなってからCloudinaryにあげるのも良いでしょう。

### 配信されるBandwidthを減らす
Bandwidthとしてカウントされるのは「実際に配信された形式のファイル」とのことなので、rawファイルではなく、変換後のファイルです。

そのため、配信時には .webp で配信するとか、自動最適化オプションをつけて配信するとか、Qualityを80にして配信するといったことが考えられます。

また、画像のクオリティが求められない場面においては、その画像はQualityや画像サイズを落としたサムネイル版のファイルを配信するのも良いでしょう。

## 参考
[Cloudinary公式サイト](https://console.cloudinary.com/invites/lpov9zyyucivvxsnalc5/ucs1spracoegjsiwmoh5)