【ITニュース解説】Wiretables: tables for Laravel and Livewire written in Blade
2026年10月05日に「Dev.to」が公開したITニュース「Wiretables: tables for Laravel and Livewire written in Blade」について初心者にもわかりやすく解説しています。
ITニュース概要
Wiretablesは、LaravelとLivewireで柔軟なテーブル表示を実現するライブラリだ。PHP配列ではなくBladeテンプレートでテーブルを記述し、セルごとに細かく設定できる。スマホ対応、ソート、無限スクロール、行アクションメニューなど多彩な機能を純粋なCSSで提供し、テーマも選択可能だ。
ITニュース解説
Wiretablesは、Webアプリケーション開発で人気のフレームワークであるLaravelと、動的なユーザーインターフェースを簡単に作れるLivewireを組み合わせて、魅力的で機能的な「表」を作るための新しいツールです。Webサイトやシステムでよく使う、ユーザー一覧や商品リストのようなデータを表示する「表」は、見た目を整えたり、並べ替え(ソート)や検索機能を追加したりと、意外と開発に手間がかかるものです。特に、スマートフォンなど様々な画面サイズに対応させようとすると、さらに複雑になります。
これまでのLivewire向けの表を作るパッケージの多くは、表の列(カラム)の定義をPHPというプログラミング言語の「配列」という形式で行うのが一般的でした。この方法は、シンプルな表を作る場合には便利ですが、特定のセルの内容を細かくカスタマイズしたり、表示するデータによって複雑なレイアウトを適用したい場合など、少し凝ったことをしようとすると、設定が難しくなったり、柔軟な対応がしにくくなることがありました。
Wiretablesは、このアプローチとは逆の考え方を取り入れています。開発者は、表の見た目や構造を、BladeというLaravelで使われるHTMLテンプレートの中で「セルごとに」直接記述します。これは、まるでHTMLで<table>タグや<td>タグを直接書くかのように、表の各部分を自由に配置できるということです。Wiretablesは、そうして記述された部品たちを基に、表として必要な機能やデザインを自動的に提供してくれます。例えば、モバイル端末で表示する際に列を隠したり、カード形式に変換したり、ヘッダーをクリックしてデータを並べ替えたり、「もっと見る」ボタンで追加データを読み込んだり、行ごとに操作メニューを表示したりといった、多くの表に共通して求められる機能が簡単に実現できます。しかも、デザインのベースは純粋なCSSで作られているため、特定のCSSフレームワーク(例えばTailwind CSSやBootstrapなど)に依存せず、どんなプロジェクトにも組み込みやすいという利点があります。
Wiretablesの導入は非常に簡単です。Laravelプロジェクトに新しい機能を追加する際に使うComposerというツールを使って、edulazaro/wiretablesというパッケージをインストールし、必要なCSSファイルを公開するだけで準備が整います。その後、Webページの見た目を制御するCSSファイルをプロジェクトに読み込むことで、Wiretablesのデザインが適用されます。複数のテーマが用意されており、それぞれのテーマが独立したファイルになっているため、必要なテーマだけを読み込むことができ、無駄にCSSファイルのサイズが大きくなることを防ぎます。行ごとのメニュー機能は、Livewireに標準で含まれているAlpine.jsというJavaScriptライブラリとそのプラグインを利用しているため、特別な設定は不要です。
実際にWiretablesで表を作る際には、<x-wiretable>という専用のHTMLカスタムタグのようなコンポーネントを使います。このコンポーネントの中に、表のヘッダー部分を定義する<x-slot:head>と、実際のデータを行ごとに表示するループ処理(@forelse)を記述します。各列の見出しは<x-wiretable.th>を使い、各データのセルは<x-wiretable.td>を使います。例えば、<x-wiretable.th hide="sm" shrink>と書けば、「Event」という見出しの列がスマートフォン(sm)の画面サイズで非表示になり、内容に合わせて幅が縮小されるようになります。また、<x-wiretable.primary>のような特別なコンポーネントを使って、特定のセルに主となる情報とサブ情報をまとめて表示し、リンクを設定するといった、よりリッチな表現も可能です。
Wiretablesは、異なる画面サイズへの対応に特に優れています。例えば、<x-wiretable.th hide="md">のようにhide属性を設定すると、中程度の画面サイズ(md)よりも小さい画面ではその列が自動的に非表示になります。このsmやmdといったサイズ指定は、Webデザインでよく使われるTailwind CSSと同じ基準が採用されています。スマートフォンで表示しきれない情報がある場合、単にスクロールさせるのではなく、最初のセルに隠れた情報を繰り返して表示するなどの工夫で、ユーザーが情報を漏らさず確認できるように配慮されています。さらに高度なモバイル対応として、<x-wiretable stack="md" expandable>のようにstack属性とexpandable属性を使うと、中程度の画面サイズより小さい場合、通常のテーブル形式ではなく、各行が独立した「カード」のような形式に変換されます。それぞれのカードの中では、データが縦に積み重ねて表示され、非表示になっていたセルは「展開」ボタンをクリックすることで表示されるようになります。これにより、小さな画面でもすべての情報が分かりやすく提示されます。
データの並べ替え(ソート)機能も非常に強力です。表のヘッダーをソート可能にするには、<x-wiretable.th sortable="date" :sort="$sort" :direction="$direction">のようにsortable属性と、現在のソート状態を示す$sort、並び順を示す$directionという値を渡すだけで実現できます。Livewire側では、WithSortingという特別な機能(トレイト)を使うことで、このソート機能を簡単に組み込めます。このトレイトは、現在のソート状態と並び順をURLに自動的に保持するため、ページを再読み込みしてもソート状態が失われません。さらに、昇順、降順、そして初期状態へと順番に切り替わり、ソート条件が変更された際には自動的に最初のページに戻るなど、ユーザーフレンドリーな挙動を提供します。セキュリティにも配慮されており、ソート対象として許可されたカラムのみが受け付けられるように設定できます。
大量のデータを扱う場合、ページを切り替えて表示する「ページネーション」の代わりに、スクロールに応じて新しいデータを次々と読み込む「もっと見る(Load More)」機能も提供されています。WithLoadMoreというトレイトを使用し、<x-wiretable.load-more :show="$hasMore" />というボタンを配置するだけで、この機能を実現できます。この仕組みは、すでに読み込んだデータをスキップするのではなく、常に最初のページから現在読み込んでいる分までのデータを再取得することで、途中でデータが追加されたり削除されたりしても、表示されるデータに重複や漏れがないように工夫されています。また、一度に読み込める行数には上限が設けられており、クライアント側からの不正な大量データ要求を防ぐセキュリティも考慮されています。
各行に関連する操作(編集、削除、詳細表示など)を提供するための「行アクションメニュー」もWiretablesの魅力的な機能の一つです。これは、表のスペースをあまり取らない「⋯」(三点リーダー)のようなボタンとして表示され、クリックするとメニューが開きます。このメニューは、表がスクロールしても画面から切れることなく、常にユーザーの目に見える位置に表示されるように特別な技術が使われています。また、画面の下端近くで開く場合には自動的に上向きに表示位置を調整したり、メニューの外側をクリックしたりEscapeキーを押したり、あるいはメニュー項目を選択した場合には自動的に閉じるなど、使いやすさに配慮された設計です。メニュー項目は、リンクとして機能したり、特定のLivewireのメソッドを呼び出すボタンとして設定でき、「danger」属性を付けることで、元に戻せない操作に対して注意を促す赤いデザインを適用することも可能です。
Wiretablesは、他にもいくつかの便利なオプションを提供しています。例えば、rows="separated"属性を使うと、各行が独立したカードのように、それぞれに少し間隔を空けて表示されます。また、flush属性を指定すると、表の外枠が取り払われ、ダッシュボードのパネルの中など、表をより一体感のある形で配置したい場合に役立ちます。表の下部には「footer」スロットがあり、ページネーションの表示や合計値の表示、「もっと見る」ボタンなどを柔軟に配置できます。
デザイン面では、Wiretablesは11種類の豊富なテーマを用意しており、プロジェクトの雰囲気に合わせて簡単に選択できます。<html>タグにdata-wire-theme="studio"のようにテーマ名を指定するだけで、そのテーマが適用されます。さらに、data-wire-theme-mode="dark"を指定するか、親要素に.darkクラスを適用することで、ダークモードにも対応します。もし既存のテーマに満足できない場合でも、CSSのカスタム変数(--wtb-text、--wtb-lineなど)を上書きするだけで、フォントの色や線の色、角の丸みといった細かい部分まで、簡単に自分好みのデザインにカスタマイズできます。これは、Wiretablesが特定のCSSフレームワークに依存せず、純粋なCSSで作られているからこそ可能な柔軟性です。
もし、各レコードを列ではなく、完全に独立したカード形式で表示したい場合には、「Wirelist」というWiretablesをベースにした別のパッケージも利用できます。WirelistはWiretablesと同じ見た目やメニュー、ロードモア機能を提供し、柔軟なリスト表示を実現します。
Wiretablesは、LaravelとLivewireを使ったWebアプリケーション開発において、動的で複雑な表を効率的に、そして柔軟に作成するための強力なツールです。従来のPHP配列による定義の限界を超え、Bladeテンプレートの自由度を最大限に活用することで、開発者はより直感的かつ詳細に表の見た目や挙動を制御できます。レスポンシブデザイン、ソート、ロードモア、操作メニュー、テーマといった多岐にわたる機能が標準で提供されるため、システムエンジニアを目指す初心者であっても、少ない労力でプロフェッショナルなユーザーインターフェースを構築できるようになります。このパッケージを活用することで、Webアプリケーションの品質向上と開発効率の大幅な改善が期待できます。