【Tailwind CSS】「CDNが非推奨」の理由【daisyUI】

# この記事について

CDNは便利ですが、CSSにおいては非推奨なようです。

# 環境

なんでも
# 登場技術

|              |                                                       |
| :----------: | :---------------------------------------------------: |
| Tailwind CSS | CSSフレームワーク<br>CSSプロパティを書かずとも、クラス名でstyleを変更・管理することができる |
|     cdn      | コンテンツ デリバリー ネットワーク<br>簡単に言うと、ライブラリなどの静的コンテンツを提供する仕組み  |
# 前提：CDNにはメリットが多い

cdnは基本的に便利です。メリットもたくさんあります。

> CDNを利用する利点とは？
> CDN利用の利点はインターネットプロパティのサイズとニーズによって異なりますが、多くのユーザーにとっての主な利点は、4つのコンポーネントに分類することができます：
> 
> 1. Webサイトのロード時間の改善 - （他の最適化の中でも）近くのCDNサーバーを利用してWebサイトの訪問者の近くでコンテンツを配信することにより、訪問者が体験するページのロード時間が短縮されます。訪問者は、読み込みが遅いサイトだと判断すれば、1クリックで簡単に離れてしまう傾向が強いのですが、CDNは直帰率を下げてサイトにとどまる時間を伸ばすことができます。言い換えれば、Webサイトのスピードが速ければ、より多くの訪問者にゆっくりとそのサイトを楽しんでもらうことができるということです。
> 2. 帯域幅の費用を削減 - Webサイトホスティングにおける帯域幅の消費コストは、Webサイト運営において主要な費用です。キャッシングや他の最適化を通じて、CDNはオリジンサーバーが提供しなければならないデータ量を減らすことができます。このため、Webサイト所有者のホスティングコストを削減できるのです。
> 3. コンテンツの可用性と冗長性の向上 - 大量のトラフィックやハードウェアの障害が通常のWebサイト機能を損なうことがあります。分散型という特性のおかげで、CDNはさらに多くのトラフィックに対応でき、その他のオリジンサーバーよりもハードウェア障害に耐え得るのです。
> 4. Webサイトセキュリティの向上 - CDNはDDoS軽減やセキュリティ証明書、その他の最適化を提供することで、セキュリティを向上させる可能性があります。

https://www.cloudflare.com/ja-jp/learning/cdn/what-is-a-cdn/

なにより、導入が簡単です。

Tailwindにおいても、CDNなら一行書くだけです。
一般的なCLIからの導入は、複数のステップを必要とします。

| CDN | CLI |
| :-: | :-: |
|   ![スクリーンショット 2024-06-17 11.53.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/1443ca1b-ad2f-7592-b6ca-cc44825f9bcf.png)  |  ![スクリーンショット 2024-06-17 11.49.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/129a18e3-1b76-5337-f719-cccfa9ef447f.png)   |
|一行書くだけ | ターミナルコマンド<br>HTML/CSS/Configファイルの編集<br>ビルドプロセスの開始|

https://tailwindcss.com/docs/installation

# 本題：CSSにCDNは不向き

しかし、CSS（スタイルシート）に関して言えば、CDNを使わないことが最適とされます。

## Tailwind CSS

> Play CDN は開発目的のみで設計されており、本番環境には最適な選択肢ではありません。

https://tailwindcss.com/docs/installation/play-cdn#:~:text=Play%20CDN%20%E3%81%AF%E9%96%8B%E7%99%BA%E7%9B%AE%E7%9A%84%E3%81%AE%E3%81%BF%E3%81%A7%E8%A8%AD%E8%A8%88%E3%81%95%E3%82%8C%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AB%E3%81%AF%E6%9C%80%E9%81%A9%E3%81%AA%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82

## daisyUI

> 警告

> CDNファイルは、未使用のスタイルを削除できず、ファイルサイズが大きくなるため、本番環境にはお勧めしません。

https://daisyui.com/docs/cdn/#:~:text=%E8%AD%A6%E5%91%8A,%E5%8B%A7%E3%82%81%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82

なぜでしょうか？

# 理由：不必要なCSSクラスが大量に含まれるから

その理由は「**不必要なCSSクラスが大量に含まれるから**」です。

Tailwindにしろ、daisyUIにしろ、大量のCSSクラスが用意されており、そのすべてを使用するわけではありません。

例えば、daisyUIのStat componentを使用しないこともあるでしょう。

![スクリーンショット 2024-06-17 12.04.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/269f9ed4-8502-8b5a-eee9-9894f93bddd5.png)

tailwindのwidthも、すべてのクラスを使用することはないと思います。

![スクリーンショット 2024-06-17 12.06.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/57788fdc-1b07-f105-90af-0dd79391af70.png)

しかし、CDNは「どのクラスが使われていて」「どのクラスが使われていないか」の判定ができません。

よって、すべてのクラスの情報を送信します。

受診したブラウザは、そのクラスすべてを確認し適用するため、ブラウザのレンダリング速度が低下します。

レンダリング速度はユーザー体験に直結する部分であり、その低下は許容できるデメリットではありません。

これがCSS（スタイルシート）においてCDNを使用すべきでない理由です。

# 余談：「ファイルを分ける」理由でもある

tailwindでは、CSSファイルを2つに分け、以下のコマンドを使用することが一般的です。

```zsh
% npx tailwindcss -i ./src/styles.css -o ./views/styles.css --watch
```

この理由も似た理由です。

CDNのように、Tailwindのすべてのクラスを送信するわけにはいきません。

また、ファイルを分けることでメンテナンス性が上がります。

# おわりに

<font color="red">感想、ストック、いいね、大歓迎です！</font>

<font color='grey'>マサカリも受け付けてます_(´ཀ`」 ∠)_</font>

# 参考記事

https://developer.mozilla.org/ja/docs/Glossary/CDN