無料画像ホスティングを自分で作る:Cloudflare R2 + PicGo で安定運用
2023 年はブログ画像を GitHub に置き、jsDelivr CDN と組み合わせて運用していました。ところが jsDelivr が中国で使えなくなり、画像がすべてリンク切れに。無料画像ホスティングも試しましたが、突然削除されたり、サービス終了したり。七牛雲や Alibaba Cloud OSS は安定していますが、备案が必要で、超過課金のリスクもあります。
Cloudflare R2 には 10GB の無料ストレージ、月間 100 万回のアップロード、1000 万回の読み取りがあり、何よりエグレス(下り転送)が完全無料です。半年使っても 1 円もかかっておらず、表示速度も十分です。PicGo と組み合わせればワンクリックアップロードで、執筆がとても楽になります。本記事では R2 を選ぶ理由、公開アクセスの設定、PicGo 接続までを整理します。30 分ほどで完了します。
なぜ R2 を画像ホスティングに選ぶのか
R2 を決める前に、いくつかの無料・格安案を比較しました。他案の課題がわかると、R2 が最適解に見えてきます。
他の無料画像ホスティングの問題
GitHub + jsDelivr:かつては定番でしたが、今は使えません。jsDelivr は中国で DNS 汚染により遮断され、画像が表示されません。GitHub に画像を置くのも規約的にグレーで、アップロードのたびに commit が増えます。アカウント停止で画像が一括消失するリスクもあります。
無料公共ホスト(SM.MS、路過図床など):不安定です。画像が削除されたり、サービス終了で記事がリンク切れになる例をよく見ます。ブログの画像資産を全部預けるのはリスクが大きいです。
国内クラウド(七牛雲、Alibaba Cloud OSS、Tencent COS):安定していますが、ドメイン备案が必要です。個人ブログには手間がかかり、超過課金の不安も残ります。
R2 の主な強み
Cloudflare R2 は、個人用画像ホスティングとして現時点で有力な選択肢です。半年使って感じた点をまとめます。
1. 無料枠が十分
- ストレージ:10 GB
- 月間アップロード:100 万回(クラス A)
- 月間読み取り:1000 万回(クラス B)
記事 100 本超・画像 500 枚程度でも 2GB 未満です。10GB なら数年は足ります。超過してもストレージは $0.015/GB/月(1GB あたり月額約 1 円程度)と安いです。
2. エグレス完全無料
S3 や国内 OSS は下り転送に課金があり、アクセスが増えるとストレージより転送料が膨らむことがあります。R2 はエグレス無料です。何度読み込まれても追加料金はかかりません。Cloudflare のグローバル CDN(100 カ国以上、275 都市)で配信するためです。
3. 大手運営で安定
Cloudflare は世界最大級の CDN 事業者のひとつです。突然サービス終了や画像削除の心配が小さいです。個人向けにも寛容な評判があります。
4. S3 API 互換で移行しやすい
MinIO や他の S3 互換サービスへも、設定変更で移行できます。ベンダーロックインのリスクが低いです。
5. 备案不要ですぐ使える
国際サービスのため、独自ドメインに备案は不要です。登録から設定まで 30 分程度で完了します。
ひとつ注意
R2 有効化にはクレジットカードまたは PayPal が必要です。本人確認用で、自動課金はされません。無料枠を超え、かつ有料利用を確認した場合のみ課金されます。心配ならバーチャルカードや PayPal も使えます。
ここから本番の構築手順に入ります。
Cloudflare R2 + PicGo 画像ホスティング構築フロー
30 分で完全無料の個人用画像ホスティングを構築。R2 登録から PicGo ワンクリックアップロードまで
Estimated time: PT30M
-
1
Step 1: ステップ1:R2 の登録と有効化
Cloudflare アカウントを登録し、左メニューの「R2 オブジェクトストレージ」から有効化。 -
2
Step 2: ステップ2:バケット(Bucket)作成
右上「バケットを作成」。識別しやすい名前(例 blog-images、グローバル一意)。 -
3
Step 3: ステップ3:公開アクセスの設定(重要)
方法 1(テスト): -
4
Step 4: ステップ4:API トークン作成
R2「概要」→「R2 API トークンを管理」→「API トークンを作成」。 -
5
Step 5: ステップ5:PicGo と S3 プラグインのインストール
PicGo をダウンロード: -
6
Step 6: ステップ6:PicGo の S3 設定
「画像ホスティング設定」→「Amazon S3」: -
7
Step 7: ステップ7:アップロードテスト
1. 保存し「デフォルトの画像ホスティング」に設定 -
8
Step 8: ステップ8:最適化(任意)
キャッシュルール:
R2 画像ホスティング構築の詳細手順
ここからは各ステップを丁寧に説明します。画面に沿って進めてください。
ステップ 1:R2 の登録と有効化
Cloudflare で無料アカウントを作成します。ログイン後、左メニュー「R2 オブジェクトストレージ」を開きます。初回は有効化の案内が出ます。
ここがつまずきやすいポイント:有効化には支払い方法(クレジットカードまたは PayPal)の登録が必要です。本人確認用で、自動課金はされません。無料枠内なら課金されません。
登録例:
- 外貨対応クレジットカード(Visa、MasterCard)
- PayPal(国内でも可)
- バーチャルカード
「R2 サービスを有効化」をクリックすれば、数秒で完了します。
ステップ 2:バケット(Bucket)の作成
右上「バケットを作成」をクリックします。
バケット名:blog-images など識別しやすい名前。グローバルで一意である必要があります。重複したら別名にします。
ロケーション:多くの記事は「アジア太平洋」を推しますが、必ずしも最適ではありません。
- アジア太平洋:国内は速め、国際はやや弱い
- 北米西部(WNAM):CDN と組み合わせると世界全体でバランスが良く、国内も許容範囲
海外読者も想定するなら北米西部が無難です。読者層に合わせて選んでください。
ストレージクラス:「Standard(標準)」で問題ありません。「作成」を押せば数秒で完了です。
ステップ 3:公開アクセスの設定(重要)
バケット作成後、設定ページを開きます。R2 はデフォルト非公開のため、ここで公開方法を決めます。
方法 1:r2.dev サブドメイン(テスト向け)
- 設定で「R2.dev サブドメイン」を探す
- 「アクセスを許可(Allow Access)」
- 確認ダイアログで
allowと入力して確定
公開 URL は次のような形式です:
https://pub-xxxxx.r2.dev
注意:r2.dev にはレート制限があり、開発・テスト向けです。アクセスが増えると画像が読めなくなることがあります。本番はカスタムドメインが必須です。筆者も最初は r2.dev のまま運用し、トラフィック増加で失敗したためカスタムドメインに切り替えました。
方法 2:カスタムドメイン(本番推奨)
独自ドメインがあるならこちらを強く推奨します。レート制限がなく、キャッシュや WAF も使えます。
前提:ドメインの DNS を Cloudflare に委任済み(無料で追加可能)。
手順:
- 「カスタムドメイン(Custom Domains)」を開く
- 「追加(Add)」
img.yourdomain.comなどのサブドメインを入力- 「続行(Continue)」
- CNAME が自動追加される
- 「ドメインを接続(Connect Domain)」
数分で DNS が反映され、次の形式でアクセスできます:
https://img.yourdomain.com/path/to/image.png
筆者はカスタムドメイン + 後述のキャッシュで安定運用しています。
ステップ 4:API トークンの作成
PicGo から R2 にアップロードするには API キーが必要です。
- R2「概要(Overview)」へ
- 右上「R2 API トークンを管理(Manage R2 API Tokens)」
- 「API トークンを作成(Create API Token)」
- 名前(例
PicGo-Upload) - 権限は「オブジェクトの読み取りと書き込み(Object Read & Write)」
- 「API トークンを作成」
超重要:次の 3 つは一度しか表示されません。
- アクセスキー ID(Access Key ID)
- シークレットアクセスキー(Secret Access Key)
- S3 API エンドポイント(
https://xxxxx.r2.cloudflarestorage.com)
すぐにパスワード管理ツールなどへ保存してください。閉じてしまったらトークンを作り直す必要があります。エンドポイントは「概要」→「S3 API で R2 を使用する」からも確認できます。
R2 側の設定はここまで。続いて PicGo です。
PicGo 設定の実践
PicGo は OSS の画像アップロードツールです。ドラッグでアップロードし、Markdown 形式の URL をコピーできます。
PicGo と S3 プラグインのインストール
PicGo のダウンロード
PicGo 公式 または GitHub Releases から入手:
- Windows:
.exe - macOS:
.dmg - Linux:
.AppImage
PicList(任意)
機能を増やしたい場合は PicList がおすすめです。画像管理、圧縮、WebP 変換、ウォーターマークなどが使えます。インストール手順は PicGo と同様です。
S3 プラグイン
PicGo は標準で S3 を扱えません。プラグインが必要です。
- 左「プラグイン設定」
- 検索欄に
s3 picgo-plugin-s3またはs3-llsをインストール
失敗する場合:
- GitHub からのダウンロードでネットワーク遅延
- Node.js 未インストール(Node.js 公式 から導入)
- Windows で管理者権限が必要な場合
オフラインインストールやネットワーク変更(プロキシなど)も試せます。
S3 画像ホスティングパラメータ
「画像ホスティング設定」→「Amazon S3」(または「AWS S3」)を開き、次を入力します。
アクセスキー ID(Access Key ID)
R2 で保存したアクセスキー ID。
シークレットアクセスキー(Secret Access Key)
シークレットキー。ID とキーを入れ違えないでください(ID は短め、キーは長め)。
バケット(Bucket Name)
作成したバケット名(例 blog-images)。ARN や URL ではありません。
ファイルパス(Upload Path)
例:
{year}/{month}/{md5}.{extName}— 年月フォルダ + MD5 で重複回避(筆者はこれ)PicGo/{fullName}— PicGo フォルダに元ファイル名{year}/{month}/{fullName}— 年月 + 元ファイル名
先頭に / を付けないこと。付けるとアップロード失敗やパス異常の原因になります。
カスタムエンドポイント(Endpoint)
https://xxxxx.r2.cloudflarestorage.com 形式。https:// を忘れないでください。
カスタムドメイン(Custom Domain)
公開 URL のベースです。
- カスタムドメイン:
https://img.yourdomain.com - r2.dev:バケット設定の Public Bucket URL(
https://pub-xxxxx.r2.dev)
その他
- リージョン(Region):
autoやus-east-1など任意(R2 は実質無視) - アップロード方式:「パススタイル(Path Style)」
アップロードテスト
- 「確定」で保存
- 「デフォルトの画像ホスティング」にチェック
- 「アップロード」にテスト画像をドラッグ
成功すると URL がクリップボードにコピーされます。ブラウザで画像が表示されれば完了です。
よくあるエラー
- Access Denied / 403 — キーの入れ違い、権限「読み書き」、バケット名
- アップロード成功だが表示不可 — 公開設定、カスタムドメインの
https://、DNS 反映待ち - 遅い・タイムアウト — 海外リージョンへのネットワーク、画像サイズの圧縮
- パス異常 — パス先頭の
/を削除、書式確認
筆者も最初は ID とキーを逆に入力し、しばらくハマりました。多くは設定ミスです。
最適化と応用
基本機能が動いたら、安定性・速度・コストのために次も検討してください。
キャッシュ戦略(強く推奨)
カスタムドメイン利用時はキャッシュルールを設定しましょう。
- R2 読み取り回数の削減(無料枠節約)
- CDN キャッシュで表示高速化
- 悪意ある大量アクセスの緩和
設定手順:
- Cloudflare コンソールでドメインを選択
- 「ルール」→「ページルール」または「キャッシュルール」
- URL マッチ:
img.yourdomain.com/* - キャッシュレベル:すべてキャッシュ、エッジ TTL 6 か月、ブラウザ TTL 1 か月
初回は R2 から読み、以降は CDN キャッシュから返ります。筆者は 6 か月キャッシュで、実際の R2 リクエストは数千回程度に抑えられています。
国内向けアクセス加速(任意)
Cloudflare CDN の国内速度は地域差があります。国内読者が主なら次も選択肢です。
Tencent EdgeOne — 海外 CDN、無料枠あり。国内は速いが Tencent アカウントと設定が必要。
WebP Cloud — 画像プロキシと WebP 最適化。圧縮に有利だがリクエスト上限あり。
国内外分流 — rclone で R2 を国内 COS などへ同期。速いが運用コスト高。
筆者はカスタムドメイン + キャッシュのみで、国内 1〜3 秒程度。個人ブログなら十分なことが多いです。速度を最優先するなら上記を検討してください。
セキュリティ
r2.dev を無効化
カスタムドメイン利用中は、r2.dev 経由でホットリンク回避をすり抜けないよう、バケット設定 → R2.dev サブドメイン → 「アクセスを禁止」で disallow と入力。
ホットリンク防止
Cloudflare WAF で Referer に自サイトドメインが含まれないリクエストをブロックできます。
- セキュリティ → WAF
- カスタムルール作成
- 条件:Referer に
yourblog.comが含まれない - アクション:ブロック
使用量の監視
R2 コンソールでストレージと A/B クラス操作数を定期確認し、異常増加がないか見てください。
まとめ
R2 画像ホスティングの構築は次の流れでした。
- Cloudflare R2 を有効化し 10GB 無料枠を利用
- バケット作成と公開設定(カスタムドメインまたは r2.dev)
- API トークン発行で PicGo 接続
- PicGo 設定でワンクリックアップロード
- キャッシュとセキュリティで安定運用
あとは PicGo に画像をドラッグし、Markdown に貼るだけです。画像ホスティングの削除・サービス終了・突然の課金に悩む必要がなくなります。初回設定は少し時間がかかりますが、筆者は半年以上・500 枚超・費用 0 円で安定しています。
画像ホスティングで困っているなら、本記事の手順で 30 分ほど試してみてください。多くはパラメータの入力ミスです。API キーは安全な場所に保管し、再設定時に再利用できるようにしておくと便利です。
質問はコメント欄へ。見つけ次第返信します。
FAQ
Cloudflare R2 の無料枠はどのくらいですか?
• ストレージ 10GB
• 月間アップロード 100 万回(クラス A 操作)
• 月間読み取り 1000 万回(クラス B 操作)
• エグレス(下り転送)料金は完全無料
個人ブログで画像 500 枚程度なら 2GB 未満。数年は余裕です。
超過後の料金:
• ストレージ:$0.015/GB/月(1GB あたり月額約 1 円程度)
• 操作料:クラス A $4.50/100 万回、クラス B $0.36/100 万回
R2 は他の画像ホスティング案と比べて何が強いですか?
1) エグレス完全無料(S3 は GB あたり数円〜数十円かかることが多い)
2) Cloudflare という大手 CDN 運営者による安定性
3) S3 API 互換で移行しやすい
4) 中国の ICP 备案不要、30 分程度で構築可能
5) グローバル CDN(100 カ国以上、275 都市)
他案の課題:
• GitHub + jsDelivr:中国では利用困難
• 無料公共ホスト:不安定
• 国内クラウド:备案が必要
R2 の公開アクセスはどう設定しますか?
• バケット設定の「R2.dev サブドメイン」を開く
• 「アクセスを許可」をクリックし、確認で allow と入力
• 注意:r2.dev にはレート制限あり。本番はカスタムドメイン必須
方法 2(本番推奨):
• 前提:ドメインを Cloudflare に委任済み
• 「カスタムドメイン」にサブドメイン(例 img.yourdomain.com)を入力
• CNAME が自動追加され、DNS 反映を待つ
PicGo を R2 に接続するには?
1. PicGo と S3 プラグイン(picgo-plugin-s3 または s3-lls)をインストール
2. 「画像ホスティング設定」→「Amazon S3」を開く
主なパラメータ:
• アクセスキー ID(Access Key ID)
• シークレットアクセスキー(Secret Access Key)
• バケット名(Bucket Name)
• ファイルパス(例 {year}/{month}/{md5}.{extName}。先頭に / を付けない)
• カスタムエンドポイント(https:// 付き)
• カスタムドメイン(独自ドメインまたは r2.dev URL)
• リージョン(auto など任意)
• アップロード方式(パススタイル)
テストアップロードが成功すれば利用可能です。
R2 画像ホスティングの性能とコストを最適化するには?
1) キャッシュルール:
• Cloudflare コンソール → ルール → キャッシュルール
• img.yourdomain.com/* にマッチ
• エッジ TTL 6 か月、ブラウザ TTL 1 か月
• 実測でリクエストが数万回から数千回に減少
2) カスタムドメイン利用時は r2.dev を無効化
3) WAF でホットリンク防止(Referer に yourblog.com が含まれない場合ブロック)
4) 使用量を定期監視し超過を防ぐ
国内向け加速は Tencent EdgeOne や WebP Cloud も選択肢です。
R2 開通にクレジットカードは必要ですか?課金されますか?
R2 有効化にはクレジットカードまたは PayPal の登録が必要ですが、本人確認用であり、自動で請求されることはありません。
無料枠を超え、かつ有料利用を確認した場合のみ課金されます。
登録例:
• 外貨対応クレジットカード(Visa、MasterCard)
• PayPal(国内でも利用可)
• バーチャルカード
筆者は半年利用で 1 円も発生していません。
PicGo アップロード失敗のよくある原因は?
1) Access Denied / 403:
• API キーの入れ違いがないか確認
• トークン権限に「オブジェクトの読み取りと書き込み」があるか
• バケット名が正しいか
2) アップロード成功だが表示できない:
• 公開アクセス(r2.dev またはカスタムドメイン)が有効か
• カスタムドメインに https:// が付いているか
• DNS 反映待ち
3) 遅い・タイムアウト:
• ネットワーク(R2 は海外リージョン)
• 画像サイズを先に圧縮
4) パスエラー:
• パス先頭の / を削除
多くは設定ミスです。パラメータを再確認してください。
7分で読めます · 公開日: 2025年11月30日 · 更新日: 2026年6月8日
Cloudflare フルスタック実践
検索からこのページに来た場合は、前後の記事もあわせて読むと同じテーマの理解がかなり早く深まります。
前の記事
Cloudflare Tunnel 入門:公網 IP なしでも内網サービスに安全アクセス
Cloudflare Tunnel で無料の内網穿透を実現する手順を解説。公網 IP やクラウドサーバー不要、30 分で設定完了。HTTPS 暗号化と DDoS 防御付き。HTTP/SSH/RDP など複数プロトコル対応。個人開発者やホームサーバー利用者向け。
第 12 / 23 記事
次の記事
S3 の転送料金が毎月数千ドル?R2 へ 3 ステップで移行し 90% 削減(実例付き)
S3 の転送料金で請求が膨らんでいませんか?Cloudflare R2 への移行で出口料金ゼロ、年間 $10,896 以上の節約も。3 つの移行方式比較、API 互換性の実測、30 分でできる移行手順とコスト試算、完全操作ガイド付き。
第 14 / 23 記事
関連記事
Cloudflare無料版の制限2026:Free、Pro、Business料金比較
Cloudflare無料版の制限2026:Free、Pro、Business料金比較
Cloudflare Pages で静的ブログをデプロイする完全ガイド:5 大フレームワークの設定で落とし穴を避ける
Cloudflare Pages で静的ブログをデプロイする完全ガイド:5 大フレームワークの設定で落とし穴を避ける
Cloudflare Pages でフロントエンドをデプロイする完全ガイド:React/Vue/Next.js の設定とエラー対処
コメント
GitHubアカウントでログインしてコメントできます