🚀

Embla Carousel入門

に公開

Web サイトでカルーセル(スライダー)を実装する際、これまでは Swiper や Splide が定番とされていました。しかし、これらのライブラリには

  • 独自 CSS との競合
  • 不要な機能まで含まれてしまう

という課題がありました。

そんな中、Embla Carousel という必要最低限な機能だけを兼ね備えた軽量なライブラリが注目を集めているので、こちらについて紹介していきます。

デフォルトでは基本的なカルーセル機能(スライド表示、スワイプ/ドラッグ操作、レスポンシブ機能など)のみが備わっております。

その他、機能などの詳細については Embla Carousel の公式ドキュメントからご確認ください。
https://www.embla-carousel.com/

従来ライブラリとの決定的な違い

1. モノリシック vs モジュラー設計

従来のライブラリ

import Swiper from "swiper"; // 67.3KB
// 全機能が最初から含まれている
// 使わない機能も含まれてバンドルサイズが肥大化

Embla Carousel

import useEmblaCarousel from "embla-carousel-react"; // 18.7KB
// 必要な機能だけを後から追加
import Autoplay from "embla-carousel-autoplay"; // +2.3KB

Swiper では使用しない機能も組み込んでしまうのに対して、Embla Carousel では必要な機能だけを後付けしていくため、容量を圧迫することがないです。

2. 圧倒的な軽量性

Bundlephobia での測定結果(minified + gzipped):

ライブラリ バンドルサイズ
Swiper 約 39KB
Splide 約 29KB
Embla Carousel 約 13KB

この表を見ても、Embla Carousel が軽量であることが分かります。

3. 独自 CSS に依存しない

従来のライブラリでは独自の CSS が存在し、予め読み込む必要があったことに加え、思わぬ干渉が起きてしまうこともありました。
Embla Carousel ではそういった独自クラスがないため、カスタマイズ性が非常に高いです。

/* 従来:独自クラスが適応される */
.swiper-container {
  /* 変更困難 */
}
.splide__track {
  /* 名前空間汚染 */
}

/* Embla:完全に自由 */
.my-carousel {
  /* 任意の命名 */
}
.my-slide {
  /* デザインシステムと統一 */
}

豊富なサンプルとジェネレータ機能

公式サイトには豊富なサンプルが用意されているだけでなく、SandBox と紐付いているため、その場でコードを触りながら仕様を確かめることも可能です。
加えて、ジェネレータ機能を用いることで、使用したいフレームワークや細いオプション、レイアウト設定を GUI で行い、コードを生成してくれるので、サクッと導入してみたい方にもお勧めできます。

  1. 軽量性: 従来の 1/10 のサイズで同等機能を実現
  2. 柔軟性: 独自 CSS への影響がない、デザインシステムとの統合が容易
  3. 拡張性: 必要な機能だけを段階的に追加

Embla Carousel は「軽量性」「柔軟性」「拡張性」を兼ね備えた、次世代のカルーセルライブラリです。
パフォーマンスを重視するプロジェクトや独自デザインシステムを持つプロジェクトで、カルーセル実装を検討されている方は、ぜひ Embla Carousel を試してみてください。

参考記事一覧

https://blog.to-ko-s.com/embla-carousel/
https://zenn.dev/yall/articles/4c7ab236d60553
https://qiita.com/yassii_dev/items/d2522ae751b588212cab

NEW FOLK Develop team.

Discussion