技術選定しよう！~ スライダー編 ~

# 技術選定しよう！
技術選定は、重要で大変な作業ですよね。
適切な技術を選ぶためには、候補をしっかりとリストアップし、それらを比較し根拠を持って判断することが欠かせません。
そこでこの記事では、技術選定を行う際のポイントや役立つ情報について紹介しています。
それにより、担当システムに最適な選択肢を見つける手助けとなるでしょう。
ぜひこの記事を参考にして、より適切な技術選定ができるようにしてください！

# 今回選定する技術
今回選定するのは

「<font color="DarkOrange">**スライダー**</font>」　です！

カルーセル機能とも呼ばれています。
ZOZOTOWNなどのECサイトにも使われている主要な機能です。

# 候補一覧
検索でよくヒットする下記3つのライブラリをピックアップしました！
- [swiper](https://swiperjs.com/)
- [react-slick](https://react-slick.neostack.com/)
- [splide](https://ja.splidejs.com/)

# 比較しよう！
### 対応フレームワーク （ライブラリ）
<table>
  <thead>
    <tr>
      <th></th> <th>React</th> <th>Vue.js</th> <th>Svelte</th> <th>WebComponents</th>
    </tr>
  </thead>
  <tr>
    <td> swipe </td> <td> ○ </td> <td> ○ </td> <td> × </td> <td> ○ </td>
  </tr>
  <tr>
    <td> react-slick </td> <td> ○ </td> <td> × </td> <td> × </td> <td> × </td>
  </tr>
  <tr>
    <td> splide </td> <td> ○ </td> <td> ○ </td> <td> ○ </td> <td> × </td>
  </tr>
</table>

### ダウンロード数
![スクリーンショット 2024-07-26 22.46.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115968/1dd115a1-6d78-9a78-2357-a8ece59f90d6.png)
[npm trends](https://npmtrends.com/@splidejs/splide-vs-react-slick-vs-swiper)によると、
現時点（2024年7月現在）でのダウンロード数は下記の順番となっています。
対応フレームワークの差異による影響はあると思いますが、swiperが圧倒的に人気です。
<table>
  <thead>
    <tr>
      <th></th> <th>ライブラリ名</th>
    </tr>
  </thead>
  <tr>
    <td> 1 </td> <td>swiper</td>
  </tr>
  <tr>
    <td> 2 </td> <td>react-slick</td>
  </tr>
  <tr>
    <td> 3 </td> <td>splide</td>
  </tr>
</table>

### スター数
![スクリーンショット 2024-07-26 23.30.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115968/b4e402ff-85aa-8a10-5d90-7baa16623591.png)
同じく[npm trends](https://npmtrends.com/@splidejs/splide-vs-react-slick-vs-swiper)によると、スター数は下記の順番となっています。
<table>
  <thead>
    <tr>
      <th></th> <th>ライブラリ名</th>
    </tr>
  </thead>
  <tr>
    <td> 1 </td> <td>swiper</td>
  </tr>
  <tr>
    <td> 2 </td> <td>react-slick</td>
  </tr>
  <tr>
    <td> 3 </td> <td>splide</td>
  </tr>
</table>

### バージョン更新
`splide`の最終更新は2年前と久しく更新されておりません。
一方で、`swiper`はちょうど2日前（2024年7月現在）に更新されておりました。
ここ1年を通しても1~2ヶ月ごとに更新されており、定期的にメンテナンスされているようです。
`react-slick`に関しては不定期ではありますが、ここ1年を通して3回更新されております。

# 特徴を知ろう！
### swiper
**豊富なオプションが用意されており** <font color="DarkOrange">**カスタマイズ性**</font> **が高い !**
- トランジション効果や複数行スライドなど様々なオプションあり
- [公式Webページ](https://swiperjs.com/demos)にデモレイアウトとサンプルコードあり

<font color="DarkOrange">**日本語**</font> **の記事が豊富 !**
- 利用者が多いこともあり、日本語の記事やドキュメントが豊富

### react-slick
**人気の高い** <font color="DarkOrange">**slick**</font> **のReact版 !**
- jQeryのプラグインであるslickをReactでも使用できるようモジュール化

### splide
**ゼロ依存のうえ** <font color="DarkOrange">**超軽量**</font> **!**
- 29 KB（gzipで 12 KB）と軽量で、外部依存性はなし

# まとめ
各ライブラリの特性を把握していただけましたでしょうか。
さらに、それぞれの公式Webページにはサンプルもご用意されていますので、実際に手を動かしてUI/UXを評価することもおすすめします！
要件やユースケースによって最適な選択肢は異なるかもしれませんが、この記事が技術選定の参考になれば幸いです。

最後に私が選定したライブラリを紹介し、ここで本記事を締めくくります。

## <font color="DarkSeaGreen">筆者が選定したライブラリ</font>
### ライブラリ
- **splide**
### ユースケース
- 画像のスライダー機能を実装する
![demo1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3115968/b1334b16-fdd6-185e-e012-3006ce8ae050.gif)

### 選定理由
- 今回のユースケースはどのライブラリでもあまり差異がなさそうだったので、最も軽量であるライブラリを選定

### 所感
- ストレスフリーな操作感
    - スライドする際のカクツキなど、パフォーマンスの点も特に気になりませんでした
- オプションが十分豊富な印象
    - スライダーのテーマや1画面に表示する画像の枚数などいくつかのオプションが用意されいます
- webページのガイドがわかりやすい
    - 日本語対応されている上、各オプションや機能のサンプルが用意されているためわかりやすかったです