1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Rails] 画像処理の技術選定と設計

1
Last updated at Posted at 2026-03-30

画像処理の技術選定と設計方針

環境

  • Ruby on Rails 8.1.3
  • Docker(開発環境)
  • Render(本番環境)

設計概要

ユーザーがアバター画像をアップロード
     ↓
Rails サーバ上で libvips を使って 200×200 にリサイズ
     ↓
Active Storage 経由で Cloudinary に保存

という流れです。

技術選定

Active Storage ( CarrierWave と比較)

ファイルアップロードの仕組みとして CarrierWave と Active Storage を比較しました。

Rails 標準として安定してメンテナンスされている Active Storage を選びました。


Cloudinary (ImageKit との比較)

クラウドストレージの選択肢として Cloudinary を採用しました。

決め手は導入のシンプルさ無料枠の存在です。

導入手順はアカウントを作成して API キーなどを環境変数に設定し、gem を追加した上で config.active_storage.servicecloudinary に変更するだけです。Active Storage の設計上、ストレージの向き先は設定ファイルの1行で切り替えられるため、手軽に設定できます。

また、比較対象として ImageKit も無料枠を持っていますが、日本の Rails コミュニティにおける実績は Cloudinary と比べて少なく、トラブル時に参考にできる情報が限られます。日本語の実装記事が豊富な Cloudinary であれば導入の確実性が高いと判断しました。


libvips (ImageMagick との比較)

画像処理ライブラリとして ImageMagick と libvips を比較しました。Rails 公式ドキュメントには「ImageMagick は libvips に比べて知名度が高く普及も進んでいるが、libvips は 10 倍高速かつメモリ消費も 1/10 である」という記述があります(参考:Rails 公式ドキュメント)。

今回の要件はシンプルなアバター画像のリサイズなので、ImageMagick が持つ豊富な機能は不要です。

処理速度とメモリ効率に優れた libvips が適していると判断しました。


設計方針

アップロード前にサーバ側でリサイズする理由

リサイズのタイミングを Cloudinary へのアップロード前に置くことで、転送するデータ量を小さく抑えられるからです。

Active Storage のバリアント機能を使わない理由

バリアントとは、アップロード済みの画像を表示時に動的にリサイズする Active Storage の機能です。

下記の点から不要と判断しました

  • アップロード時点でサーバ側に 200×200 に統一する設計を採っている
  • 表示する場所によってサイズ差がほとんどない
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?