世界を動かす技術を、日本語で。

Tailwind PlusのバニラJavaScriptサポート

概要

  • Tailwind Plus のUIブロックが JavaScript不要 で利用可能に
  • @tailwindplus/elements としてカスタム要素ライブラリを提供
  • React/Vue不要 でどんなプロジェクトにも組み込み可能
  • アクセシビリティ・インタラクション も自動でサポート
  • 最新Web標準 を活用しつつ幅広いブラウザ対応

Tailwind PlusのUIブロックがJavaScript不要で使える新時代

  • Tailwind Plus の多くのUIブロック(ダイアログ、ドロップダウン、コマンドパレット等)は、これまで 複雑なJavaScript実装が必要
  • ReactやVue のユーザー以外にとっては導入のハードルが高い状況
  • 本日より、 全てのUIブロックが完全な機能性・アクセシビリティ・インタラクション を持つように進化
  • プレーンなHTML例 も含め、どんなプロジェクトでも JavaScriptフレームワーク不要 で利用可能
  • ドロップダウン、コマンドパレット、ダイアログ、ドロワー等、 どのUIも即座に導入可能

@tailwindplus/elementsとは

  • @tailwindplus/elements はTailwind Plus専用の カスタム要素ライブラリ
  • Headless Custom Elements による実装で、 HTMLだけで高度なUI構築 が可能
  • ユーティリティクラスやカスタムCSS で自由にスタイリング
  • 特定のJavaScriptフレームワークに依存しない ため、どんな環境でも利用可能
    • <script src="https://cdn.jsdelivr.net/npm/@tailwindplus/elements@1" type="module"></script>をHTMLに追加するだけ

主要なカスタム要素の使い方例

  • <el-dropdown><el-menu>カスタムドロップダウンメニュー を実装
  • <el-select><el-options>カスタムセレクトボックス を構築
  • <el-dialog><el-command-palette>コマンドパレットやモーダルダイアログ を実現
  • これらの要素は ARIA属性管理、フォーカス制御、キーボード操作 なども自動対応

Elementsで提供される主要プリミティブ

  • Autocomplete :カスタムコンボボックス等の実装
  • Command Palette :コマンドパレットの構築
  • Dialog :モーダルダイアログ、ドロワー等の実装
  • Disclosure :FAQやナビゲーションバーのモバイルメニュー等
  • Dropdown menu :カスタムドロップダウン
  • Popover :フライアウトメニュー等
  • Select :カスタムセレクトメニュー
  • Tabs :タブUI(テキストエリアや商品概要など)

最新Web標準の活用

  • Custom Elements でクロスプラットフォームなコンポーネント抽象化
  • popover属性 でオーバーレイ管理、 beforetoggle でトランジション制御
  • ネイティブ<dialog>要素 でフォーカストラップ&トップレイヤーレンダリング
  • Invokerコマンド でディスクロージャ等のインタラクションを宣言的に管理
  • ElementInternals でカスタムフォームコントロールのネイティブ互換性確保
  • 必要な Polyfill も同梱し、Tailwind CSS v4.0対応ブラウザ全てで動作保証

どの環境でも動作するコンポーネント

  • HTMLが全てのWebフレームワークの共通基盤 であることを活用
  • Elements によって、どんなプロジェクト・技術スタックでも 高度なUIが簡単に導入可能
  • Tailwind Plus ユーザーは Elementsドキュメント で詳細や実例を確認可能

Tailwind Plus のUIブロックは、 @tailwindplus/elements によってあらゆるプロジェクトで 簡単・安全・アクセシブル に使える時代に突入。今後も Web標準の進化 とともに、より軽量・高機能なUI体験を提供予定。

Hackerたちの意見

「Elementsを使えば、カスタムコマンドパレットみたいな高度なものも作れるよ。」そうそう、あれを実現するための機能が追加されたからね。

これはカスタム要素の面白い使い方だね。最初からTailwindはこういう風に実装されるべきだったと思うけど、まさか有料機能とは!(https://tailwindcss.com/plus#pricing) 直感的には、カスタム要素は無料で、フレームワークの統合が有料になると思ってた。

Tailwind Plusは、有料のUIコンポーネントとテンプレートのコレクションなんだ。TailwindCSS自体は、Bootstrapみたいなスタイリングツールに過ぎないよね。

うん、これが有料になるのは変な感じだね。ウェブ開発の世界では、ほとんどのものが無料なのに、UIフレームワークに縛られてサブスクリプションを払い続けるなんて、ちょっと無茶だよね。まるでPostgresが月額料金を要求してくるみたい。編集:今見たら、彼らの価格設定は一回限りの永久アクセスなんだね。それでも、このモデルがどれだけうまくいくのか、本当に気になる。

もう一つ面白い有料機能は、https://sso.tax/ なんだけど、ユーザーにとっては直感的じゃないから笑えるよね。でも、それは意図的なんだ。彼らは、開発者が製品にかなり投資した後に決断を促すポイントを探してるんだ。

ありがとう!これは有料機能なんだ。ライブラリの開発に約25万ドルかけたからね。もしただ無料で配って、ずっとメンテナンスするつもりだったら、作れなかったよ。うちのエンジニアは優秀な人たちで、ちゃんと報酬をもらうべきだと思う。

標準ベースのウェブコンポーネントを使ってるみたいだね[0]。ページには、これらのコンポーネントは既存のJavaScriptフレームワークを必要としないって書いてある。ブラウザにウェブコンポーネントのサポートが組み込まれてるから。開発者がウェブコンポーネントを取り入れてるのを見るのは嬉しいね。[0]: https://developer.mozilla.org/en-US/docs/Web/API/Web_compone...

これが実現するまでにすっごく時間がかかったな。数年前、互換性を気にせずに個人的なプロジェクトでウェブコンポーネントをいじってたのを思い出すよ。メインストリームのライブラリがやっと取り入れ始めたのは嬉しいね。

うちの会社の広告コードではウェブコンポーネントを使ってるけど、個人的にはかなりがっかりしてる。コード実行を簡単にトリガーできるけど、APIがあんまり良くないんだよね。

2014年頃にPolymerをいじってたのを思い出すな。なぜか「トランスクリュージョン」って言葉が頭に浮かんでくるけど、その時はワクワクしてた記憶があるよ。今はその意味をほとんど忘れちゃったけどね。

12年間これを言い続けてる…12年、マジで。Reactの卒業生たちは俺を変な目で見るし、Angularの開発者は必要ないって言うし、Svelteの兄弟たちは「消えろ」って感じ。誰かが注目してくれてるのが嬉しいよ。シャドウDOMはいらないし、単純な値が変わったときに全てを再レンダリングする必要もない。ウェブコンポーネントとスコープ付きのjs/ts、viteか使ってるロールアップがあれば十分だよ。

誰かがTailwindの人たちにお金をドンと投げて、彼らが金銭面を心配せずにフルTailwind体験を無料で提供できるようになったら、世界はもっと良くなると思う。他のプロジェクトとの深い統合のチャンスがたくさん失われてるし。まるでジェフ・ベゾスが37signalsにすごい評価額でお金を投げたみたいで、それが彼らをVCの罠から完全に救ったんだよね。

「フルTailwind体験」はもう無料で手に入るよね。フロントエンドのCSSフレームワークが「深い統合の機会を失っている」って、具体的に何があるの?Tailwind Plus(商業製品)は、既製のテンプレートを買うようなもので、テーマやプリビルドのコンポーネントの集まりなんだ。プロジェクトをすぐに始めたい開発者には便利だけど、型にはまったもので、Tailwindを持っている人なら誰でも簡単に再現できちゃう。

他のプロジェクトとの深い統合の機会がたくさん失われてるよね。どんな統合を考えてるの?

お金の心配してる?彼らはもう夢のように裕福だよ。成長や拡大、もっと大きな会社を作ることにワクワクしてるけど、それはお金のためじゃなくて、彼らの野心によるものだと思う。追記:アダムたちのことは代弁できないけど、これは私の印象ね。彼らはtailwind(オープンソースプロジェクト)の一部としてビジネスを作りたいと思ってるんじゃないかな。銀行口座の残高に関係なく、収益を生むプロジェクトを持ちたいと思ってると思う。Laravelが良い例だね。

ジェフ・ベゾスが37signalsにお金を投げたみたいな感じだよね。正直、37Signalsは創業者が誰かに報告する人がいた方が良かったんじゃないかなって思う。

ちょっと混乱してるんじゃない? Tailwindはもう無料でオープンソースだよ? これは時間を節約するために事前に作られたコンポーネントを販売してるだけで、フル体験を損なうことは全然ないよ。

ちなみに、AIでtailwindコンポーネントを簡単に生成できるようになったから、彼らのコンポーネントにはお金を払いたくなくなった気がする。考えてみると、Tailwind UIって呼ばれてた頃に実際にお金を払ったことがあるけど、今はそれを使う代わりにclaudeにUIを生成させてるんだ。ライセンスの問題がないのがメリットだし、今後彼らのビジネスがどうなるか興味深いね。

これが本当にtailwindの無料ユーザーにも欲しい機能なんだ。めっちゃ興味深いのに、試すこともできないの?残念だな。でも、オープンソースの資金調達が簡単じゃないのは理解してるし、嫌われることもあるけど、心からtailwindに感謝してる。選択肢があるのが嬉しい(daisyやtailwindとか)。もしオープンソースに貢献したことがある人がこれを読んでたら、ありがとう。私は本当に倹約家だけど、いつかためたお金をためらわずに寄付できるようになりたいし、オープンソースの貢献者にもなりたいな。

正直、あんまり期待しない方がいいよ。昔はVueもサポートしてたけど、今はほぼ放置状態だし。

それに、消えちゃったfigmaのデザインライブラリもあったよね。デザイナーを同じページに合わせたいなら、ちょっと馬鹿げてるよね。

これは理由があってのtailwindcssだよね。

これはVueのサポートだね。たくさんのフレームワークがある中で、全部にカスタムラッパーを作るのは現実的じゃないよ。ウェブコンポーネントを使えば、一度作ればどこでも使えるからね。あとはフレームワーク側が素晴らしいウェブコンポーネントのサポートを確保するだけだね(つまり、素晴らしいHTMLサポートってこと)。

Vueは素晴らしいウェブコンポーネントのサポートがあるよ。React 19も(やっと!)そうだし。ウェブコンポーネントはごちゃごちゃしてるけど、これはその素晴らしい応用例だね:すべてのフレームワークで使える再利用可能なコンポーネントを提供すること。これがウェブコンポーネントの唯一無二のキラーアプリケーションだよ。正直、これを「バニラJavaScript用」としてマーケティングしてるのには驚いたし、「すべてのフレームワークをサポート」として売り出さないのが不思議だね。

これって、tailwindcss plusのカスタムブロック要素からalpinejsを外す動きなのかな? コードスニペットにはもうalpinejsが見当たらないよ。編集: 確認したけど、コピー&ペーストできるコードからalpineが削除されたみたい。これ、マジで残念。ずっとalpine使ってたのに、例をコピー&ペーストできなくなっちゃったよ~_~

素晴らしいね。冗長さは置いといて、CSSを知ってるだけじゃなくて、クラス名の中に別の階層的なシステムを学ばなきゃいけないのか。

そうだね、何が起こってるかをちゃんと見られるのはいいよね。脆弱なCSSのカスケードに潜り込む必要がないのが助かる。

なんかjQueryっぽい感じがする、いいね。

せめてこの呪われたプロジェクトに何か良いことがあったってコメントしに来たんだけど…考え直させられたわ。

グループはいいね。子要素が親要素に効果を発動させることができる。ホバーすると、広範囲のことにJSがいらなくなる。

実際のプロジェクトでは、クラスを読みやすくグループ化することが多いんだ、こんな感じで:...今は手動でやってるけど、こういうフォーマットを自動化するツールがあったらいいな。

フロントエンド開発は、何が問題なのかをちゃんと理解するまで、完全にストップするべきだと思う。

どうしてこれを見て「うん、いいクリーンコードだな」って思えるのか全く理解できない。Tailwindがこんなに人気になったのはどういうこと?普通のCSSを学んだ方がいいよ。今は本当に良いから。

Tailwindは「Bourbon on Steroids」みたいなユーティリティクラスのCSSフレームワークとして、いい意図で始まった気がするんだけど、人々がそのプロトタイプやサンプルコードを思った以上に受け入れて使い始めたんだよね。それで、どんどん広まった。2018年にTailwindを見つけて、かなり大きなプロジェクトをリニューアルしようとしているチームに紹介したのを覚えてる。最初に提案したのは、Bourbonみたいに扱って、Tailwindのユーティリティを基にしたクラスを書くことだった。そうすれば、HTMLの中に意味不明なクラスがなくても、.button.button-primary.button-primary__accentみたいなものが持てるから。でも、Tailwindを読んでみたら、チームはプリビルドクラスを書いて進める方がずっと簡単だと感じたみたい。それでうまくいったし、コードの書き方にこだわらなければ、整合性もあった。なんか、レスポンシブデザインの時代の前の「Pixel Perfection」を思い出す。あの頃は、Photoshopでデザインした通りに見えて、プレゼンの時にクライアントに印刷して見せてたから。

これ素晴らしいね。前にこのUIコンポーネントの世界を見たとき、人気のUIライブラリが基本的に「ヘッドレス」じゃないことに驚いたんだ。ウェブコンポーネントはもう長いことあるのに、何がこのアプローチを妨げてたんだろう? shadcnみたいなフレームワーク特有のライブラリがたくさんあって、コミュニティはVueみたいな異なるフレームワーク用に未完成の変換を作り始めるけど、いつも数世代遅れでちゃんと動かないんだよね。彼らは独自のドキュメントを持ってて、特定のVueのバージョンやTailwindのバージョンに依存してる。ほんとにひどいよ。ヘッドレスUIを基本にして、特定のフレームワーク用のラッパーを作ればいいと思うけど、ラッパーはただのシンタックスシュガーで、基本ライブラリに直接リンクするべきだよね。もっと複雑なことがあるのは分かってるけど、夢見るのは自由だよね。

簡単に言うと、ReactやVue、Svelteみたいなものを使ってるなら、Web Componentsはバンドルサイズやランタイムオーバーヘッドの面で厳しい負担になる。で、両者の間にインピーダンスミスマッチがあると、特にReactではよくあるらしいけど(個人的には使ってないから分からないけど)、機能性や使いやすさで妥協しなきゃいけなくなる。そうなると、Web Componentsを使う意味がなくなるよね。サーバーサイドレンダリングみたいなフレームワークのもう少し進んだ部分ともあまりうまくいかないことが多いし、やり方によっては影響が出るかも。Reactが主流の世界で、Reactを使いたいなら、Web Componentsをターゲットにするのは意味がない。しかも「ヘッドレス」だとさらに悪化する。もっと包括的な実装は、かなりのオーバーヘッドがあるからね。

Tailwindを使う理由がまだ分からないんだよね。別に嫌いってわけじゃないけど、CSSで必要なことは全部できるし、結構複雑なスタイリングやアニメーションもCSSでやってる。なんか、Tailwindが邪魔になって、結局普通のCSSに戻っちゃうことが多いんだよね。そうなると、TWはHTMLの中の別のスタイルソースになっちゃう。