Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Railsアプリの画像配信最適化 - Imgproxyを活用したパフォーマンス改善事例
Search
muso
August 29, 2025
Programming
0
20
Railsアプリの画像配信最適化 - Imgproxyを活用したパフォーマンス改善事例
muso
August 29, 2025
Tweet
Share
More Decks by muso
See All by muso
ALB「証明書上限問題」からの脱却
nishiokashinji
0
120
Other Decks in Programming
See All in Programming
GISエンジニアから見たLINKSデータ
nokonoko1203
0
190
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
170
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
440
CSC307 Lecture 04
javiergs
PRO
0
630
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
300
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
190
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.4k
AgentCoreとHuman in the Loop
har1101
4
150
CSC307 Lecture 01
javiergs
PRO
0
670
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
170
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
400
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
780
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
89
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
2.8k
Testing 201, or: Great Expectations
jmmastey
46
7.9k
How STYLIGHT went responsive
nonsquared
100
6k
The Cost Of JavaScript in 2023
addyosmani
55
9.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
600
RailsConf 2023
tenderlove
30
1.3k
Technical Leadership for Architectural Decision Making
baasie
0
210
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
0
280
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
For a Future-Friendly Web
brad_frost
180
10k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Transcript
Rails アプリの画像配信最適化 Imgproxy を活用したパフォーマンス改善事例 2025/08/
[email protected]
自己紹介 活動名 無双(@nishi_okashi ) 普段のお仕事 Super Ramen Engineer
前提情報 BtoBtoC (超簡単に言えば)ホームページ作成サービス エンドユーザーの投稿機能があり、投稿機能一覧画面にはエンドユ ーザーが投稿した画像が多数表示される CarrierWave を利用
画像配信で問題となっていたこと CloudFront の配信コストが高額 画像表示に平均3-4 秒かかっていた 1 画像あたり1-10MB の転送でユーザーのパケットを圧迫
なぜ??
オリジナルを配信していた バリデーションは10MB
解決方法 画像サイズを減らす 表示域に合わせたリサイズを行う 品質を調整する フォーマットをWebP に統一
どうやって実施する?
CarrierWave のサムネイル生成 1. Uploader クラスでサムネイルを宣言 class MyUploader < CarrierWave::Uploader::Base version
:thumb do process :resize_to_fit => [300, 300] end end 2. 投稿時にオリジナルとサムネイルがアップロードされる 3. 2 の後に新しくサムネイルを設定した場合は #recreate_versions! で 作成
新しくサムネイルを設定して Rake タスク??
数が多くて現実的ではない…
動的リサイズ
ActiveStorage のVariant で解決! <%= image_tag @post.image.variant(resize:'300x300').processed %>
… したいが移行がちょっと大変そう
マネージドサービスを利用する? Imgix ImageFlux CloudFlare Images
コストが気になる…
Imgproxy(OSS) というものがありました
Imgproxy とは? Go 言語で実装されたプロキシサーバー Simplicity コードを書かなくていい Speed libvips を利用 Security
実寸サイズのチェック 署名による不正リクエストの防止
Simplicity 動かすだけならこれでオッケー docker pull ghcr.io/imgproxy/imgproxy:latest docker run -p 8080:8080 -it
ghcr.io/imgproxy/imgproxy:latest
Simplicity URL だけで画像変換ができる http://imgproxy.example.com/%signature/%processing_options/plain /%source_url@%extension
Simplicity 設定は環境変数のみ # 品質 IMGPROXY_QUALITY="80" # S3の利用設定 IMGPROXY_USE_S3="true" # 許可するS3バケット
IMGPROXY_ALLOWED_SOURCES="s3://my-bucket/"
Speed libvips はRails ガイドでも早いと紹介されている (とはいえもともとのソースはlibvips のwiki の情報) https://railsguides.jp/active_storage_overview.html ImageMagick は、libvips
に比べて知名度が高く普及も進んでいま す。しかしlibvips は10 倍高速かつメモリ消費も1/10 です。 “ “
Security (Simplicity と共通するが)受け入れる画像の制限を環境変数だけで 指定可能 # 受け入れる画像の最大解像度 IMGPROXY_MAX_SRC_RESOLUTION="50"
導入の結果 転送量: 1 枚あたり100KB 未満に削減(90% 以上削減) 表示速度: 1 秒未満に削減(70% 以上改善)
コスト: CloudFront 配信費を大幅削減
その他いいこと 簡単にサムネイルを作ることができるようになった(= デザイン変 更に柔軟に対応が可能になった) サムネイル画像をS3 に保存する必要がなくなった exif 情報を簡単に除去できる
まとめ 問題: オリジナル画像配信による高コスト・表示遅延・大容量転送 解決策: Imgproxy(OSS) による動的画像最適化 結果: 90% 以上の転送量削減、70% 以上の速度改善
メリット: 簡単導入・高速処理・柔軟な運用 Imgproxy は画像配信最適化の強力な選択肢です!
ありがとうございました