開発者必見!imgixの新機能でレスポンシブ画像を簡単に最適化

Profile Picture
by
Taichi Kanemoto
July 20, 2020
  |  
3 minute read
header image imgix scrset generation

自動 srcset 生成の発表

レスポンシブ画像は、現代のウェブサイトにおいて不可欠な要素ですが、フロントエンド開発者にとっては管理や実装に手間がかかることもあります。従来、開発者は各デバイスの解像度に対応するために、複数サイズの画像を用意する必要がありました。しかし、srcset 属性を活用すれば、ブラウザが適切な画像サイズを自動的に選択するため、手動のサイズ作成が不要になります。

本記事では、imgixがどのように srcset 属性の活用を簡単にし、すべてのCore Libraryで 自動 srcset 生成 をサポートするようになったかを紹介します。

srcset を活用する際の課題

srcset はデバイスのピクセル比率に応じた最適な画像を提供する優れた手法ですが、正しく使用するにはいくつかの課題があります。

  • 各画像を手作業で変換・保存するワークフローは、時間と労力を要する
  • 変換後の修正や変更にコストがかかる

imgixのリアルタイム画像変換・最適化 サービスを活用することで、これらの課題を解決できます。手動で画像をリサイズして保存するのではなく、imgixのレンダリングパラメータを指定するだけで、各 srcset エントリの画像を最適化できます。

それでも、srcset を使用する際の疑問として「どのブレイクポイントを指定すればよいのか?」「いくつの画像バリエーションを用意すべきか?」という問題が残ります。これらのニーズに応えるため、imgixは カスタム srcset 属性を自動生成 できる機能を追加しました。

自動 srcset 生成の仕組み

imgix Core Libraries の主な目的は、開発者が迅速かつ簡単に imgix のURLを生成できるようにすることでした。しかし、レスポンシブ画像のサポートをさらに強化するため、自動 srcset 生成 をすべてのCore Librariesに追加しました。

この機能は、以下の2種類の srcset 生成をサポートしています。

  1. 可変幅(fluid-width) srcset:ブラウザのビューポート幅に応じた異なるサイズの画像を提供
  2. 固定幅(fixed-width) srcset:同じサイズの画像を異なる解像度(DPR)で提供

それぞれのユースケースに応じて、適切な srcset を選択できます。imgix SDKのインターフェースでは、簡単にどちらの形式を生成するかを指定し、希望のレンダリングAPIパラメータと共に構築できます。

srcset 生成の活用方法

imgix で srcset を自動生成する方法を見ていきましょう。まず、ライブラリ一覧 から、使用するプログラミング言語のCore Libraryを選択してください。

JavaScript(imgix-core-js)を使用した srcset 生成

以下のコードで、デフォルトの 可変幅 srcset を生成できます。

var ImgixClient = require('imgix-core-js');

var client = new ImgixClient({
domain:'testing.imgix.net',
includeLibraryParam:false
});

var srcset = client.buildSrcSet('image.jpg');

この関数は、次のような srcset を自動生成します。

https://testing.imgix.net/image.jpg?w=100 100w,
https://testing.imgix.net/image.jpg?w=116 116w,
https://testing.imgix.net/image.jpg?w=135 135w,
...
https://testing.imgix.net/image.jpg?w=8192 8192w

この srcset には、約31のエントリ が含まれており、それぞれの画像サイズの差分(幅トレランス)は最大8%に抑えられています。

トレランスを増やすことでキャッシュヒット率を向上できますが、画像のスケーリングによる視覚的パフォーマンスが低下する可能性があるため、品質を維持するために8%のトレランスを採用 しました。

固定幅(fixed-width) srcset の生成

固定幅の srcset を使用する場合、w(幅)または h(高さ)と ar(アスペクト比)のパラメータを指定します。

var srcset = client.buildSrcSet('image.jpg', {
w: 800
});

console.log(srcset);

このコードは、次のような DPR(デバイスピクセル比)ベースの srcset を生成します。

https://testing.imgix.net/image.jpg?dpr=1&q=75&w=800 1x,
https://testing.imgix.net/image.jpg?dpr=2&q=50&w=800 2x,
https://testing.imgix.net/image.jpg?dpr=3&q=35&w=800 3x,
https://testing.imgix.net/image.jpg?dpr=4&q=23&w=800 4x,
https://testing.imgix.net/image.jpg?dpr=5&q=20&w=800 5x

dpr パラメータは各エントリに追加され、それに応じた q(画質)パラメータも最適化されます。DPRが高い画像はより高解像度のデバイスで表示されるため、視覚品質を損なわずに q を調整することでファイルサイズを削減できます。

まとめ

本記事では、imgix の 自動 srcset 生成 によるレスポンシブ画像対応の強化について紹介しました。

この機能を活用すれば、開発者は 手作業なしで最適な srcset を提供でき、ページのパフォーマンスを向上させることができます。

今後も、開発者の皆様にとって価値のある機能を追加していきます。ご意見やフィードバックがありましたら、サポートチームまでお知らせください。