Angular v11.2 から TailwindCSS を簡単に使えるようになったので使ってみよう!

2021年02月15日
投稿者:若林 奨太
カテゴリ:Angular タグ:,

こんにちは。鈴木商店の若林 (@itigoore01) です。

Angular v11.2 から TailwindCSS が簡単に使えるようになりました!

鈴木商店では、昨年末ぐらいから始まったそれほど大きくはないプロジェクトにTailwindCSSを使用してみているのですが、TailwindCSS自体はめちゃくちゃ良いなという感じです。
ただ、そのころは@angular-builders/custom-webpackngx-build-plusを使用するなりしないといけなかったので、それからすると今回のアップデートで使い始めるまでがかなり楽になりました!

※とはいえv11.2未満でも@ngneat/tailwindという便利ライブラリがあるので、実は導入はそこまで難しくもないです。

現時点ではざっと見た感じ公式のドキュメントにも載っていないですが、Angular公式もちゃんとツイートしている通り使えます。

上記のツイートにセットアップ方法自体は書いてあるっちゃ書いてあるのですが、プロダクションビルド時に少しハマりポイントがあるので記事にしました。

なお、ここではTailwindCSS自体の使い方などは説明しません。
質問がありましたら、僕のツイッターアカウントに質問頂ければ、わかりそうならお答えします!

TailwindCSSのセットアップ方法 (Angular >= v11.2)

Angular v11.2以上のセットアップ方法です。

TailwindCSSをインストール

まずはTailwindCSSをインストールします。

tailwind.config.jsを設定

インストールが完了したら、TailwindCSSの設定ファイルを生成します。
手で作ってもいいですが、コマンド一発で作成することもできます。

するとtailwind.config.jsが生成されます。

このままだと、使用していないTailwindCSSのクラスを除外する purge 機能が使えないので、tailwind.config.jsを変更しましょう。

styles.css を修正する

styles.cssに下記の内容を追加します。

scssを利用している場合は、下記の内容を追加します。

動作確認

ここまででTailwindCSSを使えるようになっているはずなので、一旦動作確認をしてみましょう。

classをつけていき、その他諸々やっていけば……

localhost_4200_ (3)

ちゃんとTailwindCSSが効いていることが確認できました。

※上記のソースコードはこちらです。

本番ビルド時にpurgeされるようにする

ここからちょいハマりポイントです。

tailwind.config.jspurge の設定をしましたが、今のままでは ng build --prodをしても、未使用CSSをパージしてくれず、ビルド後のファイルサイズがめちゃくちゃデカくなってしまいます。

さっきの「にゃんこ一覧」では、ほとんどのTailwindCSSのクラスは使用していないのですが、ビルドすると 2.72MBになってしまいました。

これは TailwindCSS がデフォルトでは NODE_ENV=production となっている場合にパージが走るようになっており、Angularも特にprodビルドならパージさせる、みたいなことはしていないため、結局未使用CSSがパージされずファイルサイズが大きくなってしまったのでした。

なので、ng build --prodを次のように実行したり、

package.jsonに書いちゃうのも手です。

NODE_ENV=productionを設定した状態でビルドをすると、ちゃんとファイルサイズが小さくなっていることを確認できました。

ちなみに、angular-cliにもissueが上がっているので、もしかしたらどこかのバージョンからは、この手順が必要なくなるかもしれません。

おまけ

VS Code拡張機能であるTailwind CSS IntelliSenseはあると便利、というか必須のプラグインです。

もし入れていない人は入れてみましょう。

まとめ

以前に比べてかなり簡単にTailwindCSSを使えるようになっていました!

TailwindCSSはAngular MaterialやBootstrapのようなUIコンポーネントライブラリとは違いますが、それらとの併用も可能で、なによりとても便利です。

これを機会にぜひ使ってみてください!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です