Tailwind CSS Bootstrap どっち?

Tailwind CSS vs. Bootstrap:どちらがあなたのプロジェクトに適しているか?

ウェブデザインの世界では、Bootstrap や Tailwind CSS などの CSS フレームワークは、開発者が美しくレスポンシブなウェブサイトを迅速に構築するための強力なツールを提供しています。しかし、これら 2 つのフレームワークにはそれぞれ長所と短所があり、どちらを選択するかはプロジェクトの具体的なニーズによって異なります。この記事では、Tailwind CSS と Bootstrap の違いを掘り下げ、最適なフレームワークを選択するお手伝いをします。


1. プロジェクトの規模とデザイン要件

Tailwind CSS:

利点:

  • 柔軟性が高く、デザインの細部まで簡単にカスタマイズでき、独自の外観を実現できます。
  • 軽量でコード量が少なく、极致なパフォーマンスを追求する小規模プロジェクトに適しています。
  • 学習曲線が比較的緩やかで、習得しやすいです。

適用场景:

  • 個人プロジェクト
  • 小規模ウェブサイト
  • 独自のデザインと极致なパフォーマンスを追求するプロジェクト

Bootstrap:

利点:

  • 定義済みスタイルが豊富で、ページ構造や一般的なコンポーネントをすばやく構築できます。
  • 大規模なコミュニティサポート、豊富な学習リソース、既製のテンプレートがあります。
  • 大規模プロジェクトに適しており、デザインの一貫性を維持しやすいです。

適用场景:

  • 大規模プロジェクト
  • 迅速な開発が必要なプロジェクト
  • デザインの一貫性とチームコラボレーションを重視するプロジェクト

2. 開発速度と柔軟性

Tailwind CSS:

利点:

  • ユーティリティファーストの CSS クラスを直接使用するため、コーディング速度が速いです。
  • 柔軟性が高く、クラス名を自由に組み合わせて、さまざまなデザイン要件を実現できます。

劣势:

  • 多数のクラス名を学習して習熟するのに時間がかかります。
  • 使いすぎると HTML コードが冗長になる可能性があります。

Bootstrap:

利点:

  • 定義済みコンポーネントが豊富で、ページをすばやく構築でき、開発時間を節約できます。
  • 使い方が簡単で、学習曲線が緩やかです。

劣势:

  • カスタマイズの自由度が限られており、独自のデザインを実現するのが難しい場合があります。
  • 大量の冗長コードが導入され、ページの読み込み速度に影響を与える可能性があります。

3. 学習曲線とコミュニティサポート

Tailwind CSS:

学習曲線:

  • 習得は容易ですが、多数のクラス名とベストプラクティスに慣れるには時間がかかります。
  • 公式ドキュメントが詳細で、コミュニティが活発なため、助けを求めやすいです。

Bootstrap:

学習曲線:

  • 学習と使用が簡単で、定義済みコンポーネントとスタイルが豊富です。
  • 大規模なコミュニティと豊富な学習リソースがあり、問題を解決しやすいです。

4. まとめ

Tailwind CSS と Bootstrap のどちらを選択するかは、プロジェクトのニーズによって異なります。

特徴 Tailwind CSS Bootstrap
デザインの柔軟性 非常に高い 低い
開発速度 速い(慣れが必要) 速い
パフォーマンス 非常に良い 良い
学習曲線 中程度 低い
コミュニティサポート 良い 非常に良い
  • デザインの独自性、极致なパフォーマンス、迅速な開発を追求する場合: Tailwind CSS を選択します。
  • 開発速度、デザインの一貫性、チームコラボレーションを重視する場合: Bootstrap を選択します。

最終的には、具体的なニーズとプロジェクトの目標に基づいて最適なものを選択する必要があります。

Tailwind CSSは、正直わりと流行っているらしい

ところで、ここ1年で急速に伸びてきたCSSフレームワークに、「Tailwind CSS」というものがあるみたいです。
まぁ時々聞く名前…といった印象ですが、実際の所どうなんでしょうか?

ということで、こちらがGoogleトレンド検索です。(2022年11月)

a.JPG

うげぇ!!! この一年でTailwindがBootstrapを抜き去っています!
こうなってしまうと、やはり少しは勉強しといたほうがよさそうですね。

Tailwind CSSの導入方法

何にもわかりませんがさっそく使ってみたいので、どうやったらTailwindが使えるのか教わりに行きます。
公式の解説ページはこちらでした。

https://tailwindcss.com/docs/installation

導入方法は以下が紹介されています。雑にcssとjsを持ってきて入れればいい従来のCSSテンプレートとは違って、デプロイの時にコンパイルっぽいことをするのがTailwindの特徴のようですね。ただCDNも最近使えるようになったらしく、手軽に使うこともできそうです。

Tailwind CLI

既存のオリジナルCSSにディレクティヴを記載したあと、それと合体したCSSをCLIで生成する。
で、生成したCSSをHTMLで読ませる、という方法。
生成は通常Node.jsで実行するが、Node.jsが無い環境用の実行ファイルも公式配布している。

Using PostCSS

PostCSSというサービスを使っている場合は、それと競合しないようにCSSを作成できる。

Framework Guides

今どきのフレームワークを使ってる場合は、そのフレームワークのビルドのコマンドで一緒にCSSを生成して適用できます。
Next.js、Nuxt.js、React、Laravelなど、メジャーどころが揃ってそうです。
キャプチャ.JPG

Play CDN

CDNに置いてある出来合いのCSSファイルを参照させて使うこともできます。
お手軽に使いたい人はこちらですね。

Tailwind CSSをBootstrapと比較していく

さて、Tailwindはとりあえずどんなプロダクトにも適用できそうだな~というのを確認できたところで、さっそく流行の最先端をお手軽CDNで味見していきましょう。実際に当てるCSSクラスを一個ずつ見ていって、少しだけTailwindのことを分かった気分になっていきたいと思います。
しかしながら、でも別にBootstrapでいいんだけどな~、というTwitter過激派の方も多いことでしょう。僕がそうです。なので今回、似たようなコンポーネントを両方で作ってみて、どう違うのかな?というのも一緒に見ていくことにしました。
そんなに色々用意できたわけではありませんが、両者のノリと雰囲気の違いみたいなものが掴めるとよいかと思います。

小さいパーツの例

ボタンをピンクにして丸っこくしてクリックしたときの囲みを消したものを並べてみました。
左のボタンはBootstrapで作れますが、右はちょっと難しいはずで、Tailwindの良さが出ています。

<button class="rounded-full bg-blue-500 py-2 px-4 text-white 
        hover:bg-blue-700 active:ring-2 ring-offset-2">
  Button
</button>

当てたクラスの説明はこんな感じです。

Tailwindのclass 説明 公式doc
rounded 角がまるくなる https://tailwindcss.com/docs/border-radius
rounded-full 角がすごくまるくなる https://tailwindcss.com/docs/border-radius
bg-blue-500 背景青、濃さ500(大きいほど濃い) https://tailwindcss.com/docs/background-color
py-2 y方向のパディングが2 https://tailwindcss.com/docs/padding
px-4 x方向のパディングが4 https://tailwindcss.com/docs/padding
text-white 文字を白抜き https://tailwindcss.com/docs/text-color
active:xxx マウスクリック中に当てるCSSクラス https://tailwindcss.com/docs/hover-focus-and-other-states
hover:xxx マウスオーバー時に当てるCSSクラス https://tailwindcss.com/docs/hover-focus-and-other-states
focus:xxx クリック後(要素選択中)に当てるCSSクラス https://tailwindcss.com/docs/hover-focus-and-other-states
ring-2 囲み太さ2 https://tailwindcss.com/docs/ring-width
ring-offset-2 囲みオフセット2 https://tailwindcss.com/docs/ring-offset-width
<button type="button" class="btn btn-primary">Button</button>
Bootstrapのclass 説明
btn いつもの感じのボタン
btn-primary 青のやつ

こういった簡単な例ではさすがにBootstrapのお手軽さは光りますね。
ですが、お手軽であるがゆえに柔軟性が低く、トレードオフの関係と言えると思います。

<input class="w-full border border-gray-300 px-3 py-2 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" type="text" placeholder="Placeholder">

<select class="w-full border border-gray-300 px-3 py-2 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500">
  <option>Option 1</option>
  <option>Option 2</option>
</select>

<div class="relative">
  <select class="block appearance-none w-full border border-gray-300 px-4 py-2 pr-8 rounded-md leading-tight focus:outline-none focus:ring-2 focus:ring-blue-500">
    <option>Option 1</option>
    <option>Option 2</option>
  </select>
  <div class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700">
    <svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M9.292 12.95l.707.708L15.657 8l-1.414-1.414L10 10.828 5.757 6.586 4.343 8z"/></svg>
  </div>
</div>

上のInputとSelectはBootsrtapでできますが、3例目のような凝ったドロップダウンは難しいはずです。

Tailwindのclass 説明 公式doc
w-full 親要素の全幅に広げる https://tailwindcss.com/docs/width
border 枠を表示 https://tailwindcss.com/docs/border-width
border-gray-300 枠の色グレー濃さ300 https://tailwindcss.com/docs/border-color
focus:outline-none フォーカス時に外枠が出ないようにする(何か指定しないと枠が二重になる) https://tailwindcss.com/docs/outline-width
border-dashed 枠を点線にする https://tailwindcss.com/docs/border-style
border-b-2 枠を下だけ状態の太さ2にする。bはbottomのb https://tailwindcss.com/docs/border-width
<input type="text" class="form-control" placeholder="Placeholder" aria-label="Example text with button addon" aria-describedby="button-addon1">

<select class="form-select" aria-label="Default select example">
  <option selected>Open this select menu</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>
Bootstrapのclass 説明
form-control いつものインプット
form-select いつものドロップダウン

この例でも、Bootstrapのお手軽さは光りますね。一方、複雑なカスタマイズは難しいです。

大きいコンポーネント

ここまでやっぱりBootstrapでいいじゃんな…という気持ちになった方もいると思うので、やや大き目のパーツで見ていきたいと思います。

https://tailwindcomponents.com/component/tailwind-css-login-form-template

Tailwindのclass 説明 公式doc
lg:w-4/12 lgサイズでは幅を全体12として4の幅にする https://tailwindcss.com/docs/width
relative 要素を普通に並べていく(absolute要素で外枠になる) https://tailwindcss.com/docs/position
flex flex-col 子要素を縦並びにする https://tailwindcss.com/docs/flex-direction
break-words 単語の途中でも折り返す https://tailwindcss.com/docs/word-break
shadow-lg まぁまぁ大きめに影をだす https://tailwindcss.com/docs/box-shadow
rounded-lg まぁまぁ大きめに角丸にする https://tailwindcss.com/docs/border-radius
flex-auto フレックス内で自動でサイズ調整する https://tailwindcss.com/docs/flex
block テキスト内に混ざってても1要素として扱う https://tailwindcss.com/docs/display
inline-flex テキスト内にフレックス要素を埋め込むとき使う https://tailwindcss.com/docs/display
cursor-pointer マウスオーバー時カーソルがポインターになる https://tailwindcss.com/docs/cursor

https://getbootstrap.jp/docs/5.0/examples/sign-in/

Bootstrapのclass 説明
container グリッド整列使う時のベース
row 行ブロックの囲み
col-xx-N 画面サイズがxxならN/12の横幅を使う
mx-auto 水平方向のセンタリング
shadow 影あり
p-4 全方向のパディングを4に
fw-light fontのweightをlightにする
fs-5 fontのsizeを5
card カードビューを表示
card-body カードのメイン部分
card-title カードのタイトル部分
form-floating ラベルがinputと重なった感じになっていてフォーカスすると上に退くやつ
form-check チェック部分
form-check-input チェックボックス
form-check-label チェックの横のラベル

うん、いいですね。いいけど… なんかTwitterっぽくないですか?オシャレではあるんですが。

価格表示的なやつ

Tailwindのclass 説明 公式doc
overflow-hidden 中身入れすぎた場合はいらなかった部分は隠れる https://tailwindcss.com/docs/overflow
mx-auto 横位置オート(コンテナ) https://tailwindcss.com/docs/container
flex-wrap 収まりきらなかったら下へもっていく https://tailwindcss.com/docs/flex-wrap
-m-4 マージンがマイナス4 https://tailwindcss.com/docs/margin
tracking-widest 文字間隔すごく広く https://tailwindcss.com/docs/letter-spacing
leading-none 行間の高さを無しにする https://tailwindcss.com/docs/line-height
items-center 要素を中心線でそろえる  https://tailwindcss.com/docs/align-items
justify-center 要素を真ん中へもっていく https://tailwindcss.com/docs/justify-content
absolute right-0 top-0 絶対位置指定 右上ビタの位置 https://tailwindcss.com/docs/position

https://getbootstrap.jp/docs/5.0/components/card/

Bootstrapのclass 説明
card-header カードのヘッダー部分
w-100 幅100%
btn-lg 大きめのボタン

感想

Tailwind CSSのメリット

  • 柔軟性が高い: クラスを組み合わせることで、Bootstrapよりも自由度の高いデザインを実現できます。

  • モダンな開発環境との親和性が高い: ReactやVue.jsなどのコンポーネントベースのフレームワークと相性が良く、開発を効率化できます。

  • CSSの知識がなくても始めやすい: Tailwind CSSのクラス名は、CSSのプロパティに沿って直感的に理解しやすいものとなっています。

  • サイト全体のスタイルを統一しやすい: あらかじめ用意されたクラスを組み合わせていくため、デザイナーが意図しないスタイルが適用されることを防ぎます。

Tailwind CSSのデメリット

  • HTMLが冗長になりがち: 多くのクラスを記述する必要があるため、HTMLが見づらくなる可能性があります。

  • 学習コスト: Bootstrapと比べて、クラスの数が多い分、使いこなせるようになるまでには、ある程度の学習が必要です。

  • コンパイルが必要: 開発環境によっては、Tailwind CSSを使うために、ビルドプロセスに追加の設定が必要になります。

Bootstrapのメリット

  • すぐに使い始められる: CDNで読み込むだけで、簡単に利用できます。

  • HTMLがシンプル: Tailwind CSSと比べて、HTMLに記述するクラス名が少なく、簡潔に記述できます。

  • 豊富なコンポーネント: ナビゲーションバーやモーダルなど、Webサイトでよく使われるコンポーネントが豊富に用意されています。

Bootstrapのデメリット

  • 柔軟性が低い: 用意されたクラスだけでは、実現できないデザインがあります。

  • カスタマイズが難しい: 独自のスタイルを適用しようとすると、CSSの知識が深く求められる場合があります。

  • "Bootstrap感"が出やすい: Bootstrap特有のデザインは、多くのWebサイトで使われているため、オリジナリティを出すのが難しいと感じる場合があります。

まとめ:結局どっちを使うべき?

Tailwind CSSとBootstrap、どちらを使うべきかは、プロジェクトの規模や要件、チームのスキルセットなどによって異なります。

  • 小規模プロジェクトで、素早く開発したい場合、またはCSSの知識があまりない場合は、Bootstrapがおすすめです。

  • デザインの自由度を重視する場合、またはReactやVue.jsなどのモダンなフレームワークを使用する場合は、Tailwind CSSがおすすめです。

さいごに

この記事では、Tailwind CSSとBootstrapの比較を通して、それぞれのメリットとデメリットを解説しました。この記事が、CSSフレームワーク選びの参考になれば幸いです。

関連QA

Q1: Tailwind CSS はレスポンシブデザインに対応していますか?

A1: はい、Tailwind CSS はモバイルファーストの設計思想を採用しており、さまざまな画面サイズに合わせたユーティリティクラスが用意されています。そのため、レスポンシブデザインを簡単に実装できます。

Q2: Bootstrap と Tailwind CSS を一緒に使用できますか?

A2: はい、技術的には可能です。ただし、両方のフレームワークの設計思想やクラス命名規則が異なるため、競合や混乱が生じる可能性があります。一般的には、どちらか一方を選択することをお勧めします。

Q3: JavaScript フレームワークと組み合わせて Tailwind CSS や Bootstrap を使用できますか?

A3: はい、Tailwind CSS と Bootstrap はどちらも、React、Vue.js、Angular などの一般的な JavaScript フレームワークと組み合わせて使用できます。これらのフレームワーク向けに設計されたコンポーネントライブラリや統合ツールも多数あります。

その他の参考記事:

Bootstrap CSSの概要

bootstrap min css 3.3 7 download